gitlab-pygments.rb 0.3.2 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +71 -0
- data/Gemfile +1 -1
- data/LICENSE +17 -0
- data/README.md +28 -1
- data/Rakefile +2 -5
- data/lexers +0 -0
- data/lib/pygments/mentos.py +19 -12
- data/lib/pygments/popen.rb +21 -4
- data/lib/pygments/version.rb +1 -1
- data/pygments.rb.gemspec +2 -0
- data/test/test_pygments.rb +13 -2
- data/vendor/custom_lexers/github.py +206 -3
- data/vendor/pygments-main/AUTHORS +41 -3
- data/vendor/pygments-main/CHANGES +132 -5
- data/vendor/pygments-main/LICENSE +1 -1
- data/vendor/pygments-main/Makefile +1 -1
- data/vendor/pygments-main/REVISION +1 -1
- data/vendor/pygments-main/docs/generate.py +1 -1
- data/vendor/pygments-main/docs/src/api.txt +1 -1
- data/vendor/pygments-main/docs/src/index.txt +1 -1
- data/vendor/pygments-main/docs/src/integrate.txt +5 -0
- data/vendor/pygments-main/docs/src/java.txt +70 -0
- data/vendor/pygments-main/docs/src/lexerdevelopment.txt +52 -0
- data/vendor/pygments-main/external/autopygmentize +64 -0
- data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
- data/vendor/pygments-main/external/markdown-processor.py +2 -2
- data/vendor/pygments-main/external/moin-parser.py +1 -1
- data/vendor/pygments-main/external/rst-directive-old.py +1 -1
- data/vendor/pygments-main/external/rst-directive.py +1 -1
- data/vendor/pygments-main/pygmentize +1 -1
- data/vendor/pygments-main/pygments/__init__.py +2 -2
- data/vendor/pygments-main/pygments/cmdline.py +14 -6
- data/vendor/pygments-main/pygments/console.py +1 -1
- data/vendor/pygments-main/pygments/filter.py +1 -1
- data/vendor/pygments-main/pygments/filters/__init__.py +3 -4
- data/vendor/pygments-main/pygments/formatter.py +4 -1
- data/vendor/pygments-main/pygments/formatters/__init__.py +1 -1
- data/vendor/pygments-main/pygments/formatters/_mapping.py +3 -3
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
- data/vendor/pygments-main/pygments/formatters/html.py +73 -2
- data/vendor/pygments-main/pygments/formatters/img.py +2 -2
- data/vendor/pygments-main/pygments/formatters/latex.py +9 -9
- data/vendor/pygments-main/pygments/formatters/other.py +1 -3
- data/vendor/pygments-main/pygments/formatters/rtf.py +1 -1
- data/vendor/pygments-main/pygments/formatters/svg.py +1 -1
- data/vendor/pygments-main/pygments/formatters/terminal.py +1 -1
- data/vendor/pygments-main/pygments/formatters/terminal256.py +1 -1
- data/vendor/pygments-main/pygments/lexer.py +78 -10
- data/vendor/pygments-main/pygments/lexers/__init__.py +13 -2
- data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
- data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_mapping.py +92 -36
- data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
- data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +2 -2
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +4 -3
- data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +11 -0
- data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
- data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -3
- data/vendor/pygments-main/pygments/lexers/agile.py +525 -38
- data/vendor/pygments-main/pygments/lexers/asm.py +45 -7
- data/vendor/pygments-main/pygments/lexers/compiled.py +1257 -425
- data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
- data/vendor/pygments-main/pygments/lexers/dotnet.py +97 -62
- data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
- data/vendor/pygments-main/pygments/lexers/functional.py +931 -32
- data/vendor/pygments-main/pygments/lexers/github.py +206 -3
- data/vendor/pygments-main/pygments/lexers/hdl.py +3 -3
- data/vendor/pygments-main/pygments/lexers/jvm.py +309 -44
- data/vendor/pygments-main/pygments/lexers/math.py +876 -30
- data/vendor/pygments-main/pygments/lexers/other.py +956 -517
- data/vendor/pygments-main/pygments/lexers/parsers.py +85 -2
- data/vendor/pygments-main/pygments/lexers/shell.py +81 -18
- data/vendor/pygments-main/pygments/lexers/special.py +1 -1
- data/vendor/pygments-main/pygments/lexers/sql.py +2 -2
- data/vendor/pygments-main/pygments/lexers/templates.py +119 -8
- data/vendor/pygments-main/pygments/lexers/text.py +155 -15
- data/vendor/pygments-main/pygments/lexers/web.py +1578 -397
- data/vendor/pygments-main/pygments/modeline.py +40 -0
- data/vendor/pygments-main/pygments/plugin.py +1 -1
- data/vendor/pygments-main/pygments/scanner.py +1 -1
- data/vendor/pygments-main/pygments/style.py +1 -1
- data/vendor/pygments-main/pygments/styles/__init__.py +1 -1
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
- data/vendor/pygments-main/pygments/styles/borland.py +1 -1
- data/vendor/pygments-main/pygments/styles/bw.py +1 -1
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
- data/vendor/pygments-main/pygments/styles/default.py +1 -1
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
- data/vendor/pygments-main/pygments/styles/manni.py +1 -1
- data/vendor/pygments-main/pygments/styles/monokai.py +1 -1
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
- data/vendor/pygments-main/pygments/styles/native.py +1 -1
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
- data/vendor/pygments-main/pygments/styles/tango.py +1 -1
- data/vendor/pygments-main/pygments/styles/trac.py +1 -1
- data/vendor/pygments-main/pygments/styles/vim.py +1 -1
- data/vendor/pygments-main/pygments/styles/vs.py +1 -1
- data/vendor/pygments-main/pygments/token.py +1 -1
- data/vendor/pygments-main/pygments/unistring.py +36 -26
- data/vendor/pygments-main/pygments/util.py +46 -1
- data/vendor/pygments-main/scripts/check_sources.py +2 -2
- data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +2 -0
- data/vendor/pygments-main/scripts/find_codetags.py +1 -1
- data/vendor/pygments-main/scripts/find_error.py +5 -6
- data/vendor/pygments-main/setup.cfg +1 -0
- data/vendor/pygments-main/setup.py +6 -4
- data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
- data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
- data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
- data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
- data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
- data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
- data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
- data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
- data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
- data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
- data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
- data/vendor/pygments-main/tests/examplefiles/classes.dylan +89 -4
- 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 +52 -0
- data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
- data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
- data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
- data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
- data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -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.prg +161 -0
- data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
- data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -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.shell-session +45 -0
- data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
- data/vendor/pygments-main/tests/examplefiles/example.ts +28 -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 +133 -0
- data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -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/logos_example.xm +28 -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/mg_sample.pro +73 -0
- data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
- data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
- data/vendor/pygments-main/tests/examplefiles/objc_example.m +7 -0
- data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
- data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -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 +233 -0
- data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
- data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
- data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
- data/vendor/pygments-main/tests/examplefiles/test.R +149 -115
- data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
- data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
- data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
- data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
- data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
- data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
- data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
- data/vendor/pygments-main/tests/examplefiles/type.lisp +16 -0
- data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
- data/vendor/pygments-main/tests/old_run.py +1 -1
- data/vendor/pygments-main/tests/run.py +3 -2
- data/vendor/pygments-main/tests/support/tags +36 -0
- data/vendor/pygments-main/tests/test_basic_api.py +4 -3
- data/vendor/pygments-main/tests/test_clexer.py +1 -1
- data/vendor/pygments-main/tests/test_cmdline.py +1 -1
- data/vendor/pygments-main/tests/test_examplefiles.py +3 -1
- data/vendor/pygments-main/tests/test_html_formatter.py +17 -1
- data/vendor/pygments-main/tests/test_latex_formatter.py +1 -1
- data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
- data/vendor/pygments-main/tests/test_perllexer.py +1 -1
- data/vendor/pygments-main/tests/test_regexlexer.py +1 -1
- data/vendor/pygments-main/tests/test_token.py +1 -1
- data/vendor/pygments-main/tests/test_using_api.py +1 -1
- data/vendor/pygments-main/tests/test_util.py +22 -3
- metadata +84 -16
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Lexers for non-source code file types.
|
7
7
|
|
8
|
-
:copyright: Copyright 2006-
|
8
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
9
9
|
:license: BSD, see LICENSE for details.
|
10
10
|
"""
|
11
11
|
|
@@ -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', 'HxmlLexer', 'EbnfLexer']
|
29
29
|
|
30
30
|
|
31
31
|
class IniLexer(RegexLexer):
|
@@ -34,14 +34,14 @@ class IniLexer(RegexLexer):
|
|
34
34
|
"""
|
35
35
|
|
36
36
|
name = 'INI'
|
37
|
-
aliases = ['ini', 'cfg']
|
37
|
+
aliases = ['ini', 'cfg', 'dosini']
|
38
38
|
filenames = ['*.ini', '*.cfg']
|
39
39
|
mimetypes = ['text/x-ini']
|
40
40
|
|
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 = ['registry']
|
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.
|
@@ -63,7 +106,7 @@ class PropertiesLexer(RegexLexer):
|
|
63
106
|
"""
|
64
107
|
|
65
108
|
name = 'Properties'
|
66
|
-
aliases = ['properties']
|
109
|
+
aliases = ['properties', 'jproperties']
|
67
110
|
filenames = ['*.properties']
|
68
111
|
mimetypes = ['text/x-java-properties']
|
69
112
|
|
@@ -85,7 +128,7 @@ class SourcesListLexer(RegexLexer):
|
|
85
128
|
"""
|
86
129
|
|
87
130
|
name = 'Debian Sourcelist'
|
88
|
-
aliases = ['sourceslist', 'sources.list']
|
131
|
+
aliases = ['sourceslist', 'sources.list', 'debsources']
|
89
132
|
filenames = ['sources.list']
|
90
133
|
mimetype = ['application/x-debian-sourceslist']
|
91
134
|
|
@@ -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),
|
@@ -573,7 +616,7 @@ class MoinWikiLexer(RegexLexer):
|
|
573
616
|
(r'(\'\'\'?|\|\||`|__|~~|\^|,,|::)', Comment), # Formatting
|
574
617
|
# Lists
|
575
618
|
(r'^( +)([.*-])( )', bygroups(Text, Name.Builtin, Text)),
|
576
|
-
(r'^( +)([a-
|
619
|
+
(r'^( +)([a-z]{1,5}\.)( )', bygroups(Text, Name.Builtin, Text)),
|
577
620
|
# Other Formatting
|
578
621
|
(r'\[\[\w+.*?\]\]', Keyword), # Macro
|
579
622
|
(r'(\[[^\s\]]+)(\s+[^\]]+?)?(\])',
|
@@ -1010,7 +1053,7 @@ class DebianControlLexer(RegexLexer):
|
|
1010
1053
|
*New in Pygments 0.9.*
|
1011
1054
|
"""
|
1012
1055
|
name = 'Debian Control file'
|
1013
|
-
aliases = ['control']
|
1056
|
+
aliases = ['control', 'debcontrol']
|
1014
1057
|
filenames = ['control']
|
1015
1058
|
|
1016
1059
|
tokens = {
|
@@ -1588,7 +1631,7 @@ class CMakeLexer(RegexLexer):
|
|
1588
1631
|
# r'VTK_MAKE_INSTANTIATOR|VTK_WRAP_JAVA|VTK_WRAP_PYTHON|'
|
1589
1632
|
# r'VTK_WRAP_TCL|WHILE|WRITE_FILE|'
|
1590
1633
|
# r'COUNTARGS)\b', Name.Builtin, 'args'),
|
1591
|
-
(r'\b(
|
1634
|
+
(r'\b(\w+)([ \t]*)(\()', bygroups(Name.Builtin, Text,
|
1592
1635
|
Punctuation), 'args'),
|
1593
1636
|
include('keywords'),
|
1594
1637
|
include('ws')
|
@@ -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()
|
@@ -1661,18 +1709,19 @@ class HttpLexer(RegexLexer):
|
|
1661
1709
|
|
1662
1710
|
tokens = {
|
1663
1711
|
'root': [
|
1664
|
-
(r'(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE)( +)([^ ]+)( +)'
|
1665
|
-
r'(
|
1712
|
+
(r'(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH)( +)([^ ]+)( +)'
|
1713
|
+
r'(HTTP)(/)(1\.[01])(\r?\n|$)',
|
1666
1714
|
bygroups(Name.Function, Text, Name.Namespace, Text,
|
1667
1715
|
Keyword.Reserved, Operator, Number, Text),
|
1668
1716
|
'headers'),
|
1669
|
-
(r'(
|
1717
|
+
(r'(HTTP)(/)(1\.[01])( +)(\d{3})( +)([^\r\n]+)(\r?\n|$)',
|
1670
1718
|
bygroups(Keyword.Reserved, Operator, Number, Text, Number,
|
1671
1719
|
Text, Name.Exception, Text),
|
1672
1720
|
'headers'),
|
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': [
|
@@ -1700,8 +1749,8 @@ class PyPyLogLexer(RegexLexer):
|
|
1700
1749
|
],
|
1701
1750
|
"jit-log": [
|
1702
1751
|
(r"\[\w+\] jit-log-.*?}$", Keyword, "#pop"),
|
1703
|
-
|
1704
1752
|
(r"^\+\d+: ", Comment),
|
1753
|
+
(r"--end of the loop--", Comment),
|
1705
1754
|
(r"[ifp]\d+", Name),
|
1706
1755
|
(r"ptr\d+", Name),
|
1707
1756
|
(r"(\()(\w+(?:\.\w+)?)(\))",
|
@@ -1711,7 +1760,7 @@ class PyPyLogLexer(RegexLexer):
|
|
1711
1760
|
(r"-?\d+", Number.Integer),
|
1712
1761
|
(r"'.*'", String),
|
1713
1762
|
(r"(None|descr|ConstClass|ConstPtr|TargetToken)", Name),
|
1714
|
-
(r"
|
1763
|
+
(r"<.*?>+", Name.Builtin),
|
1715
1764
|
(r"(label|debug_merge_point|jump|finish)", Name.Class),
|
1716
1765
|
(r"(int_add_ovf|int_add|int_sub_ovf|int_sub|int_mul_ovf|int_mul|"
|
1717
1766
|
r"int_floordiv|int_mod|int_lshift|int_rshift|int_and|int_or|"
|
@@ -1751,3 +1800,94 @@ class PyPyLogLexer(RegexLexer):
|
|
1751
1800
|
(r"#.*?$", Comment),
|
1752
1801
|
],
|
1753
1802
|
}
|
1803
|
+
|
1804
|
+
|
1805
|
+
class HxmlLexer(RegexLexer):
|
1806
|
+
"""
|
1807
|
+
Lexer for `haXe build <http://haxe.org/doc/compiler>`_ files.
|
1808
|
+
|
1809
|
+
*New in Pygments 1.6.*
|
1810
|
+
"""
|
1811
|
+
name = 'Hxml'
|
1812
|
+
aliases = ['haxeml', 'hxml']
|
1813
|
+
filenames = ['*.hxml']
|
1814
|
+
|
1815
|
+
tokens = {
|
1816
|
+
'root': [
|
1817
|
+
# Seperator
|
1818
|
+
(r'(--)(next)', bygroups(Punctuation, Generic.Heading)),
|
1819
|
+
# Compiler switches with one dash
|
1820
|
+
(r'(-)(prompt|debug|v)', bygroups(Punctuation, Keyword.Keyword)),
|
1821
|
+
# Compilerswitches with two dashes
|
1822
|
+
(r'(--)(neko-source|flash-strict|flash-use-stage|no-opt|no-traces|'
|
1823
|
+
r'no-inline|times|no-output)', bygroups(Punctuation, Keyword)),
|
1824
|
+
# Targets and other options that take an argument
|
1825
|
+
(r'(-)(cpp|js|neko|x|as3|swf9?|swf-lib|php|xml|main|lib|D|resource|'
|
1826
|
+
r'cp|cmd)( +)(.+)',
|
1827
|
+
bygroups(Punctuation, Keyword, Whitespace, String)),
|
1828
|
+
# Options that take only numerical arguments
|
1829
|
+
(r'(-)(swf-version)( +)(\d+)',
|
1830
|
+
bygroups(Punctuation, Keyword, Number.Integer)),
|
1831
|
+
# An Option that defines the size, the fps and the background
|
1832
|
+
# color of an flash movie
|
1833
|
+
(r'(-)(swf-header)( +)(\d+)(:)(\d+)(:)(\d+)(:)([A-Fa-f0-9]{6})',
|
1834
|
+
bygroups(Punctuation, Keyword, Whitespace, Number.Integer,
|
1835
|
+
Punctuation, Number.Integer, Punctuation, Number.Integer,
|
1836
|
+
Punctuation, Number.Hex)),
|
1837
|
+
# options with two dashes that takes arguments
|
1838
|
+
(r'(--)(js-namespace|php-front|php-lib|remap|gen-hx-classes)( +)'
|
1839
|
+
r'(.+)', bygroups(Punctuation, Keyword, Whitespace, String)),
|
1840
|
+
# Single line comment, multiline ones are not allowed.
|
1841
|
+
(r'#.*', Comment.Single)
|
1842
|
+
]
|
1843
|
+
}
|
1844
|
+
|
1845
|
+
|
1846
|
+
class EbnfLexer(RegexLexer):
|
1847
|
+
"""
|
1848
|
+
Lexer for `ISO/IEC 14977 EBNF
|
1849
|
+
<http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form>`_
|
1850
|
+
grammars.
|
1851
|
+
|
1852
|
+
*New in Pygments 1.7.*
|
1853
|
+
"""
|
1854
|
+
|
1855
|
+
name = 'EBNF'
|
1856
|
+
aliases = ['ebnf']
|
1857
|
+
filenames = ['*.ebnf']
|
1858
|
+
mimetypes = ['text/x-ebnf']
|
1859
|
+
|
1860
|
+
tokens = {
|
1861
|
+
'root': [
|
1862
|
+
include('whitespace'),
|
1863
|
+
include('comment_start'),
|
1864
|
+
include('identifier'),
|
1865
|
+
(r'=', Operator, 'production'),
|
1866
|
+
],
|
1867
|
+
'production': [
|
1868
|
+
include('whitespace'),
|
1869
|
+
include('comment_start'),
|
1870
|
+
include('identifier'),
|
1871
|
+
(r'"[^"]*"', String.Double),
|
1872
|
+
(r"'[^']*'", String.Single),
|
1873
|
+
(r'(\?[^?]*\?)', Name.Entity),
|
1874
|
+
(r'[\[\]{}(),|]', Punctuation),
|
1875
|
+
(r'-', Operator),
|
1876
|
+
(r';', Punctuation, '#pop'),
|
1877
|
+
],
|
1878
|
+
'whitespace': [
|
1879
|
+
(r'\s+', Text),
|
1880
|
+
],
|
1881
|
+
'comment_start': [
|
1882
|
+
(r'\(\*', Comment.Multiline, 'comment'),
|
1883
|
+
],
|
1884
|
+
'comment': [
|
1885
|
+
(r'[^*)]', Comment.Multiline),
|
1886
|
+
include('comment_start'),
|
1887
|
+
(r'\*\)', Comment.Multiline, '#pop'),
|
1888
|
+
(r'[*)]', Comment.Multiline),
|
1889
|
+
],
|
1890
|
+
'identifier': [
|
1891
|
+
(r'([a-zA-Z][a-zA-Z0-9 \-]*)', Keyword),
|
1892
|
+
],
|
1893
|
+
}
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Lexers for web-related languages and markup.
|
7
7
|
|
8
|
-
:copyright: Copyright 2006-
|
8
|
+
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
|
9
9
|
:license: BSD, see LICENSE for details.
|
10
10
|
"""
|
11
11
|
|
@@ -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', 'QmlLexer', 'TypeScriptLexer']
|
30
31
|
|
31
32
|
|
32
33
|
class JavascriptLexer(RegexLexer):
|
@@ -66,7 +67,7 @@ class JavascriptLexer(RegexLexer):
|
|
66
67
|
(r'[{(\[;,]', Punctuation, 'slashstartsregex'),
|
67
68
|
(r'[})\].]', Punctuation),
|
68
69
|
(r'(for|in|while|do|break|return|continue|switch|case|default|if|else|'
|
69
|
-
r'throw|try|catch|finally|new|delete|typeof|instanceof|void|'
|
70
|
+
r'throw|try|catch|finally|new|delete|typeof|instanceof|void|yield|'
|
70
71
|
r'this)\b', Keyword, 'slashstartsregex'),
|
71
72
|
(r'(var|let|with|function)\b', Keyword.Declaration, 'slashstartsregex'),
|
72
73
|
(r'(abstract|boolean|byte|char|class|const|debugger|double|enum|export|'
|
@@ -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
|
"""
|
@@ -719,8 +722,10 @@ class HtmlLexer(RegexLexer):
|
|
719
722
|
('<![^>]*>', Comment.Preproc),
|
720
723
|
(r'<\s*script\s*', Name.Tag, ('script-content', 'tag')),
|
721
724
|
(r'<\s*style\s*', Name.Tag, ('style-content', 'tag')),
|
722
|
-
|
723
|
-
|
725
|
+
# note: this allows tag names not used in HTML like <x:with-dash>,
|
726
|
+
# this is to support yet-unknown template engines and the like
|
727
|
+
(r'<\s*[\w:.-]+', Name.Tag, 'tag'),
|
728
|
+
(r'<\s*/\s*[\w:.-]+\s*>', Name.Tag),
|
724
729
|
],
|
725
730
|
'comment': [
|
726
731
|
('[^-]+', Comment),
|
@@ -788,7 +793,7 @@ class PhpLexer(RegexLexer):
|
|
788
793
|
|
789
794
|
name = 'PHP'
|
790
795
|
aliases = ['php', 'php3', 'php4', 'php5']
|
791
|
-
filenames = ['*.php', '*.php[345]']
|
796
|
+
filenames = ['*.php', '*.php[345]', '*.inc']
|
792
797
|
mimetypes = ['text/x-php']
|
793
798
|
|
794
799
|
flags = re.IGNORECASE | re.DOTALL | re.MULTILINE
|
@@ -828,7 +833,7 @@ class PhpLexer(RegexLexer):
|
|
828
833
|
r'endif|list|__LINE__|endswitch|new|__sleep|endwhile|not|'
|
829
834
|
r'array|__wakeup|E_ALL|NULL|final|php_user_filter|interface|'
|
830
835
|
r'implements|public|private|protected|abstract|clone|try|'
|
831
|
-
r'catch|throw|this|use|namespace)\b', Keyword),
|
836
|
+
r'catch|throw|this|use|namespace|trait)\b', Keyword),
|
832
837
|
(r'(true|false|null)\b', Keyword.Constant),
|
833
838
|
(r'\$\{\$+[a-zA-Z_][a-zA-Z0-9_]*\}', Name.Variable),
|
834
839
|
(r'\$+[a-zA-Z_][a-zA-Z0-9_]*', Name.Variable),
|
@@ -966,7 +971,8 @@ class DtdLexer(RegexLexer):
|
|
966
971
|
|
967
972
|
'attlist': [
|
968
973
|
include('common'),
|
969
|
-
(r'CDATA|IDREFS|IDREF|ID|NMTOKENS|NMTOKEN|ENTITIES|ENTITY|NOTATION',
|
974
|
+
(r'CDATA|IDREFS|IDREF|ID|NMTOKENS|NMTOKEN|ENTITIES|ENTITY|NOTATION',
|
975
|
+
Keyword.Constant),
|
970
976
|
(r'#REQUIRED|#IMPLIED|#FIXED', Keyword.Constant),
|
971
977
|
(r'xml:space|xml:lang', Keyword.Reserved),
|
972
978
|
(r'[^>\s\|()?+*,]+', Name.Attribute),
|
@@ -998,11 +1004,12 @@ class XmlLexer(RegexLexer):
|
|
998
1004
|
Generic lexer for XML (eXtensible Markup Language).
|
999
1005
|
"""
|
1000
1006
|
|
1001
|
-
flags = re.MULTILINE | re.DOTALL
|
1007
|
+
flags = re.MULTILINE | re.DOTALL | re.UNICODE
|
1002
1008
|
|
1003
1009
|
name = 'XML'
|
1004
1010
|
aliases = ['xml']
|
1005
|
-
filenames = ['*.xml', '*.xsl', '*.rss', '*.xslt', '*.xsd',
|
1011
|
+
filenames = ['*.xml', '*.xsl', '*.rss', '*.xslt', '*.xsd',
|
1012
|
+
'*.wsdl', '*.wsf']
|
1006
1013
|
mimetypes = ['text/xml', 'application/xml', 'image/svg+xml',
|
1007
1014
|
'application/rss+xml', 'application/atom+xml']
|
1008
1015
|
|
@@ -1014,8 +1021,8 @@ class XmlLexer(RegexLexer):
|
|
1014
1021
|
('<!--', Comment, 'comment'),
|
1015
1022
|
(r'<\?.*?\?>', Comment.Preproc),
|
1016
1023
|
('<![^>]*>', Comment.Preproc),
|
1017
|
-
(r'<\s*[
|
1018
|
-
(r'<\s*/\s*[
|
1024
|
+
(r'<\s*[\w:.-]+', Name.Tag, 'tag'),
|
1025
|
+
(r'<\s*/\s*[\w:.-]+\s*>', Name.Tag),
|
1019
1026
|
],
|
1020
1027
|
'comment': [
|
1021
1028
|
('[^-]+', Comment),
|
@@ -1024,7 +1031,7 @@ class XmlLexer(RegexLexer):
|
|
1024
1031
|
],
|
1025
1032
|
'tag': [
|
1026
1033
|
(r'\s+', Text),
|
1027
|
-
(r'[
|
1034
|
+
(r'[\w.:-]+\s*=', Name.Attribute, 'attr'),
|
1028
1035
|
(r'/?\s*>', Name.Tag, '#pop'),
|
1029
1036
|
],
|
1030
1037
|
'attr': [
|
@@ -1049,7 +1056,7 @@ class XsltLexer(XmlLexer):
|
|
1049
1056
|
|
1050
1057
|
name = 'XSLT'
|
1051
1058
|
aliases = ['xslt']
|
1052
|
-
filenames = ['*.xsl', '*.xslt']
|
1059
|
+
filenames = ['*.xsl', '*.xslt', '*.xpl'] # xpl is XProc
|
1053
1060
|
mimetypes = ['application/xsl+xml', 'application/xslt+xml']
|
1054
1061
|
|
1055
1062
|
EXTRA_KEYWORDS = set([
|
@@ -1081,6 +1088,8 @@ class MxmlLexer(RegexLexer):
|
|
1081
1088
|
"""
|
1082
1089
|
For MXML markup.
|
1083
1090
|
Nested AS3 in <script> tags is highlighted by the appropriate lexer.
|
1091
|
+
|
1092
|
+
*New in Pygments 1.1.*
|
1084
1093
|
"""
|
1085
1094
|
flags = re.MULTILINE | re.DOTALL
|
1086
1095
|
name = 'MXML'
|
@@ -1119,393 +1128,1008 @@ class MxmlLexer(RegexLexer):
|
|
1119
1128
|
}
|
1120
1129
|
|
1121
1130
|
|
1122
|
-
class HaxeLexer(
|
1131
|
+
class HaxeLexer(ExtendedRegexLexer):
|
1123
1132
|
"""
|
1124
|
-
For
|
1133
|
+
For Haxe source code (http://haxe.org/).
|
1134
|
+
|
1135
|
+
*New in Pygments 1.3.*
|
1125
1136
|
"""
|
1126
1137
|
|
1127
|
-
name = '
|
1128
|
-
aliases = ['hx', 'haXe']
|
1129
|
-
filenames = ['*.hx']
|
1130
|
-
mimetypes = ['text/haxe']
|
1138
|
+
name = 'Haxe'
|
1139
|
+
aliases = ['hx', 'Haxe', 'haxe', 'haXe', 'hxsl']
|
1140
|
+
filenames = ['*.hx', '*.hxsl']
|
1141
|
+
mimetypes = ['text/haxe', 'text/x-haxe', 'text/x-hx']
|
1142
|
+
|
1143
|
+
# keywords extracted from lexer.mll in the haxe compiler source
|
1144
|
+
keyword = (r'(?:function|class|static|var|if|else|while|do|for|'
|
1145
|
+
r'break|return|continue|extends|implements|import|'
|
1146
|
+
r'switch|case|default|public|private|try|untyped|'
|
1147
|
+
r'catch|new|this|throw|extern|enum|in|interface|'
|
1148
|
+
r'cast|override|dynamic|typedef|package|'
|
1149
|
+
r'inline|using|null|true|false|abstract)\b')
|
1150
|
+
|
1151
|
+
# idtype in lexer.mll
|
1152
|
+
typeid = r'_*[A-Z][_a-zA-Z0-9]*'
|
1153
|
+
|
1154
|
+
# combined ident and dollar and idtype
|
1155
|
+
ident = r'(?:_*[a-z][_a-zA-Z0-9]*|_+[0-9][_a-zA-Z0-9]*|' + typeid + \
|
1156
|
+
'|_+|\$[_a-zA-Z0-9]+)'
|
1131
1157
|
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1158
|
+
binop = (r'(?:%=|&=|\|=|\^=|\+=|\-=|\*=|/=|<<=|>\s*>\s*=|>\s*>\s*>\s*=|==|'
|
1159
|
+
r'!=|<=|>\s*=|&&|\|\||<<|>>>|>\s*>|\.\.\.|<|>|%|&|\||\^|\+|\*|'
|
1160
|
+
r'/|\-|=>|=)')
|
1161
|
+
|
1162
|
+
# ident except keywords
|
1163
|
+
ident_no_keyword = r'(?!' + keyword + ')' + ident
|
1136
1164
|
|
1137
1165
|
flags = re.DOTALL | re.MULTILINE
|
1138
1166
|
|
1167
|
+
preproc_stack = []
|
1168
|
+
|
1169
|
+
def preproc_callback(self, match, ctx):
|
1170
|
+
proc = match.group(2)
|
1171
|
+
|
1172
|
+
if proc == 'if':
|
1173
|
+
# store the current stack
|
1174
|
+
self.preproc_stack.append(ctx.stack[:])
|
1175
|
+
elif proc in ['else', 'elseif']:
|
1176
|
+
# restore the stack back to right before #if
|
1177
|
+
if self.preproc_stack: ctx.stack = self.preproc_stack[-1][:]
|
1178
|
+
elif proc == 'end':
|
1179
|
+
# remove the saved stack of previous #if
|
1180
|
+
if self.preproc_stack: self.preproc_stack.pop()
|
1181
|
+
|
1182
|
+
# #if and #elseif should follow by an expr
|
1183
|
+
if proc in ['if', 'elseif']:
|
1184
|
+
ctx.stack.append('preproc-expr')
|
1185
|
+
|
1186
|
+
# #error can be optionally follow by the error msg
|
1187
|
+
if proc in ['error']:
|
1188
|
+
ctx.stack.append('preproc-error')
|
1189
|
+
|
1190
|
+
yield match.start(), Comment.Preproc, '#' + proc
|
1191
|
+
ctx.pos = match.end()
|
1192
|
+
|
1193
|
+
|
1139
1194
|
tokens = {
|
1140
1195
|
'root': [
|
1141
|
-
include('
|
1142
|
-
include('
|
1143
|
-
(
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1196
|
+
include('spaces'),
|
1197
|
+
include('meta'),
|
1198
|
+
(r'(?:package)\b', Keyword.Namespace, ('semicolon', 'package')),
|
1199
|
+
(r'(?:import)\b', Keyword.Namespace, ('semicolon', 'import')),
|
1200
|
+
(r'(?:using)\b', Keyword.Namespace, ('semicolon', 'using')),
|
1201
|
+
(r'(?:extern|private)\b', Keyword.Declaration),
|
1202
|
+
(r'(?:abstract)\b', Keyword.Declaration, 'abstract'),
|
1203
|
+
(r'(?:class|interface)\b', Keyword.Declaration, 'class'),
|
1204
|
+
(r'(?:enum)\b', Keyword.Declaration, 'enum'),
|
1205
|
+
(r'(?:typedef)\b', Keyword.Declaration, 'typedef'),
|
1206
|
+
|
1207
|
+
# top-level expression
|
1208
|
+
# although it is not supported in haxe, but it is common to write
|
1209
|
+
# expression in web pages the positive lookahead here is to prevent
|
1210
|
+
# an infinite loop at the EOF
|
1211
|
+
(r'(?=.)', Text, 'expr-statement'),
|
1212
|
+
],
|
1213
|
+
|
1214
|
+
# space/tab/comment/preproc
|
1215
|
+
'spaces': [
|
1216
|
+
(r'\s+', Text),
|
1217
|
+
(r'//[^\n\r]*', Comment.Single),
|
1218
|
+
(r'/\*.*?\*/', Comment.Multiline),
|
1219
|
+
(r'(#)(if|elseif|else|end|error)\b', preproc_callback),
|
1148
1220
|
],
|
1149
1221
|
|
1150
|
-
|
1151
|
-
|
1152
|
-
(r'
|
1153
|
-
(r'
|
1154
|
-
(
|
1222
|
+
'string-single-interpol': [
|
1223
|
+
(r'\$\{', String.Interpol, ('string-interpol-close', 'expr')),
|
1224
|
+
(r'\$\$', String.Escape),
|
1225
|
+
(r'\$(?=' + ident + ')', String.Interpol, 'ident'),
|
1226
|
+
include('string-single'),
|
1155
1227
|
],
|
1156
|
-
|
1157
|
-
|
1158
|
-
(r'
|
1228
|
+
|
1229
|
+
'string-single': [
|
1230
|
+
(r"'", String.Single, '#pop'),
|
1231
|
+
(r'\\.', String.Escape),
|
1232
|
+
(r'.', String.Single),
|
1159
1233
|
],
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1234
|
+
|
1235
|
+
'string-double': [
|
1236
|
+
(r'"', String.Double, '#pop'),
|
1237
|
+
(r'\\.', String.Escape),
|
1238
|
+
(r'.', String.Double),
|
1165
1239
|
],
|
1166
|
-
|
1167
|
-
|
1168
|
-
(r'
|
1169
|
-
(r'
|
1170
|
-
(r"'(\\\\|\\'|[^'])*'", String.Single),
|
1171
|
-
(r'"(\\\\|\\"|[^"])*"', String.Double),
|
1172
|
-
(r'~/([^\n])*?/[gisx]*', String.Regex),
|
1173
|
-
(r'\b(true|false|null)\b', Keyword.Constant),
|
1174
|
-
],
|
1175
|
-
'codeblock': [
|
1176
|
-
include('whitespace'),
|
1177
|
-
include('new'),
|
1178
|
-
include('case'),
|
1179
|
-
include('anonfundef'),
|
1180
|
-
include('literals'),
|
1181
|
-
include('vardef'),
|
1182
|
-
include('codekeywords'),
|
1183
|
-
(r'[();,\[\]]', Punctuation),
|
1184
|
-
(r'(?:=|\+=|-=|\*=|/=|%=|&=|\|=|\^=|<<=|>>=|>>>=|\|\||&&|'
|
1185
|
-
r'\.\.\.|==|!=|>|<|>=|<=|\||&|\^|<<|>>>|>>|\+|\-|\*|/|%|'
|
1186
|
-
r'!|\+\+|\-\-|~|\.|\?|\:)',
|
1187
|
-
Operator),
|
1188
|
-
(ident, Name),
|
1189
|
-
|
1190
|
-
(r'}', Punctuation,'#pop'),
|
1191
|
-
(r'{', Punctuation,'#push'),
|
1192
|
-
],
|
1193
|
-
|
1194
|
-
# Instance/Block level constructs
|
1195
|
-
'propertydef': [
|
1196
|
-
(r'(\()(' + key_prop + ')(,)(' + key_prop + ')(\))',
|
1197
|
-
bygroups(Punctuation, Keyword.Reserved, Punctuation,
|
1198
|
-
Keyword.Reserved, Punctuation)),
|
1240
|
+
|
1241
|
+
'string-interpol-close': [
|
1242
|
+
(r'\$'+ident, String.Interpol),
|
1243
|
+
(r'\}', String.Interpol, '#pop'),
|
1199
1244
|
],
|
1200
|
-
|
1201
|
-
|
1245
|
+
|
1246
|
+
'package': [
|
1247
|
+
include('spaces'),
|
1248
|
+
(ident, Name.Namespace),
|
1249
|
+
(r'\.', Punctuation, 'import-ident'),
|
1250
|
+
(r'', Text, '#pop'),
|
1202
1251
|
],
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1252
|
+
|
1253
|
+
'import': [
|
1254
|
+
include('spaces'),
|
1255
|
+
(ident, Name.Namespace),
|
1256
|
+
(r'\*', Keyword), # wildcard import
|
1257
|
+
(r'\.', Punctuation, 'import-ident'),
|
1258
|
+
(r'in', Keyword.Namespace, 'ident'),
|
1259
|
+
(r'', Text, '#pop'),
|
1207
1260
|
],
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1261
|
+
|
1262
|
+
'import-ident': [
|
1263
|
+
include('spaces'),
|
1264
|
+
(r'\*', Keyword, '#pop'), # wildcard import
|
1265
|
+
(ident, Name.Namespace, '#pop'),
|
1211
1266
|
],
|
1212
|
-
|
1213
|
-
|
1214
|
-
include('
|
1215
|
-
(
|
1216
|
-
(r'
|
1267
|
+
|
1268
|
+
'using': [
|
1269
|
+
include('spaces'),
|
1270
|
+
(ident, Name.Namespace),
|
1271
|
+
(r'\.', Punctuation, 'import-ident'),
|
1272
|
+
(r'', Text, '#pop'),
|
1217
1273
|
],
|
1218
|
-
|
1219
|
-
|
1220
|
-
(r'\
|
1221
|
-
|
1222
|
-
|
1274
|
+
|
1275
|
+
'preproc-error': [
|
1276
|
+
(r'\s+', Comment.Preproc),
|
1277
|
+
(r"'", String.Single, ('#pop', 'string-single')),
|
1278
|
+
(r'"', String.Double, ('#pop', 'string-double')),
|
1279
|
+
(r'', Text, '#pop'),
|
1223
1280
|
],
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1281
|
+
|
1282
|
+
'preproc-expr': [
|
1283
|
+
(r'\s+', Comment.Preproc),
|
1284
|
+
(r'\!', Comment.Preproc),
|
1285
|
+
(r'\(', Comment.Preproc, ('#pop', 'preproc-parenthesis')),
|
1286
|
+
|
1287
|
+
(ident, Comment.Preproc, '#pop'),
|
1288
|
+
(r"'", String.Single, ('#pop', 'string-single')),
|
1289
|
+
(r'"', String.Double, ('#pop', 'string-double')),
|
1227
1290
|
],
|
1228
1291
|
|
1229
|
-
'
|
1230
|
-
(r'\
|
1292
|
+
'preproc-parenthesis': [
|
1293
|
+
(r'\s+', Comment.Preproc),
|
1294
|
+
(r'\)', Comment.Preproc, '#pop'),
|
1295
|
+
('', Text, 'preproc-expr-in-parenthesis'),
|
1231
1296
|
],
|
1232
|
-
|
1233
|
-
|
1234
|
-
(r'\
|
1235
|
-
|
1297
|
+
|
1298
|
+
'preproc-expr-chain': [
|
1299
|
+
(r'\s+', Comment.Preproc),
|
1300
|
+
(binop, Comment.Preproc, ('#pop', 'preproc-expr-in-parenthesis')),
|
1301
|
+
(r'', Text, '#pop'),
|
1236
1302
|
],
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1241
|
-
(r'
|
1242
|
-
(r'(
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
(
|
1249
|
-
|
1250
|
-
include('literals'),
|
1251
|
-
(r'=', Operator),
|
1252
|
-
(r',', Punctuation),
|
1253
|
-
(r'\?', Punctuation),
|
1254
|
-
(r'\)', Punctuation, '#pop'),
|
1303
|
+
|
1304
|
+
# same as 'preproc-expr' but able to chain 'preproc-expr-chain'
|
1305
|
+
'preproc-expr-in-parenthesis': [
|
1306
|
+
(r'\s+', Comment.Preproc),
|
1307
|
+
(r'\!', Comment.Preproc),
|
1308
|
+
(r'\(', Comment.Preproc,
|
1309
|
+
('#pop', 'preproc-expr-chain', 'preproc-parenthesis')),
|
1310
|
+
|
1311
|
+
(ident, Comment.Preproc, ('#pop', 'preproc-expr-chain')),
|
1312
|
+
(r"'", String.Single,
|
1313
|
+
('#pop', 'preproc-expr-chain', 'string-single')),
|
1314
|
+
(r'"', String.Double,
|
1315
|
+
('#pop', 'preproc-expr-chain', 'string-double')),
|
1255
1316
|
],
|
1256
1317
|
|
1257
|
-
'
|
1258
|
-
(
|
1318
|
+
'abstract' : [
|
1319
|
+
include('spaces'),
|
1320
|
+
(r'', Text, ('#pop', 'abstract-body', 'abstract-relation',
|
1321
|
+
'abstract-opaque', 'type-param-constraint', 'type-name')),
|
1259
1322
|
],
|
1260
|
-
|
1261
|
-
|
1262
|
-
(
|
1263
|
-
(r'
|
1264
|
-
(r'(?=[{}()=,a-z])', Text,'#pop'),
|
1323
|
+
|
1324
|
+
'abstract-body' : [
|
1325
|
+
include('spaces'),
|
1326
|
+
(r'\{', Punctuation, ('#pop', 'class-body')),
|
1265
1327
|
],
|
1266
|
-
|
1267
|
-
|
1268
|
-
(
|
1269
|
-
(r'
|
1270
|
-
(r'
|
1271
|
-
(r'(?=[{}(),;=])', Text, '#pop'),
|
1328
|
+
|
1329
|
+
'abstract-opaque' : [
|
1330
|
+
include('spaces'),
|
1331
|
+
(r'\(', Punctuation, ('#pop', 'parenthesis-close', 'type')),
|
1332
|
+
(r'', Text, '#pop'),
|
1272
1333
|
],
|
1273
|
-
|
1274
|
-
|
1275
|
-
(
|
1276
|
-
(r'
|
1277
|
-
(r'>', Punctuation, '#pop'),
|
1334
|
+
|
1335
|
+
'abstract-relation': [
|
1336
|
+
include('spaces'),
|
1337
|
+
(r'(?:to|from)', Keyword.Declaration, 'type'),
|
1278
1338
|
(r',', Punctuation),
|
1339
|
+
(r'', Text, '#pop'),
|
1340
|
+
],
|
1341
|
+
|
1342
|
+
'meta': [
|
1343
|
+
include('spaces'),
|
1344
|
+
(r'@', Name.Decorator, ('meta-body', 'meta-ident', 'meta-colon')),
|
1345
|
+
],
|
1346
|
+
|
1347
|
+
# optional colon
|
1348
|
+
'meta-colon': [
|
1349
|
+
include('spaces'),
|
1350
|
+
(r':', Name.Decorator, '#pop'),
|
1351
|
+
(r'', Text, '#pop'),
|
1352
|
+
],
|
1353
|
+
|
1354
|
+
# same as 'ident' but set token as Name.Decorator instead of Name
|
1355
|
+
'meta-ident': [
|
1356
|
+
include('spaces'),
|
1357
|
+
(ident, Name.Decorator, '#pop'),
|
1279
1358
|
],
|
1280
1359
|
|
1281
|
-
|
1282
|
-
|
1283
|
-
(r'
|
1284
|
-
|
1360
|
+
'meta-body': [
|
1361
|
+
include('spaces'),
|
1362
|
+
(r'\(', Name.Decorator, ('#pop', 'meta-call')),
|
1363
|
+
(r'', Text, '#pop'),
|
1364
|
+
],
|
1365
|
+
|
1366
|
+
'meta-call': [
|
1367
|
+
include('spaces'),
|
1368
|
+
(r'\)', Name.Decorator, '#pop'),
|
1369
|
+
(r'', Text, ('#pop', 'meta-call-sep', 'expr')),
|
1370
|
+
],
|
1371
|
+
|
1372
|
+
'meta-call-sep': [
|
1373
|
+
include('spaces'),
|
1374
|
+
(r'\)', Name.Decorator, '#pop'),
|
1375
|
+
(r',', Punctuation, ('#pop', 'meta-call')),
|
1285
1376
|
],
|
1377
|
+
|
1286
1378
|
'typedef': [
|
1287
|
-
(
|
1379
|
+
include('spaces'),
|
1380
|
+
(r'', Text, ('#pop', 'typedef-body', 'type-param-constraint',
|
1381
|
+
'type-name')),
|
1288
1382
|
],
|
1289
|
-
|
1290
|
-
|
1291
|
-
(
|
1292
|
-
|
1383
|
+
|
1384
|
+
'typedef-body': [
|
1385
|
+
include('spaces'),
|
1386
|
+
(r'=', Operator, ('#pop', 'optional-semicolon', 'type')),
|
1293
1387
|
],
|
1294
|
-
|
1295
|
-
|
1388
|
+
|
1389
|
+
'enum': [
|
1390
|
+
include('spaces'),
|
1391
|
+
(r'', Text, ('#pop', 'enum-body', 'bracket-open',
|
1392
|
+
'type-param-constraint', 'type-name')),
|
1296
1393
|
],
|
1297
|
-
|
1298
|
-
|
1299
|
-
(
|
1394
|
+
|
1395
|
+
'enum-body': [
|
1396
|
+
include('spaces'),
|
1397
|
+
include('meta'),
|
1398
|
+
(r'\}', Punctuation, '#pop'),
|
1399
|
+
(ident_no_keyword, Name, ('enum-member', 'type-param-constraint')),
|
1300
1400
|
],
|
1301
|
-
|
1302
|
-
|
1401
|
+
|
1402
|
+
'enum-member': [
|
1403
|
+
include('spaces'),
|
1404
|
+
(r'\(', Punctuation,
|
1405
|
+
('#pop', 'semicolon', 'flag', 'function-param')),
|
1406
|
+
(r'', Punctuation, ('#pop', 'semicolon', 'flag')),
|
1303
1407
|
],
|
1304
|
-
|
1305
|
-
|
1306
|
-
(
|
1307
|
-
(r'
|
1408
|
+
|
1409
|
+
'class': [
|
1410
|
+
include('spaces'),
|
1411
|
+
(r'', Text, ('#pop', 'class-body', 'bracket-open', 'extends',
|
1412
|
+
'type-param-constraint', 'type-name')),
|
1308
1413
|
],
|
1309
|
-
|
1310
|
-
|
1311
|
-
|
1414
|
+
|
1415
|
+
'extends': [
|
1416
|
+
include('spaces'),
|
1417
|
+
(r'(?:extends|implements)\b', Keyword.Declaration, 'type'),
|
1418
|
+
(r',', Punctuation), # the comma is made optional here, since haxe2
|
1419
|
+
# requires the comma but haxe3 does not allow it
|
1420
|
+
(r'', Text, '#pop'),
|
1312
1421
|
],
|
1313
|
-
|
1314
|
-
|
1315
|
-
(
|
1316
|
-
(r'{', Punctuation,
|
1317
|
-
],
|
1318
|
-
|
1319
|
-
'typedefbody': [
|
1320
|
-
include('whitespace'),
|
1321
|
-
include('instancevardef'),
|
1322
|
-
include('instancefundef'),
|
1323
|
-
(r'>', Punctuation, 'typedecl'),
|
1324
|
-
(r',', Punctuation),
|
1325
|
-
(r'}', Punctuation, '#pop'),
|
1326
|
-
],
|
1327
|
-
'enumdefbody': [
|
1328
|
-
include('whitespace'),
|
1329
|
-
(ident, Name.Variable.Instance),
|
1330
|
-
(r'\(', Punctuation, 'funargdecl'),
|
1331
|
-
(r';', Punctuation),
|
1332
|
-
(r'}', Punctuation, '#pop'),
|
1333
|
-
],
|
1334
|
-
'classdefbody': [
|
1335
|
-
include('whitespace'),
|
1336
|
-
include('instancevardef'),
|
1337
|
-
include('instancefundef'),
|
1338
|
-
(r'}', Punctuation, '#pop'),
|
1339
|
-
include('codeblock'),
|
1422
|
+
|
1423
|
+
'bracket-open': [
|
1424
|
+
include('spaces'),
|
1425
|
+
(r'\{', Punctuation, '#pop'),
|
1340
1426
|
],
|
1341
|
-
}
|
1342
1427
|
|
1343
|
-
|
1344
|
-
|
1428
|
+
'bracket-close': [
|
1429
|
+
include('spaces'),
|
1430
|
+
(r'\}', Punctuation, '#pop'),
|
1431
|
+
],
|
1345
1432
|
|
1433
|
+
'class-body': [
|
1434
|
+
include('spaces'),
|
1435
|
+
include('meta'),
|
1436
|
+
(r'\}', Punctuation, '#pop'),
|
1437
|
+
(r'(?:static|public|private|override|dynamic|inline|macro)\b',
|
1438
|
+
Keyword.Declaration),
|
1439
|
+
(r'', Text, 'class-member'),
|
1440
|
+
],
|
1346
1441
|
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1442
|
+
'class-member': [
|
1443
|
+
include('spaces'),
|
1444
|
+
(r'(var)\b', Keyword.Declaration,
|
1445
|
+
('#pop', 'optional-semicolon', 'prop')),
|
1446
|
+
(r'(function)\b', Keyword.Declaration,
|
1447
|
+
('#pop', 'optional-semicolon', 'class-method')),
|
1448
|
+
],
|
1352
1449
|
|
1353
|
-
|
1354
|
-
|
1355
|
-
|
1356
|
-
|
1357
|
-
|
1358
|
-
|
1359
|
-
|
1360
|
-
ctx.stack.append('content')
|
1450
|
+
# local function, anonymous or not
|
1451
|
+
'function-local': [
|
1452
|
+
include('spaces'),
|
1453
|
+
(r'(' + ident_no_keyword + ')?', Name.Function,
|
1454
|
+
('#pop', 'expr', 'flag', 'function-param',
|
1455
|
+
'parenthesis-open', 'type-param-constraint')),
|
1456
|
+
],
|
1361
1457
|
|
1362
|
-
|
1363
|
-
|
1364
|
-
|
1458
|
+
'optional-expr': [
|
1459
|
+
include('spaces'),
|
1460
|
+
include('expr'),
|
1461
|
+
(r'', Text, '#pop'),
|
1462
|
+
],
|
1365
1463
|
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1369
|
-
|
1464
|
+
'class-method': [
|
1465
|
+
include('spaces'),
|
1466
|
+
(ident, Name.Function, ('#pop', 'optional-expr', 'flag',
|
1467
|
+
'function-param', 'parenthesis-open',
|
1468
|
+
'type-param-constraint')),
|
1469
|
+
],
|
1370
1470
|
|
1371
|
-
|
1372
|
-
|
1471
|
+
# function arguments
|
1472
|
+
'function-param': [
|
1473
|
+
include('spaces'),
|
1474
|
+
(r'\)', Punctuation, '#pop'),
|
1475
|
+
(r'\?', Punctuation),
|
1476
|
+
(ident_no_keyword, Name,
|
1477
|
+
('#pop', 'function-param-sep', 'assign', 'flag')),
|
1478
|
+
],
|
1373
1479
|
|
1374
|
-
|
1480
|
+
'function-param-sep': [
|
1481
|
+
include('spaces'),
|
1482
|
+
(r'\)', Punctuation, '#pop'),
|
1483
|
+
(r',', Punctuation, ('#pop', 'function-param')),
|
1484
|
+
],
|
1375
1485
|
|
1486
|
+
# class property
|
1487
|
+
# eg. var prop(default, null):String;
|
1488
|
+
'prop': [
|
1489
|
+
include('spaces'),
|
1490
|
+
(ident_no_keyword, Name, ('#pop', 'assign', 'flag', 'prop-get-set')),
|
1491
|
+
],
|
1376
1492
|
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1493
|
+
'prop-get-set': [
|
1494
|
+
include('spaces'),
|
1495
|
+
(r'\(', Punctuation, ('#pop', 'parenthesis-close',
|
1496
|
+
'prop-get-set-opt', 'comma', 'prop-get-set-opt')),
|
1497
|
+
(r'', Text, '#pop'),
|
1498
|
+
],
|
1380
1499
|
|
1381
|
-
|
1382
|
-
|
1500
|
+
'prop-get-set-opt': [
|
1501
|
+
include('spaces'),
|
1502
|
+
(r'(?:default|null|never|dynamic|get|set)\b', Keyword, '#pop'),
|
1503
|
+
(ident_no_keyword, Text, '#pop'), #custom getter/setter
|
1504
|
+
],
|
1505
|
+
|
1506
|
+
'expr-statement': [
|
1507
|
+
include('spaces'),
|
1508
|
+
# makes semicolon optional here, just to avoid checking the last
|
1509
|
+
# one is bracket or not.
|
1510
|
+
(r'', Text, ('#pop', 'optional-semicolon', 'expr')),
|
1511
|
+
],
|
1512
|
+
|
1513
|
+
'expr': [
|
1514
|
+
include('spaces'),
|
1515
|
+
(r'@', Name.Decorator, ('#pop', 'optional-expr', 'meta-body',
|
1516
|
+
'meta-ident', 'meta-colon')),
|
1517
|
+
(r'(?:\+\+|\-\-|~(?!/)|!|\-)', Operator),
|
1518
|
+
(r'\(', Punctuation, ('#pop', 'expr-chain', 'parenthesis')),
|
1519
|
+
(r'(?:inline)\b', Keyword.Declaration),
|
1520
|
+
(r'(?:function)\b', Keyword.Declaration, ('#pop', 'expr-chain',
|
1521
|
+
'function-local')),
|
1522
|
+
(r'\{', Punctuation, ('#pop', 'expr-chain', 'bracket')),
|
1523
|
+
(r'(?:true|false|null)\b', Keyword.Constant, ('#pop', 'expr-chain')),
|
1524
|
+
(r'(?:this)\b', Keyword, ('#pop', 'expr-chain')),
|
1525
|
+
(r'(?:cast)\b', Keyword, ('#pop', 'expr-chain', 'cast')),
|
1526
|
+
(r'(?:try)\b', Keyword, ('#pop', 'catch', 'expr')),
|
1527
|
+
(r'(?:var)\b', Keyword.Declaration, ('#pop', 'var')),
|
1528
|
+
(r'(?:new)\b', Keyword, ('#pop', 'expr-chain', 'new')),
|
1529
|
+
(r'(?:switch)\b', Keyword, ('#pop', 'switch')),
|
1530
|
+
(r'(?:if)\b', Keyword, ('#pop', 'if')),
|
1531
|
+
(r'(?:do)\b', Keyword, ('#pop', 'do')),
|
1532
|
+
(r'(?:while)\b', Keyword, ('#pop', 'while')),
|
1533
|
+
(r'(?:for)\b', Keyword, ('#pop', 'for')),
|
1534
|
+
(r'(?:untyped|throw)\b', Keyword),
|
1535
|
+
(r'(?:return)\b', Keyword, ('#pop', 'optional-expr')),
|
1536
|
+
(r'(?:macro)\b', Keyword, ('#pop', 'macro')),
|
1537
|
+
(r'(?:continue|break)\b', Keyword, '#pop'),
|
1538
|
+
(r'(?:\$\s*[a-z]\b|\$(?!'+ident+'))', Name, ('#pop', 'dollar')),
|
1539
|
+
(ident_no_keyword, Name, ('#pop', 'expr-chain')),
|
1540
|
+
|
1541
|
+
# Float
|
1542
|
+
(r'\.[0-9]+', Number.Float, ('#pop', 'expr-chain')),
|
1543
|
+
(r'[0-9]+[eE][\+\-]?[0-9]+', Number.Float, ('#pop', 'expr-chain')),
|
1544
|
+
(r'[0-9]+\.[0-9]*[eE][\+\-]?[0-9]+', Number.Float, ('#pop', 'expr-chain')),
|
1545
|
+
(r'[0-9]+\.[0-9]+', Number.Float, ('#pop', 'expr-chain')),
|
1546
|
+
(r'[0-9]+\.(?!' + ident + '|\.\.)', Number.Float, ('#pop', 'expr-chain')),
|
1547
|
+
|
1548
|
+
# Int
|
1549
|
+
(r'0x[0-9a-fA-F]+', Number.Hex, ('#pop', 'expr-chain')),
|
1550
|
+
(r'[0-9]+', Number.Integer, ('#pop', 'expr-chain')),
|
1551
|
+
|
1552
|
+
# String
|
1553
|
+
(r"'", String.Single, ('#pop', 'expr-chain', 'string-single-interpol')),
|
1554
|
+
(r'"', String.Double, ('#pop', 'expr-chain', 'string-double')),
|
1555
|
+
|
1556
|
+
# EReg
|
1557
|
+
(r'~/(\\\\|\\/|[^/\n])*/[gimsu]*', String.Regex, ('#pop', 'expr-chain')),
|
1558
|
+
|
1559
|
+
# Array
|
1560
|
+
(r'\[', Punctuation, ('#pop', 'expr-chain', 'array-decl')),
|
1561
|
+
],
|
1562
|
+
|
1563
|
+
'expr-chain': [
|
1564
|
+
include('spaces'),
|
1565
|
+
(r'(?:\+\+|\-\-)', Operator),
|
1566
|
+
(binop, Operator, ('#pop', 'expr')),
|
1567
|
+
(r'(?:in)\b', Keyword, ('#pop', 'expr')),
|
1568
|
+
(r'\?', Operator, ('#pop', 'expr', 'ternary', 'expr')),
|
1569
|
+
(r'(\.)(' + ident_no_keyword + ')', bygroups(Punctuation, Name)),
|
1570
|
+
(r'\[', Punctuation, 'array-access'),
|
1571
|
+
(r'\(', Punctuation, 'call'),
|
1572
|
+
(r'', Text, '#pop'),
|
1573
|
+
],
|
1383
1574
|
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1387
|
-
|
1575
|
+
# macro reification
|
1576
|
+
'macro': [
|
1577
|
+
include('spaces'),
|
1578
|
+
(r':', Punctuation, ('#pop', 'type')),
|
1579
|
+
(r'', Text, ('#pop', 'expr')),
|
1580
|
+
],
|
1388
1581
|
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
1582
|
+
# cast can be written as "cast expr" or "cast(expr, type)"
|
1583
|
+
'cast': [
|
1584
|
+
include('spaces'),
|
1585
|
+
(r'\(', Punctuation, ('#pop', 'parenthesis-close',
|
1586
|
+
'cast-type', 'expr')),
|
1587
|
+
(r'', Text, ('#pop', 'expr')),
|
1588
|
+
],
|
1394
1589
|
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
(r'[ \t]*\n', Text),
|
1401
|
-
(r'[ \t]*', _indentation),
|
1590
|
+
# optionally give a type as the 2nd argument of cast()
|
1591
|
+
'cast-type': [
|
1592
|
+
include('spaces'),
|
1593
|
+
(r',', Punctuation, ('#pop', 'type')),
|
1594
|
+
(r'', Text, '#pop'),
|
1402
1595
|
],
|
1403
1596
|
|
1404
|
-
'
|
1405
|
-
(
|
1406
|
-
(r'
|
1597
|
+
'catch': [
|
1598
|
+
include('spaces'),
|
1599
|
+
(r'(?:catch)\b', Keyword, ('expr', 'function-param',
|
1600
|
+
'parenthesis-open')),
|
1601
|
+
(r'', Text, '#pop'),
|
1407
1602
|
],
|
1408
1603
|
|
1409
|
-
|
1410
|
-
|
1411
|
-
(
|
1412
|
-
|
1413
|
-
'root'),
|
1414
|
-
(r'', Text, 'plain'),
|
1604
|
+
# do-while loop
|
1605
|
+
'do': [
|
1606
|
+
include('spaces'),
|
1607
|
+
(r'', Punctuation, ('#pop', 'do-while', 'expr')),
|
1415
1608
|
],
|
1416
1609
|
|
1417
|
-
|
1418
|
-
|
1419
|
-
(
|
1420
|
-
(r'
|
1421
|
-
|
1422
|
-
bygroups(Comment, Comment.Special, Comment),
|
1423
|
-
'#pop'),
|
1424
|
-
(r'/' + _dot + r'*\n', _starts_block(Comment, 'html-comment-block'),
|
1425
|
-
'#pop'),
|
1426
|
-
(r'-#' + _dot + r'*\n', _starts_block(Comment.Preproc,
|
1427
|
-
'haml-comment-block'), '#pop'),
|
1428
|
-
(r'(-)(' + _comma_dot + r'*\n)',
|
1429
|
-
bygroups(Punctuation, using(RubyLexer)),
|
1430
|
-
'#pop'),
|
1431
|
-
(r':' + _dot + r'*\n', _starts_block(Name.Decorator, 'filter-block'),
|
1432
|
-
'#pop'),
|
1433
|
-
include('eval-or-plain'),
|
1610
|
+
# the while after do
|
1611
|
+
'do-while': [
|
1612
|
+
include('spaces'),
|
1613
|
+
(r'(?:while)\b', Keyword, ('#pop', 'parenthesis',
|
1614
|
+
'parenthesis-open')),
|
1434
1615
|
],
|
1435
1616
|
|
1436
|
-
'
|
1437
|
-
include('
|
1438
|
-
(r'\
|
1439
|
-
(r'\[' + _dot + '*?\]', using(RubyLexer)),
|
1440
|
-
(r'\(', Text, 'html-attributes'),
|
1441
|
-
(r'/[ \t]*\n', Punctuation, '#pop:2'),
|
1442
|
-
(r'[<>]{1,2}(?=[ \t=])', Punctuation),
|
1443
|
-
include('eval-or-plain'),
|
1617
|
+
'while': [
|
1618
|
+
include('spaces'),
|
1619
|
+
(r'\(', Punctuation, ('#pop', 'expr', 'parenthesis')),
|
1444
1620
|
],
|
1445
1621
|
|
1446
|
-
'
|
1447
|
-
(
|
1448
|
-
(r'(
|
1449
|
-
bygroups(String.Interpol, using(RubyLexer), String.Interpol)),
|
1450
|
-
(r'\n', Text, 'root'),
|
1622
|
+
'for': [
|
1623
|
+
include('spaces'),
|
1624
|
+
(r'\(', Punctuation, ('#pop', 'expr', 'parenthesis')),
|
1451
1625
|
],
|
1452
1626
|
|
1453
|
-
'
|
1454
|
-
(
|
1455
|
-
(r'
|
1456
|
-
|
1457
|
-
(r'\)', Text, '#pop'),
|
1627
|
+
'if': [
|
1628
|
+
include('spaces'),
|
1629
|
+
(r'\(', Punctuation, ('#pop', 'else', 'optional-semicolon', 'expr',
|
1630
|
+
'parenthesis')),
|
1458
1631
|
],
|
1459
1632
|
|
1460
|
-
'
|
1461
|
-
(
|
1462
|
-
(r'
|
1463
|
-
(r'
|
1464
|
-
(r'\$[a-z0-9_]+', Name.Variable.Global, '#pop'),
|
1465
|
-
(r"'(\\\\|\\'|[^'\n])*'", String, '#pop'),
|
1466
|
-
(r'"(\\\\|\\"|[^"\n])*"', String, '#pop'),
|
1633
|
+
'else': [
|
1634
|
+
include('spaces'),
|
1635
|
+
(r'(?:else)\b', Keyword, ('#pop', 'expr')),
|
1636
|
+
(r'', Text, '#pop'),
|
1467
1637
|
],
|
1468
1638
|
|
1469
|
-
'
|
1470
|
-
(
|
1471
|
-
(r'
|
1639
|
+
'switch': [
|
1640
|
+
include('spaces'),
|
1641
|
+
(r'', Text, ('#pop', 'switch-body', 'bracket-open', 'expr')),
|
1472
1642
|
],
|
1473
1643
|
|
1474
|
-
'
|
1475
|
-
(
|
1476
|
-
(r'\
|
1644
|
+
'switch-body': [
|
1645
|
+
include('spaces'),
|
1646
|
+
(r'(?:case|default)\b', Keyword, ('case-block', 'case')),
|
1647
|
+
(r'\}', Punctuation, '#pop'),
|
1477
1648
|
],
|
1478
1649
|
|
1479
|
-
'
|
1480
|
-
(
|
1481
|
-
(r'
|
1482
|
-
|
1483
|
-
(r'\n', Text, 'root'),
|
1650
|
+
'case': [
|
1651
|
+
include('spaces'),
|
1652
|
+
(r':', Punctuation, '#pop'),
|
1653
|
+
(r'', Text, ('#pop', 'case-sep', 'case-guard', 'expr')),
|
1484
1654
|
],
|
1485
|
-
}
|
1486
1655
|
|
1656
|
+
'case-sep': [
|
1657
|
+
include('spaces'),
|
1658
|
+
(r':', Punctuation, '#pop'),
|
1659
|
+
(r',', Punctuation, ('#pop', 'case')),
|
1660
|
+
],
|
1487
1661
|
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1495
|
-
|
1496
|
-
|
1497
|
-
|
1498
|
-
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
|
1662
|
+
'case-guard': [
|
1663
|
+
include('spaces'),
|
1664
|
+
(r'(?:if)\b', Keyword, ('#pop', 'parenthesis', 'parenthesis-open')),
|
1665
|
+
(r'', Text, '#pop'),
|
1666
|
+
],
|
1667
|
+
|
1668
|
+
# optional multiple expr under a case
|
1669
|
+
'case-block': [
|
1670
|
+
include('spaces'),
|
1671
|
+
(r'(?!(?:case|default)\b|\})', Keyword, 'expr-statement'),
|
1672
|
+
(r'', Text, '#pop'),
|
1673
|
+
],
|
1674
|
+
|
1675
|
+
'new': [
|
1676
|
+
include('spaces'),
|
1677
|
+
(r'', Text, ('#pop', 'call', 'parenthesis-open', 'type')),
|
1678
|
+
],
|
1679
|
+
|
1680
|
+
'array-decl': [
|
1681
|
+
include('spaces'),
|
1682
|
+
(r'\]', Punctuation, '#pop'),
|
1683
|
+
(r'', Text, ('#pop', 'array-decl-sep', 'expr')),
|
1684
|
+
],
|
1685
|
+
|
1686
|
+
'array-decl-sep': [
|
1687
|
+
include('spaces'),
|
1688
|
+
(r'\]', Punctuation, '#pop'),
|
1689
|
+
(r',', Punctuation, ('#pop', 'array-decl')),
|
1690
|
+
],
|
1691
|
+
|
1692
|
+
'array-access': [
|
1693
|
+
include('spaces'),
|
1694
|
+
(r'', Text, ('#pop', 'array-access-close', 'expr')),
|
1695
|
+
],
|
1696
|
+
|
1697
|
+
'array-access-close': [
|
1698
|
+
include('spaces'),
|
1699
|
+
(r'\]', Punctuation, '#pop'),
|
1700
|
+
],
|
1701
|
+
|
1702
|
+
'comma': [
|
1703
|
+
include('spaces'),
|
1704
|
+
(r',', Punctuation, '#pop'),
|
1705
|
+
],
|
1706
|
+
|
1707
|
+
'colon': [
|
1708
|
+
include('spaces'),
|
1709
|
+
(r':', Punctuation, '#pop'),
|
1710
|
+
],
|
1711
|
+
|
1712
|
+
'semicolon': [
|
1713
|
+
include('spaces'),
|
1714
|
+
(r';', Punctuation, '#pop'),
|
1715
|
+
],
|
1716
|
+
|
1717
|
+
'optional-semicolon': [
|
1718
|
+
include('spaces'),
|
1719
|
+
(r';', Punctuation, '#pop'),
|
1720
|
+
(r'', Text, '#pop'),
|
1721
|
+
],
|
1722
|
+
|
1723
|
+
# identity that CAN be a Haxe keyword
|
1724
|
+
'ident': [
|
1725
|
+
include('spaces'),
|
1726
|
+
(ident, Name, '#pop'),
|
1727
|
+
],
|
1728
|
+
|
1729
|
+
'dollar': [
|
1730
|
+
include('spaces'),
|
1731
|
+
(r'\{', Keyword, ('#pop', 'bracket-close', 'expr')),
|
1732
|
+
(r'', Text, ('#pop', 'expr-chain')),
|
1733
|
+
],
|
1734
|
+
|
1735
|
+
'type-name': [
|
1736
|
+
include('spaces'),
|
1737
|
+
(typeid, Name, '#pop'),
|
1738
|
+
],
|
1739
|
+
|
1740
|
+
'type-full-name': [
|
1741
|
+
include('spaces'),
|
1742
|
+
(r'\.', Punctuation, 'ident'),
|
1743
|
+
(r'', Text, '#pop'),
|
1744
|
+
],
|
1745
|
+
|
1746
|
+
'type': [
|
1747
|
+
include('spaces'),
|
1748
|
+
(r'\?', Punctuation),
|
1749
|
+
(ident, Name, ('#pop', 'type-check', 'type-full-name')),
|
1750
|
+
(r'\{', Punctuation, ('#pop', 'type-check', 'type-struct')),
|
1751
|
+
(r'\(', Punctuation, ('#pop', 'type-check', 'type-parenthesis')),
|
1752
|
+
],
|
1753
|
+
|
1754
|
+
'type-parenthesis': [
|
1755
|
+
include('spaces'),
|
1756
|
+
(r'', Text, ('#pop', 'parenthesis-close', 'type')),
|
1757
|
+
],
|
1758
|
+
|
1759
|
+
'type-check': [
|
1760
|
+
include('spaces'),
|
1761
|
+
(r'->', Punctuation, ('#pop', 'type')),
|
1762
|
+
(r'<(?!=)', Punctuation, 'type-param'),
|
1763
|
+
(r'', Text, '#pop'),
|
1764
|
+
],
|
1765
|
+
|
1766
|
+
'type-struct': [
|
1767
|
+
include('spaces'),
|
1768
|
+
(r'\}', Punctuation, '#pop'),
|
1769
|
+
(r'\?', Punctuation),
|
1770
|
+
(r'>', Punctuation, ('comma', 'type')),
|
1771
|
+
(ident_no_keyword, Name, ('#pop', 'type-struct-sep', 'type', 'colon')),
|
1772
|
+
include('class-body'),
|
1773
|
+
],
|
1774
|
+
|
1775
|
+
'type-struct-sep': [
|
1776
|
+
include('spaces'),
|
1777
|
+
(r'\}', Punctuation, '#pop'),
|
1778
|
+
(r',', Punctuation, ('#pop', 'type-struct')),
|
1779
|
+
],
|
1780
|
+
|
1781
|
+
# type-param can be a normal type or a constant literal...
|
1782
|
+
'type-param-type': [
|
1783
|
+
# Float
|
1784
|
+
(r'\.[0-9]+', Number.Float, '#pop'),
|
1785
|
+
(r'[0-9]+[eE][\+\-]?[0-9]+', Number.Float, '#pop'),
|
1786
|
+
(r'[0-9]+\.[0-9]*[eE][\+\-]?[0-9]+', Number.Float, '#pop'),
|
1787
|
+
(r'[0-9]+\.[0-9]+', Number.Float, '#pop'),
|
1788
|
+
(r'[0-9]+\.(?!' + ident + '|\.\.)', Number.Float, '#pop'),
|
1789
|
+
|
1790
|
+
# Int
|
1791
|
+
(r'0x[0-9a-fA-F]+', Number.Hex, '#pop'),
|
1792
|
+
(r'[0-9]+', Number.Integer, '#pop'),
|
1793
|
+
|
1794
|
+
# String
|
1795
|
+
(r"'", String.Single, ('#pop', 'string-single')),
|
1796
|
+
(r'"', String.Double, ('#pop', 'string-double')),
|
1797
|
+
|
1798
|
+
# EReg
|
1799
|
+
(r'~/(\\\\|\\/|[^/\n])*/[gim]*', String.Regex, '#pop'),
|
1800
|
+
|
1801
|
+
# Array
|
1802
|
+
(r'\[', Operator, ('#pop', 'array-decl')),
|
1803
|
+
|
1804
|
+
include('type'),
|
1805
|
+
],
|
1806
|
+
|
1807
|
+
# type-param part of a type
|
1808
|
+
# ie. the <A,B> path in Map<A,B>
|
1809
|
+
'type-param': [
|
1810
|
+
include('spaces'),
|
1811
|
+
(r'', Text, ('#pop', 'type-param-sep', 'type-param-type')),
|
1812
|
+
],
|
1813
|
+
|
1814
|
+
'type-param-sep': [
|
1815
|
+
include('spaces'),
|
1816
|
+
(r'>', Punctuation, '#pop'),
|
1817
|
+
(r',', Punctuation, ('#pop', 'type-param')),
|
1818
|
+
],
|
1819
|
+
|
1820
|
+
# optional type-param that may include constraint
|
1821
|
+
# ie. <T:Constraint, T2:(ConstraintA,ConstraintB)>
|
1822
|
+
'type-param-constraint': [
|
1823
|
+
include('spaces'),
|
1824
|
+
(r'<(?!=)', Punctuation, ('#pop', 'type-param-constraint-sep',
|
1825
|
+
'type-param-constraint-flag', 'type-name')),
|
1826
|
+
(r'', Text, '#pop'),
|
1827
|
+
],
|
1828
|
+
|
1829
|
+
'type-param-constraint-sep': [
|
1830
|
+
include('spaces'),
|
1831
|
+
(r'>', Punctuation, '#pop'),
|
1832
|
+
(r',', Punctuation, ('#pop', 'type-param-constraint-sep',
|
1833
|
+
'type-param-constraint-flag', 'type-name')),
|
1834
|
+
],
|
1835
|
+
|
1836
|
+
# the optional constraint inside type-param
|
1837
|
+
'type-param-constraint-flag': [
|
1838
|
+
include('spaces'),
|
1839
|
+
(r':', Punctuation, ('#pop', 'type-param-constraint-flag-type')),
|
1840
|
+
(r'', Text, '#pop'),
|
1841
|
+
],
|
1842
|
+
|
1843
|
+
'type-param-constraint-flag-type': [
|
1844
|
+
include('spaces'),
|
1845
|
+
(r'\(', Punctuation, ('#pop', 'type-param-constraint-flag-type-sep',
|
1846
|
+
'type')),
|
1847
|
+
(r'', Text, ('#pop', 'type')),
|
1848
|
+
],
|
1849
|
+
|
1850
|
+
'type-param-constraint-flag-type-sep': [
|
1851
|
+
include('spaces'),
|
1852
|
+
(r'\)', Punctuation, '#pop'),
|
1853
|
+
(r',', Punctuation, 'type'),
|
1854
|
+
],
|
1855
|
+
|
1856
|
+
# a parenthesis expr that contain exactly one expr
|
1857
|
+
'parenthesis': [
|
1858
|
+
include('spaces'),
|
1859
|
+
(r'', Text, ('#pop', 'parenthesis-close', 'expr')),
|
1860
|
+
],
|
1861
|
+
|
1862
|
+
'parenthesis-open': [
|
1863
|
+
include('spaces'),
|
1864
|
+
(r'\(', Punctuation, '#pop'),
|
1865
|
+
],
|
1866
|
+
|
1867
|
+
'parenthesis-close': [
|
1868
|
+
include('spaces'),
|
1869
|
+
(r'\)', Punctuation, '#pop'),
|
1870
|
+
],
|
1871
|
+
|
1872
|
+
'var': [
|
1873
|
+
include('spaces'),
|
1874
|
+
(ident_no_keyword, Text, ('#pop', 'var-sep', 'assign', 'flag')),
|
1875
|
+
],
|
1876
|
+
|
1877
|
+
# optional more var decl.
|
1878
|
+
'var-sep': [
|
1879
|
+
include('spaces'),
|
1880
|
+
(r',', Punctuation, ('#pop', 'var')),
|
1881
|
+
(r'', Text, '#pop'),
|
1882
|
+
],
|
1883
|
+
|
1884
|
+
# optional assignment
|
1885
|
+
'assign': [
|
1886
|
+
include('spaces'),
|
1887
|
+
(r'=', Operator, ('#pop', 'expr')),
|
1888
|
+
(r'', Text, '#pop'),
|
1889
|
+
],
|
1890
|
+
|
1891
|
+
# optional type flag
|
1892
|
+
'flag': [
|
1893
|
+
include('spaces'),
|
1894
|
+
(r':', Punctuation, ('#pop', 'type')),
|
1895
|
+
(r'', Text, '#pop'),
|
1896
|
+
],
|
1897
|
+
|
1898
|
+
# colon as part of a ternary operator (?:)
|
1899
|
+
'ternary': [
|
1900
|
+
include('spaces'),
|
1901
|
+
(r':', Operator, '#pop'),
|
1902
|
+
],
|
1903
|
+
|
1904
|
+
# function call
|
1905
|
+
'call': [
|
1906
|
+
include('spaces'),
|
1907
|
+
(r'\)', Punctuation, '#pop'),
|
1908
|
+
(r'', Text, ('#pop', 'call-sep', 'expr')),
|
1909
|
+
],
|
1910
|
+
|
1911
|
+
# after a call param
|
1912
|
+
'call-sep': [
|
1913
|
+
include('spaces'),
|
1914
|
+
(r'\)', Punctuation, '#pop'),
|
1915
|
+
(r',', Punctuation, ('#pop', 'call')),
|
1916
|
+
],
|
1917
|
+
|
1918
|
+
# bracket can be block or object
|
1919
|
+
'bracket': [
|
1920
|
+
include('spaces'),
|
1921
|
+
(r'(?!(?:\$\s*[a-z]\b|\$(?!'+ident+')))' + ident_no_keyword, Name,
|
1922
|
+
('#pop', 'bracket-check')),
|
1923
|
+
(r"'", String.Single, ('#pop', 'bracket-check', 'string-single')),
|
1924
|
+
(r'"', String.Double, ('#pop', 'bracket-check', 'string-double')),
|
1925
|
+
(r'', Text, ('#pop', 'block')),
|
1926
|
+
],
|
1927
|
+
|
1928
|
+
'bracket-check': [
|
1929
|
+
include('spaces'),
|
1930
|
+
(r':', Punctuation, ('#pop', 'object-sep', 'expr')), #is object
|
1931
|
+
(r'', Text, ('#pop', 'block', 'optional-semicolon', 'expr-chain')), #is block
|
1932
|
+
],
|
1933
|
+
|
1934
|
+
# code block
|
1935
|
+
'block': [
|
1936
|
+
include('spaces'),
|
1937
|
+
(r'\}', Punctuation, '#pop'),
|
1938
|
+
(r'', Text, 'expr-statement'),
|
1939
|
+
],
|
1940
|
+
|
1941
|
+
# object in key-value pairs
|
1942
|
+
'object': [
|
1943
|
+
include('spaces'),
|
1944
|
+
(r'\}', Punctuation, '#pop'),
|
1945
|
+
(r'', Text, ('#pop', 'object-sep', 'expr', 'colon', 'ident-or-string'))
|
1946
|
+
],
|
1947
|
+
|
1948
|
+
# a key of an object
|
1949
|
+
'ident-or-string': [
|
1950
|
+
include('spaces'),
|
1951
|
+
(ident_no_keyword, Name, '#pop'),
|
1952
|
+
(r"'", String.Single, ('#pop', 'string-single')),
|
1953
|
+
(r'"', String.Double, ('#pop', 'string-double')),
|
1954
|
+
],
|
1955
|
+
|
1956
|
+
# after a key-value pair in object
|
1957
|
+
'object-sep': [
|
1958
|
+
include('spaces'),
|
1959
|
+
(r'\}', Punctuation, '#pop'),
|
1960
|
+
(r',', Punctuation, ('#pop', 'object')),
|
1961
|
+
],
|
1962
|
+
|
1963
|
+
|
1964
|
+
|
1965
|
+
}
|
1966
|
+
|
1967
|
+
def analyse_text(text):
|
1968
|
+
if re.match(r'\w+\s*:\s*\w', text): return 0.3
|
1969
|
+
|
1970
|
+
|
1971
|
+
def _indentation(lexer, match, ctx):
|
1972
|
+
indentation = match.group(0)
|
1973
|
+
yield match.start(), Text, indentation
|
1974
|
+
ctx.last_indentation = indentation
|
1975
|
+
ctx.pos = match.end()
|
1976
|
+
|
1977
|
+
if hasattr(ctx, 'block_state') and ctx.block_state and \
|
1978
|
+
indentation.startswith(ctx.block_indentation) and \
|
1979
|
+
indentation != ctx.block_indentation:
|
1980
|
+
ctx.stack.append(ctx.block_state)
|
1981
|
+
else:
|
1982
|
+
ctx.block_state = None
|
1983
|
+
ctx.block_indentation = None
|
1984
|
+
ctx.stack.append('content')
|
1985
|
+
|
1986
|
+
def _starts_block(token, state):
|
1987
|
+
def callback(lexer, match, ctx):
|
1988
|
+
yield match.start(), token, match.group(0)
|
1989
|
+
|
1990
|
+
if hasattr(ctx, 'last_indentation'):
|
1991
|
+
ctx.block_indentation = ctx.last_indentation
|
1992
|
+
else:
|
1993
|
+
ctx.block_indentation = ''
|
1994
|
+
|
1995
|
+
ctx.block_state = state
|
1996
|
+
ctx.pos = match.end()
|
1997
|
+
|
1998
|
+
return callback
|
1999
|
+
|
2000
|
+
|
2001
|
+
class HamlLexer(ExtendedRegexLexer):
|
2002
|
+
"""
|
2003
|
+
For Haml markup.
|
2004
|
+
|
2005
|
+
*New in Pygments 1.3.*
|
2006
|
+
"""
|
2007
|
+
|
2008
|
+
name = 'Haml'
|
2009
|
+
aliases = ['haml', 'HAML']
|
2010
|
+
filenames = ['*.haml']
|
2011
|
+
mimetypes = ['text/x-haml']
|
2012
|
+
|
2013
|
+
flags = re.IGNORECASE
|
2014
|
+
# Haml can include " |\n" anywhere,
|
2015
|
+
# which is ignored and used to wrap long lines.
|
2016
|
+
# To accomodate this, use this custom faux dot instead.
|
2017
|
+
_dot = r'(?: \|\n(?=.* \|)|.)'
|
2018
|
+
|
2019
|
+
# In certain places, a comma at the end of the line
|
2020
|
+
# allows line wrapping as well.
|
2021
|
+
_comma_dot = r'(?:,\s*\n|' + _dot + ')'
|
2022
|
+
tokens = {
|
2023
|
+
'root': [
|
2024
|
+
(r'[ \t]*\n', Text),
|
2025
|
+
(r'[ \t]*', _indentation),
|
2026
|
+
],
|
2027
|
+
|
2028
|
+
'css': [
|
2029
|
+
(r'\.[a-z0-9_:-]+', Name.Class, 'tag'),
|
2030
|
+
(r'\#[a-z0-9_:-]+', Name.Function, 'tag'),
|
2031
|
+
],
|
2032
|
+
|
2033
|
+
'eval-or-plain': [
|
2034
|
+
(r'[&!]?==', Punctuation, 'plain'),
|
2035
|
+
(r'([&!]?[=~])(' + _comma_dot + r'*\n)',
|
2036
|
+
bygroups(Punctuation, using(RubyLexer)),
|
2037
|
+
'root'),
|
2038
|
+
(r'', Text, 'plain'),
|
2039
|
+
],
|
2040
|
+
|
2041
|
+
'content': [
|
2042
|
+
include('css'),
|
2043
|
+
(r'%[a-z0-9_:-]+', Name.Tag, 'tag'),
|
2044
|
+
(r'!!!' + _dot + r'*\n', Name.Namespace, '#pop'),
|
2045
|
+
(r'(/)(\[' + _dot + '*?\])(' + _dot + r'*\n)',
|
2046
|
+
bygroups(Comment, Comment.Special, Comment),
|
2047
|
+
'#pop'),
|
2048
|
+
(r'/' + _dot + r'*\n', _starts_block(Comment, 'html-comment-block'),
|
2049
|
+
'#pop'),
|
2050
|
+
(r'-#' + _dot + r'*\n', _starts_block(Comment.Preproc,
|
2051
|
+
'haml-comment-block'), '#pop'),
|
2052
|
+
(r'(-)(' + _comma_dot + r'*\n)',
|
2053
|
+
bygroups(Punctuation, using(RubyLexer)),
|
2054
|
+
'#pop'),
|
2055
|
+
(r':' + _dot + r'*\n', _starts_block(Name.Decorator, 'filter-block'),
|
2056
|
+
'#pop'),
|
2057
|
+
include('eval-or-plain'),
|
2058
|
+
],
|
2059
|
+
|
2060
|
+
'tag': [
|
2061
|
+
include('css'),
|
2062
|
+
(r'\{(,\n|' + _dot + ')*?\}', using(RubyLexer)),
|
2063
|
+
(r'\[' + _dot + '*?\]', using(RubyLexer)),
|
2064
|
+
(r'\(', Text, 'html-attributes'),
|
2065
|
+
(r'/[ \t]*\n', Punctuation, '#pop:2'),
|
2066
|
+
(r'[<>]{1,2}(?=[ \t=])', Punctuation),
|
2067
|
+
include('eval-or-plain'),
|
2068
|
+
],
|
2069
|
+
|
2070
|
+
'plain': [
|
2071
|
+
(r'([^#\n]|#[^{\n]|(\\\\)*\\#\{)+', Text),
|
2072
|
+
(r'(#\{)(' + _dot + '*?)(\})',
|
2073
|
+
bygroups(String.Interpol, using(RubyLexer), String.Interpol)),
|
2074
|
+
(r'\n', Text, 'root'),
|
2075
|
+
],
|
2076
|
+
|
2077
|
+
'html-attributes': [
|
2078
|
+
(r'\s+', Text),
|
2079
|
+
(r'[a-z0-9_:-]+[ \t]*=', Name.Attribute, 'html-attribute-value'),
|
2080
|
+
(r'[a-z0-9_:-]+', Name.Attribute),
|
2081
|
+
(r'\)', Text, '#pop'),
|
2082
|
+
],
|
2083
|
+
|
2084
|
+
'html-attribute-value': [
|
2085
|
+
(r'[ \t]+', Text),
|
2086
|
+
(r'[a-z0-9_]+', Name.Variable, '#pop'),
|
2087
|
+
(r'@[a-z0-9_]+', Name.Variable.Instance, '#pop'),
|
2088
|
+
(r'\$[a-z0-9_]+', Name.Variable.Global, '#pop'),
|
2089
|
+
(r"'(\\\\|\\'|[^'\n])*'", String, '#pop'),
|
2090
|
+
(r'"(\\\\|\\"|[^"\n])*"', String, '#pop'),
|
2091
|
+
],
|
2092
|
+
|
2093
|
+
'html-comment-block': [
|
2094
|
+
(_dot + '+', Comment),
|
2095
|
+
(r'\n', Text, 'root'),
|
2096
|
+
],
|
2097
|
+
|
2098
|
+
'haml-comment-block': [
|
2099
|
+
(_dot + '+', Comment.Preproc),
|
2100
|
+
(r'\n', Text, 'root'),
|
2101
|
+
],
|
2102
|
+
|
2103
|
+
'filter-block': [
|
2104
|
+
(r'([^#\n]|#[^{\n]|(\\\\)*\\#\{)+', Name.Decorator),
|
2105
|
+
(r'(#\{)(' + _dot + '*?)(\})',
|
2106
|
+
bygroups(String.Interpol, using(RubyLexer), String.Interpol)),
|
2107
|
+
(r'\n', Text, 'root'),
|
2108
|
+
],
|
2109
|
+
}
|
2110
|
+
|
2111
|
+
|
2112
|
+
common_sass_tokens = {
|
2113
|
+
'value': [
|
2114
|
+
(r'[ \t]+', Text),
|
2115
|
+
(r'[!$][\w-]+', Name.Variable),
|
2116
|
+
(r'url\(', String.Other, 'string-url'),
|
2117
|
+
(r'[a-z_-][\w-]*(?=\()', Name.Function),
|
2118
|
+
(r'(azimuth|background-attachment|background-color|'
|
2119
|
+
r'background-image|background-position|background-repeat|'
|
2120
|
+
r'background|border-bottom-color|border-bottom-style|'
|
2121
|
+
r'border-bottom-width|border-left-color|border-left-style|'
|
2122
|
+
r'border-left-width|border-right|border-right-color|'
|
2123
|
+
r'border-right-style|border-right-width|border-top-color|'
|
2124
|
+
r'border-top-style|border-top-width|border-bottom|'
|
2125
|
+
r'border-collapse|border-left|border-width|border-color|'
|
2126
|
+
r'border-spacing|border-style|border-top|border|caption-side|'
|
2127
|
+
r'clear|clip|color|content|counter-increment|counter-reset|'
|
2128
|
+
r'cue-after|cue-before|cue|cursor|direction|display|'
|
2129
|
+
r'elevation|empty-cells|float|font-family|font-size|'
|
2130
|
+
r'font-size-adjust|font-stretch|font-style|font-variant|'
|
2131
|
+
r'font-weight|font|height|letter-spacing|line-height|'
|
2132
|
+
r'list-style-type|list-style-image|list-style-position|'
|
1509
2133
|
r'list-style|margin-bottom|margin-left|margin-right|'
|
1510
2134
|
r'margin-top|margin|marker-offset|marks|max-height|max-width|'
|
1511
2135
|
r'min-height|min-width|opacity|orphans|outline|outline-color|'
|
@@ -1755,60 +2379,166 @@ class ScssLexer(RegexLexer):
|
|
1755
2379
|
(r'(@include)( [\w-]+)', bygroups(Keyword, Name.Decorator), 'value'),
|
1756
2380
|
(r'@extend', Keyword, 'selector'),
|
1757
2381
|
(r'@[a-z0-9_-]+', Keyword, 'selector'),
|
1758
|
-
(r'(\$[\w-]
|
2382
|
+
(r'(\$[\w-]*\w)([ \t]*:)', bygroups(Name.Variable, Operator), 'value'),
|
1759
2383
|
(r'(?=[^;{}][;}])', Name.Attribute, 'attr'),
|
1760
2384
|
(r'(?=[^;{}:]+:[^a-z])', Name.Attribute, 'attr'),
|
1761
2385
|
(r'', Text, 'selector'),
|
1762
2386
|
],
|
1763
|
-
|
1764
|
-
'attr': [
|
1765
|
-
(r'[^\s:="\[]+', Name.Attribute),
|
1766
|
-
(r'#{', String.Interpol, 'interpolation'),
|
1767
|
-
(r'[ \t]*:', Operator, 'value'),
|
2387
|
+
|
2388
|
+
'attr': [
|
2389
|
+
(r'[^\s:="\[]+', Name.Attribute),
|
2390
|
+
(r'#{', String.Interpol, 'interpolation'),
|
2391
|
+
(r'[ \t]*:', Operator, 'value'),
|
2392
|
+
],
|
2393
|
+
|
2394
|
+
'inline-comment': [
|
2395
|
+
(r"(\\#|#(?=[^{])|\*(?=[^/])|[^#*])+", Comment.Multiline),
|
2396
|
+
(r'#\{', String.Interpol, 'interpolation'),
|
2397
|
+
(r"\*/", Comment, '#pop'),
|
2398
|
+
],
|
2399
|
+
}
|
2400
|
+
for group, common in common_sass_tokens.iteritems():
|
2401
|
+
tokens[group] = copy.copy(common)
|
2402
|
+
tokens['value'].extend([(r'\n', Text), (r'[;{}]', Punctuation, 'root')])
|
2403
|
+
tokens['selector'].extend([(r'\n', Text), (r'[;{}]', Punctuation, 'root')])
|
2404
|
+
|
2405
|
+
|
2406
|
+
class CoffeeScriptLexer(RegexLexer):
|
2407
|
+
"""
|
2408
|
+
For `CoffeeScript`_ source code.
|
2409
|
+
|
2410
|
+
.. _CoffeeScript: http://coffeescript.org
|
2411
|
+
|
2412
|
+
*New in Pygments 1.3.*
|
2413
|
+
"""
|
2414
|
+
|
2415
|
+
name = 'CoffeeScript'
|
2416
|
+
aliases = ['coffee-script', 'coffeescript', 'coffee']
|
2417
|
+
filenames = ['*.coffee']
|
2418
|
+
mimetypes = ['text/coffeescript']
|
2419
|
+
|
2420
|
+
flags = re.DOTALL
|
2421
|
+
tokens = {
|
2422
|
+
'commentsandwhitespace': [
|
2423
|
+
(r'\s+', Text),
|
2424
|
+
(r'###[^#].*?###', Comment.Multiline),
|
2425
|
+
(r'#(?!##[^#]).*?\n', Comment.Single),
|
2426
|
+
],
|
2427
|
+
'multilineregex': [
|
2428
|
+
(r'[^/#]+', String.Regex),
|
2429
|
+
(r'///([gim]+\b|\B)', String.Regex, '#pop'),
|
2430
|
+
(r'#{', String.Interpol, 'interpoling_string'),
|
2431
|
+
(r'[/#]', String.Regex),
|
2432
|
+
],
|
2433
|
+
'slashstartsregex': [
|
2434
|
+
include('commentsandwhitespace'),
|
2435
|
+
(r'///', String.Regex, ('#pop', 'multilineregex')),
|
2436
|
+
(r'/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
|
2437
|
+
r'([gim]+\b|\B)', String.Regex, '#pop'),
|
2438
|
+
(r'', Text, '#pop'),
|
2439
|
+
],
|
2440
|
+
'root': [
|
2441
|
+
# this next expr leads to infinite loops root -> slashstartsregex
|
2442
|
+
#(r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
|
2443
|
+
include('commentsandwhitespace'),
|
2444
|
+
(r'\+\+|~|&&|\band\b|\bor\b|\bis\b|\bisnt\b|\bnot\b|\?|:|'
|
2445
|
+
r'\|\||\\(?=\n)|(<<|>>>?|==?|!=?|'
|
2446
|
+
r'=(?!>)|-(?!>)|[<>+*`%&\|\^/])=?',
|
2447
|
+
Operator, 'slashstartsregex'),
|
2448
|
+
(r'(?:\([^()]+\))?\s*[=-]>', Name.Function),
|
2449
|
+
(r'[{(\[;,]', Punctuation, 'slashstartsregex'),
|
2450
|
+
(r'[})\].]', Punctuation),
|
2451
|
+
(r'(?<![\.\$])(for|own|in|of|while|until|'
|
2452
|
+
r'loop|break|return|continue|'
|
2453
|
+
r'switch|when|then|if|unless|else|'
|
2454
|
+
r'throw|try|catch|finally|new|delete|typeof|instanceof|super|'
|
2455
|
+
r'extends|this|class|by)\b', Keyword, 'slashstartsregex'),
|
2456
|
+
(r'(?<![\.\$])(true|false|yes|no|on|off|null|'
|
2457
|
+
r'NaN|Infinity|undefined)\b',
|
2458
|
+
Keyword.Constant),
|
2459
|
+
(r'(Array|Boolean|Date|Error|Function|Math|netscape|'
|
2460
|
+
r'Number|Object|Packages|RegExp|String|sun|decodeURI|'
|
2461
|
+
r'decodeURIComponent|encodeURI|encodeURIComponent|'
|
2462
|
+
r'eval|isFinite|isNaN|parseFloat|parseInt|document|window)\b',
|
2463
|
+
Name.Builtin),
|
2464
|
+
(r'[$a-zA-Z_][a-zA-Z0-9_\.:\$]*\s*[:=]\s', Name.Variable,
|
2465
|
+
'slashstartsregex'),
|
2466
|
+
(r'@[$a-zA-Z_][a-zA-Z0-9_\.:\$]*\s*[:=]\s', Name.Variable.Instance,
|
2467
|
+
'slashstartsregex'),
|
2468
|
+
(r'@', Name.Other, 'slashstartsregex'),
|
2469
|
+
(r'@?[$a-zA-Z_][a-zA-Z0-9_\$]*', Name.Other, 'slashstartsregex'),
|
2470
|
+
(r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
|
2471
|
+
(r'0x[0-9a-fA-F]+', Number.Hex),
|
2472
|
+
(r'[0-9]+', Number.Integer),
|
2473
|
+
('"""', String, 'tdqs'),
|
2474
|
+
("'''", String, 'tsqs'),
|
2475
|
+
('"', String, 'dqs'),
|
2476
|
+
("'", String, 'sqs'),
|
2477
|
+
],
|
2478
|
+
'strings': [
|
2479
|
+
(r'[^#\\\'"]+', String),
|
2480
|
+
# note that all coffee script strings are multi-line.
|
2481
|
+
# hashmarks, quotes and backslashes must be parsed one at a time
|
1768
2482
|
],
|
1769
|
-
|
1770
|
-
|
1771
|
-
(
|
1772
|
-
|
1773
|
-
|
2483
|
+
'interpoling_string' : [
|
2484
|
+
(r'}', String.Interpol, "#pop"),
|
2485
|
+
include('root')
|
2486
|
+
],
|
2487
|
+
'dqs': [
|
2488
|
+
(r'"', String, '#pop'),
|
2489
|
+
(r'\\.|\'', String), # double-quoted string don't need ' escapes
|
2490
|
+
(r'#{', String.Interpol, "interpoling_string"),
|
2491
|
+
include('strings')
|
2492
|
+
],
|
2493
|
+
'sqs': [
|
2494
|
+
(r"'", String, '#pop'),
|
2495
|
+
(r'#|\\.|"', String), # single quoted strings don't need " escapses
|
2496
|
+
include('strings')
|
2497
|
+
],
|
2498
|
+
'tdqs': [
|
2499
|
+
(r'"""', String, '#pop'),
|
2500
|
+
(r'\\.|\'|"', String), # no need to escape quotes in triple-string
|
2501
|
+
(r'#{', String.Interpol, "interpoling_string"),
|
2502
|
+
include('strings'),
|
2503
|
+
],
|
2504
|
+
'tsqs': [
|
2505
|
+
(r"'''", String, '#pop'),
|
2506
|
+
(r'#|\\.|\'|"', String), # no need to escape quotes in triple-strings
|
2507
|
+
include('strings')
|
1774
2508
|
],
|
1775
2509
|
}
|
1776
|
-
for group, common in common_sass_tokens.iteritems():
|
1777
|
-
tokens[group] = copy.copy(common)
|
1778
|
-
tokens['value'].extend([(r'\n', Text), (r'[;{}]', Punctuation, 'root')])
|
1779
|
-
tokens['selector'].extend([(r'\n', Text), (r'[;{}]', Punctuation, 'root')])
|
1780
2510
|
|
1781
2511
|
|
1782
|
-
class
|
2512
|
+
class LiveScriptLexer(RegexLexer):
|
1783
2513
|
"""
|
1784
|
-
For `
|
2514
|
+
For `LiveScript`_ source code.
|
1785
2515
|
|
1786
|
-
..
|
2516
|
+
.. _LiveScript: http://gkz.github.com/LiveScript/
|
1787
2517
|
|
1788
|
-
|
2518
|
+
New in Pygments 1.6.
|
1789
2519
|
"""
|
1790
2520
|
|
1791
|
-
name = '
|
1792
|
-
aliases = ['
|
1793
|
-
filenames = ['*.
|
1794
|
-
mimetypes = ['text/
|
2521
|
+
name = 'LiveScript'
|
2522
|
+
aliases = ['live-script', 'livescript']
|
2523
|
+
filenames = ['*.ls']
|
2524
|
+
mimetypes = ['text/livescript']
|
1795
2525
|
|
1796
2526
|
flags = re.DOTALL
|
1797
2527
|
tokens = {
|
1798
2528
|
'commentsandwhitespace': [
|
1799
2529
|
(r'\s+', Text),
|
1800
|
-
(r'
|
2530
|
+
(r'/\*.*?\*/', Comment.Multiline),
|
1801
2531
|
(r'#.*?\n', Comment.Single),
|
1802
2532
|
],
|
1803
2533
|
'multilineregex': [
|
1804
2534
|
include('commentsandwhitespace'),
|
1805
|
-
(r'
|
2535
|
+
(r'//([gim]+\b|\B)', String.Regex, '#pop'),
|
1806
2536
|
(r'/', String.Regex),
|
1807
2537
|
(r'[^/#]+', String.Regex)
|
1808
2538
|
],
|
1809
2539
|
'slashstartsregex': [
|
1810
2540
|
include('commentsandwhitespace'),
|
1811
|
-
(r'
|
2541
|
+
(r'//', String.Regex, ('#pop', 'multilineregex')),
|
1812
2542
|
(r'/(?! )(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
|
1813
2543
|
r'([gim]+\b|\B)', String.Regex, '#pop'),
|
1814
2544
|
(r'', Text, '#pop'),
|
@@ -1817,35 +2547,42 @@ class CoffeeScriptLexer(RegexLexer):
|
|
1817
2547
|
# this next expr leads to infinite loops root -> slashstartsregex
|
1818
2548
|
#(r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
|
1819
2549
|
include('commentsandwhitespace'),
|
1820
|
-
(r'
|
1821
|
-
r'
|
2550
|
+
(r'(?:\([^()]+\))?[ ]*[~-]{1,2}>|'
|
2551
|
+
r'(?:\(?[^()\n]+\)?)?[ ]*<[~-]{1,2}', Name.Function),
|
2552
|
+
(r'\+\+|&&|(?<![\.\$])\b(?:and|x?or|is|isnt|not)\b|\?|:|=|'
|
2553
|
+
r'\|\||\\(?=\n)|(<<|>>>?|==?|!=?|'
|
2554
|
+
r'~(?!\~?>)|-(?!\-?>)|<(?!\[)|(?<!\])>|'
|
2555
|
+
r'[+*`%&\|\^/])=?',
|
1822
2556
|
Operator, 'slashstartsregex'),
|
1823
|
-
(r'\([^()]*\)\s*->', Name.Function),
|
1824
2557
|
(r'[{(\[;,]', Punctuation, 'slashstartsregex'),
|
1825
2558
|
(r'[})\].]', Punctuation),
|
1826
|
-
(r'(for|in|of|while|
|
2559
|
+
(r'(?<![\.\$])(for|own|in|of|while|until|loop|break|'
|
2560
|
+
r'return|continue|switch|when|then|if|unless|else|'
|
1827
2561
|
r'throw|try|catch|finally|new|delete|typeof|instanceof|super|'
|
1828
|
-
r'extends|this|class|by)\b', Keyword,
|
1829
|
-
|
1830
|
-
|
2562
|
+
r'extends|this|class|by|const|var|to|til)\b', Keyword,
|
2563
|
+
'slashstartsregex'),
|
2564
|
+
(r'(?<![\.\$])(true|false|yes|no|on|off|'
|
2565
|
+
r'null|NaN|Infinity|undefined|void)\b',
|
2566
|
+
Keyword.Constant),
|
1831
2567
|
(r'(Array|Boolean|Date|Error|Function|Math|netscape|'
|
1832
2568
|
r'Number|Object|Packages|RegExp|String|sun|decodeURI|'
|
1833
2569
|
r'decodeURIComponent|encodeURI|encodeURIComponent|'
|
1834
2570
|
r'eval|isFinite|isNaN|parseFloat|parseInt|document|window)\b',
|
1835
|
-
|
1836
|
-
(r'[$a-zA-Z_][a-zA-Z0-9_
|
2571
|
+
Name.Builtin),
|
2572
|
+
(r'[$a-zA-Z_][a-zA-Z0-9_\.\-:\$]*\s*[:=]\s', Name.Variable,
|
1837
2573
|
'slashstartsregex'),
|
1838
|
-
(r'@[$a-zA-Z_][a-zA-Z0-9_
|
2574
|
+
(r'@[$a-zA-Z_][a-zA-Z0-9_\.\-:\$]*\s*[:=]\s', Name.Variable.Instance,
|
1839
2575
|
'slashstartsregex'),
|
1840
2576
|
(r'@', Name.Other, 'slashstartsregex'),
|
1841
|
-
(r'@?[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other, 'slashstartsregex'),
|
1842
|
-
(r'[0-9][0-9]
|
1843
|
-
(r'
|
1844
|
-
(r'[0-9]+', Number.Integer),
|
2577
|
+
(r'@?[$a-zA-Z_][a-zA-Z0-9_\-]*', Name.Other, 'slashstartsregex'),
|
2578
|
+
(r'[0-9]+\.[0-9]+([eE][0-9]+)?[fd]?(?:[a-zA-Z_]+)?', Number.Float),
|
2579
|
+
(r'[0-9]+(~[0-9a-z]+)?(?:[a-zA-Z_]+)?', Number.Integer),
|
1845
2580
|
('"""', String, 'tdqs'),
|
1846
2581
|
("'''", String, 'tsqs'),
|
1847
2582
|
('"', String, 'dqs'),
|
1848
2583
|
("'", String, 'sqs'),
|
2584
|
+
(r'\\[\w$-]+', String),
|
2585
|
+
(r'<\[.*\]>', String),
|
1849
2586
|
],
|
1850
2587
|
'strings': [
|
1851
2588
|
(r'[^#\\\'"]+', String),
|
@@ -1860,6 +2597,7 @@ class CoffeeScriptLexer(RegexLexer):
|
|
1860
2597
|
(r'"', String, '#pop'),
|
1861
2598
|
(r'\\.|\'', String), # double-quoted string don't need ' escapes
|
1862
2599
|
(r'#{', String.Interpol, "interpoling_string"),
|
2600
|
+
(r'#', String),
|
1863
2601
|
include('strings')
|
1864
2602
|
],
|
1865
2603
|
'sqs': [
|
@@ -1871,6 +2609,7 @@ class CoffeeScriptLexer(RegexLexer):
|
|
1871
2609
|
(r'"""', String, '#pop'),
|
1872
2610
|
(r'\\.|\'|"', String), # no need to escape quotes in triple-string
|
1873
2611
|
(r'#{', String.Interpol, "interpoling_string"),
|
2612
|
+
(r'#', String),
|
1874
2613
|
include('strings'),
|
1875
2614
|
],
|
1876
2615
|
'tsqs': [
|
@@ -1880,6 +2619,7 @@ class CoffeeScriptLexer(RegexLexer):
|
|
1880
2619
|
],
|
1881
2620
|
}
|
1882
2621
|
|
2622
|
+
|
1883
2623
|
class DuelLexer(RegexLexer):
|
1884
2624
|
"""
|
1885
2625
|
Lexer for Duel Views Engine (formerly JBST) markup with JavaScript code blocks.
|
@@ -2142,8 +2882,8 @@ class XQueryLexer(ExtendedRegexLexer):
|
|
2142
2882
|
*New in Pygments 1.4.*
|
2143
2883
|
"""
|
2144
2884
|
name = 'XQuery'
|
2145
|
-
aliases = ['xquery', 'xqy']
|
2146
|
-
filenames = ['*.xqy', '*.xquery']
|
2885
|
+
aliases = ['xquery', 'xqy', 'xq', 'xql', 'xqm']
|
2886
|
+
filenames = ['*.xqy', '*.xquery', '*.xq', '*.xql', '*.xqm']
|
2147
2887
|
mimetypes = ['text/xquery', 'application/xquery']
|
2148
2888
|
|
2149
2889
|
xquery_parse_state = []
|
@@ -2544,8 +3284,8 @@ class XQueryLexer(ExtendedRegexLexer):
|
|
2544
3284
|
'xml_comment': [
|
2545
3285
|
(r'(-->)', popstate_xmlcomment_callback),
|
2546
3286
|
(r'[^-]{1,2}', Literal),
|
2547
|
-
(ur'\t|\r|\n|[\u0020-\
|
2548
|
-
|
3287
|
+
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
|
3288
|
+
unirange(0x10000, 0x10ffff), Literal),
|
2549
3289
|
],
|
2550
3290
|
'processing_instruction': [
|
2551
3291
|
(r'\s+', Text, 'processing_instruction_content'),
|
@@ -2554,13 +3294,13 @@ class XQueryLexer(ExtendedRegexLexer):
|
|
2554
3294
|
],
|
2555
3295
|
'processing_instruction_content': [
|
2556
3296
|
(r'\?>', String.Doc, '#pop'),
|
2557
|
-
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|'
|
2558
|
-
|
3297
|
+
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
|
3298
|
+
unirange(0x10000, 0x10ffff), Literal),
|
2559
3299
|
],
|
2560
3300
|
'cdata_section': [
|
2561
3301
|
(r']]>', String.Doc, '#pop'),
|
2562
|
-
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|'
|
2563
|
-
|
3302
|
+
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
|
3303
|
+
unirange(0x10000, 0x10ffff), Literal),
|
2564
3304
|
],
|
2565
3305
|
'start_tag': [
|
2566
3306
|
include('whitespace'),
|
@@ -2628,8 +3368,8 @@ class XQueryLexer(ExtendedRegexLexer):
|
|
2628
3368
|
],
|
2629
3369
|
'pragmacontents': [
|
2630
3370
|
(r'#\)', Punctuation, 'operator'),
|
2631
|
-
(ur'\t|\r|\n|[\u0020-\
|
2632
|
-
|
3371
|
+
(ur'\t|\r|\n|[\u0020-\uD7FF]|[\uE000-\uFFFD]|' +
|
3372
|
+
unirange(0x10000, 0x10ffff), Literal),
|
2633
3373
|
(r'(\s+)', Text),
|
2634
3374
|
],
|
2635
3375
|
'occurrenceindicator': [
|
@@ -2813,27 +3553,25 @@ class DartLexer(RegexLexer):
|
|
2813
3553
|
|
2814
3554
|
tokens = {
|
2815
3555
|
'root': [
|
3556
|
+
include('string_literal'),
|
2816
3557
|
(r'#!(.*?)$', Comment.Preproc),
|
2817
|
-
(r'(
|
3558
|
+
(r'\b(import|export)\b', Keyword, 'import_decl'),
|
3559
|
+
(r'\b(library|source|part of|part)\b', Keyword),
|
2818
3560
|
(r'[^\S\n]+', Text),
|
2819
3561
|
(r'//.*?\n', Comment.Single),
|
2820
3562
|
(r'/\*.*?\*/', Comment.Multiline),
|
2821
|
-
(r'(class
|
3563
|
+
(r'\b(class)\b(\s+)',
|
2822
3564
|
bygroups(Keyword.Declaration, Text), 'class'),
|
2823
|
-
(r'(assert|break|case|catch|continue|default|do|else|finally|for|'
|
3565
|
+
(r'\b(assert|break|case|catch|continue|default|do|else|finally|for|'
|
2824
3566
|
r'if|in|is|new|return|super|switch|this|throw|try|while)\b',
|
2825
3567
|
Keyword),
|
2826
|
-
(r'(abstract|const|extends|factory|final|get|implements|'
|
3568
|
+
(r'\b(abstract|const|extends|factory|final|get|implements|'
|
2827
3569
|
r'native|operator|set|static|typedef|var)\b', Keyword.Declaration),
|
2828
|
-
(r'(bool|double|Dynamic|int|num|Object|String|void)', Keyword.Type),
|
2829
|
-
(r'(false|null|true)', Keyword.Constant),
|
2830
|
-
(r'
|
2831
|
-
(r"@'(\\\\|\\'|[^'])*'", String.Single), # raw string
|
2832
|
-
(r'"', String.Double, 'string_double'),
|
2833
|
-
(r"'", String.Single, 'string_single'),
|
3570
|
+
(r'\b(bool|double|Dynamic|int|num|Object|String|void)\b', Keyword.Type),
|
3571
|
+
(r'\b(false|null|true)\b', Keyword.Constant),
|
3572
|
+
(r'[~!%^&*+=|?:<>/-]|as', Operator),
|
2834
3573
|
(r'[a-zA-Z_$][a-zA-Z0-9_]*:', Name.Label),
|
2835
3574
|
(r'[a-zA-Z_$][a-zA-Z0-9_]*', Name),
|
2836
|
-
(r'[~!%^&*+=|?:<>/-]', Operator),
|
2837
3575
|
(r'[(){}\[\],.;]', Punctuation),
|
2838
3576
|
(r'0[xX][0-9a-fA-F]+', Number.Hex),
|
2839
3577
|
# DIGIT+ (‘.’ DIGIT*)? EXPONENT?
|
@@ -2845,20 +3583,463 @@ class DartLexer(RegexLexer):
|
|
2845
3583
|
'class': [
|
2846
3584
|
(r'[a-zA-Z_$][a-zA-Z0-9_]*', Name.Class, '#pop')
|
2847
3585
|
],
|
2848
|
-
'
|
2849
|
-
(
|
2850
|
-
(r'
|
3586
|
+
'import_decl': [
|
3587
|
+
include('string_literal'),
|
3588
|
+
(r'\s+', Text),
|
3589
|
+
(r'\b(as|show|hide)\b', Keyword),
|
3590
|
+
(r'[a-zA-Z_$][a-zA-Z0-9_]*', Name),
|
3591
|
+
(r'\,', Punctuation),
|
3592
|
+
(r'\;', Punctuation, '#pop')
|
3593
|
+
],
|
3594
|
+
'string_literal': [
|
3595
|
+
# Raw strings.
|
3596
|
+
(r'r"""([\s|\S]*?)"""', String.Double),
|
3597
|
+
(r"r'''([\s|\S]*?)'''", String.Single),
|
3598
|
+
(r'r"(.*?)"', String.Double),
|
3599
|
+
(r"r'(.*?)'", String.Single),
|
3600
|
+
# Normal Strings.
|
3601
|
+
(r'"""', String.Double, 'string_double_multiline'),
|
3602
|
+
(r"'''", String.Single, 'string_single_multiline'),
|
3603
|
+
(r'"', String.Double, 'string_double'),
|
3604
|
+
(r"'", String.Single, 'string_single')
|
3605
|
+
],
|
3606
|
+
'string_common': [
|
3607
|
+
(r"\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]*\}|[a-z\'\"$\\])",
|
3608
|
+
String.Escape),
|
2851
3609
|
(r'(\$)([a-zA-Z_][a-zA-Z0-9_]*)', bygroups(String.Interpol, Name)),
|
2852
3610
|
(r'(\$\{)(.*?)(\})',
|
2853
|
-
bygroups(String.Interpol, using(this), String.Interpol))
|
3611
|
+
bygroups(String.Interpol, using(this), String.Interpol))
|
3612
|
+
],
|
3613
|
+
'string_double': [
|
3614
|
+
(r'"', String.Double, '#pop'),
|
3615
|
+
(r'[^\"$\\\n]+', String.Double),
|
3616
|
+
include('string_common'),
|
2854
3617
|
(r'\$+', String.Double)
|
2855
3618
|
],
|
3619
|
+
'string_double_multiline': [
|
3620
|
+
(r'"""', String.Double, '#pop'),
|
3621
|
+
(r'[^\"$\\]+', String.Double),
|
3622
|
+
include('string_common'),
|
3623
|
+
(r'(\$|\")+', String.Double)
|
3624
|
+
],
|
2856
3625
|
'string_single': [
|
2857
3626
|
(r"'", String.Single, '#pop'),
|
2858
|
-
(r"[
|
2859
|
-
(
|
2860
|
-
(r'(\$\{)(.*?)(\})',
|
2861
|
-
bygroups(String.Interpol, using(this), String.Interpol)),
|
3627
|
+
(r"[^\'$\\\n]+", String.Single),
|
3628
|
+
include('string_common'),
|
2862
3629
|
(r'\$+', String.Single)
|
3630
|
+
],
|
3631
|
+
'string_single_multiline': [
|
3632
|
+
(r"'''", String.Single, '#pop'),
|
3633
|
+
(r'[^\'$\\]+', String.Single),
|
3634
|
+
include('string_common'),
|
3635
|
+
(r'(\$|\')+', String.Single)
|
3636
|
+
]
|
3637
|
+
}
|
3638
|
+
|
3639
|
+
|
3640
|
+
class TypeScriptLexer(RegexLexer):
|
3641
|
+
"""
|
3642
|
+
For `TypeScript <http://www.python.org>`_ source code.
|
3643
|
+
|
3644
|
+
*New in Pygments 1.6.*
|
3645
|
+
"""
|
3646
|
+
|
3647
|
+
name = 'TypeScript'
|
3648
|
+
aliases = ['ts']
|
3649
|
+
filenames = ['*.ts']
|
3650
|
+
mimetypes = ['text/x-typescript']
|
3651
|
+
|
3652
|
+
flags = re.DOTALL
|
3653
|
+
tokens = {
|
3654
|
+
'commentsandwhitespace': [
|
3655
|
+
(r'\s+', Text),
|
3656
|
+
(r'<!--', Comment),
|
3657
|
+
(r'//.*?\n', Comment.Single),
|
3658
|
+
(r'/\*.*?\*/', Comment.Multiline)
|
3659
|
+
],
|
3660
|
+
'slashstartsregex': [
|
3661
|
+
include('commentsandwhitespace'),
|
3662
|
+
(r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
|
3663
|
+
r'([gim]+\b|\B)', String.Regex, '#pop'),
|
3664
|
+
(r'(?=/)', Text, ('#pop', 'badregex')),
|
3665
|
+
(r'', Text, '#pop')
|
3666
|
+
],
|
3667
|
+
'badregex': [
|
3668
|
+
(r'\n', Text, '#pop')
|
3669
|
+
],
|
3670
|
+
'root': [
|
3671
|
+
(r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
|
3672
|
+
include('commentsandwhitespace'),
|
3673
|
+
(r'\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|'
|
3674
|
+
r'(<<|>>>?|==?|!=?|[-<>+*%&\|\^/])=?', Operator, 'slashstartsregex'),
|
3675
|
+
(r'[{(\[;,]', Punctuation, 'slashstartsregex'),
|
3676
|
+
(r'[})\].]', Punctuation),
|
3677
|
+
(r'(for|in|while|do|break|return|continue|switch|case|default|if|else|'
|
3678
|
+
r'throw|try|catch|finally|new|delete|typeof|instanceof|void|'
|
3679
|
+
r'this)\b', Keyword, 'slashstartsregex'),
|
3680
|
+
(r'(var|let|with|function)\b', Keyword.Declaration, 'slashstartsregex'),
|
3681
|
+
(r'(abstract|boolean|byte|char|class|const|debugger|double|enum|export|'
|
3682
|
+
r'extends|final|float|goto|implements|import|int|interface|long|native|'
|
3683
|
+
r'package|private|protected|public|short|static|super|synchronized|throws|'
|
3684
|
+
r'transient|volatile)\b', Keyword.Reserved),
|
3685
|
+
(r'(true|false|null|NaN|Infinity|undefined)\b', Keyword.Constant),
|
3686
|
+
(r'(Array|Boolean|Date|Error|Function|Math|netscape|'
|
3687
|
+
r'Number|Object|Packages|RegExp|String|sun|decodeURI|'
|
3688
|
+
r'decodeURIComponent|encodeURI|encodeURIComponent|'
|
3689
|
+
r'Error|eval|isFinite|isNaN|parseFloat|parseInt|document|this|'
|
3690
|
+
r'window)\b', Name.Builtin),
|
3691
|
+
# Match stuff like: module name {...}
|
3692
|
+
(r'\b(module)(\s*)(\s*[a-zA-Z0-9_?.$][\w?.$]*)(\s*)',
|
3693
|
+
bygroups(Keyword.Reserved, Text, Name.Other, Text), 'slashstartsregex'),
|
3694
|
+
# Match variable type keywords
|
3695
|
+
(r'\b(string|bool|number)\b', Keyword.Type),
|
3696
|
+
# Match stuff like: constructor
|
3697
|
+
(r'\b(constructor|declare|interface|as|AS)\b', Keyword.Reserved),
|
3698
|
+
# Match stuff like: super(argument, list)
|
3699
|
+
(r'(super)(\s*)(\([a-zA-Z0-9,_?.$\s]+\s*\))',
|
3700
|
+
bygroups(Keyword.Reserved, Text), 'slashstartsregex'),
|
3701
|
+
# Match stuff like: function() {...}
|
3702
|
+
(r'([a-zA-Z_?.$][\w?.$]*)\(\) \{', Name.Other, 'slashstartsregex'),
|
3703
|
+
# Match stuff like: (function: return type)
|
3704
|
+
(r'([a-zA-Z0-9_?.$][\w?.$]*)(\s*:\s*)([a-zA-Z0-9_?.$][\w?.$]*)',
|
3705
|
+
bygroups(Name.Other, Text, Keyword.Type)),
|
3706
|
+
(r'[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other),
|
3707
|
+
(r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
|
3708
|
+
(r'0x[0-9a-fA-F]+', Number.Hex),
|
3709
|
+
(r'[0-9]+', Number.Integer),
|
3710
|
+
(r'"(\\\\|\\"|[^"])*"', String.Double),
|
3711
|
+
(r"'(\\\\|\\'|[^'])*'", String.Single),
|
3712
|
+
]
|
3713
|
+
}
|
3714
|
+
|
3715
|
+
|
3716
|
+
class LassoLexer(RegexLexer):
|
3717
|
+
"""
|
3718
|
+
For `Lasso <http://www.lassosoft.com/>`_ source code, covering both Lasso 9
|
3719
|
+
syntax and LassoScript for Lasso 8.6 and earlier. For Lasso embedded in
|
3720
|
+
HTML, use the `LassoHtmlLexer`.
|
3721
|
+
|
3722
|
+
Additional options accepted:
|
3723
|
+
|
3724
|
+
`builtinshighlighting`
|
3725
|
+
If given and ``True``, highlight builtin types, traits, methods, and
|
3726
|
+
members (default: ``True``).
|
3727
|
+
`requiredelimiters`
|
3728
|
+
If given and ``True``, only highlight code between delimiters as Lasso
|
3729
|
+
(default: ``False``).
|
3730
|
+
|
3731
|
+
*New in Pygments 1.6.*
|
3732
|
+
"""
|
3733
|
+
|
3734
|
+
name = 'Lasso'
|
3735
|
+
aliases = ['lasso', 'lassoscript']
|
3736
|
+
filenames = ['*.lasso', '*.lasso[89]']
|
3737
|
+
alias_filenames = ['*.incl', '*.inc', '*.las']
|
3738
|
+
mimetypes = ['text/x-lasso']
|
3739
|
+
flags = re.IGNORECASE | re.DOTALL | re.MULTILINE
|
3740
|
+
|
3741
|
+
tokens = {
|
3742
|
+
'root': [
|
3743
|
+
(r'^#!.+lasso9\b', Comment.Preproc, 'lasso'),
|
3744
|
+
(r'\[no_square_brackets\]', Comment.Preproc, 'nosquarebrackets'),
|
3745
|
+
(r'\[noprocess\]', Comment.Preproc, ('delimiters', 'noprocess')),
|
3746
|
+
(r'\[', Comment.Preproc, ('delimiters', 'squarebrackets')),
|
3747
|
+
(r'<\?(LassoScript|lasso|=)', Comment.Preproc,
|
3748
|
+
('delimiters', 'anglebrackets')),
|
3749
|
+
(r'<', Other, 'delimiters'),
|
3750
|
+
(r'\s+', Other),
|
3751
|
+
(r'', Other, ('delimiters', 'lassofile')),
|
3752
|
+
],
|
3753
|
+
'delimiters': [
|
3754
|
+
(r'\[no_square_brackets\]', Comment.Preproc, 'nosquarebrackets'),
|
3755
|
+
(r'\[noprocess\]', Comment.Preproc, 'noprocess'),
|
3756
|
+
(r'\[', Comment.Preproc, 'squarebrackets'),
|
3757
|
+
(r'<\?(LassoScript|lasso|=)', Comment.Preproc, 'anglebrackets'),
|
3758
|
+
(r'<', Other),
|
3759
|
+
(r'[^[<]+', Other),
|
3760
|
+
],
|
3761
|
+
'nosquarebrackets': [
|
3762
|
+
(r'<\?(LassoScript|lasso|=)', Comment.Preproc, 'anglebrackets'),
|
3763
|
+
(r'<', Other),
|
3764
|
+
(r'[^<]+', Other),
|
3765
|
+
],
|
3766
|
+
'noprocess': [
|
3767
|
+
(r'\[/noprocess\]', Comment.Preproc, '#pop'),
|
3768
|
+
(r'\[', Other),
|
3769
|
+
(r'[^[]', Other),
|
3770
|
+
],
|
3771
|
+
'squarebrackets': [
|
3772
|
+
(r'\]', Comment.Preproc, '#pop'),
|
3773
|
+
include('lasso'),
|
3774
|
+
],
|
3775
|
+
'anglebrackets': [
|
3776
|
+
(r'\?>', Comment.Preproc, '#pop'),
|
3777
|
+
include('lasso'),
|
3778
|
+
],
|
3779
|
+
'lassofile': [
|
3780
|
+
(r'\]', Comment.Preproc, '#pop'),
|
3781
|
+
(r'\?>', Comment.Preproc, '#pop'),
|
3782
|
+
include('lasso'),
|
3783
|
+
],
|
3784
|
+
'whitespacecomments': [
|
3785
|
+
(r'\s+', Text),
|
3786
|
+
(r'//.*?\n', Comment.Single),
|
3787
|
+
(r'/\*\*!.*?\*/', String.Doc),
|
3788
|
+
(r'/\*.*?\*/', Comment.Multiline),
|
3789
|
+
],
|
3790
|
+
'lasso': [
|
3791
|
+
# whitespace/comments
|
3792
|
+
include('whitespacecomments'),
|
3793
|
+
|
3794
|
+
# literals
|
3795
|
+
(r'\d*\.\d+(e[+-]?\d+)?', Number.Float),
|
3796
|
+
(r'0x[\da-f]+', Number.Hex),
|
3797
|
+
(r'\d+', Number.Integer),
|
3798
|
+
(r'([+-]?)(infinity|NaN)\b', bygroups(Operator, Number)),
|
3799
|
+
(r"'", String.Single, 'singlestring'),
|
3800
|
+
(r'"', String.Double, 'doublestring'),
|
3801
|
+
(r'`[^`]*`', String.Backtick),
|
3802
|
+
|
3803
|
+
# names
|
3804
|
+
(r'\$[a-z_][\w.]*', Name.Variable),
|
3805
|
+
(r'#([a-z_][\w.]*|\d+)', Name.Variable.Instance),
|
3806
|
+
(r"(\.)('[a-z_][\w.]*')",
|
3807
|
+
bygroups(Name.Builtin.Pseudo, Name.Variable.Class)),
|
3808
|
+
(r"(self)(\s*->\s*)('[a-z_][\w.]*')",
|
3809
|
+
bygroups(Name.Builtin.Pseudo, Operator, Name.Variable.Class)),
|
3810
|
+
(r'(\.\.?)([a-z_][\w.]*)',
|
3811
|
+
bygroups(Name.Builtin.Pseudo, Name.Other.Member)),
|
3812
|
+
(r'(->\\?\s*|&\s*)([a-z_][\w.]*)',
|
3813
|
+
bygroups(Operator, Name.Other.Member)),
|
3814
|
+
(r'(self|inherited|global|void)\b', Name.Builtin.Pseudo),
|
3815
|
+
(r'-[a-z_][\w.]*', Name.Attribute),
|
3816
|
+
(r'(::\s*)([a-z_][\w.]*)', bygroups(Punctuation, Name.Label)),
|
3817
|
+
(r'(error_(code|msg)_\w+|Error_AddError|Error_ColumnRestriction|'
|
3818
|
+
r'Error_DatabaseConnectionUnavailable|Error_DatabaseTimeout|'
|
3819
|
+
r'Error_DeleteError|Error_FieldRestriction|Error_FileNotFound|'
|
3820
|
+
r'Error_InvalidDatabase|Error_InvalidPassword|'
|
3821
|
+
r'Error_InvalidUsername|Error_ModuleNotFound|'
|
3822
|
+
r'Error_NoError|Error_NoPermission|Error_OutOfMemory|'
|
3823
|
+
r'Error_ReqColumnMissing|Error_ReqFieldMissing|'
|
3824
|
+
r'Error_RequiredColumnMissing|Error_RequiredFieldMissing|'
|
3825
|
+
r'Error_UpdateError)\b', Name.Exception),
|
3826
|
+
|
3827
|
+
# definitions
|
3828
|
+
(r'(define)(\s+)([a-z_][\w.]*)(\s*=>\s*)(type|trait|thread)\b',
|
3829
|
+
bygroups(Keyword.Declaration, Text, Name.Class, Operator, Keyword)),
|
3830
|
+
(r'(define)(\s+)([a-z_][\w.]*)(\s*->\s*)([a-z_][\w.]*=?|[-+*/%<>]|==)',
|
3831
|
+
bygroups(Keyword.Declaration, Text, Name.Class, Operator,
|
3832
|
+
Name.Function), 'signature'),
|
3833
|
+
(r'(define)(\s+)([a-z_][\w.]*)',
|
3834
|
+
bygroups(Keyword.Declaration, Text, Name.Function), 'signature'),
|
3835
|
+
(r'(public|protected|private|provide)(\s+)(([a-z_][\w.]*=?|'
|
3836
|
+
r'[-+*/%<>]|==)(?=\s*\())', bygroups(Keyword, Text, Name.Function),
|
3837
|
+
'signature'),
|
3838
|
+
(r'(public|protected|private)(\s+)([a-z_][\w.]*)',
|
3839
|
+
bygroups(Keyword, Text, Name.Function)),
|
3840
|
+
|
3841
|
+
# keywords
|
3842
|
+
(r'(true|false|none|minimal|full|all)\b', Keyword.Constant),
|
3843
|
+
(r'(local|var|variable|data(?=\s))\b', Keyword.Declaration),
|
3844
|
+
(r'(array|date|decimal|duration|integer|map|pair|string|tag|xml|'
|
3845
|
+
r'null|list|queue|set|stack|staticarray)\b', Keyword.Type),
|
3846
|
+
(r'([a-z_][\w.]*)(\s+)(in)\b', bygroups(Name, Text, Keyword)),
|
3847
|
+
(r'(let|into)(\s+)([a-z_][\w.]*)', bygroups(Keyword, Text, Name)),
|
3848
|
+
(r'require\b', Keyword, 'requiresection'),
|
3849
|
+
(r'(/?)(Namespace_Using)\b', bygroups(Punctuation, Keyword.Namespace)),
|
3850
|
+
(r'(/?)(Cache|Database_Names|Database_SchemaNames|'
|
3851
|
+
r'Database_TableNames|Define_Tag|Define_Type|Email_Batch|'
|
3852
|
+
r'Encode_Set|HTML_Comment|Handle|Handle_Error|Header|If|Inline|'
|
3853
|
+
r'Iterate|LJAX_Target|Link|Link_CurrentAction|Link_CurrentGroup|'
|
3854
|
+
r'Link_CurrentRecord|Link_Detail|Link_FirstGroup|'
|
3855
|
+
r'Link_FirstRecord|Link_LastGroup|Link_LastRecord|Link_NextGroup|'
|
3856
|
+
r'Link_NextRecord|Link_PrevGroup|Link_PrevRecord|Log|Loop|'
|
3857
|
+
r'NoProcess|Output_None|Portal|Private|Protect|Records|Referer|'
|
3858
|
+
r'Referrer|Repeating|ResultSet|Rows|Search_Args|Search_Arguments|'
|
3859
|
+
r'Select|Sort_Args|Sort_Arguments|Thread_Atomic|Value_List|While|'
|
3860
|
+
r'Abort|Case|Else|If_Empty|If_False|If_Null|If_True|Loop_Abort|'
|
3861
|
+
r'Loop_Continue|Loop_Count|Params|Params_Up|Return|Return_Value|'
|
3862
|
+
r'Run_Children|SOAP_DefineTag|SOAP_LastRequest|SOAP_LastResponse|'
|
3863
|
+
r'Tag_Name|ascending|average|by|define|descending|do|equals|'
|
3864
|
+
r'frozen|group|handle_failure|import|in|into|join|let|match|max|'
|
3865
|
+
r'min|on|order|parent|protected|provide|public|require|skip|'
|
3866
|
+
r'split_thread|sum|take|thread|to|trait|type|where|with|yield)\b',
|
3867
|
+
bygroups(Punctuation, Keyword)),
|
3868
|
+
|
3869
|
+
# other
|
3870
|
+
(r',', Punctuation, 'commamember'),
|
3871
|
+
(r'(and|or|not)\b', Operator.Word),
|
3872
|
+
(r'([a-z_][\w.]*)(\s*::\s*)?([a-z_][\w.]*)?(\s*=(?!=))',
|
3873
|
+
bygroups(Name, Punctuation, Name.Label, Operator)),
|
3874
|
+
(r'(/?)([\w.]+)', bygroups(Punctuation, Name.Other)),
|
3875
|
+
(r'(=)(bw|ew|cn|lte?|gte?|n?eq|ft|n?rx)\b',
|
3876
|
+
bygroups(Operator, Operator.Word)),
|
3877
|
+
(r':=|[-+*/%=<>&|!?\\]+', Operator),
|
3878
|
+
(r'[{}():;,@^]', Punctuation),
|
3879
|
+
],
|
3880
|
+
'singlestring': [
|
3881
|
+
(r"'", String.Single, '#pop'),
|
3882
|
+
(r"[^'\\]+", String.Single),
|
3883
|
+
include('escape'),
|
3884
|
+
(r"\\+", String.Single),
|
3885
|
+
],
|
3886
|
+
'doublestring': [
|
3887
|
+
(r'"', String.Double, '#pop'),
|
3888
|
+
(r'[^"\\]+', String.Double),
|
3889
|
+
include('escape'),
|
3890
|
+
(r'\\+', String.Double),
|
3891
|
+
],
|
3892
|
+
'escape': [
|
3893
|
+
(r'\\(U[\da-f]{8}|u[\da-f]{4}|x[\da-f]{1,2}|[0-7]{1,3}|:[^:]+:|'
|
3894
|
+
r'[abefnrtv?\"\'\\]|$)', String.Escape),
|
3895
|
+
],
|
3896
|
+
'signature': [
|
3897
|
+
(r'=>', Operator, '#pop'),
|
3898
|
+
(r'\)', Punctuation, '#pop'),
|
3899
|
+
(r'[(,]', Punctuation, 'parameter'),
|
3900
|
+
include('lasso'),
|
3901
|
+
],
|
3902
|
+
'parameter': [
|
3903
|
+
(r'\)', Punctuation, '#pop'),
|
3904
|
+
(r'-?[a-z_][\w.]*', Name.Attribute, '#pop'),
|
3905
|
+
(r'\.\.\.', Name.Builtin.Pseudo),
|
3906
|
+
include('lasso'),
|
3907
|
+
],
|
3908
|
+
'requiresection': [
|
3909
|
+
(r'(([a-z_][\w.]*=?|[-+*/%<>]|==)(?=\s*\())', Name, 'requiresignature'),
|
3910
|
+
(r'(([a-z_][\w.]*=?|[-+*/%<>]|==)(?=(\s*::\s*[\w.]+)?\s*,))', Name),
|
3911
|
+
(r'[a-z_][\w.]*=?|[-+*/%<>]|==', Name, '#pop'),
|
3912
|
+
(r'(::\s*)([a-z_][\w.]*)', bygroups(Punctuation, Name.Label)),
|
3913
|
+
(r',', Punctuation),
|
3914
|
+
include('whitespacecomments'),
|
3915
|
+
],
|
3916
|
+
'requiresignature': [
|
3917
|
+
(r'(\)(?=(\s*::\s*[\w.]+)?\s*,))', Punctuation, '#pop'),
|
3918
|
+
(r'\)', Punctuation, '#pop:2'),
|
3919
|
+
(r'-?[a-z_][\w.]*', Name.Attribute),
|
3920
|
+
(r'(::\s*)([a-z_][\w.]*)', bygroups(Punctuation, Name.Label)),
|
3921
|
+
(r'\.\.\.', Name.Builtin.Pseudo),
|
3922
|
+
(r'[(,]', Punctuation),
|
3923
|
+
include('whitespacecomments'),
|
3924
|
+
],
|
3925
|
+
'commamember': [
|
3926
|
+
(r'(([a-z_][\w.]*=?|[-+*/%<>]|==)'
|
3927
|
+
r'(?=\s*(\(([^()]*\([^()]*\))*[^)]*\)\s*)?(::[\w.\s]+)?=>))',
|
3928
|
+
Name.Function, 'signature'),
|
3929
|
+
include('whitespacecomments'),
|
3930
|
+
(r'', Text, '#pop'),
|
3931
|
+
],
|
3932
|
+
}
|
3933
|
+
|
3934
|
+
def __init__(self, **options):
|
3935
|
+
self.builtinshighlighting = get_bool_opt(
|
3936
|
+
options, 'builtinshighlighting', True)
|
3937
|
+
self.requiredelimiters = get_bool_opt(
|
3938
|
+
options, 'requiredelimiters', False)
|
3939
|
+
|
3940
|
+
self._builtins = set()
|
3941
|
+
self._members = set()
|
3942
|
+
if self.builtinshighlighting:
|
3943
|
+
from pygments.lexers._lassobuiltins import BUILTINS, MEMBERS
|
3944
|
+
for key, value in BUILTINS.iteritems():
|
3945
|
+
self._builtins.update(value)
|
3946
|
+
for key, value in MEMBERS.iteritems():
|
3947
|
+
self._members.update(value)
|
3948
|
+
RegexLexer.__init__(self, **options)
|
3949
|
+
|
3950
|
+
def get_tokens_unprocessed(self, text):
|
3951
|
+
stack = ['root']
|
3952
|
+
if self.requiredelimiters:
|
3953
|
+
stack.append('delimiters')
|
3954
|
+
for index, token, value in \
|
3955
|
+
RegexLexer.get_tokens_unprocessed(self, text, stack):
|
3956
|
+
if (token is Name.Other and value.lower() in self._builtins or
|
3957
|
+
token is Name.Other.Member and value.lower() in self._members):
|
3958
|
+
yield index, Name.Builtin, value
|
3959
|
+
continue
|
3960
|
+
yield index, token, value
|
3961
|
+
|
3962
|
+
def analyse_text(text):
|
3963
|
+
rv = 0.0
|
3964
|
+
if 'bin/lasso9' in text:
|
3965
|
+
rv += 0.8
|
3966
|
+
if re.search(r'<\?(=|lasso)|\A\[', text, re.I):
|
3967
|
+
rv += 0.4
|
3968
|
+
if re.search(r'local\(', text, re.I):
|
3969
|
+
rv += 0.4
|
3970
|
+
if '?>' in text:
|
3971
|
+
rv += 0.1
|
3972
|
+
return rv
|
3973
|
+
|
3974
|
+
|
3975
|
+
class QmlLexer(RegexLexer):
|
3976
|
+
"""
|
3977
|
+
For QML files. See http://doc.qt.digia.com/4.7/qdeclarativeintroduction.html.
|
3978
|
+
|
3979
|
+
*New in Pygments 1.6.*
|
3980
|
+
"""
|
3981
|
+
|
3982
|
+
# QML is based on javascript, so much of this is taken from the
|
3983
|
+
# JavascriptLexer above.
|
3984
|
+
|
3985
|
+
name = 'QML'
|
3986
|
+
aliases = ['qml', 'Qt Meta Language', 'Qt modeling Language']
|
3987
|
+
filenames = ['*.qml',]
|
3988
|
+
mimetypes = [ 'application/x-qml',]
|
3989
|
+
|
3990
|
+
|
3991
|
+
# pasted from JavascriptLexer, with some additions
|
3992
|
+
flags = re.DOTALL
|
3993
|
+
tokens = {
|
3994
|
+
'commentsandwhitespace': [
|
3995
|
+
(r'\s+', Text),
|
3996
|
+
(r'<!--', Comment),
|
3997
|
+
(r'//.*?\n', Comment.Single),
|
3998
|
+
(r'/\*.*?\*/', Comment.Multiline)
|
3999
|
+
],
|
4000
|
+
'slashstartsregex': [
|
4001
|
+
include('commentsandwhitespace'),
|
4002
|
+
(r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
|
4003
|
+
r'([gim]+\b|\B)', String.Regex, '#pop'),
|
4004
|
+
(r'(?=/)', Text, ('#pop', 'badregex')),
|
4005
|
+
(r'', Text, '#pop')
|
4006
|
+
],
|
4007
|
+
'badregex': [
|
4008
|
+
(r'\n', Text, '#pop')
|
4009
|
+
],
|
4010
|
+
'root' : [
|
4011
|
+
(r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
|
4012
|
+
include('commentsandwhitespace'),
|
4013
|
+
(r'\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|'
|
4014
|
+
r'(<<|>>>?|==?|!=?|[-<>+*%&\|\^/])=?', Operator, 'slashstartsregex'),
|
4015
|
+
(r'[{(\[;,]', Punctuation, 'slashstartsregex'),
|
4016
|
+
(r'[})\].]', Punctuation),
|
4017
|
+
|
4018
|
+
# QML insertions
|
4019
|
+
(r'\bid\s*:\s*[A-Za-z][_A-Za-z.0-9]*',Keyword.Declaration,
|
4020
|
+
'slashstartsregex'),
|
4021
|
+
(r'\b[A-Za-z][_A-Za-z.0-9]*\s*:',Keyword, 'slashstartsregex'),
|
4022
|
+
|
4023
|
+
# the rest from JavascriptLexer
|
4024
|
+
(r'(for|in|while|do|break|return|continue|switch|case|default|if|else|'
|
4025
|
+
r'throw|try|catch|finally|new|delete|typeof|instanceof|void|'
|
4026
|
+
r'this)\b', Keyword, 'slashstartsregex'),
|
4027
|
+
(r'(var|let|with|function)\b', Keyword.Declaration, 'slashstartsregex'),
|
4028
|
+
(r'(abstract|boolean|byte|char|class|const|debugger|double|enum|export|'
|
4029
|
+
r'extends|final|float|goto|implements|import|int|interface|long|native|'
|
4030
|
+
r'package|private|protected|public|short|static|super|synchronized|throws|'
|
4031
|
+
r'transient|volatile)\b', Keyword.Reserved),
|
4032
|
+
(r'(true|false|null|NaN|Infinity|undefined)\b', Keyword.Constant),
|
4033
|
+
(r'(Array|Boolean|Date|Error|Function|Math|netscape|'
|
4034
|
+
r'Number|Object|Packages|RegExp|String|sun|decodeURI|'
|
4035
|
+
r'decodeURIComponent|encodeURI|encodeURIComponent|'
|
4036
|
+
r'Error|eval|isFinite|isNaN|parseFloat|parseInt|document|this|'
|
4037
|
+
r'window)\b', Name.Builtin),
|
4038
|
+
(r'[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other),
|
4039
|
+
(r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
|
4040
|
+
(r'0x[0-9a-fA-F]+', Number.Hex),
|
4041
|
+
(r'[0-9]+', Number.Integer),
|
4042
|
+
(r'"(\\\\|\\"|[^"])*"', String.Double),
|
4043
|
+
(r"'(\\\\|\\'|[^'])*'", String.Single),
|
2863
4044
|
]
|
2864
4045
|
}
|