diff options
author | blackbird <devnull@localhost> | 2006-10-28 00:33:42 +0200 |
---|---|---|
committer | blackbird <devnull@localhost> | 2006-10-28 00:33:42 +0200 |
commit | 90d25759c86c03bd5a4d1d2420ac7c2c6cb199fd (patch) | |
tree | 35764b3c063e20dd8e6c914a495e435314b21f2e | |
parent | 0b4ae9ab3fa6057dce2833a3e34ba01511c10e44 (diff) | |
download | pygments-90d25759c86c03bd5a4d1d2420ac7c2c6cb199fd.tar.gz |
[svn] added matt_good's genshi lexer (thx :D)
-rw-r--r-- | pygments/lexers/_mapping.py | 2 | ||||
-rw-r--r-- | pygments/lexers/templates.py | 80 |
2 files changed, 80 insertions, 2 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index 8d95bee0..c085100b 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -28,7 +28,9 @@ LEXERS = { 'DiffLexer': ('pygments.lexers.text', 'Diff', ('diff',), ('*.diff', '*.patch')), 'DjangoLexer': ('pygments.lexers.templates', 'django template', ('django',), ()), 'ErbLexer': ('pygments.lexers.templates', 'ERB', ('erb',), ()), + 'GenshiLexer': ('pygments.lexers.templates', 'Genshi', ('genshi', 'kid'), ()), 'HtmlDjangoLexer': ('pygments.lexers.templates', 'HTML+Django', ('html+django',), ()), + 'HtmlGenshiLexer': ('pygments.lexers.templates', 'HTML+Genshi', ('html+genshi', 'html+kid'), ()), 'HtmlLexer': ('pygments.lexers.web', 'HTML', ('html',), ('*.html', '*.htm', '*.xhtml')), 'HtmlPhpLexer': ('pygments.lexers.templates', 'HTML+PHP', ('html+php',), ('*.phtml',)), 'HtmlSmartyLexer': ('pygments.lexers.templates', 'HTML+Smarty', ('html+smarty',), ()), diff --git a/pygments/lexers/templates.py b/pygments/lexers/templates.py index e9771af5..347679b2 100644 --- a/pygments/lexers/templates.py +++ b/pygments/lexers/templates.py @@ -5,7 +5,7 @@ Lexers for various template engines. - :copyright: 2006 by Armin Ronacher, Georg Brandl. + :copyright: 2006 by Armin Ronacher, Georg Brandl, Matt Good. :license: GNU LGPL, see LICENSE for more details. """ @@ -17,6 +17,7 @@ except NameError: from pygments.lexers.web import \ PhpLexer, HtmlLexer, XmlLexer, JavascriptLexer, CssLexer +from pygments.lexers.agile import PythonLexer from pygments.lexer import \ Lexer, DelegatingLexer, RegexLexer, do_insertions, bygroups, include, using from pygments.token import \ @@ -29,7 +30,7 @@ __all__ = ['HtmlPhpLexer', 'XmlPhpLexer', 'CssPhpLexer', 'SmartyLexer', 'HtmlSmartyLexer', 'XmlSmartyLexer', 'CssSmartyLexer', 'JavascriptSmartyLexer', 'DjangoLexer', 'HtmlDjangoLexer', 'CssDjangoLexer', 'XmlDjangoLexer', - 'JavascriptDjangoLexer'] + 'JavascriptDjangoLexer', 'GenshiLexer', 'HtmlGenshiLexer'] class ErbLexer(Lexer): @@ -216,6 +217,81 @@ class DjangoLexer(RegexLexer): return rv +class GenshiMarkupLexer(RegexLexer): + flags = re.DOTALL + + tokens = { + 'root': [ + (r'[^<\$]+', Other), + (r'(<\?python)(.*?)(\?>)', + bygroups(Comment.Preproc, using(PythonLexer), Comment.Preproc)), + (r'<\s*py:[a-zA-Z0-9]+', Name.Tag, 'pytag'), + (r'<\s*[a-zA-Z0-9:]+', Name.Tag, 'tag'), + include('variable'), + (r'[<\$]', Other), + ], + 'pytag': [ + (r'\s+', Text), + (r'[a-zA-Z0-9_:-]+\s*=', Name.Attribute, 'pyattr'), + (r'/?\s*>', Name.Tag, '#pop'), + ], + 'pyattr': [ + ('(")(.*?)(")', bygroups(String, using(PythonLexer), String), '#pop'), + ("(')(.*?)(')", bygroups(String, using(PythonLexer), String), '#pop'), + (r'[^\s>]+', String, '#pop'), + ], + 'tag': [ + (r'\s+', Text), + (r'py:[a-zA-Z0-9_-]+\s*=', Name.Attribute, 'pyattr'), + (r'[a-zA-Z0-9_:-]+\s*=', Name.Attribute, 'attr'), + (r'/?\s*>', Name.Tag, '#pop'), + ], + 'attr': [ + ('"', String, 'attr-dstring'), + ("'", String, 'attr-sstring'), + (r'[^\s>]*', String, '#pop') + ], + 'attr-dstring': [ + ('"', String, '#pop'), + include('strings'), + ("'", String) + ], + 'attr-sstring': [ + ("'", String, '#pop'), + include('strings'), + ("'", String) + ], + 'strings': [ + ('[^"\'$]+', String), + include('variable') + ], + 'variable': [ + (r'(?<!\$)(\$\{)(.+?)(\})', + bygroups(Comment.Preproc, using(PythonLexer), Comment.Preproc)), + (r'(?<!\$)(\$)([a-zA-Z_][a-zA-Z0-9_\.]*)', + Name.Variable), + ] + } + + +class HtmlGenshiLexer(DelegatingLexer): + name = 'HTML+Genshi' + aliases = ['html+genshi', 'html+kid'] + + def __init__(self, **options): + super(HtmlGenshiLexer, self).__init__(HtmlLexer, GenshiMarkupLexer, + **options) + + +class GenshiLexer(DelegatingLexer): + name = 'Genshi' + aliases = ['genshi', 'kid', 'xml+genshi', 'xml+kid'] + + def __init__(self, **options): + super(GenshiLexer, self).__init__(HtmlLexer, GenshiMarkupLexer, + **options) + + class RhtmlLexer(DelegatingLexer): name = 'RHTML' aliases = ['rhtml', 'html+erb', 'html+ruby'] |