pygments.rb 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +1 -1
- data/CHANGELOG.adoc +5 -0
- data/bench.rb +2 -2
- data/lib/pygments/lexer.rb +1 -1
- data/lib/pygments/mentos.py +6 -4
- data/lib/pygments/popen.rb +14 -7
- data/lib/pygments/version.rb +1 -1
- data/lib/pygments.rb +8 -2
- data/pygments.rb.gemspec +4 -4
- data/test/test_pygments.rb +13 -7
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/AUTHORS +8 -1
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/INSTALLER +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/LICENSE +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/METADATA +1 -1
- data/vendor/pygments-main/Pygments-2.10.0.dist-info/RECORD +524 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/REQUESTED +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/WHEEL +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/entry_points.txt +0 -0
- data/vendor/pygments-main/{Pygments-2.8.1.dist-info → Pygments-2.10.0.dist-info}/top_level.txt +0 -0
- data/vendor/pygments-main/bin/pygmentize +1 -1
- data/vendor/pygments-main/pygments/__init__.py +1 -1
- data/vendor/pygments-main/pygments/formatters/_mapping.py +1 -0
- data/vendor/pygments-main/pygments/formatters/html.py +20 -7
- data/vendor/pygments-main/pygments/formatters/pangomarkup.py +83 -0
- data/vendor/pygments-main/pygments/lexers/_csound_builtins.py +55 -14
- data/vendor/pygments-main/pygments/lexers/_julia_builtins.py +401 -0
- data/vendor/pygments-main/pygments/lexers/_mapping.py +68 -52
- data/vendor/pygments-main/pygments/lexers/actionscript.py +2 -2
- data/vendor/pygments-main/pygments/lexers/ambient.py +1 -1
- data/vendor/pygments-main/pygments/lexers/amdgpu.py +9 -4
- data/vendor/pygments-main/pygments/lexers/apdlexer.py +448 -0
- data/vendor/pygments-main/pygments/lexers/apl.py +6 -3
- data/vendor/pygments-main/pygments/lexers/asc.py +51 -0
- data/vendor/pygments-main/pygments/lexers/asm.py +86 -58
- data/vendor/pygments-main/pygments/lexers/automation.py +1 -1
- data/vendor/pygments-main/pygments/lexers/bibtex.py +2 -2
- data/vendor/pygments-main/pygments/lexers/c_cpp.py +60 -33
- data/vendor/pygments-main/pygments/lexers/c_like.py +102 -3
- data/vendor/pygments-main/pygments/lexers/cddl.py +2 -2
- data/vendor/pygments-main/pygments/lexers/chapel.py +53 -29
- data/vendor/pygments-main/pygments/lexers/clean.py +6 -6
- data/vendor/pygments-main/pygments/lexers/configs.py +133 -43
- data/vendor/pygments-main/pygments/lexers/csound.py +2 -2
- data/vendor/pygments-main/pygments/lexers/devicetree.py +1 -1
- data/vendor/pygments-main/pygments/lexers/dotnet.py +1 -1
- data/vendor/pygments-main/pygments/lexers/erlang.py +1 -1
- data/vendor/pygments-main/pygments/lexers/floscript.py +1 -1
- data/vendor/pygments-main/pygments/lexers/futhark.py +5 -4
- data/vendor/pygments-main/pygments/lexers/gcodelexer.py +36 -0
- data/vendor/pygments-main/pygments/lexers/go.py +1 -1
- data/vendor/pygments-main/pygments/lexers/graphics.py +1 -1
- data/vendor/pygments-main/pygments/lexers/graphviz.py +5 -4
- data/vendor/pygments-main/pygments/lexers/gsql.py +92 -0
- data/vendor/pygments-main/pygments/lexers/haskell.py +4 -4
- data/vendor/pygments-main/pygments/lexers/haxe.py +1 -1
- data/vendor/pygments-main/pygments/lexers/installers.py +2 -2
- data/vendor/pygments-main/pygments/lexers/javascript.py +145 -127
- data/vendor/pygments-main/pygments/lexers/jslt.py +94 -0
- data/vendor/pygments-main/pygments/lexers/julia.py +135 -183
- data/vendor/pygments-main/pygments/lexers/jvm.py +262 -202
- data/vendor/pygments-main/pygments/lexers/kuin.py +299 -0
- data/vendor/pygments-main/pygments/lexers/lisp.py +18 -15
- data/vendor/pygments-main/pygments/lexers/markup.py +3 -3
- data/vendor/pygments-main/pygments/lexers/matlab.py +23 -10
- data/vendor/pygments-main/pygments/lexers/meson.py +155 -0
- data/vendor/pygments-main/pygments/lexers/mime.py +6 -21
- data/vendor/pygments-main/pygments/lexers/ml.py +1 -1
- data/vendor/pygments-main/pygments/lexers/nimrod.py +1 -1
- data/vendor/pygments-main/pygments/lexers/objective.py +3 -3
- data/vendor/pygments-main/pygments/lexers/parsers.py +1 -1
- data/vendor/pygments-main/pygments/lexers/procfile.py +43 -0
- data/vendor/pygments-main/pygments/lexers/promql.py +1 -1
- data/vendor/pygments-main/pygments/lexers/python.py +19 -5
- data/vendor/pygments-main/pygments/lexers/resource.py +1 -1
- data/vendor/pygments-main/pygments/lexers/rnc.py +1 -1
- data/vendor/pygments-main/pygments/lexers/ruby.py +1 -1
- data/vendor/pygments-main/pygments/lexers/rust.py +9 -10
- data/vendor/pygments-main/pygments/lexers/scripting.py +7 -7
- data/vendor/pygments-main/pygments/lexers/shell.py +11 -8
- data/vendor/pygments-main/pygments/lexers/smithy.py +79 -0
- data/vendor/pygments-main/pygments/lexers/smv.py +1 -1
- data/vendor/pygments-main/pygments/lexers/special.py +15 -2
- data/vendor/pygments-main/pygments/lexers/supercollider.py +1 -1
- data/vendor/pygments-main/pygments/lexers/tcl.py +3 -3
- data/vendor/pygments-main/pygments/lexers/teal.py +88 -0
- data/vendor/pygments-main/pygments/lexers/templates.py +19 -19
- data/vendor/pygments-main/pygments/lexers/teraterm.py +1 -1
- data/vendor/pygments-main/pygments/lexers/testing.py +1 -1
- data/vendor/pygments-main/pygments/lexers/theorem.py +4 -2
- data/vendor/pygments-main/pygments/lexers/thingsdb.py +118 -0
- data/vendor/pygments-main/pygments/lexers/tnt.py +25 -15
- data/vendor/pygments-main/pygments/lexers/trafficscript.py +1 -1
- data/vendor/pygments-main/pygments/lexers/webassembly.py +120 -0
- data/vendor/pygments-main/pygments/regexopt.py +1 -1
- data/vendor/pygments-main/pygments/style.py +1 -1
- data/vendor/pygments-main/pygments/styles/__init__.py +2 -0
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -0
- data/vendor/pygments-main/pygments/styles/gruvbox.py +107 -0
- data/vendor/pygments-main/pygments/styles/native.py +1 -0
- metadata +29 -14
- data/vendor/pygments-main/Pygments-2.8.1.dist-info/RECORD +0 -494
|
@@ -267,11 +267,11 @@ class VelocityLexer(RegexLexer):
|
|
|
267
267
|
|
|
268
268
|
def analyse_text(text):
|
|
269
269
|
rv = 0.0
|
|
270
|
-
if re.search(r'#\{?macro\}?\(.*?\).*?#\{?end\}?', text):
|
|
270
|
+
if re.search(r'#\{?macro\}?\(.*?\).*?#\{?end\}?', text, re.DOTALL):
|
|
271
271
|
rv += 0.25
|
|
272
|
-
if re.search(r'#\{?if\}?\(.+?\).*?#\{?end\}?', text):
|
|
272
|
+
if re.search(r'#\{?if\}?\(.+?\).*?#\{?end\}?', text, re.DOTALL):
|
|
273
273
|
rv += 0.15
|
|
274
|
-
if re.search(r'#\{?foreach\}?\(.+?\).*?#\{?end\}?', text):
|
|
274
|
+
if re.search(r'#\{?foreach\}?\(.+?\).*?#\{?end\}?', text, re.DOTALL):
|
|
275
275
|
rv += 0.15
|
|
276
276
|
if re.search(r'\$!?\{?[a-zA-Z_]\w*(\([^)]*\))?'
|
|
277
277
|
r'(\.\w+(\([^)]*\))?)*\}?', text):
|
|
@@ -489,7 +489,7 @@ class MyghtyJavascriptLexer(DelegatingLexer):
|
|
|
489
489
|
"""
|
|
490
490
|
|
|
491
491
|
name = 'JavaScript+Myghty'
|
|
492
|
-
aliases = ['
|
|
492
|
+
aliases = ['javascript+myghty', 'js+myghty']
|
|
493
493
|
mimetypes = ['application/x-javascript+myghty',
|
|
494
494
|
'text/x-javascript+myghty',
|
|
495
495
|
'text/javascript+mygthy']
|
|
@@ -588,12 +588,12 @@ class MakoLexer(RegexLexer):
|
|
|
588
588
|
tokens = {
|
|
589
589
|
'root': [
|
|
590
590
|
(r'(\s*)(%)(\s*end(?:\w+))(\n|\Z)',
|
|
591
|
-
bygroups(Text, Comment.Preproc, Keyword, Other)),
|
|
591
|
+
bygroups(Text.Whitespace, Comment.Preproc, Keyword, Other)),
|
|
592
592
|
(r'(\s*)(%)([^\n]*)(\n|\Z)',
|
|
593
|
-
bygroups(Text, Comment.Preproc, using(PythonLexer), Other)),
|
|
593
|
+
bygroups(Text.Whitespace, Comment.Preproc, using(PythonLexer), Other)),
|
|
594
594
|
(r'(\s*)(##[^\n]*)(\n|\Z)',
|
|
595
|
-
bygroups(Text, Comment.
|
|
596
|
-
(r'(?s)<%doc>.*?</%doc>', Comment.
|
|
595
|
+
bygroups(Text.Whitespace, Comment.Single, Text.Whitespace)),
|
|
596
|
+
(r'(?s)<%doc>.*?</%doc>', Comment.Multiline),
|
|
597
597
|
(r'(<%)([\w.:]+)',
|
|
598
598
|
bygroups(Comment.Preproc, Name.Builtin), 'tag'),
|
|
599
599
|
(r'(</%)([\w.:]+)(>)',
|
|
@@ -679,7 +679,7 @@ class MakoJavascriptLexer(DelegatingLexer):
|
|
|
679
679
|
"""
|
|
680
680
|
|
|
681
681
|
name = 'JavaScript+Mako'
|
|
682
|
-
aliases = ['
|
|
682
|
+
aliases = ['javascript+mako', 'js+mako']
|
|
683
683
|
mimetypes = ['application/x-javascript+mako',
|
|
684
684
|
'text/x-javascript+mako',
|
|
685
685
|
'text/javascript+mako']
|
|
@@ -798,8 +798,8 @@ class CheetahJavascriptLexer(DelegatingLexer):
|
|
|
798
798
|
"""
|
|
799
799
|
|
|
800
800
|
name = 'JavaScript+Cheetah'
|
|
801
|
-
aliases = ['
|
|
802
|
-
'
|
|
801
|
+
aliases = ['javascript+cheetah', 'js+cheetah',
|
|
802
|
+
'javascript+spitfire', 'js+spitfire']
|
|
803
803
|
mimetypes = ['application/x-javascript+cheetah',
|
|
804
804
|
'text/x-javascript+cheetah',
|
|
805
805
|
'text/javascript+cheetah',
|
|
@@ -1026,7 +1026,7 @@ class XmlErbLexer(DelegatingLexer):
|
|
|
1026
1026
|
"""
|
|
1027
1027
|
|
|
1028
1028
|
name = 'XML+Ruby'
|
|
1029
|
-
aliases = ['xml+
|
|
1029
|
+
aliases = ['xml+ruby', 'xml+erb']
|
|
1030
1030
|
alias_filenames = ['*.xml']
|
|
1031
1031
|
mimetypes = ['application/xml+ruby']
|
|
1032
1032
|
|
|
@@ -1046,7 +1046,7 @@ class CssErbLexer(DelegatingLexer):
|
|
|
1046
1046
|
"""
|
|
1047
1047
|
|
|
1048
1048
|
name = 'CSS+Ruby'
|
|
1049
|
-
aliases = ['css+
|
|
1049
|
+
aliases = ['css+ruby', 'css+erb']
|
|
1050
1050
|
alias_filenames = ['*.css']
|
|
1051
1051
|
mimetypes = ['text/css+ruby']
|
|
1052
1052
|
|
|
@@ -1064,7 +1064,7 @@ class JavascriptErbLexer(DelegatingLexer):
|
|
|
1064
1064
|
"""
|
|
1065
1065
|
|
|
1066
1066
|
name = 'JavaScript+Ruby'
|
|
1067
|
-
aliases = ['
|
|
1067
|
+
aliases = ['javascript+ruby', 'js+ruby', 'javascript+erb', 'js+erb']
|
|
1068
1068
|
alias_filenames = ['*.js']
|
|
1069
1069
|
mimetypes = ['application/x-javascript+ruby',
|
|
1070
1070
|
'text/x-javascript+ruby',
|
|
@@ -1147,7 +1147,7 @@ class JavascriptPhpLexer(DelegatingLexer):
|
|
|
1147
1147
|
"""
|
|
1148
1148
|
|
|
1149
1149
|
name = 'JavaScript+PHP'
|
|
1150
|
-
aliases = ['
|
|
1150
|
+
aliases = ['javascript+php', 'js+php']
|
|
1151
1151
|
alias_filenames = ['*.js']
|
|
1152
1152
|
mimetypes = ['application/x-javascript+php',
|
|
1153
1153
|
'text/x-javascript+php',
|
|
@@ -1229,7 +1229,7 @@ class JavascriptSmartyLexer(DelegatingLexer):
|
|
|
1229
1229
|
"""
|
|
1230
1230
|
|
|
1231
1231
|
name = 'JavaScript+Smarty'
|
|
1232
|
-
aliases = ['
|
|
1232
|
+
aliases = ['javascript+smarty', 'js+smarty']
|
|
1233
1233
|
alias_filenames = ['*.js', '*.tpl']
|
|
1234
1234
|
mimetypes = ['application/x-javascript+smarty',
|
|
1235
1235
|
'text/x-javascript+smarty',
|
|
@@ -1311,8 +1311,8 @@ class JavascriptDjangoLexer(DelegatingLexer):
|
|
|
1311
1311
|
"""
|
|
1312
1312
|
|
|
1313
1313
|
name = 'JavaScript+Django/Jinja'
|
|
1314
|
-
aliases = ['
|
|
1315
|
-
'
|
|
1314
|
+
aliases = ['javascript+django', 'js+django',
|
|
1315
|
+
'javascript+jinja', 'js+jinja']
|
|
1316
1316
|
alias_filenames = ['*.js']
|
|
1317
1317
|
mimetypes = ['application/x-javascript+django',
|
|
1318
1318
|
'application/x-javascript+jinja',
|
|
@@ -1750,7 +1750,7 @@ class LassoJavascriptLexer(DelegatingLexer):
|
|
|
1750
1750
|
"""
|
|
1751
1751
|
|
|
1752
1752
|
name = 'JavaScript+Lasso'
|
|
1753
|
-
aliases = ['
|
|
1753
|
+
aliases = ['javascript+lasso', 'js+lasso']
|
|
1754
1754
|
alias_filenames = ['*.js']
|
|
1755
1755
|
mimetypes = ['application/x-javascript+lasso',
|
|
1756
1756
|
'text/x-javascript+lasso',
|
|
@@ -24,7 +24,7 @@ class TeraTermLexer(RegexLexer):
|
|
|
24
24
|
.. versionadded:: 2.4
|
|
25
25
|
"""
|
|
26
26
|
name = 'Tera Term macro'
|
|
27
|
-
aliases = ['
|
|
27
|
+
aliases = ['teratermmacro', 'teraterm', 'ttl']
|
|
28
28
|
filenames = ['*.ttl']
|
|
29
29
|
mimetypes = ['text/x-teratermmacro']
|
|
30
30
|
|
|
@@ -43,6 +43,7 @@ class CoqLexer(RegexLexer):
|
|
|
43
43
|
'Canonical', 'Coercion', 'Theorem', 'Lemma', 'Corollary',
|
|
44
44
|
'Proposition', 'Fact', 'Remark', 'Example', 'Proof', 'Goal', 'Save',
|
|
45
45
|
'Qed', 'Defined', 'Hint', 'Resolve', 'Rewrite', 'View', 'Search',
|
|
46
|
+
'Abort', 'Admitted',
|
|
46
47
|
'Show', 'Print', 'Printing', 'All', 'Graph', 'Projections', 'inside',
|
|
47
48
|
'outside', 'Check', 'Global', 'Instance', 'Class', 'Existing',
|
|
48
49
|
'Universe', 'Polymorphic', 'Monomorphic', 'Context'
|
|
@@ -55,7 +56,7 @@ class CoqLexer(RegexLexer):
|
|
|
55
56
|
)
|
|
56
57
|
keywords3 = (
|
|
57
58
|
# Sorts
|
|
58
|
-
'Type', 'Prop',
|
|
59
|
+
'Type', 'Prop', 'SProp',
|
|
59
60
|
)
|
|
60
61
|
keywords4 = (
|
|
61
62
|
# Tactics
|
|
@@ -94,7 +95,8 @@ class CoqLexer(RegexLexer):
|
|
|
94
95
|
'<->', '=', '>', '>]', r'>\}', r'\?', r'\?\?', r'\[', r'\[<', r'\[>',
|
|
95
96
|
r'\[\|', ']', '_', '`', r'\{', r'\{<', r'\|', r'\|]', r'\}', '~', '=>',
|
|
96
97
|
r'/\\', r'\\/', r'\{\|', r'\|\}',
|
|
97
|
-
'Π', '
|
|
98
|
+
# 'Π', 'Σ', # Not defined in the standard library
|
|
99
|
+
'λ', '¬', '∧', '∨', '∀', '∃', '→', '↔', '≠', '≤', '≥',
|
|
98
100
|
)
|
|
99
101
|
operators = r'[!$%&*+\./:<=>?@^|~-]'
|
|
100
102
|
prefix_syms = r'[!?~]'
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
pygments.lexers.thingsdb
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
Lexers for the ThingsDB language.
|
|
7
|
+
|
|
8
|
+
:copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS.
|
|
9
|
+
:license: BSD, see LICENSE for details.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import re
|
|
13
|
+
from pygments.lexer import RegexLexer, include, bygroups
|
|
14
|
+
from pygments.token import Comment, Keyword, Name, Number, String, Text, \
|
|
15
|
+
Operator, Punctuation, Whitespace
|
|
16
|
+
|
|
17
|
+
__all__ = ['ThingsDBLexer']
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ThingsDBLexer(RegexLexer):
|
|
21
|
+
"""
|
|
22
|
+
Lexer for the ThingsDB programming language.
|
|
23
|
+
|
|
24
|
+
.. versionadded:: 2.9
|
|
25
|
+
"""
|
|
26
|
+
name = 'ThingsDB'
|
|
27
|
+
aliases = ['ti', 'thingsdb']
|
|
28
|
+
filenames = ['*.ti']
|
|
29
|
+
|
|
30
|
+
tokens = {
|
|
31
|
+
'root': [
|
|
32
|
+
include('expression'),
|
|
33
|
+
],
|
|
34
|
+
'expression': [
|
|
35
|
+
include('comments'),
|
|
36
|
+
include('whitespace'),
|
|
37
|
+
|
|
38
|
+
# numbers
|
|
39
|
+
(r'[-+]?0b[01]+', Number.Bin),
|
|
40
|
+
(r'[-+]?0o[0-8]+', Number.Oct),
|
|
41
|
+
(r'([-+]?0x[0-9a-fA-F]+)', Number.Hex),
|
|
42
|
+
(r'[-+]?[0-9]+', Number.Integer),
|
|
43
|
+
(r'[-+]?((inf|nan)([^0-9A-Za-z_]|$)|[0-9]*\.[0-9]+(e[+-][0-9]+)?)',
|
|
44
|
+
Number.Float),
|
|
45
|
+
|
|
46
|
+
# strings
|
|
47
|
+
(r'(?:"(?:[^"]*)")+', String.Double),
|
|
48
|
+
(r"(?:'(?:[^']*)')+", String.Single),
|
|
49
|
+
|
|
50
|
+
# literals
|
|
51
|
+
(r'(true|false|nil)\b', Keyword.Constant),
|
|
52
|
+
|
|
53
|
+
# regular expressions
|
|
54
|
+
(r'(/[^/\\]*(?:\\.[^/\\]*)*/i?)', String.Regex),
|
|
55
|
+
|
|
56
|
+
# thing id's
|
|
57
|
+
(r'#[0-9]+', Comment.Preproc),
|
|
58
|
+
|
|
59
|
+
# name, assignments and functions
|
|
60
|
+
include('names'),
|
|
61
|
+
|
|
62
|
+
(r'[(){}\[\],;]', Punctuation),
|
|
63
|
+
(r'[+\-*/%&|<>^!~@=:?]', Operator),
|
|
64
|
+
],
|
|
65
|
+
'names': [
|
|
66
|
+
(r'(\.)'
|
|
67
|
+
r'(add|call|contains|del|endswith|extend|filter|find|findindex|'
|
|
68
|
+
r'get|has|id|indexof|keys|len|lower|map|pop|push|remove|set|sort|'
|
|
69
|
+
r'splice|startswith|test|unwrap|upper|values|wrap)'
|
|
70
|
+
r'(\()',
|
|
71
|
+
bygroups(Name.Function, Name.Function, Punctuation), 'arguments'),
|
|
72
|
+
(r'(array|assert|assert_err|auth_err|backup_info|backups_info|'
|
|
73
|
+
r'bad_data_err|bool|closure|collection_info|collections_info|'
|
|
74
|
+
r'counters|deep|del_backup|del_collection|del_expired|del_node|'
|
|
75
|
+
r'del_procedure|del_token|del_type|del_user|err|float|'
|
|
76
|
+
r'forbidden_err|grant|int|isarray|isascii|isbool|isbytes|iserr|'
|
|
77
|
+
r'isfloat|isinf|isint|islist|isnan|isnil|israw|isset|isstr|'
|
|
78
|
+
r'isthing|istuple|isutf8|lookup_err|max_quota_err|mod_type|new|'
|
|
79
|
+
r'new_backup|new_collection|new_node|new_procedure|new_token|'
|
|
80
|
+
r'new_type|new_user|node_err|node_info|nodes_info|now|'
|
|
81
|
+
r'num_arguments_err|operation_err|overflow_err|procedure_doc|'
|
|
82
|
+
r'procedure_info|procedures_info|raise|refs|rename_collection|'
|
|
83
|
+
r'rename_user|reset_counters|return|revoke|run|set_log_level|set|'
|
|
84
|
+
r'set_quota|set_type|shutdown|str|syntax_err|thing|try|type|'
|
|
85
|
+
r'type_err|type_count|type_info|types_info|user_info|users_info|'
|
|
86
|
+
r'value_err|wse|zero_div_err)'
|
|
87
|
+
r'(\()',
|
|
88
|
+
bygroups(Name.Function, Punctuation),
|
|
89
|
+
'arguments'),
|
|
90
|
+
(r'(\.[A-Za-z_][0-9A-Za-z_]*)'
|
|
91
|
+
r'(\s*)(=)',
|
|
92
|
+
bygroups(Name.Attribute, Text, Operator)),
|
|
93
|
+
(r'\.[A-Za-z_][0-9A-Za-z_]*', Name.Attribute),
|
|
94
|
+
(r'([A-Za-z_][0-9A-Za-z_]*)(\s*)(=)',
|
|
95
|
+
bygroups(Name.Variable, Text, Operator)),
|
|
96
|
+
(r'[A-Za-z_][0-9A-Za-z_]*', Name.Variable),
|
|
97
|
+
],
|
|
98
|
+
'whitespace': [
|
|
99
|
+
(r'\n', Whitespace),
|
|
100
|
+
(r'\s+', Whitespace),
|
|
101
|
+
],
|
|
102
|
+
'comments': [
|
|
103
|
+
(r'//(.*?)\n', Comment.Single),
|
|
104
|
+
(r'/\*', Comment.Multiline, 'comment'),
|
|
105
|
+
],
|
|
106
|
+
'comment': [
|
|
107
|
+
(r'[^*/]+', Comment.Multiline),
|
|
108
|
+
(r'/\*', Comment.Multiline, '#push'),
|
|
109
|
+
(r'\*/', Comment.Multiline, '#pop'),
|
|
110
|
+
(r'[*/]', Comment.Multiline),
|
|
111
|
+
],
|
|
112
|
+
'arguments': [
|
|
113
|
+
include('expression'),
|
|
114
|
+
(',', Punctuation),
|
|
115
|
+
(r'\(', Punctuation, '#push'),
|
|
116
|
+
(r'\)', Punctuation, '#pop'),
|
|
117
|
+
],
|
|
118
|
+
}
|
|
@@ -12,7 +12,7 @@ import re
|
|
|
12
12
|
|
|
13
13
|
from pygments.lexer import Lexer
|
|
14
14
|
from pygments.token import Text, Comment, Operator, Keyword, Name, Number, \
|
|
15
|
-
|
|
15
|
+
Punctuation, Error
|
|
16
16
|
|
|
17
17
|
__all__ = ['TNTLexer']
|
|
18
18
|
|
|
@@ -66,15 +66,16 @@ class TNTLexer(Lexer):
|
|
|
66
66
|
end += 1
|
|
67
67
|
except IndexError:
|
|
68
68
|
end = len(text)
|
|
69
|
-
if required:
|
|
70
|
-
|
|
69
|
+
if required and end == start:
|
|
70
|
+
raise AssertionError
|
|
71
71
|
if end != start:
|
|
72
72
|
self.cur.append((start, Text, text[start:end]))
|
|
73
73
|
return end
|
|
74
74
|
|
|
75
75
|
def variable(self, start, text):
|
|
76
76
|
"""Tokenize a variable."""
|
|
77
|
-
|
|
77
|
+
if text[start] not in self.VARIABLES:
|
|
78
|
+
raise AssertionError
|
|
78
79
|
end = start+1
|
|
79
80
|
while text[end] in self.PRIMES:
|
|
80
81
|
end += 1
|
|
@@ -97,10 +98,12 @@ class TNTLexer(Lexer):
|
|
|
97
98
|
if text[start] == '(': # (...+...)
|
|
98
99
|
self.cur.append((start, Punctuation, text[start]))
|
|
99
100
|
start = self.term(start+1, text)
|
|
100
|
-
|
|
101
|
+
if text[start] not in self.OPERATORS:
|
|
102
|
+
raise AssertionError
|
|
101
103
|
self.cur.append((start, Operator, text[start]))
|
|
102
104
|
start = self.term(start+1, text)
|
|
103
|
-
|
|
105
|
+
if text[start] != ')':
|
|
106
|
+
raise AssertionError
|
|
104
107
|
self.cur.append((start, Punctuation, text[start]))
|
|
105
108
|
return start+1
|
|
106
109
|
raise AssertionError # no matches
|
|
@@ -116,21 +119,25 @@ class TNTLexer(Lexer):
|
|
|
116
119
|
if text[start] in self.QUANTIFIERS: # Aa:<...>
|
|
117
120
|
self.cur.append((start, Keyword.Declaration, text[start]))
|
|
118
121
|
start = self.variable(start+1, text)
|
|
119
|
-
|
|
122
|
+
if text[start] != ':':
|
|
123
|
+
raise AssertionError
|
|
120
124
|
self.cur.append((start, Punctuation, text[start]))
|
|
121
125
|
return self.formula(start+1, text)
|
|
122
126
|
if text[start] == '<': # <...&...>
|
|
123
127
|
self.cur.append((start, Punctuation, text[start]))
|
|
124
128
|
start = self.formula(start+1, text)
|
|
125
|
-
|
|
129
|
+
if text[start] not in self.LOGIC:
|
|
130
|
+
raise AssertionError
|
|
126
131
|
self.cur.append((start, Operator, text[start]))
|
|
127
132
|
start = self.formula(start+1, text)
|
|
128
|
-
|
|
133
|
+
if text[start] != '>':
|
|
134
|
+
raise AssertionError
|
|
129
135
|
self.cur.append((start, Punctuation, text[start]))
|
|
130
136
|
return start+1
|
|
131
137
|
# ...=...
|
|
132
138
|
start = self.term(start, text)
|
|
133
|
-
|
|
139
|
+
if text[start] != '=':
|
|
140
|
+
raise AssertionError
|
|
134
141
|
self.cur.append((start, Operator, text[start]))
|
|
135
142
|
start = self.term(start+1, text)
|
|
136
143
|
return start
|
|
@@ -138,7 +145,8 @@ class TNTLexer(Lexer):
|
|
|
138
145
|
def rule(self, start, text):
|
|
139
146
|
"""Tokenize a rule."""
|
|
140
147
|
match = self.RULES.match(text, start)
|
|
141
|
-
|
|
148
|
+
if match is None:
|
|
149
|
+
raise AssertionError
|
|
142
150
|
groups = sorted(match.regs[1:]) # exclude whole match
|
|
143
151
|
for group in groups:
|
|
144
152
|
if group[0] >= 0: # this group matched
|
|
@@ -162,8 +170,10 @@ class TNTLexer(Lexer):
|
|
|
162
170
|
self.cur.append((start+1, Text, text[start+1:end]))
|
|
163
171
|
start = end
|
|
164
172
|
match = self.LINENOS.match(text, start)
|
|
165
|
-
|
|
166
|
-
|
|
173
|
+
if match is None:
|
|
174
|
+
raise AssertionError
|
|
175
|
+
if text[match.end()] != ')':
|
|
176
|
+
raise AssertionError
|
|
167
177
|
self.cur.append((match.start(), Number.Integer, match.group(0)))
|
|
168
178
|
self.cur.append((match.end(), Punctuation, text[match.end()]))
|
|
169
179
|
return match.end() + 1
|
|
@@ -219,7 +229,7 @@ class TNTLexer(Lexer):
|
|
|
219
229
|
orig = len(self.cur)
|
|
220
230
|
try:
|
|
221
231
|
start = end = self.formula(start, text)
|
|
222
|
-
except AssertionError: # not well-formed
|
|
232
|
+
except (AssertionError, RecursionError): # not well-formed
|
|
223
233
|
del self.cur[orig:]
|
|
224
234
|
while text[end] not in self.WHITESPACE:
|
|
225
235
|
end += 1
|
|
@@ -257,6 +267,6 @@ class TNTLexer(Lexer):
|
|
|
257
267
|
try:
|
|
258
268
|
del self.cur[orig:]
|
|
259
269
|
except NameError:
|
|
260
|
-
pass
|
|
270
|
+
pass # if orig was never defined, fine
|
|
261
271
|
self.error_till_line_end(start, text)
|
|
262
272
|
return self.cur
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
pygments.lexers.webassembly
|
|
4
|
+
~~~~~~~~~~~~~~~~~~~
|
|
5
|
+
|
|
6
|
+
Lexers for the WebAssembly text format.
|
|
7
|
+
|
|
8
|
+
The grammar can be found at https://github.com/WebAssembly/spec/blob/master/interpreter/README.md
|
|
9
|
+
and https://webassembly.github.io/spec/core/text/.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
|
|
13
|
+
:license: BSD, see LICENSE for details.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from pygments.lexer import RegexLexer, words, bygroups, default
|
|
17
|
+
from pygments.token import Text, Comment, Operator, Keyword, String, Number, Punctuation, Literal, Error, Name
|
|
18
|
+
|
|
19
|
+
__all__ = ['WatLexer']
|
|
20
|
+
|
|
21
|
+
keywords = (
|
|
22
|
+
'module', 'import', 'func', 'funcref', 'start', 'param', 'local', 'type',
|
|
23
|
+
'result', 'export', 'memory', 'global', 'mut', 'data', 'table', 'elem',
|
|
24
|
+
'if', 'then', 'else', 'end', 'block', 'loop'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
builtins = (
|
|
28
|
+
'unreachable', 'nop', 'block', 'loop', 'if', 'else', 'end', 'br', 'br_if',
|
|
29
|
+
'br_table', 'return', 'call', 'call_indirect', 'drop', 'select',
|
|
30
|
+
'local.get', 'local.set', 'local.tee', 'global.get', 'global.set',
|
|
31
|
+
'i32.load', 'i64.load', 'f32.load', 'f64.load', 'i32.load8_s',
|
|
32
|
+
'i32.load8_u', 'i32.load16_s', 'i32.load16_u', 'i64.load8_s',
|
|
33
|
+
'i64.load8_u', 'i64.load16_s', 'i64.load16_u', 'i64.load32_s',
|
|
34
|
+
'i64.load32_u', 'i32.store', 'i64.store', 'f32.store', 'f64.store',
|
|
35
|
+
'i32.store8', 'i32.store16', 'i64.store8', 'i64.store16', 'i64.store32',
|
|
36
|
+
'memory.size', 'memory.grow', 'i32.const', 'i64.const', 'f32.const',
|
|
37
|
+
'f64.const', 'i32.eqz', 'i32.eq', 'i32.ne', 'i32.lt_s', 'i32.lt_u',
|
|
38
|
+
'i32.gt_s', 'i32.gt_u', 'i32.le_s', 'i32.le_u', 'i32.ge_s', 'i32.ge_u',
|
|
39
|
+
'i64.eqz', 'i64.eq', 'i64.ne', 'i64.lt_s', 'i64.lt_u', 'i64.gt_s',
|
|
40
|
+
'i64.gt_u', 'i64.le_s', 'i64.le_u', 'i64.ge_s', 'i64.ge_u', 'f32.eq',
|
|
41
|
+
'f32.ne', 'f32.lt', 'f32.gt', 'f32.le', 'f32.ge', 'f64.eq', 'f64.ne',
|
|
42
|
+
'f64.lt', 'f64.gt', 'f64.le', 'f64.ge', 'i32.clz', 'i32.ctz', 'i32.popcnt',
|
|
43
|
+
'i32.add', 'i32.sub', 'i32.mul', 'i32.div_s', 'i32.div_u', 'i32.rem_s',
|
|
44
|
+
'i32.rem_u', 'i32.and', 'i32.or', 'i32.xor', 'i32.shl', 'i32.shr_s',
|
|
45
|
+
'i32.shr_u', 'i32.rotl', 'i32.rotr', 'i64.clz', 'i64.ctz', 'i64.popcnt',
|
|
46
|
+
'i64.add', 'i64.sub', 'i64.mul', 'i64.div_s', 'i64.div_u', 'i64.rem_s',
|
|
47
|
+
'i64.rem_u', 'i64.and', 'i64.or', 'i64.xor', 'i64.shl', 'i64.shr_s',
|
|
48
|
+
'i64.shr_u', 'i64.rotl', 'i64.rotr', 'f32.abs', 'f32.neg', 'f32.ceil',
|
|
49
|
+
'f32.floor', 'f32.trunc', 'f32.nearest', 'f32.sqrt', 'f32.add', 'f32.sub',
|
|
50
|
+
'f32.mul', 'f32.div', 'f32.min', 'f32.max', 'f32.copysign', 'f64.abs',
|
|
51
|
+
'f64.neg', 'f64.ceil', 'f64.floor', 'f64.trunc', 'f64.nearest', 'f64.sqrt',
|
|
52
|
+
'f64.add', 'f64.sub', 'f64.mul', 'f64.div', 'f64.min', 'f64.max',
|
|
53
|
+
'f64.copysign', 'i32.wrap_i64', 'i32.trunc_f32_s', 'i32.trunc_f32_u',
|
|
54
|
+
'i32.trunc_f64_s', 'i32.trunc_f64_u', 'i64.extend_i32_s',
|
|
55
|
+
'i64.extend_i32_u', 'i64.trunc_f32_s', 'i64.trunc_f32_u',
|
|
56
|
+
'i64.trunc_f64_s', 'i64.trunc_f64_u', 'f32.convert_i32_s',
|
|
57
|
+
'f32.convert_i32_u', 'f32.convert_i64_s', 'f32.convert_i64_u',
|
|
58
|
+
'f32.demote_f64', 'f64.convert_i32_s', 'f64.convert_i32_u',
|
|
59
|
+
'f64.convert_i64_s', 'f64.convert_i64_u', 'f64.promote_f32',
|
|
60
|
+
'i32.reinterpret_f32', 'i64.reinterpret_f64', 'f32.reinterpret_i32',
|
|
61
|
+
'f64.reinterpret_i64',
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class WatLexer(RegexLexer):
|
|
66
|
+
"""Lexer for the `WebAssembly text format <https://webassembly.org/>`_.
|
|
67
|
+
|
|
68
|
+
.. versionadded:: 2.9
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
name = 'WebAssembly'
|
|
72
|
+
aliases = ['wast', 'wat']
|
|
73
|
+
filenames = ['*.wat', '*.wast']
|
|
74
|
+
|
|
75
|
+
tokens = {
|
|
76
|
+
'root': [
|
|
77
|
+
(words(keywords, suffix=r'(?=[^a-z_\.])'), Keyword),
|
|
78
|
+
(words(builtins), Name.Builtin, 'arguments'),
|
|
79
|
+
(words(['i32', 'i64', 'f32', 'f64']), Keyword.Type),
|
|
80
|
+
(r'\$[A-Za-z0-9!#$%&\'*+./:<=>?@\\^_`|~-]+', Name.Variable), # yes, all of the are valid in identifiers
|
|
81
|
+
(r';;.*?$', Comment.Single),
|
|
82
|
+
(r'\(;', Comment.Multiline, 'nesting_comment'),
|
|
83
|
+
(r'[+-]?0x[\dA-Fa-f](_?[\dA-Fa-f])*(.([\dA-Fa-f](_?[\dA-Fa-f])*)?)?([pP][+-]?[\dA-Fa-f](_?[\dA-Fa-f])*)?', Number.Float),
|
|
84
|
+
(r'[+-]?\d.\d(_?\d)*[eE][+-]?\d(_?\d)*', Number.Float),
|
|
85
|
+
(r'[+-]?\d.\d(_?\d)*', Number.Float),
|
|
86
|
+
(r'[+-]?\d.[eE][+-]?\d(_?\d)*', Number.Float),
|
|
87
|
+
(r'[+-]?(inf|nan:0x[\dA-Fa-f](_?[\dA-Fa-f])*|nan)', Number.Float),
|
|
88
|
+
(r'[+-]?0x[\dA-Fa-f](_?[\dA-Fa-f])*', Number.Hex),
|
|
89
|
+
(r'[+-]?\d(_?\d)*', Number.Integer),
|
|
90
|
+
(r'[\(\)]', Punctuation),
|
|
91
|
+
(r'"', String.Double, 'string'),
|
|
92
|
+
(r'\s+', Text),
|
|
93
|
+
],
|
|
94
|
+
'nesting_comment': [
|
|
95
|
+
(r'\(;', Comment.Multiline, '#push'),
|
|
96
|
+
(r';\)', Comment.Multiline, '#pop'),
|
|
97
|
+
(r'[^;(]+', Comment.Multiline),
|
|
98
|
+
(r'[;(]', Comment.Multiline),
|
|
99
|
+
],
|
|
100
|
+
'string': [
|
|
101
|
+
(r'\\[\dA-Fa-f][\dA-Fa-f]', String.Escape), # must have exactly two hex digits
|
|
102
|
+
(r'\\t', String.Escape),
|
|
103
|
+
(r'\\n', String.Escape),
|
|
104
|
+
(r'\\r', String.Escape),
|
|
105
|
+
(r'\\"', String.Escape),
|
|
106
|
+
(r"\\'", String.Escape),
|
|
107
|
+
(r'\\u\{[\dA-Fa-f](_?[\dA-Fa-f])*\}', String.Escape),
|
|
108
|
+
(r'\\\\', String.Escape),
|
|
109
|
+
(r'"', String.Double, '#pop'),
|
|
110
|
+
(r'[^"\\]+', String.Double),
|
|
111
|
+
],
|
|
112
|
+
'arguments': [
|
|
113
|
+
(r'\s+', Text),
|
|
114
|
+
(r'(offset)(=)(0x[\dA-Fa-f](_?[\dA-Fa-f])*)', bygroups(Keyword, Operator, Number.Hex)),
|
|
115
|
+
(r'(offset)(=)(\d(_?\d)*)', bygroups(Keyword, Operator, Number.Integer)),
|
|
116
|
+
(r'(align)(=)(0x[\dA-Fa-f](_?[\dA-Fa-f])*)', bygroups(Keyword, Operator, Number.Hex)),
|
|
117
|
+
(r'(align)(=)(\d(_?\d)*)', bygroups(Keyword, Operator, Number.Integer)),
|
|
118
|
+
default('#pop'),
|
|
119
|
+
]
|
|
120
|
+
}
|
|
@@ -134,7 +134,7 @@ class StyleMeta(type):
|
|
|
134
134
|
color = _ansimap[color]
|
|
135
135
|
bgcolor = t[4]
|
|
136
136
|
if bgcolor in _deprecated_ansicolors:
|
|
137
|
-
bgcolor = _deprecated_ansicolors[
|
|
137
|
+
bgcolor = _deprecated_ansicolors[bgcolor]
|
|
138
138
|
if bgcolor in ansicolors:
|
|
139
139
|
bgansicolor = bgcolor
|
|
140
140
|
bgcolor = _ansimap[bgcolor]
|