pygments.rb 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +6 -1
- data/lexers +0 -0
- data/lib/pygments/version.rb +1 -1
- data/vendor/pygments-main/AUTHORS +15 -0
- data/vendor/pygments-main/CHANGES +28 -1
- data/vendor/pygments-main/LICENSE +1 -1
- data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +121 -0
- data/vendor/pygments-main/pygments/cmdline.py +1 -1
- data/vendor/pygments-main/pygments/filters/__init__.py +0 -1
- data/vendor/pygments-main/pygments/formatters/_mapping.py +2 -2
- data/vendor/pygments-main/pygments/formatters/img.py +1 -1
- data/vendor/pygments-main/pygments/formatters/latex.py +8 -8
- data/vendor/pygments-main/pygments/formatters/other.py +0 -2
- data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5413 -0
- data/vendor/pygments-main/pygments/lexers/_mapping.py +36 -11
- data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +551 -0
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +0 -1
- data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +546 -0
- data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +174 -0
- data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -3
- data/vendor/pygments-main/pygments/lexers/agile.py +145 -33
- data/vendor/pygments-main/pygments/lexers/asm.py +2 -2
- data/vendor/pygments-main/pygments/lexers/compiled.py +328 -36
- data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
- data/vendor/pygments-main/pygments/lexers/dotnet.py +8 -14
- data/vendor/pygments-main/pygments/lexers/functional.py +773 -8
- data/vendor/pygments-main/pygments/lexers/jvm.py +184 -36
- data/vendor/pygments-main/pygments/lexers/math.py +349 -23
- data/vendor/pygments-main/pygments/lexers/other.py +315 -492
- data/vendor/pygments-main/pygments/lexers/parsers.py +83 -1
- data/vendor/pygments-main/pygments/lexers/shell.py +4 -1
- data/vendor/pygments-main/pygments/lexers/templates.py +112 -2
- data/vendor/pygments-main/pygments/lexers/text.py +52 -3
- data/vendor/pygments-main/pygments/lexers/web.py +382 -36
- data/vendor/pygments-main/pygments/unistring.py +35 -25
- data/vendor/pygments-main/pygments/util.py +45 -0
- data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
- data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
- data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
- data/vendor/pygments-main/tests/examplefiles/example.ceylon +33 -0
- data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
- data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
- data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
- data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
- data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
- data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
- data/vendor/pygments-main/tests/examplefiles/example.stan +97 -0
- data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
- data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
- data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +123 -0
- data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
- data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
- data/vendor/pygments-main/tests/examplefiles/http_request_example +2 -1
- data/vendor/pygments-main/tests/examplefiles/http_response_example +4 -2
- data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
- data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
- data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
- data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
- data/vendor/pygments-main/tests/examplefiles/matlab_sample +5 -2
- data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
- data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
- data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
- data/vendor/pygments-main/tests/examplefiles/rust_example.rs +743 -0
- data/vendor/pygments-main/tests/examplefiles/test.R +149 -115
- data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
- data/vendor/pygments-main/tests/test_basic_api.py +1 -1
- data/vendor/pygments-main/tests/test_util.py +18 -0
- metadata +34 -3
- data/vendor/pygments-main/REVISION +0 -1
@@ -28,7 +28,8 @@ __all__ = ['RagelLexer', 'RagelEmbeddedLexer', 'RagelCLexer', 'RagelDLexer',
|
|
28
28
|
'AntlrPerlLexer', 'AntlrRubyLexer', 'AntlrCppLexer',
|
29
29
|
#'AntlrCLexer',
|
30
30
|
'AntlrCSharpLexer', 'AntlrObjectiveCLexer',
|
31
|
-
'AntlrJavaLexer', "AntlrActionScriptLexer"
|
31
|
+
'AntlrJavaLexer', "AntlrActionScriptLexer",
|
32
|
+
'TreetopLexer']
|
32
33
|
|
33
34
|
|
34
35
|
class RagelLexer(RegexLexer):
|
@@ -693,3 +694,84 @@ class AntlrActionScriptLexer(DelegatingLexer):
|
|
693
694
|
def analyse_text(text):
|
694
695
|
return AntlrLexer.analyse_text(text) and \
|
695
696
|
re.search(r'^\s*language\s*=\s*ActionScript\s*;', text, re.M)
|
697
|
+
|
698
|
+
class TreetopBaseLexer(RegexLexer):
|
699
|
+
"""
|
700
|
+
A base lexer for `Treetop <http://treetop.rubyforge.org/>`_ grammars.
|
701
|
+
Not for direct use; use TreetopLexer instead.
|
702
|
+
|
703
|
+
*New in Pygments 1.6.*
|
704
|
+
"""
|
705
|
+
|
706
|
+
tokens = {
|
707
|
+
'root': [
|
708
|
+
include('space'),
|
709
|
+
(r'require[ \t]+[^\n\r]+[\n\r]', Other),
|
710
|
+
(r'module\b', Keyword.Namespace, 'module'),
|
711
|
+
(r'grammar\b', Keyword, 'grammar'),
|
712
|
+
],
|
713
|
+
'module': [
|
714
|
+
include('space'),
|
715
|
+
include('end'),
|
716
|
+
(r'module\b', Keyword, '#push'),
|
717
|
+
(r'grammar\b', Keyword, 'grammar'),
|
718
|
+
(r'[A-Z][A-Za-z_0-9]*(?:::[A-Z][A-Za-z_0-9]*)*', Name.Namespace),
|
719
|
+
],
|
720
|
+
'grammar': [
|
721
|
+
include('space'),
|
722
|
+
include('end'),
|
723
|
+
(r'rule\b', Keyword, 'rule'),
|
724
|
+
(r'include\b', Keyword, 'include'),
|
725
|
+
(r'[A-Z][A-Za-z_0-9]*', Name),
|
726
|
+
],
|
727
|
+
'include': [
|
728
|
+
include('space'),
|
729
|
+
(r'[A-Z][A-Za-z_0-9]*(?:::[A-Z][A-Za-z_0-9]*)*', Name.Class, '#pop'),
|
730
|
+
],
|
731
|
+
'rule': [
|
732
|
+
include('space'),
|
733
|
+
include('end'),
|
734
|
+
(r'"(\\\\|\\"|[^"])*"', String.Double),
|
735
|
+
(r"'(\\\\|\\'|[^'])*'", String.Single),
|
736
|
+
(r'([A-Za-z_][A-Za-z_0-9]*)(:)', bygroups(Name.Label, Punctuation)),
|
737
|
+
(r'[A-Za-z_][A-Za-z_0-9]*', Name),
|
738
|
+
(r'[()]', Punctuation),
|
739
|
+
(r'[?+*/&!~]', Operator),
|
740
|
+
(r'\[(?:\\.|\[:\^?[a-z]+:\]|[^\\\]])+\]', String.Regex),
|
741
|
+
(r'([0-9]*)(\.\.)([0-9]*)', bygroups(Number.Integer, Operator, Number.Integer)),
|
742
|
+
(r'(<)([^>]+)(>)', bygroups(Punctuation, Name.Class, Punctuation)),
|
743
|
+
(r'{', Punctuation, 'inline_module'),
|
744
|
+
(r'\.', String.Regex),
|
745
|
+
],
|
746
|
+
'inline_module': [
|
747
|
+
(r'{', Other, 'ruby'),
|
748
|
+
(r'}', Punctuation, '#pop'),
|
749
|
+
(r'[^{}]+', Other),
|
750
|
+
],
|
751
|
+
'ruby': [
|
752
|
+
(r'{', Other, '#push'),
|
753
|
+
(r'}', Other, '#pop'),
|
754
|
+
(r'[^{}]+', Other),
|
755
|
+
],
|
756
|
+
'space': [
|
757
|
+
(r'[ \t\n\r]+', Whitespace),
|
758
|
+
(r'#[^\n]*', Comment.Single),
|
759
|
+
],
|
760
|
+
'end': [
|
761
|
+
(r'end\b', Keyword, '#pop'),
|
762
|
+
],
|
763
|
+
}
|
764
|
+
|
765
|
+
class TreetopLexer(DelegatingLexer):
|
766
|
+
"""
|
767
|
+
A lexer for `Treetop <http://treetop.rubyforge.org/>`_ grammars.
|
768
|
+
|
769
|
+
*New in Pygments 1.6.*
|
770
|
+
"""
|
771
|
+
|
772
|
+
name = 'Treetop'
|
773
|
+
aliases = ['treetop']
|
774
|
+
filenames = ['*.treetop', '*.tt']
|
775
|
+
|
776
|
+
def __init__(self, **options):
|
777
|
+
super(TreetopLexer, self).__init__(RubyLexer, TreetopBaseLexer, **options)
|
@@ -31,7 +31,7 @@ class BashLexer(RegexLexer):
|
|
31
31
|
"""
|
32
32
|
|
33
33
|
name = 'Bash'
|
34
|
-
aliases = ['bash', 'sh', 'ksh'
|
34
|
+
aliases = ['bash', 'sh', 'ksh']
|
35
35
|
filenames = ['*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass',
|
36
36
|
'.bashrc', 'bashrc', '.bash_*', 'bash_*']
|
37
37
|
mimetypes = ['application/x-sh', 'application/x-shellscript']
|
@@ -60,6 +60,7 @@ class BashLexer(RegexLexer):
|
|
60
60
|
(r'\\[\w\W]', String.Escape),
|
61
61
|
(r'(\b\w+)(\s*)(=)', bygroups(Name.Variable, Text, Operator)),
|
62
62
|
(r'[\[\]{}()=]', Operator),
|
63
|
+
(r'<<<', Operator), # here-string
|
63
64
|
(r'<<-?\s*(\'?)\\?(\w+)[\w\W]+?\2', String),
|
64
65
|
(r'&&|\|\|', Operator),
|
65
66
|
],
|
@@ -328,6 +329,8 @@ class PowerShellLexer(RegexLexer):
|
|
328
329
|
(r'(<|<)#', Comment.Multiline, 'multline'),
|
329
330
|
(r'@"\n.*?\n"@', String.Heredoc),
|
330
331
|
(r"@'\n.*?\n'@", String.Heredoc),
|
332
|
+
# escaped syntax
|
333
|
+
(r'`[\'"$@-]', Punctuation),
|
331
334
|
(r'"', String.Double, 'string'),
|
332
335
|
(r"'([^']|'')*'", String.Single),
|
333
336
|
(r'(\$|@@|@)((global|script|private|env):)?[a-z0-9_]+',
|
@@ -12,7 +12,7 @@
|
|
12
12
|
import re
|
13
13
|
|
14
14
|
from pygments.lexers.web import \
|
15
|
-
PhpLexer, HtmlLexer, XmlLexer, JavascriptLexer, CssLexer
|
15
|
+
PhpLexer, HtmlLexer, XmlLexer, JavascriptLexer, CssLexer, LassoLexer
|
16
16
|
from pygments.lexers.agile import PythonLexer, PerlLexer
|
17
17
|
from pygments.lexers.compiled import JavaLexer
|
18
18
|
from pygments.lexers.jvm import TeaLangLexer
|
@@ -37,7 +37,8 @@ __all__ = ['HtmlPhpLexer', 'XmlPhpLexer', 'CssPhpLexer',
|
|
37
37
|
'CheetahXmlLexer', 'CheetahJavascriptLexer', 'EvoqueLexer',
|
38
38
|
'EvoqueHtmlLexer', 'EvoqueXmlLexer', 'ColdfusionLexer',
|
39
39
|
'ColdfusionHtmlLexer', 'VelocityLexer', 'VelocityHtmlLexer',
|
40
|
-
'VelocityXmlLexer', 'SspLexer', 'TeaTemplateLexer'
|
40
|
+
'VelocityXmlLexer', 'SspLexer', 'TeaTemplateLexer', 'LassoHtmlLexer',
|
41
|
+
'LassoXmlLexer', 'LassoCssLexer', 'LassoJavascriptLexer']
|
41
42
|
|
42
43
|
|
43
44
|
class ErbLexer(Lexer):
|
@@ -1629,3 +1630,112 @@ class TeaTemplateLexer(DelegatingLexer):
|
|
1629
1630
|
if '<%' in text and '%>' in text:
|
1630
1631
|
rv += 0.1
|
1631
1632
|
return rv
|
1633
|
+
|
1634
|
+
|
1635
|
+
class LassoHtmlLexer(DelegatingLexer):
|
1636
|
+
"""
|
1637
|
+
Subclass of the `LassoLexer` which highlights unhandled data with the
|
1638
|
+
`HtmlLexer`.
|
1639
|
+
|
1640
|
+
Nested JavaScript and CSS is also highlighted.
|
1641
|
+
|
1642
|
+
*New in Pygments 1.6.*
|
1643
|
+
"""
|
1644
|
+
|
1645
|
+
name = 'HTML+Lasso'
|
1646
|
+
aliases = ['html+lasso']
|
1647
|
+
alias_filenames = ['*.html', '*.htm', '*.xhtml', '*.lasso', '*.lasso[89]',
|
1648
|
+
'*.incl', '*.inc', '*.las']
|
1649
|
+
mimetypes = ['text/html+lasso',
|
1650
|
+
'application/x-httpd-lasso',
|
1651
|
+
'application/x-httpd-lasso[89]']
|
1652
|
+
|
1653
|
+
def __init__(self, **options):
|
1654
|
+
options['requiredelimiters'] = True
|
1655
|
+
super(LassoHtmlLexer, self).__init__(HtmlLexer, LassoLexer, **options)
|
1656
|
+
|
1657
|
+
def analyse_text(text):
|
1658
|
+
rv = LassoLexer.analyse_text(text)
|
1659
|
+
if re.search(r'<\w+>', text, re.I):
|
1660
|
+
rv += 0.2
|
1661
|
+
if html_doctype_matches(text):
|
1662
|
+
rv += 0.5
|
1663
|
+
return rv
|
1664
|
+
|
1665
|
+
|
1666
|
+
class LassoXmlLexer(DelegatingLexer):
|
1667
|
+
"""
|
1668
|
+
Subclass of the `LassoLexer` which highlights unhandled data with the
|
1669
|
+
`XmlLexer`.
|
1670
|
+
|
1671
|
+
*New in Pygments 1.6.*
|
1672
|
+
"""
|
1673
|
+
|
1674
|
+
name = 'XML+Lasso'
|
1675
|
+
aliases = ['xml+lasso']
|
1676
|
+
alias_filenames = ['*.xml', '*.lasso', '*.lasso[89]',
|
1677
|
+
'*.incl', '*.inc', '*.las']
|
1678
|
+
mimetypes = ['application/xml+lasso']
|
1679
|
+
|
1680
|
+
def __init__(self, **options):
|
1681
|
+
options['requiredelimiters'] = True
|
1682
|
+
super(LassoXmlLexer, self).__init__(XmlLexer, LassoLexer, **options)
|
1683
|
+
|
1684
|
+
def analyse_text(text):
|
1685
|
+
rv = LassoLexer.analyse_text(text)
|
1686
|
+
if looks_like_xml(text):
|
1687
|
+
rv += 0.5
|
1688
|
+
return rv
|
1689
|
+
|
1690
|
+
|
1691
|
+
class LassoCssLexer(DelegatingLexer):
|
1692
|
+
"""
|
1693
|
+
Subclass of the `LassoLexer` which highlights unhandled data with the
|
1694
|
+
`CssLexer`.
|
1695
|
+
|
1696
|
+
*New in Pygments 1.6.*
|
1697
|
+
"""
|
1698
|
+
|
1699
|
+
name = 'CSS+Lasso'
|
1700
|
+
aliases = ['css+lasso']
|
1701
|
+
alias_filenames = ['*.css']
|
1702
|
+
mimetypes = ['text/css+lasso']
|
1703
|
+
|
1704
|
+
def __init__(self, **options):
|
1705
|
+
options['requiredelimiters'] = True
|
1706
|
+
super(LassoCssLexer, self).__init__(CssLexer, LassoLexer, **options)
|
1707
|
+
|
1708
|
+
def analyse_text(text):
|
1709
|
+
rv = LassoLexer.analyse_text(text)
|
1710
|
+
if re.search(r'\w+:.+;', text):
|
1711
|
+
rv += 0.1
|
1712
|
+
if 'padding:' in text:
|
1713
|
+
rv += 0.1
|
1714
|
+
return rv
|
1715
|
+
|
1716
|
+
|
1717
|
+
class LassoJavascriptLexer(DelegatingLexer):
|
1718
|
+
"""
|
1719
|
+
Subclass of the `LassoLexer` which highlights unhandled data with the
|
1720
|
+
`JavascriptLexer`.
|
1721
|
+
|
1722
|
+
*New in Pygments 1.6.*
|
1723
|
+
"""
|
1724
|
+
|
1725
|
+
name = 'JavaScript+Lasso'
|
1726
|
+
aliases = ['js+lasso', 'javascript+lasso']
|
1727
|
+
alias_filenames = ['*.js']
|
1728
|
+
mimetypes = ['application/x-javascript+lasso',
|
1729
|
+
'text/x-javascript+lasso',
|
1730
|
+
'text/javascript+lasso']
|
1731
|
+
|
1732
|
+
def __init__(self, **options):
|
1733
|
+
options['requiredelimiters'] = True
|
1734
|
+
super(LassoJavascriptLexer, self).__init__(JavascriptLexer, LassoLexer,
|
1735
|
+
**options)
|
1736
|
+
|
1737
|
+
def analyse_text(text):
|
1738
|
+
rv = LassoLexer.analyse_text(text)
|
1739
|
+
if 'function' in text:
|
1740
|
+
rv += 0.2
|
1741
|
+
return rv
|
@@ -25,7 +25,7 @@ __all__ = ['IniLexer', 'PropertiesLexer', 'SourcesListLexer', 'BaseMakefileLexer
|
|
25
25
|
'RstLexer', 'VimLexer', 'GettextLexer', 'SquidConfLexer',
|
26
26
|
'DebianControlLexer', 'DarcsPatchLexer', 'YamlLexer',
|
27
27
|
'LighttpdConfLexer', 'NginxConfLexer', 'CMakeLexer', 'HttpLexer',
|
28
|
-
'PyPyLogLexer']
|
28
|
+
'PyPyLogLexer', 'RegeditLexer']
|
29
29
|
|
30
30
|
|
31
31
|
class IniLexer(RegexLexer):
|
@@ -41,7 +41,7 @@ class IniLexer(RegexLexer):
|
|
41
41
|
tokens = {
|
42
42
|
'root': [
|
43
43
|
(r'\s+', Text),
|
44
|
-
(r'[;#]
|
44
|
+
(r'[;#].*', Comment.Single),
|
45
45
|
(r'\[.*?\]$', Keyword),
|
46
46
|
(r'(.*?)([ \t]*)(=)([ \t]*)(.*(?:\n[ \t].+)*)',
|
47
47
|
bygroups(Name.Attribute, Text, Operator, Text, String))
|
@@ -55,6 +55,49 @@ class IniLexer(RegexLexer):
|
|
55
55
|
return text[0] == '[' and text[npos-1] == ']'
|
56
56
|
|
57
57
|
|
58
|
+
class RegeditLexer(RegexLexer):
|
59
|
+
"""
|
60
|
+
Lexer for `Windows Registry
|
61
|
+
<http://en.wikipedia.org/wiki/Windows_Registry#.REG_files>`_ files produced
|
62
|
+
by regedit.
|
63
|
+
|
64
|
+
*New in Pygments 1.6.*
|
65
|
+
"""
|
66
|
+
|
67
|
+
name = 'reg'
|
68
|
+
aliases = []
|
69
|
+
filenames = ['*.reg']
|
70
|
+
mimetypes = ['text/x-windows-registry']
|
71
|
+
|
72
|
+
tokens = {
|
73
|
+
'root': [
|
74
|
+
(r'Windows Registry Editor.*', Text),
|
75
|
+
(r'\s+', Text),
|
76
|
+
(r'[;#].*', Comment.Single),
|
77
|
+
(r'(\[)(-?)(HKEY_[A-Z_]+)(.*?\])$',
|
78
|
+
bygroups(Keyword, Operator, Name.Builtin, Keyword)),
|
79
|
+
# String keys, which obey somewhat normal escaping
|
80
|
+
(r'("(?:\\"|\\\\|[^"])+")([ \t]*)(=)([ \t]*)',
|
81
|
+
bygroups(Name.Attribute, Text, Operator, Text),
|
82
|
+
'value'),
|
83
|
+
# Bare keys (includes @)
|
84
|
+
(r'(.*?)([ \t]*)(=)([ \t]*)',
|
85
|
+
bygroups(Name.Attribute, Text, Operator, Text),
|
86
|
+
'value'),
|
87
|
+
],
|
88
|
+
'value': [
|
89
|
+
(r'-', Operator, '#pop'), # delete value
|
90
|
+
(r'(dword|hex(?:\([0-9a-fA-F]\))?)(:)([0-9a-fA-F,]+)',
|
91
|
+
bygroups(Name.Variable, Punctuation, Number), '#pop'),
|
92
|
+
# As far as I know, .reg files do not support line continuation.
|
93
|
+
(r'.*', String, '#pop'),
|
94
|
+
]
|
95
|
+
}
|
96
|
+
|
97
|
+
def analyse_text(text):
|
98
|
+
return text.startswith('Windows Registry Editor')
|
99
|
+
|
100
|
+
|
58
101
|
class PropertiesLexer(RegexLexer):
|
59
102
|
"""
|
60
103
|
Lexer for configuration files in Java's properties format.
|
@@ -187,7 +230,7 @@ class BaseMakefileLexer(RegexLexer):
|
|
187
230
|
bygroups(Keyword, Text), 'export'),
|
188
231
|
(r'export\s+', Keyword),
|
189
232
|
# assignment
|
190
|
-
(r'([a-zA-Z0-9_${}.-]+)(\s*)([!?:+]?=)([ \t]*)((?:.*\\\n
|
233
|
+
(r'([a-zA-Z0-9_${}.-]+)(\s*)([!?:+]?=)([ \t]*)((?:.*\\\n)+|.*\n)',
|
191
234
|
bygroups(Name.Variable, Text, Operator, Text, using(BashLexer))),
|
192
235
|
# strings
|
193
236
|
(r'(?s)"(\\\\|\\.|[^"\\])*"', String.Double),
|
@@ -1643,6 +1686,11 @@ class HttpLexer(RegexLexer):
|
|
1643
1686
|
yield match.start(5), Literal, match.group(5)
|
1644
1687
|
yield match.start(6), Text, match.group(6)
|
1645
1688
|
|
1689
|
+
def continuous_header_callback(self, match):
|
1690
|
+
yield match.start(1), Text, match.group(1)
|
1691
|
+
yield match.start(2), Literal, match.group(2)
|
1692
|
+
yield match.start(3), Text, match.group(3)
|
1693
|
+
|
1646
1694
|
def content_callback(self, match):
|
1647
1695
|
content_type = getattr(self, 'content_type', None)
|
1648
1696
|
content = match.group()
|
@@ -1673,6 +1721,7 @@ class HttpLexer(RegexLexer):
|
|
1673
1721
|
],
|
1674
1722
|
'headers': [
|
1675
1723
|
(r'([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|$)', header_callback),
|
1724
|
+
(r'([\t ]+)([^\r\n]+)(\r?\n|$)', continuous_header_callback),
|
1676
1725
|
(r'\r?\n', Text, 'content')
|
1677
1726
|
],
|
1678
1727
|
'content': [
|
@@ -17,16 +17,17 @@ from pygments.lexer import RegexLexer, ExtendedRegexLexer, bygroups, using, \
|
|
17
17
|
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
|
18
18
|
Number, Other, Punctuation, Literal
|
19
19
|
from pygments.util import get_bool_opt, get_list_opt, looks_like_xml, \
|
20
|
-
html_doctype_matches
|
20
|
+
html_doctype_matches, unirange
|
21
21
|
from pygments.lexers.agile import RubyLexer
|
22
22
|
from pygments.lexers.compiled import ScalaLexer
|
23
23
|
|
24
24
|
|
25
|
-
__all__ = ['HtmlLexer', 'XmlLexer', 'JavascriptLexer', '
|
25
|
+
__all__ = ['HtmlLexer', 'XmlLexer', 'JavascriptLexer', 'JsonLexer', 'CssLexer',
|
26
26
|
'PhpLexer', 'ActionScriptLexer', 'XsltLexer', 'ActionScript3Lexer',
|
27
27
|
'MxmlLexer', 'HaxeLexer', 'HamlLexer', 'SassLexer', 'ScssLexer',
|
28
|
-
'ObjectiveJLexer', 'CoffeeScriptLexer', '
|
29
|
-
'
|
28
|
+
'ObjectiveJLexer', 'CoffeeScriptLexer', 'LiveScriptLexer',
|
29
|
+
'DuelLexer', 'ScamlLexer', 'JadeLexer', 'XQueryLexer',
|
30
|
+
'DtdLexer', 'DartLexer', 'LassoLexer']
|
30
31
|
|
31
32
|
|
32
33
|
class JavascriptLexer(RegexLexer):
|
@@ -89,7 +90,7 @@ class JavascriptLexer(RegexLexer):
|
|
89
90
|
}
|
90
91
|
|
91
92
|
|
92
|
-
class
|
93
|
+
class JsonLexer(RegexLexer):
|
93
94
|
"""
|
94
95
|
For JSON data structures.
|
95
96
|
|
@@ -103,10 +104,10 @@ class JSONLexer(RegexLexer):
|
|
103
104
|
|
104
105
|
# integer part of a number
|
105
106
|
int_part = r'-?(0|[1-9]\d*)'
|
106
|
-
|
107
|
+
|
107
108
|
# fractional part of a number
|
108
109
|
frac_part = r'\.\d+'
|
109
|
-
|
110
|
+
|
110
111
|
# exponential part of a number
|
111
112
|
exp_part = r'[eE](\+|-)?\d+'
|
112
113
|
|
@@ -169,6 +170,8 @@ class JSONLexer(RegexLexer):
|
|
169
170
|
|
170
171
|
}
|
171
172
|
|
173
|
+
JSONLexer = JsonLexer # for backwards compatibility with Pygments 1.5
|
174
|
+
|
172
175
|
|
173
176
|
class ActionScriptLexer(RegexLexer):
|
174
177
|
"""
|
@@ -828,7 +831,7 @@ class PhpLexer(RegexLexer):
|
|
828
831
|
r'endif|list|__LINE__|endswitch|new|__sleep|endwhile|not|'
|
829
832
|
r'array|__wakeup|E_ALL|NULL|final|php_user_filter|interface|'
|
830
833
|
r'implements|public|private|protected|abstract|clone|try|'
|
831
|
-
r'catch|throw|this|use|namespace)\b', Keyword),
|
834
|
+
r'catch|throw|this|use|namespace|trait)\b', Keyword),
|
832
835
|
(r'(true|false|null)\b', Keyword.Constant),
|
833
836
|
(r'\$\{\$+[a-zA-Z_][a-zA-Z0-9_]*\}', Name.Variable),
|
834
837
|
(r'\$+[a-zA-Z_][a-zA-Z0-9_]*', Name.Variable),
|
@@ -998,7 +1001,7 @@ class XmlLexer(RegexLexer):
|
|
998
1001
|
Generic lexer for XML (eXtensible Markup Language).
|
999
1002
|
"""
|
1000
1003
|
|
1001
|
-
flags = re.MULTILINE | re.DOTALL
|
1004
|
+
flags = re.MULTILINE | re.DOTALL | re.UNICODE
|
1002
1005
|
|
1003
1006
|
name = 'XML'
|
1004
1007
|
aliases = ['xml']
|
@@ -1014,8 +1017,8 @@ class XmlLexer(RegexLexer):
|
|
1014
1017
|
('<!--', Comment, 'comment'),
|
1015
1018
|
(r'<\?.*?\?>', Comment.Preproc),
|
1016
1019
|
('<![^>]*>', Comment.Preproc),
|
1017
|
-
(r'<\s*[
|
1018
|
-
(r'<\s*/\s*[
|
1020
|
+
(r'<\s*[\w:.-]+', Name.Tag, 'tag'),
|
1021
|
+
(r'<\s*/\s*[\w:.-]+\s*>', Name.Tag),
|
1019
1022
|
],
|
1020
1023
|
'comment': [
|
1021
1024
|
('[^-]+', Comment),
|
@@ -1024,7 +1027,7 @@ class XmlLexer(RegexLexer):
|
|
1024
1027
|
],
|
1025
1028
|
'tag': [
|
1026
1029
|
(r'\s+', Text),
|
1027
|
-
(r'[
|
1030
|
+
(r'[\w.:-]+\s*=', Name.Attribute, 'attr'),
|
1028
1031
|
(r'/?\s*>', Name.Tag, '#pop'),
|
1029
1032
|
],
|
1030
1033
|
'attr': [
|
@@ -1049,7 +1052,7 @@ class XsltLexer(XmlLexer):
|
|
1049
1052
|
|
1050
1053
|
name = 'XSLT'
|
1051
1054
|
aliases = ['xslt']
|
1052
|
-
filenames = ['*.xsl', '*.xslt']
|
1055
|
+
filenames = ['*.xsl', '*.xslt', '*.xpl'] # xpl is XProc
|
1053
1056
|
mimetypes = ['application/xsl+xml', 'application/xslt+xml']
|
1054
1057
|
|
1055
1058
|
EXTRA_KEYWORDS = set([
|
@@ -1081,6 +1084,8 @@ class MxmlLexer(RegexLexer):
|
|
1081
1084
|
"""
|
1082
1085
|
For MXML markup.
|
1083
1086
|
Nested AS3 in <script> tags is highlighted by the appropriate lexer.
|
1087
|
+
|
1088
|
+
*New in Pygments 1.1.*
|
1084
1089
|
"""
|
1085
1090
|
flags = re.MULTILINE | re.DOTALL
|
1086
1091
|
name = 'MXML'
|
@@ -1122,6 +1127,8 @@ class MxmlLexer(RegexLexer):
|
|
1122
1127
|
class HaxeLexer(RegexLexer):
|
1123
1128
|
"""
|
1124
1129
|
For haXe source code (http://haxe.org/).
|
1130
|
+
|
1131
|
+
*New in Pygments 1.3.*
|
1125
1132
|
"""
|
1126
1133
|
|
1127
1134
|
name = 'haXe'
|
@@ -1797,14 +1804,14 @@ class CoffeeScriptLexer(RegexLexer):
|
|
1797
1804
|
tokens = {
|
1798
1805
|
'commentsandwhitespace': [
|
1799
1806
|
(r'\s+', Text),
|
1800
|
-
(r'
|
1801
|
-
(r'
|
1807
|
+
(r'###[^#].*?###', Comment.Multiline),
|
1808
|
+
(r'#(?!##[^#]).*?\n', Comment.Single),
|
1802
1809
|
],
|
1803
1810
|
'multilineregex': [
|
1804
|
-
|
1811
|
+
(r'[^/#]+', String.Regex),
|
1805
1812
|
(r'///([gim]+\b|\B)', String.Regex, '#pop'),
|
1806
|
-
(r'
|
1807
|
-
(r'[
|
1813
|
+
(r'#{', String.Interpol, 'interpoling_string'),
|
1814
|
+
(r'[/#]', String.Regex),
|
1808
1815
|
],
|
1809
1816
|
'slashstartsregex': [
|
1810
1817
|
include('commentsandwhitespace'),
|
@@ -1817,28 +1824,32 @@ class CoffeeScriptLexer(RegexLexer):
|
|
1817
1824
|
# this next expr leads to infinite loops root -> slashstartsregex
|
1818
1825
|
#(r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
|
1819
1826
|
include('commentsandwhitespace'),
|
1820
|
-
(r'
|
1821
|
-
r'\|\||\\(?=\n)|(<<|>>>?|==?|!=?|
|
1827
|
+
(r'\+\+|~|&&|\band\b|\bor\b|\bis\b|\bisnt\b|\bnot\b|\?|:|'
|
1828
|
+
r'\|\||\\(?=\n)|(<<|>>>?|==?|!=?|'
|
1829
|
+
r'=(?!>)|-(?!>)|[<>+*`%&\|\^/])=?',
|
1822
1830
|
Operator, 'slashstartsregex'),
|
1823
|
-
(r'
|
1831
|
+
(r'(?:\([^()]+\))?\s*[=-]>', Name.Function),
|
1824
1832
|
(r'[{(\[;,]', Punctuation, 'slashstartsregex'),
|
1825
1833
|
(r'[})\].]', Punctuation),
|
1826
|
-
(r'(for|in|of|while|
|
1834
|
+
(r'(?<![\.\$])(for|own|in|of|while|until|'
|
1835
|
+
r'loop|break|return|continue|'
|
1836
|
+
r'switch|when|then|if|unless|else|'
|
1827
1837
|
r'throw|try|catch|finally|new|delete|typeof|instanceof|super|'
|
1828
1838
|
r'extends|this|class|by)\b', Keyword, 'slashstartsregex'),
|
1829
|
-
(r'(true|false|yes|no|on|off|null|
|
1839
|
+
(r'(?<![\.\$])(true|false|yes|no|on|off|null|'
|
1840
|
+
r'NaN|Infinity|undefined)\b',
|
1830
1841
|
Keyword.Constant),
|
1831
1842
|
(r'(Array|Boolean|Date|Error|Function|Math|netscape|'
|
1832
1843
|
r'Number|Object|Packages|RegExp|String|sun|decodeURI|'
|
1833
1844
|
r'decodeURIComponent|encodeURI|encodeURIComponent|'
|
1834
1845
|
r'eval|isFinite|isNaN|parseFloat|parseInt|document|window)\b',
|
1835
1846
|
Name.Builtin),
|
1836
|
-
(r'[$a-zA-Z_][a-zA-Z0-9_
|
1847
|
+
(r'[$a-zA-Z_][a-zA-Z0-9_\.:\$]*\s*[:=]\s', Name.Variable,
|
1837
1848
|
'slashstartsregex'),
|
1838
|
-
(r'@[$a-zA-Z_][a-zA-Z0-9_
|
1849
|
+
(r'@[$a-zA-Z_][a-zA-Z0-9_\.:\$]*\s*[:=]\s', Name.Variable.Instance,
|
1839
1850
|
'slashstartsregex'),
|
1840
1851
|
(r'@', Name.Other, 'slashstartsregex'),
|
1841
|
-
(r'@?[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other, 'slashstartsregex'),
|
1852
|
+
(r'@?[$a-zA-Z_][a-zA-Z0-9_\$]*', Name.Other, 'slashstartsregex'),
|
1842
1853
|
(r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
|
1843
1854
|
(r'0x[0-9a-fA-F]+', Number.Hex),
|
1844
1855
|
(r'[0-9]+', Number.Integer),
|
@@ -1880,6 +1891,118 @@ class CoffeeScriptLexer(RegexLexer):
|
|
1880
1891
|
],
|
1881
1892
|
}
|
1882
1893
|
|
1894
|
+
|
1895
|
+
class LiveScriptLexer(RegexLexer):
|
1896
|
+
"""
|
1897
|
+
For `LiveScript`_ source code.
|
1898
|
+
|
1899
|
+
.. _LiveScript: http://gkz.github.com/LiveScript/
|
1900
|
+
|
1901
|
+
New in Pygments 1.6.
|
1902
|
+
"""
|
1903
|
+
|
1904
|
+
name = 'LiveScript'
|
1905
|
+
aliases = ['live-script', 'livescript']
|
1906
|
+
filenames = ['*.ls']
|
1907
|
+
mimetypes = ['text/livescript']
|
1908
|
+
|
1909
|
+
flags = re.DOTALL
|
1910
|
+
tokens = {
|
1911
|
+
'commentsandwhitespace': [
|
1912
|
+
(r'\s+', Text),
|
1913
|
+
(r'/\*.*?\*/', Comment.Multiline),
|
1914
|
+
(r'#.*?\n', Comment.Single),
|
1915
|
+
],
|
1916
|
+
'multilineregex': [
|
1917
|
+
include('commentsandwhitespace'),
|
1918
|
+
(r'//([gim]+\b|\B)', String.Regex, '#pop'),
|
1919
|
+
(r'/', String.Regex),
|
1920
|
+
(r'[^/#]+', String.Regex)
|
1921
|
+
],
|
1922
|
+
'slashstartsregex': [
|
1923
|
+
include('commentsandwhitespace'),
|
1924
|
+
(r'//', String.Regex, ('#pop', 'multilineregex')),
|
1925
|
+
(r'/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
|
1926
|
+
r'([gim]+\b|\B)', String.Regex, '#pop'),
|
1927
|
+
(r'', Text, '#pop'),
|
1928
|
+
],
|
1929
|
+
'root': [
|
1930
|
+
# this next expr leads to infinite loops root -> slashstartsregex
|
1931
|
+
#(r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
|
1932
|
+
include('commentsandwhitespace'),
|
1933
|
+
(r'(?:\([^()]+\))?[ ]*[~-]{1,2}>|'
|
1934
|
+
r'(?:\(?[^()\n]+\)?)?[ ]*<[~-]{1,2}', Name.Function),
|
1935
|
+
(r'\+\+|&&|(?<![\.\$])\b(?:and|x?or|is|isnt|not)\b|\?|:|=|'
|
1936
|
+
r'\|\||\\(?=\n)|(<<|>>>?|==?|!=?|'
|
1937
|
+
r'~(?!\~?>)|-(?!\-?>)|<(?!\[)|(?<!\])>|'
|
1938
|
+
r'[+*`%&\|\^/])=?',
|
1939
|
+
Operator, 'slashstartsregex'),
|
1940
|
+
(r'[{(\[;,]', Punctuation, 'slashstartsregex'),
|
1941
|
+
(r'[})\].]', Punctuation),
|
1942
|
+
(r'(?<![\.\$])(for|own|in|of|while|until|loop|break|'
|
1943
|
+
r'return|continue|switch|when|then|if|unless|else|'
|
1944
|
+
r'throw|try|catch|finally|new|delete|typeof|instanceof|super|'
|
1945
|
+
r'extends|this|class|by|const|var|to|til)\b', Keyword,
|
1946
|
+
'slashstartsregex'),
|
1947
|
+
(r'(?<![\.\$])(true|false|yes|no|on|off|'
|
1948
|
+
r'null|NaN|Infinity|undefined|void)\b',
|
1949
|
+
Keyword.Constant),
|
1950
|
+
(r'(Array|Boolean|Date|Error|Function|Math|netscape|'
|
1951
|
+
r'Number|Object|Packages|RegExp|String|sun|decodeURI|'
|
1952
|
+
r'decodeURIComponent|encodeURI|encodeURIComponent|'
|
1953
|
+
r'eval|isFinite|isNaN|parseFloat|parseInt|document|window)\b',
|
1954
|
+
Name.Builtin),
|
1955
|
+
(r'[$a-zA-Z_][a-zA-Z0-9_\.\-:\$]*\s*[:=]\s', Name.Variable,
|
1956
|
+
'slashstartsregex'),
|
1957
|
+
(r'@[$a-zA-Z_][a-zA-Z0-9_\.\-:\$]*\s*[:=]\s', Name.Variable.Instance,
|
1958
|
+
'slashstartsregex'),
|
1959
|
+
(r'@', Name.Other, 'slashstartsregex'),
|
1960
|
+
(r'@?[$a-zA-Z_][a-zA-Z0-9_\-]*', Name.Other, 'slashstartsregex'),
|
1961
|
+
(r'[0-9]+\.[0-9]+([eE][0-9]+)?[fd]?(?:[a-zA-Z_]+)?', Number.Float),
|
1962
|
+
(r'[0-9]+(~[0-9a-z]+)?(?:[a-zA-Z_]+)?', Number.Integer),
|
1963
|
+
('"""', String, 'tdqs'),
|
1964
|
+
("'''", String, 'tsqs'),
|
1965
|
+
('"', String, 'dqs'),
|
1966
|
+
("'", String, 'sqs'),
|
1967
|
+
(r'\\[\w$-]+', String),
|
1968
|
+
(r'<\[.*\]>', String),
|
1969
|
+
],
|
1970
|
+
'strings': [
|
1971
|
+
(r'[^#\\\'"]+', String),
|
1972
|
+
# note that all coffee script strings are multi-line.
|
1973
|
+
# hashmarks, quotes and backslashes must be parsed one at a time
|
1974
|
+
],
|
1975
|
+
'interpoling_string' : [
|
1976
|
+
(r'}', String.Interpol, "#pop"),
|
1977
|
+
include('root')
|
1978
|
+
],
|
1979
|
+
'dqs': [
|
1980
|
+
(r'"', String, '#pop'),
|
1981
|
+
(r'\\.|\'', String), # double-quoted string don't need ' escapes
|
1982
|
+
(r'#{', String.Interpol, "interpoling_string"),
|
1983
|
+
(r'#', String),
|
1984
|
+
include('strings')
|
1985
|
+
],
|
1986
|
+
'sqs': [
|
1987
|
+
(r"'", String, '#pop'),
|
1988
|
+
(r'#|\\.|"', String), # single quoted strings don't need " escapses
|
1989
|
+
include('strings')
|
1990
|
+
],
|
1991
|
+
'tdqs': [
|
1992
|
+
(r'"""', String, '#pop'),
|
1993
|
+
(r'\\.|\'|"', String), # no need to escape quotes in triple-string
|
1994
|
+
(r'#{', String.Interpol, "interpoling_string"),
|
1995
|
+
(r'#', String),
|
1996
|
+
include('strings'),
|
1997
|
+
],
|
1998
|
+
'tsqs': [
|
1999
|
+
(r"'''", String, '#pop'),
|
2000
|
+
(r'#|\\.|\'|"', String), # no need to escape quotes in triple-strings
|
2001
|
+
include('strings')
|
2002
|
+
],
|
2003
|
+
}
|
2004
|
+
|
2005
|
+
|
1883
2006
|
class DuelLexer(RegexLexer):
|
1884
2007
|
"""
|
1885
2008
|
Lexer for Duel Views Engine (formerly JBST) markup with JavaScript code blocks.
|
@@ -2142,8 +2265,8 @@ class XQueryLexer(ExtendedRegexLexer):
|
|
2142
2265
|
*New in Pygments 1.4.*
|
2143
2266
|
"""
|
2144
2267
|
name = 'XQuery'
|
2145
|
-
aliases = ['xquery', 'xqy']
|
2146
|
-
filenames = ['*.xqy', '*.xquery']
|
2268
|
+
aliases = ['xquery', 'xqy', 'xq', 'xql', 'xqm']
|
2269
|
+
filenames = ['*.xqy', '*.xquery', '*.xq', '*.xql', '*.xqm']
|
2147
2270
|
mimetypes = ['text/xquery', 'application/xquery']
|
2148
2271
|
|
2149
2272
|
xquery_parse_state = []
|
@@ -2544,8 +2667,8 @@ class XQueryLexer(ExtendedRegexLexer):
|
|
2544
2667
|
'xml_comment': [
|
2545
2668
|
(r'(-->)', popstate_xmlcomment_callback),
|
2546
2669
|
(r'[^-]{1,2}', Literal),
|
2547
|
-
(ur'\t|\r|\n|[\u0020-\
|
2548
|
-
|
2670
|
+
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
|
2671
|
+
unirange(0x10000, 0x10ffff), Literal),
|
2549
2672
|
],
|
2550
2673
|
'processing_instruction': [
|
2551
2674
|
(r'\s+', Text, 'processing_instruction_content'),
|
@@ -2554,13 +2677,13 @@ class XQueryLexer(ExtendedRegexLexer):
|
|
2554
2677
|
],
|
2555
2678
|
'processing_instruction_content': [
|
2556
2679
|
(r'\?>', String.Doc, '#pop'),
|
2557
|
-
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|'
|
2558
|
-
|
2680
|
+
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
|
2681
|
+
unirange(0x10000, 0x10ffff), Literal),
|
2559
2682
|
],
|
2560
2683
|
'cdata_section': [
|
2561
2684
|
(r']]>', String.Doc, '#pop'),
|
2562
|
-
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|'
|
2563
|
-
|
2685
|
+
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
|
2686
|
+
unirange(0x10000, 0x10ffff), Literal),
|
2564
2687
|
],
|
2565
2688
|
'start_tag': [
|
2566
2689
|
include('whitespace'),
|
@@ -2628,8 +2751,8 @@ class XQueryLexer(ExtendedRegexLexer):
|
|
2628
2751
|
],
|
2629
2752
|
'pragmacontents': [
|
2630
2753
|
(r'#\)', Punctuation, 'operator'),
|
2631
|
-
(ur'\t|\r|\n|[\u0020-\
|
2632
|
-
|
2754
|
+
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
|
2755
|
+
unirange(0x10000, 0x10ffff), Literal),
|
2633
2756
|
(r'(\s+)', Text),
|
2634
2757
|
],
|
2635
2758
|
'occurrenceindicator': [
|
@@ -2862,3 +2985,226 @@ class DartLexer(RegexLexer):
|
|
2862
2985
|
(r'\$+', String.Single)
|
2863
2986
|
]
|
2864
2987
|
}
|
2988
|
+
|
2989
|
+
|
2990
|
+
class LassoLexer(RegexLexer):
|
2991
|
+
"""
|
2992
|
+
For `Lasso <http://www.lassosoft.com/>`_ source code, covering both Lasso 9
|
2993
|
+
syntax and LassoScript for Lasso 8.6 and earlier. For Lasso embedded in
|
2994
|
+
HTML, use the `LassoHtmlLexer`.
|
2995
|
+
|
2996
|
+
Additional options accepted:
|
2997
|
+
|
2998
|
+
`builtinshighlighting`
|
2999
|
+
If given and ``True``, highlight builtin tags, types, traits, and
|
3000
|
+
methods (default: ``True``).
|
3001
|
+
`requiredelimiters`
|
3002
|
+
If given and ``True``, only highlight code between delimiters as Lasso
|
3003
|
+
(default: ``False``).
|
3004
|
+
|
3005
|
+
*New in Pygments 1.6.*
|
3006
|
+
"""
|
3007
|
+
|
3008
|
+
name = 'Lasso'
|
3009
|
+
aliases = ['lasso', 'lassoscript']
|
3010
|
+
filenames = ['*.lasso', '*.lasso[89]']
|
3011
|
+
alias_filenames = ['*.incl', '*.inc', '*.las']
|
3012
|
+
mimetypes = ['text/x-lasso']
|
3013
|
+
flags = re.IGNORECASE | re.DOTALL | re.MULTILINE
|
3014
|
+
|
3015
|
+
tokens = {
|
3016
|
+
'root': [
|
3017
|
+
(r'^#!.+lasso9\b', Comment.Preproc, 'lasso'),
|
3018
|
+
(r'\s+', Other),
|
3019
|
+
(r'\[no_square_brackets\]', Comment.Preproc, 'nosquarebrackets'),
|
3020
|
+
(r'\[noprocess\]', Comment.Preproc, ('delimiters', 'noprocess')),
|
3021
|
+
(r'\[', Comment.Preproc, ('delimiters', 'squarebrackets')),
|
3022
|
+
(r'<\?(LassoScript|lasso|=)', Comment.Preproc,
|
3023
|
+
('delimiters', 'anglebrackets')),
|
3024
|
+
(r'<', Other, 'delimiters'),
|
3025
|
+
include('lasso'),
|
3026
|
+
],
|
3027
|
+
'nosquarebrackets': [
|
3028
|
+
(r'<\?(LassoScript|lasso|=)', Comment.Preproc, 'anglebrackets'),
|
3029
|
+
(r'<', Other),
|
3030
|
+
(r'[^<]+', Other),
|
3031
|
+
],
|
3032
|
+
'delimiters': [
|
3033
|
+
(r'\[no_square_brackets\]', Comment.Preproc, 'nosquarebrackets'),
|
3034
|
+
(r'\[noprocess\]', Comment.Preproc, 'noprocess'),
|
3035
|
+
(r'\[', Comment.Preproc, 'squarebrackets'),
|
3036
|
+
(r'<\?(LassoScript|lasso|=)', Comment.Preproc, 'anglebrackets'),
|
3037
|
+
(r'<', Other),
|
3038
|
+
(r'[^[<]+', Other),
|
3039
|
+
],
|
3040
|
+
'noprocess': [
|
3041
|
+
(r'\[/noprocess\]', Comment.Preproc, '#pop'),
|
3042
|
+
(r'\[', Other),
|
3043
|
+
(r'[^[]', Other),
|
3044
|
+
],
|
3045
|
+
'squarebrackets': [
|
3046
|
+
(r'\]', Comment.Preproc, '#pop'),
|
3047
|
+
include('lasso'),
|
3048
|
+
],
|
3049
|
+
'anglebrackets': [
|
3050
|
+
(r'\?>', Comment.Preproc, '#pop'),
|
3051
|
+
include('lasso'),
|
3052
|
+
],
|
3053
|
+
'lasso': [
|
3054
|
+
# whitespace/comments
|
3055
|
+
(r'\s+', Text),
|
3056
|
+
(r'//.*?\n', Comment.Single),
|
3057
|
+
(r'/\*\*!.*?\*/', String.Doc),
|
3058
|
+
(r'/\*.*?\*/', Comment.Multiline),
|
3059
|
+
|
3060
|
+
# literals
|
3061
|
+
(r'\d*\.\d+(e[+-]?\d+)?', Number.Float),
|
3062
|
+
(r'0x[\da-f]+', Number.Hex),
|
3063
|
+
(r'\d+', Number.Integer),
|
3064
|
+
(r'([+-]?)(infinity|NaN)\b', bygroups(Operator, Number)),
|
3065
|
+
(r"'", String.Single, 'singlestring'),
|
3066
|
+
(r'"', String.Double, 'doublestring'),
|
3067
|
+
(r'`[^`]*`', String.Backtick),
|
3068
|
+
|
3069
|
+
# names
|
3070
|
+
(r'\$[a-z_][\w.]*', Name.Variable),
|
3071
|
+
(r'#[a-z_][\w.]*|#\d+', Name.Variable.Instance),
|
3072
|
+
(r"(\.)('[a-z_][\w.]*')",
|
3073
|
+
bygroups(Name.Builtin.Pseudo, Name.Variable.Class)),
|
3074
|
+
(r"(self)(->)('[a-z_][\w.]*')",
|
3075
|
+
bygroups(Name.Builtin.Pseudo, Operator, Name.Variable.Class)),
|
3076
|
+
(r'(\.\.?)([a-z_][\w.]*)',
|
3077
|
+
bygroups(Name.Builtin.Pseudo, Name.Other)),
|
3078
|
+
(r'(self|inherited|global|void)\b', Name.Builtin.Pseudo),
|
3079
|
+
(r'-[a-z_][\w.]*', Name.Attribute),
|
3080
|
+
(r'(::\s*)([a-z_][\w.]*)', bygroups(Punctuation, Name.Label)),
|
3081
|
+
(r'(error_(code|msg)_\w+|Error_AddError|Error_ColumnRestriction|'
|
3082
|
+
r'Error_DatabaseConnectionUnavailable|Error_DatabaseTimeout|'
|
3083
|
+
r'Error_DeleteError|Error_FieldRestriction|Error_FileNotFound|'
|
3084
|
+
r'Error_InvalidDatabase|Error_InvalidPassword|'
|
3085
|
+
r'Error_InvalidUsername|Error_ModuleNotFound|'
|
3086
|
+
r'Error_NoError|Error_NoPermission|Error_OutOfMemory|'
|
3087
|
+
r'Error_ReqColumnMissing|Error_ReqFieldMissing|'
|
3088
|
+
r'Error_RequiredColumnMissing|Error_RequiredFieldMissing|'
|
3089
|
+
r'Error_UpdateError)\b', Name.Exception),
|
3090
|
+
|
3091
|
+
# definitions
|
3092
|
+
(r'(define)(\s+)([a-z_][\w.]*)(\s*)(=>)(\s*)(type|trait|thread)\b',
|
3093
|
+
bygroups(Keyword.Declaration, Text, Name.Class, Text, Operator,
|
3094
|
+
Text, Keyword)),
|
3095
|
+
(r'(define)(\s+)([a-z_][\w.]*)(->)([a-z_][\w.]*=?|[-+*/%<>]|==)',
|
3096
|
+
bygroups(Keyword.Declaration, Text, Name.Class, Operator,
|
3097
|
+
Name.Function), 'signature'),
|
3098
|
+
(r'(define)(\s+)([a-z_][\w.]*)',
|
3099
|
+
bygroups(Keyword.Declaration, Text, Name.Function),
|
3100
|
+
'signature'),
|
3101
|
+
(r'(public|protected|private|provide)(\s+)([a-z_][\w.]*=?|'
|
3102
|
+
r'[-+*/%<>]|==)(\s*)(\()',
|
3103
|
+
bygroups(Keyword, Text, Name.Function, Text, Punctuation),
|
3104
|
+
('signature', 'parameter')),
|
3105
|
+
(r'(public|protected|private)(\s+)([a-z_][\w.]*)',
|
3106
|
+
bygroups(Keyword, Text, Name.Function)),
|
3107
|
+
|
3108
|
+
# keywords
|
3109
|
+
(r'(true|false|none|minimal|full|all)\b', Keyword.Constant),
|
3110
|
+
(r'(local|var|variable|data)\b', Keyword.Declaration),
|
3111
|
+
(r'(array|date|decimal|duration|integer|map|pair|string|tag|xml|'
|
3112
|
+
r'null)\b', Keyword.Type),
|
3113
|
+
(r'([a-z_][\w.]*)(\s+)(in)\b', bygroups(Name, Text, Keyword)),
|
3114
|
+
(r'(let|into)(\s+)([a-z_][\w.]*)', bygroups(Keyword, Text, Name)),
|
3115
|
+
(r'(/?)(Cache|Database_Names|Database_SchemaNames|'
|
3116
|
+
r'Database_TableNames|Define_Tag|Define_Type|Email_Batch|'
|
3117
|
+
r'Encode_Set|HTML_Comment|Handle|Handle_Error|Header|If|Inline|'
|
3118
|
+
r'Iterate|LJAX_Target|Link|Link_CurrentAction|Link_CurrentGroup|'
|
3119
|
+
r'Link_CurrentRecord|Link_Detail|Link_FirstGroup|'
|
3120
|
+
r'Link_FirstRecord|Link_LastGroup|Link_LastRecord|Link_NextGroup|'
|
3121
|
+
r'Link_NextRecord|Link_PrevGroup|Link_PrevRecord|Log|Loop|'
|
3122
|
+
r'Namespace_Using|NoProcess|Output_None|Portal|Private|Protect|'
|
3123
|
+
r'Records|Referer|Referrer|Repeating|ResultSet|Rows|Search_Args|'
|
3124
|
+
r'Search_Arguments|Select|Sort_Args|Sort_Arguments|Thread_Atomic|'
|
3125
|
+
r'Value_List|While|Abort|Case|Else|If_Empty|If_False|If_Null|'
|
3126
|
+
r'If_True|Loop_Abort|Loop_Continue|Loop_Count|Params|Params_Up|'
|
3127
|
+
r'Return|Return_Value|Run_Children|SOAP_DefineTag|'
|
3128
|
+
r'SOAP_LastRequest|SOAP_LastResponse|Tag_Name|ascending|average|'
|
3129
|
+
r'by|define|descending|do|equals|frozen|group|handle_failure|'
|
3130
|
+
r'import|in|into|join|let|match|max|min|on|order|parent|protected|'
|
3131
|
+
r'provide|public|require|skip|split_thread|sum|take|thread|to|'
|
3132
|
+
r'trait|type|where|with|yield)\b', bygroups(Punctuation, Keyword)),
|
3133
|
+
|
3134
|
+
# other
|
3135
|
+
(r'(and|or|not)\b', Operator.Word),
|
3136
|
+
(r'([a-z_][\w.]*)(\s*)(::\s*)([a-z_][\w.]*)(\s*)(=)',
|
3137
|
+
bygroups(Name, Text, Punctuation, Name.Label, Text, Operator)),
|
3138
|
+
(r'((?<!->)[a-z_][\w.]*)(\s*)(=(?!=))',
|
3139
|
+
bygroups(Name, Text, Operator)),
|
3140
|
+
(r'(/?)([\w.]+)', bygroups(Punctuation, Name.Other)),
|
3141
|
+
(r'(=)(bw|ew|cn|lte?|gte?|n?eq|ft|n?rx)\b',
|
3142
|
+
bygroups(Operator, Operator.Word)),
|
3143
|
+
(r':=|[-+*/%=<>&|!?\\]+', Operator),
|
3144
|
+
(r'[{}():;,@^]', Punctuation),
|
3145
|
+
],
|
3146
|
+
'singlestring': [
|
3147
|
+
(r"'", String.Single, '#pop'),
|
3148
|
+
(r"[^'\\]+", String.Single),
|
3149
|
+
include('escape'),
|
3150
|
+
(r"\\+", String.Single),
|
3151
|
+
],
|
3152
|
+
'doublestring': [
|
3153
|
+
(r'"', String.Double, '#pop'),
|
3154
|
+
(r'[^"\\]+', String.Double),
|
3155
|
+
include('escape'),
|
3156
|
+
(r'\\+', String.Double),
|
3157
|
+
],
|
3158
|
+
'escape': [
|
3159
|
+
(r'\\(U[\da-f]{8}|u[\da-f]{4}|x[\da-f]{1,2}|[0-7]{1,3}|:[^:]+:|'
|
3160
|
+
r'[abefnrtv?\"\'\\]|$)', String.Escape),
|
3161
|
+
],
|
3162
|
+
'signature': [
|
3163
|
+
(r'[(,]', Punctuation, 'parameter'),
|
3164
|
+
(r'=>', Operator, '#pop'),
|
3165
|
+
include('lasso'),
|
3166
|
+
],
|
3167
|
+
'parameter': [
|
3168
|
+
(r'\.\.\.', Name.Builtin.Pseudo),
|
3169
|
+
(r'-?[a-z_][\w.]*', Name.Attribute, '#pop'),
|
3170
|
+
(r'\)', Punctuation, '#pop'),
|
3171
|
+
include('lasso'),
|
3172
|
+
],
|
3173
|
+
}
|
3174
|
+
|
3175
|
+
def __init__(self, **options):
|
3176
|
+
self.builtinshighlighting = get_bool_opt(
|
3177
|
+
options, 'builtinshighlighting', True)
|
3178
|
+
self.requiredelimiters = get_bool_opt(
|
3179
|
+
options, 'requiredelimiters', False)
|
3180
|
+
|
3181
|
+
self._builtins = set()
|
3182
|
+
if self.builtinshighlighting:
|
3183
|
+
from pygments.lexers._lassobuiltins import BUILTINS
|
3184
|
+
for key, value in BUILTINS.iteritems():
|
3185
|
+
self._builtins.update(value)
|
3186
|
+
RegexLexer.__init__(self, **options)
|
3187
|
+
|
3188
|
+
def get_tokens_unprocessed(self, text):
|
3189
|
+
stack = ['root']
|
3190
|
+
if self.requiredelimiters:
|
3191
|
+
stack.append('delimiters')
|
3192
|
+
for index, token, value in \
|
3193
|
+
RegexLexer.get_tokens_unprocessed(self, text, stack):
|
3194
|
+
if token is Name.Other:
|
3195
|
+
if value.lower() in self._builtins:
|
3196
|
+
yield index, Name.Builtin, value
|
3197
|
+
continue
|
3198
|
+
yield index, token, value
|
3199
|
+
|
3200
|
+
def analyse_text(text):
|
3201
|
+
rv = 0.0
|
3202
|
+
if 'bin/lasso9' in text:
|
3203
|
+
rv += 0.8
|
3204
|
+
if re.search(r'<\?(=|lasso)', text, re.I):
|
3205
|
+
rv += 0.4
|
3206
|
+
if re.search(r'local\(', text, re.I):
|
3207
|
+
rv += 0.4
|
3208
|
+
if re.search(r'\[\n|\?>', text):
|
3209
|
+
rv += 0.4
|
3210
|
+
return rv
|