Fixed pygments plugin to support all current Mako syntax.
diff --git a/lib/mako/ext/pygmentplugin.py b/lib/mako/ext/pygmentplugin.py index 0255e60..e0f1c8c 100644 --- a/lib/mako/ext/pygmentplugin.py +++ b/lib/mako/ext/pygmentplugin.py
@@ -20,57 +20,41 @@ tokens = { 'root': [ - (r'\s+', Text), - (r'<%(?=def)', Name.Tag, 'makodef'), - (r'<%(?=call)', Name.Tag, 'makocall'), - (r'<%(?=(include|inherit|namespace|page))', Name.Tag, 'makonondeftags'), - (r'^\s*?(%)([^\n]*)(\n|\Z)', - bygroups(Name.Tag, using(PythonLexer), Other)), - (r'(.*?)(\$\{)(\s*)(.*?)(\s*?)(\})', - bygroups(using(this), Name.Tag, Text, using(PythonLexer), Text, Name.Tag)), + (r'(\s*)(\%)(\s*endfor|endwhile|endif)(\n|\Z)', + bygroups(Text, Comment.Preproc, Name.Tag, Other)), + (r'(\s*)(\%)([^\n]*)(\n|\Z)', + bygroups(Text, Comment.Preproc, using(PythonLexer), Other)), + (r'(<%)(def|call)', bygroups(Comment.Preproc, Name.Builtin), 'tag'), + (r'(</%)(def|call)(>)', bygroups(Comment.Preproc, Name.Builtin, Comment.Preproc)), + (r'<%(?=(include|inherit|namespace|page))', Comment.Preproc, 'ondeftags'), + (r'(\$\{)(.*?)(\})', + bygroups(Comment.Preproc, using(PythonLexer), Comment.Preproc)), (r'''(?sx) (.+?) # anything, followed by: (?: (?<=\n)(?=[%#]) | # an eval or comment line - (?=</?[%&]) | # a substitution or block or + (?=</?%) | # a substitution or block or # call start or end + (?=\$\{) | + (?<=\n)(?=\s*%) | # - don't consume (\\\n) | # an escaped newline \Z # end of string ) ''', bygroups(Other, Operator)), + (r'\s+', Text), ], - 'makodef': [ - (r'(?<=<%)def\s+', Name.Function), - (r'(?=name=)', Name.Attribute, 'nametag'), - (r'(</)(%def)(>)', bygroups(Name.Tag, Name.Function, Name.Tag), '#pop'), - (r'.*?(?=</%def>)(?s)', using(this)), - ], - 'makocall': [ - (r'(?<=<%)call\s+', Name.Function), - (r'(?=expr=)', Name.Attribute, 'exprtag'), - (r'(</)(%call)(>)', bygroups(Name.Tag, Name.Function, Name.Tag), '#pop'), - (r'.*?(?=</%call>)(?s)', using(this)), - ], - 'nametag': [ - (r'(name\s*=)\s*(")(.*?)(")', - bygroups(Name.Attribute, String, using(PythonLexer), String)), - include('tag'), - ], - 'exprtag': [ - (r'(expr\s*=)\s*(")(.*?)(")', - bygroups(Name.Attribute, String, using(PythonLexer), String)), - include('tag'), - ], - 'makonondeftags': [ - (r'<%', Name.Tag), - (r'(?<=<%)(include|inherit|namespace|page)', Name.Function), + 'ondeftags': [ + (r'<%', Comment.Preproc), + (r'(?<=<%)(include|inherit|namespace|page)', Name.Builtin), include('tag'), ], 'tag': [ - (r'\s+', Text), + (r'((?:name|expr)\s*=)\s*(")(.*?)(")', + bygroups(Name.Attribute, String, using(PythonLexer), String)), (r'[a-zA-Z0-9_:-]+\s*=', Name.Attribute, 'attr'), - (r'/?\s*>', Name.Tag, '#pop'), + (r'/?\s*>', Comment.Preproc, '#pop'), + (r'\s+', Text), ], 'attr': [ ('".*?"', String, '#pop'),