blob: 487ec66891c1870573c6701be3a71ab58efba4d9 [file] [log] [blame]
Armin Ronacher19863ef2007-03-02 07:07:57 +01001# -*- coding: utf-8 -*-
2"""
3 jdebug
4 ~~~~~~
5
6 Helper module to simplify jinja debugging. Use
7
8 :copyright: 2006 by Armin Ronacher.
9 :license: BSD, see LICENSE for more details.
10"""
Armin Ronachera6901462007-03-29 20:03:40 +020011import os
12import sys
Armin Ronacher19863ef2007-03-02 07:07:57 +010013from jinja import Environment
14from jinja.parser import Parser
Armin Ronacherb9c8ae12007-03-20 00:14:10 +010015from jinja.lexer import Lexer
Armin Ronacher19863ef2007-03-02 07:07:57 +010016from jinja.translators.python import PythonTranslator
17
18
Armin Ronacherb9c8ae12007-03-20 00:14:10 +010019__all__ = ['e', 't', 'p', 'l']
Armin Ronacher19863ef2007-03-02 07:07:57 +010020
21e = Environment()
22t = e.from_string
23
Armin Ronachera6901462007-03-29 20:03:40 +020024
25if os.environ.get('JDEBUG_SOURCEPRINT'):
26 original_translate = PythonTranslator.translate
27
28 def debug_translate(self):
29 rv = original_translate(self)
30 sys.stderr.write('## GENERATED SOURCE:\n%s\n' % rv)
31 return rv
32
33 PythonTranslator.translate = debug_translate
34
35
Armin Ronacherfb5bebc2007-04-27 18:24:19 +020036def p(x=None, f=None):
37 if x is None and f is not None:
38 x = e.loader.get_source(f)
Armin Ronacher34f30422007-03-30 21:58:15 +020039 print PythonTranslator(e, Parser(e, x, f).parse()).translate()
Armin Ronacherb9c8ae12007-03-20 00:14:10 +010040
41def l(x):
42 for item in e.lexer.tokenize(x):
43 print '%5s %-20s %r' % item
Armin Ronacherfb5bebc2007-04-27 18:24:19 +020044
45if __name__ == '__main__':
46 if len(sys.argv) > 1:
47 from jinja import FileSystemLoader
48 e.loader = FileSystemLoader(sys.argv[1])
49 if len(sys.argv) > 2:
50 p(f=sys.argv[2])
51 else:
52 p(sys.stdin.read())