summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--CHANGES2
-rw-r--r--pygments/lexers/_mapping.py1
-rw-r--r--pygments/lexers/templates.py59
4 files changed, 61 insertions, 2 deletions
diff --git a/AUTHORS b/AUTHORS
index 5a54501b..84fe1ad6 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -37,6 +37,7 @@ Other contributors, listed alphabetically, are:
* Aslak Hellesøy -- Gherkin lexer
* David Hess, Fish Software, Inc. -- Objective-J lexer
* Varun Hiremath -- Debian control lexer
+* Ben Hollis -- Mason lexer
* Tim Howard -- BlitzMax lexer
* Dennis Kaarsemaker -- sources.list lexer
* Benjamin Kowarsch -- Modula-2 lexer
diff --git a/CHANGES b/CHANGES
index b528fb8c..fe1471e3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -18,6 +18,8 @@ Version 1.4
* Java properties, split out of the INI lexer (#445)
* Scss (#509)
* Duel/JBST
+ * XQuery (#617)
+ * Mason (#615)
- Do not fail in analyse_text methods (#618).
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py
index 1c5791c8..500a69d7 100644
--- a/pygments/lexers/_mapping.py
+++ b/pygments/lexers/_mapping.py
@@ -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..dc213d3a 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',
@@ -505,6 +505,61 @@ class MyghtyCssLexer(DelegatingLexer):
**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/
+
+ *New in Pygments 1.4.*
+ """
+ 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):
"""
Generic `mako templates`_ lexer. Code that isn't Mako