1 package org.cacert.gigi.output;
3 import java.io.PrintWriter;
5 import java.util.LinkedList;
7 import java.util.Scanner;
8 import java.util.regex.Pattern;
10 import org.cacert.gigi.Language;
12 public class Template implements Outputable {
15 public Template(Reader r) {
16 LinkedList<String> splitted = new LinkedList<String>();
17 Scanner sc = new Scanner(r);
18 Pattern p1 = Pattern.compile("([^<]|<[^?])*<\\?");
19 Pattern p2 = Pattern.compile("([^<]|<[^?])*\\?>");
21 String s1 = sc.findWithinHorizon(p1, 0);
25 s1 = s1.substring(0, s1.length() - 2);
27 String s2 = sc.findWithinHorizon(p2, 0);
28 s2 = s2.substring(0, s2.length() - 2);
31 sc.useDelimiter("\0");
33 splitted.add(sc.next());
36 contents = splitted.toArray(new String[splitted.size()]);
38 public void output(PrintWriter out, Language l, Map<String, Object> vars) {
39 for (int i = 0; i < contents.length; i++) {
41 out.print(contents[i]);
42 } else if (contents[i].startsWith("=_")) {
43 out.print(l.getTranslation(contents[i].substring(2)));
44 } else if (contents[i].startsWith("=$")) {
45 Object s = vars.get(contents[i].substring(2));
47 System.out.println("Empty variable: "
48 + contents[i].substring(2));
50 if (s instanceof Outputable) {
51 ((Outputable) s).output(out, l, vars);
56 System.out.println("Unknown processing instruction: "