de.neuland.jade4j.lexer.Scanner Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jade4j Show documentation
Show all versions of jade4j Show documentation
Java implementation of the jade templating language
package de.neuland.jade4j.lexer;
import java.io.BufferedReader;
import java.io.LineNumberReader;
import java.io.Reader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
public class Scanner {
private String input;
public Scanner(Reader reader) {
initFromReader(reader);
}
public Scanner(String input) {
this.input = input;
}
public void consume(int length) {
input = input.substring(length);
}
public String findInLine(String re) {
Pattern pattern = Pattern.compile(re);
Matcher matcher = pattern.matcher(input);
if (matcher.find(0)) {
int end = matcher.end();
return input.substring(0, end);
}
return null;
}
private void initFromReader(Reader reader) {
try {
StringBuilder sb = new StringBuilder();
LineNumberReader in = new LineNumberReader(reader);
String s = "";
boolean first = true;
// int c = 0;
// while ((c = in.read()) != -1) {
// if(c != '\uFEFF' && !first) {
// sb.append((char) c);
// }
// first = false;
// }
while ((s = in.readLine()) != null) {
if(!first) {
sb.append("\n");
}else{
s = s.replaceAll("^\\uFEFF", "");
}
first=false;
if (StringUtils.isNotEmpty(s)) {
sb.append(s);
}
}
input = sb.toString();
if (StringUtils.isNotBlank(input)) {
input = sb.toString().replaceAll("\\r\\n|\\r", "\\n");
}
in.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public char charAt(int i) {
return input.charAt(i);
}
public boolean beginnsWithWhitespace() {
return (input.charAt(0) == ' ' || input.charAt(0) == '\t');
}
public boolean isNotEmpty() {
return StringUtils.isNotEmpty(input);
}
private boolean isEmpty() {
return !isNotEmpty();
}
public boolean isNotLineBreak() {
return isEmpty() || input.charAt(0) != '\n';
}
public String getPipelessText() {
int i = input.indexOf('\n');
if (-1 == i)
i = input.length();
String str = input.substring(0, i);
consume(str.length());
return str.trim();
}
public String getInput() {
return input;
}
public Matcher getMatcherForPattern(String regexp) {
Pattern pattern = Pattern.compile(regexp);
return pattern.matcher(input);
}
public boolean isIntendantionViolated() {
return input != null && input.length() > 0
&& (' ' == input.charAt(0) || '\t' == input.charAt(0));
}
public boolean isBlankLine() {
return input != null && input.length() > 0 && '\n' == input.charAt(0);
}
public boolean isAdditionalBlankline() {
return input.length() > 2 && input.charAt(0) == '\n' && input.charAt(1) == '\n';
}
}