+ }
+ private boolean endsWith(StringBuffer buf, String string) {
+ return buf.length() >= string.length()
+ && buf.substring(buf.length() - string.length(), buf.length())
+ .equals(string);
+ }
+ private Outputable parseCommand(String s2) {
+ s2 = s2.replace("\n", "");
+ if (s2.startsWith("=_")) {
+ final String raw = s2.substring(2);
+ return new Outputable() {
+
+ @Override
+ public void output(PrintWriter out, Language l,
+ Map<String, Object> vars) {
+ out.print(l.getTranslation(raw));
+ }
+ };
+ } else if (s2.startsWith("=$")) {
+ final String raw = s2.substring(2);
+ return new Outputable() {
+
+ @Override
+ public void output(PrintWriter out, Language l,
+ Map<String, Object> vars) {
+ outputVar(out, l, vars, raw);
+ }
+ };
+ } else if (s2.startsWith("=s,")) {
+ String command = s2.substring(3);
+ final LinkedList<String> store = new LinkedList<String>();
+ while (command.startsWith("$")) {
+ int idx = command.indexOf(",");
+ store.add(command.substring(0, idx));
+ command = command.substring(idx + 1);
+ }
+ final String text = command;
+ return new Outputable() {
+
+ @Override
+ public void output(PrintWriter out, Language l,
+ Map<String, Object> vars) {
+ String[] parts = l.getTranslation(text).split("%s");
+ String[] myvars = store.toArray(new String[store.size()]);
+ out.print(parts[0]);
+ for (int j = 1; j < parts.length; j++) {
+ outputVar(out, l, vars, myvars[j - 1].substring(1));
+ out.print(parts[j]);
+ }
+ }
+ };
+ } else {
+ System.out.println("Unknown processing instruction: " + s2);