context.pop();
}
}
private void content(boolean skip) {
Token token = tokenStream.currentToken();
context.notifyProcessListener(token, skip ? Action.SKIP : Action.EVAL);
if (token instanceof PlainTextToken) {
tokenStream.consume();
if (!skip) {
output.append(token.getText());
}
} else if (token instanceof StringToken) {
tokenStream.consume();
if (!skip) {
String expanded = (String) token.evaluate(context);
output.append(expanded);
}
} else if (token instanceof ForEachToken) {
foreach(skip);
} else if (token instanceof IfToken) {
condition(skip);
} else if (token instanceof ElseToken) {
tokenStream.consume();
engine.getErrorHandler().error("else-out-of-scope", token);
} else if (token instanceof EndToken) {
tokenStream.consume();
engine.getErrorHandler().error("unmatched-end", token);
} else if (token instanceof InvalidToken) {
tokenStream.consume();
engine.getErrorHandler().error("invalid-expression", token);
} else {
tokenStream.consume();
// what ever else there may be, we just evaluate it
String evaluated = (String) token.evaluate(context);
output.append(evaluated);
}
}