/**
* Copyright (C) 2013-2016 The Rythm Engine project
* for LICENSE and other details see:
* https://github.com/rythmengine/rythmengine
*/
package org.rythmengine.internal.parser.build_in;
import org.rythmengine.internal.IContext;
import org.rythmengine.internal.Token;
import org.rythmengine.internal.parser.ParserBase;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* The StringToken probe grab plain texts (no special token at all)
*/
public class StringTokenParser extends ParserBase {
public StringTokenParser(IContext context) {
super(context);
}
/*
* ([^@]+((@[^@]+?)
*/
private static final String PTN = "(%s%s.*?|.*?)([\\n\\r@\\<\\#\\$\\&\\{\\}\\-\\*\\/].*|$)";
@Override
public Token go() {
IContext ctx = ctx();
String s = ctx.getRemain();
if (s.length() == 0) {
return Token.EMPTY_TOKEN;
}
String a = a();
Pattern p = Pattern.compile(String.format(PTN, a, a),
Pattern.DOTALL);
Matcher m = p.matcher(s);
if (!m.matches()) {
return null;
}
s = m.group(1);
if (s.length() == 0) {
return null;
}
ctx.step(s.length());
s = s.replace(String.format("%s%s", a, a), a).replace("\\", "\\\\");
if ("".equals(s)) {
return Token.EMPTY_TOKEN;
} else {
return new Token.StringToken(s, ctx);
}
}
}