Ticket #115: genshi-textinclude.diff
| File genshi-textinclude.diff, 4.3 KB (added by alastair@…, 16 years ago) |
|---|
-
genshi/template/directives.py
diff -u -r Genshi-0.4/genshi/template/directives.py Genshi-0.4-textinclude/genshi/template/directives.py
old new 24 24 __all__ = ['AttrsDirective', 'ChooseDirective', 'ContentDirective', 25 25 'DefDirective', 'ForDirective', 'IfDirective', 'MatchDirective', 26 26 'OtherwiseDirective', 'ReplaceDirective', 'StripDirective', 27 'WhenDirective', 'WithDirective' ]27 'WhenDirective', 'WithDirective', 'IncludeDirective'] 28 28 __docformat__ = 'restructuredtext en' 29 29 30 30 … … 676 676 677 677 def __repr__(self): 678 678 return '<%s>' % (self.__class__.__name__) 679 680 681 class IncludeDirective(Directive): 682 """Implementation of the #include template directive for including 683 template output.""" 684 __slots__ = ['include_ref', 'relative_to', 'loader'] 685 686 def __init__(self, value, template, namespaces=None, lineno=-1, offset=-1): 687 Directive.__init__(self, None, template, namespaces, lineno, offset) 688 self.include_ref = value 689 self.relative_to = template.filepath 690 self.loader = template.loader 691 692 def __call__(self, stream, ctxt, directives): 693 import genshi.template.text 694 template = self.loader.load(self.include_ref, 695 relative_to=self.relative_to, 696 cls=genshi.template.text.TextTemplate) 697 698 return _apply_directives(template.generate(ctxt), 699 ctxt, directives) 700 def __repr__(self): 701 return '<%s "%s">' % (self.__class__.__name__, self.include_ref) -
genshi/template/tests/text.py
diff -u -r Genshi-0.4/genshi/template/tests/text.py Genshi-0.4-textinclude/genshi/template/tests/text.py
old new 13 13 14 14 import doctest 15 15 import unittest 16 import shutil 17 import os 18 import tempfile 16 19 17 20 from genshi.template.text import TextTemplate 18 21 from genshi.template.loader import TemplateLoader 19 22 20 23 class TextTemplateTestCase(unittest.TestCase): 21 24 """Tests for text template processing.""" 22 25 26 def setUp(self): 27 self.dirname = tempfile.mkdtemp(suffix='markup_test') 28 29 def tearDown(self): 30 shutil.rmtree(self.dirname) 31 23 32 def test_escaping(self): 24 33 tmpl = TextTemplate('\\#escaped') 25 34 self.assertEqual('#escaped', str(tmpl.generate())) … … 74 83 75 84 """, tmpl.generate(items=range(3)).render('text')) 76 85 77 86 def test_include(self): 87 file1 = open(os.path.join(self.dirname, 'tmpl1.txt'), 'w') 88 try: 89 file1.write("Included\n") 90 finally: 91 file1.close() 92 93 file2 = open(os.path.join(self.dirname, 'tmpl2.txt'), 'w') 94 try: 95 file2.write("""----- Included data below this line ----- 96 #include tmpl1.txt 97 ----- Included data above this line -----""") 98 finally: 99 file2.close() 100 101 loader = TemplateLoader([self.dirname]) 102 tmpl = loader.load('tmpl2.txt', cls=TextTemplate) 103 self.assertEqual("""----- Included data below this line ----- 104 Included 105 ----- Included data above this line -----""", 106 tmpl.generate().render()) 107 78 108 def suite(): 79 109 suite = unittest.TestSuite() 80 110 suite.addTest(doctest.DocTestSuite(TextTemplate.__module__)) -
genshi/template/text.py
diff -u -r Genshi-0.4/genshi/template/text.py Genshi-0.4-textinclude/genshi/template/text.py
old new 95 95 substream = stream[start_offset:] 96 96 stream[start_offset:] = [(SUB, ([directive], substream), 97 97 (self.filepath, lineno, 0))] 98 elif command == 'include': 99 pos = (self.filename, lineno, 0) 100 directive = IncludeDirective, value.strip(), None, pos 101 stream.append((SUB, ([directive], []), pos)) 98 102 elif command != '#': 99 103 cls = self._dir_by_name.get(command) 100 104 if cls is None:
