X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Foutput%2Ftemplate%2FTemplate.java;h=b345a059f36873a53b8d2eb5eb3e87763aac71cf;hb=8d98e8c550a5fc426d7efbd57436dcb61bd41243;hp=1949d5c665a133ed652756af1ef70205ac194603;hpb=081aaab69d87705ed2aec541fb936df7850bf09b;p=gigi.git diff --git a/src/org/cacert/gigi/output/template/Template.java b/src/org/cacert/gigi/output/template/Template.java index 1949d5c6..b345a059 100644 --- a/src/org/cacert/gigi/output/template/Template.java +++ b/src/org/cacert/gigi/output/template/Template.java @@ -15,20 +15,48 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.cacert.gigi.DevelLauncher; -import org.cacert.gigi.Language; -import org.cacert.gigi.output.Outputable; +import org.cacert.gigi.localisation.Language; import org.cacert.gigi.util.HTMLEncoder; public class Template implements Outputable { - TemplateBlock data; + class ParseResult { - long lastLoaded; + TemplateBlock block; - File source; + String endType; + + public ParseResult(TemplateBlock block, String endType) { + this.block = block; + this.endType = endType; + } + + public String getEndType() { + return endType; + } + + public TemplateBlock getBlock(String reqType) { + if (endType == null && reqType == null) + return block; + if (endType == null || reqType == null) { + throw new Error("Invalid block type: " + endType); + } + if (endType.equals(reqType)) + return block; + throw new Error("Invalid block type: " + endType); + } + } + + private TemplateBlock data; + + private long lastLoaded; + + private File source; private static final Pattern CONTROL_PATTERN = Pattern.compile(" ?([a-z]+)\\(\\$([^)]+)\\) ?\\{ ?"); + private static final Pattern ELSE_PATTERN = Pattern.compile(" ?\\} ?else ?\\{ ?"); + public Template(URL u) { try { Reader r = new InputStreamReader(u.openStream(), "UTF-8"); @@ -40,7 +68,7 @@ public class Template implements Outputable { } catch (URISyntaxException e) { e.printStackTrace(); } - data = parse(r); + data = parse(r).getBlock(null); r.close(); } catch (IOException e) { throw new Error(e); @@ -49,17 +77,18 @@ public class Template implements Outputable { public Template(Reader r) { try { - data = parse(r); + data = parse(r).getBlock(null); r.close(); } catch (IOException e) { throw new Error(e); } } - private TemplateBlock parse(Reader r) throws IOException { + private ParseResult parse(Reader r) throws IOException { LinkedList splitted = new LinkedList(); LinkedList commands = new LinkedList(); StringBuffer buf = new StringBuffer(); + String blockType = null; outer: while (true) { while ( !endsWith(buf, " store = new LinkedList(); - while (command.startsWith("$")) { - int idx = command.indexOf(","); - store.add(command.substring(0, idx)); + while (command.startsWith("$") || command.startsWith("\"") || command.startsWith("!\"")) { + int idx; + if (command.startsWith("\"") || command.startsWith("!\"")) { + idx = command.indexOf("\"", command.charAt(0) == '!' ? 2 : 1) + 1; + store.add(command.substring(0, idx - 1)); + } else { + idx = command.indexOf(","); + store.add(command.substring(0, idx)); + } command = command.substring(idx + 1); } final String text = command; @@ -134,13 +175,14 @@ public class Template implements Outputable { return null; } + @Override public void output(PrintWriter out, Language l, Map vars) { if (source != null && DevelLauncher.DEVEL) { if (lastLoaded < source.lastModified()) { try { System.out.println("Reloading template.... " + source); InputStreamReader r = new InputStreamReader(new FileInputStream(source), "UTF-8"); - data = parse(r); + data = parse(r).getBlock(null); r.close(); lastLoaded = source.lastModified() + 1000; } catch (IOException e) {