improved debugging for syntax errors

--HG--
branch : trunk
diff --git a/jinja2/debug.py b/jinja2/debug.py
index 622f2b3..a9b4439 100644
--- a/jinja2/debug.py
+++ b/jinja2/debug.py
@@ -33,6 +33,24 @@
     return exc_info[:2] + (result_tb or initial_tb,)
 
 
+def translate_syntax_error(error):
+    """When passed a syntax error it will generate a new traceback with
+    more debugging information.
+    """
+    filename = error.filename
+    if filename is None:
+        filename = '<template>'
+    elif isinstance(filename, unicode):
+        filename = filename.encode('utf-8')
+    code = compile('\n' * (error.lineno - 1) + 'raise __jinja_exception__',
+                   filename, 'exec')
+    try:
+        exec code in {'__jinja_exception__': error}
+    except:
+        exc_info = sys.exc_info()
+        return exc_info[:2] + (exc_info[2].tb_next,)
+
+
 def fake_exc_info(exc_info, filename, lineno, tb_back=None):
     """Helper for `translate_exception`."""
     exc_type, exc_value, tb = exc_info