| Viewing file:  pygmentplugin.py (4.83 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
# ext/pygmentplugin.py# Copyright 2006-2019 the Mako authors and contributors <see AUTHORS file>
 #
 # This module is part of Mako and is released under
 # the MIT License: http://www.opensource.org/licenses/mit-license.php
 
 from pygments import highlight
 from pygments.formatters.html import HtmlFormatter
 from pygments.lexer import bygroups
 from pygments.lexer import DelegatingLexer
 from pygments.lexer import include
 from pygments.lexer import RegexLexer
 from pygments.lexer import using
 from pygments.lexers.agile import Python3Lexer
 from pygments.lexers.agile import PythonLexer
 from pygments.lexers.web import CssLexer
 from pygments.lexers.web import HtmlLexer
 from pygments.lexers.web import JavascriptLexer
 from pygments.lexers.web import XmlLexer
 from pygments.token import Comment
 from pygments.token import Keyword
 from pygments.token import Name
 from pygments.token import Operator
 from pygments.token import Other
 from pygments.token import String
 from pygments.token import Text
 
 from mako import compat
 
 
 class MakoLexer(RegexLexer):
 name = "Mako"
 aliases = ["mako"]
 filenames = ["*.mao"]
 
 tokens = {
 "root": [
 (
 r"(\s*)(\%)(\s*end(?:\w+))(\n|\Z)",
 bygroups(Text, Comment.Preproc, Keyword, Other),
 ),
 (
 r"(\s*)(\%(?!%))([^\n]*)(\n|\Z)",
 bygroups(Text, Comment.Preproc, using(PythonLexer), Other),
 ),
 (
 r"(\s*)(##[^\n]*)(\n|\Z)",
 bygroups(Text, Comment.Preproc, Other),
 ),
 (r"""(?s)<%doc>.*?</%doc>""", Comment.Preproc),
 (
 r"(<%)([\w\.\:]+)",
 bygroups(Comment.Preproc, Name.Builtin),
 "tag",
 ),
 (
 r"(</%)([\w\.\:]+)(>)",
 bygroups(Comment.Preproc, Name.Builtin, Comment.Preproc),
 ),
 (r"<%(?=([\w\.\:]+))", Comment.Preproc, "ondeftags"),
 (
 r"(?s)(<%(?:!?))(.*?)(%>)",
 bygroups(Comment.Preproc, using(PythonLexer), Comment.Preproc),
 ),
 (
 r"(\$\{)(.*?)(\})",
 bygroups(Comment.Preproc, using(PythonLexer), Comment.Preproc),
 ),
 (
 r"""(?sx)
 (.+?)               # anything, followed by:
 (?:
 (?<=\n)(?=%(?!%)|\#\#) |  # an eval or comment line
 (?=\#\*) |          # multiline comment
 (?=</?%) |         # a python block
 # call start or end
 (?=\$\{) |         # a substitution
 (?<=\n)(?=\s*%) |
 # - don't consume
 (\\\n) |           # an escaped newline
 \Z                 # end of string
 )
 """,
 bygroups(Other, Operator),
 ),
 (r"\s+", Text),
 ],
 "ondeftags": [
 (r"<%", Comment.Preproc),
 (r"(?<=<%)(include|inherit|namespace|page)", Name.Builtin),
 include("tag"),
 ],
 "tag": [
 (r'((?:\w+)\s*=)\s*(".*?")', bygroups(Name.Attribute, String)),
 (r"/?\s*>", Comment.Preproc, "#pop"),
 (r"\s+", Text),
 ],
 "attr": [
 ('".*?"', String, "#pop"),
 ("'.*?'", String, "#pop"),
 (r"[^\s>]+", String, "#pop"),
 ],
 }
 
 
 class MakoHtmlLexer(DelegatingLexer):
 name = "HTML+Mako"
 aliases = ["html+mako"]
 
 def __init__(self, **options):
 super(MakoHtmlLexer, self).__init__(HtmlLexer, MakoLexer, **options)
 
 
 class MakoXmlLexer(DelegatingLexer):
 name = "XML+Mako"
 aliases = ["xml+mako"]
 
 def __init__(self, **options):
 super(MakoXmlLexer, self).__init__(XmlLexer, MakoLexer, **options)
 
 
 class MakoJavascriptLexer(DelegatingLexer):
 name = "JavaScript+Mako"
 aliases = ["js+mako", "javascript+mako"]
 
 def __init__(self, **options):
 super(MakoJavascriptLexer, self).__init__(
 JavascriptLexer, MakoLexer, **options
 )
 
 
 class MakoCssLexer(DelegatingLexer):
 name = "CSS+Mako"
 aliases = ["css+mako"]
 
 def __init__(self, **options):
 super(MakoCssLexer, self).__init__(CssLexer, MakoLexer, **options)
 
 
 pygments_html_formatter = HtmlFormatter(
 cssclass="syntax-highlighted", linenos=True
 )
 
 
 def syntax_highlight(filename="", language=None):
 mako_lexer = MakoLexer()
 if compat.py3k:
 python_lexer = Python3Lexer()
 else:
 python_lexer = PythonLexer()
 if filename.startswith("memory:") or language == "mako":
 return lambda string: highlight(
 string, mako_lexer, pygments_html_formatter
 )
 return lambda string: highlight(
 string, python_lexer, pygments_html_formatter
 )
 
 |