Ticket #55: pymatch-expr.diff
| File pymatch-expr.diff, 3.3 KB (added by hodgestar+genshi@…, 17 years ago) |
|---|
-
genshi/template/tests/markup.py
276 276 finally: 277 277 shutil.rmtree(dirname) 278 278 279 def test_dynamic_match(self): 280 dirname = tempfile.mkdtemp(suffix='genshi_test') 281 try: 282 file1 = open(os.path.join(dirname, 'tmpl1.html'), 'w') 283 try: 284 file1.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude" 285 xmlns:py="http://genshi.edgewall.org/"> 286 <span py:match="${xpath}ing"> 287 Hello ${select('@name')} 288 </span> 289 <span>Some intervening text.</span> 290 <greeting name="Dude" /> 291 </html>""") 292 finally: 293 file1.close() 294 295 loader = TemplateLoader([dirname]) 296 tmpl = loader.load('tmpl1.html') 297 self.assertEqual("""<html> 298 <span>Some intervening text.</span> 299 <span> 300 Hello Dude 301 </span> 302 </html>""", tmpl.generate(xpath='greet').render()) 303 finally: 304 shutil.rmtree(dirname) 305 279 306 def test_fallback_when_include_found(self): 280 307 dirname = tempfile.mkdtemp(suffix='genshi_test') 281 308 try: -
genshi/template/directives.py
18 18 from genshi.core import Attrs, Stream 19 19 from genshi.path import Path 20 20 from genshi.template.core import TemplateRuntimeError, TemplateSyntaxError, \ 21 EXPR, _apply_directives 21 EXPR, _apply_directives, Template 22 22 from genshi.template.eval import Expression, _parse 23 23 24 24 __all__ = ['AttrsDirective', 'ChooseDirective', 'ContentDirective', … … 393 393 </span> 394 394 </div> 395 395 """ 396 __slots__ = ['path ', 'namespaces']396 __slots__ = ['pathlist', 'namespaces', 'filename', 'lineno'] 397 397 398 398 ATTRIBUTE = 'path' 399 399 400 400 def __init__(self, value, namespaces=None, filename=None, lineno=-1, 401 401 offset=-1): 402 402 Directive.__init__(self, None, namespaces, filename, lineno, offset) 403 self.path = Path(value, filename, lineno) 403 self.filename = filename 404 self.lineno = lineno 405 self.pathlist = list(Template._interpolate(value, None, filename, lineno, offset)) 404 406 self.namespaces = namespaces or {} 405 407 406 408 def __call__(self, stream, ctxt, directives): 407 ctxt._match_templates.append((self.path.test(ignore_context=True), 408 self.path, list(stream), self.namespaces, 409 path_value = "".join([(kind is EXPR) and data.evaluate(ctxt) or data for (kind, data, pos) in self.pathlist]) 410 path = Path(path_value, self.filename, self.lineno) 411 ctxt._match_templates.append((path.test(ignore_context=True), 412 path, list(stream), self.namespaces, 409 413 directives)) 410 414 return [] 411 415
