summaryrefslogtreecommitdiff
path: root/pygments
diff options
context:
space:
mode:
authorBen Hollis <bhollis@amazon.com>2010-11-16 21:28:45 -0800
committerBen Hollis <bhollis@amazon.com>2010-11-16 21:28:45 -0800
commit84dec8685de67a94c6486801298f4e7dba447d6f (patch)
treef6aab84738b3264ecf75bc638f13fc332a9e379d /pygments
parentbf7ec0257897941cf0c387437813aa5e6d776369 (diff)
downloadpygments-84dec8685de67a94c6486801298f4e7dba447d6f.tar.gz
Add a Mason lexer
Diffstat (limited to 'pygments')
-rw-r--r--pygments/lexers/_mapping.py5
-rw-r--r--pygments/lexers/templates.py55
2 files changed, 56 insertions, 4 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py
index b444824d..8768027a 100644
--- a/pygments/lexers/_mapping.py
+++ b/pygments/lexers/_mapping.py
@@ -69,7 +69,7 @@ LEXERS = {
'DelphiLexer': ('pygments.lexers.compiled', 'Delphi', ('delphi', 'pas', 'pascal', 'objectpascal'), ('*.pas',), ('text/x-pascal',)),
'DiffLexer': ('pygments.lexers.text', 'Diff', ('diff', 'udiff'), ('*.diff', '*.patch'), ('text/x-diff', 'text/x-patch')),
'DjangoLexer': ('pygments.lexers.templates', 'Django/Jinja', ('django', 'jinja'), (), ('application/x-django-templating', 'application/x-jinja')),
- 'DuelLexer': ('pygments.lexers.web', 'Duel', ('duel', 'Duel Engine', 'Duel View', 'JBST', 'jbst', 'JsonML+BST'), ('*.duel', '*.jbst',), ('text/x-duel', 'text/x-jbst',)),
+ 'DuelLexer': ('pygments.lexers.web', 'Duel', ('duel', 'Duel Engine', 'Duel View', 'JBST', 'jbst', 'JsonML+BST'), ('*.duel', '*.jbst'), ('text/x-duel', 'text/x-jbst')),
'DylanLexer': ('pygments.lexers.compiled', 'Dylan', ('dylan',), ('*.dylan',), ('text/x-dylan',)),
'ErbLexer': ('pygments.lexers.templates', 'ERB', ('erb',), (), ('application/x-ruby-templating',)),
'ErlangLexer': ('pygments.lexers.functional', 'Erlang', ('erlang',), ('*.erl', '*.hrl'), ('text/x-erlang',)),
@@ -101,7 +101,7 @@ LEXERS = {
'IoLexer': ('pygments.lexers.agile', 'Io', ('io',), ('*.io',), ('text/x-iosrc',)),
'IokeLexer': ('pygments.lexers.agile', 'Ioke', ('ioke', 'ik'), ('*.ik',), ('text/x-iokesrc',)),
'IrcLogsLexer': ('pygments.lexers.text', 'IRC logs', ('irc',), ('*.weechatlog',), ('text/x-irclog',)),
- 'JadeLexer': ('pygments.lexers.web', 'Jade', ('jade', 'JADE'), ('*.jade',), ('text/x-scaml',)),
+ 'JadeLexer': ('pygments.lexers.web', 'Jade', ('jade', 'JADE'), ('*.jade',), ('text/x-jade',)),
'JavaLexer': ('pygments.lexers.compiled', 'Java', ('java',), ('*.java',), ('text/x-java',)),
'JavascriptDjangoLexer': ('pygments.lexers.templates', 'JavaScript+Django/Jinja', ('js+django', 'javascript+django', 'js+jinja', 'javascript+jinja'), (), ('application/x-javascript+django', 'application/x-javascript+jinja', 'text/x-javascript+django', 'text/x-javascript+jinja', 'text/javascript+django', 'text/javascript+jinja')),
'JavascriptErbLexer': ('pygments.lexers.templates', 'JavaScript+Ruby', ('js+erb', 'javascript+erb', 'js+ruby', 'javascript+ruby'), (), ('application/x-javascript+ruby', 'text/x-javascript+ruby', 'text/javascript+ruby')),
@@ -122,6 +122,7 @@ LEXERS = {
'MakoJavascriptLexer': ('pygments.lexers.templates', 'JavaScript+Mako', ('js+mako', 'javascript+mako'), (), ('application/x-javascript+mako', 'text/x-javascript+mako', 'text/javascript+mako')),
'MakoLexer': ('pygments.lexers.templates', 'Mako', ('mako',), ('*.mao',), ('application/x-mako',)),
'MakoXmlLexer': ('pygments.lexers.templates', 'XML+Mako', ('xml+mako',), (), ('application/xml+mako',)),
+ 'MasonLexer': ('pygments.lexers.templates', 'Mason', ('mason',), ('*.m', '*.mhtml', '*.mc', '*.mi', 'autohandler', 'dhandler'), ('application/x-mason',)),
'MatlabLexer': ('pygments.lexers.math', 'Matlab', ('matlab', 'octave'), ('*.m',), ('text/matlab',)),
'MatlabSessionLexer': ('pygments.lexers.math', 'Matlab session', ('matlabsession',), (), ()),
'MiniDLexer': ('pygments.lexers.agile', 'MiniD', ('minid',), ('*.md',), ('text/x-minidsrc',)),
diff --git a/pygments/lexers/templates.py b/pygments/lexers/templates.py
index cdfa149c..295c4efb 100644
--- a/pygments/lexers/templates.py
+++ b/pygments/lexers/templates.py
@@ -13,7 +13,7 @@ import re
from pygments.lexers.web import \
PhpLexer, HtmlLexer, XmlLexer, JavascriptLexer, CssLexer
-from pygments.lexers.agile import PythonLexer
+from pygments.lexers.agile import PythonLexer, PerlLexer
from pygments.lexers.compiled import JavaLexer
from pygments.lexer import Lexer, DelegatingLexer, RegexLexer, bygroups, \
include, using, this
@@ -30,7 +30,7 @@ __all__ = ['HtmlPhpLexer', 'XmlPhpLexer', 'CssPhpLexer',
'JavascriptDjangoLexer', 'GenshiLexer', 'HtmlGenshiLexer',
'GenshiTextLexer', 'CssGenshiLexer', 'JavascriptGenshiLexer',
'MyghtyLexer', 'MyghtyHtmlLexer', 'MyghtyXmlLexer',
- 'MyghtyCssLexer', 'MyghtyJavascriptLexer', 'MakoLexer',
+ 'MyghtyCssLexer', 'MyghtyJavascriptLexer', 'MasonLexer', 'MakoLexer',
'MakoHtmlLexer', 'MakoXmlLexer', 'MakoJavascriptLexer',
'MakoCssLexer', 'JspLexer', 'CheetahLexer', 'CheetahHtmlLexer',
'CheetahXmlLexer', 'CheetahJavascriptLexer',
@@ -504,6 +504,57 @@ class MyghtyCssLexer(DelegatingLexer):
super(MyghtyCssLexer, self).__init__(CssLexer, MyghtyLexer,
**options)
+class MasonLexer(RegexLexer):
+ """
+ Generic `mason templates`_ lexer. Stolen from Myghty lexer. Code that isn't Mason
+ markup is HTML.
+
+ .. _mason templates: http://www.masonhq.com/
+ """
+ name = 'Mason'
+ aliases = ['mason']
+ filenames = ['*.m', '*.mhtml', '*.mc', '*.mi', 'autohandler', 'dhandler']
+ mimetypes = ['application/x-mason']
+
+ tokens = {
+ 'root': [
+ (r'\s+', Text),
+ (r'(<%doc>)(.*?)(</%doc>)(?s)',
+ bygroups(Name.Tag, Comment.Multiline, Name.Tag)),
+ (r'(<%(def|method))(\s*)(.*?)(>)(.*?)(</%\2\s*>)(?s)',
+ bygroups(Name.Tag, None, Text, Name.Function, Name.Tag,
+ using(this), Name.Tag)),
+ (r'(<%(\w+))(.*?)(>)(.*?)(</%\2\s*>)(?s)',
+ bygroups(Name.Tag, None, Name.Function, Name.Tag,
+ using(PerlLexer), Name.Tag)),
+ (r'(<&[^|])(.*?)(,.*?)?(&>)(?s)',
+ bygroups(Name.Tag, Name.Function, using(PerlLexer), Name.Tag)),
+ (r'(<&\|)(.*?)(,.*?)?(&>)(?s)',
+ bygroups(Name.Tag, Name.Function, using(PerlLexer), Name.Tag)),
+ (r'</&>', Name.Tag),
+ (r'(<%!?)(.*?)(%>)(?s)',
+ bygroups(Name.Tag, using(PerlLexer), Name.Tag)),
+ (r'(?<=^)#[^\n]*(\n|\Z)', Comment),
+ (r'(?<=^)(%)([^\n]*)(\n|\Z)',
+ bygroups(Name.Tag, using(PerlLexer), Other)),
+ (r"""(?sx)
+ (.+?) # anything, followed by:
+ (?:
+ (?<=\n)(?=[%#]) | # an eval or comment line
+ (?=</?[%&]) | # a substitution or block or
+ # call start or end
+ # - don't consume
+ (\\\n) | # an escaped newline
+ \Z # end of string
+ )""", bygroups(using(HtmlLexer), Operator)),
+ ]
+ }
+
+ def analyse_text(text):
+ rv = 0.0
+ if re.search('<&', text) is not None:
+ rv = 1.0
+ return rv
class MakoLexer(RegexLexer):
"""