20 |
tal_ns = 'http://xml.zope.org/namespaces/tal' |
tal_ns = 'http://xml.zope.org/namespaces/tal' |
21 |
|
|
22 |
from pax.paxtransform import AttributeHandler, CompiledInformationHandler, \ |
from pax.paxtransform import AttributeHandler, CompiledInformationHandler, \ |
23 |
AttributeCompiler, StopTransform |
AttributeCompiler, StopTransform, TransformErrorHandler |
24 |
from pax import XML, Literal |
from pax import XML, Literal |
25 |
from pax.backwards_compatibility import * |
from pax.backwards_compatibility import * |
26 |
import re, sys |
import re, sys |
30 |
def __init__(self): |
def __init__(self): |
31 |
self.type, self.value, self.tb = sys.exc_info() |
self.type, self.value, self.tb = sys.exc_info() |
32 |
|
|
33 |
class ErrorHandler(object): |
class ErrorHandler(TransformErrorHandler): |
34 |
def __init__(self, element, context, value): |
def __init__(self, value): |
|
self.element = element |
|
|
self.context = context |
|
35 |
self.value = value |
self.value = value |
36 |
|
|
37 |
def __call__(self): |
def catch(self, element, context): |
38 |
self.context.setLocal('error', ErrorObject()) |
context.setLocal('error', ErrorObject()) |
39 |
return handle_content(self.element, self.context, self.value) |
return handle_content(element, context, self.value) |
40 |
|
|
41 |
def normalize(text): |
def normalize(text): |
42 |
return ' '.join(text.split()) |
return ' '.join(text.split()) |
51 |
return names[0], value |
return names[0], value |
52 |
|
|
53 |
def remove_attrs_till(name, element): |
def remove_attrs_till(name, element): |
54 |
data = getattr(element, tal_handler.compiled_name) |
data = getattr(element, tal_handler.compiled_name)[:] |
55 |
|
setattr(element, tal_handler.compiled_name, data) |
56 |
pname = None |
pname = None |
57 |
while data and pname != name: |
while data and pname != name: |
58 |
pname, pdata = data.pop(0) |
pname, pdata = data.pop(0) |
73 |
|
|
74 |
def handle_define(element, context, value): |
def handle_define(element, context, value): |
75 |
for is_global, name, expr in value: |
for is_global, name, expr in value: |
76 |
result = context.evaluateValue(expr) |
result = context.evaluate(expr) |
77 |
#print 'defining (%s) %s as %s' % (is_global, name, result) |
#print 'defining (%s) %s as %s' % (is_global, name, result) |
78 |
if is_global: |
if is_global: |
79 |
context.setGlobal(name, result) |
context.setGlobal(name, result) |
91 |
result = [] |
result = [] |
92 |
iterator = context.setRepeat(*value) |
iterator = context.setRepeat(*value) |
93 |
while iterator.next(): |
while iterator.next(): |
94 |
|
__traceback_info__ = u'%s = %r' % (value[0], context.vars.get(value[0])) |
95 |
result.append(context.tr_engine.transform(element, context)) |
result.append(context.tr_engine.transform(element, context)) |
96 |
raise StopTransform, (result,) |
raise StopTransform, (result,) |
97 |
|
|
123 |
value = context.evaluateText(expr) |
value = context.evaluateText(expr) |
124 |
if value is not context.getDefault(): |
if value is not context.getDefault(): |
125 |
nsattrs = element.attributes.setdefault(ns, {}) |
nsattrs = element.attributes.setdefault(ns, {}) |
126 |
if value: |
if value or value=='': |
127 |
nsattrs[name] = value |
nsattrs[name] = value |
128 |
else: |
else: |
129 |
try: |
try: |
137 |
return element |
return element |
138 |
return element.children |
return element.children |
139 |
|
|
|
def handle_on_error(element, context, value): |
|
|
context.error_handler = ErrorHandler(element, context, value) |
|
|
return element |
|
|
|
|
140 |
def tal_start(element, context): |
def tal_start(element, context): |
141 |
context.beginScope() |
context.beginScope() |
142 |
context.setLocal('attrs', element.attributes.get(element.ns, {})) |
context.setLocal('attrs', element.attributes.get(element.ns, {})) |
163 |
|
|
164 |
|
|
165 |
tal_handler = CompiledInformationHandler('tal', tal_ns) |
tal_handler = CompiledInformationHandler('tal', tal_ns) |
|
tal_handler.add_handler('on-error', handle_on_error) |
|
166 |
tal_handler.add_handler('define', handle_define) |
tal_handler.add_handler('define', handle_define) |
167 |
tal_handler.add_handler('condition', handle_condition) |
tal_handler.add_handler('condition', handle_condition) |
168 |
tal_handler.add_handler('repeat', handle_repeat) |
tal_handler.add_handler('repeat', handle_repeat) |
176 |
|
|
177 |
# TAL compiler |
# TAL compiler |
178 |
|
|
179 |
#def compile_simple(element, context, value): |
def compile_on_error(element, context, value): |
180 |
# return value |
return ErrorHandler(compile_simple_expr(element, context, value)) |
181 |
|
|
182 |
def compile_define(element, context, value): |
def compile_define(element, context, value): |
183 |
data = [] |
data = [] |
238 |
|
|
239 |
|
|
240 |
tal_compiler = AttributeCompiler('tal', tal_ns) |
tal_compiler = AttributeCompiler('tal', tal_ns) |
241 |
tal_compiler.add_handler('on-error', compile_simple_expr) |
tal_compiler.add_handler('on-error', compile_on_error) |
242 |
tal_compiler.add_handler('define', compile_define) |
tal_compiler.add_handler('define', compile_define) |
243 |
tal_compiler.add_handler('condition', compile_condition) |
tal_compiler.add_handler('condition', compile_condition) |
244 |
tal_compiler.add_handler('repeat', compile_repeat) |
tal_compiler.add_handler('repeat', compile_repeat) |