/[opental]/opental/OpenTAL/tal_handler.py
ViewVC logotype

Diff of /opental/OpenTAL/tal_handler.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.29 by lalo, Wed Feb 26 20:01:22 2003 UTC revision 1.30 by lalo, Mon Apr 7 13:46:48 2003 UTC
# Line 20  Line 20 
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
# Line 30  class ErrorObject(object): Line 30  class ErrorObject(object):
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())
# Line 53  def split_spec(value, *names): Line 51  def split_spec(value, *names):
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)
# Line 74  def split_multiple(s): Line 73  def split_multiple(s):
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)
# Line 92  def handle_repeat(element, context, valu Line 91  def handle_repeat(element, context, valu
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    
# Line 123  def handle_attributes(element, context, Line 123  def handle_attributes(element, context,
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:
# Line 137  def handle_omit_tag(element, context, va Line 137  def handle_omit_tag(element, context, va
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, {}))
# Line 167  def tal_finish(element, context): Line 163  def tal_finish(element, context):
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)
# Line 181  tal_handler.postprocess = tal_finish Line 176  tal_handler.postprocess = tal_finish
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 = []
# Line 243  def compile_tal_finish(element, context) Line 238  def compile_tal_finish(element, context)
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)

Legend:
Removed from v.1.29  
changed lines
  Added in v.1.30

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26