summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorblackbird <devnull@localhost>2006-10-28 00:33:42 +0200
committerblackbird <devnull@localhost>2006-10-28 00:33:42 +0200
commit90d25759c86c03bd5a4d1d2420ac7c2c6cb199fd (patch)
tree35764b3c063e20dd8e6c914a495e435314b21f2e
parent0b4ae9ab3fa6057dce2833a3e34ba01511c10e44 (diff)
downloadpygments-90d25759c86c03bd5a4d1d2420ac7c2c6cb199fd.tar.gz
[svn] added matt_good's genshi lexer (thx :D)
-rw-r--r--pygments/lexers/_mapping.py2
-rw-r--r--pygments/lexers/templates.py80
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']