1 package org.melati.template;
2
3 import org.melati.Melati;
4 import org.melati.poem.Persistent;
5 import org.melati.poem.PoemLocale;
6 import org.melati.util.MelatiWriter;
7
8 import java.io.IOException;
9 import java.util.Enumeration;
10 import java.util.List;
11
12
13
14
15
16
17
18
19
20
21 public class JavaMarkupLanguage extends AbstractMarkupLanguage implements MarkupLanguage {
22
23 public JavaMarkupLanguage() {
24 super("java", new Melati(), ClassNameTempletLoader.getInstance(), PoemLocale.HERE);
25 }
26
27 public JavaMarkupLanguage(Melati melati) {
28 super("java", melati, ClassNameTempletLoader.getInstance(), PoemLocale.HERE);
29 }
30
31 public JavaMarkupLanguage(Melati melati, TempletLoader templetLoader, PoemLocale locale) {
32 super("java", melati, templetLoader, locale);
33 }
34
35 @Override
36 public AttributeMarkupLanguage getAttr() {
37 throw new RuntimeException("Not expected to be called in Java");
38 }
39
40 @Override
41 public String escaped(String s) {
42 return escape(s);
43 }
44 public static String escape(String s) {
45 return s
46 .replace("\"", "\\\"")
47 .replace("\\", "\\\\")
48 .replace("/", "\\/");
49 }
50 @Override
51 public String escaped(Persistent o) {
52 throw new RuntimeException("Not implemented yet");
53 }
54
55 @Override
56 public String encoded(String s) {
57 throw new RuntimeException("Not expected to be called in Java");
58 }
59
60 @Override
61 public String decoded(String s) {
62 throw new RuntimeException("Not expected to be called in Java");
63 }
64
65
66
67
68
69 @Override
70 public void render(String s, MelatiWriter writer) {
71 try {
72 writer.write(escaped(s));
73 } catch (IOException e) {
74 throw new TemplateIOException("Problem writing " + s, e);
75 }
76 }
77 @Override
78 protected void renderMarkup(String s, MelatiWriter writer) {
79 throw new RuntimeException("Not expected to be called in Java");
80 }
81
82
83
84
85
86
87
88
89
90
91 protected void render(Object o, MelatiWriter writer) {
92 if (o == null)
93 writer.output("null");
94 else if (o instanceof String) {
95 writer.output("\"" + o + "\"");
96 } else if (o instanceof Boolean) {
97 if (((Boolean)o).booleanValue())
98 writer.output("true");
99 else
100 writer.output("false");
101 } else if (o instanceof List) {
102 List<?> l = (List<?>)o;
103 writer.output("[");
104 boolean seenOne = false;
105 for (int i = 0; i < l.size(); i++) {
106 if (seenOne)
107 writer.output(",");
108 render(l.get(i), writer);
109 seenOne = true;
110 }
111 writer.output("]\n");
112 } else if (o instanceof Enumeration) {
113 Enumeration<?> e = (Enumeration<?>) o;
114 writer.output("[");
115 boolean seenOne = false;
116 while (e.hasMoreElements()) {
117 if (seenOne)
118 writer.output(",");
119 render(e.nextElement(), writer);
120 seenOne = true;
121 }
122 writer.output("]\n");
123 } else {
124 Template templet =
125 templetLoader.templet(melati.getTemplateEngine(), this, o.getClass());
126 TemplateContext vars =
127 melati.getTemplateEngine().getTemplateContext();
128 vars.put("object", o);
129 vars.put("melati", melati);
130 vars.put("ml", melati.getMarkupLanguage());
131 expandTemplet(templet, vars, writer);
132 }
133 }
134
135
136 }