All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unlaxer.SymbolMap Maven / Gradle / Ivy

package org.unlaxer;

import org.unlaxer.util.SimpleBuilder;

public enum SymbolMap{
  crlf(0x21b2,13,10),
  tab(0x21a6,9),
  lf(0x21e3,10),
  cr(0x21e0,13),
  ;
  public int[] codes;
  public int arrowSymbol;

  private SymbolMap(int arrowSymbol,int...codes) {
    this.codes = codes;
    this.arrowSymbol = arrowSymbol;
  }
  public static String replaceSymbol(String original , SymbolMap lineTerminator) {
    if(lineTerminator == tab) {
      throw new IllegalArgumentException();
    }
    StringBuilder buillder = new StringBuilder();
    int[] codePoints = original.codePoints().toArray();
    
    int codePointCount = codePoints.length;
    for (int i = 0; i < codePointCount; i++) {
      int codePointAt = codePoints[i];
      if(codePointAt == tab.codes[0]) {
        buillder.appendCodePoint(tab.arrowSymbol);
      }else if(codePointAt == lf.codes[0]) {
        buillder.appendCodePoint(lf.arrowSymbol);
        for(int code:lineTerminator.codes) {
          buillder.appendCodePoint(code);            
        }
      }else if(codePointAt == cr.codes[0]) {
        if(codePointCount-1!=i && codePoints[i+1] ==lf.codes[0]) {
          buillder.appendCodePoint(crlf.arrowSymbol);
          i++;
        }else {
          buillder.appendCodePoint(cr.arrowSymbol);
        }
        for(int code:lineTerminator.codes) {
          buillder.appendCodePoint(code);            
        }
      }else {
        buillder.appendCodePoint(codePointAt);
      }
    }
    return buillder.toString();
  }
  
  public static Source replaceSymbol(Source original , SymbolMap lineTerminator) {
    if(lineTerminator == tab) {
      throw new IllegalArgumentException();
    }
    SimpleBuilder buillder = new SimpleBuilder();
    int[] codePoints = original.codePoints().toArray();
    
    int codePointCount = codePoints.length;
    for (int i = 0; i < codePointCount; i++) {
      int codePointAt = codePoints[i];
      if(codePointAt == tab.codes[0]) {
        buillder.appendCodePoint(tab.arrowSymbol);
      }else if(codePointAt == lf.codes[0]) {
        buillder.appendCodePoint(lf.arrowSymbol);
        for(int code:lineTerminator.codes) {
          buillder.appendCodePoint(code);            
        }
      }else if(codePointAt == cr.codes[0]) {
        if(codePointCount-1!=i && codePoints[i+1] ==lf.codes[0]) {
          buillder.appendCodePoint(crlf.arrowSymbol);
          i++;
        }else {
          buillder.appendCodePoint(cr.arrowSymbol);
        }
        for(int code:lineTerminator.codes) {
          buillder.appendCodePoint(code);            
        }
      }else {
        buillder.appendCodePoint(codePointAt);
      }
    }
    return buillder.toSource();
  }
  
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy