--- /dev/null
+package org.cacert.gigi.output.template;
+
+import java.io.PrintWriter;
+import java.util.Map;
+
+import org.cacert.gigi.Language;
+import org.cacert.gigi.output.Outputable;
+
+final class IfStatement implements Outputable {
+ private final String variable;
+ private final TemplateBlock body;
+
+ IfStatement(String variable, TemplateBlock body) {
+ this.variable = variable;
+ this.body = body;
+ }
+
+ @Override
+ public void output(PrintWriter out, Language l, Map<String, Object> vars) {
+ Object o = vars.get(variable);
+ if (o instanceof Boolean && o == Boolean.TRUE) {
+ body.output(out, l, vars);
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.cacert.gigi.output.template;
+
+import java.io.PrintWriter;
+import java.util.Map;
+
+import org.cacert.gigi.Language;
+import org.cacert.gigi.output.Outputable;
+
+final class OutputVariableCommand implements Outputable {
+ private final String raw;
+
+ OutputVariableCommand(String raw) {
+ this.raw = raw;
+ }
+
+ @Override
+ public void output(PrintWriter out, Language l, Map<String, Object> vars) {
+ Template.outputVar(out, l, vars, raw);
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.cacert.gigi.output.template;
+
+import java.io.PrintWriter;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.cacert.gigi.Language;
+import org.cacert.gigi.output.Outputable;
+
+final class SprintfCommand implements Outputable {
+ private final String text;
+ private final LinkedList<String> store;
+
+ SprintfCommand(String text, LinkedList<String> store) {
+ this.text = text;
+ this.store = store;
+ }
+
+ @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++) {
+ Template.outputVar(out, l, vars, myvars[j - 1].substring(1));
+ out.print(parts[j]);
+ }
+ }
+}
\ No newline at end of file
import org.cacert.gigi.output.Outputable;
public class Template implements Outputable {
- static class TemplateBlock implements Outputable {
- String[] contents;
- Outputable[] vars;
-
- public TemplateBlock(String[] contents, Outputable[] vars) {
- this.contents = contents;
- this.vars = vars;
- }
-
- @Override
- public void output(PrintWriter out, Language l, Map<String, Object> vars) {
- for (int i = 0; i < contents.length; i++) {
- out.print(contents[i]);
- if (i < this.vars.length) {
- this.vars[i].output(out, l, vars);
- }
- }
- }
-
- }
-
TemplateBlock data;
long lastLoaded;
if (m.matches()) {
final String variable = m.group(1);
final TemplateBlock body = parse(r);
- commands.add(new Outputable() {
-
- @Override
- public void output(PrintWriter out, Language l, Map<String, Object> vars) {
- Object o = vars.get(variable);
- if (o instanceof Boolean && o == Boolean.TRUE) {
- body.output(out, l, vars);
- }
- }
- });
+ commands.add(new IfStatement(variable, body));
continue;
}
if (com.matches(" ?\\} ?")) {
private Outputable parseCommand(String s2) {
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));
- }
- };
+ return new TranslateCommand(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);
- }
- };
+ return new OutputVariableCommand(raw);
} else if (s2.startsWith("=s,")) {
String command = s2.substring(3);
final LinkedList<String> store = new LinkedList<String>();
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]);
- }
- }
- };
+ return new SprintfCommand(text, store);
} else {
System.out.println("Unknown processing instruction: " + s2);
}
data.output(out, l, vars);
}
- private void outputVar(PrintWriter out, Language l, Map<String, Object> vars, String varname) {
+ protected static void outputVar(PrintWriter out, Language l, Map<String, Object> vars, String varname) {
Object s = vars.get(varname);
if (s == null) {
--- /dev/null
+package org.cacert.gigi.output.template;
+
+import java.io.PrintWriter;
+import java.util.Map;
+
+import org.cacert.gigi.Language;
+import org.cacert.gigi.output.Outputable;
+
+class TemplateBlock implements Outputable {
+ String[] contents;
+ Outputable[] vars;
+
+ public TemplateBlock(String[] contents, Outputable[] vars) {
+ this.contents = contents;
+ this.vars = vars;
+ }
+
+ @Override
+ public void output(PrintWriter out, Language l, Map<String, Object> vars) {
+ for (int i = 0; i < contents.length; i++) {
+ out.print(contents[i]);
+ if (i < this.vars.length) {
+ this.vars[i].output(out, l, vars);
+ }
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package org.cacert.gigi.output.template;
+
+import java.io.PrintWriter;
+import java.util.Map;
+
+import org.cacert.gigi.Language;
+import org.cacert.gigi.output.Outputable;
+
+final class TranslateCommand implements Outputable {
+ private final String raw;
+
+ TranslateCommand(String raw) {
+ this.raw = raw;
+ }
+
+ @Override
+ public void output(PrintWriter out, Language l, Map<String, Object> vars) {
+ out.print(l.getTranslation(raw));
+ }
+}
\ No newline at end of file