root/livinglogic.python.xist/src/ll/xist/ns/jsp.py @ 3705:25de3dc38ce3

Revision 3705:25de3dc38ce3, 24.9 KB (checked in by Walter Doerwald <walter@…>, 11 years ago)

Fix typo.

Line 
1# -*- coding: utf-8 -*-
2
3## Copyright 1999-2009 by LivingLogic AG, Bayreuth/Germany
4## Copyright 1999-2009 by Walter Dörwald
5##
6## All Rights Reserved
7##
8## See ll/__init__.py for the license
9
10
11"""
12A module that allows you to embed JSP content as processing instructions.
13"""
14
15
16import cgi # for parse_header
17
18from ll.xist import xsc, sims
19
20
21__docformat__ = "reStructuredText"
22
23
24xmlns = "http://java.sun.com/JSP/Page"
25
26
27class directive(xsc.Element):
28    model = sims.Empty()
29    register = False # only serves as a base class
30
31    def publish(self, publisher):
32        yield publisher.encode(u"<%@ ")
33        yield publisher.encode(self._publishname(publisher))
34        for part in self.attrs.publish(publisher):
35            yield part
36        yield publisher.encode(u"%>")
37
38
39class scriptlet(xsc.ProcInst):
40    """
41    Will be published as ``<% content %>``.
42    """
43
44    def publish(self, publisher):
45        yield publisher.encode(u"<% ")
46        yield publisher.encode(self.content)
47        yield publisher.encode(u" %>")
48
49
50class expression(xsc.ProcInst):
51    """
52    Will be published as ``<%= content %>``.
53    """
54
55    def publish(self, publisher):
56        yield publisher.encode(u"<%= ")
57        yield publisher.encode(self.content)
58        yield publisher.encode(u" %>")
59
60
61class declaration(xsc.ProcInst):
62    """
63    Will be published as ``<%! content %>``.
64    """
65
66    def publish(self, publisher):
67        yield publisher.encode(u"<%! ")
68        yield publisher.encode(self.content)
69        yield publisher.encode(u" %>")
70
71
72class If(scriptlet):
73    xmlname = "if"
74
75    def convert(self, converter):
76        return scriptlet(u"if(", self.content, u"){")
77
78
79class Else(scriptlet):
80    xmlname = "else"
81
82    def convert(self, converter):
83        return scriptlet(u"}else{")
84
85
86class ElIf(scriptlet):
87    xmlname = "elif"
88
89    def convert(self, converter):
90        return scriptlet(u"}else if (", self.content, u"){")
91
92
93class End(scriptlet):
94    xmlname = "end"
95
96    def convert(self, converter):
97        return scriptlet(u"}")
98
99
100class block(xsc.Element):
101    """
102    This element embeds its content in ``{}`` brackets. Note that the content
103    itself will not be turned into a scriptlet automatically but will be used
104    as-is.
105    """
106    model = sims.Any()
107
108    def convert(self, converter):
109        e = xsc.Frag(
110            scriptlet(u"{"),
111            self.content,
112            scriptlet(u"}")
113        )
114        return e.convert(converter)
115
116
117class directive_include(directive):
118    xmlname = "include"
119    class Attrs(directive.Attrs):
120        class file(xsc.TextAttr): pass
121
122
123class directive_taglib(directive):
124    xmlname = "taglib"
125    class Attrs(directive.Attrs):
126        class uri(xsc.TextAttr): pass
127        class prefix(xsc.TextAttr): pass
128
129
130class directive_page(directive):
131    xmlname = "page"
132    class Attrs(directive.Attrs):
133        class language(xsc.TextAttr):
134            values = ("java",)
135        class extends(xsc.TextAttr): pass
136        class import_(xsc.TextAttr): xmlname = "import"
137        class session(xsc.TextAttr): values = (u"true", u"false")
138        class buffer(xsc.TextAttr): pass
139        class autoFlush(xsc.TextAttr): values = (u"true", u"false")
140        class isThreadSafe(xsc.TextAttr): values = (u"true", u"false")
141        class info(xsc.TextAttr): pass
142        class errorPage(xsc.URLAttr): pass
143        class contentType(xsc.TextAttr): pass
144        class isErrorPage(xsc.TextAttr): values = (u"true", u"false")
145        class pageEncoding(xsc.TextAttr): pass
146
147    def publish(self, publisher):
148        # Only a contentType attribute triggers the special code
149        if u"contentType" in self.attrs and not self.attrs.contentType.isfancy() and not self.attrs.pageEncoding.isfancy():
150            (contenttype, options) = cgi.parse_header(unicode(self.attrs.contentType))
151            pageencoding = unicode(self.attrs.pageEncoding)
152            encoding = publisher.encoding
153            if encoding is None:
154                encoding = "utf-8"
155            if u"charset" not in options or not (options[u"charset"] == pageencoding == encoding):
156                options[u"charset"] = encoding
157                node = self.__class__(
158                    self.attrs,
159                    contentType=(contenttype, u"; ", u"; ".join("%s=%s" % option for option in options.items())),
160                    pageEncoding=encoding
161                )
162                return node.publish(publisher) # return a generator-iterator
163        return super(directive_page, self).publish(publisher) # return a generator-iterator
164
165
166def fromul4(template, variables="variables", indent=0):
167    """
168    Return the UL4 template :var:`template` as JSP source code. :var:`variables`
169    is the variable name of the map object containing the top level variables.
170    :var:`indent` is the initial indentation of the source code.
171
172    The code produced requires the `UL4 Java package`__.
173
174    __ http://hg.livinglogic.de/LivingLogic.Java.ul4
175    """
176    from ll import ul4c
177    from ll.xist.ns import specials
178
179    # Turn a Python string into a Java string literal
180    def _string(s):
181        v = []
182        specialchars = {"\r": "\\r", "\n": "\\n", "\t": "\\t", '"': '\\"'}
183        for c in s:
184            try:
185                v.append(specialchars[c])
186            except KeyError:
187                oc = ord(c)
188                v.append("\\u%04x" % oc if oc >= 128 else c)
189        return '"%s"' % "".join(s)
190
191    def make_literal(content):
192        result.append(specials.literal(content))
193
194    def make_expression(content):
195        result.append(expression(content))
196
197    def make_scriptlet(content):
198        line = "%s%s\n" % ("\t"*indent, content)
199        if result and isinstance(result[-1], scriptlet):
200            result[-1] += "%s%s\n" % ("\t"*indent, content)
201        else:
202            result.append(scriptlet("\n%s%s\n" % ("\t"*indent, content)))
203
204    loopcounter = 0 # Used to number loop iterators
205    result = xsc.Frag()
206
207    make_scriptlet("//@@@ BEGIN template source")
208
209    lines = template.source.splitlines(False)
210    width = len(str(len(lines)+1))
211    for (i, line) in enumerate(lines):
212        make_scriptlet("// %*d %s" % (width, i+1, line))
213
214    make_scriptlet("//@@@ BEGIN template code")
215
216    for i in xrange(10):
217        make_scriptlet("Object r%d = null;" % i)
218
219    lastloc = None
220    for opcode in template.opcodes:
221        if opcode.code is not None and opcode.location is not lastloc:
222            lastloc = opcode.location
223            (line, col) = lastloc.pos()
224            tag = lastloc.tag
225            make_scriptlet("// Location %d (line %d, col %d): %s" % (lastloc.starttag+1, line, col, repr(tag)[1+isinstance(tag, unicode):-1]))
226        if opcode.code is None:
227            make_literal(opcode.location.code)
228        elif opcode.code == "loadstr":
229            make_scriptlet('r%d = %s;' % (opcode.r1, _string(opcode.arg)))
230        elif opcode.code == "loadint":
231            make_scriptlet("r%d = new Integer(%s);" % (opcode.r1, opcode.arg))
232        elif opcode.code == "loadfloat":
233            make_scriptlet("r%d = new Double(%s);" % (opcode.r1, opcode.arg))
234        elif opcode.code == "loadnone":
235            make_scriptlet("r%d = null;" % opcode.r1)
236        elif opcode.code == "loadfalse":
237            make_scriptlet("r%d = Boolean.FALSE;" % opcode.r1)
238        elif opcode.code == "loadtrue":
239            make_scriptlet("r%d = Boolean.TRUE;" % opcode.r1)
240        elif opcode.code == "loaddate":
241            make_scriptlet("r%d = com.livinglogic.ul4.Utils.isoDateFormatter.parse(%s);" % (opcode.r1, _string(opcode.arg)))
242        elif opcode.code == "loadcolor":
243            make_scriptlet("r%d = new com.livinglogic.ul4.Color(0x%s, 0x%s, 0x%s, 0x%s)" % (opcode.r1, opcode.arg[:2], opcode.arg[2:4], opcode.arg[4:6], opcode.arg[6:]))
244        elif opcode.code == "buildlist":
245            make_scriptlet("r%d = new java.util.ArrayList();" % opcode.r1)
246        elif opcode.code == "builddict":
247            make_scriptlet("r%d = new java.util.HashMap();" % opcode.r1)
248        elif opcode.code == "addlist":
249            make_scriptlet("((java.util.List)r%d).add(r%d)" % (opcode.r1, opcode.r2))
250        elif opcode.code == "adddict":
251            make_scriptlet("((java.util.Map)r%d).put(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
252        elif opcode.code == "updatedict":
253            make_scriptlet("((java.util.Map)r%d).putAll((java.util.Map)r%d);" % (opcode.r1, opcode.r2))
254        elif opcode.code == "loadvar":
255            make_scriptlet("r%d = %s.get(%s);" % (opcode.r1, variables, _string(opcode.arg)))
256        elif opcode.code == "storevar":
257            make_scriptlet("%s.put(%s, r%d);" % (variables, _string(opcode.arg), opcode.r1))
258        elif opcode.code == "addvar":
259            name = _string(opcode.arg)
260            make_scriptlet("%s.put(%s, com.livinglogic.ul4.Utils.add(%s.get(%s), r%d));" % (variables, name, variables, name, opcode.r1))
261        elif opcode.code == "addvar":
262            name = _string(opcode.arg)
263            make_scriptlet("%s.put(%s, com.livinglogic.ul4.Utils.sub(%s.get(%s), r%d));" % (variables, name, variables, name, opcode.r1))
264        elif opcode.code == "addvar":
265            name = _string(opcode.arg)
266            make_scriptlet("%s.put(%s, com.livinglogic.ul4.Utils.mul(%s.get(%s), r%d));" % (variables, name, variables, name, opcode.r1))
267        elif opcode.code == "truedivvar":
268            name = _string(opcode.arg)
269            make_scriptlet("%s.put(%s, com.livinglogic.ul4.Utils.truediv(%s.get(%s), r%d));" % (variables, name, variables, name, opcode.r1))
270        elif opcode.code == "floordivvar":
271            name = _string(opcode.arg)
272            make_scriptlet("%s.put(%s, com.livinglogic.ul4.Utils.floordiv(%s.get(%s), r%d));" % (variables, name, variables, name, opcode.r1))
273        elif opcode.code == "modvar":
274            name = _string(opcode.arg)
275            make_scriptlet("%s.put(%s, com.livinglogic.ul4.Utils.mod(%s.get(%s), r%d));" % (variables, name, variables, name, opcode.r1))
276        elif opcode.code == "delvar":
277            make_scriptlet("%s.remove(%s);" % (variables, _string(opcode.arg)))
278        elif opcode.code == "getattr":
279            make_scriptlet("r%d = com.livinglogic.ul4.Utils.getItem(r%d, %s);" % (opcode.r1, opcode.r2, _string(opcode.arg)))
280        elif opcode.code == "getitem":
281            make_scriptlet("r%d = com.livinglogic.ul4.Utils.getItem(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
282        elif opcode.code == "getslice12":
283            make_scriptlet("r%d = com.livinglogic.ul4.Utils.getSlice(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
284        elif opcode.code == "getslice1":
285            make_scriptlet("r%d = com.livinglogic.ul4.Utils.getSlice(r%d, r%d, null);" % (opcode.r1, opcode.r2, opcode.r3))
286        elif opcode.code == "getslice2":
287            make_scriptlet("r%d = com.livinglogic.ul4.Utils.getSlice(r%d, null, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
288        elif opcode.code == "print":
289            make_expression("org.apache.commons.lang.ObjectUtils.toString(r%d)" % opcode.r1)
290        elif opcode.code == "printx":
291            make_expression("com.livinglogic.ul4.Utils.xmlescape(org.apache.commons.lang.ObjectUtils.toString(r%d))" % opcode.r1)
292        elif opcode.code == "for":
293            loopcounter += 1
294            make_scriptlet("for (java.util.Iterator iterator%d = com.livinglogic.ul4.Utils.iterator(r%d); iterator%d.hasNext();)" % (loopcounter, opcode.r2, loopcounter))
295            make_scriptlet("{")
296            indent += 1
297            make_scriptlet("r%d = iterator%d.next();" % (opcode.r1, loopcounter))
298        elif opcode.code == "endfor":
299            indent -= 1
300            make_scriptlet("}")
301        elif opcode.code == "break":
302            make_scriptlet("break;")
303        elif opcode.code == "continue":
304            make_scriptlet("continue;")
305        elif opcode.code == "not":
306            make_scriptlet("r%d = com.livinglogic.ul4.Utils.getBool(r%d) ? Boolean.FALSE : Boolean.TRUE;" % (opcode.r1, opcode.r2))
307        elif opcode.code == "neg":
308            make_scriptlet("r%d = com.livinglogic.ul4.Utils.neg(r%d);" % (opcode.r1, opcode.r2))
309        elif opcode.code == "contains":
310            make_scriptlet("r%d = com.livinglogic.ul4.Utils.contains(r%d, r%d) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r3))
311        elif opcode.code == "notcontains":
312            make_scriptlet("r%d = com.livinglogic.ul4.Utils.contains(r%d, r%d) ? Boolean.FALSE : Boolean.TRUE;" % (opcode.r1, opcode.r2, opcode.r3))
313        elif opcode.code == "eq":
314            make_scriptlet("r%d = org.apache.commons.lang.ObjectUtils.equals(r%d, r%d) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r3))
315        elif opcode.code == "ne":
316            make_scriptlet("r%d = org.apache.commons.lang.ObjectUtils.equals(r%d, r%d) ? Boolean.FALSE : Boolean.TRUE;" % (opcode.r1, opcode.r2, opcode.r3))
317        elif opcode.code == "lt":
318            make_scriptlet("r%d = com.livinglogic.ul4.Utils.lt(r%d, r%d) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r3))
319        elif opcode.code == "le":
320            make_scriptlet("r%d = com.livinglogic.ul4.Utils.le(r%d, r%d) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r3))
321        elif opcode.code == "gt":
322            make_scriptlet("r%d = com.livinglogic.ul4.Utils.le(r%d, r%d) ? Boolean.FALSE : Boolean.TRUE;" % (opcode.r1, opcode.r2, opcode.r3))
323        elif opcode.code == "ge":
324            make_scriptlet("r%d = com.livinglogic.ul4.Utils.lt(r%d, r%d) ? Boolean.FALSE : Boolean.TRUE;" % (opcode.r1, opcode.r2, opcode.r3))
325        elif opcode.code == "add":
326            make_scriptlet("r%d = com.livinglogic.ul4.Utils.add(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
327        elif opcode.code == "sub":
328            make_scriptlet("r%d = com.livinglogic.ul4.Utils.sub(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
329        elif opcode.code == "mul":
330            make_scriptlet("r%d = com.livinglogic.ul4.Utils.mul(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
331        elif opcode.code == "floordiv":
332            make_scriptlet("r%d = com.livinglogic.ul4.Utils.floordiv(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
333        elif opcode.code == "truediv":
334            make_scriptlet("r%d = com.livinglogic.ul4.Utils.truediv(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
335        elif opcode.code == "and":
336            make_scriptlet("r%d = com.livinglogic.ul4.Utils.getBool(r%d) ? r%d : r%d;" % (opcode.r1, opcode.r3, opcode.r2, opcode.r3))
337        elif opcode.code == "or":
338            make_scriptlet("r%d = com.livinglogic.ul4.Utils.getBool(r%d) ? r%d : r%d;" % (opcode.r1, opcode.r2, opcode.r2, opcode.r3))
339        elif opcode.code == "mod":
340            make_scriptlet("r%d = com.livinglogic.ul4.Utils.mod(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
341        elif opcode.code == "callfunc0":
342            if opcode.arg == "now":
343                make_scriptlet("r%d = new java.util.Date();" % opcode.r1)
344            elif opcode.arg == "vars":
345                make_scriptlet("r%d = %s;" % (opcode.r1, variables))
346            else:
347                raise ul4c.UnknownFunctionError(opcode.arg)
348        elif opcode.code == "callfunc1":
349            if opcode.arg == "xmlescape":
350                make_scriptlet("r%d = com.livinglogic.ul4.Utils.xmlescape(r%d);" % (opcode.r1, opcode.r2))
351            elif opcode.arg == "csv":
352                make_scriptlet("r%d = com.livinglogic.ul4.Utils.csv(r%d);" % (opcode.r1, opcode.r2))
353            elif opcode.arg == "str":
354                make_scriptlet("r%d = org.apache.commons.lang.ObjectUtils.toString(r%d);" % (opcode.r1, opcode.r2))
355            elif opcode.arg == "repr":
356                make_scriptlet("r%d = com.livinglogic.ul4.Utils.repr(r%d);" % (opcode.r1, opcode.r2))
357            elif opcode.arg == "int":
358                make_scriptlet("r%d = com.livinglogic.ul4.Utils.toInteger(r%d);" % (opcode.r1, opcode.r2))
359            elif opcode.arg == "bool":
360                make_scriptlet("r%d = com.livinglogic.ul4.Utils.getBool(r%d) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2))
361            elif opcode.arg == "len":
362                make_scriptlet("r%d = com.livinglogic.ul4.Utils.length(r%d);" % (opcode.r1, opcode.r2))
363            elif opcode.arg == "enumerate":
364                make_scriptlet("r%d = com.livinglogic.ul4.Utils.enumerate(r%d);" % (opcode.r1, opcode.r2))
365            elif opcode.arg == "isnone":
366                make_scriptlet("r%d = (r%d == null) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2))
367            elif opcode.arg == "isstr":
368                make_scriptlet("r%d = ((r%d != null) && (r%d instanceof String)) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r2))
369            elif opcode.arg == "isint":
370                make_scriptlet("r%d = ((r%d != null) && (r%d instanceof Integer)) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r2))
371            elif opcode.arg == "isfloat":
372                make_scriptlet("r%d = ((r%d != null) && (r%d instanceof Double)) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r2))
373            elif opcode.arg == "isbool":
374                make_scriptlet("r%d = ((r%d != null) && (r%d instanceof Boolean)) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r2))
375            elif opcode.arg == "isdate":
376                make_scriptlet("r%d = ((r%d != null) && (r%d instanceof java.util.Date)) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r2))
377            elif opcode.arg == "islist":
378                make_scriptlet("r%d = ((r%d != null) && (r%d instanceof java.util.List)) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r2))
379            elif opcode.arg == "isdict":
380                make_scriptlet("r%d = ((r%d != null) && (r%d instanceof java.util.Map)) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r2))
381            elif opcode.arg == "istemplate":
382                make_scriptlet("r%d = ((r%d != null) && (r%d instanceof .livinglogic.ul4.Template)) ? Boolean.TRUE : Boolean.FALSE;" % (opcode.r1, opcode.r2, opcode.r2))
383            elif opcode.arg == "chr":
384                make_scriptlet("r%d = com.livinglogic.ul4.Utils.chr(r%d);" % (opcode.r1, opcode.r2))
385            elif opcode.arg == "ord":
386                make_scriptlet("r%d = com.livinglogic.ul4.Utils.ord(r%d);" % (opcode.r1, opcode.r2))
387            elif opcode.arg == "hex":
388                make_scriptlet("r%d = com.livinglogic.ul4.Utils.hex(r%d);" % (opcode.r1, opcode.r2))
389            elif opcode.arg == "oct":
390                make_scriptlet("r%d = com.livinglogic.ul4.Utils.oct(r%d);" % (opcode.r1, opcode.r2))
391            elif opcode.arg == "bin":
392                make_scriptlet("r%d = com.livinglogic.ul4.Utils.bin(r%d);" % (opcode.r1, opcode.r2))
393            elif opcode.arg == "sorted":
394                make_scriptlet("r%d = com.livinglogic.ul4.Utils.sorted(r%d);" % (opcode.r1, opcode.r2))
395            elif opcode.arg == "range":
396                make_scriptlet("r%d = com.livinglogic.ul4.Utils.range(r%d);" % (opcode.r1, opcode.r2))
397            elif opcode.arg == "type":
398                make_scriptlet("r%d = com.livinglogic.ul4.Utils.type(r%d);" % (opcode.r1, opcode.r2))
399            elif opcode.arg == "get":
400                make_scriptlet("r%d = %s.get(r%d);" % (opcode.r1, variables, opcode.r2))
401            elif opcode.arg == "json":
402                make_scriptlet("r%d = com.livinglogic.ul4.Utils.json(r%d);" % (opcode.r1, opcode.r2))
403            else:
404                raise ul4c.UnknownFunctionError(opcode.arg)
405        elif opcode.code == "callfunc2":
406            if opcode.arg == "range":
407                make_scriptlet("r%d = com.livinglogic.ul4.Utils.range(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
408            elif opcode.arg == "get":
409                make_scriptlet("r%d = %s.containsKey(r%d) ? %s.get(r%d) : r%d;" % (opcode.r1, variables, opcode.r2, variables, opcode.r2, opcode.r3))
410            elif opcode.arg == "zip":
411                make_scriptlet("r%d = com.livinglogic.ul4.Utils.zip(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
412            else:
413                raise ul4c.UnknownFunctionError(opcode.arg)
414        elif opcode.code == "callfunc3":
415            if opcode.arg == "range":
416                make_scriptlet("r%d = com.livinglogic.ul4.Utils.range(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
417            elif opcode.arg == "zip":
418                make_scriptlet("r%d = com.livinglogic.ul4.Utils.zip(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
419            elif opcode.arg == "rgb":
420                make_scriptlet("r%d = com.livinglogic.ul4.Utils.rgb(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
421            elif opcode.arg == "hls":
422                make_scriptlet("r%d = com.livinglogic.ul4.Utils.hls(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
423            elif opcode.arg == "hsv":
424                make_scriptlet("r%d = com.livinglogic.ul4.Utils.hsv(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
425            else:
426                raise ul4c.UnknownFunctionError(opcode.arg)
427        elif opcode.code == "callfunc4":
428            if opcode.arg == "rgb":
429                make_scriptlet("r%d = com.livinglogic.ul4.Utils.rgb(r%d, r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4, opcode.r5))
430            elif opcode.arg == "hls":
431                make_scriptlet("r%d = com.livinglogic.ul4.Utils.hls(r%d, r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4, opcode.r5))
432            elif opcode.arg == "hsv":
433                make_scriptlet("r%d = com.livinglogic.ul4.Utils.hsv(r%d, r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4, opcode.r5))
434            else:
435                raise ul4c.UnknownFunctionError(opcode.arg)
436        elif opcode.code == "callmeth0":
437            if opcode.arg == "split":
438                make_scriptlet("r%d = com.livinglogic.ul4.Utils.split(r%d);" % (opcode.r1, opcode.r2))
439            elif opcode.arg == "strip":
440                make_scriptlet("r%d = com.livinglogic.ul4.Utils.strip(r%d);" % (opcode.r1, opcode.r2))
441            elif opcode.arg == "lstrip":
442                make_scriptlet("r%d = com.livinglogic.ul4.Utils.lstrip(r%d);" % (opcode.r1, opcode.r2))
443            elif opcode.arg == "rstrip":
444                make_scriptlet("r%d = com.livinglogic.ul4.Utils.rstrip(r%d);" % (opcode.r1, opcode.r2))
445            elif opcode.arg == "upper":
446                make_scriptlet("r%d = com.livinglogic.ul4.Utils.upper(r%d);" % (opcode.r1, opcode.r2))
447            elif opcode.arg == "lower":
448                make_scriptlet("r%d = com.livinglogic.ul4.Utils.lower(r%d);" % (opcode.r1, opcode.r2))
449            elif opcode.arg == "capitalize":
450                make_scriptlet("r%d = com.livinglogic.ul4.Utils.capitalize(r%d);" % (opcode.r1, opcode.r2))
451            elif opcode.arg == "items":
452                make_scriptlet("r%d = com.livinglogic.ul4.Utils.items(r%d);" % (opcode.r1, opcode.r2))
453            elif opcode.arg == "isoformat":
454                make_scriptlet("r%d = com.livinglogic.ul4.Utils.isoformat(r%d);" % (opcode.r1, opcode.r2))
455            elif opcode.arg == "r":
456                make_scriptlet("r%d = ((com.livinglogic.ul4.Color)r%d).r();" % (opcode.r1, opcode.r2))
457            elif opcode.arg == "g":
458                make_scriptlet("r%d = ((com.livinglogic.ul4.Color)r%d).g();" % (opcode.r1, opcode.r2))
459            elif opcode.arg == "b":
460                make_scriptlet("r%d = ((com.livinglogic.ul4.Color)r%d).b();" % (opcode.r1, opcode.r2))
461            elif opcode.arg == "a":
462                make_scriptlet("r%d = ((com.livinglogic.ul4.Color)r%d).a();" % (opcode.r1, opcode.r2))
463            elif opcode.arg == "hls":
464                make_scriptlet("r%d = ((com.livinglogic.ul4.Color)r%d).hls();" % (opcode.r1, opcode.r2))
465            elif opcode.arg == "hlsa":
466                make_scriptlet("r%d = ((com.livinglogic.ul4.Color)r%d).hlsa();" % (opcode.r1, opcode.r2))
467            elif opcode.arg == "hsv":
468                make_scriptlet("r%d = ((com.livinglogic.ul4.Color)r%d).hsv();" % (opcode.r1, opcode.r2))
469            elif opcode.arg == "hsva":
470                make_scriptlet("r%d = ((com.livinglogic.ul4.Color)r%d).hsva();" % (opcode.r1, opcode.r2))
471            elif opcode.arg == "lum":
472                make_scriptlet("r%d = new Double(((com.livinglogic.ul4.Color)r%d).lum());" % (opcode.r1, opcode.r2))
473            else:
474                raise ul4c.UnknownMethodError(opcode.arg)
475        elif opcode.code == "callmeth1":
476            if opcode.arg == "split":
477                make_scriptlet("r%d = com.livinglogic.ul4.Utils.split(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
478            elif opcode.arg == "rsplit":
479                make_scriptlet("r%d = com.livinglogic.ul4.Utils.rsplit(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
480            elif opcode.arg == "strip":
481                make_scriptlet("r%d = com.livinglogic.ul4.Utils.strip(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
482            elif opcode.arg == "lstrip":
483                make_scriptlet("r%d = com.livinglogic.ul4.Utils.lstrip(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
484            elif opcode.arg == "rstrip":
485                make_scriptlet("r%d = com.livinglogic.ul4.Utils.rstrip(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
486            elif opcode.arg == "startswith":
487                make_scriptlet("r%d = com.livinglogic.ul4.Utils.startswith(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
488            elif opcode.arg == "endswith":
489                make_scriptlet("r%d = com.livinglogic.ul4.Utils.endswith(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
490            elif opcode.arg == "find":
491                make_scriptlet("r%d = com.livinglogic.ul4.Utils.find(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
492            elif opcode.arg == "rfind":
493                make_scriptlet("r%d = com.livinglogic.ul4.Utils.rfind(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
494            elif opcode.arg == "format":
495                make_scriptlet("r%d = com.livinglogic.ul4.Utils.format(r%d, r%d, defaultLocale);" % (opcode.r1, opcode.r2, opcode.r3))
496            elif opcode.arg == "get":
497                make_scriptlet("r%d = ((java.util.Map)r%d).get(r%d);" % (opcode.r1, opcode.r2, opcode.r3))
498            elif opcode.arg == "withlum":
499                make_scriptlet("r%d = com.livinglogic.ul4.Utils.withlum(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
500            elif opcode.arg == "witha":
501                make_scriptlet("r%d = com.livinglogic.ul4.Utils.witha(r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3))
502            else:
503                raise ul4c.UnknownMethodError(opcode.arg)
504        elif opcode.code == "callmeth2":
505            if opcode.arg == "split":
506                make_scriptlet("r%d = com.livinglogic.ul4.Utils.split(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
507            elif opcode.arg == "rsplit":
508                make_scriptlet("r%d = com.livinglogic.ul4.Utils.rsplit(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
509            elif opcode.arg == "find":
510                make_scriptlet("r%d = com.livinglogic.ul4.Utils.find(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
511            elif opcode.arg == "replace":
512                make_scriptlet("r%d = com.livinglogic.ul4.Utils.replace(r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4))
513            elif opcode.arg == "get":
514                make_scriptlet("r%d = ((java.util.Map)r%d).containsKey(r%d) ? ((java.util.Map)r%d).get(r%d) : r%d;" % (opcode.r1, opcode.r2, opcode.r3, opcode.r2, opcode.r3, opcode.r4))
515            else:
516                raise ul4c.UnknownMethodError(opcode.arg)
517        elif opcode.code == "callmeth3":
518            if opcode.arg == "find":
519                make_scriptlet("r%d = com.livinglogic.ul4.Utils.find(r%d, r%d, r%d, r%d);" % (opcode.r1, opcode.r2, opcode.r3, opcode.r4, opcode.r5))
520            else:
521                raise ul4c.UnknownMethodError(opcode.arg)
522        elif opcode.code == "callmethkw":
523            if opcode.arg == "render":
524                make_scriptlet("r%d = ((com.livinglogic.ul4.JSPTemplate)r%d).renders((java.util.Map)r%d);" % (opcode.r1, opcode.r2, opcode.r3))
525            else:
526                raise ul4c.UnknownMethodError(opcode.arg)
527        elif opcode.code == "if":
528            make_scriptlet("if (com.livinglogic.ul4.Utils.getBool(r%d))" % opcode.r1)
529            make_scriptlet("{")
530            indent += 1
531        elif opcode.code == "else":
532            indent -= 1
533            make_scriptlet("}")
534            make_scriptlet("else")
535            make_scriptlet("{")
536            indent += 1
537        elif opcode.code == "endif":
538            indent -= 1
539            make_scriptlet("}")
540        elif opcode.code == "render":
541            make_scriptlet("((com.livinglogic.ul4.JSPTemplate)r%d).execute(out, (Map)r%d);" % (opcode.r1, opcode.r2))
542        else:
543            raise ul4c.UnknownOpcodeError(opcode.code)
544    make_scriptlet("//@@@ END template code")
545    return result
Note: See TracBrowser for help on using the browser.