switch away from svn, fix #283.
[jinja2.git] / jdebug.py
1 # -*- 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 """
11 import os
12 import sys
13 from jinja import Environment
14 from jinja.parser import Parser
15 from jinja.lexer import Lexer
16 from jinja.translators.python import PythonTranslator
17
18
19 __all__ = ['e', 't', 'p', 'l']
20
21 e = Environment()
22 t = e.from_string
23
24
25 if 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
36 def p(x=None, f=None):
37     if x is None and f is not None:
38         x = e.loader.get_source(f)
39     print PythonTranslator(e, Parser(e, x, f).parse(), None).translate()
40
41 def l(x):
42     for token in e.lexer.tokenize(x):
43         print '%5s  %-20s  %r' % (item.lineno,
44                                   item.type,
45                                   item.value)
46
47 if __name__ == '__main__':
48     if len(sys.argv) > 1:
49         from jinja import FileSystemLoader
50         e.loader = FileSystemLoader(sys.argv[1])
51     if len(sys.argv) > 2:
52         p(f=sys.argv[2])
53     else:
54         p(sys.stdin.read())