sitcod3 commited on
Commit
6d90567
·
verified ·
1 Parent(s): d7709f4

Upload folder using huggingface_hub (part 5)

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. venv/Lib/site-packages/pygments/lexers/boa.py +97 -0
  2. venv/Lib/site-packages/pygments/lexers/bqn.py +112 -0
  3. venv/Lib/site-packages/pygments/lexers/business.py +625 -0
  4. venv/Lib/site-packages/pygments/lexers/c_cpp.py +481 -0
  5. venv/Lib/site-packages/pygments/lexers/c_like.py +743 -0
  6. venv/Lib/site-packages/pygments/lexers/capnproto.py +74 -0
  7. venv/Lib/site-packages/pygments/lexers/carbon.py +95 -0
  8. venv/Lib/site-packages/pygments/lexers/cddl.py +172 -0
  9. venv/Lib/site-packages/pygments/lexers/cel.py +142 -0
  10. venv/Lib/site-packages/pygments/lexers/chapel.py +139 -0
  11. venv/Lib/site-packages/pygments/lexers/clean.py +180 -0
  12. venv/Lib/site-packages/pygments/lexers/codeql.py +80 -0
  13. venv/Lib/site-packages/pygments/lexers/comal.py +81 -0
  14. venv/Lib/site-packages/pygments/lexers/compiled.py +35 -0
  15. venv/Lib/site-packages/pygments/lexers/configs.py +1499 -0
  16. venv/Lib/site-packages/pygments/lexers/console.py +125 -0
  17. venv/Lib/site-packages/pygments/lexers/cplint.py +43 -0
  18. venv/Lib/site-packages/pygments/lexers/crystal.py +364 -0
  19. venv/Lib/site-packages/pygments/lexers/csound.py +466 -0
  20. venv/Lib/site-packages/pygments/lexers/css.py +633 -0
  21. venv/Lib/site-packages/pygments/lexers/d.py +259 -0
  22. venv/Lib/site-packages/pygments/lexers/dalvik.py +126 -0
  23. venv/Lib/site-packages/pygments/lexers/data.py +763 -0
  24. venv/Lib/site-packages/pygments/lexers/dax.py +135 -0
  25. venv/Lib/site-packages/pygments/lexers/devicetree.py +120 -0
  26. venv/Lib/site-packages/pygments/lexers/diff.py +169 -0
  27. venv/Lib/site-packages/pygments/lexers/dns.py +109 -0
  28. venv/Lib/site-packages/pygments/lexers/dotnet.py +886 -0
  29. venv/Lib/site-packages/pygments/lexers/dsls.py +970 -0
  30. venv/Lib/site-packages/pygments/lexers/dylan.py +279 -0
  31. venv/Lib/site-packages/pygments/lexers/ecl.py +144 -0
  32. venv/Lib/site-packages/pygments/lexers/eiffel.py +67 -0
  33. venv/Lib/site-packages/pygments/lexers/elm.py +123 -0
  34. venv/Lib/site-packages/pygments/lexers/elpi.py +201 -0
  35. venv/Lib/site-packages/pygments/lexers/email.py +132 -0
  36. venv/Lib/site-packages/pygments/lexers/erlang.py +526 -0
  37. venv/Lib/site-packages/pygments/lexers/esoteric.py +300 -0
  38. venv/Lib/site-packages/pygments/lexers/ezhil.py +76 -0
  39. venv/Lib/site-packages/pygments/lexers/factor.py +361 -0
  40. venv/Lib/site-packages/pygments/lexers/fantom.py +250 -0
  41. venv/Lib/site-packages/pygments/lexers/felix.py +275 -0
  42. venv/Lib/site-packages/pygments/lexers/fift.py +68 -0
  43. venv/Lib/site-packages/pygments/lexers/floscript.py +87 -0
  44. venv/Lib/site-packages/pygments/lexers/forth.py +178 -0
  45. venv/Lib/site-packages/pygments/lexers/fortran.py +212 -0
  46. venv/Lib/site-packages/pygments/lexers/foxpro.py +427 -0
  47. venv/Lib/site-packages/pygments/lexers/freefem.py +893 -0
  48. venv/Lib/site-packages/pygments/lexers/func.py +110 -0
  49. venv/Lib/site-packages/pygments/lexers/functional.py +21 -0
  50. venv/Lib/site-packages/pygments/lexers/futhark.py +104 -0
venv/Lib/site-packages/pygments/lexers/boa.py ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.boa
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for the Boa language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, words
12
+ from pygments.token import String, Comment, Keyword, Name, Number, Operator, \
13
+ Punctuation, Whitespace
14
+
15
+ __all__ = ['BoaLexer']
16
+
17
+
18
+ class BoaLexer(RegexLexer):
19
+ """
20
+ Lexer for the Boa language.
21
+ """
22
+ name = 'Boa'
23
+ aliases = ['boa']
24
+ filenames = ['*.boa']
25
+ url = 'https://boa.cs.iastate.edu/docs'
26
+ version_added = '2.4'
27
+
28
+ reserved = words(
29
+ ('input', 'output', 'of', 'weight', 'before', 'after', 'stop',
30
+ 'ifall', 'foreach', 'exists', 'function', 'break', 'switch', 'case',
31
+ 'visitor', 'default', 'return', 'visit', 'while', 'if', 'else'),
32
+ suffix=r'\b', prefix=r'\b')
33
+ keywords = words(
34
+ ('bottom', 'collection', 'maximum', 'mean', 'minimum', 'set', 'sum',
35
+ 'top', 'string', 'int', 'bool', 'float', 'time', 'false', 'true',
36
+ 'array', 'map', 'stack', 'enum', 'type'), suffix=r'\b', prefix=r'\b')
37
+ classes = words(
38
+ ('Project', 'ForgeKind', 'CodeRepository', 'Revision', 'RepositoryKind',
39
+ 'ChangedFile', 'FileKind', 'ASTRoot', 'Namespace', 'Declaration', 'Type',
40
+ 'Method', 'Variable', 'Statement', 'Expression', 'Modifier',
41
+ 'StatementKind', 'ExpressionKind', 'ModifierKind', 'Visibility',
42
+ 'TypeKind', 'Person', 'ChangeKind'),
43
+ suffix=r'\b', prefix=r'\b')
44
+ operators = ('->', ':=', ':', '=', '<<', '!', '++', '||',
45
+ '&&', '+', '-', '*', ">", "<")
46
+ string_sep = ('`', '\"')
47
+ built_in_functions = words(
48
+ (
49
+ # Array functions
50
+ 'new', 'sort',
51
+ # Date & Time functions
52
+ 'yearof', 'dayofyear', 'hourof', 'minuteof', 'secondof', 'now',
53
+ 'addday', 'addmonth', 'addweek', 'addyear', 'dayofmonth', 'dayofweek',
54
+ 'dayofyear', 'formattime', 'trunctoday', 'trunctohour', 'trunctominute',
55
+ 'trunctomonth', 'trunctosecond', 'trunctoyear',
56
+ # Map functions
57
+ 'clear', 'haskey', 'keys', 'lookup', 'remove', 'values',
58
+ # Math functions
59
+ 'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh',
60
+ 'ceil', 'cos', 'cosh', 'exp', 'floor', 'highbit', 'isfinite', 'isinf',
61
+ 'isnan', 'isnormal', 'log', 'log10', 'max', 'min', 'nrand', 'pow',
62
+ 'rand', 'round', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc',
63
+ # Other functions
64
+ 'def', 'hash', 'len',
65
+ # Set functions
66
+ 'add', 'contains', 'remove',
67
+ # String functions
68
+ 'format', 'lowercase', 'match', 'matchposns', 'matchstrs', 'regex',
69
+ 'split', 'splitall', 'splitn', 'strfind', 'strreplace', 'strrfind',
70
+ 'substring', 'trim', 'uppercase',
71
+ # Type Conversion functions
72
+ 'bool', 'float', 'int', 'string', 'time',
73
+ # Domain-Specific functions
74
+ 'getast', 'getsnapshot', 'hasfiletype', 'isfixingrevision', 'iskind',
75
+ 'isliteral',
76
+ ),
77
+ prefix=r'\b',
78
+ suffix=r'\(')
79
+
80
+ tokens = {
81
+ 'root': [
82
+ (r'#.*?$', Comment.Single),
83
+ (r'/\*.*?\*/', Comment.Multiline),
84
+ (reserved, Keyword.Reserved),
85
+ (built_in_functions, Name.Function),
86
+ (keywords, Keyword.Type),
87
+ (classes, Name.Classes),
88
+ (words(operators), Operator),
89
+ (r'[][(),;{}\\.]', Punctuation),
90
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
91
+ (r"`(\\\\|\\[^\\]|[^`\\])*`", String.Backtick),
92
+ (words(string_sep), String.Delimiter),
93
+ (r'[a-zA-Z_]+', Name.Variable),
94
+ (r'[0-9]+', Number.Integer),
95
+ (r'\s+', Whitespace), # Whitespace
96
+ ]
97
+ }
venv/Lib/site-packages/pygments/lexers/bqn.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.bqn
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for BQN.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer
12
+ from pygments.token import Comment, Operator, Keyword, Name, String, \
13
+ Number, Punctuation, Whitespace
14
+
15
+ __all__ = ['BQNLexer']
16
+
17
+
18
+ class BQNLexer(RegexLexer):
19
+ """
20
+ A simple BQN lexer.
21
+ """
22
+ name = 'BQN'
23
+ url = 'https://mlochbaum.github.io/BQN/index.html'
24
+ aliases = ['bqn']
25
+ filenames = ['*.bqn']
26
+ mimetypes = []
27
+ version_added = '2.16'
28
+
29
+ # An inter_word_char. Necessary because \w matches all alphanumeric
30
+ # Unicode characters, including ones (e.g., 𝕊) that BQN treats special.
31
+ _iwc = r'((?=[^𝕎𝕏𝔽𝔾𝕊𝕨𝕩𝕗𝕘𝕤𝕣])\w)'
32
+
33
+ tokens = {
34
+ 'root': [
35
+ # Whitespace
36
+ # ==========
37
+ (r'\s+', Whitespace),
38
+ #
39
+ # Comment
40
+ # =======
41
+ # '#' is a comment that continues to the end of the line
42
+ (r'#.*$', Comment.Single),
43
+ #
44
+ # Strings
45
+ # =======
46
+ (r'\'((\'\')|[^\'])*\'', String.Single),
47
+ (r'"(("")|[^"])*"', String.Double),
48
+ #
49
+ # Null Character
50
+ # ==============
51
+ # Literal representation of the null character
52
+ (r'@', String.Symbol),
53
+ #
54
+ # Punctuation
55
+ # ===========
56
+ # This token type is used for diamond, commas
57
+ # and array and list brackets and strand syntax
58
+ (r'[\.⋄,\[\]⟨⟩‿]', Punctuation),
59
+ #
60
+ # Expression Grouping
61
+ # ===================
62
+ # Since this token type is important in BQN, it is not included in
63
+ # the punctuation token type but rather in the following one
64
+ (r'[\(\)]', String.Regex),
65
+ #
66
+ # Numbers
67
+ # =======
68
+ # Includes the numeric literals and the Nothing character
69
+ (r'¯?[0-9](([0-9]|_)*\.?([0-9]|_)+|([0-9]|_)*)([Ee][¯]?([0-9]|_)+)?|¯|∞|π|·', Number),
70
+ #
71
+ # Variables
72
+ # =========
73
+ (r'[a-z]' + _iwc + r'*', Name.Variable),
74
+ #
75
+ # 2-Modifiers
76
+ # ===========
77
+ # Needs to come before the 1-modifiers due to _𝕣 and _𝕣_
78
+ (r'[∘○⊸⟜⌾⊘◶⎉⚇⍟⎊]', Name.Property),
79
+ (r'_(𝕣|[a-zA-Z0-9]+)_', Name.Property),
80
+ #
81
+ # 1-Modifiers
82
+ # ===========
83
+ (r'[˙˜˘¨⌜⁼´˝`𝕣]', Name.Attribute),
84
+ (r'_(𝕣|[a-zA-Z0-9]+)', Name.Attribute),
85
+ #
86
+ # Functions
87
+ # =========
88
+ # The monadic or dyadic function primitives and function
89
+ # operands and arguments, along with function self-reference
90
+ (r'[+\-×÷\⋆√⌊⌈∧∨¬|≤<>≥=≠≡≢⊣⊢⥊∾≍⋈↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!𝕎𝕏𝔽𝔾𝕊]',
91
+ Operator),
92
+ (r'[A-Z]' + _iwc + r'*|•' + _iwc + r'+', Operator),
93
+ #
94
+ # Constant
95
+ # ========
96
+ (r'˙', Name.Constant),
97
+ #
98
+ # Define/Export/Change
99
+ # ====================
100
+ (r'[←↩⇐]', Keyword.Declaration),
101
+ #
102
+ # Blocks
103
+ # ======
104
+ (r'[{}]', Keyword.Type),
105
+ #
106
+ # Extra characters
107
+ # ================
108
+ (r'[;:?𝕨𝕩𝕗𝕘𝕤]', Name.Entity),
109
+ #
110
+
111
+ ],
112
+ }
venv/Lib/site-packages/pygments/lexers/business.py ADDED
@@ -0,0 +1,625 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.business
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for "business-oriented" languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, include, words, bygroups
14
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
15
+ Number, Punctuation, Error, Whitespace
16
+
17
+ from pygments.lexers._openedge_builtins import OPENEDGEKEYWORDS
18
+
19
+ __all__ = ['CobolLexer', 'CobolFreeformatLexer', 'ABAPLexer', 'OpenEdgeLexer',
20
+ 'GoodDataCLLexer', 'MaqlLexer']
21
+
22
+
23
+ class CobolLexer(RegexLexer):
24
+ """
25
+ Lexer for OpenCOBOL code.
26
+ """
27
+ name = 'COBOL'
28
+ aliases = ['cobol']
29
+ filenames = ['*.cob', '*.COB', '*.cpy', '*.CPY']
30
+ mimetypes = ['text/x-cobol']
31
+ url = 'https://en.wikipedia.org/wiki/COBOL'
32
+ version_added = '1.6'
33
+
34
+ flags = re.IGNORECASE | re.MULTILINE
35
+
36
+ # Data Types: by PICTURE and USAGE
37
+ # Operators: **, *, +, -, /, <, >, <=, >=, =, <>
38
+ # Logical (?): NOT, AND, OR
39
+
40
+ # Reserved words:
41
+ # http://opencobol.add1tocobol.com/#reserved-words
42
+ # Intrinsics:
43
+ # http://opencobol.add1tocobol.com/#does-opencobol-implement-any-intrinsic-functions
44
+
45
+ tokens = {
46
+ 'root': [
47
+ include('comment'),
48
+ include('strings'),
49
+ include('core'),
50
+ include('nums'),
51
+ (r'[a-z0-9]([\w\-]*[a-z0-9]+)?', Name.Variable),
52
+ # (r'[\s]+', Text),
53
+ (r'[ \t]+', Whitespace),
54
+ ],
55
+ 'comment': [
56
+ (r'(^.{6}[*/].*\n|^.{6}|\*>.*\n)', Comment),
57
+ ],
58
+ 'core': [
59
+ # Figurative constants
60
+ (r'(^|(?<=[^\w\-]))(ALL\s+)?'
61
+ r'((ZEROES)|(HIGH-VALUE|LOW-VALUE|QUOTE|SPACE|ZERO)(S)?)'
62
+ r'\s*($|(?=[^\w\-]))',
63
+ Name.Constant),
64
+
65
+ # Reserved words STATEMENTS and other bolds
66
+ (words((
67
+ 'ACCEPT', 'ADD', 'ALLOCATE', 'CALL', 'CANCEL', 'CLOSE', 'COMPUTE',
68
+ 'CONFIGURATION', 'CONTINUE', 'DATA', 'DELETE', 'DISPLAY', 'DIVIDE',
69
+ 'DIVISION', 'ELSE', 'END', 'END-ACCEPT',
70
+ 'END-ADD', 'END-CALL', 'END-COMPUTE', 'END-DELETE', 'END-DISPLAY',
71
+ 'END-DIVIDE', 'END-EVALUATE', 'END-IF', 'END-MULTIPLY', 'END-OF-PAGE',
72
+ 'END-PERFORM', 'END-READ', 'END-RETURN', 'END-REWRITE', 'END-SEARCH',
73
+ 'END-START', 'END-STRING', 'END-SUBTRACT', 'END-UNSTRING', 'END-WRITE',
74
+ 'ENVIRONMENT', 'EVALUATE', 'EXIT', 'FD', 'FILE', 'FILE-CONTROL', 'FOREVER',
75
+ 'FREE', 'GENERATE', 'GO', 'GOBACK', 'IDENTIFICATION', 'IF', 'INITIALIZE',
76
+ 'INITIATE', 'INPUT-OUTPUT', 'INSPECT', 'INVOKE', 'I-O-CONTROL', 'LINKAGE',
77
+ 'LOCAL-STORAGE', 'MERGE', 'MOVE', 'MULTIPLY', 'OPEN', 'PERFORM',
78
+ 'PROCEDURE', 'PROGRAM-ID', 'RAISE', 'READ', 'RELEASE', 'RESUME',
79
+ 'RETURN', 'REWRITE', 'SCREEN', 'SD', 'SEARCH', 'SECTION', 'SET',
80
+ 'SORT', 'START', 'STOP', 'STRING', 'SUBTRACT', 'SUPPRESS',
81
+ 'TERMINATE', 'THEN', 'UNLOCK', 'UNSTRING', 'USE', 'VALIDATE',
82
+ 'WORKING-STORAGE', 'WRITE'), prefix=r'(^|(?<=[^\w\-]))',
83
+ suffix=r'\s*($|(?=[^\w\-]))'),
84
+ Keyword.Reserved),
85
+
86
+ # Reserved words
87
+ (words((
88
+ 'ACCESS', 'ADDRESS', 'ADVANCING', 'AFTER', 'ALL',
89
+ 'ALPHABET', 'ALPHABETIC', 'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER',
90
+ 'ALPHANUMERIC', 'ALPHANUMERIC-EDITED', 'ALSO', 'ALTER', 'ALTERNATE',
91
+ 'ANY', 'ARE', 'AREA', 'AREAS', 'ARGUMENT-NUMBER', 'ARGUMENT-VALUE', 'AS',
92
+ 'ASCENDING', 'ASSIGN', 'AT', 'AUTO', 'AUTO-SKIP', 'AUTOMATIC',
93
+ 'AUTOTERMINATE', 'BACKGROUND-COLOR', 'BASED', 'BEEP', 'BEFORE', 'BELL',
94
+ 'BLANK', 'BLINK', 'BLOCK', 'BOTTOM', 'BY', 'BYTE-LENGTH', 'CHAINING',
95
+ 'CHARACTER', 'CHARACTERS', 'CLASS', 'CODE', 'CODE-SET', 'COL',
96
+ 'COLLATING', 'COLS', 'COLUMN', 'COLUMNS', 'COMMA', 'COMMAND-LINE',
97
+ 'COMMIT', 'COMMON', 'CONSTANT', 'CONTAINS', 'CONTENT', 'CONTROL',
98
+ 'CONTROLS', 'CONVERTING', 'COPY', 'CORR', 'CORRESPONDING', 'COUNT', 'CRT',
99
+ 'CURRENCY', 'CURSOR', 'CYCLE', 'DATE', 'DAY', 'DAY-OF-WEEK', 'DE',
100
+ 'DEBUGGING', 'DECIMAL-POINT', 'DECLARATIVES', 'DEFAULT', 'DELIMITED',
101
+ 'DELIMITER', 'DEPENDING', 'DESCENDING', 'DETAIL', 'DISK',
102
+ 'DOWN', 'DUPLICATES', 'DYNAMIC', 'EBCDIC',
103
+ 'ENTRY', 'ENVIRONMENT-NAME', 'ENVIRONMENT-VALUE', 'EOL', 'EOP',
104
+ 'EOS', 'ERASE', 'ERROR', 'ESCAPE', 'EXCEPTION',
105
+ 'EXCLUSIVE', 'EXTEND', 'EXTERNAL', 'FILE-ID', 'FILLER', 'FINAL',
106
+ 'FIRST', 'FIXED', 'FLOAT-LONG', 'FLOAT-SHORT',
107
+ 'FOOTING', 'FOR', 'FOREGROUND-COLOR', 'FORMAT', 'FROM', 'FULL',
108
+ 'FUNCTION', 'FUNCTION-ID', 'GIVING', 'GLOBAL', 'GROUP',
109
+ 'HEADING', 'HIGHLIGHT', 'I-O', 'ID',
110
+ 'IGNORE', 'IGNORING', 'IN', 'INDEX', 'INDEXED', 'INDICATE',
111
+ 'INITIAL', 'INITIALIZED', 'INPUT', 'INTO', 'INTRINSIC', 'INVALID',
112
+ 'IS', 'JUST', 'JUSTIFIED', 'KEY', 'LABEL',
113
+ 'LAST', 'LEADING', 'LEFT', 'LENGTH', 'LIMIT', 'LIMITS', 'LINAGE',
114
+ 'LINAGE-COUNTER', 'LINE', 'LINES', 'LOCALE', 'LOCK',
115
+ 'LOWLIGHT', 'MANUAL', 'MEMORY', 'MINUS', 'MODE', 'MULTIPLE',
116
+ 'NATIONAL', 'NATIONAL-EDITED', 'NATIVE', 'NEGATIVE', 'NEXT', 'NO',
117
+ 'NULL', 'NULLS', 'NUMBER', 'NUMBERS', 'NUMERIC', 'NUMERIC-EDITED',
118
+ 'OBJECT-COMPUTER', 'OCCURS', 'OF', 'OFF', 'OMITTED', 'ON', 'ONLY',
119
+ 'OPTIONAL', 'ORDER', 'ORGANIZATION', 'OTHER', 'OUTPUT', 'OVERFLOW',
120
+ 'OVERLINE', 'PACKED-DECIMAL', 'PADDING', 'PAGE', 'PARAGRAPH',
121
+ 'PLUS', 'POINTER', 'POSITION', 'POSITIVE', 'PRESENT', 'PREVIOUS',
122
+ 'PRINTER', 'PRINTING', 'PROCEDURE-POINTER', 'PROCEDURES',
123
+ 'PROCEED', 'PROGRAM', 'PROGRAM-POINTER', 'PROMPT', 'QUOTE',
124
+ 'QUOTES', 'RANDOM', 'RD', 'RECORD', 'RECORDING', 'RECORDS', 'RECURSIVE',
125
+ 'REDEFINES', 'REEL', 'REFERENCE', 'RELATIVE', 'REMAINDER', 'REMOVAL',
126
+ 'RENAMES', 'REPLACING', 'REPORT', 'REPORTING', 'REPORTS', 'REPOSITORY',
127
+ 'REQUIRED', 'RESERVE', 'RETURNING', 'REVERSE-VIDEO', 'REWIND',
128
+ 'RIGHT', 'ROLLBACK', 'ROUNDED', 'RUN', 'SAME', 'SCROLL',
129
+ 'SECURE', 'SEGMENT-LIMIT', 'SELECT', 'SENTENCE', 'SEPARATE',
130
+ 'SEQUENCE', 'SEQUENTIAL', 'SHARING', 'SIGN', 'SIGNED', 'SIGNED-INT',
131
+ 'SIGNED-LONG', 'SIGNED-SHORT', 'SIZE', 'SORT-MERGE', 'SOURCE',
132
+ 'SOURCE-COMPUTER', 'SPECIAL-NAMES', 'STANDARD',
133
+ 'STANDARD-1', 'STANDARD-2', 'STATUS', 'SUBKEY', 'SUM',
134
+ 'SYMBOLIC', 'SYNC', 'SYNCHRONIZED', 'TALLYING', 'TAPE',
135
+ 'TEST', 'THROUGH', 'THRU', 'TIME', 'TIMES', 'TO', 'TOP', 'TRAILING',
136
+ 'TRANSFORM', 'TYPE', 'UNDERLINE', 'UNIT', 'UNSIGNED',
137
+ 'UNSIGNED-INT', 'UNSIGNED-LONG', 'UNSIGNED-SHORT', 'UNTIL', 'UP',
138
+ 'UPDATE', 'UPON', 'USAGE', 'USING', 'VALUE', 'VALUES', 'VARYING',
139
+ 'WAIT', 'WHEN', 'WITH', 'WORDS', 'YYYYDDD', 'YYYYMMDD'),
140
+ prefix=r'(^|(?<=[^\w\-]))', suffix=r'\s*($|(?=[^\w\-]))'),
141
+ Keyword.Pseudo),
142
+
143
+ # inactive reserved words
144
+ (words((
145
+ 'ACTIVE-CLASS', 'ALIGNED', 'ANYCASE', 'ARITHMETIC', 'ATTRIBUTE',
146
+ 'B-AND', 'B-NOT', 'B-OR', 'B-XOR', 'BIT', 'BOOLEAN', 'CD', 'CENTER',
147
+ 'CF', 'CH', 'CHAIN', 'CLASS-ID', 'CLASSIFICATION', 'COMMUNICATION',
148
+ 'CONDITION', 'DATA-POINTER', 'DESTINATION', 'DISABLE', 'EC', 'EGI',
149
+ 'EMI', 'ENABLE', 'END-RECEIVE', 'ENTRY-CONVENTION', 'EO', 'ESI',
150
+ 'EXCEPTION-OBJECT', 'EXPANDS', 'FACTORY', 'FLOAT-BINARY-16',
151
+ 'FLOAT-BINARY-34', 'FLOAT-BINARY-7', 'FLOAT-DECIMAL-16',
152
+ 'FLOAT-DECIMAL-34', 'FLOAT-EXTENDED', 'FORMAT', 'FUNCTION-POINTER',
153
+ 'GET', 'GROUP-USAGE', 'IMPLEMENTS', 'INFINITY', 'INHERITS',
154
+ 'INTERFACE', 'INTERFACE-ID', 'INVOKE', 'LC_ALL', 'LC_COLLATE',
155
+ 'LC_CTYPE', 'LC_MESSAGES', 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME',
156
+ 'LINE-COUNTER', 'MESSAGE', 'METHOD', 'METHOD-ID', 'NESTED', 'NONE',
157
+ 'NORMAL', 'OBJECT', 'OBJECT-REFERENCE', 'OPTIONS', 'OVERRIDE',
158
+ 'PAGE-COUNTER', 'PF', 'PH', 'PROPERTY', 'PROTOTYPE', 'PURGE',
159
+ 'QUEUE', 'RAISE', 'RAISING', 'RECEIVE', 'RELATION', 'REPLACE',
160
+ 'REPRESENTS-NOT-A-NUMBER', 'RESET', 'RESUME', 'RETRY', 'RF', 'RH',
161
+ 'SECONDS', 'SEGMENT', 'SELF', 'SEND', 'SOURCES', 'STATEMENT',
162
+ 'STEP', 'STRONG', 'SUB-QUEUE-1', 'SUB-QUEUE-2', 'SUB-QUEUE-3',
163
+ 'SUPER', 'SYMBOL', 'SYSTEM-DEFAULT', 'TABLE', 'TERMINAL', 'TEXT',
164
+ 'TYPEDEF', 'UCS-4', 'UNIVERSAL', 'USER-DEFAULT', 'UTF-16', 'UTF-8',
165
+ 'VAL-STATUS', 'VALID', 'VALIDATE', 'VALIDATE-STATUS'),
166
+ prefix=r'(^|(?<=[^\w\-]))', suffix=r'\s*($|(?=[^\w\-]))'),
167
+ Error),
168
+
169
+ # Data Types
170
+ (r'(^|(?<=[^\w\-]))'
171
+ r'(PIC\s+.+?(?=(\s|\.\s))|PICTURE\s+.+?(?=(\s|\.\s))|'
172
+ r'(COMPUTATIONAL)(-[1-5X])?|(COMP)(-[1-5X])?|'
173
+ r'BINARY-C-LONG|'
174
+ r'BINARY-CHAR|BINARY-DOUBLE|BINARY-LONG|BINARY-SHORT|'
175
+ r'BINARY)\s*($|(?=[^\w\-]))', Keyword.Type),
176
+
177
+ # Operators
178
+ (r'(\*\*|\*|\+|-|/|<=|>=|<|>|==|/=|=)', Operator),
179
+
180
+ # (r'(::)', Keyword.Declaration),
181
+
182
+ (r'([(),;:&%.])', Punctuation),
183
+
184
+ # Intrinsics
185
+ (r'(^|(?<=[^\w\-]))(ABS|ACOS|ANNUITY|ASIN|ATAN|BYTE-LENGTH|'
186
+ r'CHAR|COMBINED-DATETIME|CONCATENATE|COS|CURRENT-DATE|'
187
+ r'DATE-OF-INTEGER|DATE-TO-YYYYMMDD|DAY-OF-INTEGER|DAY-TO-YYYYDDD|'
188
+ r'EXCEPTION-(?:FILE|LOCATION|STATEMENT|STATUS)|EXP10|EXP|E|'
189
+ r'FACTORIAL|FRACTION-PART|INTEGER-OF-(?:DATE|DAY|PART)|INTEGER|'
190
+ r'LENGTH|LOCALE-(?:DATE|TIME(?:-FROM-SECONDS)?)|LOG(?:10)?|'
191
+ r'LOWER-CASE|MAX|MEAN|MEDIAN|MIDRANGE|MIN|MOD|NUMVAL(?:-C)?|'
192
+ r'ORD(?:-MAX|-MIN)?|PI|PRESENT-VALUE|RANDOM|RANGE|REM|REVERSE|'
193
+ r'SECONDS-FROM-FORMATTED-TIME|SECONDS-PAST-MIDNIGHT|SIGN|SIN|SQRT|'
194
+ r'STANDARD-DEVIATION|STORED-CHAR-LENGTH|SUBSTITUTE(?:-CASE)?|'
195
+ r'SUM|TAN|TEST-DATE-YYYYMMDD|TEST-DAY-YYYYDDD|TRIM|'
196
+ r'UPPER-CASE|VARIANCE|WHEN-COMPILED|YEAR-TO-YYYY)\s*'
197
+ r'($|(?=[^\w\-]))', Name.Function),
198
+
199
+ # Booleans
200
+ (r'(^|(?<=[^\w\-]))(true|false)\s*($|(?=[^\w\-]))', Name.Builtin),
201
+ # Comparing Operators
202
+ (r'(^|(?<=[^\w\-]))(equal|equals|ne|lt|le|gt|ge|'
203
+ r'greater|less|than|not|and|or)\s*($|(?=[^\w\-]))', Operator.Word),
204
+ ],
205
+
206
+ # \"[^\"\n]*\"|\'[^\'\n]*\'
207
+ 'strings': [
208
+ # apparently strings can be delimited by EOL if they are continued
209
+ # in the next line
210
+ (r'"[^"\n]*("|\n)', String.Double),
211
+ (r"'[^'\n]*('|\n)", String.Single),
212
+ ],
213
+
214
+ 'nums': [
215
+ (r'\d+(\s*|\.$|$)', Number.Integer),
216
+ (r'[+-]?\d*\.\d+(E[-+]?\d+)?', Number.Float),
217
+ (r'[+-]?\d+\.\d*(E[-+]?\d+)?', Number.Float),
218
+ ],
219
+ }
220
+
221
+
222
+ class CobolFreeformatLexer(CobolLexer):
223
+ """
224
+ Lexer for Free format OpenCOBOL code.
225
+ """
226
+ name = 'COBOLFree'
227
+ aliases = ['cobolfree']
228
+ filenames = ['*.cbl', '*.CBL']
229
+ mimetypes = []
230
+ url = 'https://opencobol.add1tocobol.com'
231
+ version_added = '1.6'
232
+
233
+ flags = re.IGNORECASE | re.MULTILINE
234
+
235
+ tokens = {
236
+ 'comment': [
237
+ (r'(\*>.*\n|^\w*\*.*$)', Comment),
238
+ ],
239
+ }
240
+
241
+
242
+ class ABAPLexer(RegexLexer):
243
+ """
244
+ Lexer for ABAP, SAP's integrated language.
245
+ """
246
+ name = 'ABAP'
247
+ aliases = ['abap']
248
+ filenames = ['*.abap', '*.ABAP']
249
+ mimetypes = ['text/x-abap']
250
+ url = 'https://community.sap.com/topics/abap'
251
+ version_added = '1.1'
252
+
253
+ flags = re.IGNORECASE | re.MULTILINE
254
+
255
+ tokens = {
256
+ 'common': [
257
+ (r'\s+', Whitespace),
258
+ (r'^\*.*$', Comment.Single),
259
+ (r'\".*?\n', Comment.Single),
260
+ (r'##\w+', Comment.Special),
261
+ ],
262
+ 'variable-names': [
263
+ (r'<\S+>', Name.Variable),
264
+ (r'\w[\w~]*(?:(\[\])|->\*)?', Name.Variable),
265
+ ],
266
+ 'root': [
267
+ include('common'),
268
+ # function calls
269
+ (r'CALL\s+(?:BADI|CUSTOMER-FUNCTION|FUNCTION)',
270
+ Keyword),
271
+ (r'(CALL\s+(?:DIALOG|SCREEN|SUBSCREEN|SELECTION-SCREEN|'
272
+ r'TRANSACTION|TRANSFORMATION))\b',
273
+ Keyword),
274
+ (r'(FORM|PERFORM)(\s+)(\w+)',
275
+ bygroups(Keyword, Whitespace, Name.Function)),
276
+ (r'(PERFORM)(\s+)(\()(\w+)(\))',
277
+ bygroups(Keyword, Whitespace, Punctuation, Name.Variable, Punctuation)),
278
+ (r'(MODULE)(\s+)(\S+)(\s+)(INPUT|OUTPUT)',
279
+ bygroups(Keyword, Whitespace, Name.Function, Whitespace, Keyword)),
280
+
281
+ # method implementation
282
+ (r'(METHOD)(\s+)([\w~]+)',
283
+ bygroups(Keyword, Whitespace, Name.Function)),
284
+ # method calls
285
+ (r'(\s+)([\w\-]+)([=\-]>)([\w\-~]+)',
286
+ bygroups(Whitespace, Name.Variable, Operator, Name.Function)),
287
+ # call methodnames returning style
288
+ (r'(?<=[=-]>)([\w\-~]+)(?=\()', Name.Function),
289
+
290
+ # text elements
291
+ (r'(TEXT)(-)(\d{3})',
292
+ bygroups(Keyword, Punctuation, Number.Integer)),
293
+ (r'(TEXT)(-)(\w{3})',
294
+ bygroups(Keyword, Punctuation, Name.Variable)),
295
+
296
+ # keywords with dashes in them.
297
+ # these need to be first, because for instance the -ID part
298
+ # of MESSAGE-ID wouldn't get highlighted if MESSAGE was
299
+ # first in the list of keywords.
300
+ (r'(ADD-CORRESPONDING|AUTHORITY-CHECK|'
301
+ r'CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|'
302
+ r'DELETE-ADJACENT|DIVIDE-CORRESPONDING|'
303
+ r'EDITOR-CALL|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|EXIT-COMMAND|'
304
+ r'FIELD-GROUPS|FIELD-SYMBOLS|FIELD-SYMBOL|FUNCTION-POOL|'
305
+ r'INTERFACE-POOL|INVERTED-DATE|'
306
+ r'LOAD-OF-PROGRAM|LOG-POINT|'
307
+ r'MESSAGE-ID|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|'
308
+ r'NEW-LINE|NEW-PAGE|NEW-SECTION|NO-EXTENSION|'
309
+ r'OUTPUT-LENGTH|PRINT-CONTROL|'
310
+ r'SELECT-OPTIONS|START-OF-SELECTION|SUBTRACT-CORRESPONDING|'
311
+ r'SYNTAX-CHECK|SYSTEM-EXCEPTIONS|'
312
+ r'TYPE-POOL|TYPE-POOLS|NO-DISPLAY'
313
+ r')\b', Keyword),
314
+
315
+ # keyword kombinations
316
+ (r'(?<![-\>])(CREATE\s+(PUBLIC|PRIVATE|DATA|OBJECT)|'
317
+ r'(PUBLIC|PRIVATE|PROTECTED)\s+SECTION|'
318
+ r'(TYPE|LIKE)\s+((LINE\s+OF|REF\s+TO|'
319
+ r'(SORTED|STANDARD|HASHED)\s+TABLE\s+OF))?|'
320
+ r'FROM\s+(DATABASE|MEMORY)|CALL\s+METHOD|'
321
+ r'(GROUP|ORDER) BY|HAVING|SEPARATED BY|'
322
+ r'GET\s+(BADI|BIT|CURSOR|DATASET|LOCALE|PARAMETER|'
323
+ r'PF-STATUS|(PROPERTY|REFERENCE)\s+OF|'
324
+ r'RUN\s+TIME|TIME\s+(STAMP)?)?|'
325
+ r'SET\s+(BIT|BLANK\s+LINES|COUNTRY|CURSOR|DATASET|EXTENDED\s+CHECK|'
326
+ r'HANDLER|HOLD\s+DATA|LANGUAGE|LEFT\s+SCROLL-BOUNDARY|'
327
+ r'LOCALE|MARGIN|PARAMETER|PF-STATUS|PROPERTY\s+OF|'
328
+ r'RUN\s+TIME\s+(ANALYZER|CLOCK\s+RESOLUTION)|SCREEN|'
329
+ r'TITLEBAR|UPADTE\s+TASK\s+LOCAL|USER-COMMAND)|'
330
+ r'CONVERT\s+((INVERTED-)?DATE|TIME|TIME\s+STAMP|TEXT)|'
331
+ r'(CLOSE|OPEN)\s+(DATASET|CURSOR)|'
332
+ r'(TO|FROM)\s+(DATA BUFFER|INTERNAL TABLE|MEMORY ID|'
333
+ r'DATABASE|SHARED\s+(MEMORY|BUFFER))|'
334
+ r'DESCRIBE\s+(DISTANCE\s+BETWEEN|FIELD|LIST|TABLE)|'
335
+ r'FREE\s(MEMORY|OBJECT)?|'
336
+ r'PROCESS\s+(BEFORE\s+OUTPUT|AFTER\s+INPUT|'
337
+ r'ON\s+(VALUE-REQUEST|HELP-REQUEST))|'
338
+ r'AT\s+(LINE-SELECTION|USER-COMMAND|END\s+OF|NEW)|'
339
+ r'AT\s+SELECTION-SCREEN(\s+(ON(\s+(BLOCK|(HELP|VALUE)-REQUEST\s+FOR|'
340
+ r'END\s+OF|RADIOBUTTON\s+GROUP))?|OUTPUT))?|'
341
+ r'SELECTION-SCREEN:?\s+((BEGIN|END)\s+OF\s+((TABBED\s+)?BLOCK|LINE|'
342
+ r'SCREEN)|COMMENT|FUNCTION\s+KEY|'
343
+ r'INCLUDE\s+BLOCKS|POSITION|PUSHBUTTON|'
344
+ r'SKIP|ULINE)|'
345
+ r'LEAVE\s+(LIST-PROCESSING|PROGRAM|SCREEN|'
346
+ r'TO LIST-PROCESSING|TO TRANSACTION)'
347
+ r'(ENDING|STARTING)\s+AT|'
348
+ r'FORMAT\s+(COLOR|INTENSIFIED|INVERSE|HOTSPOT|INPUT|FRAMES|RESET)|'
349
+ r'AS\s+(CHECKBOX|SUBSCREEN|WINDOW)|'
350
+ r'WITH\s+(((NON-)?UNIQUE)?\s+KEY|FRAME)|'
351
+ r'(BEGIN|END)\s+OF|'
352
+ r'DELETE(\s+ADJACENT\s+DUPLICATES\sFROM)?|'
353
+ r'COMPARING(\s+ALL\s+FIELDS)?|'
354
+ r'(INSERT|APPEND)(\s+INITIAL\s+LINE\s+(IN)?TO|\s+LINES\s+OF)?|'
355
+ r'IN\s+((BYTE|CHARACTER)\s+MODE|PROGRAM)|'
356
+ r'END-OF-(DEFINITION|PAGE|SELECTION)|'
357
+ r'WITH\s+FRAME(\s+TITLE)|'
358
+ r'(REPLACE|FIND)\s+((FIRST|ALL)\s+OCCURRENCES?\s+OF\s+)?(SUBSTRING|REGEX)?|'
359
+ r'MATCH\s+(LENGTH|COUNT|LINE|OFFSET)|'
360
+ r'(RESPECTING|IGNORING)\s+CASE|'
361
+ r'IN\s+UPDATE\s+TASK|'
362
+ r'(SOURCE|RESULT)\s+(XML)?|'
363
+ r'REFERENCE\s+INTO|'
364
+
365
+ # simple kombinations
366
+ r'AND\s+(MARK|RETURN)|CLIENT\s+SPECIFIED|CORRESPONDING\s+FIELDS\s+OF|'
367
+ r'IF\s+FOUND|FOR\s+EVENT|INHERITING\s+FROM|LEAVE\s+TO\s+SCREEN|'
368
+ r'LOOP\s+AT\s+(SCREEN)?|LOWER\s+CASE|MATCHCODE\s+OBJECT|MODIF\s+ID|'
369
+ r'MODIFY\s+SCREEN|NESTING\s+LEVEL|NO\s+INTERVALS|OF\s+STRUCTURE|'
370
+ r'RADIOBUTTON\s+GROUP|RANGE\s+OF|REF\s+TO|SUPPRESS DIALOG|'
371
+ r'TABLE\s+OF|UPPER\s+CASE|TRANSPORTING\s+NO\s+FIELDS|'
372
+ r'VALUE\s+CHECK|VISIBLE\s+LENGTH|HEADER\s+LINE|COMMON\s+PART)\b', Keyword),
373
+
374
+ # single word keywords.
375
+ (r'(^|(?<=(\s|\.)))(ABBREVIATED|ABSTRACT|ADD|ALIASES|ALIGN|ALPHA|'
376
+ r'ASSERT|AS|ASSIGN(ING)?|AT(\s+FIRST)?|'
377
+ r'BACK|BLOCK|BREAK-POINT|'
378
+ r'CASE|CAST|CATCH|CHANGING|CHECK|CLASS|CLEAR|COLLECT|COLOR|COMMIT|COND|CONV|'
379
+ r'CREATE|COMMUNICATION|COMPONENTS?|COMPUTE|CONCATENATE|CONDENSE|'
380
+ r'CONSTANTS|CONTEXTS|CONTINUE|CONTROLS|COUNTRY|CURRENCY|'
381
+ r'DATA|DATE|DECIMALS|DEFAULT|DEFINE|DEFINITION|DEFERRED|DEMAND|'
382
+ r'DETAIL|DIRECTORY|DIVIDE|DO|DUMMY|'
383
+ r'ELSE(IF)?|ENDAT|ENDCASE|ENDCATCH|ENDCLASS|ENDDO|ENDFORM|ENDFUNCTION|'
384
+ r'ENDIF|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDSELECT|ENDTRY|ENDWHILE|'
385
+ r'ENHANCEMENT|EVENTS|EXACT|EXCEPTIONS?|EXIT|EXPONENT|EXPORT|EXPORTING|EXTRACT|'
386
+ r'FETCH|FIELDS?|FOR|FORM|FORMAT|FREE|FROM|FUNCTION|'
387
+ r'HIDE|'
388
+ r'ID|IF|IMPORT|IMPLEMENTATION|IMPORTING|IN|INCLUDE|INCLUDING|'
389
+ r'INDEX|INFOTYPES|INITIALIZATION|INTERFACE|INTERFACES|INTO|'
390
+ r'LANGUAGE|LEAVE|LENGTH|LINES|LOAD|LOCAL|'
391
+ r'JOIN|'
392
+ r'KEY|'
393
+ r'NEW|NEXT|'
394
+ r'MAXIMUM|MESSAGE|METHOD[S]?|MINIMUM|MODULE|MODIFIER|MODIFY|MOVE|MULTIPLY|'
395
+ r'NODES|NUMBER|'
396
+ r'OBLIGATORY|OBJECT|OF|OFF|ON|OTHERS|OVERLAY|'
397
+ r'PACK|PAD|PARAMETERS|PERCENTAGE|POSITION|PROGRAM|PROVIDE|PUBLIC|PUT|PF\d\d|'
398
+ r'RAISE|RAISING|RANGES?|READ|RECEIVE|REDEFINITION|REFRESH|REJECT|REPORT|RESERVE|'
399
+ r'REF|RESUME|RETRY|RETURN|RETURNING|RIGHT|ROLLBACK|REPLACE|'
400
+ r'SCROLL|SEARCH|SELECT|SHIFT|SIGN|SINGLE|SIZE|SKIP|SORT|SPLIT|STATICS|STOP|'
401
+ r'STYLE|SUBMATCHES|SUBMIT|SUBTRACT|SUM(?!\()|SUMMARY|SUMMING|SUPPLY|SWITCH|'
402
+ r'TABLE|TABLES|TIMESTAMP|TIMES?|TIMEZONE|TITLE|\??TO|'
403
+ r'TOP-OF-PAGE|TRANSFER|TRANSLATE|TRY|TYPES|'
404
+ r'ULINE|UNDER|UNPACK|UPDATE|USING|'
405
+ r'VALUE|VALUES|VIA|VARYING|VARY|'
406
+ r'WAIT|WHEN|WHERE|WIDTH|WHILE|WITH|WINDOW|WRITE|XSD|ZERO)\b', Keyword),
407
+
408
+ # builtins
409
+ (r'(abs|acos|asin|atan|'
410
+ r'boolc|boolx|bit_set|'
411
+ r'char_off|charlen|ceil|cmax|cmin|condense|contains|'
412
+ r'contains_any_of|contains_any_not_of|concat_lines_of|cos|cosh|'
413
+ r'count|count_any_of|count_any_not_of|'
414
+ r'dbmaxlen|distance|'
415
+ r'escape|exp|'
416
+ r'find|find_end|find_any_of|find_any_not_of|floor|frac|from_mixed|'
417
+ r'insert|'
418
+ r'lines|log|log10|'
419
+ r'match|matches|'
420
+ r'nmax|nmin|numofchar|'
421
+ r'repeat|replace|rescale|reverse|round|'
422
+ r'segment|shift_left|shift_right|sign|sin|sinh|sqrt|strlen|'
423
+ r'substring|substring_after|substring_from|substring_before|substring_to|'
424
+ r'tan|tanh|to_upper|to_lower|to_mixed|translate|trunc|'
425
+ r'xstrlen)(\()\b', bygroups(Name.Builtin, Punctuation)),
426
+
427
+ (r'&[0-9]', Name),
428
+ (r'[0-9]+', Number.Integer),
429
+
430
+ # operators which look like variable names before
431
+ # parsing variable names.
432
+ (r'(?<=(\s|.))(AND|OR|EQ|NE|GT|LT|GE|LE|CO|CN|CA|NA|CS|NOT|NS|CP|NP|'
433
+ r'BYTE-CO|BYTE-CN|BYTE-CA|BYTE-NA|BYTE-CS|BYTE-NS|'
434
+ r'IS\s+(NOT\s+)?(INITIAL|ASSIGNED|REQUESTED|BOUND))\b', Operator.Word),
435
+
436
+ include('variable-names'),
437
+
438
+ # standard operators after variable names,
439
+ # because < and > are part of field symbols.
440
+ (r'[?*<>=\-+&]', Operator),
441
+ (r"'(''|[^'])*'", String.Single),
442
+ (r"`([^`])*`", String.Single),
443
+ (r"([|}])([^{}|]*?)([|{])",
444
+ bygroups(Punctuation, String.Single, Punctuation)),
445
+ (r'[/;:()\[\],.]', Punctuation),
446
+ (r'(!)(\w+)', bygroups(Operator, Name)),
447
+ ],
448
+ }
449
+
450
+
451
+ class OpenEdgeLexer(RegexLexer):
452
+ """
453
+ Lexer for OpenEdge ABL (formerly Progress) source code.
454
+ """
455
+ name = 'OpenEdge ABL'
456
+ aliases = ['openedge', 'abl', 'progress']
457
+ filenames = ['*.p', '*.cls']
458
+ mimetypes = ['text/x-openedge', 'application/x-openedge']
459
+ url = 'https://www.progress.com/openedge/features/abl'
460
+ version_added = '1.5'
461
+
462
+ types = (r'(?i)(^|(?<=[^\w\-]))(CHARACTER|CHAR|CHARA|CHARAC|CHARACT|CHARACTE|'
463
+ r'COM-HANDLE|DATE|DATETIME|DATETIME-TZ|'
464
+ r'DECIMAL|DEC|DECI|DECIM|DECIMA|HANDLE|'
465
+ r'INT64|INTEGER|INT|INTE|INTEG|INTEGE|'
466
+ r'LOGICAL|LONGCHAR|MEMPTR|RAW|RECID|ROWID)\s*($|(?=[^\w\-]))')
467
+
468
+ keywords = words(OPENEDGEKEYWORDS,
469
+ prefix=r'(?i)(^|(?<=[^\w\-]))',
470
+ suffix=r'\s*($|(?=[^\w\-]))')
471
+
472
+ tokens = {
473
+ 'root': [
474
+ (r'/\*', Comment.Multiline, 'comment'),
475
+ (r'\{', Comment.Preproc, 'preprocessor'),
476
+ (r'\s*&.*', Comment.Preproc),
477
+ (r'0[xX][0-9a-fA-F]+[LlUu]*', Number.Hex),
478
+ (r'(?i)(DEFINE|DEF|DEFI|DEFIN)\b', Keyword.Declaration),
479
+ (types, Keyword.Type),
480
+ (keywords, Name.Builtin),
481
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
482
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
483
+ (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
484
+ (r'[0-9]+', Number.Integer),
485
+ (r'\s+', Whitespace),
486
+ (r'[+*/=-]', Operator),
487
+ (r'[.:()]', Punctuation),
488
+ (r'.', Name.Variable), # Lazy catch-all
489
+ ],
490
+ 'comment': [
491
+ (r'[^*/]', Comment.Multiline),
492
+ (r'/\*', Comment.Multiline, '#push'),
493
+ (r'\*/', Comment.Multiline, '#pop'),
494
+ (r'[*/]', Comment.Multiline)
495
+ ],
496
+ 'preprocessor': [
497
+ (r'[^{}]', Comment.Preproc),
498
+ (r'\{', Comment.Preproc, '#push'),
499
+ (r'\}', Comment.Preproc, '#pop'),
500
+ ],
501
+ }
502
+
503
+ def analyse_text(text):
504
+ """Try to identify OpenEdge ABL based on a few common constructs."""
505
+ result = 0
506
+
507
+ if 'END.' in text:
508
+ result += 0.05
509
+
510
+ if 'END PROCEDURE.' in text:
511
+ result += 0.05
512
+
513
+ if 'ELSE DO:' in text:
514
+ result += 0.05
515
+
516
+ return result
517
+
518
+
519
+ class GoodDataCLLexer(RegexLexer):
520
+ """
521
+ Lexer for GoodData-CL script files.
522
+ """
523
+
524
+ name = 'GoodData-CL'
525
+ aliases = ['gooddata-cl']
526
+ filenames = ['*.gdc']
527
+ mimetypes = ['text/x-gooddata-cl']
528
+ url = 'https://github.com/gooddata/GoodData-CL'
529
+ version_added = '1.4'
530
+
531
+ flags = re.IGNORECASE
532
+
533
+ # Syntax:
534
+ # https://github.com/gooddata/GoodData-CL/raw/master/cli/src/main/resources/com/gooddata/processor/COMMANDS.txt
535
+ tokens = {
536
+ 'root': [
537
+ # Comments
538
+ (r'#.*', Comment.Single),
539
+ # Function call
540
+ (r'[a-z]\w*', Name.Function),
541
+ # Argument list
542
+ (r'\(', Punctuation, 'args-list'),
543
+ # Punctuation
544
+ (r';', Punctuation),
545
+ # Space is not significant
546
+ (r'\s+', Text)
547
+ ],
548
+ 'args-list': [
549
+ (r'\)', Punctuation, '#pop'),
550
+ (r',', Punctuation),
551
+ (r'[a-z]\w*', Name.Variable),
552
+ (r'=', Operator),
553
+ (r'"', String, 'string-literal'),
554
+ (r'[0-9]+(?:\.[0-9]+)?(?:e[+-]?[0-9]{1,3})?', Number),
555
+ # Space is not significant
556
+ (r'\s', Whitespace)
557
+ ],
558
+ 'string-literal': [
559
+ (r'\\[tnrfbae"\\]', String.Escape),
560
+ (r'"', String, '#pop'),
561
+ (r'[^\\"]+', String)
562
+ ]
563
+ }
564
+
565
+
566
+ class MaqlLexer(RegexLexer):
567
+ """
568
+ Lexer for GoodData MAQL scripts.
569
+ """
570
+
571
+ name = 'MAQL'
572
+ aliases = ['maql']
573
+ filenames = ['*.maql']
574
+ mimetypes = ['text/x-gooddata-maql', 'application/x-gooddata-maql']
575
+ url = 'https://help.gooddata.com/doc/enterprise/en/dashboards-and-insights/maql-analytical-query-language'
576
+ version_added = '1.4'
577
+
578
+ flags = re.IGNORECASE
579
+ tokens = {
580
+ 'root': [
581
+ # IDENTITY
582
+ (r'IDENTIFIER\b', Name.Builtin),
583
+ # IDENTIFIER
584
+ (r'\{[^}]+\}', Name.Variable),
585
+ # NUMBER
586
+ (r'[0-9]+(?:\.[0-9]+)?(?:e[+-]?[0-9]{1,3})?', Number),
587
+ # STRING
588
+ (r'"', String, 'string-literal'),
589
+ # RELATION
590
+ (r'\<\>|\!\=', Operator),
591
+ (r'\=|\>\=|\>|\<\=|\<', Operator),
592
+ # :=
593
+ (r'\:\=', Operator),
594
+ # OBJECT
595
+ (r'\[[^]]+\]', Name.Variable.Class),
596
+ # keywords
597
+ (words((
598
+ 'DIMENSION', 'DIMENSIONS', 'BOTTOM', 'METRIC', 'COUNT', 'OTHER',
599
+ 'FACT', 'WITH', 'TOP', 'OR', 'ATTRIBUTE', 'CREATE', 'PARENT',
600
+ 'FALSE', 'ROW', 'ROWS', 'FROM', 'ALL', 'AS', 'PF', 'COLUMN',
601
+ 'COLUMNS', 'DEFINE', 'REPORT', 'LIMIT', 'TABLE', 'LIKE', 'AND',
602
+ 'BY', 'BETWEEN', 'EXCEPT', 'SELECT', 'MATCH', 'WHERE', 'TRUE',
603
+ 'FOR', 'IN', 'WITHOUT', 'FILTER', 'ALIAS', 'WHEN', 'NOT', 'ON',
604
+ 'KEYS', 'KEY', 'FULLSET', 'PRIMARY', 'LABELS', 'LABEL',
605
+ 'VISUAL', 'TITLE', 'DESCRIPTION', 'FOLDER', 'ALTER', 'DROP',
606
+ 'ADD', 'DATASET', 'DATATYPE', 'INT', 'BIGINT', 'DOUBLE', 'DATE',
607
+ 'VARCHAR', 'DECIMAL', 'SYNCHRONIZE', 'TYPE', 'DEFAULT', 'ORDER',
608
+ 'ASC', 'DESC', 'HYPERLINK', 'INCLUDE', 'TEMPLATE', 'MODIFY'),
609
+ suffix=r'\b'),
610
+ Keyword),
611
+ # FUNCNAME
612
+ (r'[a-z]\w*\b', Name.Function),
613
+ # Comments
614
+ (r'#.*', Comment.Single),
615
+ # Punctuation
616
+ (r'[,;()]', Punctuation),
617
+ # Space is not significant
618
+ (r'\s+', Whitespace)
619
+ ],
620
+ 'string-literal': [
621
+ (r'\\[tnrfbae"\\]', String.Escape),
622
+ (r'"', String, '#pop'),
623
+ (r'[^\\"]+', String)
624
+ ],
625
+ }
venv/Lib/site-packages/pygments/lexers/c_cpp.py ADDED
@@ -0,0 +1,481 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.c_cpp
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for C/C++ languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, include, bygroups, using, \
14
+ this, inherit, default, words
15
+ from pygments.util import get_bool_opt
16
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
17
+ Number, Punctuation, Whitespace
18
+
19
+ __all__ = ['CLexer', 'CppLexer']
20
+
21
+
22
+ class CFamilyLexer(RegexLexer):
23
+ """
24
+ For C family source code. This is used as a base class to avoid repetitious
25
+ definitions.
26
+ """
27
+
28
+ # The trailing ?, rather than *, avoids a geometric performance drop here.
29
+ #: only one /* */ style comment
30
+ _ws1 = r'\s*(?:/[*].*?[*]/\s*)?'
31
+
32
+ # Hexadecimal part in an hexadecimal integer/floating-point literal.
33
+ # This includes decimal separators matching.
34
+ _hexpart = r'[0-9a-fA-F](\'?[0-9a-fA-F])*'
35
+ # Decimal part in an decimal integer/floating-point literal.
36
+ # This includes decimal separators matching.
37
+ _decpart = r'\d(\'?\d)*'
38
+ # Integer literal suffix (e.g. 'ull' or 'll').
39
+ _intsuffix = r'(([uU]?[zZ])|([zZ][uU])|([uU][lL]{0,2})|([lL]{1,2}[uU]?))?'
40
+
41
+ # Identifier regex with C and C++ Universal Character Name (UCN) support.
42
+ _ident = r'(?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8})+'
43
+ _namespaced_ident = r'(?!\d)(?:[\w$]|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|::)+'
44
+
45
+ # Single and multiline comment regexes
46
+ # Beware not to use *? for the inner content! When these regexes
47
+ # are embedded in larger regexes, that can cause the stuff*? to
48
+ # match more than it would have if the regex had been used in
49
+ # a standalone way ...
50
+ _comment_single = r'//(?:.|(?<=\\)\n)*\n'
51
+ _comment_multiline = r'/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/'
52
+
53
+ # Regex to match optional comments
54
+ _possible_comments = rf'\s*(?:(?:(?:{_comment_single})|(?:{_comment_multiline}))\s*)*'
55
+
56
+ tokens = {
57
+ 'whitespace': [
58
+ # preprocessor directives: without whitespace
59
+ (r'^#if\s+0', Comment.Preproc, 'if0'),
60
+ ('^#', Comment.Preproc, 'macro'),
61
+ # or with whitespace
62
+ ('^(' + _ws1 + r')(#if\s+0)',
63
+ bygroups(using(this), Comment.Preproc), 'if0'),
64
+ ('^(' + _ws1 + ')(#)',
65
+ bygroups(using(this), Comment.Preproc), 'macro'),
66
+ # Labels:
67
+ # Line start and possible indentation.
68
+ (r'(^[ \t]*)'
69
+ # Not followed by keywords which can be mistaken as labels.
70
+ r'(?!(?:public|private|protected|default)\b)'
71
+ # Actual label, followed by a single colon.
72
+ r'(' + _ident + r')(\s*)(:)(?!:)',
73
+ bygroups(Whitespace, Name.Label, Whitespace, Punctuation)),
74
+ (r'\n', Whitespace),
75
+ (r'[^\S\n]+', Whitespace),
76
+ (r'\\\n', Text), # line continuation
77
+ (_comment_single, Comment.Single),
78
+ (_comment_multiline, Comment.Multiline),
79
+ # Open until EOF, so no ending delimiter
80
+ (r'/(\\\n)?[*][\w\W]*', Comment.Multiline),
81
+ ],
82
+ 'statements': [
83
+ include('keywords'),
84
+ include('types'),
85
+ (r'([LuU]|u8)?(")', bygroups(String.Affix, String), 'string'),
86
+ (r"([LuU]|u8)?(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')",
87
+ bygroups(String.Affix, String.Char, String.Char, String.Char)),
88
+
89
+ # Hexadecimal floating-point literals (C11, C++17)
90
+ (r'0[xX](' + _hexpart + r'\.' + _hexpart + r'|\.' + _hexpart +
91
+ r'|' + _hexpart + r')[pP][+-]?' + _hexpart + r'[lL]?', Number.Float),
92
+
93
+ (r'(-)?(' + _decpart + r'\.' + _decpart + r'|\.' + _decpart + r'|' +
94
+ _decpart + r')[eE][+-]?' + _decpart + r'[fFlL]?', Number.Float),
95
+ (r'(-)?((' + _decpart + r'\.(' + _decpart + r')?|\.' +
96
+ _decpart + r')[fFlL]?)|(' + _decpart + r'[fFlL])', Number.Float),
97
+ (r'(-)?0[xX]' + _hexpart + _intsuffix, Number.Hex),
98
+ (r'(-)?0[bB][01](\'?[01])*' + _intsuffix, Number.Bin),
99
+ (r'(-)?0(\'?[0-7])+' + _intsuffix, Number.Oct),
100
+ (r'(-)?' + _decpart + _intsuffix, Number.Integer),
101
+ (r'[~!%^&*+=|?:<>/-]', Operator),
102
+ (r'[()\[\],.]', Punctuation),
103
+ (r'(true|false|NULL|nullptr)\b', Name.Builtin),
104
+ (_ident, Name)
105
+ ],
106
+ 'types': [
107
+ (words(('int8', 'int16', 'int32', 'int64', 'wchar_t'), prefix=r'__',
108
+ suffix=r'\b'), Keyword.Reserved),
109
+ (words(('bool', 'int', 'long', 'float', 'short', 'double', 'char',
110
+ 'unsigned', 'signed', 'void', '_BitInt',
111
+ '__int128'), suffix=r'\b'), Keyword.Type)
112
+ ],
113
+ 'keywords': [
114
+ (r'(struct|union)(\s+)', bygroups(Keyword, Whitespace), 'classname'),
115
+ (r'case\b', Keyword, 'case-value'),
116
+ (words(('asm', 'auto', 'break', 'const', 'constexpr', 'continue', 'countof', 'default',
117
+ 'defer', 'do', 'else', 'enum', 'extern', 'for', 'goto', 'if', 'register',
118
+ 'restricted', 'return', 'sizeof', 'struct', 'static', 'switch',
119
+ 'typedef', 'typeof', 'typeof_unqual', 'volatile', 'while', 'union',
120
+ 'thread_local', 'alignas', 'alignof', 'static_assert', '_Pragma', 'fortran'),
121
+ suffix=r'\b'), Keyword),
122
+ (words(('inline', '_inline', '__inline', 'naked', 'restrict',
123
+ 'thread'), suffix=r'\b'), Keyword.Reserved),
124
+ # Vector intrinsics
125
+ (r'(__m(128i|128d|128|64))\b', Keyword.Reserved),
126
+ # Microsoft-isms
127
+ (words((
128
+ 'asm', 'based', 'except', 'stdcall', 'cdecl',
129
+ 'fastcall', 'declspec', 'finally', 'try',
130
+ 'leave', 'w64', 'unaligned', 'raise', 'noop',
131
+ 'identifier', 'forceinline', 'assume', 'null'),
132
+ prefix=r'__', suffix=r'\b'), Keyword.Reserved)
133
+ ],
134
+ 'root': [
135
+ include('whitespace'),
136
+ include('keywords'),
137
+ # functions
138
+ (r'(' + _namespaced_ident + r'(?:[&*\s])+)' # return arguments
139
+ r'(' + _possible_comments + r')'
140
+ r'(' + _namespaced_ident + r')' # method name
141
+ r'(' + _possible_comments + r')'
142
+ r'(\([^;"\')]*?\))' # signature
143
+ r'(' + _possible_comments + r')'
144
+ r'([^;{/"\']*)(\{)',
145
+ bygroups(using(this), using(this, state='whitespace'),
146
+ Name.Function, using(this, state='whitespace'),
147
+ using(this), using(this, state='whitespace'),
148
+ using(this), Punctuation),
149
+ 'function'),
150
+ # function declarations
151
+ (r'(' + _namespaced_ident + r'(?:[&*\s])+)' # return arguments
152
+ r'(' + _possible_comments + r')'
153
+ r'(' + _namespaced_ident + r')' # method name
154
+ r'(' + _possible_comments + r')'
155
+ r'(\([^;"\')]*?\))' # signature
156
+ r'(' + _possible_comments + r')'
157
+ r'([^;/"\']*)(;)',
158
+ bygroups(using(this), using(this, state='whitespace'),
159
+ Name.Function, using(this, state='whitespace'),
160
+ using(this), using(this, state='whitespace'),
161
+ using(this), Punctuation)),
162
+ include('types'),
163
+ default('statement'),
164
+ ],
165
+ 'statement': [
166
+ include('whitespace'),
167
+ include('statements'),
168
+ (r'\}', Punctuation),
169
+ (r'[{;]', Punctuation, '#pop'),
170
+ ],
171
+ 'function': [
172
+ include('whitespace'),
173
+ include('statements'),
174
+ (';', Punctuation),
175
+ (r'\{', Punctuation, '#push'),
176
+ (r'\}', Punctuation, '#pop'),
177
+ ],
178
+ 'string': [
179
+ (r'"', String, '#pop'),
180
+ (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|'
181
+ r'u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})', String.Escape),
182
+ (r'[^\\"\n]+', String), # all other characters
183
+ (r'\\\n', String), # line continuation
184
+ (r'\\', String), # stray backslash
185
+ ],
186
+ 'macro': [
187
+ (r'('+_ws1+r')(include)('+_ws1+r')("[^"]+"|<[^>]+>)([^\S\n]*)([^/\n]*/[*][\s\S]*?[*]/)',
188
+ bygroups(using(this), Comment.Preproc, using(this),
189
+ Comment.PreprocFile, using(this), Comment.Multiline)),
190
+ (r'('+_ws1+r')(include)('+_ws1+r')("[^"]+"|<[^>]+>)([^\S\n]*)([^\n]*)',
191
+ bygroups(using(this), Comment.Preproc, using(this),
192
+ Comment.PreprocFile, using(this), Comment.Single)),
193
+ (r'[^/\n]+', Comment.Preproc),
194
+ (r'/[*][\s\S]*?[*]/', Comment.Multiline),
195
+ (r'//.*?\n', Comment.Single, '#pop'),
196
+ (r'/', Comment.Preproc),
197
+ (r'(?<=\\)\n', Comment.Preproc),
198
+ (r'\n', Comment.Preproc, '#pop'),
199
+ ],
200
+ 'if0': [
201
+ (r'^\s*#if.*?(?<!\\)\n', Comment.Preproc, '#push'),
202
+ (r'^\s*#el(?:se|if).*\n', Comment.Preproc, '#pop'),
203
+ (r'^\s*#endif.*?(?<!\\)\n', Comment.Preproc, '#pop'),
204
+ (r'.*?\n', Comment),
205
+ ],
206
+ 'classname': [
207
+ include('whitespace'),
208
+ # C/C++ attributes before type name
209
+ (r'\[\[(?=[^\[\]]*\]\])', Punctuation, 'attribute'),
210
+ (_ident, Name.Class, '#pop'),
211
+ # template specification
212
+ (r'\s*(?=>)', Text, '#pop'),
213
+ default('#pop')
214
+ ],
215
+ # Mark identifiers preceded by `case` keyword as constants.
216
+ 'case-value': [
217
+ (r'(?<!:)(:)(?!:)', Punctuation, '#pop'),
218
+ (_ident, Name.Constant),
219
+ include('whitespace'),
220
+ include('statements'),
221
+ ],
222
+ 'attribute': [
223
+ (r'\]\]', Punctuation, '#pop'),
224
+ (_ident, Name.Attribute),
225
+ (r'\(', Punctuation, 'attribute-args'),
226
+ (r'::', Punctuation),
227
+ (r',', Punctuation),
228
+ include('whitespace'),
229
+ ],
230
+ 'attribute-args': [
231
+ (r'\)', Punctuation, '#pop'),
232
+ (r'\(', Punctuation, '#push'),
233
+ include('statements'),
234
+ ],
235
+ }
236
+
237
+ stdlib_types = {
238
+ 'size_t', 'ssize_t', 'off_t', 'wchar_t', 'ptrdiff_t', 'sig_atomic_t', 'fpos_t',
239
+ 'clock_t', 'time_t', 'va_list', 'jmp_buf', 'FILE', 'DIR', 'div_t', 'ldiv_t',
240
+ 'mbstate_t', 'wctrans_t', 'wint_t', 'wctype_t', 'byte'}
241
+ c99_types = {
242
+ 'int8_t', 'int16_t', 'int32_t', 'int64_t', 'uint8_t',
243
+ 'uint16_t', 'uint32_t', 'uint64_t', 'int_least8_t', 'int_least16_t',
244
+ 'int_least32_t', 'int_least64_t', 'uint_least8_t', 'uint_least16_t',
245
+ 'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t', 'int_fast32_t',
246
+ 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
247
+ 'intptr_t', 'uintptr_t', 'intmax_t', 'uintmax_t'}
248
+ linux_types = {
249
+ 'clockid_t', 'cpu_set_t', 'cpumask_t', 'dev_t', 'gid_t', 'id_t', 'ino_t', 'key_t',
250
+ 'mode_t', 'nfds_t', 'pid_t', 'rlim_t', 'sig_t', 'sighandler_t', 'siginfo_t',
251
+ 'sigset_t', 'sigval_t', 'socklen_t', 'timer_t', 'uid_t'}
252
+ c11_atomic_types = {
253
+ 'atomic_bool', 'atomic_char', 'atomic_schar', 'atomic_uchar', 'atomic_short',
254
+ 'atomic_ushort', 'atomic_int', 'atomic_uint', 'atomic_long', 'atomic_ulong',
255
+ 'atomic_llong', 'atomic_ullong', 'atomic_char16_t', 'atomic_char32_t', 'atomic_wchar_t',
256
+ 'atomic_int_least8_t', 'atomic_uint_least8_t', 'atomic_int_least16_t',
257
+ 'atomic_uint_least16_t', 'atomic_int_least32_t', 'atomic_uint_least32_t',
258
+ 'atomic_int_least64_t', 'atomic_uint_least64_t', 'atomic_int_fast8_t',
259
+ 'atomic_uint_fast8_t', 'atomic_int_fast16_t', 'atomic_uint_fast16_t',
260
+ 'atomic_int_fast32_t', 'atomic_uint_fast32_t', 'atomic_int_fast64_t',
261
+ 'atomic_uint_fast64_t', 'atomic_intptr_t', 'atomic_uintptr_t', 'atomic_size_t',
262
+ 'atomic_ptrdiff_t', 'atomic_intmax_t', 'atomic_uintmax_t'}
263
+
264
+ def __init__(self, **options):
265
+ self.stdlibhighlighting = get_bool_opt(options, 'stdlibhighlighting', True)
266
+ self.c99highlighting = get_bool_opt(options, 'c99highlighting', True)
267
+ self.c11highlighting = get_bool_opt(options, 'c11highlighting', True)
268
+ self.platformhighlighting = get_bool_opt(options, 'platformhighlighting', True)
269
+ RegexLexer.__init__(self, **options)
270
+
271
+ def get_tokens_unprocessed(self, text, stack=('root',)):
272
+ for index, token, value in \
273
+ RegexLexer.get_tokens_unprocessed(self, text, stack):
274
+ if token is Name:
275
+ if self.stdlibhighlighting and value in self.stdlib_types:
276
+ token = Keyword.Type
277
+ elif self.c99highlighting and value in self.c99_types:
278
+ token = Keyword.Type
279
+ elif self.c11highlighting and value in self.c11_atomic_types:
280
+ token = Keyword.Type
281
+ elif self.platformhighlighting and value in self.linux_types:
282
+ token = Keyword.Type
283
+ yield index, token, value
284
+
285
+
286
+ class CLexer(CFamilyLexer):
287
+ """
288
+ For C source code with preprocessor directives.
289
+
290
+ Additional options accepted:
291
+
292
+ `stdlibhighlighting`
293
+ Highlight common types found in the C/C++ standard library (e.g. `size_t`).
294
+ (default: ``True``).
295
+
296
+ `c99highlighting`
297
+ Highlight common types found in the C99 standard library (e.g. `int8_t`).
298
+ Actually, this includes all fixed-width integer types.
299
+ (default: ``True``).
300
+
301
+ `c11highlighting`
302
+ Highlight atomic types found in the C11 standard library (e.g. `atomic_bool`).
303
+ (default: ``True``).
304
+
305
+ `platformhighlighting`
306
+ Highlight common types found in the platform SDK headers (e.g. `clockid_t` on Linux).
307
+ (default: ``True``).
308
+ """
309
+ name = 'C'
310
+ aliases = ['c']
311
+ filenames = ['*.c', '*.h', '*.idc', '*.x[bp]m']
312
+ mimetypes = ['text/x-chdr', 'text/x-csrc', 'image/x-xbitmap', 'image/x-xpixmap']
313
+ url = 'https://en.wikipedia.org/wiki/C_(programming_language)'
314
+ version_added = ''
315
+ priority = 0.1
316
+
317
+ tokens = {
318
+ 'statements': [
319
+ # C23 attributes [[...]] — lookahead to avoid matching ObjC's [[obj msg] msg]
320
+ (r'\[\[(?=[^\[\]]*\]\])', Punctuation, 'attribute'),
321
+ inherit,
322
+ ],
323
+ 'keywords': [
324
+ (words((
325
+ '_Alignas', '_Alignof', '_Noreturn', '_Countof', '_Generic', '_Thread_local',
326
+ '_Static_assert', '_Imaginary', 'noreturn', 'imaginary', 'complex'),
327
+ suffix=r'\b'), Keyword),
328
+ inherit
329
+ ],
330
+ 'types': [
331
+ (words(('_Bool', '_Complex', '_Atomic', '_Decimal32', '_Decimal64', '_Decimal128'), suffix=r'\b'), Keyword.Type),
332
+ inherit
333
+ ]
334
+ }
335
+
336
+ def analyse_text(text):
337
+ if re.search(r'^\s*#include [<"]', text, re.MULTILINE):
338
+ return 0.1
339
+ if re.search(r'^\s*#ifn?def ', text, re.MULTILINE):
340
+ return 0.1
341
+
342
+
343
+ class CppLexer(CFamilyLexer):
344
+ """
345
+ For C++ source code with preprocessor directives.
346
+
347
+ Additional options accepted:
348
+
349
+ `stdlibhighlighting`
350
+ Highlight common types found in the C/C++ standard library (e.g. `size_t`).
351
+ (default: ``True``).
352
+
353
+ `c99highlighting`
354
+ Highlight common types found in the C99 standard library (e.g. `int8_t`).
355
+ Actually, this includes all fixed-width integer types.
356
+ (default: ``True``).
357
+
358
+ `c11highlighting`
359
+ Highlight atomic types found in the C11 standard library (e.g. `atomic_bool`).
360
+ (default: ``True``).
361
+
362
+ `platformhighlighting`
363
+ Highlight common types found in the platform SDK headers (e.g. `clockid_t` on Linux).
364
+ (default: ``True``).
365
+ """
366
+ name = 'C++'
367
+ url = 'https://isocpp.org/'
368
+ aliases = ['cpp', 'c++']
369
+ filenames = ['*.cpp', '*.hpp', '*.c++', '*.h++',
370
+ '*.cc', '*.hh', '*.cxx', '*.hxx',
371
+ '*.C', '*.H', '*.cp', '*.CPP', '*.tpp',
372
+ '*.cppm', '*.ixx', '*.mxx', '*.ipp']
373
+ mimetypes = ['text/x-c++hdr', 'text/x-c++src']
374
+ version_added = ''
375
+ priority = 0.1
376
+
377
+ tokens = {
378
+ 'statements': [
379
+ # C++11 raw strings
380
+ (r'((?:[LuU]|u8)?R)(")([^\\()\s]{,16})(\()([\s\S]*?)(\)\3)(")',
381
+ bygroups(String.Affix, String, String.Delimiter, String.Delimiter,
382
+ String, String.Delimiter, String)),
383
+ # C++26 annotations [[=Annotation]]
384
+ (r'(\[\[)(=)(' + CFamilyLexer._ident + r')',
385
+ bygroups(Punctuation, Punctuation, Name.Decorator), 'annotation'),
386
+ # C++11 attributes [[...]]
387
+ (r'\[\[(?=[^\[\]]*\]\])', Punctuation, 'attribute'),
388
+ inherit,
389
+ ],
390
+ 'root': [
391
+ inherit,
392
+ # C++ Microsoft-isms
393
+ (words(('virtual_inheritance', 'uuidof', 'super', 'extends', 'single_inheritance',
394
+ 'multiple_inheritance', 'interface', 'implements', 'event', 'finally', 'null'),
395
+ prefix=r'__', suffix=r'\b'), Keyword.Reserved),
396
+ # Offload C++ extensions, http://offload.codeplay.com/
397
+ (r'__(offload|blockingoffload|outer)\b', Keyword.Pseudo),
398
+ ],
399
+ 'classname': [
400
+ include('whitespace'),
401
+ # C++26 annotations before type name
402
+ (r'(\[\[)(=)(' + CFamilyLexer._ident + r')',
403
+ bygroups(Punctuation, Punctuation, Name.Decorator), 'annotation'),
404
+ # C++ attributes before type name
405
+ (r'\[\[(?=[^\[\]]*\]\])', Punctuation, 'attribute'),
406
+ (CFamilyLexer._ident, Name.Class, '#pop'),
407
+ # template specification
408
+ (r'\s*(?=>)', Text, '#pop'),
409
+ default('#pop')
410
+ ],
411
+ 'enumname': [
412
+ include('whitespace'),
413
+ # 'enum class' and 'enum struct' C++11 support
414
+ (words(('class', 'struct'), suffix=r'\b'), Keyword),
415
+ # C++26 annotations before enum name
416
+ (r'(\[\[)(=)(' + CFamilyLexer._ident + r')',
417
+ bygroups(Punctuation, Punctuation, Name.Decorator), 'annotation'),
418
+ # C++ attributes before enum name
419
+ (r'\[\[(?=[^\[\]]*\]\])', Punctuation, 'attribute'),
420
+ (CFamilyLexer._ident, Name.Class, '#pop'),
421
+ # template specification
422
+ (r'\s*(?=>)', Text, '#pop'),
423
+ default('#pop')
424
+ ],
425
+ 'attribute': [
426
+ (r'using\b', Keyword),
427
+ (r':', Punctuation),
428
+ inherit,
429
+ ],
430
+ 'keywords': [
431
+ (r'(class|concept|typename)(\s+)', bygroups(Keyword, Whitespace), 'classname'),
432
+ (words((
433
+ 'catch', 'const_cast', 'delete', 'dynamic_cast', 'explicit',
434
+ 'export', 'friend', 'mutable', 'new', 'operator',
435
+ 'private', 'protected', 'public', 'reinterpret_cast', 'class',
436
+ '__restrict', 'static_cast', 'template', 'this', 'throw', 'throws',
437
+ 'try', 'typeid', 'using', 'virtual', 'concept',
438
+ 'decltype', 'noexcept', 'override', 'final', 'constinit', 'consteval',
439
+ 'co_await', 'co_return', 'co_yield', 'requires', 'import', 'module',
440
+ 'typename', 'and', 'and_eq', 'bitand', 'bitor', 'compl', 'not',
441
+ 'not_eq', 'or', 'or_eq', 'xor', 'xor_eq', 'contract_assert', 'pre', 'post'),
442
+ suffix=r'\b'), Keyword),
443
+ (r'namespace\b', Keyword, 'namespace'),
444
+ (r'(enum)(\s+)', bygroups(Keyword, Whitespace), 'enumname'),
445
+ inherit
446
+ ],
447
+ 'types': [
448
+ (r'char(16_t|32_t|8_t)\b', Keyword.Type),
449
+ inherit
450
+ ],
451
+ 'namespace': [
452
+ (r';', Punctuation, ('#pop', 'root')),
453
+ (r'\{', Punctuation, ('#pop', 'namespace-body')),
454
+ (r'inline\b', Keyword.Reserved),
455
+ (CFamilyLexer._ident, Name.Namespace),
456
+ include('statement')
457
+ ],
458
+ 'namespace-body': [
459
+ (r'\}', Punctuation, '#pop'),
460
+ include('root'),
461
+ ],
462
+ 'annotation': [
463
+ (r'\]\]', Punctuation, '#pop'),
464
+ (r'\(', Punctuation, 'annotation-args'),
465
+ (r'::', Punctuation),
466
+ (r',', Punctuation),
467
+ (CFamilyLexer._ident, Name.Decorator),
468
+ include('whitespace'),
469
+ ],
470
+ 'annotation-args': [
471
+ (r'\)', Punctuation, '#pop'),
472
+ (r'\(', Punctuation, '#push'),
473
+ include('statements'),
474
+ ],
475
+ }
476
+
477
+ def analyse_text(text):
478
+ if re.search('#include <[a-z_]+>', text):
479
+ return 0.2
480
+ if re.search('using namespace ', text):
481
+ return 0.4
venv/Lib/site-packages/pygments/lexers/c_like.py ADDED
@@ -0,0 +1,743 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.c_like
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for other C-like languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, include, bygroups, inherit, words, \
14
+ default
15
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
+ Number, Punctuation, Whitespace
17
+
18
+ from pygments.lexers.c_cpp import CLexer, CppLexer
19
+ from pygments.lexers import _mql_builtins
20
+
21
+ __all__ = ['PikeLexer', 'NesCLexer', 'ClayLexer', 'ECLexer', 'ValaLexer',
22
+ 'CudaLexer', 'SwigLexer', 'MqlLexer', 'ArduinoLexer', 'CharmciLexer',
23
+ 'OmgIdlLexer', 'PromelaLexer']
24
+
25
+
26
+ class PikeLexer(CppLexer):
27
+ """
28
+ For `Pike <http://pike.lysator.liu.se/>`_ source code.
29
+ """
30
+ name = 'Pike'
31
+ aliases = ['pike']
32
+ filenames = ['*.pike', '*.pmod']
33
+ mimetypes = ['text/x-pike']
34
+ version_added = '2.0'
35
+
36
+ tokens = {
37
+ 'statements': [
38
+ (words((
39
+ 'catch', 'new', 'private', 'protected', 'public', 'gauge',
40
+ 'throw', 'throws', 'class', 'interface', 'implement', 'abstract',
41
+ 'extends', 'from', 'this', 'super', 'constant', 'final', 'static',
42
+ 'import', 'use', 'extern', 'inline', 'proto', 'break', 'continue',
43
+ 'if', 'else', 'for', 'while', 'do', 'switch', 'case', 'as', 'in',
44
+ 'version', 'return', 'true', 'false', 'null',
45
+ '__VERSION__', '__MAJOR__', '__MINOR__', '__BUILD__', '__REAL_VERSION__',
46
+ '__REAL_MAJOR__', '__REAL_MINOR__', '__REAL_BUILD__', '__DATE__', '__TIME__',
47
+ '__FILE__', '__DIR__', '__LINE__', '__AUTO_BIGNUM__', '__NT__', '__PIKE__',
48
+ '__amigaos__', '_Pragma', 'static_assert', 'defined', 'sscanf'), suffix=r'\b'),
49
+ Keyword),
50
+ (r'(bool|int|long|float|short|double|char|string|object|void|mapping|'
51
+ r'array|multiset|program|function|lambda|mixed|'
52
+ r'[a-z_][a-z0-9_]*_t)\b',
53
+ Keyword.Type),
54
+ (r'(class)(\s+)', bygroups(Keyword, Whitespace), 'classname'),
55
+ (r'[~!%^&*+=|?:<>/@-]', Operator),
56
+ inherit,
57
+ ],
58
+ 'classname': [
59
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop'),
60
+ # template specification
61
+ (r'\s*(?=>)', Whitespace, '#pop'),
62
+ ],
63
+ }
64
+
65
+
66
+ class NesCLexer(CLexer):
67
+ """
68
+ For `nesC <https://github.com/tinyos/nesc>`_ source code with preprocessor
69
+ directives.
70
+ """
71
+ name = 'nesC'
72
+ aliases = ['nesc']
73
+ filenames = ['*.nc']
74
+ mimetypes = ['text/x-nescsrc']
75
+ version_added = '2.0'
76
+
77
+ tokens = {
78
+ 'statements': [
79
+ (words((
80
+ 'abstract', 'as', 'async', 'atomic', 'call', 'command', 'component',
81
+ 'components', 'configuration', 'event', 'extends', 'generic',
82
+ 'implementation', 'includes', 'interface', 'module', 'new', 'norace',
83
+ 'post', 'provides', 'signal', 'task', 'uses'), suffix=r'\b'),
84
+ Keyword),
85
+ (words(('nx_struct', 'nx_union', 'nx_int8_t', 'nx_int16_t', 'nx_int32_t',
86
+ 'nx_int64_t', 'nx_uint8_t', 'nx_uint16_t', 'nx_uint32_t',
87
+ 'nx_uint64_t'), suffix=r'\b'),
88
+ Keyword.Type),
89
+ inherit,
90
+ ],
91
+ }
92
+
93
+
94
+ class ClayLexer(RegexLexer):
95
+ """
96
+ For Clay source.
97
+ """
98
+ name = 'Clay'
99
+ filenames = ['*.clay']
100
+ aliases = ['clay']
101
+ mimetypes = ['text/x-clay']
102
+ url = 'http://claylabs.com/clay'
103
+ version_added = '2.0'
104
+
105
+ tokens = {
106
+ 'root': [
107
+ (r'\s+', Whitespace),
108
+ (r'//.*?$', Comment.Single),
109
+ (r'/(\\\n)?[*][\s\S]*?[*](\\\n)?/', Comment.Multiline),
110
+ (words(('public', 'private', 'import', 'as', 'record', 'variant',
111
+ 'instance', 'define', 'overload', 'default',
112
+ 'external', 'alias', 'rvalue', 'ref',
113
+ 'forward', 'inline', 'noinline',
114
+ 'forceinline', 'enum', 'var', 'and', 'or',
115
+ 'not', 'if', 'else', 'goto', 'return',
116
+ 'while', 'switch', 'case', 'break',
117
+ 'continue', 'for', 'in', 'true', 'false',
118
+ 'try', 'catch', 'throw', 'finally',
119
+ 'onerror', 'staticassert', 'eval', 'when',
120
+ 'newtype', '__FILE__', '__LINE__',
121
+ '__COLUMN__', '__ARG__'), prefix=r'\b', suffix=r'\b'), Keyword),
122
+ (r'[~!%^&*+=|:<>/-]', Operator),
123
+ (r'[#(){}\[\],;.]', Punctuation),
124
+ (r'0x[0-9a-fA-F]+[LlUu]*', Number.Hex),
125
+ (r'\d+[LlUu]*', Number.Integer),
126
+ (r'\b(true|false)\b', Name.Builtin),
127
+ (r'(?i)[a-z_?][\w?]*', Name),
128
+ (r'"""', String, 'tdqs'),
129
+ (r'"', String, 'dqs'),
130
+ ],
131
+ 'strings': [
132
+ (r'(?i)\\(x[0-9a-f]{2}|.)', String.Escape),
133
+ (r'[^\\"]+', String),
134
+ ],
135
+ 'nl': [
136
+ (r'\n', String),
137
+ ],
138
+ 'dqs': [
139
+ (r'"', String, '#pop'),
140
+ include('strings'),
141
+ ],
142
+ 'tdqs': [
143
+ (r'"""', String, '#pop'),
144
+ include('strings'),
145
+ include('nl'),
146
+ ],
147
+ }
148
+
149
+
150
+ class ECLexer(CLexer):
151
+ """
152
+ For eC source code with preprocessor directives.
153
+ """
154
+ name = 'eC'
155
+ aliases = ['ec']
156
+ filenames = ['*.ec', '*.eh']
157
+ mimetypes = ['text/x-echdr', 'text/x-ecsrc']
158
+ url = 'https://ec-lang.org'
159
+ version_added = '1.5'
160
+
161
+ tokens = {
162
+ 'statements': [
163
+ (words((
164
+ 'virtual', 'class', 'private', 'public', 'property', 'import',
165
+ 'delete', 'new', 'new0', 'renew', 'renew0', 'define', 'get',
166
+ 'set', 'remote', 'dllexport', 'dllimport', 'stdcall', 'subclass',
167
+ '__on_register_module', 'namespace', 'using', 'typed_object',
168
+ 'any_object', 'incref', 'register', 'watch', 'stopwatching', 'firewatchers',
169
+ 'watchable', 'class_designer', 'class_fixed', 'class_no_expansion', 'isset',
170
+ 'class_default_property', 'property_category', 'class_data',
171
+ 'class_property', 'thisclass', 'dbtable', 'dbindex',
172
+ 'database_open', 'dbfield'), suffix=r'\b'), Keyword),
173
+ (words(('uint', 'uint16', 'uint32', 'uint64', 'bool', 'byte',
174
+ 'unichar', 'int64'), suffix=r'\b'),
175
+ Keyword.Type),
176
+ (r'(class)(\s+)', bygroups(Keyword, Whitespace), 'classname'),
177
+ (r'(null|value|this)\b', Name.Builtin),
178
+ inherit,
179
+ ]
180
+ }
181
+
182
+
183
+ class ValaLexer(RegexLexer):
184
+ """
185
+ For Vala source code with preprocessor directives.
186
+ """
187
+ name = 'Vala'
188
+ aliases = ['vala', 'vapi']
189
+ filenames = ['*.vala', '*.vapi']
190
+ mimetypes = ['text/x-vala']
191
+ url = 'https://vala.dev'
192
+ version_added = '1.1'
193
+
194
+ tokens = {
195
+ 'whitespace': [
196
+ (r'^\s*#if\s+0', Comment.Preproc, 'if0'),
197
+ (r'^\s*#(?:if|elif|else|endif)\b[^\n]*', Comment.Preproc),
198
+ (r'\n', Whitespace),
199
+ (r'\s+', Whitespace),
200
+ (r'\\\n', Text), # line continuation
201
+ (r'//(\n|[\s\S]*?[^\\]\n)', Comment.Single),
202
+ (r'/(\\\n)?[*][\s\S]*?[*](\\\n)?/', Comment.Multiline),
203
+ ],
204
+ 'statements': [
205
+ (r'(?s)""".*?"""', String), # verbatim strings
206
+ (r'[L@]?"', String, 'string'),
207
+ (r"L?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'",
208
+ String.Char),
209
+ (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?', Number.Float),
210
+ (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float),
211
+ (r'0x[0-9a-fA-F]+[Ll]?', Number.Hex),
212
+ (r'0[0-7]+[Ll]?', Number.Oct),
213
+ (r'\d+[Ll]?', Number.Integer),
214
+ (r'[~!%^&*+=|?:<>/-]', Operator),
215
+ (r'(\[)(Compact|Immutable|(?:Boolean|Simple)Type)(\])',
216
+ bygroups(Punctuation, Name.Decorator, Punctuation)),
217
+ # TODO: "correctly" parse complex code attributes
218
+ (r'(\[)(CCode|(?:Integer|Floating)Type)',
219
+ bygroups(Punctuation, Name.Decorator)),
220
+ (r'[()\[\],.]', Punctuation),
221
+ (words((
222
+ 'as', 'base', 'break', 'case', 'catch', 'construct', 'continue',
223
+ 'default', 'delete', 'do', 'else', 'enum', 'finally', 'for',
224
+ 'foreach', 'get', 'if', 'in', 'is', 'lock', 'new', 'out', 'params',
225
+ 'return', 'set', 'sizeof', 'switch', 'this', 'throw', 'try',
226
+ 'typeof', 'while', 'yield'), suffix=r'\b'),
227
+ Keyword),
228
+ (words((
229
+ 'abstract', 'const', 'delegate', 'dynamic', 'ensures', 'extern',
230
+ 'inline', 'internal', 'override', 'owned', 'private', 'protected',
231
+ 'public', 'ref', 'requires', 'signal', 'static', 'throws', 'unowned',
232
+ 'var', 'virtual', 'volatile', 'weak', 'yields'), suffix=r'\b'),
233
+ Keyword.Declaration),
234
+ (r'(namespace|using)(\s+)', bygroups(Keyword.Namespace, Whitespace),
235
+ 'namespace'),
236
+ (r'(class|errordomain|interface|struct)(\s+)',
237
+ bygroups(Keyword.Declaration, Whitespace), 'class'),
238
+ (r'(\.)([a-zA-Z_]\w*)',
239
+ bygroups(Operator, Name.Attribute)),
240
+ # void is an actual keyword, others are in glib-2.0.vapi
241
+ (words((
242
+ 'void', 'bool', 'char', 'double', 'float', 'int', 'int8', 'int16',
243
+ 'int32', 'int64', 'long', 'short', 'size_t', 'ssize_t', 'string',
244
+ 'time_t', 'uchar', 'uint', 'uint8', 'uint16', 'uint32', 'uint64',
245
+ 'ulong', 'unichar', 'ushort'), suffix=r'\b'),
246
+ Keyword.Type),
247
+ (r'(true|false|null)\b', Name.Builtin),
248
+ (r'[a-zA-Z_]\w*', Name),
249
+ ],
250
+ 'root': [
251
+ include('whitespace'),
252
+ default('statement'),
253
+ ],
254
+ 'statement': [
255
+ include('whitespace'),
256
+ include('statements'),
257
+ ('[{}]', Punctuation),
258
+ (';', Punctuation, '#pop'),
259
+ ],
260
+ 'string': [
261
+ (r'"', String, '#pop'),
262
+ (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
263
+ (r'[^\\"\n]+', String), # all other characters
264
+ (r'\\\n', String), # line continuation
265
+ (r'\\', String), # stray backslash
266
+ ],
267
+ 'if0': [
268
+ (r'^\s*#if.*?(?<!\\)\n', Comment.Preproc, '#push'),
269
+ (r'^\s*#el(?:se|if).*\n', Comment.Preproc, '#pop'),
270
+ (r'^\s*#endif.*?(?<!\\)\n', Comment.Preproc, '#pop'),
271
+ (r'.*?\n', Comment),
272
+ ],
273
+ 'class': [
274
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
275
+ ],
276
+ 'namespace': [
277
+ (r'[a-zA-Z_][\w.]*', Name.Namespace, '#pop')
278
+ ],
279
+ }
280
+
281
+
282
+ class CudaLexer(CppLexer):
283
+ """
284
+ For NVIDIA CUDA™ source.
285
+ """
286
+ name = 'CUDA'
287
+ filenames = ['*.cu', '*.cuh']
288
+ aliases = ['cuda', 'cu']
289
+ mimetypes = ['text/x-cuda']
290
+ url = 'https://developer.nvidia.com/category/zone/cuda-zone'
291
+ version_added = '1.6'
292
+
293
+ function_qualifiers = {'__device__', '__global__', '__host__',
294
+ '__noinline__', '__forceinline__'}
295
+ variable_qualifiers = {'__device__', '__constant__', '__shared__',
296
+ '__restrict__'}
297
+ vector_types = {'char1', 'uchar1', 'char2', 'uchar2', 'char3', 'uchar3',
298
+ 'char4', 'uchar4', 'short1', 'ushort1', 'short2', 'ushort2',
299
+ 'short3', 'ushort3', 'short4', 'ushort4', 'int1', 'uint1',
300
+ 'int2', 'uint2', 'int3', 'uint3', 'int4', 'uint4', 'long1',
301
+ 'ulong1', 'long2', 'ulong2', 'long3', 'ulong3', 'long4',
302
+ 'ulong4', 'longlong1', 'ulonglong1', 'longlong2',
303
+ 'ulonglong2', 'float1', 'float2', 'float3', 'float4',
304
+ 'double1', 'double2', 'dim3'}
305
+ variables = {'gridDim', 'blockIdx', 'blockDim', 'threadIdx', 'warpSize'}
306
+ functions = {'__threadfence_block', '__threadfence', '__threadfence_system',
307
+ '__syncthreads', '__syncthreads_count', '__syncthreads_and',
308
+ '__syncthreads_or'}
309
+ execution_confs = {'<<<', '>>>'}
310
+
311
+ def get_tokens_unprocessed(self, text, stack=('root',)):
312
+ for index, token, value in CppLexer.get_tokens_unprocessed(self, text, stack):
313
+ if token is Name:
314
+ if value in self.variable_qualifiers:
315
+ token = Keyword.Type
316
+ elif value in self.vector_types:
317
+ token = Keyword.Type
318
+ elif value in self.variables:
319
+ token = Name.Builtin
320
+ elif value in self.execution_confs:
321
+ token = Keyword.Pseudo
322
+ elif value in self.function_qualifiers:
323
+ token = Keyword.Reserved
324
+ elif value in self.functions:
325
+ token = Name.Function
326
+ yield index, token, value
327
+
328
+
329
+ class SwigLexer(CppLexer):
330
+ """
331
+ For `SWIG <http://www.swig.org/>`_ source code.
332
+ """
333
+ name = 'SWIG'
334
+ aliases = ['swig']
335
+ filenames = ['*.swg', '*.i']
336
+ mimetypes = ['text/swig']
337
+ version_added = '2.0'
338
+ priority = 0.04 # Lower than C/C++ and Objective C/C++
339
+
340
+ tokens = {
341
+ 'root': [
342
+ # Match it here so it won't be matched as a function in the rest of root
343
+ (r'\$\**\&?\w+', Name),
344
+ inherit
345
+ ],
346
+ 'statements': [
347
+ # SWIG directives
348
+ (r'(%[a-z_][a-z0-9_]*)', Name.Function),
349
+ # Special variables
350
+ (r'\$\**\&?\w+', Name),
351
+ # Stringification / additional preprocessor directives
352
+ (r'##*[a-zA-Z_]\w*', Comment.Preproc),
353
+ inherit,
354
+ ],
355
+ }
356
+
357
+ # This is a far from complete set of SWIG directives
358
+ swig_directives = {
359
+ # Most common directives
360
+ '%apply', '%define', '%director', '%enddef', '%exception', '%extend',
361
+ '%feature', '%fragment', '%ignore', '%immutable', '%import', '%include',
362
+ '%inline', '%insert', '%module', '%newobject', '%nspace', '%pragma',
363
+ '%rename', '%shared_ptr', '%template', '%typecheck', '%typemap',
364
+ # Less common directives
365
+ '%arg', '%attribute', '%bang', '%begin', '%callback', '%catches', '%clear',
366
+ '%constant', '%copyctor', '%csconst', '%csconstvalue', '%csenum',
367
+ '%csmethodmodifiers', '%csnothrowexception', '%default', '%defaultctor',
368
+ '%defaultdtor', '%defined', '%delete', '%delobject', '%descriptor',
369
+ '%exceptionclass', '%exceptionvar', '%extend_smart_pointer', '%fragments',
370
+ '%header', '%ifcplusplus', '%ignorewarn', '%implicit', '%implicitconv',
371
+ '%init', '%javaconst', '%javaconstvalue', '%javaenum', '%javaexception',
372
+ '%javamethodmodifiers', '%kwargs', '%luacode', '%mutable', '%naturalvar',
373
+ '%nestedworkaround', '%perlcode', '%pythonabc', '%pythonappend',
374
+ '%pythoncallback', '%pythoncode', '%pythondynamic', '%pythonmaybecall',
375
+ '%pythonnondynamic', '%pythonprepend', '%refobject', '%shadow', '%sizeof',
376
+ '%trackobjects', '%types', '%unrefobject', '%varargs', '%warn',
377
+ '%warnfilter'}
378
+
379
+ def analyse_text(text):
380
+ rv = 0
381
+ # Search for SWIG directives, which are conventionally at the beginning of
382
+ # a line. The probability of them being within a line is low, so let another
383
+ # lexer win in this case.
384
+ matches = re.findall(r'^\s*(%[a-z_][a-z0-9_]*)', text, re.M)
385
+ for m in matches:
386
+ if m in SwigLexer.swig_directives:
387
+ rv = 0.98
388
+ break
389
+ else:
390
+ rv = 0.91 # Fraction higher than MatlabLexer
391
+ return rv
392
+
393
+
394
+ class MqlLexer(CppLexer):
395
+ """
396
+ For `MQL4 <http://docs.mql4.com/>`_ and
397
+ `MQL5 <http://www.mql5.com/en/docs>`_ source code.
398
+ """
399
+ name = 'MQL'
400
+ aliases = ['mql', 'mq4', 'mq5', 'mql4', 'mql5']
401
+ filenames = ['*.mq4', '*.mq5', '*.mqh']
402
+ mimetypes = ['text/x-mql']
403
+ version_added = '2.0'
404
+
405
+ tokens = {
406
+ 'statements': [
407
+ (words(_mql_builtins.keywords, suffix=r'\b'), Keyword),
408
+ (words(_mql_builtins.c_types, suffix=r'\b'), Keyword.Type),
409
+ (words(_mql_builtins.types, suffix=r'\b'), Name.Function),
410
+ (words(_mql_builtins.constants, suffix=r'\b'), Name.Constant),
411
+ (words(_mql_builtins.colors, prefix='(clr)?', suffix=r'\b'),
412
+ Name.Constant),
413
+ inherit,
414
+ ],
415
+ }
416
+
417
+
418
+ class ArduinoLexer(CppLexer):
419
+ """
420
+ For `Arduino(tm) <https://arduino.cc/>`_ source.
421
+
422
+ This is an extension of the CppLexer, as the Arduino® Language is a superset
423
+ of C++
424
+ """
425
+
426
+ name = 'Arduino'
427
+ aliases = ['arduino']
428
+ filenames = ['*.ino']
429
+ mimetypes = ['text/x-arduino']
430
+ version_added = '2.1'
431
+
432
+ # Language sketch main structure functions
433
+ structure = {'setup', 'loop'}
434
+
435
+ # Language operators
436
+ operators = {'not', 'or', 'and', 'xor'}
437
+
438
+ # Language 'variables'
439
+ variables = {
440
+ 'DIGITAL_MESSAGE', 'FIRMATA_STRING', 'ANALOG_MESSAGE', 'REPORT_DIGITAL',
441
+ 'REPORT_ANALOG', 'INPUT_PULLUP', 'SET_PIN_MODE', 'INTERNAL2V56', 'SYSTEM_RESET',
442
+ 'LED_BUILTIN', 'INTERNAL1V1', 'SYSEX_START', 'INTERNAL', 'EXTERNAL', 'HIGH',
443
+ 'LOW', 'INPUT', 'OUTPUT', 'INPUT_PULLUP', 'LED_BUILTIN', 'true', 'false',
444
+ 'void', 'boolean', 'char', 'unsigned char', 'byte', 'int', 'unsigned int',
445
+ 'word', 'long', 'unsigned long', 'short', 'float', 'double', 'string', 'String',
446
+ 'array', 'static', 'volatile', 'const', 'boolean', 'byte', 'word', 'string',
447
+ 'String', 'array', 'int', 'float', 'private', 'char', 'virtual', 'operator',
448
+ 'sizeof', 'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t', 'int8_t', 'int16_t',
449
+ 'int32_t', 'int64_t', 'dynamic_cast', 'typedef', 'const_cast', 'const',
450
+ 'struct', 'static_cast', 'union', 'unsigned', 'long', 'volatile', 'static',
451
+ 'protected', 'bool', 'public', 'friend', 'auto', 'void', 'enum', 'extern',
452
+ 'class', 'short', 'reinterpret_cast', 'double', 'register', 'explicit',
453
+ 'signed', 'inline', 'delete', '_Bool', 'complex', '_Complex', '_Imaginary',
454
+ 'atomic_bool', 'atomic_char', 'atomic_schar', 'atomic_uchar', 'atomic_short',
455
+ 'atomic_ushort', 'atomic_int', 'atomic_uint', 'atomic_long', 'atomic_ulong',
456
+ 'atomic_llong', 'atomic_ullong', 'PROGMEM'}
457
+
458
+ # Language shipped functions and class ( )
459
+ functions = {
460
+ 'KeyboardController', 'MouseController', 'SoftwareSerial', 'EthernetServer',
461
+ 'EthernetClient', 'LiquidCrystal', 'RobotControl', 'GSMVoiceCall',
462
+ 'EthernetUDP', 'EsploraTFT', 'HttpClient', 'RobotMotor', 'WiFiClient',
463
+ 'GSMScanner', 'FileSystem', 'Scheduler', 'GSMServer', 'YunClient', 'YunServer',
464
+ 'IPAddress', 'GSMClient', 'GSMModem', 'Keyboard', 'Ethernet', 'Console',
465
+ 'GSMBand', 'Esplora', 'Stepper', 'Process', 'WiFiUDP', 'GSM_SMS', 'Mailbox',
466
+ 'USBHost', 'Firmata', 'PImage', 'Client', 'Server', 'GSMPIN', 'FileIO',
467
+ 'Bridge', 'Serial', 'EEPROM', 'Stream', 'Mouse', 'Audio', 'Servo', 'File',
468
+ 'Task', 'GPRS', 'WiFi', 'Wire', 'TFT', 'GSM', 'SPI', 'SD',
469
+ 'runShellCommandAsynchronously', 'analogWriteResolution',
470
+ 'retrieveCallingNumber', 'printFirmwareVersion', 'analogReadResolution',
471
+ 'sendDigitalPortPair', 'noListenOnLocalhost', 'readJoystickButton',
472
+ 'setFirmwareVersion', 'readJoystickSwitch', 'scrollDisplayRight',
473
+ 'getVoiceCallStatus', 'scrollDisplayLeft', 'writeMicroseconds',
474
+ 'delayMicroseconds', 'beginTransmission', 'getSignalStrength',
475
+ 'runAsynchronously', 'getAsynchronously', 'listenOnLocalhost',
476
+ 'getCurrentCarrier', 'readAccelerometer', 'messageAvailable',
477
+ 'sendDigitalPorts', 'lineFollowConfig', 'countryNameWrite', 'runShellCommand',
478
+ 'readStringUntil', 'rewindDirectory', 'readTemperature', 'setClockDivider',
479
+ 'readLightSensor', 'endTransmission', 'analogReference', 'detachInterrupt',
480
+ 'countryNameRead', 'attachInterrupt', 'encryptionType', 'readBytesUntil',
481
+ 'robotNameWrite', 'readMicrophone', 'robotNameRead', 'cityNameWrite',
482
+ 'userNameWrite', 'readJoystickY', 'readJoystickX', 'mouseReleased',
483
+ 'openNextFile', 'scanNetworks', 'noInterrupts', 'digitalWrite', 'beginSpeaker',
484
+ 'mousePressed', 'isActionDone', 'mouseDragged', 'displayLogos', 'noAutoscroll',
485
+ 'addParameter', 'remoteNumber', 'getModifiers', 'keyboardRead', 'userNameRead',
486
+ 'waitContinue', 'processInput', 'parseCommand', 'printVersion', 'readNetworks',
487
+ 'writeMessage', 'blinkVersion', 'cityNameRead', 'readMessage', 'setDataMode',
488
+ 'parsePacket', 'isListening', 'setBitOrder', 'beginPacket', 'isDirectory',
489
+ 'motorsWrite', 'drawCompass', 'digitalRead', 'clearScreen', 'serialEvent',
490
+ 'rightToLeft', 'setTextSize', 'leftToRight', 'requestFrom', 'keyReleased',
491
+ 'compassRead', 'analogWrite', 'interrupts', 'WiFiServer', 'disconnect',
492
+ 'playMelody', 'parseFloat', 'autoscroll', 'getPINUsed', 'setPINUsed',
493
+ 'setTimeout', 'sendAnalog', 'readSlider', 'analogRead', 'beginWrite',
494
+ 'createChar', 'motorsStop', 'keyPressed', 'tempoWrite', 'readButton',
495
+ 'subnetMask', 'debugPrint', 'macAddress', 'writeGreen', 'randomSeed',
496
+ 'attachGPRS', 'readString', 'sendString', 'remotePort', 'releaseAll',
497
+ 'mouseMoved', 'background', 'getXChange', 'getYChange', 'answerCall',
498
+ 'getResult', 'voiceCall', 'endPacket', 'constrain', 'getSocket', 'writeJSON',
499
+ 'getButton', 'available', 'connected', 'findUntil', 'readBytes', 'exitValue',
500
+ 'readGreen', 'writeBlue', 'startLoop', 'IPAddress', 'isPressed', 'sendSysex',
501
+ 'pauseMode', 'gatewayIP', 'setCursor', 'getOemKey', 'tuneWrite', 'noDisplay',
502
+ 'loadImage', 'switchPIN', 'onRequest', 'onReceive', 'changePIN', 'playFile',
503
+ 'noBuffer', 'parseInt', 'overflow', 'checkPIN', 'knobRead', 'beginTFT',
504
+ 'bitClear', 'updateIR', 'bitWrite', 'position', 'writeRGB', 'highByte',
505
+ 'writeRed', 'setSpeed', 'readBlue', 'noStroke', 'remoteIP', 'transfer',
506
+ 'shutdown', 'hangCall', 'beginSMS', 'endWrite', 'attached', 'maintain',
507
+ 'noCursor', 'checkReg', 'checkPUK', 'shiftOut', 'isValid', 'shiftIn', 'pulseIn',
508
+ 'connect', 'println', 'localIP', 'pinMode', 'getIMEI', 'display', 'noBlink',
509
+ 'process', 'getBand', 'running', 'beginSD', 'drawBMP', 'lowByte', 'setBand',
510
+ 'release', 'bitRead', 'prepare', 'pointTo', 'readRed', 'setMode', 'noFill',
511
+ 'remove', 'listen', 'stroke', 'detach', 'attach', 'noTone', 'exists', 'buffer',
512
+ 'height', 'bitSet', 'circle', 'config', 'cursor', 'random', 'IRread', 'setDNS',
513
+ 'endSMS', 'getKey', 'micros', 'millis', 'begin', 'print', 'write', 'ready',
514
+ 'flush', 'width', 'isPIN', 'blink', 'clear', 'press', 'mkdir', 'rmdir', 'close',
515
+ 'point', 'yield', 'image', 'BSSID', 'click', 'delay', 'read', 'text', 'move',
516
+ 'peek', 'beep', 'rect', 'line', 'open', 'seek', 'fill', 'size', 'turn', 'stop',
517
+ 'home', 'find', 'step', 'tone', 'sqrt', 'RSSI', 'SSID', 'end', 'bit', 'tan',
518
+ 'cos', 'sin', 'pow', 'map', 'abs', 'max', 'min', 'get', 'run', 'put',
519
+ 'isAlphaNumeric', 'isAlpha', 'isAscii', 'isWhitespace', 'isControl', 'isDigit',
520
+ 'isGraph', 'isLowerCase', 'isPrintable', 'isPunct', 'isSpace', 'isUpperCase',
521
+ 'isHexadecimalDigit'}
522
+
523
+ # do not highlight
524
+ suppress_highlight = {
525
+ 'namespace', 'template', 'mutable', 'using', 'asm', 'typeid',
526
+ 'typename', 'this', 'alignof', 'constexpr', 'decltype', 'noexcept',
527
+ 'static_assert', 'thread_local', 'restrict'}
528
+
529
+ def get_tokens_unprocessed(self, text, stack=('root',)):
530
+ for index, token, value in CppLexer.get_tokens_unprocessed(self, text, stack):
531
+ if value in self.structure:
532
+ yield index, Name.Builtin, value
533
+ elif value in self.operators:
534
+ yield index, Operator, value
535
+ elif value in self.variables:
536
+ yield index, Keyword.Reserved, value
537
+ elif value in self.suppress_highlight:
538
+ yield index, Name, value
539
+ elif value in self.functions:
540
+ yield index, Name.Function, value
541
+ else:
542
+ yield index, token, value
543
+
544
+
545
+ class CharmciLexer(CppLexer):
546
+ """
547
+ For `Charm++ <https://charm.cs.illinois.edu>`_ interface files (.ci).
548
+ """
549
+
550
+ name = 'Charmci'
551
+ aliases = ['charmci']
552
+ filenames = ['*.ci']
553
+ version_added = '2.4'
554
+
555
+ mimetypes = []
556
+
557
+ tokens = {
558
+ 'keywords': [
559
+ (r'(module)(\s+)', bygroups(Keyword, Text), 'classname'),
560
+ (words(('mainmodule', 'mainchare', 'chare', 'array', 'group',
561
+ 'nodegroup', 'message', 'conditional')), Keyword),
562
+ (words(('entry', 'aggregate', 'threaded', 'sync', 'exclusive',
563
+ 'nokeep', 'notrace', 'immediate', 'expedited', 'inline',
564
+ 'local', 'python', 'accel', 'readwrite', 'writeonly',
565
+ 'accelblock', 'memcritical', 'packed', 'varsize',
566
+ 'initproc', 'initnode', 'initcall', 'stacksize',
567
+ 'createhere', 'createhome', 'reductiontarget', 'iget',
568
+ 'nocopy', 'mutable', 'migratable', 'readonly')), Keyword),
569
+ inherit,
570
+ ],
571
+ }
572
+
573
+
574
+ class OmgIdlLexer(CLexer):
575
+ """
576
+ Lexer for Object Management Group Interface Definition Language.
577
+ """
578
+
579
+ name = 'OMG Interface Definition Language'
580
+ url = 'https://www.omg.org/spec/IDL/About-IDL/'
581
+ aliases = ['omg-idl']
582
+ filenames = ['*.idl', '*.pidl']
583
+ mimetypes = []
584
+ version_added = '2.9'
585
+
586
+ scoped_name = r'((::)?\w+)+'
587
+
588
+ tokens = {
589
+ 'values': [
590
+ (words(('true', 'false'), prefix=r'(?i)', suffix=r'\b'), Number),
591
+ (r'([Ll]?)(")', bygroups(String.Affix, String.Double), 'string'),
592
+ (r'([Ll]?)(\')(\\[^\']+)(\')',
593
+ bygroups(String.Affix, String.Char, String.Escape, String.Char)),
594
+ (r'([Ll]?)(\')(\\\')(\')',
595
+ bygroups(String.Affix, String.Char, String.Escape, String.Char)),
596
+ (r'([Ll]?)(\'.\')', bygroups(String.Affix, String.Char)),
597
+ (r'[+-]?\d+(\.\d*)?[Ee][+-]?\d+', Number.Float),
598
+ (r'[+-]?(\d+\.\d*)|(\d*\.\d+)([Ee][+-]?\d+)?', Number.Float),
599
+ (r'(?i)[+-]?0x[0-9a-f]+', Number.Hex),
600
+ (r'[+-]?[1-9]\d*', Number.Integer),
601
+ (r'[+-]?0[0-7]*', Number.Oct),
602
+ (r'[\+\-\*\/%^&\|~]', Operator),
603
+ (words(('<<', '>>')), Operator),
604
+ (scoped_name, Name),
605
+ (r'[{};:,<>\[\]]', Punctuation),
606
+ ],
607
+ 'annotation_params': [
608
+ include('whitespace'),
609
+ (r'\(', Punctuation, '#push'),
610
+ include('values'),
611
+ (r'=', Punctuation),
612
+ (r'\)', Punctuation, '#pop'),
613
+ ],
614
+ 'annotation_params_maybe': [
615
+ (r'\(', Punctuation, 'annotation_params'),
616
+ include('whitespace'),
617
+ default('#pop'),
618
+ ],
619
+ 'annotation_appl': [
620
+ (r'@' + scoped_name, Name.Decorator, 'annotation_params_maybe'),
621
+ ],
622
+ 'enum': [
623
+ include('whitespace'),
624
+ (r'[{,]', Punctuation),
625
+ (r'\w+', Name.Constant),
626
+ include('annotation_appl'),
627
+ (r'\}', Punctuation, '#pop'),
628
+ ],
629
+ 'root': [
630
+ include('whitespace'),
631
+ (words((
632
+ 'typedef', 'const',
633
+ 'in', 'out', 'inout', 'local',
634
+ ), prefix=r'(?i)', suffix=r'\b'), Keyword.Declaration),
635
+ (words((
636
+ 'void', 'any', 'native', 'bitfield',
637
+ 'unsigned', 'boolean', 'char', 'wchar', 'octet', 'short', 'long',
638
+ 'int8', 'uint8', 'int16', 'int32', 'int64', 'uint16', 'uint32', 'uint64',
639
+ 'float', 'double', 'fixed',
640
+ 'sequence', 'string', 'wstring', 'map',
641
+ ), prefix=r'(?i)', suffix=r'\b'), Keyword.Type),
642
+ (words((
643
+ '@annotation', 'struct', 'union', 'bitset', 'interface',
644
+ 'exception', 'valuetype', 'eventtype', 'component',
645
+ ), prefix=r'(?i)', suffix=r'(\s+)(\w+)'), bygroups(Keyword, Whitespace, Name.Class)),
646
+ (words((
647
+ 'abstract', 'alias', 'attribute', 'case', 'connector',
648
+ 'consumes', 'context', 'custom', 'default', 'emits', 'factory',
649
+ 'finder', 'getraises', 'home', 'import', 'manages', 'mirrorport',
650
+ 'multiple', 'Object', 'oneway', 'primarykey', 'private', 'port',
651
+ 'porttype', 'provides', 'public', 'publishes', 'raises',
652
+ 'readonly', 'setraises', 'supports', 'switch', 'truncatable',
653
+ 'typeid', 'typename', 'typeprefix', 'uses', 'ValueBase',
654
+ ), prefix=r'(?i)', suffix=r'\b'), Keyword),
655
+ (r'(?i)(enum|bitmask)(\s+)(\w+)',
656
+ bygroups(Keyword, Whitespace, Name.Class), 'enum'),
657
+ (r'(?i)(module)(\s+)(\w+)',
658
+ bygroups(Keyword.Namespace, Whitespace, Name.Namespace)),
659
+ (r'(\w+)(\s*)(=)', bygroups(Name.Constant, Whitespace, Operator)),
660
+ (r'[\(\)]', Punctuation),
661
+ include('values'),
662
+ include('annotation_appl'),
663
+ ],
664
+ }
665
+
666
+
667
+ class PromelaLexer(CLexer):
668
+ """
669
+ For the Promela language used with SPIN.
670
+ """
671
+
672
+ name = 'Promela'
673
+ aliases = ['promela']
674
+ filenames = ['*.pml', '*.prom', '*.prm', '*.promela', '*.pr', '*.pm']
675
+ mimetypes = ['text/x-promela']
676
+ url = 'https://spinroot.com/spin/whatispin.html'
677
+ version_added = '2.18'
678
+
679
+ # Promela's language reference:
680
+ # https://spinroot.com/spin/Man/promela.html
681
+ # Promela's grammar definition:
682
+ # https://spinroot.com/spin/Man/grammar.html
683
+
684
+ tokens = {
685
+ 'statements': [
686
+ (r'(\[\]|<>|/\\|\\/)|(U|W|V)\b', Operator), # LTL Operators
687
+ (r'@', Punctuation), #remoterefs
688
+ (r'(\.)([a-zA-Z_]\w*)', bygroups(Operator, Name.Attribute)),
689
+ inherit
690
+ ],
691
+ 'types': [
692
+ # Predefined (data types)
693
+ (words((
694
+ 'bit', 'bool', 'byte', 'pid', 'short', 'int', 'unsigned'),
695
+ suffix=r'\b'),
696
+ Keyword.Type),
697
+ ],
698
+ 'keywords': [
699
+ # ControlFlow
700
+ (words((
701
+ 'atomic', 'break', 'd_step', 'do', 'od', 'for', 'in', 'goto',
702
+ 'if', 'fi', 'unless'), suffix=r'\b'),
703
+ Keyword),
704
+ # BasicStatements
705
+ (words((
706
+ 'assert', 'get_priority', 'printf', 'printm', 'set_priority'),
707
+ suffix=r'\b'),
708
+ Name.Function),
709
+ # Embedded C Code
710
+ (words((
711
+ 'c_code', 'c_decl', 'c_expr', 'c_state', 'c_track'),
712
+ suffix=r'\b'),
713
+ Keyword),
714
+ # Predefined (local/global variables)
715
+ (words((
716
+ '_', '_last', '_nr_pr', '_pid', '_priority', 'else', 'np_',
717
+ 'STDIN'), suffix=r'\b'),
718
+ Name.Builtin),
719
+ # Predefined (functions)
720
+ (words((
721
+ 'empty', 'enabled', 'eval', 'full', 'len', 'nempty', 'nfull',
722
+ 'pc_value'), suffix=r'\b'),
723
+ Name.Function),
724
+ # Predefined (operators)
725
+ (r'run\b', Operator.Word),
726
+ # Declarators
727
+ (words((
728
+ 'active', 'chan', 'D_proctype', 'hidden', 'init', 'local',
729
+ 'mtype', 'never', 'notrace', 'proctype', 'show', 'trace',
730
+ 'typedef', 'xr', 'xs'), suffix=r'\b'),
731
+ Keyword.Declaration),
732
+ # Declarators (suffixes)
733
+ (words((
734
+ 'priority', 'provided'), suffix=r'\b'),
735
+ Keyword),
736
+ # MetaTerms (declarators)
737
+ (words((
738
+ 'inline', 'ltl', 'select'), suffix=r'\b'),
739
+ Keyword.Declaration),
740
+ # MetaTerms (keywords)
741
+ (r'skip\b', Keyword),
742
+ ],
743
+ }
venv/Lib/site-packages/pygments/lexers/capnproto.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.capnproto
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for the Cap'n Proto schema language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, default
12
+ from pygments.token import Text, Comment, Keyword, Name, Literal, Whitespace
13
+
14
+ __all__ = ['CapnProtoLexer']
15
+
16
+
17
+ class CapnProtoLexer(RegexLexer):
18
+ """
19
+ For Cap'n Proto source.
20
+ """
21
+ name = 'Cap\'n Proto'
22
+ url = 'https://capnproto.org'
23
+ filenames = ['*.capnp']
24
+ aliases = ['capnp']
25
+ version_added = '2.2'
26
+
27
+ tokens = {
28
+ 'root': [
29
+ (r'#.*?$', Comment.Single),
30
+ (r'@[0-9a-zA-Z]*', Name.Decorator),
31
+ (r'=', Literal, 'expression'),
32
+ (r':', Name.Class, 'type'),
33
+ (r'\$', Name.Attribute, 'annotation'),
34
+ (r'(struct|enum|interface|union|import|using|const|annotation|'
35
+ r'extends|in|of|on|as|with|from|fixed)\b',
36
+ Keyword),
37
+ (r'[\w.]+', Name),
38
+ (r'[^#@=:$\w\s]+', Text),
39
+ (r'\s+', Whitespace),
40
+ ],
41
+ 'type': [
42
+ (r'[^][=;,(){}$]+', Name.Class),
43
+ (r'[\[(]', Name.Class, 'parentype'),
44
+ default('#pop'),
45
+ ],
46
+ 'parentype': [
47
+ (r'[^][;()]+', Name.Class),
48
+ (r'[\[(]', Name.Class, '#push'),
49
+ (r'[])]', Name.Class, '#pop'),
50
+ default('#pop'),
51
+ ],
52
+ 'expression': [
53
+ (r'[^][;,(){}$]+', Literal),
54
+ (r'[\[(]', Literal, 'parenexp'),
55
+ default('#pop'),
56
+ ],
57
+ 'parenexp': [
58
+ (r'[^][;()]+', Literal),
59
+ (r'[\[(]', Literal, '#push'),
60
+ (r'[])]', Literal, '#pop'),
61
+ default('#pop'),
62
+ ],
63
+ 'annotation': [
64
+ (r'[^][;,(){}=:]+', Name.Attribute),
65
+ (r'[\[(]', Name.Attribute, 'annexp'),
66
+ default('#pop'),
67
+ ],
68
+ 'annexp': [
69
+ (r'[^][;()]+', Name.Attribute),
70
+ (r'[\[(]', Name.Attribute, '#push'),
71
+ (r'[])]', Name.Attribute, '#pop'),
72
+ default('#pop'),
73
+ ],
74
+ }
venv/Lib/site-packages/pygments/lexers/carbon.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.carbon
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for the Carbon programming language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+ import re
11
+
12
+ from pygments.lexer import RegexLexer, words
13
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
14
+ Number, Punctuation, Whitespace
15
+
16
+ __all__ = ['CarbonLexer']
17
+
18
+
19
+ class CarbonLexer(RegexLexer):
20
+ """
21
+ For Carbon source.
22
+ """
23
+ name = 'Carbon'
24
+ url = 'https://github.com/carbon-language/carbon-lang'
25
+ filenames = ['*.carbon']
26
+ aliases = ['carbon']
27
+ mimetypes = ['text/x-carbon']
28
+ version_added = '2.15'
29
+
30
+ flags = re.MULTILINE | re.DOTALL
31
+
32
+ tokens = {
33
+ 'root': [
34
+ (r'\n', Whitespace),
35
+ (r'\s+', Whitespace),
36
+ (r'\\\n', Text),
37
+ # comments
38
+ (r'//(.*?)\n', Comment.Single),
39
+ (r'/(\\\n)?[*].*?[*](\\\n)?/', Comment.Multiline),
40
+ # Declaration
41
+ (r'(package|import|api|namespace|library)\b', Keyword.Namespace),
42
+ (r'(abstract|alias|fn|class|interface|let|var|virtual|external|'
43
+ r'base|addr|extends|choice|constraint|impl)\b', Keyword.Declaration),
44
+ # Keywords
45
+ (words(('as', 'or', 'not', 'and', 'break', 'continue', 'case',
46
+ 'default', 'if', 'else', 'destructor', 'for', 'forall',
47
+ 'while', 'where', 'then', 'in', 'is', 'return', 'returned',
48
+ 'friend', 'partial', 'private', 'protected', 'observe', 'Self',
49
+ 'override', 'final', 'match', 'type', 'like'), suffix=r'\b'), Keyword),
50
+ (r'(self)\b', Keyword.Pseudo),
51
+ (r'(true|false)\b', Keyword.Constant),
52
+ (r'(auto|bool|string|i8|i16|i32|i64|u8|u16|u32|u64|'
53
+ r'f8|f16|f32|f64)\b', Keyword.Type),
54
+ # numeric literals
55
+ (r'[0-9]*[.][0-9]+', Number.Double),
56
+ (r'0b[01]+', Number.Bin),
57
+ (r'0o[0-7]+', Number.Oct),
58
+ (r'0x[0-9a-fA-F]+', Number.Hex),
59
+ (r'[0-9]+', Number.Integer),
60
+ # string literal
61
+ (r'"(\\.|[^"\\])*"', String),
62
+ # char literal
63
+ (r'\'(\\.|[^\'\\])\'', String.Char),
64
+ # tokens
65
+ (r'<<=|>>=|<<|>>|<=|>=|\+=|-=|\*=|/=|\%=|\|=|&=|\^=|&&|\|\||&|\||'
66
+ r'\+\+|--|\%|\^|\~|==|!=|::|[.]{3}|->|=>|[+\-*/&]', Operator),
67
+ (r'[|<>=!()\[\]{}.,;:\?]', Punctuation),
68
+ # identifiers
69
+ (r'[^\W\d]\w*', Name.Other),
70
+ ]
71
+ }
72
+
73
+ def analyse_text(text):
74
+ result = 0
75
+ if 'forall' in text:
76
+ result += 0.1
77
+ if 'type' in text:
78
+ result += 0.1
79
+ if 'Self' in text:
80
+ result += 0.1
81
+ if 'observe' in text:
82
+ result += 0.1
83
+ if 'package' in text:
84
+ result += 0.1
85
+ if 'library' in text:
86
+ result += 0.1
87
+ if 'choice' in text:
88
+ result += 0.1
89
+ if 'addr' in text:
90
+ result += 0.1
91
+ if 'constraint' in text:
92
+ result += 0.1
93
+ if 'impl' in text:
94
+ result += 0.1
95
+ return result
venv/Lib/site-packages/pygments/lexers/cddl.py ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.cddl
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Concise data definition language (CDDL), a notational
6
+ convention to express CBOR and JSON data structures.
7
+
8
+ More information:
9
+ https://datatracker.ietf.org/doc/rfc8610/
10
+
11
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
12
+ :license: BSD, see LICENSE for details.
13
+ """
14
+
15
+ from pygments.lexer import RegexLexer, bygroups, include, words
16
+ from pygments.token import Comment, Error, Keyword, Name, Number, Operator, \
17
+ Punctuation, String, Whitespace
18
+
19
+ __all__ = ['CddlLexer']
20
+
21
+
22
+ class CddlLexer(RegexLexer):
23
+ """
24
+ Lexer for CDDL definitions.
25
+ """
26
+ name = "CDDL"
27
+ url = 'https://datatracker.ietf.org/doc/rfc8610/'
28
+ aliases = ["cddl"]
29
+ filenames = ["*.cddl"]
30
+ mimetypes = ["text/x-cddl"]
31
+ version_added = '2.8'
32
+
33
+ _prelude_types = [
34
+ "any",
35
+ "b64legacy",
36
+ "b64url",
37
+ "bigfloat",
38
+ "bigint",
39
+ "bignint",
40
+ "biguint",
41
+ "bool",
42
+ "bstr",
43
+ "bytes",
44
+ "cbor-any",
45
+ "decfrac",
46
+ "eb16",
47
+ "eb64legacy",
48
+ "eb64url",
49
+ "encoded-cbor",
50
+ "false",
51
+ "float",
52
+ "float16",
53
+ "float16-32",
54
+ "float32",
55
+ "float32-64",
56
+ "float64",
57
+ "int",
58
+ "integer",
59
+ "mime-message",
60
+ "nil",
61
+ "nint",
62
+ "null",
63
+ "number",
64
+ "regexp",
65
+ "tdate",
66
+ "text",
67
+ "time",
68
+ "true",
69
+ "tstr",
70
+ "uint",
71
+ "undefined",
72
+ "unsigned",
73
+ "uri",
74
+ ]
75
+
76
+ _controls = [
77
+ ".and",
78
+ ".bits",
79
+ ".cbor",
80
+ ".cborseq",
81
+ ".default",
82
+ ".eq",
83
+ ".ge",
84
+ ".gt",
85
+ ".le",
86
+ ".lt",
87
+ ".ne",
88
+ ".regexp",
89
+ ".size",
90
+ ".within",
91
+ ]
92
+
93
+ _re_id = (
94
+ r"[$@A-Z_a-z]"
95
+ r"(?:[\-\.]+(?=[$@0-9A-Z_a-z])|[$@0-9A-Z_a-z])*"
96
+
97
+ )
98
+
99
+ # While the spec reads more like "an int must not start with 0" we use a
100
+ # lookahead here that says "after a 0 there must be no digit". This makes the
101
+ # '0' the invalid character in '01', which looks nicer when highlighted.
102
+ _re_uint = r"(?:0b[01]+|0x[0-9a-fA-F]+|[1-9]\d*|0(?!\d))"
103
+ _re_int = r"-?" + _re_uint
104
+
105
+ tokens = {
106
+ "commentsandwhitespace": [(r"\s+", Whitespace), (r";.+$", Comment.Single)],
107
+ "root": [
108
+ include("commentsandwhitespace"),
109
+ # tag types
110
+ (rf"#(\d\.{_re_uint})?", Keyword.Type), # type or any
111
+ # occurrence
112
+ (
113
+ rf"({_re_uint})?(\*)({_re_uint})?",
114
+ bygroups(Number, Operator, Number),
115
+ ),
116
+ (r"\?|\+", Operator), # occurrence
117
+ (r"\^", Operator), # cuts
118
+ (r"(\.\.\.|\.\.)", Operator), # rangeop
119
+ (words(_controls, suffix=r"\b"), Operator.Word), # ctlops
120
+ # into choice op
121
+ (rf"&(?=\s*({_re_id}|\())", Operator),
122
+ (rf"~(?=\s*{_re_id})", Operator), # unwrap op
123
+ (r"//|/(?!/)", Operator), # double und single slash
124
+ (r"=>|/==|/=|=", Operator),
125
+ (r"[\[\]{}\(\),<>:]", Punctuation),
126
+ # Bytestrings
127
+ (r"(b64)(')", bygroups(String.Affix, String.Single), "bstrb64url"),
128
+ (r"(h)(')", bygroups(String.Affix, String.Single), "bstrh"),
129
+ (r"'", String.Single, "bstr"),
130
+ # Barewords as member keys (must be matched before values, types, typenames,
131
+ # groupnames).
132
+ # Token type is String as barewords are always interpreted as such.
133
+ (rf"({_re_id})(\s*)(:)",
134
+ bygroups(String, Whitespace, Punctuation)),
135
+ # predefined types
136
+ (words(_prelude_types, prefix=r"(?![\-_$@])\b", suffix=r"\b(?![\-_$@])"),
137
+ Name.Builtin),
138
+ # user-defined groupnames, typenames
139
+ (_re_id, Name.Class),
140
+ # values
141
+ (r"0b[01]+", Number.Bin),
142
+ (r"0o[0-7]+", Number.Oct),
143
+ (r"0x[0-9a-fA-F]+(\.[0-9a-fA-F]+)?p[+-]?\d+", Number.Hex), # hexfloat
144
+ (r"0x[0-9a-fA-F]+", Number.Hex), # hex
145
+ # Float
146
+ (rf"{_re_int}(?=(\.\d|e[+-]?\d))(?:\.\d+)?(?:e[+-]?\d+)?",
147
+ Number.Float),
148
+ # Int
149
+ (_re_int, Number.Integer),
150
+ (r'"(\\\\|\\"|[^"])*"', String.Double),
151
+ ],
152
+ "bstrb64url": [
153
+ (r"'", String.Single, "#pop"),
154
+ include("commentsandwhitespace"),
155
+ (r"\\.", String.Escape),
156
+ (r"[0-9a-zA-Z\-_=]+", String.Single),
157
+ (r".", Error),
158
+ # (r";.+$", Token.Other),
159
+ ],
160
+ "bstrh": [
161
+ (r"'", String.Single, "#pop"),
162
+ include("commentsandwhitespace"),
163
+ (r"\\.", String.Escape),
164
+ (r"[0-9a-fA-F]+", String.Single),
165
+ (r".", Error),
166
+ ],
167
+ "bstr": [
168
+ (r"'", String.Single, "#pop"),
169
+ (r"\\.", String.Escape),
170
+ (r"[^'\\]+", String.Single),
171
+ ],
172
+ }
venv/Lib/site-packages/pygments/lexers/cel.py ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.cel
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for CEL (Common Expression Language).
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ __all__ = ['CELLexer']
12
+
13
+ import re
14
+
15
+ from pygments.lexer import RegexLexer, words
16
+ from pygments.token import (
17
+ Comment, Keyword, Name, Number, Operator, Punctuation, String, Whitespace,
18
+ )
19
+
20
+
21
+ class CELLexer(RegexLexer):
22
+ """Lexer for CEL (Common Expression Language)."""
23
+
24
+ name = 'CEL'
25
+ aliases = ['cel']
26
+ filenames = ['*.cel']
27
+ mimetypes = []
28
+ url = 'https://cel.dev'
29
+ version_added = '2.21'
30
+
31
+ flags = re.MULTILINE | re.UNICODE
32
+
33
+ # Escape sequence per the CEL spec:
34
+ # \a \b \f \n \r \t \v \\ \" \' \` \?
35
+ # \xHH or \XHH (exactly 2 hex digits)
36
+ # \uHHHH (exactly 4 hex digits)
37
+ # \UHHHHHHHH (exactly 8 hex digits)
38
+ # \OOO (3-digit octal, first digit 0-3)
39
+ # \. (fallback for unknown escapes)
40
+ _ESCAPE = r"""\\(?:[abfnrtv\\"'`?]|[xX][0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[0-3][0-7][0-7]|.)"""
41
+
42
+ # Raw prefix: r/R alone, or b/B combined with r/R in either order
43
+ _RAW = r'(?:[bB][rR]|[rR][bB]|[rR])'
44
+
45
+ tokens = {
46
+ 'root': [
47
+ (r'\s+', Whitespace),
48
+ # CEL only has line comments; no block comments.
49
+ (r'//.*$', Comment.Single),
50
+
51
+ # Bytes and string literals.
52
+ # Raw variants (no escape processing) must be tried before
53
+ # non-raw so that br/rb/r prefixes are consumed greedily.
54
+ # Triple-quoted raw (br""", rb""", r""")
55
+ (_RAW + r'"""', String, 'triple-double-raw'),
56
+ (_RAW + r"'''", String, 'triple-single-raw'),
57
+ # Triple-quoted non-raw with optional b prefix (b""" or """)
58
+ (r'[bB]?"""', String, 'triple-double'),
59
+ (r"[bB]?'''", String, 'triple-single'),
60
+ # Single-line raw
61
+ (_RAW + r'"[^"\r\n]*"', String),
62
+ (_RAW + r"'[^'\r\n]*'", String),
63
+ # Single-line non-raw with optional b prefix
64
+ (r'[bB]?"', String, 'double-string'),
65
+ (r"[bB]?'", String, 'single-string'),
66
+
67
+ # Numbers.
68
+ # uint_literal: integer (decimal or hex) followed by u/U suffix.
69
+ (r'(?:0[xX][0-9a-fA-F]+|0|[1-9][0-9]*)[uU]', Number.Integer),
70
+ # float_literal: the grammar requires digits on both sides of the
71
+ # decimal point for the dotted form — `1.` is not valid CEL.
72
+ (r'(?:[0-9]+\.[0-9]+(?:[eE][+-]?[0-9]+)?'
73
+ r'|[0-9]+[eE][+-]?[0-9]+'
74
+ r'|\.[0-9]+(?:[eE][+-]?[0-9]+)?)',
75
+ Number.Float),
76
+ # int_literal: hex or decimal.
77
+ (r'0[xX][0-9a-fA-F]+|0|[1-9][0-9]*', Number.Integer),
78
+
79
+ # Reserved keywords (may not appear as identifiers).
80
+ (words((
81
+ 'as', 'break', 'const', 'continue', 'else', 'for',
82
+ 'function', 'if', 'import', 'let', 'loop', 'namespace',
83
+ 'package', 'return', 'var', 'void', 'while',
84
+ ), suffix=r'\b'), Keyword.Reserved),
85
+ # `in` is a comparison operator keyword.
86
+ (r'in\b', Keyword),
87
+ # Built-in literal constants.
88
+ (words(('true', 'false', 'null'), suffix=r'\b'), Keyword.Constant),
89
+
90
+ # Logical and comparison operators.
91
+ (r'&&|\|\|', Operator),
92
+ (r'==|!=|<=|>=', Operator),
93
+ # Arithmetic, unary, ternary, and remaining comparison operators.
94
+ (r'[+\-*/%<>!?]', Operator),
95
+
96
+ # Punctuation: brackets, comma, dot, colon.
97
+ (r'[(){}\[\]]', Punctuation),
98
+ (r'[,.]', Punctuation),
99
+ (r':', Punctuation),
100
+
101
+ # Identifiers: start with letter or underscore (Unicode-aware).
102
+ (r'[^\W\d]\w*', Name),
103
+ ],
104
+
105
+ # Raw triple-quoted (no escape tokens; content is one big String).
106
+ 'triple-double-raw': [
107
+ (r'"""', String, '#pop'),
108
+ (r'"(?!"")', String),
109
+ (r'[^"]+', String),
110
+ ],
111
+ 'triple-single-raw': [
112
+ (r"'''", String, '#pop'),
113
+ (r"'(?!'')", String),
114
+ (r"[^']+", String),
115
+ ],
116
+
117
+ # Non-raw triple-quoted (escape sequences highlighted separately).
118
+ 'triple-double': [
119
+ (r'"""', String, '#pop'),
120
+ (_ESCAPE, String.Escape),
121
+ (r'"(?!"")', String),
122
+ (r'[^"\\]+', String),
123
+ ],
124
+ 'triple-single': [
125
+ (r"'''", String, '#pop'),
126
+ (_ESCAPE, String.Escape),
127
+ (r"'(?!'')", String),
128
+ (r"[^'\\]+", String),
129
+ ],
130
+
131
+ # Single-line non-raw strings (cannot span lines).
132
+ 'double-string': [
133
+ (r'"', String, '#pop'),
134
+ (_ESCAPE, String.Escape),
135
+ (r'[^"\\\r\n]+', String),
136
+ ],
137
+ 'single-string': [
138
+ (r"'", String, '#pop'),
139
+ (_ESCAPE, String.Escape),
140
+ (r"[^'\\\r\n]+", String),
141
+ ],
142
+ }
venv/Lib/site-packages/pygments/lexers/chapel.py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.chapel
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Chapel language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, bygroups, words
12
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
13
+ Number, Punctuation, Whitespace
14
+
15
+ __all__ = ['ChapelLexer']
16
+
17
+
18
+ class ChapelLexer(RegexLexer):
19
+ """
20
+ For Chapel source.
21
+ """
22
+ name = 'Chapel'
23
+ url = 'https://chapel-lang.org/'
24
+ filenames = ['*.chpl']
25
+ aliases = ['chapel', 'chpl']
26
+ version_added = '2.0'
27
+ # mimetypes = ['text/x-chapel']
28
+
29
+ known_types = ('bool', 'bytes', 'complex', 'imag', 'int', 'locale',
30
+ 'nothing', 'opaque', 'range', 'real', 'string', 'uint',
31
+ 'void')
32
+
33
+ type_modifiers_par = ('atomic', 'single', 'sync')
34
+ type_modifiers_mem = ('borrowed', 'owned', 'shared', 'unmanaged')
35
+ type_modifiers = (*type_modifiers_par, *type_modifiers_mem)
36
+
37
+ declarations = ('config', 'const', 'in', 'inout', 'out', 'param', 'ref',
38
+ 'type', 'var')
39
+
40
+ constants = ('false', 'nil', 'none', 'true')
41
+
42
+ other_keywords = ('align', 'as',
43
+ 'begin', 'break', 'by',
44
+ 'catch', 'cobegin', 'coforall', 'continue',
45
+ 'defer', 'delete', 'dmapped', 'do', 'domain',
46
+ 'else', 'enum', 'except', 'export', 'extern',
47
+ 'for', 'forall', 'foreach', 'forwarding',
48
+ 'if', 'implements', 'import', 'index', 'init', 'inline',
49
+ 'label', 'lambda', 'let', 'lifetime', 'local',
50
+ 'new', 'noinit',
51
+ 'on', 'only', 'otherwise', 'override',
52
+ 'pragma', 'primitive', 'private', 'prototype', 'public',
53
+ 'reduce', 'require', 'return',
54
+ 'scan', 'select', 'serial', 'sparse', 'subdomain',
55
+ 'then', 'this', 'throw', 'throws', 'try',
56
+ 'use',
57
+ 'when', 'where', 'while', 'with',
58
+ 'yield',
59
+ 'zip')
60
+
61
+ tokens = {
62
+ 'root': [
63
+ (r'\n', Whitespace),
64
+ (r'\s+', Whitespace),
65
+ (r'\\\n', Text),
66
+
67
+ (r'//(.*?)\n', Comment.Single),
68
+ (r'/(\\\n)?[*][\s\S]*?[*](\\\n)?/', Comment.Multiline),
69
+
70
+ (words(declarations, suffix=r'\b'), Keyword.Declaration),
71
+ (words(constants, suffix=r'\b'), Keyword.Constant),
72
+ (words(known_types, suffix=r'\b'), Keyword.Type),
73
+ (words((*type_modifiers, *other_keywords), suffix=r'\b'), Keyword),
74
+
75
+ (r'@', Keyword, 'attributename'),
76
+ (r'(iter)(\s+)', bygroups(Keyword, Whitespace), 'procname'),
77
+ (r'(proc)(\s+)', bygroups(Keyword, Whitespace), 'procname'),
78
+ (r'(operator)(\s+)', bygroups(Keyword, Whitespace), 'procname'),
79
+ (r'(class|interface|module|record|union)(\s+)', bygroups(Keyword, Whitespace),
80
+ 'classname'),
81
+
82
+ # imaginary integers
83
+ (r'\d+i', Number),
84
+ (r'\d+\.\d*([Ee][-+]\d+)?i', Number),
85
+ (r'\.\d+([Ee][-+]\d+)?i', Number),
86
+ (r'\d+[Ee][-+]\d+i', Number),
87
+
88
+ # reals cannot end with a period due to lexical ambiguity with
89
+ # .. operator. See reference for rationale.
90
+ (r'(\d*\.\d+)([eE][+-]?[0-9]+)?i?', Number.Float),
91
+ (r'\d+[eE][+-]?[0-9]+i?', Number.Float),
92
+
93
+ # integer literals
94
+ # -- binary
95
+ (r'0[bB][01]+', Number.Bin),
96
+ # -- hex
97
+ (r'0[xX][0-9a-fA-F]+', Number.Hex),
98
+ # -- octal
99
+ (r'0[oO][0-7]+', Number.Oct),
100
+ # -- decimal
101
+ (r'[0-9]+', Number.Integer),
102
+
103
+ # strings
104
+ (r'"(\\\\|\\"|[^"])*"', String),
105
+ (r"'(\\\\|\\'|[^'])*'", String),
106
+
107
+ # tokens
108
+ (r'(=|\+=|-=|\*=|/=|\*\*=|%=|&=|\|=|\^=|&&=|\|\|=|<<=|>>=|'
109
+ r'<=>|<~>|\.\.|by|#|\.\.\.|'
110
+ r'&&|\|\||!|&|\||\^|~|<<|>>|'
111
+ r'==|!=|<=|>=|<|>|'
112
+ r'[+\-*/%]|\*\*)', Operator),
113
+ (r'[:;,.?()\[\]{}]', Punctuation),
114
+
115
+ # identifiers
116
+ (r'[a-zA-Z_][\w$]*', Name.Other),
117
+ ],
118
+ 'classname': [
119
+ (r'[a-zA-Z_][\w$]*', Name.Class, '#pop'),
120
+ ],
121
+ 'procname': [
122
+ (r'([a-zA-Z_][.\w$]*|' # regular function name, including secondary
123
+ r'\~[a-zA-Z_][.\w$]*|' # support for legacy destructors
124
+ r'[+*/!~%<>=&^|\-:]{1,2})', # operators
125
+ Name.Function, '#pop'),
126
+
127
+ # allow `proc (atomic T).foo`
128
+ (r'\(', Punctuation, "receivertype"),
129
+ (r'\)+\.', Punctuation),
130
+ ],
131
+ 'receivertype': [
132
+ (words(type_modifiers, suffix=r'\b'), Keyword),
133
+ (words(known_types, suffix=r'\b'), Keyword.Type),
134
+ (r'[^()]*', Name.Other, '#pop'),
135
+ ],
136
+ 'attributename': [
137
+ (r'[a-zA-Z_][.\w$]*', Name.Decorator, '#pop'),
138
+ ],
139
+ }
venv/Lib/site-packages/pygments/lexers/clean.py ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.clean
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Clean language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import ExtendedRegexLexer, words, default, include, bygroups
12
+ from pygments.token import Comment, Error, Keyword, Literal, Name, Number, \
13
+ Operator, Punctuation, String, Whitespace
14
+
15
+ __all__ = ['CleanLexer']
16
+
17
+
18
+ class CleanLexer(ExtendedRegexLexer):
19
+ """
20
+ Lexer for the general purpose, state-of-the-art, pure and lazy functional
21
+ programming language Clean.
22
+
23
+ .. versionadded: 2.2
24
+ """
25
+ name = 'Clean'
26
+ url = 'http://clean.cs.ru.nl/Clean'
27
+ aliases = ['clean']
28
+ filenames = ['*.icl', '*.dcl']
29
+ version_added = ''
30
+
31
+ keywords = (
32
+ 'case', 'ccall', 'class', 'code', 'code inline', 'derive', 'export',
33
+ 'foreign', 'generic', 'if', 'in', 'infix', 'infixl', 'infixr',
34
+ 'instance', 'let', 'of', 'otherwise', 'special', 'stdcall', 'where',
35
+ 'with')
36
+
37
+ modulewords = ('implementation', 'definition', 'system')
38
+
39
+ lowerId = r'[a-z`][\w`]*'
40
+ upperId = r'[A-Z`][\w`]*'
41
+ funnyId = r'[~@#$%\^?!+\-*<>\\/|&=:]+'
42
+ scoreUpperId = r'_' + upperId
43
+ scoreLowerId = r'_' + lowerId
44
+ moduleId = r'[a-zA-Z_][a-zA-Z0-9_.`]+'
45
+ classId = '|'.join([lowerId, upperId, funnyId])
46
+
47
+ tokens = {
48
+ 'root': [
49
+ include('comments'),
50
+ include('keywords'),
51
+ include('module'),
52
+ include('import'),
53
+ include('whitespace'),
54
+ include('literals'),
55
+ include('operators'),
56
+ include('delimiters'),
57
+ include('names'),
58
+ ],
59
+ 'whitespace': [
60
+ (r'\s+', Whitespace),
61
+ ],
62
+ 'comments': [
63
+ (r'//.*\n', Comment.Single),
64
+ (r'/\*', Comment.Multiline, 'comments.in'),
65
+ (r'/\*\*', Comment.Special, 'comments.in'),
66
+ ],
67
+ 'comments.in': [
68
+ (r'\*\/', Comment.Multiline, '#pop'),
69
+ (r'/\*', Comment.Multiline, '#push'),
70
+ (r'[^*/]+', Comment.Multiline),
71
+ (r'\*(?!/)', Comment.Multiline),
72
+ (r'/', Comment.Multiline),
73
+ ],
74
+ 'keywords': [
75
+ (words(keywords, prefix=r'\b', suffix=r'\b'), Keyword),
76
+ ],
77
+ 'module': [
78
+ (words(modulewords, prefix=r'\b', suffix=r'\b'), Keyword.Namespace),
79
+ (r'\bmodule\b', Keyword.Namespace, 'module.name'),
80
+ ],
81
+ 'module.name': [
82
+ include('whitespace'),
83
+ (moduleId, Name.Class, '#pop'),
84
+ ],
85
+ 'import': [
86
+ (r'\b(import)\b(\s*)', bygroups(Keyword, Whitespace), 'import.module'),
87
+ (r'\b(from)\b(\s*)\b(' + moduleId + r')\b(\s*)\b(import)\b',
88
+ bygroups(Keyword, Whitespace, Name.Class, Whitespace, Keyword),
89
+ 'import.what'),
90
+ ],
91
+ 'import.module': [
92
+ (r'\b(qualified)\b(\s*)', bygroups(Keyword, Whitespace)),
93
+ (r'(\s*)\b(as)\b', bygroups(Whitespace, Keyword), ('#pop', 'import.module.as')),
94
+ (moduleId, Name.Class),
95
+ (r'(\s*)(,)(\s*)', bygroups(Whitespace, Punctuation, Whitespace)),
96
+ (r'\s+', Whitespace),
97
+ default('#pop'),
98
+ ],
99
+ 'import.module.as': [
100
+ include('whitespace'),
101
+ (lowerId, Name.Class, '#pop'),
102
+ (upperId, Name.Class, '#pop'),
103
+ ],
104
+ 'import.what': [
105
+ (r'\b(class)\b(\s+)(' + classId + r')',
106
+ bygroups(Keyword, Whitespace, Name.Class), 'import.what.class'),
107
+ (r'\b(instance)(\s+)(' + classId + r')(\s+)',
108
+ bygroups(Keyword, Whitespace, Name.Class, Whitespace), 'import.what.instance'),
109
+ (r'(::)(\s*)\b(' + upperId + r')\b',
110
+ bygroups(Punctuation, Whitespace, Name.Class), 'import.what.type'),
111
+ (r'\b(generic)\b(\s+)\b(' + lowerId + '|' + upperId + r')\b',
112
+ bygroups(Keyword, Whitespace, Name)),
113
+ include('names'),
114
+ (r'(,)(\s+)', bygroups(Punctuation, Whitespace)),
115
+ (r'$', Whitespace, '#pop'),
116
+ include('whitespace'),
117
+ ],
118
+ 'import.what.class': [
119
+ (r',', Punctuation, '#pop'),
120
+ (r'\(', Punctuation, 'import.what.class.members'),
121
+ (r'$', Whitespace, '#pop:2'),
122
+ include('whitespace'),
123
+ ],
124
+ 'import.what.class.members': [
125
+ (r',', Punctuation),
126
+ (r'\.\.', Punctuation),
127
+ (r'\)', Punctuation, '#pop'),
128
+ include('names'),
129
+ ],
130
+ 'import.what.instance': [
131
+ (r'[,)]', Punctuation, '#pop'),
132
+ (r'\(', Punctuation, 'import.what.instance'),
133
+ (r'$', Whitespace, '#pop:2'),
134
+ include('whitespace'),
135
+ include('names'),
136
+ ],
137
+ 'import.what.type': [
138
+ (r',', Punctuation, '#pop'),
139
+ (r'[({]', Punctuation, 'import.what.type.consesandfields'),
140
+ (r'$', Whitespace, '#pop:2'),
141
+ include('whitespace'),
142
+ ],
143
+ 'import.what.type.consesandfields': [
144
+ (r',', Punctuation),
145
+ (r'\.\.', Punctuation),
146
+ (r'[)}]', Punctuation, '#pop'),
147
+ include('names'),
148
+ ],
149
+ 'literals': [
150
+ (r'\'([^\'\\]|\\(x[\da-fA-F]+|\d+|.))\'', Literal.Char),
151
+ (r'[+~-]?0[0-7]+\b', Number.Oct),
152
+ (r'[+~-]?\d+\.\d+(E[+-]?\d+)?', Number.Float),
153
+ (r'[+~-]?\d+\b', Number.Integer),
154
+ (r'[+~-]?0x[\da-fA-F]+\b', Number.Hex),
155
+ (r'True|False', Literal),
156
+ (r'"', String.Double, 'literals.stringd'),
157
+ ],
158
+ 'literals.stringd': [
159
+ (r'[^\\"\n]+', String.Double),
160
+ (r'"', String.Double, '#pop'),
161
+ (r'\\.', String.Double),
162
+ (r'[$\n]', Error, '#pop'),
163
+ ],
164
+ 'operators': [
165
+ (r'[-~@#$%\^?!+*<>\\/|&=:.]+', Operator),
166
+ (r'\b_+\b', Operator),
167
+ ],
168
+ 'delimiters': [
169
+ (r'[,;(){}\[\]]', Punctuation),
170
+ (r'(\')([\w`.]+)(\')',
171
+ bygroups(Punctuation, Name.Class, Punctuation)),
172
+ ],
173
+ 'names': [
174
+ (lowerId, Name),
175
+ (scoreLowerId, Name),
176
+ (funnyId, Name.Function),
177
+ (upperId, Name.Class),
178
+ (scoreUpperId, Name.Class),
179
+ ]
180
+ }
venv/Lib/site-packages/pygments/lexers/codeql.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.codeql
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for CodeQL query language.
6
+
7
+ The grammar is originating from:
8
+ https://github.com/github/vscode-codeql/blob/main/syntaxes/README.md
9
+
10
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
11
+ :license: BSD, see LICENSE for details.
12
+ """
13
+
14
+ __all__ = ['CodeQLLexer']
15
+
16
+ import re
17
+
18
+ from pygments.lexer import RegexLexer, words
19
+ from pygments.token import Comment, Operator, Keyword, Name, String, \
20
+ Number, Punctuation, Whitespace
21
+
22
+ class CodeQLLexer(RegexLexer):
23
+ name = 'CodeQL'
24
+ aliases = ['codeql', 'ql']
25
+ filenames = ['*.ql', '*.qll']
26
+ mimetypes = []
27
+ url = 'https://github.com/github/codeql'
28
+ version_added = '2.19'
29
+
30
+ flags = re.MULTILINE | re.UNICODE
31
+
32
+ tokens = {
33
+ 'root': [
34
+ # Whitespace and comments
35
+ (r'\s+', Whitespace),
36
+ (r'//.*?\n', Comment.Single),
37
+ (r'/\*', Comment.Multiline, 'multiline-comments'),
38
+
39
+ # Keywords
40
+ (words((
41
+ 'module', 'import', 'class', 'extends', 'implements',
42
+ 'predicate', 'select', 'where', 'from', 'as', 'and', 'or', 'not',
43
+ 'in', 'if', 'then', 'else', 'exists', 'forall', 'instanceof',
44
+ 'private', 'predicate', 'abstract', 'cached', 'external',
45
+ 'final', 'library', 'override', 'query'
46
+ ), suffix=r'\b'), Keyword.Builtin),
47
+
48
+ # Special Keywords
49
+ (words(('this'), # class related keywords
50
+ prefix=r'\b', suffix=r'\b\??:?'), Name.Builtin.Pseudo),
51
+
52
+ # Types
53
+ (words((
54
+ 'boolean', 'date', 'float', 'int', 'string'
55
+ ), suffix=r'\b'), Keyword.Type),
56
+
57
+ # Literals
58
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
59
+ (r'[0-9]+\.[0-9]+', Number.Float),
60
+ (r'[0-9]+', Number.Integer),
61
+
62
+ # Operators
63
+ (r'<=|>=|<|>|=|!=|\+|-|\*|/', Operator),
64
+
65
+ # Punctuation
66
+ (r'[.,;:\[\]{}()]+', Punctuation),
67
+
68
+ # Identifiers
69
+ (r'@[a-zA-Z_]\w*', Name.Variable), # Variables with @ prefix
70
+ (r'[A-Z][a-zA-Z0-9_]*', Name.Class), # Types and classes
71
+ (r'[a-z][a-zA-Z0-9_]*', Name.Variable), # Variables and predicates
72
+ ],
73
+ 'multiline-comments': [
74
+ (r'[^*/]+', Comment.Multiline),
75
+ (r'/\*', Comment.Multiline, '#push'),
76
+ (r'\*/', Comment.Multiline, '#pop'),
77
+ (r'[*/]', Comment.Multiline),
78
+ ],
79
+
80
+ }
venv/Lib/site-packages/pygments/lexers/comal.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.comal
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for COMAL-80.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, words
14
+ from pygments.token import Comment, Whitespace, Operator, Keyword, String, \
15
+ Number, Name, Punctuation
16
+
17
+ __all__ = ["Comal80Lexer"]
18
+
19
+
20
+ class Comal80Lexer(RegexLexer):
21
+ """
22
+ For COMAL-80 source code.
23
+ """
24
+
25
+ name = 'COMAL-80'
26
+ url = 'https://en.wikipedia.org/wiki/COMAL'
27
+ aliases = ['comal', 'comal80']
28
+ filenames = ['*.cml', '*.comal']
29
+ version_added = ''
30
+ flags = re.IGNORECASE
31
+ #
32
+ # COMAL allows for some strange characters in names which we list here so
33
+ # keywords and word operators will not be recognized at the start of an
34
+ # identifier.
35
+ #
36
+ _suffix = r"\b(?!['\[\]←£\\])"
37
+ _identifier = r"[a-z]['\[\]←£\\\w]*"
38
+
39
+ tokens = {
40
+ 'root': [
41
+ (r'//.*\n', Comment.Single),
42
+ (r'\s+', Whitespace),
43
+ (r':[=+-]|\<\>|[-+*/^↑<>=]', Operator),
44
+ (r'(and +then|or +else)' + _suffix, Operator.Word),
45
+ (words([
46
+ 'and', 'bitand', 'bitor', 'bitxor', 'div', 'in', 'mod', 'not',
47
+ 'or'], suffix=_suffix,), Operator.Word),
48
+ (words([
49
+ 'append', 'at', 'case', 'chain', 'close', 'copy', 'create', 'cursor',
50
+ 'data', 'delete', 'dir', 'do', 'elif', 'else', 'end', 'endcase', 'endif',
51
+ 'endfor', 'endloop', 'endtrap', 'endwhile', 'exec', 'exit', 'file',
52
+ 'for', 'goto', 'handler', 'if', 'input', 'let', 'loop', 'mount', 'null',
53
+ 'of', 'open', 'otherwise', 'output', 'page', 'pass', 'poke', 'print',
54
+ 'random', 'read', 'repeat', 'report', 'return', 'rename', 'restore',
55
+ 'select', 'step', 'stop', 'sys', 'then', 'to', 'trap', 'unit', 'unit$',
56
+ 'until', 'using', 'when', 'while', 'write', 'zone'], suffix=_suffix),
57
+ Keyword.Reserved),
58
+ (words([
59
+ 'closed', 'dim', 'endfunc', 'endproc', 'external', 'func', 'import',
60
+ 'proc', 'ref', 'use'], suffix=_suffix), Keyword.Declaration),
61
+ (words([
62
+ 'abs', 'atn', 'chr$', 'cos', 'eod', 'eof', 'err', 'errfile', 'errtext',
63
+ 'esc', 'exp', 'int', 'key$', 'len', 'log', 'ord', 'peek', 'randomize',
64
+ 'rnd', 'sgn', 'sin', 'spc$', 'sqr', 'status$', 'str$', 'tab', 'tan',
65
+ 'time', 'val'], suffix=_suffix), Name.Builtin),
66
+ (words(['false', 'pi', 'true'], suffix=_suffix), Keyword.Constant),
67
+ (r'"', String, 'string'),
68
+ (_identifier + r":(?=[ \n/])", Name.Label),
69
+ (_identifier + r"[$#]?", Name),
70
+ (r'%[01]+', Number.Bin),
71
+ (r'\$[0-9a-f]+', Number.Hex),
72
+ (r'\d*\.\d*(e[-+]?\d+)?', Number.Float),
73
+ (r'\d+', Number.Integer),
74
+ (r'[(),:;]', Punctuation),
75
+ ],
76
+ 'string': [
77
+ (r'[^"]+', String),
78
+ (r'"[0-9]*"', String.Escape),
79
+ (r'"', String, '#pop'),
80
+ ],
81
+ }
venv/Lib/site-packages/pygments/lexers/compiled.py ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.compiled
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Just export lexer classes previously contained in this module.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ # ruff: noqa: F401
12
+ from pygments.lexers.jvm import JavaLexer, ScalaLexer
13
+ from pygments.lexers.c_cpp import CLexer, CppLexer
14
+ from pygments.lexers.d import DLexer
15
+ from pygments.lexers.objective import ObjectiveCLexer, \
16
+ ObjectiveCppLexer, LogosLexer
17
+ from pygments.lexers.go import GoLexer
18
+ from pygments.lexers.rust import RustLexer
19
+ from pygments.lexers.c_like import ECLexer, ValaLexer, CudaLexer
20
+ from pygments.lexers.pascal import DelphiLexer, PortugolLexer, Modula2Lexer
21
+ from pygments.lexers.ada import AdaLexer
22
+ from pygments.lexers.business import CobolLexer, CobolFreeformatLexer
23
+ from pygments.lexers.fortran import FortranLexer
24
+ from pygments.lexers.prolog import PrologLexer
25
+ from pygments.lexers.python import CythonLexer
26
+ from pygments.lexers.graphics import GLShaderLexer
27
+ from pygments.lexers.ml import OcamlLexer
28
+ from pygments.lexers.basic import BlitzBasicLexer, BlitzMaxLexer, MonkeyLexer
29
+ from pygments.lexers.dylan import DylanLexer, DylanLidLexer, DylanConsoleLexer
30
+ from pygments.lexers.ooc import OocLexer
31
+ from pygments.lexers.felix import FelixLexer
32
+ from pygments.lexers.nimrod import NimrodLexer
33
+ from pygments.lexers.crystal import CrystalLexer
34
+
35
+ __all__ = []
venv/Lib/site-packages/pygments/lexers/configs.py ADDED
@@ -0,0 +1,1499 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.configs
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for configuration file formats.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import ExtendedRegexLexer, RegexLexer, default, words, \
14
+ bygroups, include, using, this, line_re
15
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
+ Number, Punctuation, Whitespace, Literal, Error, Generic
17
+ from pygments.lexers.shell import BashLexer
18
+ from pygments.lexers.data import JsonLexer
19
+
20
+ __all__ = ['IniLexer', 'SystemdLexer', 'DesktopLexer', 'RegeditLexer', 'PropertiesLexer',
21
+ 'KconfigLexer', 'Cfengine3Lexer', 'ApacheConfLexer', 'SquidConfLexer',
22
+ 'NginxConfLexer', 'LighttpdConfLexer', 'DockerLexer',
23
+ 'TerraformLexer', 'TermcapLexer', 'TerminfoLexer',
24
+ 'PkgConfigLexer', 'PacmanConfLexer', 'AugeasLexer', 'TOMLLexer',
25
+ 'NestedTextLexer', 'SingularityLexer', 'UnixConfigLexer',
26
+ 'CaddyfileLexer']
27
+
28
+
29
+ class IniLexer(RegexLexer):
30
+ """
31
+ Lexer for configuration files in INI style.
32
+ """
33
+
34
+ name = 'INI'
35
+ aliases = ['ini', 'cfg', 'dosini']
36
+ filenames = [
37
+ '*.ini', '*.cfg', '*.inf', '.editorconfig',
38
+ ]
39
+ mimetypes = ['text/x-ini', 'text/inf']
40
+ url = 'https://en.wikipedia.org/wiki/INI_file'
41
+ version_added = ''
42
+
43
+ tokens = {
44
+ 'root': [
45
+ (r'\s+', Whitespace),
46
+ (r'[;#].*', Comment.Single),
47
+ (r'(\[.*?\])([ \t]*)$', bygroups(Keyword, Whitespace)),
48
+ (r'''(.*?)([ \t]*)([=:])([ \t]*)(["'])''',
49
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String),
50
+ "quoted_value"),
51
+ (r'(.*?)([ \t]*)([=:])([ \t]*)([^;#\n]*)(\\)(\s+)',
52
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String,
53
+ Text, Whitespace),
54
+ "value"),
55
+ (r'(.*?)([ \t]*)([=:])([ \t]*)([^ ;#\n]*(?: +[^ ;#\n]+)*)',
56
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String)),
57
+ # standalone option, supported by some INI parsers
58
+ (r'(.+?)$', Name.Attribute),
59
+ ],
60
+ 'quoted_value': [
61
+ (r'''([^"'\n]*)(["'])(\s*)''',
62
+ bygroups(String, String, Whitespace), "#pop"),
63
+ (r'[;#].*', Comment.Single),
64
+ (r'$', String, "#pop"),
65
+ ],
66
+ 'value': [ # line continuation
67
+ (r'\s+', Whitespace),
68
+ (r'(\s*)(.*)(\\)([ \t]*)',
69
+ bygroups(Whitespace, String, Text, Whitespace)),
70
+ (r'.*$', String, "#pop"),
71
+ ],
72
+ }
73
+
74
+ def analyse_text(text):
75
+ npos = text.find('\n')
76
+ if npos < 3:
77
+ return False
78
+ if text[0] == '[' and text[npos-1] == ']':
79
+ return 0.8
80
+ return False
81
+
82
+
83
+ class DesktopLexer(RegexLexer):
84
+ """
85
+ Lexer for .desktop files.
86
+ """
87
+
88
+ name = 'Desktop file'
89
+ url = "https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html"
90
+ aliases = ['desktop']
91
+ filenames = ['*.desktop']
92
+ mimetypes = ['application/x-desktop']
93
+ version_added = '2.16'
94
+
95
+ tokens = {
96
+ 'root': [
97
+ (r'^[ \t]*\n', Whitespace),
98
+ (r'^(#.*)(\n)', bygroups(Comment.Single, Whitespace)),
99
+ (r'(\[[^\]\n]+\])(\n)', bygroups(Keyword, Whitespace)),
100
+ (r'([-A-Za-z0-9]+)(\[[^\] \t=]+\])?([ \t]*)(=)([ \t]*)([^\n]*)([ \t\n]*\n)',
101
+ bygroups(Name.Attribute, Name.Namespace, Whitespace, Operator, Whitespace, String, Whitespace)),
102
+ ],
103
+ }
104
+
105
+ def analyse_text(text):
106
+ if text.startswith("[Desktop Entry]"):
107
+ return 1.0
108
+ if re.search(r"^\[Desktop Entry\][ \t]*$", text[:500], re.MULTILINE) is not None:
109
+ return 0.9
110
+ return 0.0
111
+
112
+
113
+ class SystemdLexer(RegexLexer):
114
+ """
115
+ Lexer for systemd unit files.
116
+ """
117
+
118
+ name = 'Systemd'
119
+ url = "https://www.freedesktop.org/software/systemd/man/systemd.syntax.html"
120
+ aliases = ['systemd']
121
+ filenames = [
122
+ '*.service', '*.socket', '*.device', '*.mount', '*.automount',
123
+ '*.swap', '*.target', '*.path', '*.timer', '*.slice', '*.scope',
124
+ ]
125
+ version_added = '2.16'
126
+
127
+ tokens = {
128
+ 'root': [
129
+ (r'^[ \t]*\n', Whitespace),
130
+ (r'^([;#].*)(\n)', bygroups(Comment.Single, Whitespace)),
131
+ (r'(\[[^\]\n]+\])(\n)', bygroups(Keyword, Whitespace)),
132
+ (r'([^=]+)([ \t]*)(=)([ \t]*)([^\n]*)(\\)(\n)',
133
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String,
134
+ Text, Whitespace),
135
+ "value"),
136
+ (r'([^=]+)([ \t]*)(=)([ \t]*)([^\n]*)(\n)',
137
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace, String, Whitespace)),
138
+ ],
139
+ 'value': [
140
+ # line continuation
141
+ (r'^([;#].*)(\n)', bygroups(Comment.Single, Whitespace)),
142
+ (r'([ \t]*)([^\n]*)(\\)(\n)',
143
+ bygroups(Whitespace, String, Text, Whitespace)),
144
+ (r'([ \t]*)([^\n]*)(\n)',
145
+ bygroups(Whitespace, String, Whitespace), "#pop"),
146
+ ],
147
+ }
148
+
149
+ def analyse_text(text):
150
+ if text.startswith("[Unit]"):
151
+ return 1.0
152
+ if re.search(r"^\[Unit\][ \t]*$", text[:500], re.MULTILINE) is not None:
153
+ return 0.9
154
+ return 0.0
155
+
156
+
157
+ class RegeditLexer(RegexLexer):
158
+ """
159
+ Lexer for Windows Registry files produced by regedit.
160
+ """
161
+
162
+ name = 'reg'
163
+ url = 'http://en.wikipedia.org/wiki/Windows_Registry#.REG_files'
164
+ aliases = ['registry']
165
+ filenames = ['*.reg']
166
+ mimetypes = ['text/x-windows-registry']
167
+ version_added = '1.6'
168
+
169
+ tokens = {
170
+ 'root': [
171
+ (r'Windows Registry Editor.*', Text),
172
+ (r'\s+', Whitespace),
173
+ (r'[;#].*', Comment.Single),
174
+ (r'(\[)(-?)(HKEY_[A-Z_]+)(.*?\])$',
175
+ bygroups(Keyword, Operator, Name.Builtin, Keyword)),
176
+ # String keys, which obey somewhat normal escaping
177
+ (r'("(?:\\"|\\\\|[^"])+")([ \t]*)(=)([ \t]*)',
178
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace),
179
+ 'value'),
180
+ # Bare keys (includes @)
181
+ (r'(.*?)([ \t]*)(=)([ \t]*)',
182
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace),
183
+ 'value'),
184
+ ],
185
+ 'value': [
186
+ (r'-', Operator, '#pop'), # delete value
187
+ (r'(dword|hex(?:\([0-9a-fA-F]\))?)(:)([0-9a-fA-F,]+)',
188
+ bygroups(Name.Variable, Punctuation, Number), '#pop'),
189
+ # As far as I know, .reg files do not support line continuation.
190
+ (r'.+', String, '#pop'),
191
+ default('#pop'),
192
+ ]
193
+ }
194
+
195
+ def analyse_text(text):
196
+ return text.startswith('Windows Registry Editor')
197
+
198
+
199
+ class PropertiesLexer(RegexLexer):
200
+ """
201
+ Lexer for configuration files in Java's properties format.
202
+
203
+ Note: trailing whitespace counts as part of the value as per spec
204
+ """
205
+
206
+ name = 'Properties'
207
+ aliases = ['properties', 'jproperties']
208
+ filenames = ['*.properties']
209
+ mimetypes = ['text/x-java-properties']
210
+ url = 'https://en.wikipedia.org/wiki/.properties'
211
+ version_added = '1.4'
212
+
213
+ tokens = {
214
+ 'root': [
215
+ # comments
216
+ (r'[!#].*|/{2}.*', Comment.Single),
217
+ # ending a comment or whitespace-only line
218
+ (r'\n', Whitespace),
219
+ # eat whitespace at the beginning of a line
220
+ (r'^[^\S\n]+', Whitespace),
221
+ # start lexing a key
222
+ default('key'),
223
+ ],
224
+ 'key': [
225
+ # non-escaped key characters
226
+ (r'[^\\:=\s]+', Name.Attribute),
227
+ # escapes
228
+ include('escapes'),
229
+ # separator is the first non-escaped whitespace or colon or '=' on the line;
230
+ # if it's whitespace, = and : are gobbled after it
231
+ (r'([^\S\n]*)([:=])([^\S\n]*)',
232
+ bygroups(Whitespace, Operator, Whitespace),
233
+ ('#pop', 'value')),
234
+ (r'[^\S\n]+', Whitespace, ('#pop', 'value')),
235
+ # maybe we got no value after all
236
+ (r'\n', Whitespace, '#pop'),
237
+ ],
238
+ 'value': [
239
+ # non-escaped value characters
240
+ (r'[^\\\n]+', String),
241
+ # escapes
242
+ include('escapes'),
243
+ # end the value on an unescaped newline
244
+ (r'\n', Whitespace, '#pop'),
245
+ ],
246
+ 'escapes': [
247
+ # line continuations; these gobble whitespace at the beginning of the next line
248
+ (r'(\\\n)([^\S\n]*)', bygroups(String.Escape, Whitespace)),
249
+ # other escapes
250
+ (r'\\([\s\S])', String.Escape),
251
+ ],
252
+ }
253
+
254
+
255
+ def _rx_indent(level):
256
+ # Kconfig *always* interprets a tab as 8 spaces, so this is the default.
257
+ # Edit this if you are in an environment where KconfigLexer gets expanded
258
+ # input (tabs expanded to spaces) and the expansion tab width is != 8,
259
+ # e.g. in connection with Trac (trac.ini, [mimeviewer], tab_width).
260
+ # Value range here is 2 <= {tab_width} <= 8.
261
+ tab_width = 8
262
+ # Regex matching a given indentation {level}, assuming that indentation is
263
+ # a multiple of {tab_width}. In other cases there might be problems.
264
+ if tab_width == 2:
265
+ space_repeat = '+'
266
+ else:
267
+ space_repeat = '{1,%d}' % (tab_width - 1)
268
+ if level == 1:
269
+ level_repeat = ''
270
+ else:
271
+ level_repeat = f'{{{level}}}'
272
+ return rf'(?:\t| {space_repeat}\t| {{{tab_width}}}){level_repeat}.*\n'
273
+
274
+
275
+ class KconfigLexer(RegexLexer):
276
+ """
277
+ For Linux-style Kconfig files.
278
+ """
279
+
280
+ name = 'Kconfig'
281
+ aliases = ['kconfig', 'menuconfig', 'linux-config', 'kernel-config']
282
+ version_added = '1.6'
283
+ # Adjust this if new kconfig file names appear in your environment
284
+ filenames = ['Kconfig*', '*Config.in*', 'external.in*',
285
+ 'standard-modules.in']
286
+ mimetypes = ['text/x-kconfig']
287
+ url = 'https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html'
288
+
289
+ # No re.MULTILINE, indentation-aware help text needs line-by-line handling
290
+ flags = 0
291
+
292
+ def call_indent(level):
293
+ # If indentation >= {level} is detected, enter state 'indent{level}'
294
+ return (_rx_indent(level), String.Doc, f'indent{level}')
295
+
296
+ def do_indent(level):
297
+ # Print paragraphs of indentation level >= {level} as String.Doc,
298
+ # ignoring blank lines. Then return to 'root' state.
299
+ return [
300
+ (_rx_indent(level), String.Doc),
301
+ (r'\s*\n', Text),
302
+ default('#pop:2')
303
+ ]
304
+
305
+ tokens = {
306
+ 'root': [
307
+ (r'\s+', Whitespace),
308
+ (r'#.*?\n', Comment.Single),
309
+ (words((
310
+ 'mainmenu', 'config', 'menuconfig', 'choice', 'endchoice',
311
+ 'comment', 'menu', 'endmenu', 'visible if', 'if', 'endif',
312
+ 'source', 'prompt', 'select', 'depends on', 'default',
313
+ 'range', 'option'), suffix=r'\b'),
314
+ Keyword),
315
+ (r'(---help---|help)[\t ]*\n', Keyword, 'help'),
316
+ (r'(bool|tristate|string|hex|int|defconfig_list|modules|env)\b',
317
+ Name.Builtin),
318
+ (r'[!=&|]', Operator),
319
+ (r'[()]', Punctuation),
320
+ (r'[0-9]+', Number.Integer),
321
+ (r"'(''|[^'])*'", String.Single),
322
+ (r'"(""|[^"])*"', String.Double),
323
+ (r'\S+', Text),
324
+ ],
325
+ # Help text is indented, multi-line and ends when a lower indentation
326
+ # level is detected.
327
+ 'help': [
328
+ # Skip blank lines after help token, if any
329
+ (r'\s*\n', Text),
330
+ # Determine the first help line's indentation level heuristically(!).
331
+ # Attention: this is not perfect, but works for 99% of "normal"
332
+ # indentation schemes up to a max. indentation level of 7.
333
+ call_indent(7),
334
+ call_indent(6),
335
+ call_indent(5),
336
+ call_indent(4),
337
+ call_indent(3),
338
+ call_indent(2),
339
+ call_indent(1),
340
+ default('#pop'), # for incomplete help sections without text
341
+ ],
342
+ # Handle text for indentation levels 7 to 1
343
+ 'indent7': do_indent(7),
344
+ 'indent6': do_indent(6),
345
+ 'indent5': do_indent(5),
346
+ 'indent4': do_indent(4),
347
+ 'indent3': do_indent(3),
348
+ 'indent2': do_indent(2),
349
+ 'indent1': do_indent(1),
350
+ }
351
+
352
+
353
+ class Cfengine3Lexer(RegexLexer):
354
+ """
355
+ Lexer for CFEngine3 policy files.
356
+ """
357
+
358
+ name = 'CFEngine3'
359
+ url = 'http://cfengine.org'
360
+ aliases = ['cfengine3', 'cf3']
361
+ filenames = ['*.cf']
362
+ mimetypes = []
363
+ version_added = '1.5'
364
+
365
+ tokens = {
366
+ 'root': [
367
+ (r'#.*?\n', Comment),
368
+ (r'(body)(\s+)(\S+)(\s+)(control)',
369
+ bygroups(Keyword, Whitespace, Keyword, Whitespace, Keyword)),
370
+ (r'(body|bundle)(\s+)(\S+)(\s+)(\w+)(\()',
371
+ bygroups(Keyword, Whitespace, Keyword, Whitespace, Name.Function, Punctuation),
372
+ 'arglist'),
373
+ (r'(body|bundle)(\s+)(\S+)(\s+)(\w+)',
374
+ bygroups(Keyword, Whitespace, Keyword, Whitespace, Name.Function)),
375
+ (r'(")([^"]+)(")(\s+)(string|slist|int|real)(\s*)(=>)(\s*)',
376
+ bygroups(Punctuation, Name.Variable, Punctuation,
377
+ Whitespace, Keyword.Type, Whitespace, Operator, Whitespace)),
378
+ (r'(\S+)(\s*)(=>)(\s*)',
379
+ bygroups(Keyword.Reserved, Whitespace, Operator, Text)),
380
+ (r'"', String, 'string'),
381
+ (r'(\w+)(\()', bygroups(Name.Function, Punctuation)),
382
+ (r'([\w.!&|()]+)(::)', bygroups(Name.Class, Punctuation)),
383
+ (r'(\w+)(:)', bygroups(Keyword.Declaration, Punctuation)),
384
+ (r'@[{(][^)}]+[})]', Name.Variable),
385
+ (r'[(){},;]', Punctuation),
386
+ (r'=>', Operator),
387
+ (r'->', Operator),
388
+ (r'\d+\.\d+', Number.Float),
389
+ (r'\d+', Number.Integer),
390
+ (r'\w+', Name.Function),
391
+ (r'\s+', Whitespace),
392
+ ],
393
+ 'string': [
394
+ (r'\$[{(]', String.Interpol, 'interpol'),
395
+ (r'\\.', String.Escape),
396
+ (r'"', String, '#pop'),
397
+ (r'\n', String),
398
+ (r'.', String),
399
+ ],
400
+ 'interpol': [
401
+ (r'\$[{(]', String.Interpol, '#push'),
402
+ (r'[})]', String.Interpol, '#pop'),
403
+ (r'[^${()}]+', String.Interpol),
404
+ ],
405
+ 'arglist': [
406
+ (r'\)', Punctuation, '#pop'),
407
+ (r',', Punctuation),
408
+ (r'\w+', Name.Variable),
409
+ (r'\s+', Whitespace),
410
+ ],
411
+ }
412
+
413
+
414
+ class ApacheConfLexer(RegexLexer):
415
+ """
416
+ Lexer for configuration files following the Apache config file
417
+ format.
418
+ """
419
+
420
+ name = 'ApacheConf'
421
+ aliases = ['apacheconf', 'aconf', 'apache']
422
+ filenames = ['.htaccess', 'apache.conf', 'apache2.conf']
423
+ mimetypes = ['text/x-apacheconf']
424
+ url = 'https://httpd.apache.org/docs/current/configuring.html'
425
+ version_added = '0.6'
426
+ flags = re.MULTILINE | re.IGNORECASE
427
+
428
+ tokens = {
429
+ 'root': [
430
+ (r'\s+', Whitespace),
431
+ (r'#(.*\\\n)+.*$|(#.*?)$', Comment),
432
+ (r'(<[^\s>/][^\s>]*)(?:(\s+)(.*))?(>)',
433
+ bygroups(Name.Tag, Whitespace, String, Name.Tag)),
434
+ (r'(</[^\s>]+)(>)',
435
+ bygroups(Name.Tag, Name.Tag)),
436
+ (r'[a-z]\w*', Name.Builtin, 'value'),
437
+ (r'\.+', Text),
438
+ ],
439
+ 'value': [
440
+ (r'\\\n', Text),
441
+ (r'\n+', Whitespace, '#pop'),
442
+ (r'\\', Text),
443
+ (r'[^\S\n]+', Whitespace),
444
+ (r'\d+\.\d+\.\d+\.\d+(?:/\d+)?', Number),
445
+ (r'\d+', Number),
446
+ (r'/([*a-z0-9][*\w./-]+)', String.Other),
447
+ (r'(on|off|none|any|all|double|email|dns|min|minimal|'
448
+ r'os|productonly|full|emerg|alert|crit|error|warn|'
449
+ r'notice|info|debug|registry|script|inetd|standalone|'
450
+ r'user|group)\b', Keyword),
451
+ (r'"([^"\\]*(?:\\([\s\S])[^"\\]*)*)"', String.Double),
452
+ (r'[^\s"\\]+', Text)
453
+ ],
454
+ }
455
+
456
+
457
+ class SquidConfLexer(RegexLexer):
458
+ """
459
+ Lexer for squid configuration files.
460
+ """
461
+
462
+ name = 'SquidConf'
463
+ url = 'http://www.squid-cache.org/'
464
+ aliases = ['squidconf', 'squid.conf', 'squid']
465
+ filenames = ['squid.conf']
466
+ mimetypes = ['text/x-squidconf']
467
+ version_added = '0.9'
468
+ flags = re.IGNORECASE
469
+
470
+ keywords = (
471
+ "access_log", "acl", "always_direct", "announce_host",
472
+ "announce_period", "announce_port", "announce_to", "anonymize_headers",
473
+ "append_domain", "as_whois_server", "auth_param_basic",
474
+ "authenticate_children", "authenticate_program", "authenticate_ttl",
475
+ "broken_posts", "buffered_logs", "cache_access_log", "cache_announce",
476
+ "cache_dir", "cache_dns_program", "cache_effective_group",
477
+ "cache_effective_user", "cache_host", "cache_host_acl",
478
+ "cache_host_domain", "cache_log", "cache_mem", "cache_mem_high",
479
+ "cache_mem_low", "cache_mgr", "cachemgr_passwd", "cache_peer",
480
+ "cache_peer_access", "cache_replacement_policy", "cache_stoplist",
481
+ "cache_stoplist_pattern", "cache_store_log", "cache_swap",
482
+ "cache_swap_high", "cache_swap_log", "cache_swap_low", "client_db",
483
+ "client_lifetime", "client_netmask", "connect_timeout", "coredump_dir",
484
+ "dead_peer_timeout", "debug_options", "delay_access", "delay_class",
485
+ "delay_initial_bucket_level", "delay_parameters", "delay_pools",
486
+ "deny_info", "dns_children", "dns_defnames", "dns_nameservers",
487
+ "dns_testnames", "emulate_httpd_log", "err_html_text",
488
+ "fake_user_agent", "firewall_ip", "forwarded_for", "forward_snmpd_port",
489
+ "fqdncache_size", "ftpget_options", "ftpget_program", "ftp_list_width",
490
+ "ftp_passive", "ftp_user", "half_closed_clients", "header_access",
491
+ "header_replace", "hierarchy_stoplist", "high_response_time_warning",
492
+ "high_page_fault_warning", "hosts_file", "htcp_port", "http_access",
493
+ "http_anonymizer", "httpd_accel", "httpd_accel_host",
494
+ "httpd_accel_port", "httpd_accel_uses_host_header",
495
+ "httpd_accel_with_proxy", "http_port", "http_reply_access",
496
+ "icp_access", "icp_hit_stale", "icp_port", "icp_query_timeout",
497
+ "ident_lookup", "ident_lookup_access", "ident_timeout",
498
+ "incoming_http_average", "incoming_icp_average", "inside_firewall",
499
+ "ipcache_high", "ipcache_low", "ipcache_size", "local_domain",
500
+ "local_ip", "logfile_rotate", "log_fqdn", "log_icp_queries",
501
+ "log_mime_hdrs", "maximum_object_size", "maximum_single_addr_tries",
502
+ "mcast_groups", "mcast_icp_query_timeout", "mcast_miss_addr",
503
+ "mcast_miss_encode_key", "mcast_miss_port", "memory_pools",
504
+ "memory_pools_limit", "memory_replacement_policy", "mime_table",
505
+ "min_http_poll_cnt", "min_icp_poll_cnt", "minimum_direct_hops",
506
+ "minimum_object_size", "minimum_retry_timeout", "miss_access",
507
+ "negative_dns_ttl", "negative_ttl", "neighbor_timeout",
508
+ "neighbor_type_domain", "netdb_high", "netdb_low", "netdb_ping_period",
509
+ "netdb_ping_rate", "never_direct", "no_cache", "passthrough_proxy",
510
+ "pconn_timeout", "pid_filename", "pinger_program", "positive_dns_ttl",
511
+ "prefer_direct", "proxy_auth", "proxy_auth_realm", "query_icmp",
512
+ "quick_abort", "quick_abort_max", "quick_abort_min",
513
+ "quick_abort_pct", "range_offset_limit", "read_timeout",
514
+ "redirect_children", "redirect_program",
515
+ "redirect_rewrites_host_header", "reference_age",
516
+ "refresh_pattern", "reload_into_ims", "request_body_max_size",
517
+ "request_size", "request_timeout", "shutdown_lifetime",
518
+ "single_parent_bypass", "siteselect_timeout", "snmp_access",
519
+ "snmp_incoming_address", "snmp_port", "source_ping", "ssl_proxy",
520
+ "store_avg_object_size", "store_objects_per_bucket",
521
+ "strip_query_terms", "swap_level1_dirs", "swap_level2_dirs",
522
+ "tcp_incoming_address", "tcp_outgoing_address", "tcp_recv_bufsize",
523
+ "test_reachability", "udp_hit_obj", "udp_hit_obj_size",
524
+ "udp_incoming_address", "udp_outgoing_address", "unique_hostname",
525
+ "unlinkd_program", "uri_whitespace", "useragent_log",
526
+ "visible_hostname", "wais_relay", "wais_relay_host", "wais_relay_port",
527
+ )
528
+
529
+ opts = (
530
+ "proxy-only", "weight", "ttl", "no-query", "default", "round-robin",
531
+ "multicast-responder", "on", "off", "all", "deny", "allow", "via",
532
+ "parent", "no-digest", "heap", "lru", "realm", "children", "q1", "q2",
533
+ "credentialsttl", "none", "disable", "offline_toggle", "diskd",
534
+ )
535
+
536
+ actions = (
537
+ "shutdown", "info", "parameter", "server_list", "client_list",
538
+ r'squid.conf',
539
+ )
540
+
541
+ actions_stats = (
542
+ "objects", "vm_objects", "utilization", "ipcache", "fqdncache", "dns",
543
+ "redirector", "io", "reply_headers", "filedescriptors", "netdb",
544
+ )
545
+
546
+ actions_log = ("status", "enable", "disable", "clear")
547
+
548
+ acls = (
549
+ "url_regex", "urlpath_regex", "referer_regex", "port", "proto",
550
+ "req_mime_type", "rep_mime_type", "method", "browser", "user", "src",
551
+ "dst", "time", "dstdomain", "ident", "snmp_community",
552
+ )
553
+
554
+ ipv4_group = r'(\d+|0x[0-9a-f]+)'
555
+ ipv4 = rf'({ipv4_group}(\.{ipv4_group}){{3}})'
556
+ ipv6_group = r'([0-9a-f]{0,4})'
557
+ ipv6 = rf'({ipv6_group}(:{ipv6_group}){{1,7}})'
558
+ bare_ip = rf'({ipv4}|{ipv6})'
559
+ # XXX: /integer is a subnet mark, but what is /IP ?
560
+ # There is no test where it is used.
561
+ ip = rf'{bare_ip}(/({bare_ip}|\d+))?'
562
+
563
+ tokens = {
564
+ 'root': [
565
+ (r'\s+', Whitespace),
566
+ (r'#', Comment, 'comment'),
567
+ (words(keywords, prefix=r'\b', suffix=r'\b'), Keyword),
568
+ (words(opts, prefix=r'\b', suffix=r'\b'), Name.Constant),
569
+ # Actions
570
+ (words(actions, prefix=r'\b', suffix=r'\b'), String),
571
+ (words(actions_stats, prefix=r'stats/', suffix=r'\b'), String),
572
+ (words(actions_log, prefix=r'log/', suffix=r'='), String),
573
+ (words(acls, prefix=r'\b', suffix=r'\b'), Keyword),
574
+ (ip, Number.Float),
575
+ (r'(?:\b\d+\b(?:-\b\d+|%)?)', Number),
576
+ (r'\S+', Text),
577
+ ],
578
+ 'comment': [
579
+ (r'\s*TAG:.*', String.Escape, '#pop'),
580
+ (r'.+', Comment, '#pop'),
581
+ default('#pop'),
582
+ ],
583
+ }
584
+
585
+
586
+ class NginxConfLexer(RegexLexer):
587
+ """
588
+ Lexer for Nginx configuration files.
589
+ """
590
+ name = 'Nginx configuration file'
591
+ url = 'http://nginx.net/'
592
+ aliases = ['nginx']
593
+ filenames = ['nginx.conf']
594
+ mimetypes = ['text/x-nginx-conf']
595
+ version_added = '0.11'
596
+
597
+ tokens = {
598
+ 'root': [
599
+ (r'(include)(\s+)([^\s;]+)', bygroups(Keyword, Whitespace, Name)),
600
+ (r'[^\s;#]+', Keyword, 'stmt'),
601
+ include('base'),
602
+ ],
603
+ 'block': [
604
+ (r'\}', Punctuation, '#pop:2'),
605
+ (r'[^\s;#]+', Keyword.Namespace, 'stmt'),
606
+ include('base'),
607
+ ],
608
+ 'stmt': [
609
+ (r'\{', Punctuation, 'block'),
610
+ (r';', Punctuation, '#pop'),
611
+ include('base'),
612
+ ],
613
+ 'base': [
614
+ (r'#.*\n', Comment.Single),
615
+ (r'on|off', Name.Constant),
616
+ (r'\$[^\s;#()]+', Name.Variable),
617
+ (r'([a-z0-9.-]+)(:)([0-9]+)',
618
+ bygroups(Name, Punctuation, Number.Integer)),
619
+ (r'[a-z-]+/[a-z-+]+', String), # mimetype
620
+ # (r'[a-zA-Z._-]+', Keyword),
621
+ (r'[0-9]+[km]?\b', Number.Integer),
622
+ (r'(~)(\s*)([^\s{]+)', bygroups(Punctuation, Whitespace, String.Regex)),
623
+ (r'[:=~]', Punctuation),
624
+ (r'[^\s;#{}$]+', String), # catch all
625
+ (r'/[^\s;#]*', Name), # pathname
626
+ (r'\s+', Whitespace),
627
+ (r'[$;]', Text), # leftover characters
628
+ ],
629
+ }
630
+
631
+
632
+ class LighttpdConfLexer(RegexLexer):
633
+ """
634
+ Lexer for Lighttpd configuration files.
635
+ """
636
+ name = 'Lighttpd configuration file'
637
+ url = 'http://lighttpd.net/'
638
+ aliases = ['lighttpd', 'lighty']
639
+ filenames = ['lighttpd.conf']
640
+ mimetypes = ['text/x-lighttpd-conf']
641
+ version_added = '0.11'
642
+
643
+ tokens = {
644
+ 'root': [
645
+ (r'#.*\n', Comment.Single),
646
+ (r'/\S*', Name), # pathname
647
+ (r'[a-zA-Z._-]+', Keyword),
648
+ (r'\d+\.\d+\.\d+\.\d+(?:/\d+)?', Number),
649
+ (r'[0-9]+', Number),
650
+ (r'=>|=~|\+=|==|=|\+', Operator),
651
+ (r'\$[A-Z]+', Name.Builtin),
652
+ (r'[(){}\[\],]', Punctuation),
653
+ (r'"([^"\\]*(?:\\.[^"\\]*)*)"', String.Double),
654
+ (r'\s+', Whitespace),
655
+ ],
656
+
657
+ }
658
+
659
+
660
+ class DockerLexer(RegexLexer):
661
+ """
662
+ Lexer for Docker configuration files.
663
+ """
664
+ name = 'Docker'
665
+ url = 'http://docker.io'
666
+ aliases = ['docker', 'dockerfile']
667
+ filenames = ['Dockerfile', '*.docker']
668
+ mimetypes = ['text/x-dockerfile-config']
669
+ version_added = '2.0'
670
+
671
+ _keywords = (r'(?:MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)')
672
+ _bash_keywords = (r'(?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY)')
673
+ _lb = r'(?:\s*\\?\s*)' # dockerfile line break regex
674
+ flags = re.IGNORECASE | re.MULTILINE
675
+
676
+ tokens = {
677
+ 'root': [
678
+ (r'#.*', Comment),
679
+ (r'(FROM)([ \t]*)(\S*)([ \t]*)(?:(AS)([ \t]*)(\S*))?',
680
+ bygroups(Keyword, Whitespace, String, Whitespace, Keyword, Whitespace, String)),
681
+ (rf'(ONBUILD)(\s+)({_lb})', bygroups(Keyword, Whitespace, using(BashLexer))),
682
+ (rf'(HEALTHCHECK)(\s+)(({_lb}--\w+=\w+{_lb})*)',
683
+ bygroups(Keyword, Whitespace, using(BashLexer))),
684
+ (rf'(VOLUME|ENTRYPOINT|CMD|SHELL)(\s+)({_lb})(\[.*?\])',
685
+ bygroups(Keyword, Whitespace, using(BashLexer), using(JsonLexer))),
686
+ (rf'(LABEL|ENV|ARG)(\s+)(({_lb}\w+=\w+{_lb})*)',
687
+ bygroups(Keyword, Whitespace, using(BashLexer))),
688
+ (rf'({_keywords}|VOLUME)\b(\s+)(.*)', bygroups(Keyword, Whitespace, String)),
689
+ (rf'({_bash_keywords})(\s+)', bygroups(Keyword, Whitespace)),
690
+ (r'(.*\\\n)*.+', using(BashLexer)),
691
+ ]
692
+ }
693
+
694
+
695
+ class TerraformLexer(ExtendedRegexLexer):
696
+ """
697
+ Lexer for terraformi ``.tf`` files.
698
+ """
699
+
700
+ name = 'Terraform'
701
+ url = 'https://www.terraform.io/'
702
+ aliases = ['terraform', 'tf', 'hcl']
703
+ filenames = ['*.tf', '*.hcl']
704
+ mimetypes = ['application/x-tf', 'application/x-terraform']
705
+ version_added = '2.1'
706
+
707
+ classes = ('backend', 'data', 'module', 'output', 'provider',
708
+ 'provisioner', 'resource', 'variable')
709
+ classes_re = "({})".format(('|').join(classes))
710
+
711
+ types = ('string', 'number', 'bool', 'list', 'tuple', 'map', 'set', 'object', 'null')
712
+
713
+ numeric_functions = ('abs', 'ceil', 'floor', 'log', 'max',
714
+ 'mix', 'parseint', 'pow', 'signum')
715
+
716
+ string_functions = ('chomp', 'format', 'formatlist', 'indent',
717
+ 'join', 'lower', 'regex', 'regexall', 'replace',
718
+ 'split', 'strrev', 'substr', 'title', 'trim',
719
+ 'trimprefix', 'trimsuffix', 'trimspace', 'upper'
720
+ )
721
+
722
+ collection_functions = ('alltrue', 'anytrue', 'chunklist', 'coalesce',
723
+ 'coalescelist', 'compact', 'concat', 'contains',
724
+ 'distinct', 'element', 'flatten', 'index', 'keys',
725
+ 'length', 'list', 'lookup', 'map', 'matchkeys',
726
+ 'merge', 'range', 'reverse', 'setintersection',
727
+ 'setproduct', 'setsubtract', 'setunion', 'slice',
728
+ 'sort', 'sum', 'transpose', 'values', 'zipmap'
729
+ )
730
+
731
+ encoding_functions = ('base64decode', 'base64encode', 'base64gzip',
732
+ 'csvdecode', 'jsondecode', 'jsonencode', 'textdecodebase64',
733
+ 'textencodebase64', 'urlencode', 'yamldecode', 'yamlencode')
734
+
735
+ filesystem_functions = ('abspath', 'dirname', 'pathexpand', 'basename',
736
+ 'file', 'fileexists', 'fileset', 'filebase64', 'templatefile')
737
+
738
+ date_time_functions = ('formatdate', 'timeadd', 'timestamp')
739
+
740
+ hash_crypto_functions = ('base64sha256', 'base64sha512', 'bcrypt', 'filebase64sha256',
741
+ 'filebase64sha512', 'filemd5', 'filesha1', 'filesha256', 'filesha512',
742
+ 'md5', 'rsadecrypt', 'sha1', 'sha256', 'sha512', 'uuid', 'uuidv5')
743
+
744
+ ip_network_functions = ('cidrhost', 'cidrnetmask', 'cidrsubnet', 'cidrsubnets')
745
+
746
+ type_conversion_functions = ('can', 'defaults', 'tobool', 'tolist', 'tomap',
747
+ 'tonumber', 'toset', 'tostring', 'try')
748
+
749
+ builtins = numeric_functions + string_functions + collection_functions + encoding_functions +\
750
+ filesystem_functions + date_time_functions + hash_crypto_functions + ip_network_functions +\
751
+ type_conversion_functions
752
+ builtins_re = "({})".format(('|').join(builtins))
753
+
754
+ def heredoc_callback(self, match, ctx):
755
+ # Parse a terraform heredoc
756
+ # match: 1 = <<[-]?, 2 = name 3 = rest of line
757
+
758
+ start = match.start(1)
759
+ yield start, Operator, match.group(1) # <<[-]?
760
+ yield match.start(2), String.Delimiter, match.group(2) # heredoc name
761
+
762
+ ctx.pos = match.start(3)
763
+ ctx.end = match.end(3)
764
+ yield ctx.pos, String.Heredoc, match.group(3)
765
+ ctx.pos = match.end()
766
+
767
+ hdname = match.group(2)
768
+ tolerant = True # leading whitespace is always accepted
769
+
770
+ lines = []
771
+
772
+ for match in line_re.finditer(ctx.text, ctx.pos):
773
+ if tolerant:
774
+ check = match.group().strip()
775
+ else:
776
+ check = match.group().rstrip()
777
+ if check == hdname:
778
+ for amatch in lines:
779
+ yield amatch.start(), String.Heredoc, amatch.group()
780
+ yield match.start(), String.Delimiter, match.group()
781
+ ctx.pos = match.end()
782
+ break
783
+ else:
784
+ lines.append(match)
785
+ else:
786
+ # end of heredoc not found -- error!
787
+ for amatch in lines:
788
+ yield amatch.start(), Error, amatch.group()
789
+ ctx.end = len(ctx.text)
790
+
791
+ tokens = {
792
+ 'root': [
793
+ include('basic'),
794
+ include('whitespace'),
795
+
796
+ # Strings
797
+ (r'(".*")', bygroups(String.Double)),
798
+
799
+ # Constants
800
+ (words(('true', 'false'), prefix=r'\b', suffix=r'\b'), Name.Constant),
801
+
802
+ # Types
803
+ (words(types, prefix=r'\b', suffix=r'\b'), Keyword.Type),
804
+
805
+ include('identifier'),
806
+ include('punctuation'),
807
+ (r'[0-9]+', Number),
808
+ ],
809
+ 'basic': [
810
+ (r'\s*/\*', Comment.Multiline, 'comment'),
811
+ (r'\s*(#|//).*\n', Comment.Single),
812
+ include('whitespace'),
813
+
814
+ # e.g. terraform {
815
+ # e.g. egress {
816
+ (r'(\s*)([0-9a-zA-Z-_]+)(\s*)(=?)(\s*)(\{)',
817
+ bygroups(Whitespace, Name.Builtin, Whitespace, Operator, Whitespace, Punctuation)),
818
+
819
+ # Assignment with attributes, e.g. something = ...
820
+ (r'(\s*)([0-9a-zA-Z-_]+)(\s*)(=)(\s*)',
821
+ bygroups(Whitespace, Name.Attribute, Whitespace, Operator, Whitespace)),
822
+
823
+ # Assignment with environment variables and similar, e.g. "something" = ...
824
+ # or key value assignment, e.g. "SlotName" : ...
825
+ (r'(\s*)("\S+")(\s*)([=:])(\s*)',
826
+ bygroups(Whitespace, Literal.String.Double, Whitespace, Operator, Whitespace)),
827
+
828
+ # Functions, e.g. jsonencode(element("value"))
829
+ (builtins_re + r'(\()', bygroups(Name.Function, Punctuation)),
830
+
831
+ # List of attributes, e.g. ignore_changes = [last_modified, filename]
832
+ (r'(\[)([a-z_,\s]+)(\])', bygroups(Punctuation, Name.Builtin, Punctuation)),
833
+
834
+ # e.g. resource "aws_security_group" "allow_tls" {
835
+ # e.g. backend "consul" {
836
+ (classes_re + r'(\s+)("[0-9a-zA-Z-_]+")?(\s*)("[0-9a-zA-Z-_]+")(\s+)(\{)',
837
+ bygroups(Keyword.Reserved, Whitespace, Name.Class, Whitespace, Name.Variable, Whitespace, Punctuation)),
838
+
839
+ # here-doc style delimited strings
840
+ (r'(<<-?)\s*([a-zA-Z_]\w*)(.*?\n)', heredoc_callback),
841
+ ],
842
+ 'identifier': [
843
+ (r'\b(var\.[0-9a-zA-Z-_\.\[\]]+)\b', bygroups(Name.Variable)),
844
+ (r'\b([0-9a-zA-Z-_\[\]]+\.[0-9a-zA-Z-_\.\[\]]+)\b',
845
+ bygroups(Name.Variable)),
846
+ ],
847
+ 'punctuation': [
848
+ (r'[\[\]()\{\},.?:!=]', Punctuation),
849
+ ],
850
+ 'comment': [
851
+ (r'[^*/]', Comment.Multiline),
852
+ (r'/\*', Comment.Multiline, '#push'),
853
+ (r'\*/', Comment.Multiline, '#pop'),
854
+ (r'[*/]', Comment.Multiline)
855
+ ],
856
+ 'whitespace': [
857
+ (r'\n', Whitespace),
858
+ (r'\s+', Whitespace),
859
+ (r'(\\)(\n)', bygroups(Text, Whitespace)),
860
+ ],
861
+ }
862
+
863
+
864
+ class TermcapLexer(RegexLexer):
865
+ """
866
+ Lexer for termcap database source.
867
+
868
+ This is very simple and minimal.
869
+ """
870
+ name = 'Termcap'
871
+ aliases = ['termcap']
872
+ filenames = ['termcap', 'termcap.src']
873
+ mimetypes = []
874
+ url = 'https://en.wikipedia.org/wiki/Termcap'
875
+ version_added = '2.1'
876
+
877
+ # NOTE:
878
+ # * multiline with trailing backslash
879
+ # * separator is ':'
880
+ # * to embed colon as data, we must use \072
881
+ # * space after separator is not allowed (mayve)
882
+ tokens = {
883
+ 'root': [
884
+ (r'^#.*', Comment),
885
+ (r'^[^\s#:|]+', Name.Tag, 'names'),
886
+ (r'\s+', Whitespace),
887
+ ],
888
+ 'names': [
889
+ (r'\n', Whitespace, '#pop'),
890
+ (r':', Punctuation, 'defs'),
891
+ (r'\|', Punctuation),
892
+ (r'[^:|]+', Name.Attribute),
893
+ ],
894
+ 'defs': [
895
+ (r'(\\)(\n[ \t]*)', bygroups(Text, Whitespace)),
896
+ (r'\n[ \t]*', Whitespace, '#pop:2'),
897
+ (r'(#)([0-9]+)', bygroups(Operator, Number)),
898
+ (r'=', Operator, 'data'),
899
+ (r':', Punctuation),
900
+ (r'[^\s:=#]+', Name.Class),
901
+ ],
902
+ 'data': [
903
+ (r'\\072', Literal),
904
+ (r':', Punctuation, '#pop'),
905
+ (r'[^:\\]+', Literal), # for performance
906
+ (r'.', Literal),
907
+ ],
908
+ }
909
+
910
+
911
+ class TerminfoLexer(RegexLexer):
912
+ """
913
+ Lexer for terminfo database source.
914
+
915
+ This is very simple and minimal.
916
+ """
917
+ name = 'Terminfo'
918
+ aliases = ['terminfo']
919
+ filenames = ['terminfo', 'terminfo.src']
920
+ mimetypes = []
921
+ url = 'https://en.wikipedia.org/wiki/Terminfo'
922
+ version_added = '2.1'
923
+
924
+ # NOTE:
925
+ # * multiline with leading whitespace
926
+ # * separator is ','
927
+ # * to embed comma as data, we can use \,
928
+ # * space after separator is allowed
929
+ tokens = {
930
+ 'root': [
931
+ (r'^#.*$', Comment),
932
+ (r'^[^\s#,|]+', Name.Tag, 'names'),
933
+ (r'\s+', Whitespace),
934
+ ],
935
+ 'names': [
936
+ (r'\n', Whitespace, '#pop'),
937
+ (r'(,)([ \t]*)', bygroups(Punctuation, Whitespace), 'defs'),
938
+ (r'\|', Punctuation),
939
+ (r'[^,|]+', Name.Attribute),
940
+ ],
941
+ 'defs': [
942
+ (r'\n[ \t]+', Whitespace),
943
+ (r'\n', Whitespace, '#pop:2'),
944
+ (r'(#)([0-9]+)', bygroups(Operator, Number)),
945
+ (r'=', Operator, 'data'),
946
+ (r'(,)([ \t]*)', bygroups(Punctuation, Whitespace)),
947
+ (r'[^\s,=#]+', Name.Class),
948
+ ],
949
+ 'data': [
950
+ (r'\\[,\\]', Literal),
951
+ (r'(,)([ \t]*)', bygroups(Punctuation, Whitespace), '#pop'),
952
+ (r'[^\\,]+', Literal), # for performance
953
+ (r'.', Literal),
954
+ ],
955
+ }
956
+
957
+
958
+ class PkgConfigLexer(RegexLexer):
959
+ """
960
+ Lexer for pkg-config
961
+ (see also `manual page <http://linux.die.net/man/1/pkg-config>`_).
962
+ """
963
+
964
+ name = 'PkgConfig'
965
+ url = 'http://www.freedesktop.org/wiki/Software/pkg-config/'
966
+ aliases = ['pkgconfig']
967
+ filenames = ['*.pc']
968
+ mimetypes = []
969
+ version_added = '2.1'
970
+
971
+ tokens = {
972
+ 'root': [
973
+ (r'#.*$', Comment.Single),
974
+
975
+ # variable definitions
976
+ (r'^(\w+)(=)', bygroups(Name.Attribute, Operator)),
977
+
978
+ # keyword lines
979
+ (r'^([\w.]+)(:)',
980
+ bygroups(Name.Tag, Punctuation), 'spvalue'),
981
+
982
+ # variable references
983
+ include('interp'),
984
+
985
+ # fallback
986
+ (r'\s+', Whitespace),
987
+ (r'[^${}#=:\n.]+', Text),
988
+ (r'.', Text),
989
+ ],
990
+ 'interp': [
991
+ # you can escape literal "$" as "$$"
992
+ (r'\$\$', Text),
993
+
994
+ # variable references
995
+ (r'\$\{', String.Interpol, 'curly'),
996
+ ],
997
+ 'curly': [
998
+ (r'\}', String.Interpol, '#pop'),
999
+ (r'\w+', Name.Attribute),
1000
+ ],
1001
+ 'spvalue': [
1002
+ include('interp'),
1003
+
1004
+ (r'#.*$', Comment.Single, '#pop'),
1005
+ (r'\n', Whitespace, '#pop'),
1006
+
1007
+ # fallback
1008
+ (r'\s+', Whitespace),
1009
+ (r'[^${}#\n\s]+', Text),
1010
+ (r'.', Text),
1011
+ ],
1012
+ }
1013
+
1014
+
1015
+ class PacmanConfLexer(RegexLexer):
1016
+ """
1017
+ Lexer for pacman.conf.
1018
+
1019
+ Actually, IniLexer works almost fine for this format,
1020
+ but it yield error token. It is because pacman.conf has
1021
+ a form without assignment like:
1022
+
1023
+ UseSyslog
1024
+ Color
1025
+ TotalDownload
1026
+ CheckSpace
1027
+ VerbosePkgLists
1028
+
1029
+ These are flags to switch on.
1030
+ """
1031
+
1032
+ name = 'PacmanConf'
1033
+ url = 'https://www.archlinux.org/pacman/pacman.conf.5.html'
1034
+ aliases = ['pacmanconf']
1035
+ filenames = ['pacman.conf']
1036
+ mimetypes = []
1037
+ version_added = '2.1'
1038
+
1039
+ tokens = {
1040
+ 'root': [
1041
+ # comment
1042
+ (r'#.*$', Comment.Single),
1043
+
1044
+ # section header
1045
+ (r'^(\s*)(\[.*?\])(\s*)$', bygroups(Whitespace, Keyword, Whitespace)),
1046
+
1047
+ # variable definitions
1048
+ # (Leading space is allowed...)
1049
+ (r'(\w+)(\s*)(=)',
1050
+ bygroups(Name.Attribute, Whitespace, Operator)),
1051
+
1052
+ # flags to on
1053
+ (r'^(\s*)(\w+)(\s*)$',
1054
+ bygroups(Whitespace, Name.Attribute, Whitespace)),
1055
+
1056
+ # built-in special values
1057
+ (words((
1058
+ '$repo', # repository
1059
+ '$arch', # architecture
1060
+ '%o', # outfile
1061
+ '%u', # url
1062
+ ), suffix=r'\b'),
1063
+ Name.Variable),
1064
+
1065
+ # fallback
1066
+ (r'\s+', Whitespace),
1067
+ (r'.', Text),
1068
+ ],
1069
+ }
1070
+
1071
+
1072
+ class AugeasLexer(RegexLexer):
1073
+ """
1074
+ Lexer for Augeas.
1075
+ """
1076
+ name = 'Augeas'
1077
+ url = 'http://augeas.net'
1078
+ aliases = ['augeas']
1079
+ filenames = ['*.aug']
1080
+ version_added = '2.4'
1081
+
1082
+ tokens = {
1083
+ 'root': [
1084
+ (r'(module)(\s*)([^\s=]+)', bygroups(Keyword.Namespace, Whitespace, Name.Namespace)),
1085
+ (r'(let)(\s*)([^\s=]+)', bygroups(Keyword.Declaration, Whitespace, Name.Variable)),
1086
+ (r'(del|store|value|counter|seq|key|label|autoload|incl|excl|transform|test|get|put)(\s+)', bygroups(Name.Builtin, Whitespace)),
1087
+ (r'(\()([^:]+)(\:)(unit|string|regexp|lens|tree|filter)(\))', bygroups(Punctuation, Name.Variable, Punctuation, Keyword.Type, Punctuation)),
1088
+ (r'\(\*', Comment.Multiline, 'comment'),
1089
+ (r'[*+\-.;=?|]', Operator),
1090
+ (r'[()\[\]{}]', Operator),
1091
+ (r'"', String.Double, 'string'),
1092
+ (r'\/', String.Regex, 'regex'),
1093
+ (r'([A-Z]\w*)(\.)(\w+)', bygroups(Name.Namespace, Punctuation, Name.Variable)),
1094
+ (r'.', Name.Variable),
1095
+ (r'\s+', Whitespace),
1096
+ ],
1097
+ 'string': [
1098
+ (r'\\.', String.Escape),
1099
+ (r'[^"]', String.Double),
1100
+ (r'"', String.Double, '#pop'),
1101
+ ],
1102
+ 'regex': [
1103
+ (r'\\.', String.Escape),
1104
+ (r'[^/]', String.Regex),
1105
+ (r'\/', String.Regex, '#pop'),
1106
+ ],
1107
+ 'comment': [
1108
+ (r'[^*)]', Comment.Multiline),
1109
+ (r'\(\*', Comment.Multiline, '#push'),
1110
+ (r'\*\)', Comment.Multiline, '#pop'),
1111
+ (r'[)*]', Comment.Multiline)
1112
+ ],
1113
+ }
1114
+
1115
+
1116
+ class TOMLLexer(RegexLexer):
1117
+ """
1118
+ Lexer for TOML, a simple language for config files.
1119
+ """
1120
+
1121
+ name = 'TOML'
1122
+ aliases = ['toml']
1123
+ filenames = ['*.toml', 'Pipfile', 'poetry.lock']
1124
+ mimetypes = ['application/toml']
1125
+ url = 'https://toml.io'
1126
+ version_added = '2.4'
1127
+
1128
+ # Based on the TOML spec: https://toml.io/en/v1.0.0
1129
+
1130
+ # The following is adapted from CPython's tomllib:
1131
+ _time = r"\d\d:\d\d(:\d\d(\.\d+)?)?"
1132
+ _datetime = rf"""(?x)
1133
+ \d\d\d\d-\d\d-\d\d # date, e.g., 1988-10-27
1134
+ (
1135
+ [Tt ] {_time} # optional time
1136
+ (
1137
+ [Zz]|[+-]\d\d:\d\d # optional time offset
1138
+ )?
1139
+ )?
1140
+ """
1141
+
1142
+ tokens = {
1143
+ 'root': [
1144
+ # Note that we make an effort in order to distinguish
1145
+ # moments at which we're parsing a key and moments at
1146
+ # which we're parsing a value. In the TOML code
1147
+ #
1148
+ # 1234 = 1234
1149
+ #
1150
+ # the first "1234" should be Name, the second Integer.
1151
+
1152
+ # Whitespace
1153
+ (r'\s+', Whitespace),
1154
+
1155
+ # Comment
1156
+ (r'#.*', Comment.Single),
1157
+
1158
+ # Assignment keys
1159
+ include('key'),
1160
+
1161
+ # After "=", find a value
1162
+ (r'(=)(\s*)', bygroups(Operator, Whitespace), 'value'),
1163
+
1164
+ # Table header
1165
+ (r'\[\[?', Keyword, 'table-key'),
1166
+ ],
1167
+ 'key': [
1168
+ # Start of bare key (only ASCII is allowed here).
1169
+ (r'[A-Za-z0-9_-]+', Name),
1170
+ # Quoted key
1171
+ (r'"', String.Double, 'basic-string'),
1172
+ (r"'", String.Single, 'literal-string'),
1173
+ # Dots act as separators in keys
1174
+ (r'\.', Punctuation),
1175
+ ],
1176
+ 'table-key': [
1177
+ # This is like 'key', but highlights the name components
1178
+ # and separating dots as Keyword because it looks better
1179
+ # when the whole table header is Keyword. We do highlight
1180
+ # strings as strings though.
1181
+ # Start of bare key (only ASCII is allowed here).
1182
+ (r'[A-Za-z0-9_-]+', Keyword),
1183
+ (r'"', String.Double, 'basic-string'),
1184
+ (r"'", String.Single, 'literal-string'),
1185
+ (r'\.', Keyword),
1186
+ (r'\]\]?', Keyword, '#pop'),
1187
+
1188
+ # Inline whitespace allowed
1189
+ (r'[ \t]+', Whitespace),
1190
+ ],
1191
+ 'value': [
1192
+ # Datetime, baretime
1193
+ (_datetime, Literal.Date, '#pop'),
1194
+ (_time, Literal.Date, '#pop'),
1195
+
1196
+ # Recognize as float if there is a fractional part
1197
+ # and/or an exponent.
1198
+ (r'[+-]?\d[0-9_]*[eE][+-]?\d[0-9_]*', Number.Float, '#pop'),
1199
+ (r'[+-]?\d[0-9_]*\.\d[0-9_]*([eE][+-]?\d[0-9_]*)?',
1200
+ Number.Float, '#pop'),
1201
+
1202
+ # Infinities and NaN
1203
+ (r'[+-]?(inf|nan)', Number.Float, '#pop'),
1204
+
1205
+ # Integers
1206
+ (r'-?0b[01_]+', Number.Bin, '#pop'),
1207
+ (r'-?0o[0-7_]+', Number.Oct, '#pop'),
1208
+ (r'-?0x[0-9a-fA-F_]+', Number.Hex, '#pop'),
1209
+ (r'[+-]?[0-9_]+', Number.Integer, '#pop'),
1210
+
1211
+ # Strings
1212
+ (r'"""', String.Double, ('#pop', 'multiline-basic-string')),
1213
+ (r'"', String.Double, ('#pop', 'basic-string')),
1214
+ (r"'''", String.Single, ('#pop', 'multiline-literal-string')),
1215
+ (r"'", String.Single, ('#pop', 'literal-string')),
1216
+
1217
+ # Booleans
1218
+ (r'true|false', Keyword.Constant, '#pop'),
1219
+
1220
+ # Start of array
1221
+ (r'\[', Punctuation, ('#pop', 'array')),
1222
+
1223
+ # Start of inline table
1224
+ (r'\{', Punctuation, ('#pop', 'inline-table')),
1225
+ ],
1226
+ 'array': [
1227
+ # Whitespace, including newlines, is ignored inside arrays,
1228
+ # and comments are allowed.
1229
+ (r'\s+', Whitespace),
1230
+ (r'#.*', Comment.Single),
1231
+
1232
+ # Delimiters
1233
+ (r',', Punctuation),
1234
+
1235
+ # End of array
1236
+ (r'\]', Punctuation, '#pop'),
1237
+
1238
+ # Parse a value and come back
1239
+ default('value'),
1240
+ ],
1241
+ 'inline-table': [
1242
+ # Whitespace (since TOML 1.1.0, same as in array)
1243
+ (r'\s+', Whitespace),
1244
+ (r'#.*', Comment.Single),
1245
+
1246
+ # Keys
1247
+ include('key'),
1248
+
1249
+ # Values
1250
+ (r'(=)(\s*)', bygroups(Punctuation, Whitespace), 'value'),
1251
+
1252
+ # Delimiters
1253
+ (r',', Punctuation),
1254
+
1255
+ # End of inline table
1256
+ (r'\}', Punctuation, '#pop'),
1257
+ ],
1258
+ 'basic-string': [
1259
+ (r'"', String.Double, '#pop'),
1260
+ include('escapes'),
1261
+ (r'[^"\\]+', String.Double),
1262
+ ],
1263
+ 'literal-string': [
1264
+ (r".*?'", String.Single, '#pop'),
1265
+ ],
1266
+ 'multiline-basic-string': [
1267
+ (r'"""', String.Double, '#pop'),
1268
+ (r'(\\)(\n)', bygroups(String.Escape, Whitespace)),
1269
+ include('escapes'),
1270
+ (r'[^"\\]+', String.Double),
1271
+ (r'"', String.Double),
1272
+ ],
1273
+ 'multiline-literal-string': [
1274
+ (r"'''", String.Single, '#pop'),
1275
+ (r"[^']+", String.Single),
1276
+ (r"'", String.Single),
1277
+ ],
1278
+ 'escapes': [
1279
+ (r'\\x[0-9a-fA-F]{2}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}', String.Escape),
1280
+ (r'\\.', String.Escape),
1281
+ ],
1282
+ }
1283
+
1284
+ class NestedTextLexer(RegexLexer):
1285
+ """
1286
+ Lexer for *NextedText*, a human-friendly data format.
1287
+
1288
+ .. versionchanged:: 2.16
1289
+ Added support for *NextedText* v3.0.
1290
+ """
1291
+
1292
+ name = 'NestedText'
1293
+ url = 'https://nestedtext.org'
1294
+ aliases = ['nestedtext', 'nt']
1295
+ filenames = ['*.nt']
1296
+ version_added = '2.9'
1297
+
1298
+ tokens = {
1299
+ 'root': [
1300
+ # Comment: # ...
1301
+ (r'^([ ]*)(#.*)$', bygroups(Whitespace, Comment)),
1302
+
1303
+ # Inline dictionary: {...}
1304
+ (r'^([ ]*)(\{)', bygroups(Whitespace, Punctuation), 'inline_dict'),
1305
+
1306
+ # Inline list: [...]
1307
+ (r'^([ ]*)(\[)', bygroups(Whitespace, Punctuation), 'inline_list'),
1308
+
1309
+ # empty multiline string item: >
1310
+ (r'^([ ]*)(>)$', bygroups(Whitespace, Punctuation)),
1311
+
1312
+ # multiline string item: > ...
1313
+ (r'^([ ]*)(>)( )(.*?)([ \t]*)$', bygroups(Whitespace, Punctuation, Whitespace, Text, Whitespace)),
1314
+
1315
+ # empty list item: -
1316
+ (r'^([ ]*)(-)$', bygroups(Whitespace, Punctuation)),
1317
+
1318
+ # list item: - ...
1319
+ (r'^([ ]*)(-)( )(.*?)([ \t]*)$', bygroups(Whitespace, Punctuation, Whitespace, Text, Whitespace)),
1320
+
1321
+ # empty multiline key item: :
1322
+ (r'^([ ]*)(:)$', bygroups(Whitespace, Punctuation)),
1323
+
1324
+ # multiline key item: : ...
1325
+ (r'^([ ]*)(:)( )([^\n]*?)([ \t]*)$', bygroups(Whitespace, Punctuation, Whitespace, Name.Tag, Whitespace)),
1326
+
1327
+ # empty dict key item: ...:
1328
+ (r'^([ ]*)([^\{\[\s].*?)(:)$', bygroups(Whitespace, Name.Tag, Punctuation)),
1329
+
1330
+ # dict key item: ...: ...
1331
+ (r'^([ ]*)([^\{\[\s].*?)(:)( )(.*?)([ \t]*)$', bygroups(Whitespace, Name.Tag, Punctuation, Whitespace, Text, Whitespace)),
1332
+ ],
1333
+ 'inline_list': [
1334
+ include('whitespace'),
1335
+ (r'[^\{\}\[\],\s]+', Text),
1336
+ include('inline_value'),
1337
+ (r',', Punctuation),
1338
+ (r'\]', Punctuation, '#pop'),
1339
+ (r'\n', Error, '#pop'),
1340
+ ],
1341
+ 'inline_dict': [
1342
+ include('whitespace'),
1343
+ (r'[^\{\}\[\],:\s]+', Name.Tag),
1344
+ (r':', Punctuation, 'inline_dict_value'),
1345
+ (r'\}', Punctuation, '#pop'),
1346
+ (r'\n', Error, '#pop'),
1347
+ ],
1348
+ 'inline_dict_value': [
1349
+ include('whitespace'),
1350
+ (r'[^\{\}\[\],:\s]+', Text),
1351
+ include('inline_value'),
1352
+ (r',', Punctuation, '#pop'),
1353
+ (r'\}', Punctuation, '#pop:2'),
1354
+ ],
1355
+ 'inline_value': [
1356
+ include('whitespace'),
1357
+ (r'\{', Punctuation, 'inline_dict'),
1358
+ (r'\[', Punctuation, 'inline_list'),
1359
+ ],
1360
+ 'whitespace': [
1361
+ (r'[ \t]+', Whitespace),
1362
+ ],
1363
+ }
1364
+
1365
+
1366
+ class SingularityLexer(RegexLexer):
1367
+ """
1368
+ Lexer for Singularity definition files.
1369
+ """
1370
+
1371
+ name = 'Singularity'
1372
+ url = 'https://www.sylabs.io/guides/3.0/user-guide/definition_files.html'
1373
+ aliases = ['singularity']
1374
+ filenames = ['*.def', 'Singularity']
1375
+ version_added = '2.6'
1376
+ flags = re.IGNORECASE | re.MULTILINE | re.DOTALL
1377
+
1378
+ _headers = r'^(\s*)(bootstrap|from|osversion|mirrorurl|include|registry|namespace|includecmd)(:)'
1379
+ _section = r'^(%(?:pre|post|setup|environment|help|labels|test|runscript|files|startscript))(\s*)'
1380
+ _appsect = r'^(%app(?:install|help|run|labels|env|test|files))(\s*)'
1381
+
1382
+ tokens = {
1383
+ 'root': [
1384
+ (_section, bygroups(Generic.Heading, Whitespace), 'script'),
1385
+ (_appsect, bygroups(Generic.Heading, Whitespace), 'script'),
1386
+ (_headers, bygroups(Whitespace, Keyword, Text)),
1387
+ (r'\s*#.*?\n', Comment),
1388
+ (r'\b(([0-9]+\.?[0-9]*)|(\.[0-9]+))\b', Number),
1389
+ (r'[ \t]+', Whitespace),
1390
+ (r'(?!^\s*%).', Text),
1391
+ ],
1392
+ 'script': [
1393
+ (r'(.+?(?=^\s*%))|(.*)', using(BashLexer), '#pop'),
1394
+ ],
1395
+ }
1396
+
1397
+ def analyse_text(text):
1398
+ """This is a quite simple script file, but there are a few keywords
1399
+ which seem unique to this language."""
1400
+ result = 0
1401
+ if re.search(r'\b(?:osversion|includecmd|mirrorurl)\b', text, re.IGNORECASE):
1402
+ result += 0.5
1403
+
1404
+ if re.search(SingularityLexer._section[1:], text):
1405
+ result += 0.49
1406
+
1407
+ return result
1408
+
1409
+
1410
+ class UnixConfigLexer(RegexLexer):
1411
+ """
1412
+ Lexer for Unix/Linux config files using colon-separated values, e.g.
1413
+
1414
+ * ``/etc/group``
1415
+ * ``/etc/passwd``
1416
+ * ``/etc/shadow``
1417
+ """
1418
+
1419
+ name = 'Unix/Linux config files'
1420
+ aliases = ['unixconfig', 'linuxconfig']
1421
+ filenames = []
1422
+ url = 'https://en.wikipedia.org/wiki/Configuration_file#Unix_and_Unix-like_operating_systems'
1423
+ version_added = '2.12'
1424
+
1425
+ tokens = {
1426
+ 'root': [
1427
+ (r'^#.*', Comment),
1428
+ (r'\n', Whitespace),
1429
+ (r':', Punctuation),
1430
+ (r'[0-9]+', Number),
1431
+ (r'((?!\n)[a-zA-Z0-9\_\-\s\(\),]){2,}', Text),
1432
+ (r'[^:\n]+', String),
1433
+ ],
1434
+ }
1435
+
1436
+
1437
+ class CaddyfileLexer(RegexLexer):
1438
+ """
1439
+ Lexer for Caddyfile, the configuration file format of the Caddy web server.
1440
+ """
1441
+
1442
+ name = 'Caddyfile'
1443
+ url = 'https://caddyserver.com/docs/caddyfile'
1444
+ aliases = ['caddyfile', 'caddy']
1445
+ filenames = ['Caddyfile']
1446
+ version_added = '2.21'
1447
+
1448
+ # The standard HTTP directives shipped with Caddy.
1449
+ directives = (
1450
+ 'abort', 'acme_server', 'basic_auth', 'bind', 'encode', 'error',
1451
+ 'file_server', 'forward_auth', 'handle', 'handle_errors',
1452
+ 'handle_path', 'header', 'import', 'invoke', 'log', 'map', 'metrics',
1453
+ 'php_fastcgi', 'push', 'redir', 'request_body', 'request_header',
1454
+ 'respond', 'reverse_proxy', 'rewrite', 'root', 'route', 'templates',
1455
+ 'tls', 'tracing', 'try_files', 'uri', 'vars',
1456
+ )
1457
+
1458
+ tokens = {
1459
+ 'root': [
1460
+ # Directives are only keywords as the first token on a line, so
1461
+ # anchor them to the start of the (possibly indented) line. This
1462
+ # consumes the preceding newline(s)/indentation itself, otherwise
1463
+ # the generic whitespace rule below would swallow it first.
1464
+ (r'((?:\A|\s*\n)[ \t]*)(' + '|'.join(directives) + r')\b',
1465
+ bygroups(Whitespace, Keyword)),
1466
+ (r'\s+', Whitespace),
1467
+ (r'#.*', Comment.Single),
1468
+ # Heredoc: <<LABEL <args> ... LABEL. The remainder of the opening
1469
+ # line (e.g. a status code) is not part of the body, so re-lex it;
1470
+ # the closing label must stand alone on its line.
1471
+ (r'(<<)([a-zA-Z_]\w*)(.*\n)((?:.*\n)*?)([ \t]*)(\2)(?=[ \t]*$)',
1472
+ bygroups(Operator, String.Delimiter, using(this),
1473
+ String.Heredoc, Whitespace, String.Delimiter)),
1474
+ # Placeholders: {path}, {http.request.uri}, {$ENV}, {args[0]}, ...
1475
+ (r'\{[^{}\s]+\}', Name.Variable),
1476
+ # Blocks and snippet parentheses
1477
+ (r'[(){}]', Punctuation),
1478
+ # Named matcher, e.g. @api
1479
+ (r'@[\w.-]+', Name.Decorator),
1480
+ (r'"', String.Double, 'string'),
1481
+ (r'`', String.Backtick, 'backtick'),
1482
+ # Numbers, durations and sizes (443, 200, 30s, 1.5m, 10MB); a
1483
+ # trailing dot or more digits/letters means it is an address or
1484
+ # hostname, which must stay Text.
1485
+ (r'\d+(?:\.\d+)?[a-zA-Z]*(?=[\s#{}()"`]|$)', Number),
1486
+ (r'[^\s#{}()"`]+', Text),
1487
+ ],
1488
+ 'string': [
1489
+ (r'\\.', String.Escape),
1490
+ (r'\{[^{}\s]+\}', Name.Variable),
1491
+ (r'[^"\\{]+', String.Double),
1492
+ (r'"', String.Double, '#pop'),
1493
+ (r'.', String.Double),
1494
+ ],
1495
+ 'backtick': [
1496
+ (r'[^`]+', String.Backtick),
1497
+ (r'`', String.Backtick, '#pop'),
1498
+ ],
1499
+ }
venv/Lib/site-packages/pygments/lexers/console.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.console
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for misc console output.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, include, bygroups, words
12
+ from pygments.token import Generic, Comment, String, Text, Keyword, Name, \
13
+ Punctuation, Number, Whitespace
14
+
15
+ __all__ = ['VCTreeStatusLexer', 'PyPyLogLexer']
16
+
17
+
18
+ class VCTreeStatusLexer(RegexLexer):
19
+ """
20
+ For colorizing output of version control status commands, like "hg
21
+ status" or "svn status".
22
+ """
23
+ name = 'VCTreeStatus'
24
+ aliases = ['vctreestatus']
25
+ filenames = []
26
+ mimetypes = []
27
+ url = ""
28
+ version_added = '2.0'
29
+
30
+ tokens = {
31
+ 'root': [
32
+ (r'^A \+ C\s+', Generic.Error),
33
+ (r'^A\s+\+?\s+', String),
34
+ (r'^M\s+', Generic.Inserted),
35
+ (r'^C\s+', Generic.Error),
36
+ (r'^D\s+', Generic.Deleted),
37
+ (r'^[?!]\s+', Comment.Preproc),
38
+ (r' >\s+.*\n', Comment.Preproc),
39
+ (r'\S+', Text),
40
+ (r'\s+', Whitespace),
41
+ ]
42
+ }
43
+
44
+
45
+ class PyPyLogLexer(RegexLexer):
46
+ """
47
+ Lexer for PyPy log files.
48
+ """
49
+ name = "PyPy Log"
50
+ aliases = ["pypylog", "pypy"]
51
+ filenames = ["*.pypylog"]
52
+ mimetypes = ['application/x-pypylog']
53
+ url = 'pypy.org'
54
+ version_added = '1.5'
55
+
56
+ tokens = {
57
+ "root": [
58
+ (r"\[\w+\] \{jit-log-.*?$", Keyword, "jit-log"),
59
+ (r"\[\w+\] \{jit-backend-counts$", Keyword, "jit-backend-counts"),
60
+ include("extra-stuff"),
61
+ ],
62
+ "jit-log": [
63
+ (r"\[\w+\] jit-log-.*?}$", Keyword, "#pop"),
64
+ (r"^\+\d+: ", Comment),
65
+ (r"--end of the loop--", Comment),
66
+ (r"[ifp]\d+", Name),
67
+ (r"ptr\d+", Name),
68
+ (r"(\()(\w+(?:\.\w+)?)(\))",
69
+ bygroups(Punctuation, Name.Builtin, Punctuation)),
70
+ (r"[\[\]=,()]", Punctuation),
71
+ (r"(\d+\.\d+|inf|-inf)", Number.Float),
72
+ (r"-?\d+", Number.Integer),
73
+ (r"'.*'", String),
74
+ (r"(None|descr|ConstClass|ConstPtr|TargetToken)", Name),
75
+ (r"<.*?>+", Name.Builtin),
76
+ (r"(label|debug_merge_point|jump|finish)", Name.Class),
77
+ (words(('int_add_ovf', 'int_add', 'int_sub_ovf', 'int_sub',
78
+ 'int_mul_ovf', 'int_mul', 'int_floordiv',
79
+ 'int_mod', 'int_lshift', 'int_rshift',
80
+ 'int_and', 'int_or', 'int_xor', 'int_eq',
81
+ 'int_ne', 'int_ge', 'int_gt', 'int_le',
82
+ 'int_lt', 'int_is_zero', 'int_is_true',
83
+ 'uint_floordiv', 'uint_ge', 'uint_lt',
84
+ 'float_add', 'float_sub', 'float_mul',
85
+ 'float_truediv', 'float_neg', 'float_eq',
86
+ 'float_ne', 'float_ge', 'float_gt',
87
+ 'float_le', 'float_lt', 'float_abs',
88
+ 'ptr_eq', 'ptr_ne', 'instance_ptr_eq',
89
+ 'instance_ptr_ne', 'cast_int_to_float',
90
+ 'cast_float_to_int', 'force_token',
91
+ 'quasiimmut_field', 'same_as',
92
+ 'virtual_ref_finish', 'virtual_ref',
93
+ 'mark_opaque_ptr', 'call_may_force',
94
+ 'call_assembler', 'call_loopinvariant',
95
+ 'call_release_gil', 'call_pure', 'call',
96
+ 'new_with_vtable', 'new_array', 'newstr',
97
+ 'newunicode', 'new', 'arraylen_gc',
98
+ 'getarrayitem_gc_pure', 'getarrayitem_gc',
99
+ 'setarrayitem_gc', 'getarrayitem_raw',
100
+ 'setarrayitem_raw', 'getfield_gc_pure',
101
+ 'getfield_gc', 'getinteriorfield_gc',
102
+ 'setinteriorfield_gc', 'getfield_raw',
103
+ 'setfield_gc', 'setfield_raw', 'strgetitem',
104
+ 'strsetitem', 'strlen', 'copystrcontent',
105
+ 'unicodegetitem', 'unicodesetitem',
106
+ 'unicodelen', 'guard_true', 'guard_false',
107
+ 'guard_value', 'guard_isnull',
108
+ 'guard_nonnull_class', 'guard_nonnull',
109
+ 'guard_class', 'guard_no_overflow',
110
+ 'guard_not_forced', 'guard_no_exception',
111
+ 'guard_not_invalidated')),
112
+ Name.Builtin),
113
+ include("extra-stuff"),
114
+ ],
115
+ "jit-backend-counts": [
116
+ (r"\[\w+\] jit-backend-counts}$", Keyword, "#pop"),
117
+ (r":", Punctuation),
118
+ (r"\d+", Number),
119
+ include("extra-stuff"),
120
+ ],
121
+ "extra-stuff": [
122
+ (r"\s+", Whitespace),
123
+ (r"#.*?$", Comment),
124
+ ],
125
+ }
venv/Lib/site-packages/pygments/lexers/cplint.py ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.cplint
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the cplint language
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import bygroups, inherit, words
12
+ from pygments.lexers import PrologLexer
13
+ from pygments.token import Operator, Keyword, Name, String, Punctuation
14
+
15
+ __all__ = ['CplintLexer']
16
+
17
+
18
+ class CplintLexer(PrologLexer):
19
+ """
20
+ Lexer for cplint files, including CP-logic, Logic Programs with Annotated
21
+ Disjunctions, Distributional Clauses syntax, ProbLog, DTProbLog.
22
+ """
23
+ name = 'cplint'
24
+ url = 'https://cplint.eu'
25
+ aliases = ['cplint']
26
+ filenames = ['*.ecl', '*.prolog', '*.pro', '*.pl', '*.P', '*.lpad', '*.cpl']
27
+ mimetypes = ['text/x-cplint']
28
+ version_added = '2.12'
29
+
30
+ tokens = {
31
+ 'root': [
32
+ (r'map_query', Keyword),
33
+ (words(('gaussian', 'uniform_dens', 'dirichlet', 'gamma', 'beta',
34
+ 'poisson', 'binomial', 'geometric', 'exponential', 'pascal',
35
+ 'multinomial', 'user', 'val', 'uniform', 'discrete',
36
+ 'finite')), Name.Builtin),
37
+ # annotations of atoms
38
+ (r'([a-z]+)(:)', bygroups(String.Atom, Punctuation)),
39
+ (r':[-=]|::?|~=?|=>', Operator),
40
+ (r'\?', Name.Builtin),
41
+ inherit,
42
+ ],
43
+ }
venv/Lib/site-packages/pygments/lexers/crystal.py ADDED
@@ -0,0 +1,364 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.crystal
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for Crystal.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import ExtendedRegexLexer, include, bygroups, default, \
14
+ words, line_re
15
+ from pygments.token import Comment, Operator, Keyword, Name, String, Number, \
16
+ Punctuation, Error, Whitespace
17
+
18
+ __all__ = ['CrystalLexer']
19
+
20
+
21
+ CRYSTAL_OPERATORS = [
22
+ '!=', '!~', '!', '%', '&&', '&', '**', '*', '+', '-', '/', '<=>', '<<', '<=', '<',
23
+ '===', '==', '=~', '=', '>=', '>>', '>', '[]=', '[]?', '[]', '^', '||', '|', '~'
24
+ ]
25
+
26
+
27
+ class CrystalLexer(ExtendedRegexLexer):
28
+ """
29
+ For Crystal source code.
30
+ """
31
+
32
+ name = 'Crystal'
33
+ url = 'https://crystal-lang.org'
34
+ aliases = ['cr', 'crystal']
35
+ filenames = ['*.cr']
36
+ mimetypes = ['text/x-crystal']
37
+ version_added = '2.2'
38
+
39
+ flags = re.DOTALL | re.MULTILINE
40
+
41
+ def heredoc_callback(self, match, ctx):
42
+ # okay, this is the hardest part of parsing Crystal...
43
+ # match: 1 = <<-?, 2 = quote? 3 = name 4 = quote? 5 = rest of line
44
+
45
+ start = match.start(1)
46
+ yield start, Operator, match.group(1) # <<-?
47
+ yield match.start(2), String.Heredoc, match.group(2) # quote ", ', `
48
+ yield match.start(3), String.Delimiter, match.group(3) # heredoc name
49
+ yield match.start(4), String.Heredoc, match.group(4) # quote again
50
+
51
+ heredocstack = ctx.__dict__.setdefault('heredocstack', [])
52
+ outermost = not bool(heredocstack)
53
+ heredocstack.append((match.group(1) == '<<-', match.group(3)))
54
+
55
+ ctx.pos = match.start(5)
56
+ ctx.end = match.end(5)
57
+ # this may find other heredocs, so limit the recursion depth
58
+ if len(heredocstack) < 100:
59
+ yield from self.get_tokens_unprocessed(context=ctx)
60
+ else:
61
+ yield ctx.pos, String.Heredoc, match.group(5)
62
+ ctx.pos = match.end()
63
+
64
+ if outermost:
65
+ # this is the outer heredoc again, now we can process them all
66
+ for tolerant, hdname in heredocstack:
67
+ lines = []
68
+ for match in line_re.finditer(ctx.text, ctx.pos):
69
+ if tolerant:
70
+ check = match.group().strip()
71
+ else:
72
+ check = match.group().rstrip()
73
+ if check == hdname:
74
+ for amatch in lines:
75
+ yield amatch.start(), String.Heredoc, amatch.group()
76
+ yield match.start(), String.Delimiter, match.group()
77
+ ctx.pos = match.end()
78
+ break
79
+ else:
80
+ lines.append(match)
81
+ else:
82
+ # end of heredoc not found -- error!
83
+ for amatch in lines:
84
+ yield amatch.start(), Error, amatch.group()
85
+ ctx.end = len(ctx.text)
86
+ del heredocstack[:]
87
+
88
+ def gen_crystalstrings_rules():
89
+ states = {}
90
+ states['strings'] = [
91
+ (r'\:\w+[!?]?', String.Symbol),
92
+ (words(CRYSTAL_OPERATORS, prefix=r'\:'), String.Symbol),
93
+ (r":'(\\\\|\\[^\\]|[^'\\])*'", String.Symbol),
94
+ # This allows arbitrary text after '\ for simplicity
95
+ (r"'(\\\\|\\'|[^']|\\[^'\\]+)'", String.Char),
96
+ (r':"', String.Symbol, 'simple-sym'),
97
+ # Crystal doesn't have "symbol:"s but this simplifies function args
98
+ (r'([a-zA-Z_]\w*)(:)(?!:)', bygroups(String.Symbol, Punctuation)),
99
+ (r'"', String.Double, 'simple-string'),
100
+ (r'(?<!\.)`', String.Backtick, 'simple-backtick'),
101
+ ]
102
+
103
+ # double-quoted string and symbol
104
+ for name, ttype, end in ('string', String.Double, '"'), \
105
+ ('sym', String.Symbol, '"'), \
106
+ ('backtick', String.Backtick, '`'):
107
+ states['simple-'+name] = [
108
+ include('string-escaped' if name == 'sym' else 'string-intp-escaped'),
109
+ (rf'[^\\{end}#]+', ttype),
110
+ (r'[\\#]', ttype),
111
+ (end, ttype, '#pop'),
112
+ ]
113
+
114
+ # https://crystal-lang.org/docs/syntax_and_semantics/literals/string.html#percent-string-literals
115
+ for lbrace, rbrace, bracecc, name in \
116
+ ('\\{', '\\}', '{}', 'cb'), \
117
+ ('\\[', '\\]', '\\[\\]', 'sb'), \
118
+ ('\\(', '\\)', '()', 'pa'), \
119
+ ('<', '>', '<>', 'ab'), \
120
+ ('\\|', '\\|', '\\|', 'pi'):
121
+ states[name+'-intp-string'] = [
122
+ (r'\\' + lbrace, String.Other),
123
+ ] + (lbrace != rbrace) * [
124
+ (lbrace, String.Other, '#push'),
125
+ ] + [
126
+ (rbrace, String.Other, '#pop'),
127
+ include('string-intp-escaped'),
128
+ (r'[\\#' + bracecc + ']', String.Other),
129
+ (r'[^\\#' + bracecc + ']+', String.Other),
130
+ ]
131
+ states['strings'].append((r'%Q?' + lbrace, String.Other,
132
+ name+'-intp-string'))
133
+ states[name+'-string'] = [
134
+ (r'\\[\\' + bracecc + ']', String.Other),
135
+ ] + (lbrace != rbrace) * [
136
+ (lbrace, String.Other, '#push'),
137
+ ] + [
138
+ (rbrace, String.Other, '#pop'),
139
+ (r'[\\#' + bracecc + ']', String.Other),
140
+ (r'[^\\#' + bracecc + ']+', String.Other),
141
+ ]
142
+ # https://crystal-lang.org/docs/syntax_and_semantics/literals/array.html#percent-array-literals
143
+ states['strings'].append((r'%[qwi]' + lbrace, String.Other,
144
+ name+'-string'))
145
+ states[name+'-regex'] = [
146
+ (r'\\[\\' + bracecc + ']', String.Regex),
147
+ ] + (lbrace != rbrace) * [
148
+ (lbrace, String.Regex, '#push'),
149
+ ] + [
150
+ (rbrace + '[imsx]*', String.Regex, '#pop'),
151
+ include('string-intp'),
152
+ (r'[\\#' + bracecc + ']', String.Regex),
153
+ (r'[^\\#' + bracecc + ']+', String.Regex),
154
+ ]
155
+ states['strings'].append((r'%r' + lbrace, String.Regex,
156
+ name+'-regex'))
157
+
158
+ return states
159
+
160
+ tokens = {
161
+ 'root': [
162
+ (r'#.*?$', Comment.Single),
163
+ # keywords
164
+ (words('''
165
+ abstract asm begin break case do else elsif end ensure extend if in
166
+ include next of private protected require rescue return select self super
167
+ then unless until when while with yield
168
+ '''.split(), suffix=r'\b'), Keyword),
169
+ (words('''
170
+ previous_def forall out uninitialized __DIR__ __FILE__ __LINE__
171
+ __END_LINE__
172
+ '''.split(), prefix=r'(?<!\.)', suffix=r'\b'), Keyword.Pseudo),
173
+ # https://crystal-lang.org/docs/syntax_and_semantics/is_a.html
174
+ (r'\.(is_a\?|nil\?|responds_to\?|as\?|as\b)', Keyword.Pseudo),
175
+ (words(['true', 'false', 'nil'], suffix=r'\b'), Keyword.Constant),
176
+ # start of function, class and module names
177
+ (r'(module|lib)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)',
178
+ bygroups(Keyword, Whitespace, Name.Namespace)),
179
+ (r'(def|fun|macro)(\s+)((?:[a-zA-Z_]\w*::)*)',
180
+ bygroups(Keyword, Whitespace, Name.Namespace), 'funcname'),
181
+ (r'def(?=[*%&^`~+-/\[<>=])', Keyword, 'funcname'),
182
+ (r'(annotation|class|struct|union|type|alias|enum)(\s+)((?:[a-zA-Z_]\w*::)*)',
183
+ bygroups(Keyword, Whitespace, Name.Namespace), 'classname'),
184
+ # https://crystal-lang.org/api/toplevel.html
185
+ (words('''
186
+ instance_sizeof offsetof pointerof sizeof typeof
187
+ '''.split(), prefix=r'(?<!\.)', suffix=r'\b'), Keyword.Pseudo),
188
+ # macros
189
+ (r'(?<!\.)(debugger\b|p!|pp!|record\b|spawn\b)', Name.Builtin.Pseudo),
190
+ # builtins
191
+ (words('''
192
+ abort at_exit caller exit gets loop main p pp print printf puts
193
+ raise rand read_line sleep spawn sprintf system
194
+ '''.split(), prefix=r'(?<!\.)', suffix=r'\b'), Name.Builtin),
195
+ # https://crystal-lang.org/api/Object.html#macro-summary
196
+ (r'(?<!\.)(((class_)?((getter|property)\b[!?]?|setter\b))|'
197
+ r'(def_(clone|equals|equals_and_hash|hash)|delegate|forward_missing_to)\b)',
198
+ Name.Builtin.Pseudo),
199
+ # normal heredocs
200
+ (r'(?<!\w)(<<-?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)',
201
+ heredoc_callback),
202
+ # empty string heredocs
203
+ (r'(<<-?)("|\')()(\2)(.*?\n)', heredoc_callback),
204
+ (r'__END__', Comment.Preproc, 'end-part'),
205
+ # multiline regex (after keywords or assignments)
206
+ (r'(?:^|(?<=[=<>~!:])|'
207
+ r'(?<=(?:\s|;)when\s)|'
208
+ r'(?<=(?:\s|;)or\s)|'
209
+ r'(?<=(?:\s|;)and\s)|'
210
+ r'(?<=\.index\s)|'
211
+ r'(?<=\.scan\s)|'
212
+ r'(?<=\.sub\s)|'
213
+ r'(?<=\.sub!\s)|'
214
+ r'(?<=\.gsub\s)|'
215
+ r'(?<=\.gsub!\s)|'
216
+ r'(?<=\.match\s)|'
217
+ r'(?<=(?:\s|;)if\s)|'
218
+ r'(?<=(?:\s|;)elsif\s)|'
219
+ r'(?<=^when\s)|'
220
+ r'(?<=^index\s)|'
221
+ r'(?<=^scan\s)|'
222
+ r'(?<=^sub\s)|'
223
+ r'(?<=^gsub\s)|'
224
+ r'(?<=^sub!\s)|'
225
+ r'(?<=^gsub!\s)|'
226
+ r'(?<=^match\s)|'
227
+ r'(?<=^if\s)|'
228
+ r'(?<=^elsif\s)'
229
+ r')(\s*)(/)', bygroups(Whitespace, String.Regex), 'multiline-regex'),
230
+ # multiline regex (in method calls or subscripts)
231
+ (r'(?<=\(|,|\[)/', String.Regex, 'multiline-regex'),
232
+ # multiline regex (this time the funny no whitespace rule)
233
+ (r'(\s+)(/)(?![\s=])', bygroups(Whitespace, String.Regex),
234
+ 'multiline-regex'),
235
+ # lex numbers and ignore following regular expressions which
236
+ # are division operators in fact (grrrr. i hate that. any
237
+ # better ideas?)
238
+ # since pygments 0.7 we also eat a "?" operator after numbers
239
+ # so that the char operator does not work. Chars are not allowed
240
+ # there so that you can use the ternary operator.
241
+ # stupid example:
242
+ # x>=0?n[x]:""
243
+ (r'(0o[0-7]+(?:_[0-7]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?',
244
+ bygroups(Number.Oct, Whitespace, Operator)),
245
+ (r'(0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?',
246
+ bygroups(Number.Hex, Whitespace, Operator)),
247
+ (r'(0b[01]+(?:_[01]+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?',
248
+ bygroups(Number.Bin, Whitespace, Operator)),
249
+ # 3 separate expressions for floats because any of the 3 optional
250
+ # parts makes it a float
251
+ (r'((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)(?:e[+-]?[0-9]+)?'
252
+ r'(?:_?f[0-9]+)?)(\s*)([/?])?',
253
+ bygroups(Number.Float, Whitespace, Operator)),
254
+ (r'((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)'
255
+ r'(?:_?f[0-9]+)?)(\s*)([/?])?',
256
+ bygroups(Number.Float, Whitespace, Operator)),
257
+ (r'((?:0(?![0-9])|[1-9][\d_]*)(?:\.\d[\d_]*)?(?:e[+-]?[0-9]+)?'
258
+ r'(?:_?f[0-9]+))(\s*)([/?])?',
259
+ bygroups(Number.Float, Whitespace, Operator)),
260
+ (r'(0\b|[1-9][\d]*(?:_\d+)*(?:_?[iu][0-9]+)?)\b(\s*)([/?])?',
261
+ bygroups(Number.Integer, Whitespace, Operator)),
262
+ # Names
263
+ (r'@@[a-zA-Z_]\w*', Name.Variable.Class),
264
+ (r'@[a-zA-Z_]\w*', Name.Variable.Instance),
265
+ (r'\$\w+', Name.Variable.Global),
266
+ (r'\$[!@&`\'+~=/\\,;.<>_*$?:"^-]', Name.Variable.Global),
267
+ (r'\$-[0adFiIlpvw]', Name.Variable.Global),
268
+ (r'::', Operator),
269
+ include('strings'),
270
+ # https://crystal-lang.org/reference/syntax_and_semantics/literals/char.html
271
+ (r'\?(\\[MC]-)*' # modifiers
272
+ r'(\\([\\abefnrtv#"\']|[0-7]{1,3}|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|u\{[a-fA-F0-9 ]+\})|\S)'
273
+ r'(?!\w)',
274
+ String.Char),
275
+ (r'[A-Z][A-Z_]+\b(?!::|\.)', Name.Constant),
276
+ # macro expansion
277
+ (r'\{%', String.Interpol, 'in-macro-control'),
278
+ (r'\{\{', String.Interpol, 'in-macro-expr'),
279
+ # annotations
280
+ (r'(@\[)(\s*)([A-Z]\w*(::[A-Z]\w*)*)',
281
+ bygroups(Operator, Whitespace, Name.Decorator), 'in-annot'),
282
+ # this is needed because Crystal attributes can look
283
+ # like keywords (class) or like this: ` ?!?
284
+ (words(CRYSTAL_OPERATORS, prefix=r'(\.|::)'),
285
+ bygroups(Operator, Name.Operator)),
286
+ (r'(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])',
287
+ bygroups(Operator, Name)),
288
+ # Names can end with [!?] unless it's "!="
289
+ (r'[a-zA-Z_]\w*(?:[!?](?!=))?', Name),
290
+ (r'(\[|\]\??|\*\*|<=>?|>=|<<?|>>?|=~|===|'
291
+ r'!~|&&?|\|\||\.{1,3})', Operator),
292
+ (r'[-+/*%=<>&!^|~]=?', Operator),
293
+ (r'[(){};,/?:\\]', Punctuation),
294
+ (r'\s+', Whitespace)
295
+ ],
296
+ 'funcname': [
297
+ (r'(?:([a-zA-Z_]\w*)(\.))?'
298
+ r'([a-zA-Z_]\w*[!?]?|\*\*?|[-+]@?|'
299
+ r'[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)',
300
+ bygroups(Name.Class, Operator, Name.Function), '#pop'),
301
+ default('#pop')
302
+ ],
303
+ 'classname': [
304
+ (r'[A-Z_]\w*', Name.Class),
305
+ (r'(\()(\s*)([A-Z_]\w*)(\s*)(\))',
306
+ bygroups(Punctuation, Whitespace, Name.Class, Whitespace, Punctuation)),
307
+ default('#pop')
308
+ ],
309
+ 'in-intp': [
310
+ (r'\{', String.Interpol, '#push'),
311
+ (r'\}', String.Interpol, '#pop'),
312
+ include('root'),
313
+ ],
314
+ 'string-intp': [
315
+ (r'#\{', String.Interpol, 'in-intp'),
316
+ ],
317
+ 'string-escaped': [
318
+ # https://crystal-lang.org/reference/syntax_and_semantics/literals/string.html
319
+ (r'\\([\\abefnrtv#"\']|[0-7]{1,3}|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|u\{[a-fA-F0-9 ]+\})',
320
+ String.Escape)
321
+ ],
322
+ 'string-intp-escaped': [
323
+ include('string-intp'),
324
+ include('string-escaped'),
325
+ ],
326
+ 'interpolated-regex': [
327
+ include('string-intp'),
328
+ (r'[\\#]', String.Regex),
329
+ (r'[^\\#]+', String.Regex),
330
+ ],
331
+ 'interpolated-string': [
332
+ include('string-intp'),
333
+ (r'[\\#]', String.Other),
334
+ (r'[^\\#]+', String.Other),
335
+ ],
336
+ 'multiline-regex': [
337
+ include('string-intp'),
338
+ (r'\\\\', String.Regex),
339
+ (r'\\/', String.Regex),
340
+ (r'[\\#]', String.Regex),
341
+ (r'[^\\/#]+', String.Regex),
342
+ (r'/[imsx]*', String.Regex, '#pop'),
343
+ ],
344
+ 'end-part': [
345
+ (r'.+', Comment.Preproc, '#pop')
346
+ ],
347
+ 'in-macro-control': [
348
+ (r'\{%', String.Interpol, '#push'),
349
+ (r'%\}', String.Interpol, '#pop'),
350
+ (r'(for|verbatim)\b', Keyword),
351
+ include('root'),
352
+ ],
353
+ 'in-macro-expr': [
354
+ (r'\{\{', String.Interpol, '#push'),
355
+ (r'\}\}', String.Interpol, '#pop'),
356
+ include('root'),
357
+ ],
358
+ 'in-annot': [
359
+ (r'\[', Operator, '#push'),
360
+ (r'\]', Operator, '#pop'),
361
+ include('root'),
362
+ ],
363
+ }
364
+ tokens.update(gen_crystalstrings_rules())
venv/Lib/site-packages/pygments/lexers/csound.py ADDED
@@ -0,0 +1,466 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.csound
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for Csound languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, bygroups, default, include, using, words
14
+ from pygments.token import Comment, Error, Keyword, Name, Number, Operator, Punctuation, \
15
+ String, Text, Whitespace
16
+ from pygments.lexers._csound_builtins import OPCODES, DEPRECATED_OPCODES, REMOVED_OPCODES
17
+ from pygments.lexers.html import HtmlLexer
18
+ from pygments.lexers.python import PythonLexer
19
+ from pygments.lexers.scripting import LuaLexer
20
+
21
+ __all__ = ['CsoundScoreLexer', 'CsoundOrchestraLexer', 'CsoundDocumentLexer']
22
+
23
+ newline = (r'((?:(?:;|//).*)*)(\n)', bygroups(Comment.Single, Text))
24
+
25
+
26
+ class CsoundLexer(RegexLexer):
27
+ url = 'https://csound.com/'
28
+
29
+ tokens = {
30
+ 'whitespace': [
31
+ (r'[ \t]+', Whitespace),
32
+ (r'/[*][\s\S]*?[*]/', Comment.Multiline),
33
+ (r'(?:;|//).*$', Comment.Single),
34
+ (r'(\\)(\n)', bygroups(Text, Whitespace))
35
+ ],
36
+
37
+ 'preprocessor directives': [
38
+ (r'#(?:e(?:nd(?:if)?|lse)\b|##)|@@?[ \t]*\d+', Comment.Preproc),
39
+ (r'#includestr', Comment.Preproc, 'includestr directive'),
40
+ (r'#include', Comment.Preproc, 'include directive'),
41
+ (r'#[ \t]*define', Comment.Preproc, 'define directive'),
42
+ (r'#(?:ifn?def|undef)\b', Comment.Preproc, 'macro directive')
43
+ ],
44
+
45
+ 'include directive': [
46
+ include('whitespace'),
47
+ (r'([^ \t]).*?\1', String, '#pop')
48
+ ],
49
+ 'includestr directive': [
50
+ include('whitespace'),
51
+ (r'"', String, ('#pop', 'quoted string'))
52
+ ],
53
+
54
+ 'define directive': [
55
+ (r'\n', Whitespace),
56
+ include('whitespace'),
57
+ (r'([A-Z_a-z]\w*)(\()', bygroups(Comment.Preproc, Punctuation),
58
+ ('#pop', 'macro parameter name list')),
59
+ (r'[A-Z_a-z]\w*', Comment.Preproc, ('#pop', 'before macro body'))
60
+ ],
61
+ 'macro parameter name list': [
62
+ include('whitespace'),
63
+ (r'[A-Z_a-z]\w*', Comment.Preproc),
64
+ (r"['#]", Punctuation),
65
+ (r'\)', Punctuation, ('#pop', 'before macro body'))
66
+ ],
67
+ 'before macro body': [
68
+ (r'\n', Whitespace),
69
+ include('whitespace'),
70
+ (r'#', Punctuation, ('#pop', 'macro body'))
71
+ ],
72
+ 'macro body': [
73
+ (r'(?:\\(?!#)|[^#\\]|\n)+', Comment.Preproc),
74
+ (r'\\#', Comment.Preproc),
75
+ (r'(?<!\\)#', Punctuation, '#pop')
76
+ ],
77
+
78
+ 'macro directive': [
79
+ include('whitespace'),
80
+ (r'[A-Z_a-z]\w*', Comment.Preproc, '#pop')
81
+ ],
82
+
83
+ 'macro uses': [
84
+ (r'(\$[A-Z_a-z]\w*\.?)(\()', bygroups(Comment.Preproc, Punctuation),
85
+ 'macro parameter value list'),
86
+ (r'\$[A-Z_a-z]\w*(?:\.|\b)', Comment.Preproc)
87
+ ],
88
+ 'macro parameter value list': [
89
+ (r'(?:[^\'#"{()]|\{(?!\{))+', Comment.Preproc),
90
+ (r"['#]", Punctuation),
91
+ (r'"', String, 'macro parameter value quoted string'),
92
+ (r'\{\{', String, 'macro parameter value braced string'),
93
+ (r'\(', Comment.Preproc, 'macro parameter value parenthetical'),
94
+ (r'\)', Punctuation, '#pop')
95
+ ],
96
+ 'macro parameter value quoted string': [
97
+ (r"\\[#'()]", Comment.Preproc),
98
+ (r"[#'()]", Error),
99
+ include('quoted string')
100
+ ],
101
+ 'macro parameter value braced string': [
102
+ (r"\\[#'()]", Comment.Preproc),
103
+ (r"[#'()]", Error),
104
+ include('braced string')
105
+ ],
106
+ 'macro parameter value parenthetical': [
107
+ (r'(?:[^\\()]|\\\))+', Comment.Preproc),
108
+ (r'\(', Comment.Preproc, '#push'),
109
+ (r'\)', Comment.Preproc, '#pop')
110
+ ],
111
+
112
+ 'whitespace and macro uses': [
113
+ include('whitespace'),
114
+ include('macro uses')
115
+ ],
116
+
117
+ 'numbers': [
118
+ (r'\d+[Ee][+-]?\d+|(\d+\.\d*|\d*\.\d+)([Ee][+-]?\d+)?', Number.Float),
119
+ (r'(0[Xx])([0-9A-Fa-f]+)', bygroups(Keyword.Type, Number.Hex)),
120
+ (r'\d+', Number.Integer)
121
+ ],
122
+
123
+ 'quoted string': [
124
+ (r'"', String, '#pop'),
125
+ (r'[^"$]+', String),
126
+ include('macro uses'),
127
+ (r'[$]', String)
128
+ ],
129
+
130
+ 'braced string': [
131
+ # Do nothing. This must be defined in subclasses.
132
+ ]
133
+ }
134
+
135
+
136
+ class CsoundScoreLexer(CsoundLexer):
137
+ """
138
+ For `Csound <https://csound.com>`_ scores.
139
+ """
140
+
141
+ name = 'Csound Score'
142
+ aliases = ['csound-score', 'csound-sco']
143
+ filenames = ['*.sco']
144
+ version_added = '2.1'
145
+
146
+ tokens = {
147
+ 'root': [
148
+ (r'\n', Whitespace),
149
+ include('whitespace and macro uses'),
150
+ include('preprocessor directives'),
151
+
152
+ (r'[aBbCdefiqstvxy]', Keyword),
153
+ # There is also a w statement that is generated internally and should not be
154
+ # used; see https://github.com/csound/csound/issues/750.
155
+
156
+ (r'z', Keyword.Constant),
157
+ # z is a constant equal to 800,000,000,000. 800 billion seconds is about
158
+ # 25,367.8 years. See also
159
+ # https://csound.com/docs/manual/ScoreTop.html and
160
+ # https://github.com/csound/csound/search?q=stof+path%3AEngine+filename%3Asread.c.
161
+
162
+ (r'([nNpP][pP])(\d+)', bygroups(Keyword, Number.Integer)),
163
+
164
+ (r'[mn]', Keyword, 'mark statement'),
165
+
166
+ include('numbers'),
167
+ (r'[!+\-*/^%&|<>#~.]', Operator),
168
+ (r'[()\[\]]', Punctuation),
169
+ (r'"', String, 'quoted string'),
170
+ (r'\{', Comment.Preproc, 'loop after left brace'),
171
+ ],
172
+
173
+ 'mark statement': [
174
+ include('whitespace and macro uses'),
175
+ (r'[A-Z_a-z]\w*', Name.Label),
176
+ (r'\n', Whitespace, '#pop')
177
+ ],
178
+
179
+ 'loop after left brace': [
180
+ include('whitespace and macro uses'),
181
+ (r'\d+', Number.Integer, ('#pop', 'loop after repeat count')),
182
+ ],
183
+ 'loop after repeat count': [
184
+ include('whitespace and macro uses'),
185
+ (r'[A-Z_a-z]\w*', Comment.Preproc, ('#pop', 'loop'))
186
+ ],
187
+ 'loop': [
188
+ (r'\}', Comment.Preproc, '#pop'),
189
+ include('root')
190
+ ],
191
+
192
+ # Braced strings are not allowed in Csound scores, but this is needed because the
193
+ # superclass includes it.
194
+ 'braced string': [
195
+ (r'\}\}', String, '#pop'),
196
+ (r'[^}]|\}(?!\})', String)
197
+ ]
198
+ }
199
+
200
+
201
+ class CsoundOrchestraLexer(CsoundLexer):
202
+ """
203
+ For `Csound <https://csound.com>`_ orchestras.
204
+ """
205
+
206
+ name = 'Csound Orchestra'
207
+ aliases = ['csound', 'csound-orc']
208
+ filenames = ['*.orc', '*.udo']
209
+ version_added = '2.1'
210
+
211
+ user_defined_opcodes = set()
212
+
213
+ def opcode_name_callback(lexer, match):
214
+ opcode = match.group(0)
215
+ lexer.user_defined_opcodes.add(opcode)
216
+ yield match.start(), Name.Function, opcode
217
+
218
+ def name_callback(lexer, match):
219
+ type_annotation_token = Keyword.Type
220
+
221
+ name = match.group(1)
222
+ if name in OPCODES or name in DEPRECATED_OPCODES or name in REMOVED_OPCODES:
223
+ yield match.start(), Name.Builtin, name
224
+ elif name in lexer.user_defined_opcodes:
225
+ yield match.start(), Name.Function, name
226
+ else:
227
+ type_annotation_token = Name
228
+ name_match = re.search(r'^(g?[afikSw])(\w+)', name)
229
+ if name_match:
230
+ yield name_match.start(1), Keyword.Type, name_match.group(1)
231
+ yield name_match.start(2), Name, name_match.group(2)
232
+ else:
233
+ yield match.start(), Name, name
234
+
235
+ if match.group(2):
236
+ yield match.start(2), Punctuation, match.group(2)
237
+ yield match.start(3), type_annotation_token, match.group(3)
238
+
239
+ tokens = {
240
+ 'root': [
241
+ (r'\n', Whitespace),
242
+
243
+ (r'^([ \t]*)(\w+)(:)([ \t]+|$)', bygroups(Whitespace, Name.Label, Punctuation, Whitespace)),
244
+
245
+ include('whitespace and macro uses'),
246
+ include('preprocessor directives'),
247
+
248
+ (r'\binstr\b', Keyword.Declaration, 'instrument numbers and identifiers'),
249
+ (r'\bopcode\b', Keyword.Declaration, 'after opcode keyword'),
250
+ (r'\b(?:end(?:in|op))\b', Keyword.Declaration),
251
+
252
+ include('partial statements')
253
+ ],
254
+
255
+ 'partial statements': [
256
+ (r'\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\b', Name.Variable.Global),
257
+
258
+ include('numbers'),
259
+
260
+ (r'\+=|-=|\*=|/=|<<|>>|<=|>=|==|!=|&&|\|\||[~¬]|[=!+\-*/^%&|<>#?:]', Operator),
261
+ (r'[(),\[\]]', Punctuation),
262
+
263
+ (r'"', String, 'quoted string'),
264
+ (r'\{\{', String, 'braced string'),
265
+
266
+ (words((
267
+ 'do', 'else', 'elseif', 'endif', 'enduntil', 'fi', 'if', 'ithen', 'kthen',
268
+ 'od', 'then', 'until', 'while',
269
+ ), prefix=r'\b', suffix=r'\b'), Keyword),
270
+ (words(('return', 'rireturn'), prefix=r'\b', suffix=r'\b'), Keyword.Pseudo),
271
+
272
+ (r'\b[ik]?goto\b', Keyword, 'goto label'),
273
+ (r'\b(r(?:einit|igoto)|tigoto)(\(|\b)', bygroups(Keyword.Pseudo, Punctuation),
274
+ 'goto label'),
275
+ (r'\b(c(?:g|in?|k|nk?)goto)(\(|\b)', bygroups(Keyword.Pseudo, Punctuation),
276
+ ('goto label', 'goto argument')),
277
+ (r'\b(timout)(\(|\b)', bygroups(Keyword.Pseudo, Punctuation),
278
+ ('goto label', 'goto argument', 'goto argument')),
279
+ (r'\b(loop_[gl][et])(\(|\b)', bygroups(Keyword.Pseudo, Punctuation),
280
+ ('goto label', 'goto argument', 'goto argument', 'goto argument')),
281
+
282
+ (r'\bprintk?s\b', Name.Builtin, 'prints opcode'),
283
+ (r'\b(?:readscore|scoreline(?:_i)?)\b', Name.Builtin, 'Csound score opcode'),
284
+ (r'\bpyl?run[it]?\b', Name.Builtin, 'Python opcode'),
285
+ (r'\blua_(?:exec|opdef)\b', Name.Builtin, 'Lua opcode'),
286
+ (r'\bp\d+\b', Name.Variable.Instance),
287
+ (r'\b([A-Z_a-z]\w*)(?:(:)([A-Za-z]))?\b', name_callback)
288
+ ],
289
+
290
+ 'instrument numbers and identifiers': [
291
+ include('whitespace and macro uses'),
292
+ (r'\d+|[A-Z_a-z]\w*', Name.Function),
293
+ (r'[+,]', Punctuation),
294
+ (r'\n', Whitespace, '#pop')
295
+ ],
296
+
297
+ 'after opcode keyword': [
298
+ include('whitespace and macro uses'),
299
+ (r'[A-Z_a-z]\w*', opcode_name_callback, ('#pop', 'opcode type signatures')),
300
+ (r'\n', Whitespace, '#pop')
301
+ ],
302
+ 'opcode type signatures': [
303
+ include('whitespace and macro uses'),
304
+
305
+ # https://github.com/csound/csound/search?q=XIDENT+path%3AEngine+filename%3Acsound_orc.lex
306
+ (r'0|[afijJkKoOpPStV\[\]]+', Keyword.Type),
307
+
308
+ (r',', Punctuation),
309
+ (r'\n', Whitespace, '#pop')
310
+ ],
311
+
312
+ 'quoted string': [
313
+ (r'"', String, '#pop'),
314
+ (r'[^\\"$%)]+', String),
315
+ include('macro uses'),
316
+ include('escape sequences'),
317
+ include('format specifiers'),
318
+ (r'[\\$%)]', String)
319
+ ],
320
+ 'braced string': [
321
+ (r'\}\}', String, '#pop'),
322
+ (r'(?:[^\\%)}]|\}(?!\}))+', String),
323
+ include('escape sequences'),
324
+ include('format specifiers'),
325
+ (r'[\\%)]', String)
326
+ ],
327
+ 'escape sequences': [
328
+ # https://github.com/csound/csound/search?q=unquote_string+path%3AEngine+filename%3Acsound_orc_compile.c
329
+ (r'\\(?:[\\abnrt"]|[0-7]{1,3})', String.Escape)
330
+ ],
331
+ # Format specifiers are highlighted in all strings, even though only
332
+ # fprintks https://csound.com/docs/manual/fprintks.html
333
+ # fprints https://csound.com/docs/manual/fprints.html
334
+ # printf/printf_i https://csound.com/docs/manual/printf.html
335
+ # printks https://csound.com/docs/manual/printks.html
336
+ # prints https://csound.com/docs/manual/prints.html
337
+ # sprintf https://csound.com/docs/manual/sprintf.html
338
+ # sprintfk https://csound.com/docs/manual/sprintfk.html
339
+ # work with strings that contain format specifiers. In addition, these opcodes’
340
+ # handling of format specifiers is inconsistent:
341
+ # - fprintks and fprints accept %a and %A specifiers, and accept %s specifiers
342
+ # starting in Csound 6.15.0.
343
+ # - printks and prints accept %a and %A specifiers, but don’t accept %s
344
+ # specifiers.
345
+ # - printf, printf_i, sprintf, and sprintfk don’t accept %a and %A specifiers,
346
+ # but accept %s specifiers.
347
+ # See https://github.com/csound/csound/issues/747 for more information.
348
+ 'format specifiers': [
349
+ (r'%[#0\- +]*\d*(?:\.\d+)?[AE-GXac-giosux]', String.Interpol),
350
+ (r'%%', String.Escape)
351
+ ],
352
+
353
+ 'goto argument': [
354
+ include('whitespace and macro uses'),
355
+ (r',', Punctuation, '#pop'),
356
+ include('partial statements')
357
+ ],
358
+ 'goto label': [
359
+ include('whitespace and macro uses'),
360
+ (r'\w+', Name.Label, '#pop'),
361
+ default('#pop')
362
+ ],
363
+
364
+ 'prints opcode': [
365
+ include('whitespace and macro uses'),
366
+ (r'"', String, 'prints quoted string'),
367
+ default('#pop')
368
+ ],
369
+ 'prints quoted string': [
370
+ (r'\\\\[aAbBnNrRtT]', String.Escape),
371
+ (r'%[!nNrRtT]|[~^]{1,2}', String.Escape),
372
+ include('quoted string')
373
+ ],
374
+
375
+ 'Csound score opcode': [
376
+ include('whitespace and macro uses'),
377
+ (r'"', String, 'quoted string'),
378
+ (r'\{\{', String, 'Csound score'),
379
+ (r'\n', Whitespace, '#pop')
380
+ ],
381
+ 'Csound score': [
382
+ (r'\}\}', String, '#pop'),
383
+ (r'([^}]+)|\}(?!\})', using(CsoundScoreLexer))
384
+ ],
385
+
386
+ 'Python opcode': [
387
+ include('whitespace and macro uses'),
388
+ (r'"', String, 'quoted string'),
389
+ (r'\{\{', String, 'Python'),
390
+ (r'\n', Whitespace, '#pop')
391
+ ],
392
+ 'Python': [
393
+ (r'\}\}', String, '#pop'),
394
+ (r'([^}]+)|\}(?!\})', using(PythonLexer))
395
+ ],
396
+
397
+ 'Lua opcode': [
398
+ include('whitespace and macro uses'),
399
+ (r'"', String, 'quoted string'),
400
+ (r'\{\{', String, 'Lua'),
401
+ (r'\n', Whitespace, '#pop')
402
+ ],
403
+ 'Lua': [
404
+ (r'\}\}', String, '#pop'),
405
+ (r'([^}]+)|\}(?!\})', using(LuaLexer))
406
+ ]
407
+ }
408
+
409
+
410
+ class CsoundDocumentLexer(RegexLexer):
411
+ """
412
+ For Csound documents.
413
+ """
414
+
415
+ name = 'Csound Document'
416
+ aliases = ['csound-document', 'csound-csd']
417
+ filenames = ['*.csd']
418
+ url = 'https://csound.com'
419
+ version_added = '2.1'
420
+
421
+ # These tokens are based on those in XmlLexer in pygments/lexers/html.py. Making
422
+ # CsoundDocumentLexer a subclass of XmlLexer rather than RegexLexer may seem like a
423
+ # better idea, since Csound Document files look like XML files. However, Csound
424
+ # Documents can contain Csound comments (preceded by //, for example) before and
425
+ # after the root element, unescaped bitwise AND & and less than < operators, etc. In
426
+ # other words, while Csound Document files look like XML files, they may not actually
427
+ # be XML files.
428
+ tokens = {
429
+ 'root': [
430
+ (r'/[*][\s\S]*?[*]/', Comment.Multiline),
431
+ (r'(?:;|//).*$', Comment.Single),
432
+ (r'[^/;<]+|/(?!/)', Text),
433
+
434
+ (r'<\s*CsInstruments', Name.Tag, ('orchestra', 'tag')),
435
+ (r'<\s*CsScore', Name.Tag, ('score', 'tag')),
436
+ (r'<\s*[Hh][Tt][Mm][Ll]', Name.Tag, ('HTML', 'tag')),
437
+
438
+ (r'<\s*[\w:.-]+', Name.Tag, 'tag'),
439
+ (r'<\s*/\s*[\w:.-]+\s*>', Name.Tag)
440
+ ],
441
+
442
+ 'orchestra': [
443
+ (r'<\s*/\s*CsInstruments\s*>', Name.Tag, '#pop'),
444
+ (r'([\s\S])+?(?=<\s*/\s*CsInstruments\s*>)', using(CsoundOrchestraLexer))
445
+ ],
446
+ 'score': [
447
+ (r'<\s*/\s*CsScore\s*>', Name.Tag, '#pop'),
448
+ (r'([\s\S])+?(?=<\s*/\s*CsScore\s*>)', using(CsoundScoreLexer))
449
+ ],
450
+ 'HTML': [
451
+ (r'<\s*/\s*[Hh][Tt][Mm][Ll]\s*>', Name.Tag, '#pop'),
452
+ (r'([\s\S])+?(?=<\s*/\s*[Hh][Tt][Mm][Ll]\s*>)', using(HtmlLexer))
453
+ ],
454
+
455
+ 'tag': [
456
+ (r'\s+', Whitespace),
457
+ (r'[\w.:-]+\s*=', Name.Attribute, 'attr'),
458
+ (r'/?\s*>', Name.Tag, '#pop')
459
+ ],
460
+ 'attr': [
461
+ (r'\s+', Whitespace),
462
+ (r'".*?"', String, '#pop'),
463
+ (r"'.*?'", String, '#pop'),
464
+ (r'[^\s>]+', String, '#pop')
465
+ ]
466
+ }
venv/Lib/site-packages/pygments/lexers/css.py ADDED
@@ -0,0 +1,633 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.css
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for CSS and related stylesheet formats.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+ import copy
13
+
14
+ from pygments.lexer import ExtendedRegexLexer, RegexLexer, include, bygroups, \
15
+ default, words, inherit
16
+ from pygments.token import Comment, Operator, Keyword, Name, String, Number, \
17
+ Punctuation, Whitespace
18
+ from pygments.lexers._css_builtins import _css_properties
19
+
20
+ __all__ = ['CssLexer', 'SassLexer', 'ScssLexer', 'LessCssLexer']
21
+
22
+
23
+ # List of vendor prefixes obtained from:
24
+ # https://www.w3.org/TR/CSS21/syndata.html#vendor-keyword-history
25
+ _vendor_prefixes = (
26
+ '-ms-', 'mso-', '-moz-', '-o-', '-xv-', '-atsc-', '-wap-', '-khtml-',
27
+ '-webkit-', 'prince-', '-ah-', '-hp-', '-ro-', '-rim-', '-tc-',
28
+ )
29
+
30
+ # List of extended color keywords obtained from:
31
+ # https://drafts.csswg.org/css-color/#named-colors
32
+ _color_keywords = (
33
+ 'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige',
34
+ 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown',
35
+ 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral',
36
+ 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan',
37
+ 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki',
38
+ 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred',
39
+ 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray',
40
+ 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue',
41
+ 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite',
42
+ 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod',
43
+ 'gray', 'green', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred',
44
+ 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen',
45
+ 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',
46
+ 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey',
47
+ 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue',
48
+ 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow',
49
+ 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine',
50
+ 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',
51
+ 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise',
52
+ 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin',
53
+ 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange',
54
+ 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise',
55
+ 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum',
56
+ 'powderblue', 'purple', 'rebeccapurple', 'red', 'rosybrown', 'royalblue',
57
+ 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna',
58
+ 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow',
59
+ 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise',
60
+ 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen',
61
+ ) + ('transparent',)
62
+
63
+ # List of keyword values obtained from:
64
+ # http://cssvalues.com/
65
+ _keyword_values = (
66
+ 'absolute', 'alias', 'all', 'all-petite-caps', 'all-scroll',
67
+ 'all-small-caps', 'allow-end', 'alpha', 'alternate', 'alternate-reverse',
68
+ 'always', 'armenian', 'auto', 'avoid', 'avoid-column', 'avoid-page',
69
+ 'backwards', 'balance', 'baseline', 'below', 'blink', 'block', 'bold',
70
+ 'bolder', 'border-box', 'both', 'bottom', 'box-decoration', 'break-word',
71
+ 'capitalize', 'cell', 'center', 'circle', 'clip', 'clone', 'close-quote',
72
+ 'col-resize', 'collapse', 'color', 'color-burn', 'color-dodge', 'column',
73
+ 'column-reverse', 'compact', 'condensed', 'contain', 'container',
74
+ 'content-box', 'context-menu', 'copy', 'cover', 'crisp-edges', 'crosshair',
75
+ 'currentColor', 'cursive', 'darken', 'dashed', 'decimal',
76
+ 'decimal-leading-zero', 'default', 'descendants', 'difference', 'digits',
77
+ 'disc', 'distribute', 'dot', 'dotted', 'double', 'double-circle', 'e-resize',
78
+ 'each-line', 'ease', 'ease-in', 'ease-in-out', 'ease-out', 'edges',
79
+ 'ellipsis', 'end', 'ew-resize', 'exclusion', 'expanded', 'extra-condensed',
80
+ 'extra-expanded', 'fantasy', 'fill', 'fill-box', 'filled', 'first', 'fixed',
81
+ 'flat', 'flex', 'flex-end', 'flex-start', 'flip', 'force-end', 'forwards',
82
+ 'from-image', 'full-width', 'geometricPrecision', 'georgian', 'groove',
83
+ 'hanging', 'hard-light', 'help', 'hidden', 'hide', 'horizontal', 'hue',
84
+ 'icon', 'infinite', 'inherit', 'initial', 'ink', 'inline', 'inline-block',
85
+ 'inline-flex', 'inline-table', 'inset', 'inside', 'inter-word', 'invert',
86
+ 'isolate', 'italic', 'justify', 'large', 'larger', 'last', 'left',
87
+ 'lighten', 'lighter', 'line-through', 'linear', 'list-item', 'local',
88
+ 'loose', 'lower-alpha', 'lower-greek', 'lower-latin', 'lower-roman',
89
+ 'lowercase', 'ltr', 'luminance', 'luminosity', 'mandatory', 'manipulation',
90
+ 'manual', 'margin-box', 'match-parent', 'medium', 'mixed', 'monospace',
91
+ 'move', 'multiply', 'n-resize', 'ne-resize', 'nesw-resize',
92
+ 'no-close-quote', 'no-drop', 'no-open-quote', 'no-repeat', 'none', 'normal',
93
+ 'not-allowed', 'nowrap', 'ns-resize', 'nw-resize', 'nwse-resize', 'objects',
94
+ 'oblique', 'off', 'on', 'open', 'open-quote', 'optimizeLegibility',
95
+ 'optimizeSpeed', 'outset', 'outside', 'over', 'overlay', 'overline',
96
+ 'padding-box', 'page', 'pan-down', 'pan-left', 'pan-right', 'pan-up',
97
+ 'pan-x', 'pan-y', 'paused', 'petite-caps', 'pixelated', 'pointer',
98
+ 'preserve-3d', 'progress', 'proximity', 'relative', 'repeat',
99
+ 'repeat no-repeat', 'repeat-x', 'repeat-y', 'reverse', 'revert', 'ridge', 'right',
100
+ 'round', 'row', 'row-resize', 'row-reverse', 'rtl', 'ruby', 'ruby-base',
101
+ 'ruby-base-container', 'ruby-text', 'ruby-text-container', 'run-in',
102
+ 'running', 's-resize', 'sans-serif', 'saturation', 'scale-down', 'screen',
103
+ 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded', 'separate',
104
+ 'serif', 'sesame', 'show', 'sideways', 'sideways-left', 'sideways-right',
105
+ 'slice', 'small', 'small-caps', 'smaller', 'smooth', 'snap', 'soft-light',
106
+ 'solid', 'space', 'space-around', 'space-between', 'spaces', 'square',
107
+ 'start', 'static', 'step-end', 'step-start', 'sticky', 'stretch', 'strict',
108
+ 'stroke-box', 'style', 'sw-resize', 'table', 'table-caption', 'table-cell',
109
+ 'table-column', 'table-column-group', 'table-footer-group',
110
+ 'table-header-group', 'table-row', 'table-row-group', 'text', 'thick',
111
+ 'thin', 'titling-caps', 'to', 'top', 'triangle', 'ultra-condensed',
112
+ 'ultra-expanded', 'under', 'underline', 'unicase', 'unset', 'upper-alpha',
113
+ 'upper-latin', 'upper-roman', 'uppercase', 'upright', 'use-glyph-orientation',
114
+ 'vertical', 'vertical-text', 'view-box', 'visible', 'w-resize', 'wait',
115
+ 'wavy', 'weight', 'weight style', 'wrap', 'wrap-reverse', 'x-large',
116
+ 'x-small', 'xx-large', 'xx-small', 'zoom-in', 'zoom-out',
117
+ )
118
+
119
+ # List of other keyword values from other sources:
120
+ _other_keyword_values = (
121
+ 'above', 'aural', 'behind', 'bidi-override', 'center-left', 'center-right',
122
+ 'cjk-ideographic', 'continuous', 'crop', 'cross', 'embed', 'far-left',
123
+ 'far-right', 'fast', 'faster', 'hebrew', 'high', 'higher', 'hiragana',
124
+ 'hiragana-iroha', 'katakana', 'katakana-iroha', 'landscape', 'left-side',
125
+ 'leftwards', 'level', 'loud', 'low', 'lower', 'message-box', 'middle',
126
+ 'mix', 'narrower', 'once', 'portrait', 'right-side', 'rightwards', 'silent',
127
+ 'slow', 'slower', 'small-caption', 'soft', 'spell-out', 'status-bar',
128
+ 'super', 'text-bottom', 'text-top', 'wider', 'x-fast', 'x-high', 'x-loud',
129
+ 'x-low', 'x-soft', 'yes', 'pre', 'pre-wrap', 'pre-line',
130
+ )
131
+
132
+ # List of functional notation and function keyword values:
133
+ _functional_notation_keyword_values = (
134
+ 'attr', 'blackness', 'blend', 'blenda', 'blur', 'brightness', 'calc',
135
+ 'circle', 'color-mod', 'contrast', 'counter', 'cubic-bezier', 'device-cmyk',
136
+ 'drop-shadow', 'ellipse', 'gray', 'grayscale', 'hsl', 'hsla', 'hue',
137
+ 'hue-rotate', 'hwb', 'image', 'inset', 'invert', 'lightness',
138
+ 'linear-gradient', 'matrix', 'matrix3d', 'opacity', 'perspective',
139
+ 'polygon', 'radial-gradient', 'rect', 'repeating-linear-gradient',
140
+ 'repeating-radial-gradient', 'rgb', 'rgba', 'rotate', 'rotate3d', 'rotateX',
141
+ 'rotateY', 'rotateZ', 'saturate', 'saturation', 'scale', 'scale3d',
142
+ 'scaleX', 'scaleY', 'scaleZ', 'sepia', 'shade', 'skewX', 'skewY', 'steps',
143
+ 'tint', 'toggle', 'translate', 'translate3d', 'translateX', 'translateY',
144
+ 'translateZ', 'whiteness',
145
+ )
146
+ # Note! Handle url(...) separately.
147
+
148
+ # List of units obtained from:
149
+ # https://www.w3.org/TR/css3-values/
150
+ _angle_units = (
151
+ 'deg', 'grad', 'rad', 'turn',
152
+ )
153
+ _frequency_units = (
154
+ 'Hz', 'kHz',
155
+ )
156
+ _length_units = (
157
+ 'em', 'ex', 'ch', 'rem',
158
+ 'vh', 'vw', 'vmin', 'vmax',
159
+ 'px', 'mm', 'cm', 'in', 'pt', 'pc', 'q',
160
+ )
161
+ _resolution_units = (
162
+ 'dpi', 'dpcm', 'dppx',
163
+ )
164
+ _time_units = (
165
+ 's', 'ms',
166
+ )
167
+ _all_units = _angle_units + _frequency_units + _length_units + \
168
+ _resolution_units + _time_units
169
+
170
+
171
+ class CssLexer(RegexLexer):
172
+ """
173
+ For CSS (Cascading Style Sheets).
174
+ """
175
+
176
+ name = 'CSS'
177
+ url = 'https://www.w3.org/TR/CSS/#css'
178
+ aliases = ['css']
179
+ filenames = ['*.css']
180
+ mimetypes = ['text/css']
181
+ version_added = ''
182
+
183
+ tokens = {
184
+ 'root': [
185
+ include('basics'),
186
+ ],
187
+ 'basics': [
188
+ (r'\s+', Whitespace),
189
+ (r'/\*[\s\S]*?\*/', Comment),
190
+ (r'\{', Punctuation, 'content'),
191
+ (r'(\:{1,2})([\w-]+)', bygroups(Punctuation, Name.Decorator)),
192
+ (r'(\.)([\w-]+)', bygroups(Punctuation, Name.Class)),
193
+ (r'(\#)([\w-]+)', bygroups(Punctuation, Name.Namespace)),
194
+ (r'(@)([\w-]+)', bygroups(Punctuation, Keyword), 'atrule'),
195
+ (r'[\w-]+', Name.Tag),
196
+ (r'[~^*!%&$\[\]()<>|+=@:;,./?-]', Operator),
197
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
198
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
199
+ ],
200
+ 'atrule': [
201
+ (r'\{', Punctuation, 'atcontent'),
202
+ (r';', Punctuation, '#pop'),
203
+ include('basics'),
204
+ ],
205
+ 'atcontent': [
206
+ include('basics'),
207
+ (r'\}', Punctuation, '#pop:2'),
208
+ ],
209
+ 'content': [
210
+ (r'\s+', Whitespace),
211
+ (r'\}', Punctuation, '#pop'),
212
+ (r';', Punctuation),
213
+ (r'^@.*?$', Comment.Preproc),
214
+
215
+ (words(_vendor_prefixes,), Keyword.Pseudo),
216
+ (r'('+r'|'.join(_css_properties)+r')(\s*)(\:)',
217
+ bygroups(Keyword, Whitespace, Punctuation), 'value-start'),
218
+ (r'([-]+[a-zA-Z_][\w-]*)(\s*)(\:)', bygroups(Name.Variable, Whitespace, Punctuation),
219
+ 'value-start'),
220
+ (r'([a-zA-Z_][\w-]*)(\s*)(\:)', bygroups(Name, Whitespace, Punctuation),
221
+ 'value-start'),
222
+
223
+ (r'/\*[\s\S]*?\*/', Comment),
224
+ ],
225
+ 'value-start': [
226
+ (r'\s+', Whitespace),
227
+ (words(_vendor_prefixes,), Name.Builtin.Pseudo),
228
+ include('urls'),
229
+ (r'('+r'|'.join(_functional_notation_keyword_values)+r')(\()',
230
+ bygroups(Name.Builtin, Punctuation), 'function-start'),
231
+ (r'([a-zA-Z_][\w-]+)(\()',
232
+ bygroups(Name.Function, Punctuation), 'function-start'),
233
+ (words(_keyword_values, suffix=r'\b'), Keyword.Constant),
234
+ (words(_other_keyword_values, suffix=r'\b'), Keyword.Constant),
235
+ (words(_color_keywords, suffix=r'\b'), Keyword.Constant),
236
+ # for transition-property etc.
237
+ (words(_css_properties, suffix=r'\b'), Keyword),
238
+ (r'\!important', Comment.Preproc),
239
+ (r'/\*[\s\S]*?\*/', Comment),
240
+
241
+ include('numeric-values'),
242
+
243
+ (r'[~^*!%&<>|+=@:./?-]+', Operator),
244
+ (r'[\[\](),]+', Punctuation),
245
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
246
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
247
+ (r'[a-zA-Z_][\w-]*', Name),
248
+ (r';', Punctuation, '#pop'),
249
+ (r'\}', Punctuation, '#pop:2'),
250
+ ],
251
+ 'function-start': [
252
+ (r'\s+', Whitespace),
253
+ (r'[-]+([A-Za-z][\w+]*[-]*)+', Name.Variable),
254
+ include('urls'),
255
+ (words(_vendor_prefixes,), Keyword.Pseudo),
256
+ (words(_keyword_values, suffix=r'\b'), Keyword.Constant),
257
+ (words(_other_keyword_values, suffix=r'\b'), Keyword.Constant),
258
+ (words(_color_keywords, suffix=r'\b'), Keyword.Constant),
259
+
260
+ # function-start may be entered recursively
261
+ (r'(' + r'|'.join(_functional_notation_keyword_values) + r')(\()',
262
+ bygroups(Name.Builtin, Punctuation), 'function-start'),
263
+ (r'([a-zA-Z_][\w-]+)(\()',
264
+ bygroups(Name.Function, Punctuation), 'function-start'),
265
+
266
+ (r'/\*[\s\S]*?\*/', Comment),
267
+ include('numeric-values'),
268
+ (r'[*+/-]', Operator),
269
+ (r',', Punctuation),
270
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
271
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
272
+ (r'[a-zA-Z_-]\w*', Name),
273
+ (r'\)', Punctuation, '#pop'),
274
+ ],
275
+ 'urls': [
276
+ (r'(url)(\()(".*?")(\))', bygroups(Name.Builtin, Punctuation,
277
+ String.Double, Punctuation)),
278
+ (r"(url)(\()('.*?')(\))", bygroups(Name.Builtin, Punctuation,
279
+ String.Single, Punctuation)),
280
+ (r'(url)(\()(.*?)(\))', bygroups(Name.Builtin, Punctuation,
281
+ String.Other, Punctuation)),
282
+ ],
283
+ 'numeric-values': [
284
+ (r'\#[a-zA-Z0-9]{1,6}', Number.Hex),
285
+ (r'[+\-]?[0-9]*[.][0-9]+', Number.Float, 'numeric-end'),
286
+ (r'[+\-]?[0-9]+', Number.Integer, 'numeric-end'),
287
+ ],
288
+ 'numeric-end': [
289
+ (words(_all_units, suffix=r'\b'), Keyword.Type),
290
+ (r'%', Keyword.Type),
291
+ default('#pop'),
292
+ ],
293
+ }
294
+
295
+
296
+ common_sass_tokens = {
297
+ 'value': [
298
+ (r'[ \t]+', Whitespace),
299
+ (r'[!$][\w-]+', Name.Variable),
300
+ (r'url\(', String.Other, 'string-url'),
301
+ (r'[a-z_-][\w-]*(?=\()', Name.Function),
302
+ (words(_css_properties + (
303
+ 'above', 'absolute', 'always', 'armenian', 'aural', 'auto', 'avoid', 'baseline',
304
+ 'behind', 'below', 'bidi-override', 'blink', 'block', 'bold', 'bolder', 'both',
305
+ 'capitalize', 'center-left', 'center-right', 'center', 'circle',
306
+ 'cjk-ideographic', 'close-quote', 'collapse', 'condensed', 'continuous',
307
+ 'crosshair', 'cross', 'cursive', 'dashed', 'decimal-leading-zero',
308
+ 'decimal', 'default', 'digits', 'disc', 'dotted', 'double', 'e-resize', 'embed',
309
+ 'extra-condensed', 'extra-expanded', 'expanded', 'fantasy', 'far-left',
310
+ 'far-right', 'faster', 'fast', 'fixed', 'georgian', 'groove', 'hebrew', 'help',
311
+ 'hidden', 'hide', 'higher', 'high', 'hiragana-iroha', 'hiragana', 'icon',
312
+ 'inherit', 'inline-table', 'inline', 'inset', 'inside', 'invert', 'italic',
313
+ 'justify', 'katakana-iroha', 'katakana', 'landscape', 'larger', 'large',
314
+ 'left-side', 'leftwards', 'level', 'lighter', 'line-through', 'list-item',
315
+ 'loud', 'lower-alpha', 'lower-greek', 'lower-roman', 'lowercase', 'ltr',
316
+ 'lower', 'low', 'medium', 'message-box', 'middle', 'mix', 'monospace',
317
+ 'n-resize', 'narrower', 'ne-resize', 'no-close-quote', 'no-open-quote',
318
+ 'no-repeat', 'none', 'normal', 'nowrap', 'nw-resize', 'oblique', 'once',
319
+ 'open-quote', 'outset', 'outside', 'overline', 'pointer', 'portrait', 'px',
320
+ 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb', 'ridge', 'right-side',
321
+ 'rightwards', 's-resize', 'sans-serif', 'scroll', 'se-resize',
322
+ 'semi-condensed', 'semi-expanded', 'separate', 'serif', 'show', 'silent',
323
+ 'slow', 'slower', 'small-caps', 'small-caption', 'smaller', 'soft', 'solid',
324
+ 'spell-out', 'square', 'static', 'status-bar', 'super', 'sw-resize',
325
+ 'table-caption', 'table-cell', 'table-column', 'table-column-group',
326
+ 'table-footer-group', 'table-header-group', 'table-row',
327
+ 'table-row-group', 'text', 'text-bottom', 'text-top', 'thick', 'thin',
328
+ 'transparent', 'ultra-condensed', 'ultra-expanded', 'underline',
329
+ 'upper-alpha', 'upper-latin', 'upper-roman', 'uppercase', 'url',
330
+ 'visible', 'w-resize', 'wait', 'wider', 'x-fast', 'x-high', 'x-large', 'x-loud',
331
+ 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small', 'yes'), suffix=r'\b'),
332
+ Name.Constant),
333
+ (words(_color_keywords, suffix=r'\b'), Name.Entity),
334
+ (words((
335
+ 'black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green',
336
+ 'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua'), suffix=r'\b'),
337
+ Name.Builtin),
338
+ (r'\!(important|default)', Name.Exception),
339
+ (r'(true|false)', Name.Pseudo),
340
+ (r'(and|or|not)', Operator.Word),
341
+ (r'/\*', Comment.Multiline, 'inline-comment'),
342
+ (r'//[^\n]*', Comment.Single),
343
+ (r'\#[a-z0-9]{1,6}', Number.Hex),
344
+ (r'(-?\d+)(\%|[a-z]+)?', bygroups(Number.Integer, Keyword.Type)),
345
+ (r'(-?\d*\.\d+)(\%|[a-z]+)?', bygroups(Number.Float, Keyword.Type)),
346
+ (r'#\{', String.Interpol, 'interpolation'),
347
+ (r'[~^*!&%<>|+=@:,./?-]+', Operator),
348
+ (r'[\[\]()]+', Punctuation),
349
+ (r'"', String.Double, 'string-double'),
350
+ (r"'", String.Single, 'string-single'),
351
+ (r'[a-z_-][\w-]*', Name),
352
+ ],
353
+
354
+ 'interpolation': [
355
+ (r'\}', String.Interpol, '#pop'),
356
+ include('value'),
357
+ ],
358
+
359
+ 'selector': [
360
+ (r'[ \t]+', Whitespace),
361
+ (r'\:', Name.Decorator, 'pseudo-class'),
362
+ (r'\.', Name.Class, 'class'),
363
+ (r'\#', Name.Namespace, 'id'),
364
+ (r'[\w-]+', Name.Tag),
365
+ (r'\$[\w-]+', Name.Variable),
366
+ (r'#\{', String.Interpol, 'interpolation'),
367
+ (r'&', Keyword),
368
+ (r'[~^*!&\[\]()<>|+=@:;,./?-]', Operator),
369
+ (r'"', String.Double, 'string-double'),
370
+ (r"'", String.Single, 'string-single'),
371
+ ],
372
+
373
+ 'string-double': [
374
+ (r'(\\.|#(?=[^\n{])|[^\n"#])+', String.Double),
375
+ (r'#\{', String.Interpol, 'interpolation'),
376
+ (r'"', String.Double, '#pop'),
377
+ ],
378
+
379
+ 'string-single': [
380
+ (r"(\\.|#(?=[^\n{])|[^\n'#])+", String.Single),
381
+ (r'#\{', String.Interpol, 'interpolation'),
382
+ (r"'", String.Single, '#pop'),
383
+ ],
384
+
385
+ 'string-url': [
386
+ (r'(\\#|#(?=[^\n{])|[^\n#)])+', String.Other),
387
+ (r'#\{', String.Interpol, 'interpolation'),
388
+ (r'\)', String.Other, '#pop'),
389
+ ],
390
+
391
+ 'pseudo-class': [
392
+ (r'[\w-]+', Name.Decorator),
393
+ (r'#\{', String.Interpol, 'interpolation'),
394
+ default('#pop'),
395
+ ],
396
+
397
+ 'class': [
398
+ (r'[\w-]+', Name.Class),
399
+ (r'#\{', String.Interpol, 'interpolation'),
400
+ default('#pop'),
401
+ ],
402
+
403
+ 'id': [
404
+ (r'[\w-]+', Name.Namespace),
405
+ (r'#\{', String.Interpol, 'interpolation'),
406
+ default('#pop'),
407
+ ],
408
+
409
+ 'for': [
410
+ (r'(from|to|through)', Operator.Word),
411
+ include('value'),
412
+ ],
413
+ }
414
+
415
+
416
+ def _indentation(lexer, match, ctx):
417
+ indentation = match.group(0)
418
+ yield match.start(), Whitespace, indentation
419
+ ctx.last_indentation = indentation
420
+ ctx.pos = match.end()
421
+
422
+ if hasattr(ctx, 'block_state') and ctx.block_state and \
423
+ indentation.startswith(ctx.block_indentation) and \
424
+ indentation != ctx.block_indentation:
425
+ ctx.stack.append(ctx.block_state)
426
+ else:
427
+ ctx.block_state = None
428
+ ctx.block_indentation = None
429
+ ctx.stack.append('content')
430
+
431
+
432
+ def _starts_block(token, state):
433
+ def callback(lexer, match, ctx):
434
+ yield match.start(), token, match.group(0)
435
+
436
+ if hasattr(ctx, 'last_indentation'):
437
+ ctx.block_indentation = ctx.last_indentation
438
+ else:
439
+ ctx.block_indentation = ''
440
+
441
+ ctx.block_state = state
442
+ ctx.pos = match.end()
443
+
444
+ return callback
445
+
446
+
447
+ class SassLexer(ExtendedRegexLexer):
448
+ """
449
+ For Sass stylesheets.
450
+ """
451
+
452
+ name = 'Sass'
453
+ url = 'https://sass-lang.com/'
454
+ aliases = ['sass']
455
+ filenames = ['*.sass']
456
+ mimetypes = ['text/x-sass']
457
+ version_added = '1.3'
458
+
459
+ flags = re.IGNORECASE | re.MULTILINE
460
+
461
+ tokens = {
462
+ 'root': [
463
+ (r'[ \t]*\n', Whitespace),
464
+ (r'[ \t]*', _indentation),
465
+ ],
466
+
467
+ 'content': [
468
+ (r'//[^\n]*', _starts_block(Comment.Single, 'single-comment'),
469
+ 'root'),
470
+ (r'/\*[^\n]*', _starts_block(Comment.Multiline, 'multi-comment'),
471
+ 'root'),
472
+ (r'@import', Keyword, 'import'),
473
+ (r'@for', Keyword, 'for'),
474
+ (r'@(debug|warn|if|while)', Keyword, 'value'),
475
+ (r'(@mixin)( )([\w-]+)', bygroups(Keyword, Whitespace, Name.Function), 'value'),
476
+ (r'(@include)( )([\w-]+)', bygroups(Keyword, Whitespace, Name.Decorator), 'value'),
477
+ (r'@extend', Keyword, 'selector'),
478
+ (r'@[\w-]+', Keyword, 'selector'),
479
+ (r'=[\w-]+', Name.Function, 'value'),
480
+ (r'\+[\w-]+', Name.Decorator, 'value'),
481
+ (r'([!$][\w-]\w*)([ \t]*(?:(?:\|\|)?=|:))',
482
+ bygroups(Name.Variable, Operator), 'value'),
483
+ (r':', Name.Attribute, 'old-style-attr'),
484
+ (r'(?=.+?[=:]([^a-z]|$))', Name.Attribute, 'new-style-attr'),
485
+ default('selector'),
486
+ ],
487
+
488
+ 'single-comment': [
489
+ (r'.+', Comment.Single),
490
+ (r'\n', Whitespace, 'root'),
491
+ ],
492
+
493
+ 'multi-comment': [
494
+ (r'.+', Comment.Multiline),
495
+ (r'\n', Whitespace, 'root'),
496
+ ],
497
+
498
+ 'import': [
499
+ (r'[ \t]+', Whitespace),
500
+ (r'\S+', String),
501
+ (r'\n', Whitespace, 'root'),
502
+ ],
503
+
504
+ 'old-style-attr': [
505
+ (r'[^\s:="\[]+', Name.Attribute),
506
+ (r'#\{', String.Interpol, 'interpolation'),
507
+ (r'([ \t]*)(=)', bygroups(Whitespace, Operator), 'value'),
508
+ default('value'),
509
+ ],
510
+
511
+ 'new-style-attr': [
512
+ (r'[^\s:="\[]+', Name.Attribute),
513
+ (r'#\{', String.Interpol, 'interpolation'),
514
+ (r'([ \t]*)([=:])', bygroups(Whitespace, Operator), 'value'),
515
+ ],
516
+
517
+ 'inline-comment': [
518
+ (r"(\\#|#(?=[^\n{])|\*(?=[^\n/])|[^\n#*])+", Comment.Multiline),
519
+ (r'#\{', String.Interpol, 'interpolation'),
520
+ (r"\*/", Comment, '#pop'),
521
+ ],
522
+ }
523
+ for group, common in common_sass_tokens.items():
524
+ tokens[group] = copy.copy(common)
525
+ tokens['value'].append((r'\n', Whitespace, 'root'))
526
+ tokens['selector'].append((r'\n', Whitespace, 'root'))
527
+
528
+
529
+ class ScssLexer(RegexLexer):
530
+ """
531
+ For SCSS stylesheets.
532
+ """
533
+
534
+ name = 'SCSS'
535
+ url = 'https://sass-lang.com/'
536
+ aliases = ['scss']
537
+ filenames = ['*.scss']
538
+ mimetypes = ['text/x-scss']
539
+ version_added = ''
540
+
541
+ flags = re.IGNORECASE | re.DOTALL
542
+ tokens = {
543
+ 'root': [
544
+ (r'\s+', Whitespace),
545
+ (r'//.*?\n', Comment.Single),
546
+ (r'/\*.*?\*/', Comment.Multiline),
547
+ (r'@import', Keyword, 'value'),
548
+ (r'@for', Keyword, 'for'),
549
+ (r'@(debug|warn|if|while)', Keyword, 'value'),
550
+ (r'(@mixin)( [\w-]+)', bygroups(Keyword, Name.Function), 'value'),
551
+ (r'(@include)( [\w-]+)', bygroups(Keyword, Name.Decorator), 'value'),
552
+ (r'@extend', Keyword, 'selector'),
553
+ (r'(@media)(\s+)', bygroups(Keyword, Whitespace), 'value'),
554
+ (r'@[\w-]+', Keyword, 'selector'),
555
+ (r'(\$[\w-]*\w)([ \t]*:)', bygroups(Name.Variable, Operator), 'value'),
556
+ # TODO: broken, and prone to infinite loops.
557
+ # (r'(?=[^;{}][;}])', Name.Attribute, 'attr'),
558
+ # (r'(?=[^;{}:]+:[^a-z])', Name.Attribute, 'attr'),
559
+ default('selector'),
560
+ ],
561
+
562
+ 'attr': [
563
+ (r'[^\s:="\[]+', Name.Attribute),
564
+ (r'#\{', String.Interpol, 'interpolation'),
565
+ (r'[ \t]*:', Operator, 'value'),
566
+ default('#pop'),
567
+ ],
568
+
569
+ 'inline-comment': [
570
+ (r"(\\#|#(?=[^{])|\*(?=[^/])|[^#*])+", Comment.Multiline),
571
+ (r'#\{', String.Interpol, 'interpolation'),
572
+ (r"\*/", Comment, '#pop'),
573
+ ],
574
+ }
575
+ for group, common in common_sass_tokens.items():
576
+ tokens[group] = copy.copy(common)
577
+ tokens['value'].extend([(r'\n', Whitespace), (r'[;{}]', Punctuation, '#pop')])
578
+ tokens['selector'].extend([(r'\n', Whitespace), (r'[;{}]', Punctuation, '#pop')])
579
+
580
+
581
+ class LessCssLexer(CssLexer):
582
+ """
583
+ For LESS styleshets.
584
+ """
585
+
586
+ name = 'LessCss'
587
+ url = 'http://lesscss.org/'
588
+ aliases = ['less']
589
+ filenames = ['*.less']
590
+ mimetypes = ['text/x-less-css']
591
+ version_added = '2.1'
592
+
593
+ tokens = {
594
+ # FIXME: It's not currently possible to simply do the following,
595
+ # as `include('basics')` doesn't take overrides into account:
596
+ # 'basics': [
597
+ # (r'//.*\n', Comment.Single),
598
+ # (r'/\*(?:.|\n)*?\*/', Comment.Multiline),
599
+ # inherit,
600
+ # ],
601
+ 'root': [
602
+ (r'@\w+', Name.Variable),
603
+ (r'//.*\n', Comment.Single),
604
+ (r'/\*[\s\S]*?\*/', Comment.Multiline),
605
+ inherit,
606
+ ],
607
+ 'atcontent': [
608
+ (r'//.*\n', Comment.Single),
609
+ (r'/\*[\s\S]*?\*/', Comment.Multiline),
610
+ inherit,
611
+ ],
612
+ 'atrule': [
613
+ (r'//.*\n', Comment.Single),
614
+ (r'/\*[\s\S]*?\*/', Comment.Multiline),
615
+ inherit,
616
+ ],
617
+ 'content': [
618
+ (r'\{', Punctuation, '#push'),
619
+ (r'//.*\n', Comment.Single),
620
+ (r'/\*[\s\S]*?\*/', Comment.Multiline),
621
+ inherit,
622
+ ],
623
+ 'value-start': [
624
+ (r'//.*\n', Comment.Single),
625
+ (r'/\*[\s\S]*?\*/', Comment.Multiline),
626
+ inherit,
627
+ ],
628
+ 'function-start': [
629
+ (r'//.*\n', Comment.Single),
630
+ (r'/\*[\s\S]*?\*/', Comment.Multiline),
631
+ inherit,
632
+ ],
633
+ }
venv/Lib/site-packages/pygments/lexers/d.py ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.d
3
+ ~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for D languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, include, words, bygroups
12
+ from pygments.token import Comment, Keyword, Name, String, Number, \
13
+ Punctuation, Whitespace
14
+
15
+ __all__ = ['DLexer', 'CrocLexer', 'MiniDLexer']
16
+
17
+
18
+ class DLexer(RegexLexer):
19
+ """
20
+ For D source.
21
+ """
22
+ name = 'D'
23
+ url = 'https://dlang.org/'
24
+ filenames = ['*.d', '*.di']
25
+ aliases = ['d']
26
+ mimetypes = ['text/x-dsrc']
27
+ version_added = '1.2'
28
+
29
+ tokens = {
30
+ 'root': [
31
+ (r'\n', Whitespace),
32
+ (r'\s+', Whitespace),
33
+ # (r'\\\n', Text), # line continuations
34
+ # Comments
35
+ (r'(//.*?)(\n)', bygroups(Comment.Single, Whitespace)),
36
+ (r'/(\\\n)?[*][\s\S]*?[*](\\\n)?/', Comment.Multiline),
37
+ (r'/\+', Comment.Multiline, 'nested_comment'),
38
+ # Keywords
39
+ (words((
40
+ 'abstract', 'alias', 'align', 'asm', 'assert', 'auto', 'body',
41
+ 'break', 'case', 'cast', 'catch', 'class', 'const', 'continue',
42
+ 'debug', 'default', 'delegate', 'delete', 'deprecated', 'do', 'else',
43
+ 'enum', 'export', 'extern', 'finally', 'final', 'foreach_reverse',
44
+ 'foreach', 'for', 'function', 'goto', 'if', 'immutable', 'import',
45
+ 'interface', 'invariant', 'inout', 'in', 'is', 'lazy', 'mixin',
46
+ 'module', 'new', 'nothrow', 'out', 'override', 'package', 'pragma',
47
+ 'private', 'protected', 'public', 'pure', 'ref', 'return', 'scope',
48
+ 'shared', 'static', 'struct', 'super', 'switch', 'synchronized',
49
+ 'template', 'this', 'throw', 'try', 'typeid', 'typeof',
50
+ 'union', 'unittest', 'version', 'volatile', 'while', 'with',
51
+ '__gshared', '__traits', '__vector', '__parameters'),
52
+ suffix=r'\b'),
53
+ Keyword),
54
+ (words((
55
+ # Removed in 2.072
56
+ 'typedef', ),
57
+ suffix=r'\b'),
58
+ Keyword.Removed),
59
+ (words((
60
+ 'bool', 'byte', 'cdouble', 'cent', 'cfloat', 'char', 'creal',
61
+ 'dchar', 'double', 'float', 'idouble', 'ifloat', 'int', 'ireal',
62
+ 'long', 'real', 'short', 'ubyte', 'ucent', 'uint', 'ulong',
63
+ 'ushort', 'void', 'wchar'), suffix=r'\b'),
64
+ Keyword.Type),
65
+ (r'(false|true|null)\b', Keyword.Constant),
66
+ (words((
67
+ '__FILE__', '__FILE_FULL_PATH__', '__MODULE__', '__LINE__', '__FUNCTION__',
68
+ '__PRETTY_FUNCTION__', '__DATE__', '__EOF__', '__TIME__', '__TIMESTAMP__',
69
+ '__VENDOR__', '__VERSION__'), suffix=r'\b'),
70
+ Keyword.Pseudo),
71
+ (r'macro\b', Keyword.Reserved),
72
+ (r'(string|wstring|dstring|size_t|ptrdiff_t)\b', Name.Builtin),
73
+ # FloatLiteral
74
+ # -- HexFloat
75
+ (r'0[xX]([0-9a-fA-F_]*\.[0-9a-fA-F_]+|[0-9a-fA-F_]+)'
76
+ r'[pP][+\-]?[0-9_]+[fFL]?[i]?', Number.Float),
77
+ # -- DecimalFloat
78
+ (r'[0-9_]+(\.[0-9_]+[eE][+\-]?[0-9_]+|'
79
+ r'\.[0-9_]*|[eE][+\-]?[0-9_]+)[fFL]?[i]?', Number.Float),
80
+ (r'\.(0|[1-9][0-9_]*)([eE][+\-]?[0-9_]+)?[fFL]?[i]?', Number.Float),
81
+ # IntegerLiteral
82
+ # -- Binary
83
+ (r'0[Bb][01_]+', Number.Bin),
84
+ # -- Octal
85
+ (r'0[0-7_]+', Number.Oct),
86
+ # -- Hexadecimal
87
+ (r'0[xX][0-9a-fA-F_]+', Number.Hex),
88
+ # -- Decimal
89
+ (r'(0|[1-9][0-9_]*)([LUu]|Lu|LU|uL|UL)?', Number.Integer),
90
+ # CharacterLiteral
91
+ (r"""'(\\['"?\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}"""
92
+ r"""|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|\\&\w+;|.)'""",
93
+ String.Char),
94
+ # StringLiteral
95
+ # -- WysiwygString
96
+ (r'r"[^"]*"[cwd]?', String),
97
+ # -- AlternateWysiwygString
98
+ (r'`[^`]*`[cwd]?', String),
99
+ # -- DoubleQuotedString
100
+ (r'"(\\\\|\\[^\\]|[^"\\])*"[cwd]?', String),
101
+ # -- EscapeSequence
102
+ (r"\\(['\"?\\abfnrtv]|x[0-9a-fA-F]{2}|[0-7]{1,3}"
103
+ r"|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|&\w+;)",
104
+ String),
105
+ # -- HexString
106
+ (r'x"[0-9a-fA-F_\s]*"[cwd]?', String),
107
+ # -- DelimitedString
108
+ (r'q"\[', String, 'delimited_bracket'),
109
+ (r'q"\(', String, 'delimited_parenthesis'),
110
+ (r'q"<', String, 'delimited_angle'),
111
+ (r'q"\{', String, 'delimited_curly'),
112
+ (r'q"([^\W\d]\w*)\n.*?\n\1"', String),
113
+ (r'q"(.).*?\1"', String),
114
+ # -- TokenString
115
+ (r'q\{', String, 'token_string'),
116
+ # Attributes
117
+ (r'@([^\W\d]\w*)?', Name.Decorator),
118
+ # Tokens
119
+ (r'(~=|\^=|%=|\*=|==|!>=|!<=|!<>=|!<>|!<|!>|!=|>>>=|>>>|>>=|>>|>='
120
+ r'|<>=|<>|<<=|<<|<=|\+\+|\+=|--|-=|\|\||\|=|&&|&=|\.\.\.|\.\.|/=)'
121
+ r'|[/.&|\-+<>!()\[\]{}?,;:$=*%^~]', Punctuation),
122
+ # Identifier
123
+ (r'[^\W\d]\w*', Name),
124
+ # Line
125
+ (r'(#line)(\s)(.*)(\n)', bygroups(Comment.Special, Whitespace,
126
+ Comment.Special, Whitespace)),
127
+ ],
128
+ 'nested_comment': [
129
+ (r'[^+/]+', Comment.Multiline),
130
+ (r'/\+', Comment.Multiline, '#push'),
131
+ (r'\+/', Comment.Multiline, '#pop'),
132
+ (r'[+/]', Comment.Multiline),
133
+ ],
134
+ 'token_string': [
135
+ (r'\{', Punctuation, 'token_string_nest'),
136
+ (r'\}', String, '#pop'),
137
+ include('root'),
138
+ ],
139
+ 'token_string_nest': [
140
+ (r'\{', Punctuation, '#push'),
141
+ (r'\}', Punctuation, '#pop'),
142
+ include('root'),
143
+ ],
144
+ 'delimited_bracket': [
145
+ (r'[^\[\]]+', String),
146
+ (r'\[', String, 'delimited_inside_bracket'),
147
+ (r'\]"', String, '#pop'),
148
+ ],
149
+ 'delimited_inside_bracket': [
150
+ (r'[^\[\]]+', String),
151
+ (r'\[', String, '#push'),
152
+ (r'\]', String, '#pop'),
153
+ ],
154
+ 'delimited_parenthesis': [
155
+ (r'[^()]+', String),
156
+ (r'\(', String, 'delimited_inside_parenthesis'),
157
+ (r'\)"', String, '#pop'),
158
+ ],
159
+ 'delimited_inside_parenthesis': [
160
+ (r'[^()]+', String),
161
+ (r'\(', String, '#push'),
162
+ (r'\)', String, '#pop'),
163
+ ],
164
+ 'delimited_angle': [
165
+ (r'[^<>]+', String),
166
+ (r'<', String, 'delimited_inside_angle'),
167
+ (r'>"', String, '#pop'),
168
+ ],
169
+ 'delimited_inside_angle': [
170
+ (r'[^<>]+', String),
171
+ (r'<', String, '#push'),
172
+ (r'>', String, '#pop'),
173
+ ],
174
+ 'delimited_curly': [
175
+ (r'[^{}]+', String),
176
+ (r'\{', String, 'delimited_inside_curly'),
177
+ (r'\}"', String, '#pop'),
178
+ ],
179
+ 'delimited_inside_curly': [
180
+ (r'[^{}]+', String),
181
+ (r'\{', String, '#push'),
182
+ (r'\}', String, '#pop'),
183
+ ],
184
+ }
185
+
186
+
187
+ class CrocLexer(RegexLexer):
188
+ """
189
+ For Croc source.
190
+ """
191
+ name = 'Croc'
192
+ url = 'http://jfbillingsley.com/croc'
193
+ filenames = ['*.croc']
194
+ aliases = ['croc']
195
+ mimetypes = ['text/x-crocsrc']
196
+ version_added = ''
197
+
198
+ tokens = {
199
+ 'root': [
200
+ (r'\n', Whitespace),
201
+ (r'\s+', Whitespace),
202
+ # Comments
203
+ (r'(//.*?)(\n)', bygroups(Comment.Single, Whitespace)),
204
+ (r'/\*', Comment.Multiline, 'nestedcomment'),
205
+ # Keywords
206
+ (words((
207
+ 'as', 'assert', 'break', 'case', 'catch', 'class', 'continue',
208
+ 'default', 'do', 'else', 'finally', 'for', 'foreach', 'function',
209
+ 'global', 'namespace', 'if', 'import', 'in', 'is', 'local',
210
+ 'module', 'return', 'scope', 'super', 'switch', 'this', 'throw',
211
+ 'try', 'vararg', 'while', 'with', 'yield'), suffix=r'\b'),
212
+ Keyword),
213
+ (r'(false|true|null)\b', Keyword.Constant),
214
+ # FloatLiteral
215
+ (r'([0-9][0-9_]*)(?=[.eE])(\.[0-9][0-9_]*)?([eE][+\-]?[0-9_]+)?',
216
+ Number.Float),
217
+ # IntegerLiteral
218
+ # -- Binary
219
+ (r'0[bB][01][01_]*', Number.Bin),
220
+ # -- Hexadecimal
221
+ (r'0[xX][0-9a-fA-F][0-9a-fA-F_]*', Number.Hex),
222
+ # -- Decimal
223
+ (r'([0-9][0-9_]*)(?![.eE])', Number.Integer),
224
+ # CharacterLiteral
225
+ (r"""'(\\['"\\nrt]|\\x[0-9a-fA-F]{2}|\\[0-9]{1,3}"""
226
+ r"""|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|.)'""",
227
+ String.Char),
228
+ # StringLiteral
229
+ # -- WysiwygString
230
+ (r'@"(""|[^"])*"', String),
231
+ (r'@`(``|[^`])*`', String),
232
+ (r"@'(''|[^'])*'", String),
233
+ # -- DoubleQuotedString
234
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
235
+ # Tokens
236
+ (r'(~=|\^=|%=|\*=|==|!=|>>>=|>>>|>>=|>>|>=|<=>|\?=|-\>'
237
+ r'|<<=|<<|<=|\+\+|\+=|--|-=|\|\||\|=|&&|&=|\.\.|/=)'
238
+ r'|[-/.&$@|\+<>!()\[\]{}?,;:=*%^~#\\]', Punctuation),
239
+ # Identifier
240
+ (r'[a-zA-Z_]\w*', Name),
241
+ ],
242
+ 'nestedcomment': [
243
+ (r'[^*/]+', Comment.Multiline),
244
+ (r'/\*', Comment.Multiline, '#push'),
245
+ (r'\*/', Comment.Multiline, '#pop'),
246
+ (r'[*/]', Comment.Multiline),
247
+ ],
248
+ }
249
+
250
+
251
+ class MiniDLexer(CrocLexer):
252
+ """
253
+ For MiniD source. MiniD is now known as Croc.
254
+ """
255
+ name = 'MiniD'
256
+ filenames = [] # don't lex .md as MiniD, reserve for Markdown
257
+ aliases = ['minid']
258
+ mimetypes = ['text/x-minidsrc']
259
+ version_added = ''
venv/Lib/site-packages/pygments/lexers/dalvik.py ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.dalvik
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Pygments lexers for Dalvik VM-related languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, include, bygroups
14
+ from pygments.token import Keyword, Text, Comment, Name, String, Number, \
15
+ Punctuation, Whitespace
16
+
17
+ __all__ = ['SmaliLexer']
18
+
19
+
20
+ class SmaliLexer(RegexLexer):
21
+ """
22
+ For Smali (Android/Dalvik) assembly
23
+ code.
24
+ """
25
+ name = 'Smali'
26
+ url = 'http://code.google.com/p/smali/'
27
+ aliases = ['smali']
28
+ filenames = ['*.smali']
29
+ mimetypes = ['text/smali']
30
+ version_added = '1.6'
31
+
32
+ tokens = {
33
+ 'root': [
34
+ include('comment'),
35
+ include('label'),
36
+ include('field'),
37
+ include('method'),
38
+ include('class'),
39
+ include('directive'),
40
+ include('access-modifier'),
41
+ include('instruction'),
42
+ include('literal'),
43
+ include('punctuation'),
44
+ include('type'),
45
+ include('whitespace')
46
+ ],
47
+ 'directive': [
48
+ (r'^([ \t]*)(\.(?:class|super|implements|field|subannotation|annotation|'
49
+ r'enum|method|registers|locals|array-data|packed-switch|'
50
+ r'sparse-switch|catchall|catch|line|parameter|local|prologue|'
51
+ r'epilogue|source))', bygroups(Whitespace, Keyword)),
52
+ (r'^([ \t]*)(\.end)( )(field|subannotation|annotation|method|array-data|'
53
+ 'packed-switch|sparse-switch|parameter|local)',
54
+ bygroups(Whitespace, Keyword, Whitespace, Keyword)),
55
+ (r'^([ \t]*)(\.restart)( )(local)',
56
+ bygroups(Whitespace, Keyword, Whitespace, Keyword)),
57
+ ],
58
+ 'access-modifier': [
59
+ (r'(public|private|protected|static|final|synchronized|bridge|'
60
+ r'varargs|native|abstract|strictfp|synthetic|constructor|'
61
+ r'declared-synchronized|interface|enum|annotation|volatile|'
62
+ r'transient)', Keyword),
63
+ ],
64
+ 'whitespace': [
65
+ (r'\n', Whitespace),
66
+ (r'\s+', Whitespace),
67
+ ],
68
+ 'instruction': [
69
+ (r'\b[vp]\d+\b', Name.Builtin), # registers
70
+ (r'(\b[a-z][A-Za-z0-9/-]+)(\s+)', bygroups(Text, Whitespace)), # instructions
71
+ ],
72
+ 'literal': [
73
+ (r'".*"', String),
74
+ (r'0x[0-9A-Fa-f]+t?', Number.Hex),
75
+ (r'[0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
76
+ (r'[0-9]+L?', Number.Integer),
77
+ ],
78
+ 'field': [
79
+ (r'(\$?\b)([\w$]*)(:)',
80
+ bygroups(Punctuation, Name.Variable, Punctuation)),
81
+ ],
82
+ 'method': [
83
+ (r'<(?:cl)?init>', Name.Function), # constructor
84
+ (r'(\$?\b)([\w$]*)(\()',
85
+ bygroups(Punctuation, Name.Function, Punctuation)),
86
+ ],
87
+ 'label': [
88
+ (r':\w+', Name.Label),
89
+ ],
90
+ 'class': [
91
+ # class names in the form Lcom/namespace/ClassName;
92
+ # I only want to color the ClassName part, so the namespace part is
93
+ # treated as 'Text'
94
+ (r'(L)((?:[\w$]+/)*)([\w$]+)(;)',
95
+ bygroups(Keyword.Type, Text, Name.Class, Text)),
96
+ ],
97
+ 'punctuation': [
98
+ (r'->', Punctuation),
99
+ (r'[{},():=.-]', Punctuation),
100
+ ],
101
+ 'type': [
102
+ (r'[ZBSCIJFDV\[]+', Keyword.Type),
103
+ ],
104
+ 'comment': [
105
+ (r'#.*?\n', Comment),
106
+ ],
107
+ }
108
+
109
+ def analyse_text(text):
110
+ score = 0
111
+ if re.search(r'^\s*\.class\s', text, re.MULTILINE):
112
+ score += 0.5
113
+ if re.search(r'\b((check-cast|instance-of|throw-verification-error'
114
+ r')\b|(-to|add|[ais]get|[ais]put|and|cmpl|const|div|'
115
+ r'if|invoke|move|mul|neg|not|or|rem|return|rsub|shl|'
116
+ r'shr|sub|ushr)[-/])|{|}', text, re.MULTILINE):
117
+ score += 0.3
118
+ if re.search(r'(\.(catchall|epilogue|restart local|prologue)|'
119
+ r'\b(array-data|class-change-error|declared-synchronized|'
120
+ r'(field|inline|vtable)@0x[0-9a-fA-F]|generic-error|'
121
+ r'illegal-class-access|illegal-field-access|'
122
+ r'illegal-method-access|instantiation-error|no-error|'
123
+ r'no-such-class|no-such-field|no-such-method|'
124
+ r'packed-switch|sparse-switch))\b', text, re.MULTILINE):
125
+ score += 0.6
126
+ return score
venv/Lib/site-packages/pygments/lexers/data.py ADDED
@@ -0,0 +1,763 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.data
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for data file format.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import Lexer, ExtendedRegexLexer, LexerContext, \
12
+ include, bygroups
13
+ from pygments.token import Comment, Error, Keyword, Literal, Name, Number, \
14
+ Punctuation, String, Whitespace
15
+
16
+ __all__ = ['YamlLexer', 'JsonLexer', 'JsonBareObjectLexer', 'JsonLdLexer']
17
+
18
+
19
+ class YamlLexerContext(LexerContext):
20
+ """Indentation context for the YAML lexer."""
21
+
22
+ def __init__(self, *args, **kwds):
23
+ super().__init__(*args, **kwds)
24
+ self.indent_stack = []
25
+ self.indent = -1
26
+ self.next_indent = 0
27
+ self.block_scalar_indent = None
28
+
29
+
30
+ class YamlLexer(ExtendedRegexLexer):
31
+ """
32
+ Lexer for YAML, a human-friendly data serialization
33
+ language.
34
+ """
35
+
36
+ name = 'YAML'
37
+ url = 'http://yaml.org/'
38
+ aliases = ['yaml', 'yml']
39
+ filenames = ['*.yaml', '*.yml']
40
+ mimetypes = ['text/x-yaml']
41
+ version_added = '0.11'
42
+
43
+ def something(token_class):
44
+ """Do not produce empty tokens."""
45
+ def callback(lexer, match, context):
46
+ text = match.group()
47
+ if not text:
48
+ return
49
+ yield match.start(), token_class, text
50
+ context.pos = match.end()
51
+ return callback
52
+
53
+ def reset_indent(token_class):
54
+ """Reset the indentation levels."""
55
+ def callback(lexer, match, context):
56
+ text = match.group()
57
+ context.indent_stack = []
58
+ context.indent = -1
59
+ context.next_indent = 0
60
+ context.block_scalar_indent = None
61
+ yield match.start(), token_class, text
62
+ context.pos = match.end()
63
+ return callback
64
+
65
+ def save_indent(token_class, start=False):
66
+ """Save a possible indentation level."""
67
+ def callback(lexer, match, context):
68
+ text = match.group()
69
+ extra = ''
70
+ if start:
71
+ context.next_indent = len(text)
72
+ if context.next_indent < context.indent:
73
+ while context.next_indent < context.indent:
74
+ context.indent = context.indent_stack.pop()
75
+ if context.next_indent > context.indent:
76
+ extra = text[context.indent:]
77
+ text = text[:context.indent]
78
+ else:
79
+ context.next_indent += len(text)
80
+ if text:
81
+ yield match.start(), token_class, text
82
+ if extra:
83
+ yield match.start()+len(text), token_class.Error, extra
84
+ context.pos = match.end()
85
+ return callback
86
+
87
+ def set_indent(token_class, implicit=False):
88
+ """Set the previously saved indentation level."""
89
+ def callback(lexer, match, context):
90
+ text = match.group()
91
+ if context.indent < context.next_indent:
92
+ context.indent_stack.append(context.indent)
93
+ context.indent = context.next_indent
94
+ if not implicit:
95
+ context.next_indent += len(text)
96
+ yield match.start(), token_class, text
97
+ context.pos = match.end()
98
+ return callback
99
+
100
+ def set_block_scalar_indent(token_class):
101
+ """Set an explicit indentation level for a block scalar."""
102
+ def callback(lexer, match, context):
103
+ text = match.group()
104
+ context.block_scalar_indent = None
105
+ if not text:
106
+ return
107
+ increment = match.group(1)
108
+ if increment:
109
+ current_indent = max(context.indent, 0)
110
+ increment = int(increment)
111
+ context.block_scalar_indent = current_indent + increment
112
+ if text:
113
+ yield match.start(), token_class, text
114
+ context.pos = match.end()
115
+ return callback
116
+
117
+ def parse_block_scalar_empty_line(indent_token_class, content_token_class):
118
+ """Process an empty line in a block scalar."""
119
+ def callback(lexer, match, context):
120
+ text = match.group()
121
+ if (context.block_scalar_indent is None or
122
+ len(text) <= context.block_scalar_indent):
123
+ if text:
124
+ yield match.start(), indent_token_class, text
125
+ else:
126
+ indentation = text[:context.block_scalar_indent]
127
+ content = text[context.block_scalar_indent:]
128
+ yield match.start(), indent_token_class, indentation
129
+ yield (match.start()+context.block_scalar_indent,
130
+ content_token_class, content)
131
+ context.pos = match.end()
132
+ return callback
133
+
134
+ def parse_block_scalar_indent(token_class):
135
+ """Process indentation spaces in a block scalar."""
136
+ def callback(lexer, match, context):
137
+ text = match.group()
138
+ if context.block_scalar_indent is None:
139
+ if len(text) <= max(context.indent, 0):
140
+ context.stack.pop()
141
+ context.stack.pop()
142
+ return
143
+ context.block_scalar_indent = len(text)
144
+ else:
145
+ if len(text) < context.block_scalar_indent:
146
+ context.stack.pop()
147
+ context.stack.pop()
148
+ return
149
+ if text:
150
+ yield match.start(), token_class, text
151
+ context.pos = match.end()
152
+ return callback
153
+
154
+ def parse_plain_scalar_indent(token_class):
155
+ """Process indentation spaces in a plain scalar."""
156
+ def callback(lexer, match, context):
157
+ text = match.group()
158
+ if len(text) <= context.indent:
159
+ context.stack.pop()
160
+ context.stack.pop()
161
+ return
162
+ if text:
163
+ yield match.start(), token_class, text
164
+ context.pos = match.end()
165
+ return callback
166
+
167
+ tokens = {
168
+ # the root rules
169
+ 'root': [
170
+ # ignored whitespaces
171
+ (r'[ ]+(?=#|$)', Whitespace),
172
+ # line breaks
173
+ (r'\n+', Whitespace),
174
+ # a comment
175
+ (r'#[^\n]*', Comment.Single),
176
+ # the '%YAML' directive
177
+ (r'^%YAML(?=[ ]|$)', reset_indent(Name.Tag), 'yaml-directive'),
178
+ # the %TAG directive
179
+ (r'^%TAG(?=[ ]|$)', reset_indent(Name.Tag), 'tag-directive'),
180
+ # document start and document end indicators
181
+ (r'^(?:---|\.\.\.)(?=[ ]|$)', reset_indent(Name.Namespace),
182
+ 'block-line'),
183
+ # indentation spaces
184
+ (r'[ ]*(?!\s|$)', save_indent(Whitespace, start=True),
185
+ ('block-line', 'indentation')),
186
+ ],
187
+
188
+ # trailing whitespaces after directives or a block scalar indicator
189
+ 'ignored-line': [
190
+ # ignored whitespaces
191
+ (r'[ ]+(?=#|$)', Whitespace),
192
+ # a comment
193
+ (r'#[^\n]*', Comment.Single),
194
+ # line break
195
+ (r'\n', Whitespace, '#pop:2'),
196
+ ],
197
+
198
+ # the %YAML directive
199
+ 'yaml-directive': [
200
+ # the version number
201
+ (r'([ ]+)([0-9]+\.[0-9]+)',
202
+ bygroups(Whitespace, Number), 'ignored-line'),
203
+ ],
204
+
205
+ # the %TAG directive
206
+ 'tag-directive': [
207
+ # a tag handle and the corresponding prefix
208
+ (r'([ ]+)(!|![\w-]*!)'
209
+ r'([ ]+)(!|!?[\w;/?:@&=+$,.!~*\'()\[\]%-]+)',
210
+ bygroups(Whitespace, Keyword.Type, Whitespace, Keyword.Type),
211
+ 'ignored-line'),
212
+ ],
213
+
214
+ # block scalar indicators and indentation spaces
215
+ 'indentation': [
216
+ # trailing whitespaces are ignored
217
+ (r'[ ]*$', something(Whitespace), '#pop:2'),
218
+ # whitespaces preceding block collection indicators
219
+ (r'[ ]+(?=[?:-](?:[ ]|$))', save_indent(Whitespace)),
220
+ # block collection indicators
221
+ (r'[?:-](?=[ ]|$)', set_indent(Punctuation.Indicator)),
222
+ # the beginning a block line
223
+ (r'[ ]*', save_indent(Whitespace), '#pop'),
224
+ ],
225
+
226
+ # an indented line in the block context
227
+ 'block-line': [
228
+ # the line end
229
+ (r'[ ]*(?=#|$)', something(Whitespace), '#pop'),
230
+ # whitespaces separating tokens
231
+ (r'[ ]+', Whitespace),
232
+ # key with colon
233
+ (r'''([^#,?\[\]{}"'\n]+)(:)(?=[ ]|$)''',
234
+ bygroups(Name.Tag, set_indent(Punctuation, implicit=True))),
235
+ # tags, anchors and aliases,
236
+ include('descriptors'),
237
+ # block collections and scalars
238
+ include('block-nodes'),
239
+ # flow collections and quoted scalars
240
+ include('flow-nodes'),
241
+ # a plain scalar
242
+ (r'(?=[^\s?:,\[\]{}#&*!|>\'"%@`-]|[?:-]\S)',
243
+ something(Name.Variable),
244
+ 'plain-scalar-in-block-context'),
245
+ ],
246
+
247
+ # tags, anchors, aliases
248
+ 'descriptors': [
249
+ # a full-form tag
250
+ (r'!<[\w#;/?:@&=+$,.!~*\'()\[\]%-]+>', Keyword.Type),
251
+ # a tag in the form '!', '!suffix' or '!handle!suffix'
252
+ (r'!(?:[\w-]+!)?'
253
+ r'[\w#;/?:@&=+$,.!~*\'()\[\]%-]*', Keyword.Type),
254
+ # an anchor
255
+ (r'&[\w-]+', Name.Label),
256
+ # an alias
257
+ (r'\*[\w-]+', Name.Variable),
258
+ ],
259
+
260
+ # block collections and scalars
261
+ 'block-nodes': [
262
+ # implicit key
263
+ (r':(?=[ ]|$)', set_indent(Punctuation.Indicator, implicit=True)),
264
+ # literal and folded scalars
265
+ (r'[|>]', Punctuation.Indicator,
266
+ ('block-scalar-content', 'block-scalar-header')),
267
+ ],
268
+
269
+ # flow collections and quoted scalars
270
+ 'flow-nodes': [
271
+ # a flow sequence
272
+ (r'\[', Punctuation.Indicator, 'flow-sequence'),
273
+ # a flow mapping
274
+ (r'\{', Punctuation.Indicator, 'flow-mapping'),
275
+ # a single-quoted scalar
276
+ (r'\'', String, 'single-quoted-scalar'),
277
+ # a double-quoted scalar
278
+ (r'\"', String, 'double-quoted-scalar'),
279
+ ],
280
+
281
+ # the content of a flow collection
282
+ 'flow-collection': [
283
+ # whitespaces
284
+ (r'[ ]+', Whitespace),
285
+ # line breaks
286
+ (r'\n+', Whitespace),
287
+ # a comment
288
+ (r'#[^\n]*', Comment.Single),
289
+ # simple indicators
290
+ (r'[?:,]', Punctuation.Indicator),
291
+ # tags, anchors and aliases
292
+ include('descriptors'),
293
+ # nested collections and quoted scalars
294
+ include('flow-nodes'),
295
+ # a plain scalar
296
+ (r'(?=[^\s?:,\[\]{}#&*!|>\'"%@`])',
297
+ something(Name.Variable),
298
+ 'plain-scalar-in-flow-context'),
299
+ ],
300
+
301
+ # a flow sequence indicated by '[' and ']'
302
+ 'flow-sequence': [
303
+ # include flow collection rules
304
+ include('flow-collection'),
305
+ # the closing indicator
306
+ (r'\]', Punctuation.Indicator, '#pop'),
307
+ ],
308
+
309
+ # a flow mapping indicated by '{' and '}'
310
+ 'flow-mapping': [
311
+ # key with colon
312
+ (r'''([^,:?\[\]{}"'\n]+)(:)(?=[ ]|$)''',
313
+ bygroups(Name.Tag, Punctuation)),
314
+ # include flow collection rules
315
+ include('flow-collection'),
316
+ # the closing indicator
317
+ (r'\}', Punctuation.Indicator, '#pop'),
318
+ ],
319
+
320
+ # block scalar lines
321
+ 'block-scalar-content': [
322
+ # line break
323
+ (r'\n', Whitespace),
324
+ # empty line
325
+ (r'^[ ]+$',
326
+ parse_block_scalar_empty_line(Whitespace, Name.Constant)),
327
+ # indentation spaces (we may leave the state here)
328
+ (r'^[ ]*', parse_block_scalar_indent(Whitespace)),
329
+ # line content
330
+ (r'[\S\t ]+', Name.Constant),
331
+ ],
332
+
333
+ # the content of a literal or folded scalar
334
+ 'block-scalar-header': [
335
+ # indentation indicator followed by chomping flag
336
+ (r'([1-9])?[+-]?(?=[ ]|$)',
337
+ set_block_scalar_indent(Punctuation.Indicator),
338
+ 'ignored-line'),
339
+ # chomping flag followed by indentation indicator
340
+ (r'[+-]?([1-9])?(?=[ ]|$)',
341
+ set_block_scalar_indent(Punctuation.Indicator),
342
+ 'ignored-line'),
343
+ ],
344
+
345
+ # ignored and regular whitespaces in quoted scalars
346
+ 'quoted-scalar-whitespaces': [
347
+ # leading and trailing whitespaces are ignored
348
+ (r'^[ ]+', Whitespace),
349
+ (r'[ ]+$', Whitespace),
350
+ # line breaks are ignored
351
+ (r'\n+', Whitespace),
352
+ # other whitespaces are a part of the value
353
+ (r'[ \xa0]+', Name.Variable),
354
+ ],
355
+
356
+ # single-quoted scalars
357
+ 'single-quoted-scalar': [
358
+ # include whitespace and line break rules
359
+ include('quoted-scalar-whitespaces'),
360
+ # escaping of the quote character
361
+ (r'\'\'', String.Escape),
362
+ # regular non-whitespace characters
363
+ (r'[^\s\']+', String),
364
+ # the closing quote
365
+ (r'\'', String, '#pop'),
366
+ ],
367
+
368
+ # double-quoted scalars
369
+ 'double-quoted-scalar': [
370
+ # include whitespace and line break rules
371
+ include('quoted-scalar-whitespaces'),
372
+ # escaping of special characters
373
+ (r'\\[0abt\tn\nvfre "\\N_LP]', String),
374
+ # escape codes
375
+ (r'\\(?:x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})',
376
+ String.Escape),
377
+ # regular non-whitespace characters
378
+ (r'[^\s"\\]+', String),
379
+ # the closing quote
380
+ (r'"', String, '#pop'),
381
+ ],
382
+
383
+ # the beginning of a new line while scanning a plain scalar
384
+ 'plain-scalar-in-block-context-new-line': [
385
+ # empty lines
386
+ (r'^[ ]+$', Whitespace),
387
+ # line breaks
388
+ (r'\n+', Whitespace),
389
+ # document start and document end indicators
390
+ (r'^(?=---|\.\.\.)', something(Name.Namespace), '#pop:3'),
391
+ # indentation spaces (we may leave the block line state here)
392
+ (r'^[ ]*', parse_plain_scalar_indent(Whitespace), '#pop'),
393
+ ],
394
+
395
+ # a plain scalar in the block context
396
+ 'plain-scalar-in-block-context': [
397
+ # the scalar ends with the ':' indicator
398
+ (r'[ ]*(?=:[ ]|:$)', something(Whitespace), '#pop'),
399
+ # the scalar ends with whitespaces followed by a comment
400
+ (r'[ ]+(?=#)', Whitespace, '#pop'),
401
+ # trailing whitespaces are ignored
402
+ (r'[ ]+$', Whitespace),
403
+ # line breaks are ignored
404
+ (r'\n+', Whitespace, 'plain-scalar-in-block-context-new-line'),
405
+ # other whitespaces are a part of the value
406
+ (r'[ \xa0]+', Literal.Scalar.Plain),
407
+ # regular non-whitespace characters
408
+ (r'(?::(?!\s)|[^\s:])+', Literal.Scalar.Plain),
409
+ ],
410
+
411
+ # a plain scalar is the flow context
412
+ 'plain-scalar-in-flow-context': [
413
+ # the scalar ends with an indicator character
414
+ (r'[ ]*(?=[,:?\[\]{}])', something(Whitespace), '#pop'),
415
+ # the scalar ends with a comment
416
+ (r'[ ]+(?=#)', Whitespace, '#pop'),
417
+ # leading and trailing whitespaces are ignored
418
+ (r'^[ ]+', Whitespace),
419
+ (r'[ ]+$', Whitespace),
420
+ # line breaks are ignored
421
+ (r'\n+', Whitespace),
422
+ # other whitespaces are a part of the value
423
+ (r'[ \xa0]+', Name.Variable),
424
+ # regular non-whitespace characters
425
+ (r'[^\s,:?\[\]{}]+', Name.Variable),
426
+ ],
427
+
428
+ }
429
+
430
+ def get_tokens_unprocessed(self, text=None, context=None):
431
+ if context is None:
432
+ context = YamlLexerContext(text, 0)
433
+ return super().get_tokens_unprocessed(text, context)
434
+
435
+
436
+ class JsonLexer(Lexer):
437
+ """
438
+ For JSON data structures.
439
+
440
+ Javascript-style comments are supported (like ``/* */`` and ``//``),
441
+ though comments are not part of the JSON specification.
442
+ This allows users to highlight JSON as it is used in the wild.
443
+
444
+ No validation is performed on the input JSON document.
445
+ """
446
+
447
+ name = 'JSON'
448
+ url = 'https://www.json.org'
449
+ aliases = ['json', 'json-object']
450
+ filenames = ['*.json', '*.jsonl', '*.ndjson', 'Pipfile.lock', '*.module', '*.xc']
451
+ mimetypes = ['application/json', 'application/json-object', 'application/x-ndjson', 'application/jsonl', 'application/json-seq']
452
+ version_added = '1.5'
453
+
454
+ # No validation of integers, floats, or constants is done.
455
+ # As long as the characters are members of the following
456
+ # sets, the token will be considered valid. For example,
457
+ #
458
+ # "--1--" is parsed as an integer
459
+ # "1...eee" is parsed as a float
460
+ # "trustful" is parsed as a constant
461
+ #
462
+ integers = set('-0123456789')
463
+ floats = set('.eE+')
464
+ constants = set('truefalsenull') # true|false|null
465
+ hexadecimals = set('0123456789abcdefABCDEF')
466
+ punctuations = set('{}[],')
467
+ whitespaces = {'\u0020', '\u000a', '\u000d', '\u0009'}
468
+
469
+ def get_tokens_unprocessed(self, text):
470
+ """Parse JSON data."""
471
+
472
+ in_string = False
473
+ in_escape = False
474
+ in_unicode_escape = 0
475
+ in_whitespace = False
476
+ in_constant = False
477
+ in_number = False
478
+ in_float = False
479
+ in_punctuation = False
480
+ in_comment_single = False
481
+ in_comment_multiline = False
482
+ expecting_second_comment_opener = False # // or /*
483
+ expecting_second_comment_closer = False # */
484
+
485
+ start = 0
486
+
487
+ # The queue is used to store data that may need to be tokenized
488
+ # differently based on what follows. In particular, JSON object
489
+ # keys are tokenized differently than string values, but cannot
490
+ # be distinguished until punctuation is encountered outside the
491
+ # string.
492
+ #
493
+ # A ":" character after the string indicates that the string is
494
+ # an object key; any other character indicates the string is a
495
+ # regular string value.
496
+ #
497
+ # The queue holds tuples that contain the following data:
498
+ #
499
+ # (start_index, token_type, text)
500
+ #
501
+ # By default the token type of text in double quotes is
502
+ # String.Double. The token type will be replaced if a colon
503
+ # is encountered after the string closes.
504
+ #
505
+ queue = []
506
+
507
+ for stop, character in enumerate(text):
508
+ if in_string:
509
+ if in_unicode_escape:
510
+ if character in self.hexadecimals:
511
+ in_unicode_escape -= 1
512
+ if not in_unicode_escape:
513
+ in_escape = False
514
+ else:
515
+ in_unicode_escape = 0
516
+ in_escape = False
517
+
518
+ elif in_escape:
519
+ if character == 'u':
520
+ in_unicode_escape = 4
521
+ else:
522
+ in_escape = False
523
+
524
+ elif character == '\\':
525
+ in_escape = True
526
+
527
+ elif character == '"':
528
+ queue.append((start, String.Double, text[start:stop + 1]))
529
+ in_string = False
530
+ in_escape = False
531
+ in_unicode_escape = 0
532
+
533
+ continue
534
+
535
+ elif in_whitespace:
536
+ if character in self.whitespaces:
537
+ continue
538
+
539
+ if queue:
540
+ queue.append((start, Whitespace, text[start:stop]))
541
+ else:
542
+ yield start, Whitespace, text[start:stop]
543
+ in_whitespace = False
544
+ # Fall through so the new character can be evaluated.
545
+
546
+ elif in_constant:
547
+ if character in self.constants:
548
+ continue
549
+
550
+ yield start, Keyword.Constant, text[start:stop]
551
+ in_constant = False
552
+ # Fall through so the new character can be evaluated.
553
+
554
+ elif in_number:
555
+ if character in self.integers:
556
+ continue
557
+ elif character in self.floats:
558
+ in_float = True
559
+ continue
560
+
561
+ if in_float:
562
+ yield start, Number.Float, text[start:stop]
563
+ else:
564
+ yield start, Number.Integer, text[start:stop]
565
+ in_number = False
566
+ in_float = False
567
+ # Fall through so the new character can be evaluated.
568
+
569
+ elif in_punctuation:
570
+ if character in self.punctuations:
571
+ continue
572
+
573
+ yield start, Punctuation, text[start:stop]
574
+ in_punctuation = False
575
+ # Fall through so the new character can be evaluated.
576
+
577
+ elif in_comment_single:
578
+ if character != '\n':
579
+ continue
580
+
581
+ if queue:
582
+ queue.append((start, Comment.Single, text[start:stop]))
583
+ else:
584
+ yield start, Comment.Single, text[start:stop]
585
+
586
+ in_comment_single = False
587
+ # Fall through so the new character can be evaluated.
588
+
589
+ elif in_comment_multiline:
590
+ if character == '*':
591
+ expecting_second_comment_closer = True
592
+ elif expecting_second_comment_closer:
593
+ expecting_second_comment_closer = False
594
+ if character == '/':
595
+ if queue:
596
+ queue.append((start, Comment.Multiline, text[start:stop + 1]))
597
+ else:
598
+ yield start, Comment.Multiline, text[start:stop + 1]
599
+
600
+ in_comment_multiline = False
601
+
602
+ continue
603
+
604
+ elif expecting_second_comment_opener:
605
+ expecting_second_comment_opener = False
606
+ if character == '/':
607
+ in_comment_single = True
608
+ continue
609
+ elif character == '*':
610
+ in_comment_multiline = True
611
+ continue
612
+
613
+ # Exhaust the queue. Accept the existing token types.
614
+ yield from queue
615
+ queue.clear()
616
+
617
+ yield start, Error, text[start:stop]
618
+ # Fall through so the new character can be evaluated.
619
+
620
+ start = stop
621
+
622
+ if character == '"':
623
+ in_string = True
624
+
625
+ elif character in self.whitespaces:
626
+ in_whitespace = True
627
+
628
+ elif character in {'f', 'n', 't'}: # The first letters of true|false|null
629
+ # Exhaust the queue. Accept the existing token types.
630
+ yield from queue
631
+ queue.clear()
632
+
633
+ in_constant = True
634
+
635
+ elif character in self.integers:
636
+ # Exhaust the queue. Accept the existing token types.
637
+ yield from queue
638
+ queue.clear()
639
+
640
+ in_number = True
641
+
642
+ elif character == ':':
643
+ # Yield from the queue. Replace string token types.
644
+ for _start, _token, _text in queue:
645
+ # There can be only three types of tokens before a ':':
646
+ # Whitespace, Comment, or a quoted string.
647
+ #
648
+ # If it's a quoted string we emit Name.Tag.
649
+ # Otherwise, we yield the original token.
650
+ #
651
+ # In all other cases this would be invalid JSON,
652
+ # but this is not a validating JSON lexer, so it's OK.
653
+ if _token is String.Double:
654
+ yield _start, Name.Tag, _text
655
+ else:
656
+ yield _start, _token, _text
657
+ queue.clear()
658
+
659
+ in_punctuation = True
660
+
661
+ elif character in self.punctuations:
662
+ # Exhaust the queue. Accept the existing token types.
663
+ yield from queue
664
+ queue.clear()
665
+
666
+ in_punctuation = True
667
+
668
+ elif character == '/':
669
+ # This is the beginning of a comment.
670
+ expecting_second_comment_opener = True
671
+
672
+ else:
673
+ # Exhaust the queue. Accept the existing token types.
674
+ yield from queue
675
+ queue.clear()
676
+
677
+ yield start, Error, character
678
+
679
+ # Yield any remaining text.
680
+ yield from queue
681
+ if in_string:
682
+ yield start, Error, text[start:]
683
+ elif in_float:
684
+ yield start, Number.Float, text[start:]
685
+ elif in_number:
686
+ yield start, Number.Integer, text[start:]
687
+ elif in_constant:
688
+ yield start, Keyword.Constant, text[start:]
689
+ elif in_whitespace:
690
+ yield start, Whitespace, text[start:]
691
+ elif in_punctuation:
692
+ yield start, Punctuation, text[start:]
693
+ elif in_comment_single:
694
+ yield start, Comment.Single, text[start:]
695
+ elif in_comment_multiline:
696
+ yield start, Error, text[start:]
697
+ elif expecting_second_comment_opener:
698
+ yield start, Error, text[start:]
699
+
700
+
701
+ class JsonBareObjectLexer(JsonLexer):
702
+ """
703
+ For JSON data structures (with missing object curly braces).
704
+
705
+ .. deprecated:: 2.8.0
706
+
707
+ Behaves the same as `JsonLexer` now.
708
+ """
709
+
710
+ name = 'JSONBareObject'
711
+ aliases = []
712
+ filenames = []
713
+ mimetypes = []
714
+ version_added = '2.2'
715
+
716
+
717
+ class JsonLdLexer(JsonLexer):
718
+ """
719
+ For JSON-LD linked data.
720
+ """
721
+
722
+ name = 'JSON-LD'
723
+ url = 'https://json-ld.org/'
724
+ aliases = ['jsonld', 'json-ld']
725
+ filenames = ['*.jsonld']
726
+ mimetypes = ['application/ld+json']
727
+ version_added = '2.0'
728
+
729
+ json_ld_keywords = {
730
+ f'"@{keyword}"'
731
+ for keyword in (
732
+ 'base',
733
+ 'container',
734
+ 'context',
735
+ 'direction',
736
+ 'graph',
737
+ 'id',
738
+ 'import',
739
+ 'included',
740
+ 'index',
741
+ 'json',
742
+ 'language',
743
+ 'list',
744
+ 'nest',
745
+ 'none',
746
+ 'prefix',
747
+ 'propagate',
748
+ 'protected',
749
+ 'reverse',
750
+ 'set',
751
+ 'type',
752
+ 'value',
753
+ 'version',
754
+ 'vocab',
755
+ )
756
+ }
757
+
758
+ def get_tokens_unprocessed(self, text):
759
+ for start, token, value in super().get_tokens_unprocessed(text):
760
+ if token is Name.Tag and value in self.json_ld_keywords:
761
+ yield start, Name.Decorator, value
762
+ else:
763
+ yield start, token, value
venv/Lib/site-packages/pygments/lexers/dax.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.dax
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for LilyPond.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, words
12
+ from pygments.token import Comment, Punctuation, Whitespace,\
13
+ Name, Operator, String, Number, Text
14
+
15
+ __all__ = ['DaxLexer']
16
+
17
+
18
+ class DaxLexer(RegexLexer):
19
+ """
20
+ Lexer for Power BI DAX
21
+ Referenced from: https://github.com/sql-bi/SyntaxHighlighterBrushDax
22
+ """
23
+ name = 'Dax'
24
+ aliases = ['dax']
25
+ filenames = ['*.dax']
26
+ url = 'https://learn.microsoft.com/en-us/dax/dax-function-reference'
27
+ mimetypes = []
28
+ version_added = '2.15'
29
+
30
+ tokens = {
31
+ 'root': [
32
+ (r'\s+', Whitespace),
33
+ (r"--.*\n?", Comment.Single), # Comment: Double dash comment
34
+ (r"//.*\n?", Comment.Single), # Comment: Double backslash comment
35
+ (r'/\*', Comment.Multiline, 'multiline-comments'),
36
+ (words(('abs', 'accrint', 'accrintm', 'acos', 'acosh', 'acot', 'acoth',
37
+ 'addcolumns', 'addmissingitems', 'all', 'allcrossfiltered',
38
+ 'allexcept', 'allnoblankrow', 'allselected', 'amordegrc', 'amorlinc',
39
+ 'and','approximatedistinctcount', 'asin', 'asinh', 'atan', 'atanh',
40
+ 'average', 'averagea', 'averagex', 'beta.dist', 'beta.inv',
41
+ 'bitand', 'bitlshift', 'bitor', 'bitrshift', 'bitxor', 'blank',
42
+ 'calculate', 'calculatetable', 'calendar', 'calendarauto', 'ceiling',
43
+ 'chisq.dist', 'chisq.dist.rt', 'chisq.inv', 'chisq.inv.rt',
44
+ 'closingbalancemonth', 'closingbalancequarter', 'closingbalanceyear',
45
+ 'coalesce', 'columnstatistics', 'combin', 'combina', 'combinevalues',
46
+ 'concatenate', 'concatenatex', 'confidence.norm', 'confidence.t',
47
+ 'contains', 'containsrow', 'containsstring', 'containsstringexact',
48
+ 'convert', 'cos', 'cosh', 'cot', 'coth', 'count', 'counta', 'countax',
49
+ 'countblank', 'countrows', 'countx', 'coupdaybs', 'coupdays',
50
+ 'coupdaysnc', 'coupncd', 'coupnum', 'couppcd', 'crossfilter',
51
+ 'crossjoin', 'cumipmt', 'cumprinc', 'currency', 'currentgroup',
52
+ 'customdata', 'datatable', 'date', 'dateadd', 'datediff',
53
+ 'datesbetween', 'datesinperiod', 'datesmtd', 'datesqtd',
54
+ 'datesytd', 'datevalue', 'day', 'db', 'ddb', 'degrees', 'detailrows',
55
+ 'disc', 'distinct', 'distinctcount', 'distinctcountnoblank',
56
+ 'divide', 'dollarde', 'dollarfr', 'duration', 'earlier', 'earliest',
57
+ 'edate', 'effect', 'endofmonth', 'endofquarter', 'endofyear',
58
+ 'eomonth', 'error', 'evaluateandlog', 'even', 'exact', 'except',
59
+ 'exp', 'expon.dist', 'fact', 'false', 'filter', 'filters', 'find',
60
+ 'firstdate', 'firstnonblank', 'firstnonblankvalue', 'fixed', 'floor',
61
+ 'format', 'fv', 'gcd', 'generate', 'generateall', 'generateseries',
62
+ 'geomean', 'geomeanx', 'groupby', 'hash', 'hasonefilter',
63
+ 'hasonevalue', 'hour', 'if', 'if.eager', 'iferror', 'ignore', 'index',
64
+ 'int', 'intersect', 'intrate', 'ipmt', 'isafter', 'isblank',
65
+ 'iscrossfiltered', 'isempty', 'iserror', 'iseven', 'isfiltered',
66
+ 'isinscope', 'islogical', 'isnontext', 'isnumber', 'iso.ceiling',
67
+ 'isodd', 'isonorafter', 'ispmt', 'isselectedmeasure', 'issubtotal',
68
+ 'istext', 'keepfilters', 'keywordmatch', 'lastdate', 'lastnonblank',
69
+ 'lastnonblankvalue', 'lcm', 'left', 'len', 'linest', 'linestx', 'ln',
70
+ 'log', 'log10', 'lookupvalue', 'lower', 'max', 'maxa', 'maxx',
71
+ 'mduration', 'median', 'medianx', 'mid', 'min', 'mina', 'minute',
72
+ 'minx', 'mod', 'month', 'mround', 'nameof', 'naturalinnerjoin',
73
+ 'naturalleftouterjoin', 'networkdays', 'nextday', 'nextmonth',
74
+ 'nextquarter', 'nextyear', 'nominal', 'nonvisual', 'norm.dist',
75
+ 'norm.inv', 'norm.s.dist', 'norm.s.inv', 'not', 'now', 'nper', 'odd',
76
+ 'oddfprice', 'oddfyield', 'oddlprice', 'oddlyield', 'offset',
77
+ 'openingbalancemonth', 'openingbalancequarter', 'openingbalanceyear',
78
+ 'or', 'orderby', 'parallelperiod', 'partitionby', 'path',
79
+ 'pathcontains', 'pathitem', 'pathitemreverse', 'pathlength',
80
+ 'pduration', 'percentile.exc', 'percentile.inc', 'percentilex.exc',
81
+ 'percentilex.inc', 'permut', 'pi', 'pmt', 'poisson.dist', 'power',
82
+ 'ppmt', 'previousday', 'previousmonth', 'previousquarter',
83
+ 'previousyear', 'price', 'pricedisc', 'pricemat', 'product',
84
+ 'productx', 'pv', 'quarter', 'quotient', 'radians', 'rand',
85
+ 'randbetween', 'rank.eq', 'rankx', 'rate', 'received', 'related',
86
+ 'relatedtable', 'removefilters', 'replace', 'rept', 'right',
87
+ 'rollup', 'rollupaddissubtotal', 'rollupgroup', 'rollupissubtotal',
88
+ 'round', 'rounddown', 'roundup', 'row', 'rri', 'sameperiodlastyear',
89
+ 'sample', 'sampleaxiswithlocalminmax', 'search', 'second',
90
+ 'selectcolumns', 'selectedmeasure', 'selectedmeasureformatstring',
91
+ 'selectedmeasurename', 'selectedvalue', 'sign', 'sin', 'sinh', 'sln',
92
+ 'sqrt', 'sqrtpi', 'startofmonth', 'startofquarter', 'startofyear',
93
+ 'stdev.p', 'stdev.s', 'stdevx.p', 'stdevx.s', 'substitute',
94
+ 'substitutewithindex', 'sum', 'summarize', 'summarizecolumns', 'sumx',
95
+ 'switch', 'syd', 't.dist', 't.dist.2t', 't.dist.rt', 't.inv',
96
+ 't.inv.2t', 'tan', 'tanh', 'tbilleq', 'tbillprice', 'tbillyield',
97
+ 'time', 'timevalue', 'tocsv', 'today', 'tojson', 'topn',
98
+ 'topnperlevel', 'topnskip', 'totalmtd', 'totalqtd', 'totalytd',
99
+ 'treatas', 'trim', 'true', 'trunc', 'unichar', 'unicode', 'union',
100
+ 'upper', 'userculture', 'userelationship', 'username', 'userobjectid',
101
+ 'userprincipalname', 'utcnow', 'utctoday', 'value', 'values', 'var.p',
102
+ 'var.s', 'varx.p', 'varx.s', 'vdb', 'weekday', 'weeknum', 'window',
103
+ 'xirr', 'xnpv', 'year', 'yearfrac', 'yield', 'yielddisc', 'yieldmat'),
104
+ prefix=r'(?i)', suffix=r'\b'), Name.Function), #Functions
105
+
106
+ (words(('at','asc','boolean','both','by','create','currency',
107
+ 'datetime','day','define','desc','double',
108
+ 'evaluate','false','integer','measure',
109
+ 'month','none','order','return','single','start','string',
110
+ 'table','true','var','year'),
111
+ prefix=r'(?i)', suffix=r'\b'), Name.Builtin), # Keyword
112
+
113
+ (r':=|[-+*\/=^]', Operator),
114
+ (r'\b(IN|NOT)\b', Operator.Word),
115
+ (r'"', String, 'string'), #StringLiteral
116
+ (r"'(?:[^']|'')*'(?!')(?:\[[ \w]+\])?|\w+\[[ \w]+\]",
117
+ Name.Attribute), # Column reference
118
+ (r"\[[ \w]+\]", Name.Attribute), #Measure reference
119
+ (r'(?<!\w)(\d+\.?\d*|\.\d+\b)', Number),# Number
120
+ (r'[\[\](){}`,.]', Punctuation), #Parenthesis
121
+ (r'.*\n', Text),
122
+
123
+ ],
124
+ 'multiline-comments': [
125
+ (r'/\*', Comment.Multiline, 'multiline-comments'),
126
+ (r'\*/', Comment.Multiline, '#pop'),
127
+ (r'[^/*]+', Comment.Multiline),
128
+ (r'[/*]', Comment.Multiline)
129
+ ],
130
+ 'string': [
131
+ (r'""', String.Escape),
132
+ (r'"', String, '#pop'),
133
+ (r'[^"]+', String),
134
+ ]
135
+ }
venv/Lib/site-packages/pygments/lexers/devicetree.py ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.devicetree
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for Devicetree language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, bygroups, include, default, words
12
+ from pygments.token import Comment, Keyword, Name, Number, Operator, \
13
+ Punctuation, String, Text, Whitespace
14
+
15
+ __all__ = ['DevicetreeLexer']
16
+
17
+
18
+ class DevicetreeLexer(RegexLexer):
19
+ """
20
+ Lexer for Devicetree files.
21
+ """
22
+
23
+ name = 'Devicetree'
24
+ url = 'https://www.devicetree.org/'
25
+ aliases = ['devicetree', 'dts']
26
+ filenames = ['*.dts', '*.dtsi']
27
+ mimetypes = ['text/x-c']
28
+ version_added = '2.7'
29
+
30
+ #: optional Whitespace or /*...*/ style comment
31
+ _ws = r'\s*(?:/[*][^*/]*?[*]/\s*)*'
32
+
33
+ tokens = {
34
+ 'macro': [
35
+ # Include preprocessor directives (C style):
36
+ (r'(#include)(' + _ws + r')([^\n]+)',
37
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.PreprocFile)),
38
+ # Define preprocessor directives (C style):
39
+ (r'(#define)(' + _ws + r')([^\n]+)',
40
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.Preproc)),
41
+ # devicetree style with file:
42
+ (r'(/[^*/{]+/)(' + _ws + r')("[^\n{]+")',
43
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.PreprocFile)),
44
+ # devicetree style with property:
45
+ (r'(/[^*/{]+/)(' + _ws + r')([^\n;{]*)([;]?)',
46
+ bygroups(Comment.Preproc, Comment.Multiline, Comment.Preproc, Punctuation)),
47
+ ],
48
+ 'whitespace': [
49
+ (r'\n', Whitespace),
50
+ (r'\s+', Whitespace),
51
+ (r'\\\n', Text), # line continuation
52
+ (r'//(\n|[\w\W]*?[^\\]\n)', Comment.Single),
53
+ (r'/(\\\n)?[*][\w\W]*?[*](\\\n)?/', Comment.Multiline),
54
+ # Open until EOF, so no ending delimiter
55
+ (r'/(\\\n)?[*][\w\W]*', Comment.Multiline),
56
+ ],
57
+ 'statements': [
58
+ (r'(L?)(")', bygroups(String.Affix, String), 'string'),
59
+ (r'0x[0-9a-fA-F]+', Number.Hex),
60
+ (r'\d+', Number.Integer),
61
+ (r'([^\s{}/*]*)(\s*)(:)', bygroups(Name.Label, Text, Punctuation), '#pop'),
62
+ (words(('compatible', 'model', 'phandle', 'status', '#address-cells',
63
+ '#size-cells', 'reg', 'virtual-reg', 'ranges', 'dma-ranges',
64
+ 'device_type', 'name'), suffix=r'\b'), Keyword.Reserved),
65
+ (r'([~!%^&*+=|?:<>/#-])', Operator),
66
+ (r'[(){},.\]]', Punctuation),
67
+ (r'\[', Punctuation, 'bytestring'),
68
+ (r'[a-zA-Z_][\w-]*(?=(?:\s*,' + _ws + r'[a-zA-Z_][\w-]*)*' + _ws + r'[=;])',
69
+ Name),
70
+ (r'[a-zA-Z_]\w*', Name.Attribute),
71
+ ],
72
+ 'root': [
73
+ include('whitespace'),
74
+ include('macro'),
75
+ # Overlay/fragment: &label { ... } or &{/path/to/node} { ... }
76
+ (r'(&)(?:([A-Za-z_]\w*)|(\{)([^}]+)(\}))(' + _ws + r')(\{)',
77
+ bygroups(Operator, Name.Function, Punctuation, Name.Namespace,
78
+ Punctuation, Comment.Multiline, Punctuation), 'node'),
79
+ # Nodes
80
+ (r'([^/*@\s&]+|/)(@?)((?:0x)?[0-9a-fA-F,]*)(' + _ws + r')(\{)',
81
+ bygroups(Name.Function, Operator, Number.Integer,
82
+ Comment.Multiline, Punctuation), 'node'),
83
+
84
+ default('statement'),
85
+ ],
86
+ 'statement': [
87
+ include('whitespace'),
88
+ include('statements'),
89
+ (';', Punctuation, '#pop'),
90
+ ],
91
+ 'node': [
92
+ include('whitespace'),
93
+ include('macro'),
94
+ # Overlay/fragment: &label { ... } or &{/path/to/node} { ... }
95
+ (r'(&)(?:([A-Za-z_]\w*)|(\{)([^}]+)(\}))(' + _ws + r')(\{)',
96
+ bygroups(Operator, Name.Function, Punctuation, Name.Namespace,
97
+ Punctuation, Comment.Multiline, Punctuation), '#push'),
98
+ (r'([^/*@\s&]+|/)(@?)((?:0x)?[0-9a-fA-F,]*)(' + _ws + r')(\{)',
99
+ bygroups(Name.Function, Operator, Number.Integer,
100
+ Comment.Multiline, Punctuation), '#push'),
101
+
102
+ include('statements'),
103
+
104
+ (r'\};', Punctuation, '#pop'),
105
+ (';', Punctuation),
106
+ ],
107
+ 'string': [
108
+ (r'"', String, '#pop'),
109
+ (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|'
110
+ r'u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})', String.Escape),
111
+ (r'[^\\"\n]+', String), # all other characters
112
+ (r'\\\n', String), # line continuation
113
+ (r'\\', String), # stray backslash
114
+ ],
115
+ 'bytestring': [
116
+ (r'\]', Punctuation, '#pop'),
117
+ (r'[0-9a-fA-F]{2}', Number.Hex),
118
+ (r'\s+', Whitespace),
119
+ ],
120
+ }
venv/Lib/site-packages/pygments/lexers/diff.py ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.diff
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for diff/patch formats.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, include, bygroups
14
+ from pygments.token import Text, Comment, Operator, Keyword, Name, Generic, \
15
+ Literal, Whitespace
16
+
17
+ __all__ = ['DiffLexer', 'DarcsPatchLexer', 'WDiffLexer']
18
+
19
+
20
+ class DiffLexer(RegexLexer):
21
+ """
22
+ Lexer for unified or context-style diffs or patches.
23
+ """
24
+
25
+ name = 'Diff'
26
+ aliases = ['diff', 'udiff']
27
+ filenames = ['*.diff', '*.patch']
28
+ mimetypes = ['text/x-diff', 'text/x-patch']
29
+ url = 'https://en.wikipedia.org/wiki/Diff'
30
+ version_added = ''
31
+
32
+ tokens = {
33
+ 'root': [
34
+ (r'( )(.*)(\n)', bygroups(Whitespace, Text, Whitespace)),
35
+ (r'(!.*|---)(\n)', bygroups(Generic.Strong, Whitespace)),
36
+ (r'((?:< |-).*)(\n)', bygroups(Generic.Deleted, Whitespace)),
37
+ (r'((?:> |\+).*)(\n)', bygroups(Generic.Inserted, Whitespace)),
38
+ (
39
+ r'(@.*|\d(?:,\d+)?(?:a|c|d)\d+(?:,\d+)?)(\n)',
40
+ bygroups(Generic.Subheading, Whitespace),
41
+ ),
42
+ (r'((?:[Ii]ndex|diff).*)(\n)', bygroups(Generic.Heading, Whitespace)),
43
+ (r'(=.*)(\n)', bygroups(Generic.Heading, Whitespace)),
44
+ (r'(.*)(\n)', bygroups(Text, Whitespace)),
45
+ ]
46
+ }
47
+
48
+ def analyse_text(text):
49
+ if text[:7] == 'Index: ':
50
+ return True
51
+ if text[:5] == 'diff ':
52
+ return True
53
+ if text[:4] == '--- ':
54
+ return 0.9
55
+
56
+
57
+ class DarcsPatchLexer(RegexLexer):
58
+ """
59
+ DarcsPatchLexer is a lexer for the various versions of the darcs patch
60
+ format. Examples of this format are derived by commands such as
61
+ ``darcs annotate --patch`` and ``darcs send``.
62
+ """
63
+
64
+ name = 'Darcs Patch'
65
+ aliases = ['dpatch']
66
+ filenames = ['*.dpatch', '*.darcspatch']
67
+ url = 'https://darcs.net'
68
+ version_added = '0.10'
69
+
70
+ DPATCH_KEYWORDS = ('hunk', 'addfile', 'adddir', 'rmfile', 'rmdir', 'move',
71
+ 'replace')
72
+
73
+ tokens = {
74
+ 'root': [
75
+ (r'<', Operator),
76
+ (r'>', Operator),
77
+ (r'\{', Operator),
78
+ (r'\}', Operator),
79
+ (r'(\[)((?:TAG )?)(.*)(\n)(.*)(\*\*)(\d+)(\s?)(\])',
80
+ bygroups(Operator, Keyword, Name, Whitespace, Name, Operator,
81
+ Literal.Date, Whitespace, Operator)),
82
+ (r'(\[)((?:TAG )?)(.*)(\n)(.*)(\*\*)(\d+)(\s?)',
83
+ bygroups(Operator, Keyword, Name, Whitespace, Name, Operator,
84
+ Literal.Date, Whitespace), 'comment'),
85
+ (r'New patches:', Generic.Heading),
86
+ (r'Context:', Generic.Heading),
87
+ (r'Patch bundle hash:', Generic.Heading),
88
+ (r'(\s*)({})(.*)(\n)'.format('|'.join(DPATCH_KEYWORDS)),
89
+ bygroups(Whitespace, Keyword, Text, Whitespace)),
90
+ (r'\+', Generic.Inserted, "insert"),
91
+ (r'-', Generic.Deleted, "delete"),
92
+ (r'(.*)(\n)', bygroups(Text, Whitespace)),
93
+ ],
94
+ 'comment': [
95
+ (r'[^\]].*\n', Comment),
96
+ (r'\]', Operator, "#pop"),
97
+ ],
98
+ 'specialText': [ # darcs add [_CODE_] special operators for clarity
99
+ (r'\n', Whitespace, "#pop"), # line-based
100
+ (r'\[_[^_]*_]', Operator),
101
+ ],
102
+ 'insert': [
103
+ include('specialText'),
104
+ (r'\[', Generic.Inserted),
105
+ (r'[^\n\[]+', Generic.Inserted),
106
+ ],
107
+ 'delete': [
108
+ include('specialText'),
109
+ (r'\[', Generic.Deleted),
110
+ (r'[^\n\[]+', Generic.Deleted),
111
+ ],
112
+ }
113
+
114
+
115
+ class WDiffLexer(RegexLexer):
116
+ """
117
+ A wdiff lexer.
118
+
119
+ Note that:
120
+
121
+ * It only works with normal output (without options like ``-l``).
122
+ * If the target files contain "[-", "-]", "{+", or "+}",
123
+ especially they are unbalanced, the lexer will get confused.
124
+ """
125
+
126
+ name = 'WDiff'
127
+ url = 'https://www.gnu.org/software/wdiff/'
128
+ aliases = ['wdiff']
129
+ filenames = ['*.wdiff']
130
+ mimetypes = []
131
+ version_added = '2.2'
132
+
133
+ flags = re.MULTILINE | re.DOTALL
134
+
135
+ # We can only assume "[-" after "[-" before "-]" is `nested`,
136
+ # for instance wdiff to wdiff outputs. We have no way to
137
+ # distinct these marker is of wdiff output from original text.
138
+
139
+ ins_op = r"\{\+"
140
+ ins_cl = r"\+\}"
141
+ del_op = r"\[\-"
142
+ del_cl = r"\-\]"
143
+ normal = r'[^{}[\]+-]+' # for performance
144
+ tokens = {
145
+ 'root': [
146
+ (ins_op, Generic.Inserted, 'inserted'),
147
+ (del_op, Generic.Deleted, 'deleted'),
148
+ (normal, Text),
149
+ (r'.', Text),
150
+ ],
151
+ 'inserted': [
152
+ (ins_op, Generic.Inserted, '#push'),
153
+ (del_op, Generic.Inserted, '#push'),
154
+ (del_cl, Generic.Inserted, '#pop'),
155
+
156
+ (ins_cl, Generic.Inserted, '#pop'),
157
+ (normal, Generic.Inserted),
158
+ (r'.', Generic.Inserted),
159
+ ],
160
+ 'deleted': [
161
+ (del_op, Generic.Deleted, '#push'),
162
+ (ins_op, Generic.Deleted, '#push'),
163
+ (ins_cl, Generic.Deleted, '#pop'),
164
+
165
+ (del_cl, Generic.Deleted, '#pop'),
166
+ (normal, Generic.Deleted),
167
+ (r'.', Generic.Deleted),
168
+ ],
169
+ }
venv/Lib/site-packages/pygments/lexers/dns.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.dns
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Pygments lexers for DNS
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.token import Comment, Operator, Keyword, Name, String, \
14
+ Number, Punctuation, Whitespace, Literal
15
+ from pygments.lexer import RegexLexer, bygroups, include
16
+
17
+ __all__ = ['DnsZoneLexer']
18
+
19
+
20
+ CLASSES = [
21
+ "IN",
22
+ "CS",
23
+ "CH",
24
+ "HS",
25
+ ]
26
+
27
+ CLASSES_RE = "(" + "|".join(CLASSES) + ')'
28
+
29
+
30
+ class DnsZoneLexer(RegexLexer):
31
+
32
+ """
33
+ Lexer for DNS zone file
34
+ """
35
+
36
+ flags = re.MULTILINE
37
+
38
+ name = 'Zone'
39
+ aliases = ['zone']
40
+ filenames = [ "*.zone" ]
41
+ url = "https://datatracker.ietf.org/doc/html/rfc1035"
42
+ mimetypes = ['text/dns']
43
+ version_added = '2.16'
44
+
45
+ tokens = {
46
+ 'root': [
47
+ # Empty/comment line:
48
+ (r'([ \t]*)(;.*)(\n)', bygroups(Whitespace, Comment.Single, Whitespace)),
49
+ # Special directives:
50
+ (r'^\$ORIGIN\b', Keyword, 'values'),
51
+ (r'^\$TTL\b', Keyword, 'values'),
52
+ (r'^\$INCLUDE\b', Comment.Preproc, 'include'),
53
+ # TODO, $GENERATE https://bind9.readthedocs.io/en/v9.18.14/chapter3.html#soa-rr
54
+ (r'^\$[A-Z]+\b', Keyword, 'values'),
55
+ # Records:
56
+ # <domain-name> [<TTL>] [<class>] <type> <RDATA> [<comment>]
57
+ (r'^(@)([ \t]+)(?:([0-9]+[smhdw]?)([ \t]+))?(?:' + CLASSES_RE + "([ \t]+))?([A-Z]+)([ \t]+)",
58
+ bygroups(Operator, Whitespace, Number.Integer, Whitespace, Name.Class, Whitespace, Keyword.Type, Whitespace),
59
+ "values"),
60
+ (r'^([^ \t\n]*)([ \t]+)(?:([0-9]+[smhdw]?)([ \t]+))?(?:' + CLASSES_RE + "([ \t]+))?([A-Z]+)([ \t]+)",
61
+ bygroups(Name, Whitespace, Number.Integer, Whitespace, Name.Class, Whitespace, Keyword.Type, Whitespace),
62
+ "values"),
63
+ # <domain-name> [<class>] [<TTL>] <type> <RDATA> [<comment>]
64
+ (r'^(Operator)([ \t]+)(?:' + CLASSES_RE + "([ \t]+))?(?:([0-9]+[smhdw]?)([ \t]+))?([A-Z]+)([ \t]+)",
65
+ bygroups(Name, Whitespace, Number.Integer, Whitespace, Name.Class, Whitespace, Keyword.Type, Whitespace),
66
+ "values"),
67
+ (r'^([^ \t\n]*)([ \t]+)(?:' + CLASSES_RE + "([ \t]+))?(?:([0-9]+[smhdw]?)([ \t]+))?([A-Z]+)([ \t]+)",
68
+ bygroups(Name, Whitespace, Number.Integer, Whitespace, Name.Class, Whitespace, Keyword.Type, Whitespace),
69
+ "values"),
70
+ ],
71
+ # Parsing values:
72
+ 'values': [
73
+ (r'\n', Whitespace, "#pop"),
74
+ (r'\(', Punctuation, 'nested'),
75
+ include('simple-value'),
76
+ ],
77
+ # Parsing nested values (...):
78
+ 'nested': [
79
+ (r'\)', Punctuation, "#pop"),
80
+ include('multiple-simple-values'),
81
+ ],
82
+ # Parsing values:
83
+ 'simple-value': [
84
+ (r'(;.*)', bygroups(Comment.Single)),
85
+ (r'[ \t]+', Whitespace),
86
+ (r"@\b", Operator),
87
+ ('"', String, 'string'),
88
+ (r'[0-9]+[smhdw]?$', Number.Integer),
89
+ (r'([0-9]+[smhdw]?)([ \t]+)', bygroups(Number.Integer, Whitespace)),
90
+ (r'\S+', Literal),
91
+ ],
92
+ 'multiple-simple-values': [
93
+ include('simple-value'),
94
+ (r'[\n]+', Whitespace),
95
+ ],
96
+ 'include': [
97
+ (r'([ \t]+)([^ \t\n]+)([ \t]+)([-\._a-zA-Z]+)([ \t]+)(;.*)?$',
98
+ bygroups(Whitespace, Comment.PreprocFile, Whitespace, Name, Whitespace, Comment.Single), '#pop'),
99
+ (r'([ \t]+)([^ \t\n]+)([ \t\n]+)$', bygroups(Whitespace, Comment.PreprocFile, Whitespace), '#pop'),
100
+ ],
101
+ "string": [
102
+ (r'\\"', String),
103
+ (r'"', String, "#pop"),
104
+ (r'[^"]+', String),
105
+ ]
106
+ }
107
+
108
+ def analyse_text(text):
109
+ return text.startswith("$ORIGIN")
venv/Lib/site-packages/pygments/lexers/dotnet.py ADDED
@@ -0,0 +1,886 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.dotnet
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for .net languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+ import re
11
+
12
+ from pygments.lexer import RegexLexer, DelegatingLexer, bygroups, include, \
13
+ using, this, default, words
14
+ from pygments.token import Punctuation, Text, Comment, Operator, Keyword, \
15
+ Name, String, Number, Literal, Other, Whitespace
16
+ from pygments.util import get_choice_opt
17
+ from pygments import unistring as uni
18
+
19
+ from pygments.lexers.html import XmlLexer
20
+
21
+ __all__ = ['CSharpLexer', 'NemerleLexer', 'BooLexer', 'VbNetLexer',
22
+ 'CSharpAspxLexer', 'VbNetAspxLexer', 'FSharpLexer', 'XppLexer']
23
+
24
+
25
+ class CSharpLexer(RegexLexer):
26
+ """
27
+ For C# source code.
28
+
29
+ Additional options accepted:
30
+
31
+ `unicodelevel`
32
+ Determines which Unicode characters this lexer allows for identifiers.
33
+ The possible values are:
34
+
35
+ * ``none`` -- only the ASCII letters and numbers are allowed. This
36
+ is the fastest selection.
37
+ * ``basic`` -- all Unicode characters from the specification except
38
+ category ``Lo`` are allowed.
39
+ * ``full`` -- all Unicode characters as specified in the C# specs
40
+ are allowed. Note that this means a considerable slowdown since the
41
+ ``Lo`` category has more than 40,000 characters in it!
42
+
43
+ The default value is ``basic``.
44
+
45
+ .. versionadded:: 0.8
46
+ """
47
+
48
+ name = 'C#'
49
+ url = 'https://docs.microsoft.com/en-us/dotnet/csharp/'
50
+ aliases = ['csharp', 'c#', 'cs']
51
+ filenames = ['*.cs']
52
+ mimetypes = ['text/x-csharp'] # inferred
53
+ version_added = ''
54
+
55
+ flags = re.MULTILINE | re.DOTALL
56
+
57
+ # for the range of allowed unicode characters in identifiers, see
58
+ # http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
59
+
60
+ levels = {
61
+ 'none': r'@?[_a-zA-Z]\w*',
62
+ 'basic': ('@?[_' + uni.combine('Lu', 'Ll', 'Lt', 'Lm', 'Nl') + ']' +
63
+ '[' + uni.combine('Lu', 'Ll', 'Lt', 'Lm', 'Nl', 'Nd', 'Pc',
64
+ 'Cf', 'Mn', 'Mc') + ']*'),
65
+ 'full': ('@?(?:_|[^' +
66
+ uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl') + '])' +
67
+ '[^' + uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl',
68
+ 'Nd', 'Pc', 'Cf', 'Mn', 'Mc') + ']*'),
69
+ }
70
+
71
+ tokens = {}
72
+ token_variants = True
73
+
74
+ for levelname, cs_ident in levels.items():
75
+ tokens[levelname] = {
76
+ 'root': [
77
+ include('numbers'),
78
+ # method names
79
+ (r'^([ \t]*)((?:' + cs_ident + r'(?:\[\])?\s+)+?)' # return type
80
+ r'(' + cs_ident + ')' # method name
81
+ r'(\s*)(\()', # signature start
82
+ bygroups(Whitespace, using(this), Name.Function, Whitespace,
83
+ Punctuation)),
84
+ (r'^(\s*)(\[.*?\])', bygroups(Whitespace, Name.Attribute)),
85
+ (r'[^\S\n]+', Whitespace),
86
+ (r'(\\)(\n)', bygroups(Text, Whitespace)), # line continuation
87
+ (r'//.*?\n', Comment.Single),
88
+ (r'/[*].*?[*]/', Comment.Multiline),
89
+ (r'\n', Whitespace),
90
+ (words((
91
+ '>>>=', '>>=', '<<=', '<=', '>=', '+=', '-=', '*=', '/=',
92
+ '%=', '&=', '|=', '^=', '??=', '=>', '??', '?.', '!=', '==',
93
+ '&&', '||', '>>>', '>>', '<<', '++', '--', '+', '-', '*',
94
+ '/', '%', '&', '|', '^', '<', '>', '?', '!', '~', '=',
95
+ )), Operator),
96
+ (r'=~|!=|==|<<|>>|[-+/*%=<>&^|]', Operator),
97
+ (r'[()\[\];:,.]', Punctuation),
98
+ (r'[{}]', Punctuation),
99
+ (r'\$*"{3,}.*?"{3,}', String),
100
+ (r'(?:\$@|@\$)"(""|[^"])*"', String),
101
+ (r'@"(""|[^"])*"', String),
102
+ (r'\$?"(\\\\|\\[^\\]|[^"\\\n])*["\n]', String),
103
+ (r"'\\.'|'[^\\]'", String.Char),
104
+ (r"[0-9]+(\.[0-9]*)?([eE][+-][0-9]+)?"
105
+ r"[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?", Number),
106
+ (r'(#)([ \t]*)(if|endif|else|elif|define|undef|'
107
+ r'line|error|warning|region|endregion|pragma)\b(.*?)(\n)',
108
+ bygroups(Comment.Preproc, Whitespace, Comment.Preproc,
109
+ Comment.Preproc, Whitespace)),
110
+ (r'\b(extern)(\s+)(alias)\b', bygroups(Keyword, Whitespace,
111
+ Keyword)),
112
+ (words((
113
+ 'abstract', 'as', 'async', 'await', 'base', 'break', 'by',
114
+ 'case', 'catch', 'checked', 'const', 'continue', 'default',
115
+ 'delegate', 'do', 'else', 'enum', 'event', 'explicit',
116
+ 'extern', 'false', 'finally', 'fixed', 'for', 'foreach',
117
+ 'goto', 'if', 'implicit', 'in', 'interface', 'internal',
118
+ 'is', 'let', 'lock', 'new', 'null', 'on', 'operator',
119
+ 'out', 'override', 'params', 'private', 'protected',
120
+ 'public', 'readonly', 'ref', 'return', 'sealed', 'sizeof',
121
+ 'stackalloc', 'static', 'switch', 'this', 'throw', 'true',
122
+ 'try', 'typeof', 'unchecked', 'unsafe', 'virtual', 'void',
123
+ 'while', 'get', 'set', 'new', 'partial', 'yield', 'add',
124
+ 'remove', 'value', 'alias', 'ascending', 'descending',
125
+ 'from', 'group', 'into', 'orderby', 'select', 'thenby',
126
+ 'where', 'join', 'equals', 'record', 'allows',
127
+ 'and', 'init', 'managed', 'nameof', 'nint', 'not',
128
+ 'notnull', 'nuint', 'or', 'scoped', 'unmanaged', 'when',
129
+ 'with'
130
+ ), suffix=r'\b'), Keyword),
131
+ # version 1: assumes that 'file' is the only contextual keyword
132
+ # that is a class modifier
133
+ (r'(file)(\s+)(record|class|abstract|enum|new|sealed|static)\b',
134
+ bygroups(Keyword, Whitespace, Keyword)),
135
+ (r'(global)(::)', bygroups(Keyword, Punctuation)),
136
+ (r'(bool|byte|char|decimal|double|dynamic|float|int|long|object|'
137
+ r'sbyte|short|string|uint|ulong|ushort|var)\b\??', Keyword.Type),
138
+ (r'(class|struct|union)(\s+)', bygroups(Keyword, Whitespace), 'class'),
139
+ (r'(namespace|using)(\s+)', bygroups(Keyword, Whitespace), 'namespace'),
140
+ (cs_ident, Name),
141
+ ],
142
+ 'numbers_int': [
143
+ (r"0[xX][0-9a-fA-F]+(([uU][lL]?)|[lL][uU]?)?", Number.Hex),
144
+ (r"0[bB][01]+(([uU][lL]?)|[lL][uU]?)?", Number.Bin),
145
+ (r"[0-9]+(([uU][lL]?)|[lL][uU]?)?", Number.Integer),
146
+ ],
147
+ 'numbers_float': [
148
+ (r"([0-9]+\.[0-9]+([eE][+-]?[0-9]+)?[fFdDmM]?)|"
149
+ r"(\.[0-9]+([eE][+-]?[0-9]+)?[fFdDmM]?)|"
150
+ r"([0-9]+([eE][+-]?[0-9]+)[fFdDmM]?)|"
151
+ r"([0-9]+[fFdDmM])", Number.Float),
152
+ ],
153
+ 'numbers': [
154
+ include('numbers_float'),
155
+ include('numbers_int'),
156
+ ],
157
+ 'class': [
158
+ (cs_ident, Name.Class, '#pop'),
159
+ default('#pop'),
160
+ ],
161
+ 'namespace': [
162
+ (r'(?=\()', Text, '#pop'), # using (resource)
163
+ ('(' + cs_ident + r'|\.)+', Name.Namespace, '#pop'),
164
+ ]
165
+ }
166
+
167
+ def __init__(self, **options):
168
+ level = get_choice_opt(options, 'unicodelevel', list(self.tokens), 'basic')
169
+ if level not in self._all_tokens:
170
+ # compile the regexes now
171
+ self._tokens = self.__class__.process_tokendef(level)
172
+ else:
173
+ self._tokens = self._all_tokens[level]
174
+
175
+ RegexLexer.__init__(self, **options)
176
+
177
+
178
+ class NemerleLexer(RegexLexer):
179
+ """
180
+ For Nemerle source code.
181
+
182
+ Additional options accepted:
183
+
184
+ `unicodelevel`
185
+ Determines which Unicode characters this lexer allows for identifiers.
186
+ The possible values are:
187
+
188
+ * ``none`` -- only the ASCII letters and numbers are allowed. This
189
+ is the fastest selection.
190
+ * ``basic`` -- all Unicode characters from the specification except
191
+ category ``Lo`` are allowed.
192
+ * ``full`` -- all Unicode characters as specified in the C# specs
193
+ are allowed. Note that this means a considerable slowdown since the
194
+ ``Lo`` category has more than 40,000 characters in it!
195
+
196
+ The default value is ``basic``.
197
+ """
198
+
199
+ name = 'Nemerle'
200
+ url = 'http://nemerle.org'
201
+ aliases = ['nemerle']
202
+ filenames = ['*.n']
203
+ mimetypes = ['text/x-nemerle'] # inferred
204
+ version_added = '1.5'
205
+
206
+ flags = re.MULTILINE | re.DOTALL
207
+
208
+ # for the range of allowed unicode characters in identifiers, see
209
+ # http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
210
+
211
+ levels = {
212
+ 'none': r'@?[_a-zA-Z]\w*',
213
+ 'basic': ('@?[_' + uni.combine('Lu', 'Ll', 'Lt', 'Lm', 'Nl') + ']' +
214
+ '[' + uni.combine('Lu', 'Ll', 'Lt', 'Lm', 'Nl', 'Nd', 'Pc',
215
+ 'Cf', 'Mn', 'Mc') + ']*'),
216
+ 'full': ('@?(?:_|[^' +
217
+ uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl') + '])' +
218
+ '[^' + uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl',
219
+ 'Nd', 'Pc', 'Cf', 'Mn', 'Mc') + ']*'),
220
+ }
221
+
222
+ tokens = {}
223
+ token_variants = True
224
+
225
+ for levelname, cs_ident in levels.items():
226
+ tokens[levelname] = {
227
+ 'root': [
228
+ # method names
229
+ (r'^([ \t]*)((?:' + cs_ident + r'(?:\[\])?\s+)+?)' # return type
230
+ r'(' + cs_ident + ')' # method name
231
+ r'(\s*)(\()', # signature start
232
+ bygroups(Whitespace, using(this), Name.Function, Whitespace, \
233
+ Punctuation)),
234
+ (r'^(\s*)(\[.*?\])', bygroups(Whitespace, Name.Attribute)),
235
+ (r'[^\S\n]+', Whitespace),
236
+ (r'(\\)(\n)', bygroups(Text, Whitespace)), # line continuation
237
+ (r'//.*?\n', Comment.Single),
238
+ (r'/[*].*?[*]/', Comment.Multiline),
239
+ (r'\n', Whitespace),
240
+ (r'(\$)(\s*)(")', bygroups(String, Whitespace, String),
241
+ 'splice-string'),
242
+ (r'(\$)(\s*)(<#)', bygroups(String, Whitespace, String),
243
+ 'splice-string2'),
244
+ (r'<#', String, 'recursive-string'),
245
+
246
+ (r'(<\[)(\s*)(' + cs_ident + ':)?',
247
+ bygroups(Keyword, Whitespace, Keyword)),
248
+ (r'\]\>', Keyword),
249
+
250
+ # quasiquotation only
251
+ (r'\$' + cs_ident, Name),
252
+ (r'(\$)(\()', bygroups(Name, Punctuation),
253
+ 'splice-string-content'),
254
+
255
+ (r'[~!%^&*()+=|\[\]:;,.<>/?-]', Punctuation),
256
+ (r'[{}]', Punctuation),
257
+ (r'@"(""|[^"])*"', String),
258
+ (r'"(\\\\|\\[^\\]|[^"\\\n])*["\n]', String),
259
+ (r"'\\.'|'[^\\]'", String.Char),
260
+ (r"0[xX][0-9a-fA-F]+[Ll]?", Number),
261
+ (r"[0-9](\.[0-9]*)?([eE][+-][0-9]+)?[flFLdD]?", Number),
262
+ (r'(#)([ \t]*)(if|endif|else|elif|define|undef|'
263
+ r'line|error|warning|region|endregion|pragma)\b',
264
+ bygroups(Comment.Preproc, Whitespace, Comment.Preproc), 'preproc'),
265
+ (r'\b(extern)(\s+)(alias)\b', bygroups(Keyword, Whitespace, Keyword)),
266
+ (words(('abstract', 'and', 'as', 'base', 'catch', 'def', 'delegate',
267
+ 'enum', 'event', 'extern', 'false',
268
+ 'finally', 'fun', 'implements', 'interface',
269
+ 'internal', 'is', 'macro', 'match',
270
+ 'matches', 'module', 'mutable', 'new',
271
+ 'null', 'out', 'override', 'params',
272
+ 'partial', 'private', 'protected', 'public',
273
+ 'ref', 'sealed', 'static', 'syntax', 'this',
274
+ 'throw', 'true', 'try', 'type', 'typeof',
275
+ 'virtual', 'volatile', 'when', 'where',
276
+ 'with', 'assert', 'assert2', 'async',
277
+ 'break', 'checked', 'continue', 'do',
278
+ 'else', 'ensures', 'for', 'foreach', 'if',
279
+ 'late', 'lock', 'new', 'nolate',
280
+ 'otherwise', 'regexp', 'repeat', 'requires',
281
+ 'return', 'surroundwith', 'unchecked',
282
+ 'unless', 'using', 'while', 'yield'), suffix=r'\b'), Keyword),
283
+ (r'(global)(::)', bygroups(Keyword, Punctuation)),
284
+ (r'(bool|byte|char|decimal|double|float|int|long|object|sbyte|'
285
+ r'short|string|uint|ulong|ushort|void|array|list)\b\??',
286
+ Keyword.Type),
287
+ (r'(:>?)(\s*)(' + cs_ident + r'\??)',
288
+ bygroups(Punctuation, Whitespace, Keyword.Type)),
289
+ (r'(class|struct|variant|module)(\s+)',
290
+ bygroups(Keyword, Whitespace), 'class'),
291
+ (r'(namespace|using)(\s+)', bygroups(Keyword, Whitespace),
292
+ 'namespace'),
293
+ (cs_ident, Name),
294
+ ],
295
+ 'class': [
296
+ (cs_ident, Name.Class, '#pop')
297
+ ],
298
+ 'preproc': [
299
+ (r'\w+', Comment.Preproc),
300
+ (r'[ \t]+', Whitespace),
301
+ (r'\n', Whitespace, '#pop')
302
+ ],
303
+ 'namespace': [
304
+ (r'(?=\()', Text, '#pop'), # using (resource)
305
+ ('(' + cs_ident + r'|\.)+', Name.Namespace, '#pop')
306
+ ],
307
+ 'splice-string': [
308
+ (r'[^"$]', String),
309
+ (r'\$' + cs_ident, Name),
310
+ (r'(\$)(\()', bygroups(Name, Punctuation),
311
+ 'splice-string-content'),
312
+ (r'\\"', String),
313
+ (r'"', String, '#pop')
314
+ ],
315
+ 'splice-string2': [
316
+ (r'[^#<>$]', String),
317
+ (r'\$' + cs_ident, Name),
318
+ (r'(\$)(\()', bygroups(Name, Punctuation),
319
+ 'splice-string-content'),
320
+ (r'<#', String, '#push'),
321
+ (r'#>', String, '#pop')
322
+ ],
323
+ 'recursive-string': [
324
+ (r'[^#<>]', String),
325
+ (r'<#', String, '#push'),
326
+ (r'#>', String, '#pop')
327
+ ],
328
+ 'splice-string-content': [
329
+ (r'if|match', Keyword),
330
+ (r'[~!%^&*+=|\[\]:;,.<>/?-\\"$ ]', Punctuation),
331
+ (cs_ident, Name),
332
+ (r'\d+', Number),
333
+ (r'\(', Punctuation, '#push'),
334
+ (r'\)', Punctuation, '#pop')
335
+ ]
336
+ }
337
+
338
+ def __init__(self, **options):
339
+ level = get_choice_opt(options, 'unicodelevel', list(self.tokens),
340
+ 'basic')
341
+ if level not in self._all_tokens:
342
+ # compile the regexes now
343
+ self._tokens = self.__class__.process_tokendef(level)
344
+ else:
345
+ self._tokens = self._all_tokens[level]
346
+
347
+ RegexLexer.__init__(self, **options)
348
+
349
+ def analyse_text(text):
350
+ """Nemerle is quite similar to Python, but @if is relatively uncommon
351
+ elsewhere."""
352
+ result = 0
353
+
354
+ if '@if' in text:
355
+ result += 0.1
356
+
357
+ return result
358
+
359
+
360
+ class BooLexer(RegexLexer):
361
+ """
362
+ For Boo source code.
363
+ """
364
+
365
+ name = 'Boo'
366
+ url = 'https://github.com/boo-lang/boo'
367
+ aliases = ['boo']
368
+ filenames = ['*.boo']
369
+ mimetypes = ['text/x-boo']
370
+ version_added = ''
371
+
372
+ tokens = {
373
+ 'root': [
374
+ (r'\s+', Whitespace),
375
+ (r'(#|//).*$', Comment.Single),
376
+ (r'/[*]', Comment.Multiline, 'comment'),
377
+ (r'[]{}:(),.;[]', Punctuation),
378
+ (r'(\\)(\n)', bygroups(Text, Whitespace)),
379
+ (r'\\', Text),
380
+ (r'(in|is|and|or|not)\b', Operator.Word),
381
+ (r'/(\\\\|\\[^\\]|[^/\\\s])/', String.Regex),
382
+ (r'@/(\\\\|\\[^\\]|[^/\\])*/', String.Regex),
383
+ (r'=~|!=|==|<<|>>|[-+/*%=<>&^|]', Operator),
384
+ (words(('as', 'abstract', 'callable', 'constructor', 'destructor',
385
+ 'do', 'import', 'enum', 'event', 'final',
386
+ 'get', 'interface', 'internal', 'of',
387
+ 'override', 'partial', 'private',
388
+ 'protected', 'public', 'return', 'set',
389
+ 'static', 'struct', 'transient', 'virtual',
390
+ 'yield', 'super', 'and', 'break', 'cast',
391
+ 'continue', 'elif', 'else', 'ensure',
392
+ 'except', 'for', 'given', 'goto', 'if',
393
+ 'in', 'is', 'isa', 'not', 'or', 'otherwise',
394
+ 'pass', 'raise', 'ref', 'try', 'unless',
395
+ 'when', 'while', 'from'), suffix=r'\b'), Keyword),
396
+ (r'def(?=\s+\(.*?\))', Keyword),
397
+ (r'(def)(\s+)', bygroups(Keyword, Whitespace), 'funcname'),
398
+ (r'(class)(\s+)', bygroups(Keyword, Whitespace), 'classname'),
399
+ (r'(namespace)(\s+)', bygroups(Keyword, Whitespace), 'namespace'),
400
+ (r'(?<!\.)(true|false|null|self|__eval__|__switch__|array|'
401
+ r'assert|checked|enumerate|filter|getter|len|lock|map|'
402
+ r'matrix|max|min|normalArrayIndexing|print|property|range|'
403
+ r'rawArrayIndexing|required|typeof|unchecked|using|'
404
+ r'yieldAll|zip)\b', Name.Builtin),
405
+ (r'"""(\\\\|\\"|.*?)"""', String.Double),
406
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
407
+ (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),
408
+ (r'[a-zA-Z_]\w*', Name),
409
+ (r'(\d+\.\d*|\d*\.\d+)([fF][+-]?[0-9]+)?', Number.Float),
410
+ (r'[0-9][0-9.]*(ms?|d|h|s)', Number),
411
+ (r'0\d+', Number.Oct),
412
+ (r'0x[a-fA-F0-9]+', Number.Hex),
413
+ (r'\d+L', Number.Integer.Long),
414
+ (r'\d+', Number.Integer),
415
+ ],
416
+ 'comment': [
417
+ ('/[*]', Comment.Multiline, '#push'),
418
+ ('[*]/', Comment.Multiline, '#pop'),
419
+ ('[^/*]', Comment.Multiline),
420
+ ('[*/]', Comment.Multiline)
421
+ ],
422
+ 'funcname': [
423
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop')
424
+ ],
425
+ 'classname': [
426
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop')
427
+ ],
428
+ 'namespace': [
429
+ (r'[a-zA-Z_][\w.]*', Name.Namespace, '#pop')
430
+ ]
431
+ }
432
+
433
+
434
+ class VbNetLexer(RegexLexer):
435
+ """
436
+ For Visual Basic.NET source code.
437
+ Also LibreOffice Basic, OpenOffice Basic, and StarOffice Basic.
438
+ """
439
+
440
+ name = 'VB.net'
441
+ url = 'https://docs.microsoft.com/en-us/dotnet/visual-basic/'
442
+ aliases = ['vb.net', 'vbnet', 'lobas', 'oobas', 'sobas', 'visual-basic', 'visualbasic']
443
+ filenames = ['*.vb', '*.bas']
444
+ mimetypes = ['text/x-vbnet', 'text/x-vba'] # (?)
445
+ version_added = ''
446
+
447
+ uni_name = '[_' + uni.combine('Ll', 'Lt', 'Lm', 'Nl') + ']' + \
448
+ '[' + uni.combine('Ll', 'Lt', 'Lm', 'Nl', 'Nd', 'Pc',
449
+ 'Cf', 'Mn', 'Mc') + ']*'
450
+
451
+ flags = re.MULTILINE | re.IGNORECASE
452
+ tokens = {
453
+ 'root': [
454
+ (r'^\s*<.*?>', Name.Attribute),
455
+ (r'\s+', Whitespace),
456
+ (r'\n', Whitespace),
457
+ (r'(rem\b.*?)(\n)', bygroups(Comment, Whitespace)),
458
+ (r"('.*?)(\n)", bygroups(Comment, Whitespace)),
459
+ (r'#If\s.*?\sThen|#ElseIf\s.*?\sThen|#Else|#End\s+If|#Const|'
460
+ r'#ExternalSource.*?\n|#End\s+ExternalSource|'
461
+ r'#Region.*?\n|#End\s+Region|#ExternalChecksum',
462
+ Comment.Preproc),
463
+ (r'[(){}!#,.:]', Punctuation),
464
+ (r'(Option)(\s+)(Strict|Explicit|Compare)(\s+)'
465
+ r'(On|Off|Binary|Text)',
466
+ bygroups(Keyword.Declaration, Whitespace, Keyword.Declaration,
467
+ Whitespace, Keyword.Declaration)),
468
+ (words((
469
+ 'AddHandler', 'Alias', 'ByRef', 'ByVal', 'Call', 'Case',
470
+ 'Catch', 'CBool', 'CByte', 'CChar', 'CDate', 'CDec', 'CDbl',
471
+ 'CInt', 'CLng', 'CObj', 'Continue', 'CSByte', 'CShort', 'CSng',
472
+ 'CStr', 'CType', 'CUInt', 'CULng', 'CUShort', 'Declare',
473
+ 'Default', 'Delegate', 'DirectCast', 'Do', 'Each', 'Else',
474
+ 'ElseIf', 'EndIf', 'Erase', 'Error', 'Event', 'Exit', 'False',
475
+ 'Finally', 'For', 'Friend', 'Get', 'Global', 'GoSub', 'GoTo',
476
+ 'Handles', 'If', 'Implements', 'Inherits', 'Interface', 'Let',
477
+ 'Lib', 'Loop', 'Me', 'MustInherit', 'MustOverride', 'MyBase',
478
+ 'MyClass', 'Narrowing', 'New', 'Next', 'Not', 'Nothing',
479
+ 'NotInheritable', 'NotOverridable', 'Of', 'On', 'Operator',
480
+ 'Option', 'Optional', 'Overloads', 'Overridable', 'Overrides',
481
+ 'ParamArray', 'Partial', 'Private', 'Protected', 'Public',
482
+ 'RaiseEvent', 'ReadOnly', 'ReDim', 'RemoveHandler', 'Resume',
483
+ 'Return', 'Select', 'Set', 'Shadows', 'Shared', 'Single',
484
+ 'Static', 'Step', 'Stop', 'SyncLock', 'Then', 'Throw', 'To',
485
+ 'True', 'Try', 'TryCast', 'Wend', 'Using', 'When', 'While',
486
+ 'Widening', 'With', 'WithEvents', 'WriteOnly'),
487
+ prefix=r'(?<!\.)', suffix=r'\b'), Keyword),
488
+ (r'(?<!\.)End\b', Keyword, 'end'),
489
+ (r'(?<!\.)(Dim|Const)\b', Keyword, 'dim'),
490
+ (r'(?<!\.)(Function|Sub|Property)(\s+)',
491
+ bygroups(Keyword, Whitespace), 'funcname'),
492
+ (r'(?<!\.)(Class|Structure|Enum)(\s+)',
493
+ bygroups(Keyword, Whitespace), 'classname'),
494
+ (r'(?<!\.)(Module|Namespace|Imports)(\s+)',
495
+ bygroups(Keyword, Whitespace), 'namespace'),
496
+ (r'(?<!\.)(Boolean|Byte|Char|Date|Decimal|Double|Integer|Long|'
497
+ r'Object|SByte|Short|Single|String|Variant|UInteger|ULong|'
498
+ r'UShort)\b', Keyword.Type),
499
+ (r'(?<!\.)(AddressOf|And|AndAlso|As|GetType|In|Is|IsNot|Like|Mod|'
500
+ r'Or|OrElse|TypeOf|Xor)\b', Operator.Word),
501
+ (r'&=|[*]=|/=|\\=|\^=|\+=|-=|<<=|>>=|<<|>>|:=|'
502
+ r'<=|>=|<>|[-&*/\\^+=<>\[\]]',
503
+ Operator),
504
+ ('"', String, 'string'),
505
+ (r'(_)(\n)', bygroups(Text, Whitespace)), # Line continuation (must be before Name)
506
+ (uni_name + '[%&@!#$]?', Name),
507
+ ('#.*?#', Literal.Date),
508
+ (r'(\d+\.\d*|\d*\.\d+)(F[+-]?[0-9]+)?', Number.Float),
509
+ (r'\d+([SILDFR]|US|UI|UL)?', Number.Integer),
510
+ (r'&H[0-9a-f]+([SILDFR]|US|UI|UL)?', Number.Integer),
511
+ (r'&O[0-7]+([SILDFR]|US|UI|UL)?', Number.Integer),
512
+ ],
513
+ 'string': [
514
+ (r'""', String),
515
+ (r'"C?', String, '#pop'),
516
+ (r'[^"]+', String),
517
+ ],
518
+ 'dim': [
519
+ (uni_name, Name.Variable, '#pop'),
520
+ default('#pop'), # any other syntax
521
+ ],
522
+ 'funcname': [
523
+ (uni_name, Name.Function, '#pop'),
524
+ ],
525
+ 'classname': [
526
+ (uni_name, Name.Class, '#pop'),
527
+ ],
528
+ 'namespace': [
529
+ (uni_name, Name.Namespace),
530
+ (r'\.', Name.Namespace),
531
+ default('#pop'),
532
+ ],
533
+ 'end': [
534
+ (r'\s+', Whitespace),
535
+ (words(('Function', 'Sub', 'Property', 'Class', 'Structure', 'Enum',
536
+ 'Module', 'Namespace'), suffix=r'\b'),
537
+ Keyword, '#pop'),
538
+ default('#pop'),
539
+ ]
540
+ }
541
+
542
+ def analyse_text(text):
543
+ if re.search(r'^\s*(#If|Module|Namespace)', text, re.MULTILINE):
544
+ return 0.5
545
+
546
+
547
+ class GenericAspxLexer(RegexLexer):
548
+ """
549
+ Lexer for ASP.NET pages.
550
+ """
551
+
552
+ name = 'aspx-gen'
553
+ filenames = []
554
+ mimetypes = []
555
+ url = 'https://dotnet.microsoft.com/en-us/apps/aspnet'
556
+
557
+ flags = re.DOTALL
558
+
559
+ tokens = {
560
+ 'root': [
561
+ (r'(<%[@=#]?)(.*?)(%>)', bygroups(Name.Tag, Other, Name.Tag)),
562
+ (r'(<script.*?>)(.*?)(</script>)', bygroups(using(XmlLexer),
563
+ Other,
564
+ using(XmlLexer))),
565
+ (r'(.+?)(?=<)', using(XmlLexer)),
566
+ (r'.+', using(XmlLexer)),
567
+ ],
568
+ }
569
+
570
+
571
+ # TODO support multiple languages within the same source file
572
+ class CSharpAspxLexer(DelegatingLexer):
573
+ """
574
+ Lexer for highlighting C# within ASP.NET pages.
575
+ """
576
+
577
+ name = 'aspx-cs'
578
+ aliases = ['aspx-cs']
579
+ filenames = ['*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd']
580
+ mimetypes = []
581
+ url = 'https://dotnet.microsoft.com/en-us/apps/aspnet'
582
+ version_added = ''
583
+
584
+ def __init__(self, **options):
585
+ super().__init__(CSharpLexer, GenericAspxLexer, **options)
586
+
587
+ def analyse_text(text):
588
+ if re.search(r'Page\s*Language="C#"', text, re.I) is not None:
589
+ return 0.2
590
+ elif re.search(r'script[^>]+language=["\']C#', text, re.I) is not None:
591
+ return 0.15
592
+
593
+
594
+ class VbNetAspxLexer(DelegatingLexer):
595
+ """
596
+ Lexer for highlighting Visual Basic.net within ASP.NET pages.
597
+ """
598
+
599
+ name = 'aspx-vb'
600
+ aliases = ['aspx-vb']
601
+ filenames = ['*.aspx', '*.asax', '*.ascx', '*.ashx', '*.asmx', '*.axd']
602
+ mimetypes = []
603
+ url = 'https://dotnet.microsoft.com/en-us/apps/aspnet'
604
+ version_added = ''
605
+
606
+ def __init__(self, **options):
607
+ super().__init__(VbNetLexer, GenericAspxLexer, **options)
608
+
609
+ def analyse_text(text):
610
+ if re.search(r'Page\s*Language="Vb"', text, re.I) is not None:
611
+ return 0.2
612
+ elif re.search(r'script[^>]+language=["\']vb', text, re.I) is not None:
613
+ return 0.15
614
+
615
+
616
+ # Very close to functional.OcamlLexer
617
+ class FSharpLexer(RegexLexer):
618
+ """
619
+ For the F# language (version 3.0).
620
+ """
621
+
622
+ name = 'F#'
623
+ url = 'https://fsharp.org/'
624
+ aliases = ['fsharp', 'f#']
625
+ filenames = ['*.fs', '*.fsi', '*.fsx']
626
+ mimetypes = ['text/x-fsharp']
627
+ version_added = '1.5'
628
+
629
+ keywords = [
630
+ 'abstract', 'as', 'assert', 'base', 'begin', 'class', 'default',
631
+ 'delegate', 'do!', 'do', 'done', 'downcast', 'downto', 'elif', 'else',
632
+ 'end', 'exception', 'extern', 'false', 'finally', 'for', 'function',
633
+ 'fun', 'global', 'if', 'inherit', 'inline', 'interface', 'internal',
634
+ 'in', 'lazy', 'let!', 'let', 'match', 'member', 'module', 'mutable',
635
+ 'namespace', 'new', 'null', 'of', 'open', 'override', 'private', 'public',
636
+ 'rec', 'return!', 'return', 'select', 'static', 'struct', 'then', 'to',
637
+ 'true', 'try', 'type', 'upcast', 'use!', 'use', 'val', 'void', 'when',
638
+ 'while', 'with', 'yield!', 'yield',
639
+ ]
640
+ # Reserved words; cannot hurt to color them as keywords too.
641
+ keywords += [
642
+ 'atomic', 'break', 'checked', 'component', 'const', 'constraint',
643
+ 'constructor', 'continue', 'eager', 'event', 'external', 'fixed',
644
+ 'functor', 'include', 'method', 'mixin', 'object', 'parallel',
645
+ 'process', 'protected', 'pure', 'sealed', 'tailcall', 'trait',
646
+ 'virtual', 'volatile',
647
+ ]
648
+ keyopts = [
649
+ '!=', '#', '&&', '&', r'\(', r'\)', r'\*', r'\+', ',', r'-\.',
650
+ '->', '-', r'\.\.', r'\.', '::', ':=', ':>', ':', ';;', ';', '<-',
651
+ r'<\]', '<', r'>\]', '>', r'\?\?', r'\?', r'\[<', r'\[\|', r'\[', r'\]',
652
+ '_', '`', r'\{', r'\|\]', r'\|', r'\}', '~', '<@@', '<@', '=', '@>', '@@>',
653
+ ]
654
+
655
+ operators = r'[!$%&*+\./:<=>?@^|~-]'
656
+ word_operators = ['and', 'or', 'not']
657
+ prefix_syms = r'[!?~]'
658
+ infix_syms = r'[=<>@^|&+\*/$%-]'
659
+ primitives = [
660
+ 'sbyte', 'byte', 'char', 'nativeint', 'unativeint', 'float32', 'single',
661
+ 'float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32',
662
+ 'uint32', 'int64', 'uint64', 'decimal', 'unit', 'bool', 'string',
663
+ 'list', 'exn', 'obj', 'enum',
664
+ ]
665
+
666
+ # See http://msdn.microsoft.com/en-us/library/dd233181.aspx and/or
667
+ # http://fsharp.org/about/files/spec.pdf for reference. Good luck.
668
+
669
+ tokens = {
670
+ 'escape-sequence': [
671
+ (r'\\[\\"\'ntbrafv]', String.Escape),
672
+ (r'\\[0-9]{3}', String.Escape),
673
+ (r'\\u[0-9a-fA-F]{4}', String.Escape),
674
+ (r'\\U[0-9a-fA-F]{8}', String.Escape),
675
+ ],
676
+ 'root': [
677
+ (r'\s+', Whitespace),
678
+ (r'\(\)|\[\]', Name.Builtin.Pseudo),
679
+ (r'\b(?<!\.)([A-Z][\w\']*)(?=\s*\.)',
680
+ Name.Namespace, 'dotted'),
681
+ (r'\b([A-Z][\w\']*)', Name),
682
+ (r'(///.*?)(\n)', bygroups(String.Doc, Whitespace)),
683
+ (r'(//.*?)(\n)', bygroups(Comment.Single, Whitespace)),
684
+ (r'\(\*(?!\))', Comment, 'comment'),
685
+
686
+ (r'@"', String, 'lstring'),
687
+ (r'"""', String, 'tqs'),
688
+ (r'"', String, 'string'),
689
+
690
+ (r'\b(open|module)(\s+)([\w.]+)',
691
+ bygroups(Keyword, Whitespace, Name.Namespace)),
692
+ (r'\b(let!?)(\s+)(\w+)',
693
+ bygroups(Keyword, Whitespace, Name.Variable)),
694
+ (r'\b(type)(\s+)(\w+)',
695
+ bygroups(Keyword, Whitespace, Name.Class)),
696
+ (r'\b(member|override)(\s+)(\w+)(\.)(\w+)',
697
+ bygroups(Keyword, Whitespace, Name, Punctuation, Name.Function)),
698
+ (r'\b({})\b'.format('|'.join(keywords)), Keyword),
699
+ (r'``([^`\n\r\t]|`[^`\n\r\t])+``', Name),
700
+ (r'({})'.format('|'.join(keyopts)), Operator),
701
+ (rf'({infix_syms}|{prefix_syms})?{operators}', Operator),
702
+ (r'\b({})\b'.format('|'.join(word_operators)), Operator.Word),
703
+ (r'\b({})\b'.format('|'.join(primitives)), Keyword.Type),
704
+ (r'(#)([ \t]*)(if|endif|else|line|nowarn|light|\d+)\b(.*?)(\n)',
705
+ bygroups(Comment.Preproc, Whitespace, Comment.Preproc,
706
+ Comment.Preproc, Whitespace)),
707
+
708
+ (r"[^\W\d][\w']*", Name),
709
+
710
+ (r'\d[\d_]*[uU]?[yslLnQRZINGmM]?', Number.Integer),
711
+ (r'0[xX][\da-fA-F][\da-fA-F_]*[uU]?[yslLn]?[fF]?', Number.Hex),
712
+ (r'0[oO][0-7][0-7_]*[uU]?[yslLn]?', Number.Oct),
713
+ (r'0[bB][01][01_]*[uU]?[yslLn]?', Number.Bin),
714
+ (r'-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)[fFmM]?',
715
+ Number.Float),
716
+
717
+ (r"'(?:(\\[\\\"'ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))'B?",
718
+ String.Char),
719
+ (r"'.'", String.Char),
720
+ (r"'", Keyword), # a stray quote is another syntax element
721
+
722
+ (r'@?"', String.Double, 'string'),
723
+
724
+ (r'[~?][a-z][\w\']*:', Name.Variable),
725
+ ],
726
+ 'dotted': [
727
+ (r'\s+', Whitespace),
728
+ (r'\.', Punctuation),
729
+ (r'[A-Z][\w\']*(?=\s*\.)', Name.Namespace),
730
+ (r'[A-Z][\w\']*', Name, '#pop'),
731
+ (r'[a-z_][\w\']*', Name, '#pop'),
732
+ # e.g. dictionary index access
733
+ default('#pop'),
734
+ ],
735
+ 'comment': [
736
+ (r'[^(*)@"]+', Comment),
737
+ (r'\(\*', Comment, '#push'),
738
+ (r'\*\)', Comment, '#pop'),
739
+ # comments cannot be closed within strings in comments
740
+ (r'@"', String, 'lstring'),
741
+ (r'"""', String, 'tqs'),
742
+ (r'"', String, 'string'),
743
+ (r'[(*)@]', Comment),
744
+ ],
745
+ 'string': [
746
+ (r'[^\\"]+', String),
747
+ include('escape-sequence'),
748
+ (r'\\\n', String),
749
+ (r'\n', String), # newlines are allowed in any string
750
+ (r'"B?', String, '#pop'),
751
+ ],
752
+ 'lstring': [
753
+ (r'[^"]+', String),
754
+ (r'\n', String),
755
+ (r'""', String),
756
+ (r'"B?', String, '#pop'),
757
+ ],
758
+ 'tqs': [
759
+ (r'[^"]+', String),
760
+ (r'\n', String),
761
+ (r'"""B?', String, '#pop'),
762
+ (r'"', String),
763
+ ],
764
+ }
765
+
766
+ def analyse_text(text):
767
+ """F# doesn't have that many unique features -- |> and <| are weak
768
+ indicators."""
769
+ result = 0
770
+ if '|>' in text:
771
+ result += 0.05
772
+ if '<|' in text:
773
+ result += 0.05
774
+
775
+ return result
776
+
777
+
778
+ class XppLexer(RegexLexer):
779
+
780
+ """
781
+ For X++ source code. This is based loosely on the CSharpLexer
782
+ """
783
+
784
+ name = 'X++'
785
+ url = 'https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/dev-ref/xpp-language-reference'
786
+ aliases = ['xpp', 'x++']
787
+ filenames = ['*.xpp']
788
+ version_added = '2.15'
789
+
790
+ flags = re.MULTILINE
791
+
792
+ XPP_CHARS = ('@?(?:_|[^' +
793
+ uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl') + '])' +
794
+ '[^' + uni.allexcept('Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl',
795
+ 'Nd', 'Pc', 'Cf', 'Mn', 'Mc') + ']*')
796
+ # Temporary, see
797
+ # https://github.com/thatch/regexlint/pull/49
798
+ XPP_CHARS = XPP_CHARS.replace('\x00', '\x01')
799
+
800
+ OPERATORS = (
801
+ '<=', '>=', '+=', '-=', '*=', '/=', '!=', '==',
802
+ '&&', '||', '>>', '<<', '++', '--', '+', '-', '*',
803
+ '/', '%', '&', '|', '^', '<', '>', '?', '!', '~', '=',
804
+ )
805
+ KEYWORDS = ('abstract','anytype','as','async','asc','at','avg','break','breakpoint','by','byref','case','catch',
806
+ 'changecompany','client','container','continue','count','crosscompany','default','delegate',
807
+ 'delete_from','desc','display','div','do','edit','else','element','eventhandler','exists','false','final',
808
+ 'firstfast','firstonly','firstonly10','firstonly100','firstonly1000','flush','for','forceliterals',
809
+ 'forcenestedloop','forceplaceholders','forceselectorder','forupdate','from','group','if','insert_recordset',
810
+ 'interface','is','join','like','maxof','minof','mod','new','next','nofetch','notexists','null','optimisticlock','order',
811
+ 'outer','pause','pessimisticlock','print','private','protected','public','repeatableread','retry','return',
812
+ 'reverse','select','server','setting','static','sum','super','switch','tablelock','this','throw','true','try','ttsabort','ttsbegin',
813
+ 'ttscommit','update_recordset','validtimestate','void','where','while','window')
814
+ RUNTIME_FUNCTIONS = ('_duration','abs','acos','any2Date','any2Enum','any2Guid','any2Int','any2Int64','any2Real','any2Str','anytodate',
815
+ 'anytoenum','anytoguid','anytoint','anytoint64','anytoreal','anytostr','asin','atan','beep','cTerm','char2Num','classIdGet',
816
+ 'corrFlagGet','corrFlagSet','cos','cosh','curExt','curUserId','date2Num','date2Str','datetime2Str','dayName','dayOfMth',
817
+ 'dayOfWk','dayOfYr','ddb','decRound','dg','dimOf','endMth','enum2str','exp','exp10','fV','fieldId2Name','fieldId2PName',
818
+ 'fieldName2Id','frac','funcName','getCurrentPartition','getCurrentPartitionRecId','getPrefix','guid2Str','idg','indexId2Name',
819
+ 'indexName2Id','int2Str','int642Str','intvMax','intvName','intvNo','intvNorm','log10','logN','match','max','min','mkDate','mthName',
820
+ 'mthOfYr','newGuid','nextMth','nextQtr','nextYr','num2Char','num2Date','num2Str','pmt','power','prevMth','prevQtr','prevYr',
821
+ 'prmIsDefault','pt','pv','rate','refPrintAll','round','runAs','sessionId','setPrefix','sin','sinh','sleep','sln','str2Date',
822
+ 'str2Datetime','str2Enum','str2Guid','str2Int','str2Int64','str2Num','str2Time','strAlpha','strCmp','strColSeq','strDel',
823
+ 'strFind','strFmt','strIns','strKeep','strLTrim','strLen','strLine','strLwr','strNFind','strPoke','strPrompt','strRTrim',
824
+ 'strRem','strRep','strScan','strUpr','subStr','syd','systemDateGet','systemDateSet','tableId2Name',
825
+ 'tableId2PName','tableName2Id','tan','tanh','term','time2Str','timeNow','today','trunc','typeOf','uint2Str','wkOfYr','year')
826
+ COMPILE_FUNCTIONS = ('attributeStr','classNum','classStr','configurationKeyNum','configurationKeyStr','dataEntityDataSourceStr','delegateStr',
827
+ 'dimensionHierarchyLevelStr','dimensionHierarchyStr','dimensionReferenceStr','dutyStr','enumCnt','enumLiteralStr','enumNum','enumStr',
828
+ 'extendedTypeNum','extendedTypeStr','fieldNum','fieldPName','fieldStr','formControlStr','formDataFieldStr','formDataSourceStr',
829
+ 'formMethodStr','formStr','identifierStr','indexNum','indexStr','licenseCodeNum','licenseCodeStr','literalStr','maxDate','maxInt',
830
+ 'measureStr','measurementStr','menuItemActionStr','menuItemDisplayStr','menuItemOutputStr','menuStr','methodStr','minInt','privilegeStr',
831
+ 'queryDatasourceStr','queryMethodStr','queryStr','reportStr','resourceStr','roleStr','ssrsReportStr','staticDelegateStr','staticMethodStr',
832
+ 'tableCollectionStr','tableFieldGroupStr','tableMethodStr','tableNum','tablePName','tableStaticMethodStr','tableStr','tileStr','varStr',
833
+ 'webActionItemStr','webDisplayContentItemStr','webFormStr','webMenuStr','webOutputContentItemStr','webReportStr','webSiteTempStr',
834
+ 'webStaticFileStr','webUrlItemStr','webWebPartStr','webletItemStr','webpageDefStr','websiteDefStr','workflowApprovalStr',
835
+ 'workflowCategoryStr','workflowTaskStr','workflowTypeStr')
836
+
837
+ tokens = {}
838
+
839
+ tokens = {
840
+ 'root': [
841
+ # method names
842
+ (r'(\s*)\b(else|if)\b([^\n])', bygroups(Whitespace, Keyword, using(this))), # ensure that if is not treated like a function
843
+ (r'^([ \t]*)((?:' + XPP_CHARS + r'(?:\[\])?\s+)+?)' # return type
844
+ r'(' + XPP_CHARS + ')' # method name
845
+ r'(\s*)(\()', # signature start
846
+ bygroups(Whitespace, using(this), Name.Function, Whitespace,
847
+ Punctuation)),
848
+ (r'^(\s*)(\[)([^\n]*?)(\])', bygroups(Whitespace, Name.Attribute, Name.Variable.Class, Name.Attribute)),
849
+ (r'[^\S\n]+', Whitespace),
850
+ (r'(\\)(\n)', bygroups(Text, Whitespace)), # line continuation
851
+ (r'//[^\n]*?\n', Comment.Single),
852
+ (r'/[*][^\n]*?[*]/', Comment.Multiline),
853
+ (r'\n', Whitespace),
854
+ (words(OPERATORS), Operator),
855
+ (r'=~|!=|==|<<|>>|[-+/*%=<>&^|]', Operator),
856
+ (r'[()\[\];:,.#@]', Punctuation),
857
+ (r'[{}]', Punctuation),
858
+ (r'@"(""|[^"])*"', String),
859
+ (r'\$?"(\\\\|\\[^\\]|[^"\\\n])*["\n]', String),
860
+ (r"'\\.'|'[^\\]'", String.Char),
861
+ (r"[0-9]+(\.[0-9]*)?([eE][+-][0-9]+)?"
862
+ r"[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?", Number),
863
+ (words(KEYWORDS, suffix=r'\b'), Keyword),
864
+ (r'(boolean|int|int64|str|real|guid|date)\b\??', Keyword.Type),
865
+ (r'(class|struct|extends|implements)(\s+)', bygroups(Keyword, Whitespace), 'class'),
866
+ (r'('+XPP_CHARS+')(::)', bygroups(Name.Variable.Class, Punctuation)),
867
+ (r'(\s*)(\w+)(\s+\w+(,|=)?[^\n]*;)', bygroups(Whitespace, Name.Variable.Class, using(this))), # declaration
868
+ # x++ specific function to get field should highlight the classname
869
+ (r'(fieldNum\()('+XPP_CHARS+r')(\s*,\s*)('+XPP_CHARS+r')(\s*\))',
870
+ bygroups(using(this), Name.Variable.Class, using(this), Name.Property, using(this))),
871
+ # x++ specific function to get table should highlight the classname
872
+ (r'(tableNum\()('+XPP_CHARS+r')(\s*\))',
873
+ bygroups(using(this), Name.Variable.Class, using(this))),
874
+ (words(RUNTIME_FUNCTIONS, suffix=r'(?=\()'), Name.Function.Magic),
875
+ (words(COMPILE_FUNCTIONS, suffix=r'(?=\()'), Name.Function.Magic),
876
+ (XPP_CHARS, Name),
877
+ ],
878
+ 'class': [
879
+ (XPP_CHARS, Name.Class, '#pop'),
880
+ default('#pop'),
881
+ ],
882
+ 'namespace': [
883
+ (r'(?=\()', Text, '#pop'), # using (resource)
884
+ ('(' + XPP_CHARS + r'|\.)+', Name.Namespace, '#pop'),
885
+ ]
886
+ }
venv/Lib/site-packages/pygments/lexers/dsls.py ADDED
@@ -0,0 +1,970 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.dsls
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for various domain-specific languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import ExtendedRegexLexer, RegexLexer, bygroups, words, \
14
+ include, default, this, using, combined
15
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
+ Number, Punctuation, Whitespace
17
+
18
+ __all__ = ['ProtoBufLexer', 'ZeekLexer', 'PuppetLexer', 'RslLexer',
19
+ 'MscgenLexer', 'VGLLexer', 'AlloyLexer', 'PanLexer',
20
+ 'CrmshLexer', 'ThriftLexer', 'FlatlineLexer', 'SnowballLexer']
21
+
22
+
23
+ class ProtoBufLexer(RegexLexer):
24
+ """
25
+ Lexer for Protocol Buffer definition files.
26
+ """
27
+
28
+ name = 'Protocol Buffer'
29
+ url = 'https://developers.google.com/protocol-buffers/'
30
+ aliases = ['protobuf', 'proto']
31
+ filenames = ['*.proto']
32
+ version_added = '1.4'
33
+
34
+ tokens = {
35
+ 'root': [
36
+ (r'[ \t]+', Whitespace),
37
+ (r'[,;{}\[\]()<>]', Punctuation),
38
+ (r'/(\\\n)?/(\n|[\s\S]*?[^\\]\n)', Comment.Single),
39
+ (r'/(\\\n)?\*[\s\S]*?\*(\\\n)?/', Comment.Multiline),
40
+ (words((
41
+ 'import', 'option', 'optional', 'required', 'repeated',
42
+ 'reserved', 'default', 'packed', 'ctype', 'extensions', 'to',
43
+ 'max', 'rpc', 'returns', 'oneof', 'syntax'), prefix=r'\b', suffix=r'\b'),
44
+ Keyword),
45
+ (words((
46
+ 'int32', 'int64', 'uint32', 'uint64', 'sint32', 'sint64',
47
+ 'fixed32', 'fixed64', 'sfixed32', 'sfixed64',
48
+ 'float', 'double', 'bool', 'string', 'bytes'), suffix=r'\b'),
49
+ Keyword.Type),
50
+ (r'(true|false)\b', Keyword.Constant),
51
+ (r'(package)(\s+)', bygroups(Keyword.Namespace, Whitespace), 'package'),
52
+ (r'(message|extend)(\s+)',
53
+ bygroups(Keyword.Declaration, Whitespace), 'message'),
54
+ (r'(enum|group|service)(\s+)',
55
+ bygroups(Keyword.Declaration, Whitespace), 'type'),
56
+ (r'\".*?\"', String),
57
+ (r'\'.*?\'', String),
58
+ (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*', Number.Float),
59
+ (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float),
60
+ (r'(\-?(inf|nan))\b', Number.Float),
61
+ (r'0x[0-9a-fA-F]+[LlUu]*', Number.Hex),
62
+ (r'0[0-7]+[LlUu]*', Number.Oct),
63
+ (r'\d+[LlUu]*', Number.Integer),
64
+ (r'[+-=]', Operator),
65
+ (r'([a-zA-Z_][\w.]*)([ \t]*)(=)',
66
+ bygroups(Name.Attribute, Whitespace, Operator)),
67
+ (r'[a-zA-Z_][\w.]*', Name),
68
+ ],
69
+ 'package': [
70
+ (r'[a-zA-Z_][\w\.]*', Name.Namespace, '#pop'),
71
+ default('#pop'),
72
+ ],
73
+ 'message': [
74
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop'),
75
+ default('#pop'),
76
+ ],
77
+ 'type': [
78
+ (r'[a-zA-Z_]\w*', Name, '#pop'),
79
+ default('#pop'),
80
+ ],
81
+ }
82
+
83
+
84
+ class ThriftLexer(RegexLexer):
85
+ """
86
+ For Thrift interface definitions.
87
+ """
88
+ name = 'Thrift'
89
+ url = 'https://thrift.apache.org/'
90
+ aliases = ['thrift']
91
+ filenames = ['*.thrift']
92
+ mimetypes = ['application/x-thrift']
93
+ version_added = '2.1'
94
+
95
+ tokens = {
96
+ 'root': [
97
+ include('whitespace'),
98
+ include('comments'),
99
+ (r'"', String.Double, combined('stringescape', 'dqs')),
100
+ (r'\'', String.Single, combined('stringescape', 'sqs')),
101
+ (r'(namespace)(\s+)',
102
+ bygroups(Keyword.Namespace, Whitespace), 'namespace'),
103
+ (r'(enum|union|struct|service|exception)(\s+)',
104
+ bygroups(Keyword.Declaration, Whitespace), 'class'),
105
+ (r'((?:(?:[^\W\d]|\$)[\w.\[\]$<>]*\s+)+?)' # return arguments
106
+ r'((?:[^\W\d]|\$)[\w$]*)' # method name
107
+ r'(\s*)(\()', # signature start
108
+ bygroups(using(this), Name.Function, Whitespace, Operator)),
109
+ include('keywords'),
110
+ include('numbers'),
111
+ (r'[&=]', Operator),
112
+ (r'[:;,{}()<>\[\]]', Punctuation),
113
+ (r'[a-zA-Z_](\.\w|\w)*', Name),
114
+ ],
115
+ 'whitespace': [
116
+ (r'\n', Whitespace),
117
+ (r'\s+', Whitespace),
118
+ ],
119
+ 'comments': [
120
+ (r'#.*$', Comment),
121
+ (r'//.*?\n', Comment),
122
+ (r'/\*[\w\W]*?\*/', Comment.Multiline),
123
+ ],
124
+ 'stringescape': [
125
+ (r'\\([\\nrt"\'])', String.Escape),
126
+ ],
127
+ 'dqs': [
128
+ (r'"', String.Double, '#pop'),
129
+ (r'[^\\"\n]+', String.Double),
130
+ ],
131
+ 'sqs': [
132
+ (r"'", String.Single, '#pop'),
133
+ (r'[^\\\'\n]+', String.Single),
134
+ ],
135
+ 'namespace': [
136
+ (r'[a-z*](\.\w|\w)*', Name.Namespace, '#pop'),
137
+ default('#pop'),
138
+ ],
139
+ 'class': [
140
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop'),
141
+ default('#pop'),
142
+ ],
143
+ 'keywords': [
144
+ (r'(async|oneway|extends|throws|required|optional)\b', Keyword),
145
+ (r'(true|false)\b', Keyword.Constant),
146
+ (r'(const|typedef)\b', Keyword.Declaration),
147
+ (words((
148
+ 'cpp_namespace', 'cpp_include', 'cpp_type', 'java_package',
149
+ 'cocoa_prefix', 'csharp_namespace', 'delphi_namespace',
150
+ 'php_namespace', 'py_module', 'perl_package',
151
+ 'ruby_namespace', 'smalltalk_category', 'smalltalk_prefix',
152
+ 'xsd_all', 'xsd_optional', 'xsd_nillable', 'xsd_namespace',
153
+ 'xsd_attrs', 'include'), suffix=r'\b'),
154
+ Keyword.Namespace),
155
+ (words((
156
+ 'void', 'bool', 'byte', 'i16', 'i32', 'i64', 'double',
157
+ 'string', 'binary', 'map', 'list', 'set', 'slist',
158
+ 'senum'), suffix=r'\b'),
159
+ Keyword.Type),
160
+ (words((
161
+ 'BEGIN', 'END', '__CLASS__', '__DIR__', '__FILE__',
162
+ '__FUNCTION__', '__LINE__', '__METHOD__', '__NAMESPACE__',
163
+ 'abstract', 'alias', 'and', 'args', 'as', 'assert', 'begin',
164
+ 'break', 'case', 'catch', 'class', 'clone', 'continue',
165
+ 'declare', 'def', 'default', 'del', 'delete', 'do', 'dynamic',
166
+ 'elif', 'else', 'elseif', 'elsif', 'end', 'enddeclare',
167
+ 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile',
168
+ 'ensure', 'except', 'exec', 'finally', 'float', 'for',
169
+ 'foreach', 'function', 'global', 'goto', 'if', 'implements',
170
+ 'import', 'in', 'inline', 'instanceof', 'interface', 'is',
171
+ 'lambda', 'module', 'native', 'new', 'next', 'nil', 'not',
172
+ 'or', 'pass', 'public', 'print', 'private', 'protected',
173
+ 'raise', 'redo', 'rescue', 'retry', 'register', 'return',
174
+ 'self', 'sizeof', 'static', 'super', 'switch', 'synchronized',
175
+ 'then', 'this', 'throw', 'transient', 'try', 'undef',
176
+ 'unless', 'unsigned', 'until', 'use', 'var', 'virtual',
177
+ 'volatile', 'when', 'while', 'with', 'xor', 'yield'),
178
+ prefix=r'\b', suffix=r'\b'),
179
+ Keyword.Reserved),
180
+ ],
181
+ 'numbers': [
182
+ (r'[+-]?(\d+\.\d+([eE][+-]?\d+)?|\.?\d+[eE][+-]?\d+)', Number.Float),
183
+ (r'[+-]?0x[0-9A-Fa-f]+', Number.Hex),
184
+ (r'[+-]?[0-9]+', Number.Integer),
185
+ ],
186
+ }
187
+
188
+
189
+ class ZeekLexer(RegexLexer):
190
+ """
191
+ For Zeek scripts.
192
+ """
193
+ name = 'Zeek'
194
+ url = 'https://www.zeek.org/'
195
+ aliases = ['zeek', 'bro']
196
+ filenames = ['*.zeek', '*.bro']
197
+ version_added = '2.5'
198
+
199
+ _hex = r'[0-9a-fA-F]'
200
+ _float = r'((\d*\.?\d+)|(\d+\.?\d*))([eE][-+]?\d+)?'
201
+ _h = r'[A-Za-z0-9][-A-Za-z0-9]*'
202
+
203
+ tokens = {
204
+ 'root': [
205
+ include('whitespace'),
206
+ include('comments'),
207
+ include('directives'),
208
+ include('attributes'),
209
+ include('types'),
210
+ include('keywords'),
211
+ include('literals'),
212
+ include('operators'),
213
+ include('punctuation'),
214
+ (r'((?:[A-Za-z_]\w*)(?:::(?:[A-Za-z_]\w*))*)(?=\s*\()',
215
+ Name.Function),
216
+ include('identifiers'),
217
+ ],
218
+
219
+ 'whitespace': [
220
+ (r'\n', Whitespace),
221
+ (r'\s+', Whitespace),
222
+ (r'(\\)(\n)', bygroups(Text, Whitespace)),
223
+ ],
224
+
225
+ 'comments': [
226
+ (r'#.*$', Comment),
227
+ ],
228
+
229
+ 'directives': [
230
+ (r'@(load-plugin|load-sigs|load|unload)\b.*$', Comment.Preproc),
231
+ (r'@(DEBUG|DIR|FILENAME|deprecated|if|ifdef|ifndef|else|endif)\b', Comment.Preproc),
232
+ (r'(@prefixes)(\s*)((\+?=).*)$', bygroups(Comment.Preproc,
233
+ Whitespace, Comment.Preproc)),
234
+ ],
235
+
236
+ 'attributes': [
237
+ (words(('redef', 'priority', 'log', 'optional', 'default', 'add_func',
238
+ 'delete_func', 'expire_func', 'read_expire', 'write_expire',
239
+ 'create_expire', 'synchronized', 'persistent', 'rotate_interval',
240
+ 'rotate_size', 'encrypt', 'raw_output', 'mergeable', 'error_handler',
241
+ 'type_column', 'deprecated'),
242
+ prefix=r'&', suffix=r'\b'),
243
+ Keyword.Pseudo),
244
+ ],
245
+
246
+ 'types': [
247
+ (words(('any',
248
+ 'enum', 'record', 'set', 'table', 'vector',
249
+ 'function', 'hook', 'event',
250
+ 'addr', 'bool', 'count', 'double', 'file', 'int', 'interval',
251
+ 'pattern', 'port', 'string', 'subnet', 'time'),
252
+ suffix=r'\b'),
253
+ Keyword.Type),
254
+
255
+ (r'(opaque)(\s+)(of)(\s+)((?:[A-Za-z_]\w*)(?:::(?:[A-Za-z_]\w*))*)\b',
256
+ bygroups(Keyword.Type, Whitespace, Operator.Word, Whitespace, Keyword.Type)),
257
+
258
+ (r'(type)(\s+)((?:[A-Za-z_]\w*)(?:::(?:[A-Za-z_]\w*))*)(\s*)(:)(\s*)\b(record|enum)\b',
259
+ bygroups(Keyword, Whitespace, Name.Class, Whitespace, Operator, Whitespace, Keyword.Type)),
260
+
261
+ (r'(type)(\s+)((?:[A-Za-z_]\w*)(?:::(?:[A-Za-z_]\w*))*)(\s*)(:)',
262
+ bygroups(Keyword, Whitespace, Name, Whitespace, Operator)),
263
+
264
+ (r'(redef)(\s+)(record|enum)(\s+)((?:[A-Za-z_]\w*)(?:::(?:[A-Za-z_]\w*))*)\b',
265
+ bygroups(Keyword, Whitespace, Keyword.Type, Whitespace, Name.Class)),
266
+ ],
267
+
268
+ 'keywords': [
269
+ (words(('redef', 'export', 'if', 'else', 'for', 'while',
270
+ 'return', 'break', 'next', 'continue', 'fallthrough',
271
+ 'switch', 'default', 'case',
272
+ 'add', 'delete',
273
+ 'when', 'timeout', 'schedule'),
274
+ suffix=r'\b'),
275
+ Keyword),
276
+ (r'(print)\b', Keyword),
277
+ (r'(global|local|const|option)\b', Keyword.Declaration),
278
+ (r'(module)(\s+)(([A-Za-z_]\w*)(?:::([A-Za-z_]\w*))*)\b',
279
+ bygroups(Keyword.Namespace, Whitespace, Name.Namespace)),
280
+ ],
281
+
282
+ 'literals': [
283
+ (r'"', String, 'string'),
284
+
285
+ # Not the greatest match for patterns, but generally helps
286
+ # disambiguate between start of a pattern and just a division
287
+ # operator.
288
+ (r'/(?=.*/)', String.Regex, 'regex'),
289
+
290
+ (r'[TF]\b', Keyword.Constant),
291
+
292
+ # Port
293
+ (r'\d{1,5}/(udp|tcp|icmp|unknown)\b', Number),
294
+
295
+ # IPv4 Address
296
+ (r'(\d{1,3}.){3}(\d{1,3})\b', Number),
297
+
298
+ # IPv6 Address
299
+ (r'\[([0-9a-fA-F]{0,4}:){2,7}([0-9a-fA-F]{0,4})?((\d{1,3}.){3}(\d{1,3}))?\]', Number),
300
+
301
+ # Numeric
302
+ (r'0[xX]' + _hex + r'+\b', Number.Hex),
303
+ (_float + r'\s*(day|hr|min|sec|msec|usec)s?\b', Number.Float),
304
+ (_float + r'\b', Number.Float),
305
+ (r'(\d+)\b', Number.Integer),
306
+
307
+ # Hostnames
308
+ (_h + r'(\.' + _h + r')+', String),
309
+ ],
310
+
311
+ 'operators': [
312
+ (r'[!%*/+<=>~|&^-]', Operator),
313
+ (r'([-+=&|]{2}|[+=!><-]=)', Operator),
314
+ (r'(in|as|is|of)\b', Operator.Word),
315
+ (r'\??\$', Operator),
316
+ ],
317
+
318
+ 'punctuation': [
319
+ (r'[{}()\[\],;.]', Punctuation),
320
+ # The "ternary if", which uses '?' and ':', could instead be
321
+ # treated as an Operator, but colons are more frequently used to
322
+ # separate field/identifier names from their types, so the (often)
323
+ # less-prominent Punctuation is used even with '?' for consistency.
324
+ (r'[?:]', Punctuation),
325
+ ],
326
+
327
+ 'identifiers': [
328
+ (r'([a-zA-Z_]\w*)(::)', bygroups(Name, Punctuation)),
329
+ (r'[a-zA-Z_]\w*', Name)
330
+ ],
331
+
332
+ 'string': [
333
+ (r'\\.', String.Escape),
334
+ (r'%-?[0-9]*(\.[0-9]+)?[DTd-gsx]', String.Escape),
335
+ (r'"', String, '#pop'),
336
+ (r'.', String),
337
+ ],
338
+
339
+ 'regex': [
340
+ (r'\\.', String.Escape),
341
+ (r'/', String.Regex, '#pop'),
342
+ (r'.', String.Regex),
343
+ ],
344
+ }
345
+
346
+
347
+ BroLexer = ZeekLexer
348
+
349
+
350
+ class PuppetLexer(RegexLexer):
351
+ """
352
+ For Puppet configuration DSL.
353
+ """
354
+ name = 'Puppet'
355
+ url = 'https://puppet.com/'
356
+ aliases = ['puppet']
357
+ filenames = ['*.pp']
358
+ version_added = '1.6'
359
+
360
+ tokens = {
361
+ 'root': [
362
+ include('comments'),
363
+ include('keywords'),
364
+ include('names'),
365
+ include('numbers'),
366
+ include('operators'),
367
+ include('strings'),
368
+
369
+ (r'[]{}:(),;[]', Punctuation),
370
+ (r'\s+', Whitespace),
371
+ ],
372
+
373
+ 'comments': [
374
+ (r'(\s*)(#.*)$', bygroups(Whitespace, Comment)),
375
+ (r'/(\\\n)?[*][\s\S]*?[*](\\\n)?/', Comment.Multiline),
376
+ ],
377
+
378
+ 'operators': [
379
+ (r'(=>|\?|<|>|=|\+|-|/|\*|~|!|\|)', Operator),
380
+ (r'(in|and|or|not)\b', Operator.Word),
381
+ ],
382
+
383
+ 'names': [
384
+ (r'[a-zA-Z_]\w*', Name.Attribute),
385
+ (r'(\$\S+)(\[)(\S+)(\])', bygroups(Name.Variable, Punctuation,
386
+ String, Punctuation)),
387
+ (r'\$\S+', Name.Variable),
388
+ ],
389
+
390
+ 'numbers': [
391
+ # Copypasta from the Python lexer
392
+ (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
393
+ (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
394
+ (r'0[0-7]+j?', Number.Oct),
395
+ (r'0[xX][a-fA-F0-9]+', Number.Hex),
396
+ (r'\d+L', Number.Integer.Long),
397
+ (r'\d+j?', Number.Integer)
398
+ ],
399
+
400
+ 'keywords': [
401
+ # Left out 'group' and 'require'
402
+ # Since they're often used as attributes
403
+ (words((
404
+ 'absent', 'alert', 'alias', 'audit', 'augeas', 'before', 'case',
405
+ 'check', 'class', 'computer', 'configured', 'contained',
406
+ 'create_resources', 'crit', 'cron', 'debug', 'default',
407
+ 'define', 'defined', 'directory', 'else', 'elsif', 'emerg',
408
+ 'err', 'exec', 'extlookup', 'fail', 'false', 'file',
409
+ 'filebucket', 'fqdn_rand', 'generate', 'host', 'if', 'import',
410
+ 'include', 'info', 'inherits', 'inline_template', 'installed',
411
+ 'interface', 'k5login', 'latest', 'link', 'loglevel',
412
+ 'macauthorization', 'mailalias', 'maillist', 'mcx', 'md5',
413
+ 'mount', 'mounted', 'nagios_command', 'nagios_contact',
414
+ 'nagios_contactgroup', 'nagios_host', 'nagios_hostdependency',
415
+ 'nagios_hostescalation', 'nagios_hostextinfo', 'nagios_hostgroup',
416
+ 'nagios_service', 'nagios_servicedependency', 'nagios_serviceescalation',
417
+ 'nagios_serviceextinfo', 'nagios_servicegroup', 'nagios_timeperiod',
418
+ 'node', 'noop', 'notice', 'notify', 'package', 'present', 'purged',
419
+ 'realize', 'regsubst', 'resources', 'role', 'router', 'running',
420
+ 'schedule', 'scheduled_task', 'search', 'selboolean', 'selmodule',
421
+ 'service', 'sha1', 'shellquote', 'split', 'sprintf',
422
+ 'ssh_authorized_key', 'sshkey', 'stage', 'stopped', 'subscribe',
423
+ 'tag', 'tagged', 'template', 'tidy', 'true', 'undef', 'unmounted',
424
+ 'user', 'versioncmp', 'vlan', 'warning', 'yumrepo', 'zfs', 'zone',
425
+ 'zpool'), prefix='(?i)', suffix=r'\b'),
426
+ Keyword),
427
+ ],
428
+
429
+ 'strings': [
430
+ (r'"([^"])*"', String),
431
+ (r"'(\\'|[^'])*'", String),
432
+ ],
433
+
434
+ }
435
+
436
+
437
+ class RslLexer(RegexLexer):
438
+ """
439
+ RSL is the formal specification
440
+ language used in RAISE (Rigorous Approach to Industrial Software Engineering)
441
+ method.
442
+ """
443
+ name = 'RSL'
444
+ url = 'http://en.wikipedia.org/wiki/RAISE'
445
+ aliases = ['rsl']
446
+ filenames = ['*.rsl']
447
+ mimetypes = ['text/rsl']
448
+ version_added = '2.0'
449
+
450
+ flags = re.MULTILINE | re.DOTALL
451
+
452
+ tokens = {
453
+ 'root': [
454
+ (words((
455
+ 'Bool', 'Char', 'Int', 'Nat', 'Real', 'Text', 'Unit', 'abs',
456
+ 'all', 'always', 'any', 'as', 'axiom', 'card', 'case', 'channel',
457
+ 'chaos', 'class', 'devt_relation', 'dom', 'elems', 'else', 'elif',
458
+ 'end', 'exists', 'extend', 'false', 'for', 'hd', 'hide', 'if',
459
+ 'in', 'is', 'inds', 'initialise', 'int', 'inter', 'isin', 'len',
460
+ 'let', 'local', 'ltl_assertion', 'object', 'of', 'out', 'post',
461
+ 'pre', 'read', 'real', 'rng', 'scheme', 'skip', 'stop', 'swap',
462
+ 'then', 'theory', 'test_case', 'tl', 'transition_system', 'true',
463
+ 'type', 'union', 'until', 'use', 'value', 'variable', 'while',
464
+ 'with', 'write', '~isin', '-inflist', '-infset', '-list',
465
+ '-set'), prefix=r'\b', suffix=r'\b'),
466
+ Keyword),
467
+ (r'(variable|value)\b', Keyword.Declaration),
468
+ (r'--.*?\n', Comment),
469
+ (r'<:.*?:>', Comment),
470
+ (r'\{!.*?!\}', Comment),
471
+ (r'/\*.*?\*/', Comment),
472
+ (r'^([ \t]*)([\w]+)([ \t]*)(:[^:])', bygroups(Whitespace,
473
+ Name.Function, Whitespace, Name.Function)),
474
+ (r'(^[ \t]*)([\w]+)([ \t]*)(\([\w\s,]*\))([ \t]*)(is|as)',
475
+ bygroups(Whitespace, Name.Function, Whitespace, Text,
476
+ Whitespace, Keyword)),
477
+ (r'\b[A-Z]\w*\b', Keyword.Type),
478
+ (r'(true|false)\b', Keyword.Constant),
479
+ (r'".*"', String),
480
+ (r'\'.\'', String.Char),
481
+ (r'(><|->|-m->|/\\|<=|<<=|<\.|\|\||\|\^\||-~->|-~m->|\\/|>=|>>|'
482
+ r'\.>|\+\+|-\\|<->|=>|:-|~=|\*\*|<<|>>=|\+>|!!|\|=\||#)',
483
+ Operator),
484
+ (r'[0-9]+\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),
485
+ (r'0x[0-9a-f]+', Number.Hex),
486
+ (r'[0-9]+', Number.Integer),
487
+ (r'\s+', Whitespace),
488
+ (r'.', Text),
489
+ ],
490
+ }
491
+
492
+ def analyse_text(text):
493
+ """
494
+ Check for the most common text in the beginning of a RSL file.
495
+ """
496
+ if re.search(r'scheme\s*.*?=\s*class\s*type', text, re.I) is not None:
497
+ return 1.0
498
+
499
+
500
+ class MscgenLexer(RegexLexer):
501
+ """
502
+ For Mscgen files.
503
+ """
504
+ name = 'Mscgen'
505
+ url = 'http://www.mcternan.me.uk/mscgen/'
506
+ aliases = ['mscgen', 'msc']
507
+ filenames = ['*.msc']
508
+ version_added = '1.6'
509
+
510
+ _var = r'(\w+|"(?:\\"|[^"])*")'
511
+
512
+ tokens = {
513
+ 'root': [
514
+ (r'msc\b', Keyword.Type),
515
+ # Options
516
+ (r'(hscale|HSCALE|width|WIDTH|wordwraparcs|WORDWRAPARCS'
517
+ r'|arcgradient|ARCGRADIENT)\b', Name.Property),
518
+ # Operators
519
+ (r'(abox|ABOX|rbox|RBOX|box|BOX|note|NOTE)\b', Operator.Word),
520
+ (r'(\.|-|\|){3}', Keyword),
521
+ (r'(?:-|=|\.|:){2}'
522
+ r'|<<=>>|<->|<=>|<<>>|<:>'
523
+ r'|->|=>>|>>|=>|:>|-x|-X'
524
+ r'|<-|<<=|<<|<=|<:|x-|X-|=', Operator),
525
+ # Names
526
+ (r'\*', Name.Builtin),
527
+ (_var, Name.Variable),
528
+ # Other
529
+ (r'\[', Punctuation, 'attrs'),
530
+ (r'\{|\}|,|;', Punctuation),
531
+ include('comments')
532
+ ],
533
+ 'attrs': [
534
+ (r'\]', Punctuation, '#pop'),
535
+ (_var + r'(\s*)(=)(\s*)' + _var,
536
+ bygroups(Name.Attribute, Whitespace, Operator, Whitespace,
537
+ String)),
538
+ (r',', Punctuation),
539
+ include('comments')
540
+ ],
541
+ 'comments': [
542
+ (r'(?://|#).*?\n', Comment.Single),
543
+ (r'/\*[\s\S]*?\*/', Comment.Multiline),
544
+ (r'[ \t\r\n]+', Whitespace)
545
+ ]
546
+ }
547
+
548
+
549
+ class VGLLexer(RegexLexer):
550
+ """
551
+ For SampleManager VGL source code.
552
+ """
553
+ name = 'VGL'
554
+ url = 'http://www.thermoscientific.com/samplemanager'
555
+ aliases = ['vgl']
556
+ filenames = ['*.rpf']
557
+ version_added = '1.6'
558
+
559
+ flags = re.MULTILINE | re.DOTALL | re.IGNORECASE
560
+
561
+ tokens = {
562
+ 'root': [
563
+ (r'\{[^}]*\}', Comment.Multiline),
564
+ (r'declare', Keyword.Constant),
565
+ (r'(if|then|else|endif|while|do|endwhile|and|or|prompt|object'
566
+ r'|create|on|line|with|global|routine|value|endroutine|constant'
567
+ r'|global|set|join|library|compile_option|file|exists|create|copy'
568
+ r'|delete|enable|windows|name|notprotected)(?! *[=<>.,()])',
569
+ Keyword),
570
+ (r'(true|false|null|empty|error|locked)', Keyword.Constant),
571
+ (r'[~^*#!%&\[\]()<>|+=:;,./?-]', Operator),
572
+ (r'"[^"]*"', String),
573
+ (r'(\.)([a-z_$][\w$]*)', bygroups(Operator, Name.Attribute)),
574
+ (r'[0-9][0-9]*(\.[0-9]+(e[+\-]?[0-9]+)?)?', Number),
575
+ (r'[a-z_$][\w$]*', Name),
576
+ (r'[\r\n]+', Whitespace),
577
+ (r'\s+', Whitespace)
578
+ ]
579
+ }
580
+
581
+
582
+ class AlloyLexer(RegexLexer):
583
+ """
584
+ For Alloy source code.
585
+ """
586
+
587
+ name = 'Alloy'
588
+ url = 'http://alloy.mit.edu'
589
+ aliases = ['alloy']
590
+ filenames = ['*.als']
591
+ mimetypes = ['text/x-alloy']
592
+ version_added = '2.0'
593
+
594
+ flags = re.MULTILINE | re.DOTALL
595
+
596
+ iden_rex = r'[a-zA-Z_][\w]*"*'
597
+ string_rex = r'"\b(\\\\|\\[^\\]|[^"\\])*"'
598
+ text_tuple = (r'[^\S\n]+', Whitespace)
599
+
600
+ tokens = {
601
+ 'sig': [
602
+ (r'(extends)\b', Keyword, '#pop'),
603
+ (iden_rex, Name),
604
+ text_tuple,
605
+ (r',', Punctuation),
606
+ (r'\{', Operator, '#pop'),
607
+ ],
608
+ 'module': [
609
+ text_tuple,
610
+ (iden_rex, Name, '#pop'),
611
+ ],
612
+ 'fun': [
613
+ text_tuple,
614
+ (r'\{', Operator, '#pop'),
615
+ (iden_rex, Name, '#pop'),
616
+ ],
617
+ 'fact': [
618
+ include('fun'),
619
+ (string_rex, String, '#pop'),
620
+ ],
621
+ 'root': [
622
+ (r'--.*?$', Comment.Single),
623
+ (r'//.*?$', Comment.Single),
624
+ (r'/\*.*?\*/', Comment.Multiline),
625
+ text_tuple,
626
+ (r'(module|open)(\s+)', bygroups(Keyword.Namespace, Whitespace),
627
+ 'module'),
628
+ (r'(sig|enum)(\s+)', bygroups(Keyword.Declaration, Whitespace), 'sig'),
629
+ (r'(iden|univ|none)\b', Keyword.Constant),
630
+ (r'(int|Int)\b', Keyword.Type),
631
+ (r'(var|this|abstract|extends|set|seq|one|lone|let)\b', Keyword),
632
+ (r'(all|some|no|sum|disj|when|else)\b', Keyword),
633
+ (r'(run|check|for|but|exactly|expect|as|steps)\b', Keyword),
634
+ (r'(always|after|eventually|until|release)\b', Keyword), # future time operators
635
+ (r'(historically|before|once|since|triggered)\b', Keyword), # past time operators
636
+ (r'(and|or|implies|iff|in)\b', Operator.Word),
637
+ (r'(fun|pred|assert)(\s+)', bygroups(Keyword, Whitespace), 'fun'),
638
+ (r'(fact)(\s+)', bygroups(Keyword, Whitespace), 'fact'),
639
+ (r'!|#|&&|\+\+|<<|>>|>=|<=>|<=|\.\.|\.|->', Operator),
640
+ (r'[-+/*%=<>&!^|~{}\[\]().\';]', Operator),
641
+ (iden_rex, Name),
642
+ (r'[:,]', Punctuation),
643
+ (r'[0-9]+', Number.Integer),
644
+ (string_rex, String),
645
+ (r'\n', Whitespace),
646
+ ]
647
+ }
648
+
649
+
650
+ class PanLexer(RegexLexer):
651
+ """
652
+ Lexer for pan source files.
653
+
654
+ Based on tcsh lexer.
655
+ """
656
+
657
+ name = 'Pan'
658
+ url = 'https://github.com/quattor/pan/'
659
+ aliases = ['pan']
660
+ filenames = ['*.pan']
661
+ version_added = '2.0'
662
+
663
+ tokens = {
664
+ 'root': [
665
+ include('basic'),
666
+ (r'\(', Keyword, 'paren'),
667
+ (r'\{', Keyword, 'curly'),
668
+ include('data'),
669
+ ],
670
+ 'basic': [
671
+ (words((
672
+ 'if', 'for', 'with', 'else', 'type', 'bind', 'while', 'valid', 'final',
673
+ 'prefix', 'unique', 'object', 'foreach', 'include', 'template',
674
+ 'function', 'variable', 'structure', 'extensible', 'declaration'),
675
+ prefix=r'\b', suffix=r'\b'),
676
+ Keyword),
677
+ (words((
678
+ 'file_contents', 'format', 'index', 'length', 'match', 'matches',
679
+ 'replace', 'splice', 'split', 'substr', 'to_lowercase', 'to_uppercase',
680
+ 'debug', 'error', 'traceback', 'deprecated', 'base64_decode',
681
+ 'base64_encode', 'digest', 'escape', 'unescape', 'append', 'create',
682
+ 'first', 'nlist', 'key', 'list', 'merge', 'next', 'prepend', 'is_boolean',
683
+ 'is_defined', 'is_double', 'is_list', 'is_long', 'is_nlist', 'is_null',
684
+ 'is_number', 'is_property', 'is_resource', 'is_string', 'to_boolean',
685
+ 'to_double', 'to_long', 'to_string', 'clone', 'delete', 'exists',
686
+ 'path_exists', 'if_exists', 'return', 'value'),
687
+ prefix=r'\b', suffix=r'\b'),
688
+ Name.Builtin),
689
+ (r'#.*', Comment),
690
+ (r'\\[\w\W]', String.Escape),
691
+ (r'(\b\w+)(\s*)(=)', bygroups(Name.Variable, Whitespace, Operator)),
692
+ (r'[\[\]{}()=]+', Operator),
693
+ (r'<<\s*(\'?)\\?(\w+)[\w\W]+?\2', String),
694
+ (r';', Punctuation),
695
+ ],
696
+ 'data': [
697
+ (r'(?s)"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
698
+ (r"(?s)'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
699
+ (r'\s+', Whitespace),
700
+ (r'[^=\s\[\]{}()$"\'`\\;#]+', Text),
701
+ (r'\d+(?= |\Z)', Number),
702
+ ],
703
+ 'curly': [
704
+ (r'\}', Keyword, '#pop'),
705
+ (r':-', Keyword),
706
+ (r'\w+', Name.Variable),
707
+ (r'[^}:"\'`$]+', Punctuation),
708
+ (r':', Punctuation),
709
+ include('root'),
710
+ ],
711
+ 'paren': [
712
+ (r'\)', Keyword, '#pop'),
713
+ include('root'),
714
+ ],
715
+ }
716
+
717
+
718
+ class CrmshLexer(RegexLexer):
719
+ """
720
+ Lexer for crmsh configuration files for Pacemaker clusters.
721
+ """
722
+ name = 'Crmsh'
723
+ url = 'http://crmsh.github.io/'
724
+ aliases = ['crmsh', 'pcmk']
725
+ filenames = ['*.crmsh', '*.pcmk']
726
+ mimetypes = []
727
+ version_added = '2.1'
728
+
729
+ elem = words((
730
+ 'node', 'primitive', 'group', 'clone', 'ms', 'location',
731
+ 'colocation', 'order', 'fencing_topology', 'rsc_ticket',
732
+ 'rsc_template', 'property', 'rsc_defaults',
733
+ 'op_defaults', 'acl_target', 'acl_group', 'user', 'role',
734
+ 'tag'), suffix=r'(?![\w#$-])')
735
+ sub = words((
736
+ 'params', 'meta', 'operations', 'op', 'rule',
737
+ 'attributes', 'utilization'), suffix=r'(?![\w#$-])')
738
+ acl = words(('read', 'write', 'deny'), suffix=r'(?![\w#$-])')
739
+ bin_rel = words(('and', 'or'), suffix=r'(?![\w#$-])')
740
+ un_ops = words(('defined', 'not_defined'), suffix=r'(?![\w#$-])')
741
+ date_exp = words(('in_range', 'date', 'spec', 'in'), suffix=r'(?![\w#$-])')
742
+ acl_mod = (r'(?:tag|ref|reference|attribute|type|xpath)')
743
+ bin_ops = (r'(?:lt|gt|lte|gte|eq|ne)')
744
+ val_qual = (r'(?:string|version|number)')
745
+ rsc_role_action = (r'(?:Master|Started|Slave|Stopped|'
746
+ r'start|promote|demote|stop)')
747
+
748
+ tokens = {
749
+ 'root': [
750
+ (r'^(#.*)(\n)?', bygroups(Comment, Whitespace)),
751
+ # attr=value (nvpair)
752
+ (r'([\w#$-]+)(=)("(?:""|[^"])*"|\S+)',
753
+ bygroups(Name.Attribute, Punctuation, String)),
754
+ # need this construct, otherwise numeric node ids
755
+ # are matched as scores
756
+ # elem id:
757
+ (r'(node)(\s+)([\w#$-]+)(:)',
758
+ bygroups(Keyword, Whitespace, Name, Punctuation)),
759
+ # scores
760
+ (r'([+-]?([0-9]+|inf)):', Number),
761
+ # keywords (elements and other)
762
+ (elem, Keyword),
763
+ (sub, Keyword),
764
+ (acl, Keyword),
765
+ # binary operators
766
+ (rf'(?:{val_qual}:)?({bin_ops})(?![\w#$-])', Operator.Word),
767
+ # other operators
768
+ (bin_rel, Operator.Word),
769
+ (un_ops, Operator.Word),
770
+ (date_exp, Operator.Word),
771
+ # builtin attributes (e.g. #uname)
772
+ (r'#[a-z]+(?![\w#$-])', Name.Builtin),
773
+ # acl_mod:blah
774
+ (rf'({acl_mod})(:)("(?:""|[^"])*"|\S+)',
775
+ bygroups(Keyword, Punctuation, Name)),
776
+ # rsc_id[:(role|action)]
777
+ # NB: this matches all other identifiers
778
+ (rf'([\w#$-]+)(?:(:)({rsc_role_action}))?(?![\w#$-])',
779
+ bygroups(Name, Punctuation, Operator.Word)),
780
+ # punctuation
781
+ (r'(\\(?=\n)|[\[\](){}/:@])', Punctuation),
782
+ (r'\s+|\n', Whitespace),
783
+ ],
784
+ }
785
+
786
+
787
+ class FlatlineLexer(RegexLexer):
788
+ """
789
+ Lexer for Flatline expressions.
790
+ """
791
+ name = 'Flatline'
792
+ url = 'https://github.com/bigmlcom/flatline'
793
+ aliases = ['flatline']
794
+ filenames = []
795
+ mimetypes = ['text/x-flatline']
796
+ version_added = '2.2'
797
+
798
+ special_forms = ('let',)
799
+
800
+ builtins = (
801
+ "!=", "*", "+", "-", "<", "<=", "=", ">", ">=", "abs", "acos", "all",
802
+ "all-but", "all-with-defaults", "all-with-numeric-default", "and",
803
+ "asin", "atan", "avg", "avg-window", "bin-center", "bin-count", "call",
804
+ "category-count", "ceil", "cond", "cond-window", "cons", "cos", "cosh",
805
+ "count", "diff-window", "div", "ensure-value", "ensure-weighted-value",
806
+ "epoch", "epoch-day", "epoch-fields", "epoch-hour", "epoch-millisecond",
807
+ "epoch-minute", "epoch-month", "epoch-second", "epoch-weekday",
808
+ "epoch-year", "exp", "f", "field", "field-prop", "fields", "filter",
809
+ "first", "floor", "head", "if", "in", "integer", "language", "length",
810
+ "levenshtein", "linear-regression", "list", "ln", "log", "log10", "map",
811
+ "matches", "matches?", "max", "maximum", "md5", "mean", "median", "min",
812
+ "minimum", "missing", "missing-count", "missing?", "missing_count",
813
+ "mod", "mode", "normalize", "not", "nth", "occurrences", "or",
814
+ "percentile", "percentile-label", "population", "population-fraction",
815
+ "pow", "preferred", "preferred?", "quantile-label", "rand", "rand-int",
816
+ "random-value", "re-quote", "real", "replace", "replace-first", "rest",
817
+ "round", "row-number", "segment-label", "sha1", "sha256", "sin", "sinh",
818
+ "sqrt", "square", "standard-deviation", "standard_deviation", "str",
819
+ "subs", "sum", "sum-squares", "sum-window", "sum_squares", "summary",
820
+ "summary-no", "summary-str", "tail", "tan", "tanh", "to-degrees",
821
+ "to-radians", "variance", "vectorize", "weighted-random-value", "window",
822
+ "winnow", "within-percentiles?", "z-score",
823
+ )
824
+
825
+ valid_name = r'(?!#)[\w!$%*+<=>?/.#-]+'
826
+
827
+ tokens = {
828
+ 'root': [
829
+ # whitespaces - usually not relevant
830
+ (r'[,]+', Text),
831
+ (r'\s+', Whitespace),
832
+
833
+ # numbers
834
+ (r'-?\d+\.\d+', Number.Float),
835
+ (r'-?\d+', Number.Integer),
836
+ (r'0x-?[a-f\d]+', Number.Hex),
837
+
838
+ # strings, symbols and characters
839
+ (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
840
+ (r"\\(.|[a-z]+)", String.Char),
841
+
842
+ # expression template placeholder
843
+ (r'_', String.Symbol),
844
+
845
+ # highlight the special forms
846
+ (words(special_forms, suffix=' '), Keyword),
847
+
848
+ # highlight the builtins
849
+ (words(builtins, suffix=' '), Name.Builtin),
850
+
851
+ # the remaining functions
852
+ (r'(?<=\()' + valid_name, Name.Function),
853
+
854
+ # find the remaining variables
855
+ (valid_name, Name.Variable),
856
+
857
+ # parentheses
858
+ (r'(\(|\))', Punctuation),
859
+ ],
860
+ }
861
+
862
+
863
+ class SnowballLexer(ExtendedRegexLexer):
864
+ """
865
+ Lexer for Snowball source code.
866
+ """
867
+
868
+ name = 'Snowball'
869
+ url = 'https://snowballstem.org/'
870
+ aliases = ['snowball']
871
+ filenames = ['*.sbl']
872
+ version_added = '2.2'
873
+
874
+ _ws = r'\n\r\t '
875
+
876
+ def __init__(self, **options):
877
+ self._reset_stringescapes()
878
+ ExtendedRegexLexer.__init__(self, **options)
879
+
880
+ def _reset_stringescapes(self):
881
+ self._start = "'"
882
+ self._end = "'"
883
+
884
+ def _string(do_string_first):
885
+ def callback(lexer, match, ctx):
886
+ s = match.start()
887
+ text = match.group()
888
+ string = re.compile(rf'([^{re.escape(lexer._start)}]*)(.)').match
889
+ escape = re.compile(rf'([^{re.escape(lexer._end)}]*)(.)').match
890
+ pos = 0
891
+ do_string = do_string_first
892
+ while pos < len(text):
893
+ if do_string:
894
+ match = string(text, pos)
895
+ yield s + match.start(1), String.Single, match.group(1)
896
+ if match.group(2) == "'":
897
+ yield s + match.start(2), String.Single, match.group(2)
898
+ ctx.stack.pop()
899
+ break
900
+ yield s + match.start(2), String.Escape, match.group(2)
901
+ pos = match.end()
902
+ match = escape(text, pos)
903
+ yield s + match.start(), String.Escape, match.group()
904
+ if match.group(2) != lexer._end:
905
+ ctx.stack[-1] = 'escape'
906
+ break
907
+ pos = match.end()
908
+ do_string = True
909
+ ctx.pos = s + match.end()
910
+ return callback
911
+
912
+ def _stringescapes(lexer, match, ctx):
913
+ lexer._start = match.group(3)
914
+ lexer._end = match.group(5)
915
+ return bygroups(Keyword.Reserved, Whitespace, String.Escape, Whitespace,
916
+ String.Escape)(lexer, match, ctx)
917
+
918
+ tokens = {
919
+ 'root': [
920
+ (r'len\b', Name.Builtin),
921
+ (r'lenof\b', Operator.Word),
922
+ include('root1'),
923
+ ],
924
+ 'root1': [
925
+ (rf'[{_ws}]+', Whitespace),
926
+ (r'\d+', Number.Integer),
927
+ (r"'", String.Single, 'string'),
928
+ (r'[()]', Punctuation),
929
+ (r'/\*[\w\W]*?\*/', Comment.Multiline),
930
+ (r'//.*', Comment.Single),
931
+ (r'[!*+\-/<=>]=|[-=]>|<[+-]|[$*+\-/<=>?\[\]]', Operator),
932
+ (words(('as', 'get', 'hex', 'among', 'define', 'decimal',
933
+ 'backwardmode'), suffix=r'\b'),
934
+ Keyword.Reserved),
935
+ (words(('strings', 'booleans', 'integers', 'routines', 'externals',
936
+ 'groupings'), suffix=r'\b'),
937
+ Keyword.Reserved, 'declaration'),
938
+ (words(('do', 'or', 'and', 'for', 'hop', 'non', 'not', 'set', 'try',
939
+ 'fail', 'goto', 'loop', 'next', 'test', 'true',
940
+ 'false', 'unset', 'atmark', 'attach', 'delete', 'gopast',
941
+ 'insert', 'repeat', 'sizeof', 'tomark', 'atleast',
942
+ 'atlimit', 'reverse', 'setmark', 'tolimit', 'setlimit',
943
+ 'backwards', 'substring'), suffix=r'\b'),
944
+ Operator.Word),
945
+ (words(('size', 'limit', 'cursor', 'maxint', 'minint'),
946
+ suffix=r'\b'),
947
+ Name.Builtin),
948
+ (rf'(stringdef\b)([{_ws}]*)([^{_ws}]+)',
949
+ bygroups(Keyword.Reserved, Whitespace, String.Escape)),
950
+ (rf'(stringescapes\b)([{_ws}]*)(.)([{_ws}]*)(.)',
951
+ _stringescapes),
952
+ (r'[A-Za-z]\w*', Name),
953
+ ],
954
+ 'declaration': [
955
+ (r'\)', Punctuation, '#pop'),
956
+ (words(('len', 'lenof'), suffix=r'\b'), Name,
957
+ ('root1', 'declaration')),
958
+ include('root1'),
959
+ ],
960
+ 'string': [
961
+ (r"[^']*'", _string(True)),
962
+ ],
963
+ 'escape': [
964
+ (r"[^']*'", _string(False)),
965
+ ],
966
+ }
967
+
968
+ def get_tokens_unprocessed(self, text=None, context=None):
969
+ self._reset_stringescapes()
970
+ return ExtendedRegexLexer.get_tokens_unprocessed(self, text, context)
venv/Lib/site-packages/pygments/lexers/dylan.py ADDED
@@ -0,0 +1,279 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.dylan
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for the Dylan language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import Lexer, RegexLexer, bygroups, do_insertions, \
14
+ default, line_re
15
+ from pygments.token import Comment, Operator, Keyword, Name, String, \
16
+ Number, Punctuation, Generic, Literal, Whitespace
17
+
18
+ __all__ = ['DylanLexer', 'DylanConsoleLexer', 'DylanLidLexer']
19
+
20
+
21
+ class DylanLexer(RegexLexer):
22
+ """
23
+ For the Dylan language.
24
+ """
25
+
26
+ name = 'Dylan'
27
+ url = 'http://www.opendylan.org/'
28
+ aliases = ['dylan']
29
+ filenames = ['*.dylan', '*.dyl', '*.intr']
30
+ mimetypes = ['text/x-dylan']
31
+ version_added = '0.7'
32
+
33
+ flags = re.IGNORECASE
34
+
35
+ builtins = {
36
+ 'subclass', 'abstract', 'block', 'concrete', 'constant', 'class',
37
+ 'compiler-open', 'compiler-sideways', 'domain', 'dynamic',
38
+ 'each-subclass', 'exception', 'exclude', 'function', 'generic',
39
+ 'handler', 'inherited', 'inline', 'inline-only', 'instance',
40
+ 'interface', 'import', 'keyword', 'library', 'macro', 'method',
41
+ 'module', 'open', 'primary', 'required', 'sealed', 'sideways',
42
+ 'singleton', 'slot', 'thread', 'variable', 'virtual'}
43
+
44
+ keywords = {
45
+ 'above', 'afterwards', 'begin', 'below', 'by', 'case', 'cleanup',
46
+ 'create', 'define', 'else', 'elseif', 'end', 'export', 'finally',
47
+ 'for', 'from', 'if', 'in', 'let', 'local', 'otherwise', 'rename',
48
+ 'select', 'signal', 'then', 'to', 'unless', 'until', 'use', 'when',
49
+ 'while'}
50
+
51
+ operators = {
52
+ '~', '+', '-', '*', '|', '^', '=', '==', '~=', '~==', '<', '<=',
53
+ '>', '>=', '&', '|'}
54
+
55
+ functions = {
56
+ 'abort', 'abs', 'add', 'add!', 'add-method', 'add-new', 'add-new!',
57
+ 'all-superclasses', 'always', 'any?', 'applicable-method?', 'apply',
58
+ 'aref', 'aref-setter', 'as', 'as-lowercase', 'as-lowercase!',
59
+ 'as-uppercase', 'as-uppercase!', 'ash', 'backward-iteration-protocol',
60
+ 'break', 'ceiling', 'ceiling/', 'cerror', 'check-type', 'choose',
61
+ 'choose-by', 'complement', 'compose', 'concatenate', 'concatenate-as',
62
+ 'condition-format-arguments', 'condition-format-string', 'conjoin',
63
+ 'copy-sequence', 'curry', 'default-handler', 'dimension', 'dimensions',
64
+ 'direct-subclasses', 'direct-superclasses', 'disjoin', 'do',
65
+ 'do-handlers', 'element', 'element-setter', 'empty?', 'error', 'even?',
66
+ 'every?', 'false-or', 'fill!', 'find-key', 'find-method', 'first',
67
+ 'first-setter', 'floor', 'floor/', 'forward-iteration-protocol',
68
+ 'function-arguments', 'function-return-values',
69
+ 'function-specializers', 'gcd', 'generic-function-mandatory-keywords',
70
+ 'generic-function-methods', 'head', 'head-setter', 'identity',
71
+ 'initialize', 'instance?', 'integral?', 'intersection',
72
+ 'key-sequence', 'key-test', 'last', 'last-setter', 'lcm', 'limited',
73
+ 'list', 'logand', 'logbit?', 'logior', 'lognot', 'logxor', 'make',
74
+ 'map', 'map-as', 'map-into', 'max', 'member?', 'merge-hash-codes',
75
+ 'min', 'modulo', 'negative', 'negative?', 'next-method',
76
+ 'object-class', 'object-hash', 'odd?', 'one-of', 'pair', 'pop',
77
+ 'pop-last', 'positive?', 'push', 'push-last', 'range', 'rank',
78
+ 'rcurry', 'reduce', 'reduce1', 'remainder', 'remove', 'remove!',
79
+ 'remove-duplicates', 'remove-duplicates!', 'remove-key!',
80
+ 'remove-method', 'replace-elements!', 'replace-subsequence!',
81
+ 'restart-query', 'return-allowed?', 'return-description',
82
+ 'return-query', 'reverse', 'reverse!', 'round', 'round/',
83
+ 'row-major-index', 'second', 'second-setter', 'shallow-copy',
84
+ 'signal', 'singleton', 'size', 'size-setter', 'slot-initialized?',
85
+ 'sort', 'sort!', 'sorted-applicable-methods', 'subsequence-position',
86
+ 'subtype?', 'table-protocol', 'tail', 'tail-setter', 'third',
87
+ 'third-setter', 'truncate', 'truncate/', 'type-error-expected-type',
88
+ 'type-error-value', 'type-for-copy', 'type-union', 'union', 'values',
89
+ 'vector', 'zero?'}
90
+
91
+ valid_name = '\\\\?[\\w!&*<>|^$%@\\-+~?/=]+'
92
+
93
+ def get_tokens_unprocessed(self, text):
94
+ for index, token, value in RegexLexer.get_tokens_unprocessed(self, text):
95
+ if token is Name:
96
+ lowercase_value = value.lower()
97
+ if lowercase_value in self.builtins:
98
+ yield index, Name.Builtin, value
99
+ continue
100
+ if lowercase_value in self.keywords:
101
+ yield index, Keyword, value
102
+ continue
103
+ if lowercase_value in self.functions:
104
+ yield index, Name.Builtin, value
105
+ continue
106
+ if lowercase_value in self.operators:
107
+ yield index, Operator, value
108
+ continue
109
+ yield index, token, value
110
+
111
+ tokens = {
112
+ 'root': [
113
+ # Whitespace
114
+ (r'\s+', Whitespace),
115
+
116
+ # single line comment
117
+ (r'//.*?\n', Comment.Single),
118
+
119
+ # lid header
120
+ (r'([a-z0-9-]+)(:)([ \t]*)(.*(?:\n[ \t].+)*)',
121
+ bygroups(Name.Attribute, Operator, Whitespace, String)),
122
+
123
+ default('code') # no header match, switch to code
124
+ ],
125
+ 'code': [
126
+ # Whitespace
127
+ (r'\s+', Whitespace),
128
+
129
+ # single line comment
130
+ (r'(//.*?)(\n)', bygroups(Comment.Single, Whitespace)),
131
+
132
+ # multi-line comment
133
+ (r'/\*', Comment.Multiline, 'comment'),
134
+
135
+ # strings and characters
136
+ (r'"', String, 'string'),
137
+ (r"'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\\'\n])'", String.Char),
138
+
139
+ # binary integer
140
+ (r'#b[01]+', Number.Bin),
141
+
142
+ # octal integer
143
+ (r'#o[0-7]+', Number.Oct),
144
+
145
+ # floating point
146
+ (r'[-+]?(\d*\.\d+(e[-+]?\d+)?|\d+(\.\d*)?e[-+]?\d+)', Number.Float),
147
+
148
+ # decimal integer
149
+ (r'[-+]?\d+', Number.Integer),
150
+
151
+ # hex integer
152
+ (r'#x[0-9a-f]+', Number.Hex),
153
+
154
+ # Macro parameters
155
+ (r'(\?' + valid_name + ')(:)'
156
+ r'(token|name|variable|expression|body|case-body|\*)',
157
+ bygroups(Name.Tag, Operator, Name.Builtin)),
158
+ (r'(\?)(:)(token|name|variable|expression|body|case-body|\*)',
159
+ bygroups(Name.Tag, Operator, Name.Builtin)),
160
+ (r'\?' + valid_name, Name.Tag),
161
+
162
+ # Punctuation
163
+ (r'(=>|::|#\(|#\[|##|\?\?|\?=|\?|[(){}\[\],.;])', Punctuation),
164
+
165
+ # Most operators are picked up as names and then re-flagged.
166
+ # This one isn't valid in a name though, so we pick it up now.
167
+ (r':=', Operator),
168
+
169
+ # Pick up #t / #f before we match other stuff with #.
170
+ (r'#[tf]', Literal),
171
+
172
+ # #"foo" style keywords
173
+ (r'#"', String.Symbol, 'keyword'),
174
+
175
+ # #rest, #key, #all-keys, etc.
176
+ (r'#[a-z0-9-]+', Keyword),
177
+
178
+ # required-init-keyword: style keywords.
179
+ (valid_name + ':', Keyword),
180
+
181
+ # class names
182
+ ('<' + valid_name + '>', Name.Class),
183
+
184
+ # define variable forms.
185
+ (r'\*' + valid_name + r'\*', Name.Variable.Global),
186
+
187
+ # define constant forms.
188
+ (r'\$' + valid_name, Name.Constant),
189
+
190
+ # everything else. We re-flag some of these in the method above.
191
+ (valid_name, Name),
192
+ ],
193
+ 'comment': [
194
+ (r'[^*/]+', Comment.Multiline),
195
+ (r'/\*', Comment.Multiline, '#push'),
196
+ (r'\*/', Comment.Multiline, '#pop'),
197
+ (r'[*/]', Comment.Multiline)
198
+ ],
199
+ 'keyword': [
200
+ (r'"', String.Symbol, '#pop'),
201
+ (r'[^\\"]+', String.Symbol), # all other characters
202
+ ],
203
+ 'string': [
204
+ (r'"', String, '#pop'),
205
+ (r'\\([\\abfnrtv"\']|x[a-f0-9]{2,4}|[0-7]{1,3})', String.Escape),
206
+ (r'[^\\"\n]+', String), # all other characters
207
+ (r'\\\n', String), # line continuation
208
+ (r'\\', String), # stray backslash
209
+ ]
210
+ }
211
+
212
+
213
+ class DylanLidLexer(RegexLexer):
214
+ """
215
+ For Dylan LID (Library Interchange Definition) files.
216
+ """
217
+
218
+ name = 'DylanLID'
219
+ aliases = ['dylan-lid', 'lid']
220
+ filenames = ['*.lid', '*.hdp']
221
+ mimetypes = ['text/x-dylan-lid']
222
+ url = 'http://www.opendylan.org/'
223
+ version_added = '1.6'
224
+ flags = re.IGNORECASE
225
+
226
+ tokens = {
227
+ 'root': [
228
+ # Whitespace
229
+ (r'\s+', Whitespace),
230
+
231
+ # single line comment
232
+ (r'(//.*?)(\n)', bygroups(Comment.Single, Whitespace)),
233
+
234
+ # lid header
235
+ (r'(.*?)(:)([ \t]*)(.*(?:\n[ \t].+)*)',
236
+ bygroups(Name.Attribute, Operator, Whitespace, String)),
237
+ ]
238
+ }
239
+
240
+
241
+ class DylanConsoleLexer(Lexer):
242
+ """
243
+ For Dylan interactive console output.
244
+
245
+ This is based on a copy of the ``RubyConsoleLexer``.
246
+ """
247
+ name = 'Dylan session'
248
+ aliases = ['dylan-console', 'dylan-repl']
249
+ filenames = ['*.dylan-console']
250
+ mimetypes = ['text/x-dylan-console']
251
+ url = 'http://www.opendylan.org/'
252
+ version_added = '1.6'
253
+ _example = 'dylan-console/console.dylan-console'
254
+
255
+ _prompt_re = re.compile(r'\?| ')
256
+
257
+ def get_tokens_unprocessed(self, text):
258
+ dylexer = DylanLexer(**self.options)
259
+
260
+ curcode = ''
261
+ insertions = []
262
+ for match in line_re.finditer(text):
263
+ line = match.group()
264
+ m = self._prompt_re.match(line)
265
+ if m is not None:
266
+ end = m.end()
267
+ insertions.append((len(curcode),
268
+ [(0, Generic.Prompt, line[:end])]))
269
+ curcode += line[end:]
270
+ else:
271
+ if curcode:
272
+ yield from do_insertions(insertions,
273
+ dylexer.get_tokens_unprocessed(curcode))
274
+ curcode = ''
275
+ insertions = []
276
+ yield match.start(), Generic.Output, line
277
+ if curcode:
278
+ yield from do_insertions(insertions,
279
+ dylexer.get_tokens_unprocessed(curcode))
venv/Lib/site-packages/pygments/lexers/ecl.py ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.ecl
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for the ECL language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, include, bygroups, words
14
+ from pygments.token import Comment, Operator, Keyword, Name, String, \
15
+ Number, Punctuation, Whitespace
16
+
17
+ __all__ = ['ECLLexer']
18
+
19
+
20
+ class ECLLexer(RegexLexer):
21
+ """
22
+ Lexer for the declarative big-data ECL language.
23
+ """
24
+
25
+ name = 'ECL'
26
+ url = 'https://hpccsystems.com/training/documentation/ecl-language-reference/html'
27
+ aliases = ['ecl']
28
+ filenames = ['*.ecl']
29
+ mimetypes = ['application/x-ecl']
30
+ version_added = '1.5'
31
+
32
+ flags = re.IGNORECASE | re.MULTILINE
33
+
34
+ tokens = {
35
+ 'root': [
36
+ include('whitespace'),
37
+ include('statements'),
38
+ ],
39
+ 'whitespace': [
40
+ (r'\s+', Whitespace),
41
+ (r'\/\/.*', Comment.Single),
42
+ (r'/(\\\n)?\*[\s\S]*?\*(\\\n)?/', Comment.Multiline),
43
+ ],
44
+ 'statements': [
45
+ include('types'),
46
+ include('keywords'),
47
+ include('functions'),
48
+ include('hash'),
49
+ (r'"', String, 'string'),
50
+ (r'\'', String, 'string'),
51
+ (r'(\d+\.\d*|\.\d+|\d+)e[+-]?\d+[lu]*', Number.Float),
52
+ (r'(\d+\.\d*|\.\d+|\d+f)f?', Number.Float),
53
+ (r'0x[0-9a-f]+[lu]*', Number.Hex),
54
+ (r'0[0-7]+[lu]*', Number.Oct),
55
+ (r'\d+[lu]*', Number.Integer),
56
+ (r'[~!%^&*+=|?:<>/-]+', Operator),
57
+ (r'[{}()\[\],.;]', Punctuation),
58
+ (r'[a-z_]\w*', Name),
59
+ ],
60
+ 'hash': [
61
+ (r'^#.*$', Comment.Preproc),
62
+ ],
63
+ 'types': [
64
+ (r'(RECORD|END)\D', Keyword.Declaration),
65
+ (r'((?:ASCII|BIG_ENDIAN|BOOLEAN|DATA|DECIMAL|EBCDIC|INTEGER|PATTERN|'
66
+ r'QSTRING|REAL|RECORD|RULE|SET OF|STRING|TOKEN|UDECIMAL|UNICODE|'
67
+ r'UNSIGNED|VARSTRING|VARUNICODE)\d*)(\s+)',
68
+ bygroups(Keyword.Type, Whitespace)),
69
+ ],
70
+ 'keywords': [
71
+ (words((
72
+ 'APPLY', 'ASSERT', 'BUILD', 'BUILDINDEX', 'EVALUATE', 'FAIL',
73
+ 'KEYDIFF', 'KEYPATCH', 'LOADXML', 'NOTHOR', 'NOTIFY', 'OUTPUT',
74
+ 'PARALLEL', 'SEQUENTIAL', 'SOAPCALL', 'CHECKPOINT', 'DEPRECATED',
75
+ 'FAILCODE', 'FAILMESSAGE', 'FAILURE', 'GLOBAL', 'INDEPENDENT',
76
+ 'ONWARNING', 'PERSIST', 'PRIORITY', 'RECOVERY', 'STORED', 'SUCCESS',
77
+ 'WAIT', 'WHEN'), suffix=r'\b'),
78
+ Keyword.Reserved),
79
+ # These are classed differently, check later
80
+ (words((
81
+ 'ALL', 'AND', 'ANY', 'AS', 'ATMOST', 'BEFORE', 'BEGINC++', 'BEST',
82
+ 'BETWEEN', 'CASE', 'CONST', 'COUNTER', 'CSV', 'DESCEND', 'ENCRYPT',
83
+ 'ENDC++', 'ENDMACRO', 'EXCEPT', 'EXCLUSIVE', 'EXPIRE', 'EXPORT',
84
+ 'EXTEND', 'FALSE', 'FEW', 'FIRST', 'FLAT', 'FULL', 'FUNCTION',
85
+ 'GROUP', 'HEADER', 'HEADING', 'HOLE', 'IFBLOCK', 'IMPORT', 'IN',
86
+ 'JOINED', 'KEEP', 'KEYED', 'LAST', 'LEFT', 'LIMIT', 'LOAD', 'LOCAL',
87
+ 'LOCALE', 'LOOKUP', 'MACRO', 'MANY', 'MAXCOUNT', 'MAXLENGTH',
88
+ 'MIN SKEW', 'MODULE', 'INTERFACE', 'NAMED', 'NOCASE', 'NOROOT',
89
+ 'NOSCAN', 'NOSORT', 'NOT', 'OF', 'ONLY', 'OPT', 'OR', 'OUTER',
90
+ 'OVERWRITE', 'PACKED', 'PARTITION', 'PENALTY', 'PHYSICALLENGTH',
91
+ 'PIPE', 'QUOTE', 'RELATIONSHIP', 'REPEAT', 'RETURN', 'RIGHT',
92
+ 'SCAN', 'SELF', 'SEPARATOR', 'SERVICE', 'SHARED', 'SKEW', 'SKIP',
93
+ 'SQL', 'STORE', 'TERMINATOR', 'THOR', 'THRESHOLD', 'TOKEN',
94
+ 'TRANSFORM', 'TRIM', 'TRUE', 'TYPE', 'UNICODEORDER', 'UNSORTED',
95
+ 'VALIDATE', 'VIRTUAL', 'WHOLE', 'WILD', 'WITHIN', 'XML', 'XPATH',
96
+ '__COMPRESSED__'), suffix=r'\b'),
97
+ Keyword.Reserved),
98
+ ],
99
+ 'functions': [
100
+ (words((
101
+ 'ABS', 'ACOS', 'ALLNODES', 'ASCII', 'ASIN', 'ASSTRING', 'ATAN',
102
+ 'ATAN2', 'AVE', 'CASE', 'CHOOSE', 'CHOOSEN', 'CHOOSESETS',
103
+ 'CLUSTERSIZE', 'COMBINE', 'CORRELATION', 'COS', 'COSH', 'COUNT',
104
+ 'COVARIANCE', 'CRON', 'DATASET', 'DEDUP', 'DEFINE', 'DENORMALIZE',
105
+ 'DISTRIBUTE', 'DISTRIBUTED', 'DISTRIBUTION', 'EBCDIC', 'ENTH',
106
+ 'ERROR', 'EVALUATE', 'EVENT', 'EVENTEXTRA', 'EVENTNAME', 'EXISTS',
107
+ 'EXP', 'FAILCODE', 'FAILMESSAGE', 'FETCH', 'FROMUNICODE',
108
+ 'GETISVALID', 'GLOBAL', 'GRAPH', 'GROUP', 'HASH', 'HASH32',
109
+ 'HASH64', 'HASHCRC', 'HASHMD5', 'HAVING', 'IF', 'INDEX',
110
+ 'INTFORMAT', 'ISVALID', 'ITERATE', 'JOIN', 'KEYUNICODE', 'LENGTH',
111
+ 'LIBRARY', 'LIMIT', 'LN', 'LOCAL', 'LOG', 'LOOP', 'MAP', 'MATCHED',
112
+ 'MATCHLENGTH', 'MATCHPOSITION', 'MATCHTEXT', 'MATCHUNICODE', 'MAX',
113
+ 'MERGE', 'MERGEJOIN', 'MIN', 'NOLOCAL', 'NONEMPTY', 'NORMALIZE',
114
+ 'PARSE', 'PIPE', 'POWER', 'PRELOAD', 'PROCESS', 'PROJECT', 'PULL',
115
+ 'RANDOM', 'RANGE', 'RANK', 'RANKED', 'REALFORMAT', 'RECORDOF',
116
+ 'REGEXFIND', 'REGEXREPLACE', 'REGROUP', 'REJECTED', 'ROLLUP',
117
+ 'ROUND', 'ROUNDUP', 'ROW', 'ROWDIFF', 'SAMPLE', 'SET', 'SIN',
118
+ 'SINH', 'SIZEOF', 'SOAPCALL', 'SORT', 'SORTED', 'SQRT', 'STEPPED',
119
+ 'STORED', 'SUM', 'TABLE', 'TAN', 'TANH', 'THISNODE', 'TOPN',
120
+ 'TOUNICODE', 'TRANSFER', 'TRIM', 'TRUNCATE', 'TYPEOF', 'UNGROUP',
121
+ 'UNICODEORDER', 'VARIANCE', 'WHICH', 'WORKUNIT', 'XMLDECODE',
122
+ 'XMLENCODE', 'XMLTEXT', 'XMLUNICODE'), suffix=r'\b'),
123
+ Name.Function),
124
+ ],
125
+ 'string': [
126
+ (r'"', String, '#pop'),
127
+ (r'\'', String, '#pop'),
128
+ (r'[^"\']+', String),
129
+ ],
130
+ }
131
+
132
+ def analyse_text(text):
133
+ """This is very difficult to guess relative to other business languages.
134
+ -> in conjunction with BEGIN/END seems relatively rare though."""
135
+ result = 0
136
+
137
+ if '->' in text:
138
+ result += 0.01
139
+ if 'BEGIN' in text:
140
+ result += 0.01
141
+ if 'END' in text:
142
+ result += 0.01
143
+
144
+ return result
venv/Lib/site-packages/pygments/lexers/eiffel.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.eiffel
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Eiffel language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, include, words, bygroups
12
+ from pygments.token import Comment, Operator, Keyword, Name, String, Number, \
13
+ Punctuation, Whitespace
14
+
15
+ __all__ = ['EiffelLexer']
16
+
17
+
18
+ class EiffelLexer(RegexLexer):
19
+ """
20
+ For Eiffel source code.
21
+ """
22
+ name = 'Eiffel'
23
+ url = 'https://www.eiffel.com'
24
+ aliases = ['eiffel']
25
+ filenames = ['*.e']
26
+ mimetypes = ['text/x-eiffel']
27
+ version_added = '2.0'
28
+
29
+ tokens = {
30
+ 'root': [
31
+ (r'[^\S\n]+', Whitespace),
32
+ (r'--.*?$', Comment.Single),
33
+ # Please note that keyword and operator are case insensitive.
34
+ (r'(?i)(true|false|void|current|result|precursor)\b', Keyword.Constant),
35
+ (r'(?i)(not|xor|implies|or)\b', Operator.Word),
36
+ (r'(?i)(and)(?:(\s+)(then))?\b',
37
+ bygroups(Operator.Word, Whitespace, Operator.Word)),
38
+ (r'(?i)(or)(?:(\s+)(else))?\b',
39
+ bygroups(Operator.Word, Whitespace, Operator.Word)),
40
+ (words((
41
+ 'across', 'agent', 'alias', 'all', 'as', 'assign', 'attached',
42
+ 'attribute', 'check', 'class', 'convert', 'create', 'debug',
43
+ 'deferred', 'detachable', 'do', 'else', 'elseif', 'end', 'ensure',
44
+ 'expanded', 'export', 'external', 'feature', 'from', 'frozen', 'if',
45
+ 'inherit', 'inspect', 'invariant', 'like', 'local', 'loop', 'none',
46
+ 'note', 'obsolete', 'old', 'once', 'only', 'redefine', 'rename',
47
+ 'require', 'rescue', 'retry', 'select', 'separate', 'then',
48
+ 'undefine', 'until', 'variant', 'when'), prefix=r'(?i)\b', suffix=r'\b'),
49
+ Keyword.Reserved),
50
+ (r'"\[([^\]%]|%([\s\S])|\][^"])*?\]"', String),
51
+ (r'"([^"%\n]|%.)*?"', String),
52
+ include('numbers'),
53
+ (r"'([^'%]|%'|%%)'", String.Char),
54
+ (r"(//|\\\\|>=|<=|:=|/=|~|/~|[\\?!#%&@|+/\-=>*$<^\[\]])", Operator),
55
+ (r"([{}():;,.])", Punctuation),
56
+ (r'([a-z]\w*)|([A-Z][A-Z0-9_]*[a-z]\w*)', Name),
57
+ (r'([A-Z][A-Z0-9_]*)', Name.Class),
58
+ (r'\n+', Whitespace),
59
+ ],
60
+ 'numbers': [
61
+ (r'0[xX][a-fA-F0-9]+', Number.Hex),
62
+ (r'0[bB][01]+', Number.Bin),
63
+ (r'0[cC][0-7]+', Number.Oct),
64
+ (r'([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)', Number.Float),
65
+ (r'[0-9]+', Number.Integer),
66
+ ],
67
+ }
venv/Lib/site-packages/pygments/lexers/elm.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.elm
3
+ ~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Elm programming language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, words, include, bygroups
12
+ from pygments.token import Comment, Keyword, Name, Number, Punctuation, \
13
+ String, Whitespace
14
+
15
+ __all__ = ['ElmLexer']
16
+
17
+
18
+ class ElmLexer(RegexLexer):
19
+ """
20
+ For Elm source code.
21
+ """
22
+
23
+ name = 'Elm'
24
+ url = 'https://elm-lang.org/'
25
+ aliases = ['elm']
26
+ filenames = ['*.elm']
27
+ mimetypes = ['text/x-elm']
28
+ version_added = '2.1'
29
+
30
+ validName = r'[a-z_][a-zA-Z0-9_\']*'
31
+
32
+ specialName = r'^main '
33
+
34
+ builtinOps = (
35
+ '~', '||', '|>', '|', '`', '^', '\\', '\'', '>>', '>=', '>', '==',
36
+ '=', '<~', '<|', '<=', '<<', '<-', '<', '::', ':', '/=', '//', '/',
37
+ '..', '.', '->', '-', '++', '+', '*', '&&', '%',
38
+ )
39
+
40
+ reservedWords = words((
41
+ 'alias', 'as', 'case', 'else', 'if', 'import', 'in',
42
+ 'let', 'module', 'of', 'port', 'then', 'type', 'where',
43
+ ), suffix=r'\b')
44
+
45
+ tokens = {
46
+ 'root': [
47
+
48
+ # Comments
49
+ (r'\{-', Comment.Multiline, 'comment'),
50
+ (r'--.*', Comment.Single),
51
+
52
+ # Whitespace
53
+ (r'\s+', Whitespace),
54
+
55
+ # Strings
56
+ (r'"', String, 'doublequote'),
57
+
58
+ # Modules
59
+ (r'^(\s*)(module)(\s*)', bygroups(Whitespace, Keyword.Namespace,
60
+ Whitespace), 'imports'),
61
+
62
+ # Imports
63
+ (r'^(\s*)(import)(\s*)', bygroups(Whitespace, Keyword.Namespace,
64
+ Whitespace), 'imports'),
65
+
66
+ # Shaders
67
+ (r'\[glsl\|.*', Name.Entity, 'shader'),
68
+
69
+ # Keywords
70
+ (reservedWords, Keyword.Reserved),
71
+
72
+ # Types
73
+ (r'[A-Z][a-zA-Z0-9_]*', Keyword.Type),
74
+
75
+ # Main
76
+ (specialName, Keyword.Reserved),
77
+
78
+ # Prefix Operators
79
+ (words((builtinOps), prefix=r'\(', suffix=r'\)'), Name.Function),
80
+
81
+ # Infix Operators
82
+ (words(builtinOps), Name.Function),
83
+
84
+ # Numbers
85
+ include('numbers'),
86
+
87
+ # Variable Names
88
+ (validName, Name.Variable),
89
+
90
+ # Parens
91
+ (r'[,()\[\]{}]', Punctuation),
92
+
93
+ ],
94
+
95
+ 'comment': [
96
+ (r'-(?!\})', Comment.Multiline),
97
+ (r'\{-', Comment.Multiline, 'comment'),
98
+ (r'[^-}]', Comment.Multiline),
99
+ (r'-\}', Comment.Multiline, '#pop'),
100
+ ],
101
+
102
+ 'doublequote': [
103
+ (r'\\u[0-9a-fA-F]{4}', String.Escape),
104
+ (r'\\[nrfvb\\"]', String.Escape),
105
+ (r'[^"]', String),
106
+ (r'"', String, '#pop'),
107
+ ],
108
+
109
+ 'imports': [
110
+ (r'\w+(\.\w+)*', Name.Class, '#pop'),
111
+ ],
112
+
113
+ 'numbers': [
114
+ (r'_?\d+\.(?=\d+)', Number.Float),
115
+ (r'_?\d+', Number.Integer),
116
+ ],
117
+
118
+ 'shader': [
119
+ (r'\|(?!\])', Name.Entity),
120
+ (r'\|\]', Name.Entity, '#pop'),
121
+ (r'(.*)(\n)', bygroups(Name.Entity, Whitespace)),
122
+ ],
123
+ }
venv/Lib/site-packages/pygments/lexers/elpi.py ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.elpi
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the `Elpi <http://github.com/LPCIC/elpi>`_ programming language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, bygroups, include, using
12
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
13
+ Number, Punctuation
14
+
15
+ __all__ = ['ElpiLexer']
16
+
17
+ from pygments.lexers.theorem import RocqLexer
18
+
19
+ class ElpiLexer(RegexLexer):
20
+ """
21
+ Lexer for the Elpi programming language.
22
+ """
23
+
24
+ name = 'Elpi'
25
+ url = 'http://github.com/LPCIC/elpi'
26
+ aliases = ['elpi']
27
+ filenames = ['*.elpi']
28
+ mimetypes = ['text/x-elpi']
29
+ version_added = '2.11'
30
+
31
+ lcase_re = r"[a-z]"
32
+ ucase_re = r"[A-Z]"
33
+ digit_re = r"[0-9]"
34
+ schar2_re = r"([+*^?/<>`'@#~=&!])"
35
+ schar_re = rf"({schar2_re}|-|\$|_)"
36
+ idchar_re = rf"({lcase_re}|{ucase_re}|{digit_re}|{schar_re})"
37
+ idcharstarns_re = rf"({idchar_re}*(\.({lcase_re}|{ucase_re}){idchar_re}*)*)"
38
+ symbchar_re = rf"({lcase_re}|{ucase_re}|{digit_re}|{schar_re}|:)"
39
+ constant_re = rf"({ucase_re}{idchar_re}*|{lcase_re}{idcharstarns_re}|{schar2_re}{symbchar_re}*|_{idchar_re}+)"
40
+ symbol_re = r"(,|<=>|->|:-|;|\?-|->|&|=>|\bas\b|\buvar\b|<|=<|=|==|>=|>|\bi<|\bi=<|\bi>=|\bi>|\bis\b|\br<|\br=<|\br>=|\br>|\bs<|\bs=<|\bs>=|\bs>|@|::|\[\]|`->|`:|`:=|\^|-|\+|\bi-|\bi\+|r-|r\+|/|\*|\bdiv\b|\bi\*|\bmod\b|\br\*|~|\bi~|\br~)"
41
+ escape_re = rf"\(({constant_re}|{symbol_re})\)"
42
+ const_sym_re = rf"({constant_re}|{symbol_re}|{escape_re})"
43
+
44
+ tokens = {
45
+ 'root': [
46
+ include('elpi')
47
+ ],
48
+
49
+ 'elpi': [
50
+ include('_elpi-comment'),
51
+
52
+ (r"(:before|:after|:if|:name)(\s*)(\")",
53
+ bygroups(Keyword.Mode, Text.Whitespace, String.Double),
54
+ 'elpi-string'),
55
+ (r"(:index)(\s*)(\()", bygroups(Keyword.Mode, Text.Whitespace, Punctuation),
56
+ 'elpi-indexing-expr'),
57
+ (rf"\b(external pred|pred)(\s+)({const_sym_re})",
58
+ bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
59
+ 'elpi-pred-item'),
60
+ (rf"\b(func)(\s+)({const_sym_re})",
61
+ bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
62
+ 'elpi-func-item'),
63
+ (rf"\b(external type|type)(\s+)(({const_sym_re}(,\s*)?)+)",
64
+ bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
65
+ 'elpi-type'),
66
+ (rf"\b(kind)(\s+)(({const_sym_re}|,)+)",
67
+ bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
68
+ 'elpi-type'),
69
+ (rf"\b(typeabbrev)(\s+)({const_sym_re})",
70
+ bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
71
+ 'elpi-type'),
72
+ (r"\b(typeabbrev)(\s+)(\([^)]+\))",
73
+ bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
74
+ 'elpi-type'),
75
+ (r"\b(accumulate)(\s+)(\")",
76
+ bygroups(Keyword.Declaration, Text.Whitespace, String.Double),
77
+ 'elpi-string'),
78
+ (rf"\b(accumulate|namespace|local)(\s+)({constant_re})",
79
+ bygroups(Keyword.Declaration, Text.Whitespace, Text)),
80
+ (rf"\b(shorten)(\s+)({constant_re}\.)",
81
+ bygroups(Keyword.Declaration, Text.Whitespace, Text)),
82
+ (r"\b(pi|sigma)(\s+)([a-zA-Z][A-Za-z0-9_ ]*)(\\)",
83
+ bygroups(Keyword.Declaration, Text.Whitespace, Name.Variable, Text)),
84
+ (rf"\b(constraint)(\s+)(({const_sym_re}(\s+)?)+)",
85
+ bygroups(Keyword.Declaration, Text.Whitespace, Name.Function),
86
+ 'elpi-chr-rule-start'),
87
+
88
+ (rf"(?=[A-Z_]){constant_re}", Name.Variable),
89
+ (rf"(?=[a-z_])({constant_re}|_)\\", Name.Variable),
90
+ (r"_", Name.Variable),
91
+ (rf"({symbol_re}|!|=>|;)", Keyword.Declaration),
92
+ (constant_re, Text),
93
+ (r"\[|\]|\||=>", Keyword.Declaration),
94
+ (r'"', String.Double, 'elpi-string'),
95
+ (r'`', String.Double, 'elpi-btick'),
96
+ (r'\'', String.Double, 'elpi-tick'),
97
+ (r'\{\{', Punctuation, 'elpi-quote'),
98
+ (r'\{[^\{]', Text, 'elpi-spill'),
99
+ (r"\(", Punctuation, 'elpi-in-parens'),
100
+ (r'\d[\d_]*', Number.Integer),
101
+ (r'-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)', Number.Float),
102
+ (r"[\+\*\-/\^\.]", Operator),
103
+ ],
104
+ '_elpi-comment': [
105
+ (r'%[^\n]*\n', Comment),
106
+ (r'/(?:\\\n)?[*](?:[^*]|[*](?!(?:\\\n)?/))*[*](?:\\\n)?/', Comment),
107
+ (r"\s+", Text.Whitespace),
108
+ ],
109
+ 'elpi-indexing-expr':[
110
+ (r'[0-9 _]+', Number.Integer),
111
+ (r'\)', Punctuation, '#pop'),
112
+ ],
113
+ 'elpi-type': [
114
+ (r"(ctype\s+)(\")", bygroups(Keyword.Type, String.Double), 'elpi-string'),
115
+ (r'->', Keyword.Type),
116
+ (r'prop', Keyword.Mode),
117
+ (constant_re, Keyword.Type),
118
+ (r"\(|\)", Keyword.Type),
119
+ (r"\.", Text, '#pop'),
120
+ include('_elpi-comment'),
121
+ ],
122
+ 'elpi-chr-rule-start': [
123
+ (r"\{", Punctuation, 'elpi-chr-rule'),
124
+ include('_elpi-comment'),
125
+ ],
126
+ 'elpi-chr-rule': [
127
+ (r"\brule\b", Keyword.Declaration),
128
+ (r"\\", Keyword.Declaration),
129
+ (r"\}", Punctuation, '#pop:2'),
130
+ include('elpi'),
131
+ ],
132
+ 'elpi-pred-item': [
133
+ (r"[io]:", Keyword.Mode),
134
+ (r"\.", Text, '#pop'),
135
+ (r",", Keyword.Mode),
136
+ include('_elpi-inner-pred-fun'),
137
+ (r"\)", Keyword.Mode, '#pop'),
138
+ (r"\(", Keyword.Type, '_elpi-type-item'),
139
+ include('_elpi-comment'),
140
+ include('_elpi-type-item'),
141
+ ],
142
+ 'elpi-func-item': [
143
+ (constant_re, Keyword.Type),
144
+ (r"\.", Text, '#pop'),
145
+ (r",", Keyword.Mode),
146
+ (r'->', Keyword.Mode),
147
+ include('_elpi-inner-pred-fun'),
148
+ (r"\)", Keyword.Mode, '#pop'),
149
+ (r"\(", Keyword.Type, '_elpi-type-item'),
150
+ include('_elpi-comment'),
151
+ include('_elpi-type-item'),
152
+ ],
153
+ '_elpi-inner-pred-fun': [
154
+ (r"(\()(\s*)(pred)", bygroups(Keyword.Mode,Text.Whitespace,Keyword.Declaration), 'elpi-pred-item'),
155
+ (r"(\()(\s*)(func)", bygroups(Keyword.Mode,Text.Whitespace,Keyword.Declaration), 'elpi-func-item'),
156
+ ],
157
+ '_elpi-type-item': [
158
+ (r'->', Keyword.Type),
159
+ (constant_re, Keyword.Type),
160
+ include('_elpi-inner-pred-fun'),
161
+ (r"\(", Keyword.Type, '#push'),
162
+ (r"\)", Keyword.Type, '#pop'),
163
+ include('_elpi-comment'),
164
+ ],
165
+
166
+ ''
167
+
168
+ 'elpi-btick': [
169
+ (r'[^` ]+', String.Double),
170
+ (r'`', String.Double, '#pop'),
171
+ ],
172
+ 'elpi-tick': [
173
+ (r'[^\' ]+', String.Double),
174
+ (r'\'', String.Double, '#pop'),
175
+ ],
176
+ 'elpi-string': [
177
+ (r'[^\"]+', String.Double),
178
+ (r'"', String.Double, '#pop'),
179
+ ],
180
+ 'elpi-quote': [
181
+ (r'\}\}', Punctuation, '#pop'),
182
+ (r"\s+", Text.Whitespace),
183
+ (r"(lp:)(\{\{)", bygroups(Number, Punctuation), 'elpi-quote-exit'),
184
+ (rf"(lp:)((?=[A-Z_]){constant_re})", bygroups(Number, Name.Variable)),
185
+ (r"((?!lp:|\}\}).)+", using(RocqLexer)),
186
+ ],
187
+ 'elpi-quote-exit': [
188
+ include('elpi'),
189
+ (r'\}\}', Punctuation, '#pop'),
190
+ ],
191
+ 'elpi-spill': [
192
+ (r'\{[^\{]', Text, '#push'),
193
+ (r'\}[^\}]', Text, '#pop'),
194
+ include('elpi'),
195
+ ],
196
+ 'elpi-in-parens': [
197
+ (r"\(", Punctuation, '#push'),
198
+ include('elpi'),
199
+ (r"\)", Punctuation, '#pop'),
200
+ ],
201
+ }
venv/Lib/site-packages/pygments/lexers/email.py ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.email
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the raw E-mail.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, DelegatingLexer, bygroups
12
+ from pygments.lexers.mime import MIMELexer
13
+ from pygments.token import Text, Keyword, Name, String, Number, Comment
14
+ from pygments.util import get_bool_opt
15
+
16
+ __all__ = ["EmailLexer"]
17
+
18
+
19
+ class EmailHeaderLexer(RegexLexer):
20
+ """
21
+ Sub-lexer for raw E-mail. This lexer only process header part of e-mail.
22
+
23
+ .. versionadded:: 2.5
24
+ """
25
+
26
+ def __init__(self, **options):
27
+ super().__init__(**options)
28
+ self.highlight_x = get_bool_opt(options, "highlight-X-header", False)
29
+
30
+ def get_x_header_tokens(self, match):
31
+ if self.highlight_x:
32
+ # field
33
+ yield match.start(1), Name.Tag, match.group(1)
34
+
35
+ # content
36
+ default_actions = self.get_tokens_unprocessed(
37
+ match.group(2), stack=("root", "header"))
38
+ yield from default_actions
39
+ else:
40
+ # lowlight
41
+ yield match.start(1), Comment.Special, match.group(1)
42
+ yield match.start(2), Comment.Multiline, match.group(2)
43
+
44
+ tokens = {
45
+ "root": [
46
+ (r"^(?:[A-WYZ]|X400)[\w\-]*:", Name.Tag, "header"),
47
+ (r"^(X-(?:\w[\w\-]*:))([\s\S]*?\n)(?![ \t])", get_x_header_tokens),
48
+ ],
49
+ "header": [
50
+ # folding
51
+ (r"\n[ \t]", Text.Whitespace),
52
+ (r"\n(?![ \t])", Text.Whitespace, "#pop"),
53
+
54
+ # keywords
55
+ (r"\bE?SMTPS?\b", Keyword),
56
+ (r"\b(?:HE|EH)LO\b", Keyword),
57
+
58
+ # mailbox
59
+ (r"[\w\.\-\+=]+@[\w\.\-]+", Name.Label),
60
+ (r"<[\w\.\-\+=]+@[\w\.\-]+>", Name.Label),
61
+
62
+ # domain
63
+ (r"\b(\w[\w\.-]*\.[\w\.-]*\w[a-zA-Z]+)\b", Name.Function),
64
+
65
+ # IPv4
66
+ (r"\b(?:(?:25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.){3}(?:25[0"
67
+ r"-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b",
68
+ Number.Integer),
69
+
70
+ # IPv6
71
+ (r"\b([0-9a-fA-F]{1,4}:){1,7}:\B", Number.Hex),
72
+ (r"\b:((:[0-9a-fA-F]{1,4}){1,7}|:)\b", Number.Hex),
73
+ (r"\b([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}\b", Number.Hex),
74
+ (r"\b([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}\b", Number.Hex),
75
+ (r"\b[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})\b", Number.Hex),
76
+ (r"\bfe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}\b", Number.Hex),
77
+ (r"\b([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}\b", Number.Hex),
78
+ (r"\b([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}\b",
79
+ Number.Hex),
80
+ (r"\b([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}\b",
81
+ Number.Hex),
82
+ (r"\b([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}\b",
83
+ Number.Hex),
84
+ (r"\b::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}"
85
+ r"[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}"
86
+ r"[0-9])\b",
87
+ Number.Hex),
88
+ (r"\b([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9])"
89
+ r"{0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\b",
90
+ Number.Hex),
91
+
92
+ # Date time
93
+ (r"(?:(Sun|Mon|Tue|Wed|Thu|Fri|Sat),\s+)?(0[1-9]|[1-2]?[0-9]|3["
94
+ r"01])\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+("
95
+ r"19[0-9]{2}|[2-9][0-9]{3})\s+(2[0-3]|[0-1][0-9]):([0-5][0-9])"
96
+ r"(?::(60|[0-5][0-9]))?(?:\.\d{1,5})?\s+([-\+][0-9]{2}[0-5][0-"
97
+ r"9]|\(?(?:UTC?|GMT|(?:E|C|M|P)(?:ST|ET|DT)|[A-IK-Z])\)?)",
98
+ Name.Decorator),
99
+
100
+ # RFC-2047 encoded string
101
+ (r"(=\?)([\w-]+)(\?)([BbQq])(\?)([\[\w!\"#$%&\'()*+,-./:;<=>@[\\"
102
+ r"\]^_`{|}~]+)(\?=)",
103
+ bygroups(String.Affix, Name.Constant, String.Affix, Keyword.Constant,
104
+ String.Affix, Number.Hex, String.Affix)),
105
+
106
+ # others
107
+ (r'[\s]+', Text.Whitespace),
108
+ (r'[\S]', Text),
109
+ ],
110
+ }
111
+
112
+
113
+ class EmailLexer(DelegatingLexer):
114
+ """
115
+ Lexer for raw E-mail.
116
+
117
+ Additional options accepted:
118
+
119
+ `highlight-X-header`
120
+ Highlight the fields of ``X-`` user-defined email header. (default:
121
+ ``False``).
122
+ """
123
+
124
+ name = "E-mail"
125
+ aliases = ["email", "eml"]
126
+ filenames = ["*.eml"]
127
+ mimetypes = ["message/rfc822"]
128
+ url = "https://en.wikipedia.org/wiki/Email#Message_format"
129
+ version_added = '2.5'
130
+
131
+ def __init__(self, **options):
132
+ super().__init__(EmailHeaderLexer, MIMELexer, Comment, **options)
venv/Lib/site-packages/pygments/lexers/erlang.py ADDED
@@ -0,0 +1,526 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.erlang
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for Erlang.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import Lexer, RegexLexer, bygroups, words, do_insertions, \
14
+ include, default, line_re
15
+ from pygments.token import Comment, Operator, Keyword, Name, String, \
16
+ Number, Punctuation, Generic, Whitespace
17
+
18
+ __all__ = ['ErlangLexer', 'ErlangShellLexer', 'ElixirConsoleLexer',
19
+ 'ElixirLexer']
20
+
21
+
22
+ class ErlangLexer(RegexLexer):
23
+ """
24
+ For the Erlang functional programming language.
25
+ """
26
+
27
+ name = 'Erlang'
28
+ url = 'https://www.erlang.org/'
29
+ aliases = ['erlang']
30
+ filenames = ['*.erl', '*.hrl', '*.es', '*.escript']
31
+ mimetypes = ['text/x-erlang']
32
+ version_added = '0.9'
33
+
34
+ keywords = (
35
+ 'after', 'begin', 'case', 'catch', 'cond', 'end', 'fun', 'if',
36
+ 'let', 'of', 'query', 'receive', 'try', 'when',
37
+ )
38
+
39
+ builtins = ( # See erlang(3) man page
40
+ 'abs', 'append_element', 'apply', 'atom_to_list', 'binary_to_list',
41
+ 'bitstring_to_list', 'binary_to_term', 'bit_size', 'bump_reductions',
42
+ 'byte_size', 'cancel_timer', 'check_process_code', 'delete_module',
43
+ 'demonitor', 'disconnect_node', 'display', 'element', 'erase', 'exit',
44
+ 'float', 'float_to_list', 'fun_info', 'fun_to_list',
45
+ 'function_exported', 'garbage_collect', 'get', 'get_keys',
46
+ 'group_leader', 'hash', 'hd', 'integer_to_list', 'iolist_to_binary',
47
+ 'iolist_size', 'is_atom', 'is_binary', 'is_bitstring', 'is_boolean',
48
+ 'is_builtin', 'is_float', 'is_function', 'is_integer', 'is_list',
49
+ 'is_number', 'is_pid', 'is_port', 'is_process_alive', 'is_record',
50
+ 'is_reference', 'is_tuple', 'length', 'link', 'list_to_atom',
51
+ 'list_to_binary', 'list_to_bitstring', 'list_to_existing_atom',
52
+ 'list_to_float', 'list_to_integer', 'list_to_pid', 'list_to_tuple',
53
+ 'load_module', 'localtime_to_universaltime', 'make_tuple', 'md5',
54
+ 'md5_final', 'md5_update', 'memory', 'module_loaded', 'monitor',
55
+ 'monitor_node', 'node', 'nodes', 'open_port', 'phash', 'phash2',
56
+ 'pid_to_list', 'port_close', 'port_command', 'port_connect',
57
+ 'port_control', 'port_call', 'port_info', 'port_to_list',
58
+ 'process_display', 'process_flag', 'process_info', 'purge_module',
59
+ 'put', 'read_timer', 'ref_to_list', 'register', 'resume_process',
60
+ 'round', 'send', 'send_after', 'send_nosuspend', 'set_cookie',
61
+ 'setelement', 'size', 'spawn', 'spawn_link', 'spawn_monitor',
62
+ 'spawn_opt', 'split_binary', 'start_timer', 'statistics',
63
+ 'suspend_process', 'system_flag', 'system_info', 'system_monitor',
64
+ 'system_profile', 'term_to_binary', 'tl', 'trace', 'trace_delivered',
65
+ 'trace_info', 'trace_pattern', 'trunc', 'tuple_size', 'tuple_to_list',
66
+ 'universaltime_to_localtime', 'unlink', 'unregister', 'whereis'
67
+ )
68
+
69
+ operators = r'(\+\+?|--?|\*|/|<|>|/=|=:=|=/=|=<|>=|==?|<-|!|\?)'
70
+ word_operators = (
71
+ 'and', 'andalso', 'band', 'bnot', 'bor', 'bsl', 'bsr', 'bxor',
72
+ 'div', 'not', 'or', 'orelse', 'rem', 'xor'
73
+ )
74
+
75
+ atom_re = r"(?:[a-z]\w*|'[^\n']*[^\\]')"
76
+
77
+ variable_re = r'(?:[A-Z_]\w*)'
78
+
79
+ esc_char_re = r'[bdefnrstv\'"\\]'
80
+ esc_octal_re = r'[0-7][0-7]?[0-7]?'
81
+ esc_hex_re = r'(?:x[0-9a-fA-F]{2}|x\{[0-9a-fA-F]+\})'
82
+ esc_ctrl_re = r'\^[a-zA-Z]'
83
+ escape_re = r'(?:\\(?:'+esc_char_re+r'|'+esc_octal_re+r'|'+esc_hex_re+r'|'+esc_ctrl_re+r'))'
84
+
85
+ macro_re = r'(?:'+variable_re+r'|'+atom_re+r')'
86
+
87
+ base_re = r'(?:[2-9]|[12][0-9]|3[0-6])'
88
+
89
+ tokens = {
90
+ 'root': [
91
+ (r'\s+', Whitespace),
92
+ (r'(%.*)(\n)', bygroups(Comment, Whitespace)),
93
+ (words(keywords, suffix=r'\b'), Keyword),
94
+ (words(builtins, suffix=r'\b'), Name.Builtin),
95
+ (words(word_operators, suffix=r'\b'), Operator.Word),
96
+ (r'^-', Punctuation, 'directive'),
97
+ (operators, Operator),
98
+ (r'"', String, 'string'),
99
+ (r'<<', Name.Label),
100
+ (r'>>', Name.Label),
101
+ ('(' + atom_re + ')(:)', bygroups(Name.Namespace, Punctuation)),
102
+ ('(?:^|(?<=:))(' + atom_re + r')(\s*)(\()',
103
+ bygroups(Name.Function, Whitespace, Punctuation)),
104
+ (r'[+-]?' + base_re + r'#[0-9a-zA-Z]+', Number.Integer),
105
+ (r'[+-]?\d+', Number.Integer),
106
+ (r'[+-]?\d+.\d+', Number.Float),
107
+ (r'[]\[:_@\".{}()|;,]', Punctuation),
108
+ (variable_re, Name.Variable),
109
+ (atom_re, Name),
110
+ (r'\?'+macro_re, Name.Constant),
111
+ (r'\$(?:'+escape_re+r'|\\[ %]|[^\\])', String.Char),
112
+ (r'#'+atom_re+r'(:?\.'+atom_re+r')?', Name.Label),
113
+
114
+ # Erlang script shebang
115
+ (r'\A#!.+\n', Comment.Hashbang),
116
+
117
+ # EEP 43: Maps
118
+ # http://www.erlang.org/eeps/eep-0043.html
119
+ (r'#\{', Punctuation, 'map_key'),
120
+ ],
121
+ 'string': [
122
+ (escape_re, String.Escape),
123
+ (r'"', String, '#pop'),
124
+ (r'~[0-9.*]*[~#+BPWXb-ginpswx]', String.Interpol),
125
+ (r'[^"\\~]+', String),
126
+ (r'~', String),
127
+ ],
128
+ 'directive': [
129
+ (r'(define)(\s*)(\()('+macro_re+r')',
130
+ bygroups(Name.Entity, Whitespace, Punctuation, Name.Constant), '#pop'),
131
+ (r'(record)(\s*)(\()('+macro_re+r')',
132
+ bygroups(Name.Entity, Whitespace, Punctuation, Name.Label), '#pop'),
133
+ (atom_re, Name.Entity, '#pop'),
134
+ ],
135
+ 'map_key': [
136
+ include('root'),
137
+ (r'=>', Punctuation, 'map_val'),
138
+ (r':=', Punctuation, 'map_val'),
139
+ (r'\}', Punctuation, '#pop'),
140
+ ],
141
+ 'map_val': [
142
+ include('root'),
143
+ (r',', Punctuation, '#pop'),
144
+ (r'(?=\})', Punctuation, '#pop'),
145
+ ],
146
+ }
147
+
148
+
149
+ class ErlangShellLexer(Lexer):
150
+ """
151
+ Shell sessions in erl (for Erlang code).
152
+ """
153
+ name = 'Erlang erl session'
154
+ aliases = ['erl']
155
+ filenames = ['*.erl-sh']
156
+ mimetypes = ['text/x-erl-shellsession']
157
+ url = 'https://www.erlang.org/'
158
+ version_added = '1.1'
159
+
160
+ _prompt_re = re.compile(r'(?:\([\w@_.]+\))?\d+>(?=\s|\Z)')
161
+
162
+ def get_tokens_unprocessed(self, text):
163
+ erlexer = ErlangLexer(**self.options)
164
+
165
+ curcode = ''
166
+ insertions = []
167
+ for match in line_re.finditer(text):
168
+ line = match.group()
169
+ m = self._prompt_re.match(line)
170
+ if m is not None:
171
+ end = m.end()
172
+ insertions.append((len(curcode),
173
+ [(0, Generic.Prompt, line[:end])]))
174
+ curcode += line[end:]
175
+ else:
176
+ if curcode:
177
+ yield from do_insertions(insertions,
178
+ erlexer.get_tokens_unprocessed(curcode))
179
+ curcode = ''
180
+ insertions = []
181
+ if line.startswith('*'):
182
+ yield match.start(), Generic.Traceback, line
183
+ else:
184
+ yield match.start(), Generic.Output, line
185
+ if curcode:
186
+ yield from do_insertions(insertions,
187
+ erlexer.get_tokens_unprocessed(curcode))
188
+
189
+
190
+ def gen_elixir_string_rules(name, symbol, token):
191
+ states = {}
192
+ states['string_' + name] = [
193
+ (rf'[^#{symbol}\\]+', token),
194
+ include('escapes'),
195
+ (r'\\.', token),
196
+ (rf'({symbol})', bygroups(token), "#pop"),
197
+ include('interpol')
198
+ ]
199
+ return states
200
+
201
+
202
+ def gen_elixir_sigstr_rules(term, term_class, token, interpol=True):
203
+ if interpol:
204
+ return [
205
+ (rf'[^#{term_class}\\]+', token),
206
+ include('escapes'),
207
+ (r'\\.', token),
208
+ (rf'{term}[a-zA-Z]*', token, '#pop'),
209
+ include('interpol')
210
+ ]
211
+ else:
212
+ return [
213
+ (rf'[^{term_class}\\]+', token),
214
+ (r'\\.', token),
215
+ (rf'{term}[a-zA-Z]*', token, '#pop'),
216
+ ]
217
+
218
+
219
+ class ElixirLexer(RegexLexer):
220
+ """
221
+ For the Elixir language.
222
+ """
223
+
224
+ name = 'Elixir'
225
+ url = 'https://elixir-lang.org'
226
+ aliases = ['elixir', 'ex', 'exs']
227
+ filenames = ['*.ex', '*.eex', '*.exs', '*.leex']
228
+ mimetypes = ['text/x-elixir']
229
+ version_added = '1.5'
230
+
231
+ KEYWORD = ('fn', 'do', 'end', 'after', 'else', 'rescue', 'catch')
232
+ KEYWORD_OPERATOR = ('not', 'and', 'or', 'when', 'in')
233
+ BUILTIN = (
234
+ 'case', 'cond', 'for', 'if', 'unless', 'try', 'receive', 'raise',
235
+ 'quote', 'unquote', 'unquote_splicing', 'throw', 'super',
236
+ )
237
+ BUILTIN_DECLARATION = (
238
+ 'def', 'defp', 'defmodule', 'defprotocol', 'defmacro', 'defmacrop',
239
+ 'defdelegate', 'defexception', 'defstruct', 'defimpl', 'defcallback',
240
+ )
241
+
242
+ BUILTIN_NAMESPACE = ('import', 'require', 'use', 'alias')
243
+ CONSTANT = ('nil', 'true', 'false')
244
+
245
+ PSEUDO_VAR = ('_', '__MODULE__', '__DIR__', '__ENV__', '__CALLER__')
246
+
247
+ OPERATORS3 = (
248
+ '<<<', '>>>', '|||', '&&&', '^^^', '~~~', '===', '!==',
249
+ '~>>', '<~>', '|~>', '<|>',
250
+ )
251
+ OPERATORS2 = (
252
+ '==', '!=', '<=', '>=', '&&', '||', '<>', '++', '--', '|>', '=~',
253
+ '->', '<-', '|', '.', '=', '~>', '<~',
254
+ )
255
+ OPERATORS1 = ('<', '>', '+', '-', '*', '/', '!', '^', '&')
256
+
257
+ PUNCTUATION = (
258
+ '\\\\', '<<', '>>', '=>', '(', ')', ':', ';', ',', '[', ']',
259
+ )
260
+
261
+ def get_tokens_unprocessed(self, text):
262
+ for index, token, value in RegexLexer.get_tokens_unprocessed(self, text):
263
+ if token is Name:
264
+ if value in self.KEYWORD:
265
+ yield index, Keyword, value
266
+ elif value in self.KEYWORD_OPERATOR:
267
+ yield index, Operator.Word, value
268
+ elif value in self.BUILTIN:
269
+ yield index, Keyword, value
270
+ elif value in self.BUILTIN_DECLARATION:
271
+ yield index, Keyword.Declaration, value
272
+ elif value in self.BUILTIN_NAMESPACE:
273
+ yield index, Keyword.Namespace, value
274
+ elif value in self.CONSTANT:
275
+ yield index, Name.Constant, value
276
+ elif value in self.PSEUDO_VAR:
277
+ yield index, Name.Builtin.Pseudo, value
278
+ else:
279
+ yield index, token, value
280
+ else:
281
+ yield index, token, value
282
+
283
+ def gen_elixir_sigil_rules():
284
+ # all valid sigil terminators (excluding heredocs)
285
+ terminators = [
286
+ (r'\{', r'\}', '}', 'cb'),
287
+ (r'\[', r'\]', r'\]', 'sb'),
288
+ (r'\(', r'\)', ')', 'pa'),
289
+ ('<', '>', '>', 'ab'),
290
+ ('/', '/', '/', 'slas'),
291
+ (r'\|', r'\|', '|', 'pipe'),
292
+ ('"', '"', '"', 'quot'),
293
+ ("'", "'", "'", 'apos'),
294
+ ]
295
+
296
+ # heredocs have slightly different rules
297
+ triquotes = [(r'"""', 'triquot'), (r"'''", 'triapos')]
298
+
299
+ token = String.Other
300
+ states = {'sigils': []}
301
+
302
+ for term, name in triquotes:
303
+ states['sigils'] += [
304
+ (rf'(~[a-z])({term})', bygroups(token, String.Heredoc),
305
+ (name + '-end', name + '-intp')),
306
+ (rf'(~[A-Z])({term})', bygroups(token, String.Heredoc),
307
+ (name + '-end', name + '-no-intp')),
308
+ ]
309
+
310
+ states[name + '-end'] = [
311
+ (r'[a-zA-Z]+', token, '#pop'),
312
+ default('#pop'),
313
+ ]
314
+ states[name + '-intp'] = [
315
+ (r'^(\s*)(' + term + ')', bygroups(Whitespace, String.Heredoc), '#pop'),
316
+ include('heredoc_interpol'),
317
+ ]
318
+ states[name + '-no-intp'] = [
319
+ (r'^(\s*)(' + term +')', bygroups(Whitespace, String.Heredoc), '#pop'),
320
+ include('heredoc_no_interpol'),
321
+ ]
322
+
323
+ for lterm, rterm, rterm_class, name in terminators:
324
+ states['sigils'] += [
325
+ (r'~[a-z]' + lterm, token, name + '-intp'),
326
+ (r'~[A-Z]' + lterm, token, name + '-no-intp'),
327
+ ]
328
+ states[name + '-intp'] = \
329
+ gen_elixir_sigstr_rules(rterm, rterm_class, token)
330
+ states[name + '-no-intp'] = \
331
+ gen_elixir_sigstr_rules(rterm, rterm_class, token, interpol=False)
332
+
333
+ return states
334
+
335
+ op3_re = "|".join(re.escape(s) for s in OPERATORS3)
336
+ op2_re = "|".join(re.escape(s) for s in OPERATORS2)
337
+ op1_re = "|".join(re.escape(s) for s in OPERATORS1)
338
+ ops_re = rf'(?:{op3_re}|{op2_re}|{op1_re})'
339
+ punctuation_re = "|".join(re.escape(s) for s in PUNCTUATION)
340
+ alnum = r'\w'
341
+ name_re = rf'(?:\.\.\.|[a-z_]{alnum}*[!?]?)'
342
+ modname_re = rf'[A-Z]{alnum}*(?:\.[A-Z]{alnum}*)*'
343
+ complex_name_re = rf'(?:{name_re}|{modname_re}|{ops_re})'
344
+ special_atom_re = r'(?:\.\.\.|<<>>|%\{\}|%|\{\})'
345
+
346
+ long_hex_char_re = r'(\\x\{)([\da-fA-F]+)(\})'
347
+ hex_char_re = r'(\\x[\da-fA-F]{1,2})'
348
+ escape_char_re = r'(\\[abdefnrstv])'
349
+
350
+ tokens = {
351
+ 'root': [
352
+ (r'\s+', Whitespace),
353
+ (r'#.*$', Comment.Single),
354
+
355
+ # Various kinds of characters
356
+ (r'(\?)' + long_hex_char_re,
357
+ bygroups(String.Char,
358
+ String.Escape, Number.Hex, String.Escape)),
359
+ (r'(\?)' + hex_char_re,
360
+ bygroups(String.Char, String.Escape)),
361
+ (r'(\?)' + escape_char_re,
362
+ bygroups(String.Char, String.Escape)),
363
+ (r'\?\\?.', String.Char),
364
+
365
+ # '::' has to go before atoms
366
+ (r':::', String.Symbol),
367
+ (r'::', Operator),
368
+
369
+ # atoms
370
+ (r':' + special_atom_re, String.Symbol),
371
+ (r':' + complex_name_re, String.Symbol),
372
+ (r':"', String.Symbol, 'string_double_atom'),
373
+ (r":'", String.Symbol, 'string_single_atom'),
374
+
375
+ # [keywords: ...]
376
+ (rf'({special_atom_re}|{complex_name_re})(:)(?=\s|\n)',
377
+ bygroups(String.Symbol, Punctuation)),
378
+
379
+ # @attributes
380
+ (r'@' + name_re, Name.Attribute),
381
+
382
+ # identifiers
383
+ (name_re, Name),
384
+ (rf'(%?)({modname_re})', bygroups(Punctuation, Name.Class)),
385
+
386
+ # operators and punctuation
387
+ (op3_re, Operator),
388
+ (op2_re, Operator),
389
+ (punctuation_re, Punctuation),
390
+ (r'&\d', Name.Entity), # anon func arguments
391
+ (op1_re, Operator),
392
+
393
+ # numbers
394
+ (r'0b[01]+', Number.Bin),
395
+ (r'0o[0-7]+', Number.Oct),
396
+ (r'0x[\da-fA-F]+', Number.Hex),
397
+ (r'\d(_?\d)*\.\d(_?\d)*([eE][-+]?\d(_?\d)*)?', Number.Float),
398
+ (r'\d(_?\d)*', Number.Integer),
399
+
400
+ # strings and heredocs
401
+ (r'(""")(\s*)', bygroups(String.Heredoc, Whitespace),
402
+ 'heredoc_double'),
403
+ (r"(''')(\s*)$", bygroups(String.Heredoc, Whitespace),
404
+ 'heredoc_single'),
405
+ (r'"', String.Double, 'string_double'),
406
+ (r"'", String.Single, 'string_single'),
407
+
408
+ include('sigils'),
409
+
410
+ (r'%\{', Punctuation, 'map_key'),
411
+ (r'\{', Punctuation, 'tuple'),
412
+ ],
413
+ 'heredoc_double': [
414
+ (r'^(\s*)(""")', bygroups(Whitespace, String.Heredoc), '#pop'),
415
+ include('heredoc_interpol'),
416
+ ],
417
+ 'heredoc_single': [
418
+ (r"^\s*'''", String.Heredoc, '#pop'),
419
+ include('heredoc_interpol'),
420
+ ],
421
+ 'heredoc_interpol': [
422
+ (r'[^#\\\n]+', String.Heredoc),
423
+ include('escapes'),
424
+ (r'\\.', String.Heredoc),
425
+ (r'\n+', String.Heredoc),
426
+ include('interpol'),
427
+ ],
428
+ 'heredoc_no_interpol': [
429
+ (r'[^\\\n]+', String.Heredoc),
430
+ (r'\\.', String.Heredoc),
431
+ (r'\n+', Whitespace),
432
+ ],
433
+ 'escapes': [
434
+ (long_hex_char_re,
435
+ bygroups(String.Escape, Number.Hex, String.Escape)),
436
+ (hex_char_re, String.Escape),
437
+ (escape_char_re, String.Escape),
438
+ ],
439
+ 'interpol': [
440
+ (r'#\{', String.Interpol, 'interpol_string'),
441
+ ],
442
+ 'interpol_string': [
443
+ (r'\}', String.Interpol, "#pop"),
444
+ include('root')
445
+ ],
446
+ 'map_key': [
447
+ include('root'),
448
+ (r':', Punctuation, 'map_val'),
449
+ (r'=>', Punctuation, 'map_val'),
450
+ (r'\}', Punctuation, '#pop'),
451
+ ],
452
+ 'map_val': [
453
+ include('root'),
454
+ (r',', Punctuation, '#pop'),
455
+ (r'(?=\})', Punctuation, '#pop'),
456
+ ],
457
+ 'tuple': [
458
+ include('root'),
459
+ (r'\}', Punctuation, '#pop'),
460
+ ],
461
+ }
462
+ tokens.update(gen_elixir_string_rules('double', '"', String.Double))
463
+ tokens.update(gen_elixir_string_rules('single', "'", String.Single))
464
+ tokens.update(gen_elixir_string_rules('double_atom', '"', String.Symbol))
465
+ tokens.update(gen_elixir_string_rules('single_atom', "'", String.Symbol))
466
+ tokens.update(gen_elixir_sigil_rules())
467
+
468
+
469
+ class ElixirConsoleLexer(Lexer):
470
+ """
471
+ For Elixir interactive console (iex) output like:
472
+
473
+ .. sourcecode:: iex
474
+
475
+ iex> [head | tail] = [1,2,3]
476
+ [1,2,3]
477
+ iex> head
478
+ 1
479
+ iex> tail
480
+ [2,3]
481
+ iex> [head | tail]
482
+ [1,2,3]
483
+ iex> length [head | tail]
484
+ 3
485
+ """
486
+
487
+ name = 'Elixir iex session'
488
+ aliases = ['iex']
489
+ mimetypes = ['text/x-elixir-shellsession']
490
+ url = 'https://elixir-lang.org'
491
+ version_added = '1.5'
492
+
493
+ _prompt_re = re.compile(r'(iex|\.{3})((?:\([\w@_.]+\))?\d+|\(\d+\))?> ')
494
+
495
+ def get_tokens_unprocessed(self, text):
496
+ exlexer = ElixirLexer(**self.options)
497
+
498
+ curcode = ''
499
+ in_error = False
500
+ insertions = []
501
+ for match in line_re.finditer(text):
502
+ line = match.group()
503
+ if line.startswith('** '):
504
+ in_error = True
505
+ insertions.append((len(curcode),
506
+ [(0, Generic.Error, line[:-1])]))
507
+ curcode += line[-1:]
508
+ else:
509
+ m = self._prompt_re.match(line)
510
+ if m is not None:
511
+ in_error = False
512
+ end = m.end()
513
+ insertions.append((len(curcode),
514
+ [(0, Generic.Prompt, line[:end])]))
515
+ curcode += line[end:]
516
+ else:
517
+ if curcode:
518
+ yield from do_insertions(
519
+ insertions, exlexer.get_tokens_unprocessed(curcode))
520
+ curcode = ''
521
+ insertions = []
522
+ token = Generic.Error if in_error else Generic.Output
523
+ yield match.start(), token, line
524
+ if curcode:
525
+ yield from do_insertions(
526
+ insertions, exlexer.get_tokens_unprocessed(curcode))
venv/Lib/site-packages/pygments/lexers/esoteric.py ADDED
@@ -0,0 +1,300 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.esoteric
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for esoteric languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, include, words, bygroups
12
+ from pygments.token import Comment, Operator, Keyword, Name, String, Number, \
13
+ Punctuation, Error, Whitespace
14
+
15
+ __all__ = ['BrainfuckLexer', 'BefungeLexer', 'RedcodeLexer', 'CAmkESLexer',
16
+ 'CapDLLexer', 'AheuiLexer']
17
+
18
+
19
+ class BrainfuckLexer(RegexLexer):
20
+ """
21
+ Lexer for the esoteric BrainFuck language.
22
+ """
23
+
24
+ name = 'Brainfuck'
25
+ url = 'http://www.muppetlabs.com/~breadbox/bf/'
26
+ aliases = ['brainfuck', 'bf']
27
+ filenames = ['*.bf', '*.b']
28
+ mimetypes = ['application/x-brainfuck']
29
+ version_added = ''
30
+
31
+ tokens = {
32
+ 'common': [
33
+ # use different colors for different instruction types
34
+ (r'[.,]+', Name.Tag),
35
+ (r'[+-]+', Name.Builtin),
36
+ (r'[<>]+', Name.Variable),
37
+ (r'[^.,+\-<>\[\]]+', Comment),
38
+ ],
39
+ 'root': [
40
+ (r'\[', Keyword, 'loop'),
41
+ (r'\]', Error),
42
+ include('common'),
43
+ ],
44
+ 'loop': [
45
+ (r'\[', Keyword, '#push'),
46
+ (r'\]', Keyword, '#pop'),
47
+ include('common'),
48
+ ]
49
+ }
50
+
51
+ def analyse_text(text):
52
+ """It's safe to assume that a program which mostly consists of + -
53
+ and < > is brainfuck."""
54
+ plus_minus_count = 0
55
+ greater_less_count = 0
56
+
57
+ range_to_check = max(256, len(text))
58
+
59
+ for c in text[:range_to_check]:
60
+ if c == '+' or c == '-':
61
+ plus_minus_count += 1
62
+ if c == '<' or c == '>':
63
+ greater_less_count += 1
64
+
65
+ if plus_minus_count > (0.25 * range_to_check):
66
+ return 1.0
67
+ if greater_less_count > (0.25 * range_to_check):
68
+ return 1.0
69
+
70
+ result = 0
71
+ if '[-]' in text:
72
+ result += 0.5
73
+
74
+ return result
75
+
76
+
77
+ class BefungeLexer(RegexLexer):
78
+ """
79
+ Lexer for the esoteric Befunge language.
80
+ """
81
+ name = 'Befunge'
82
+ url = 'http://en.wikipedia.org/wiki/Befunge'
83
+ aliases = ['befunge']
84
+ filenames = ['*.befunge']
85
+ mimetypes = ['application/x-befunge']
86
+ version_added = '0.7'
87
+
88
+ tokens = {
89
+ 'root': [
90
+ (r'[0-9a-f]', Number),
91
+ (r'[+*/%!`-]', Operator), # Traditional math
92
+ (r'[<>^v?\[\]rxjk]', Name.Variable), # Move, imperatives
93
+ (r'[:\\$.,n]', Name.Builtin), # Stack ops, imperatives
94
+ (r'[|_mw]', Keyword),
95
+ (r'[{}]', Name.Tag), # Befunge-98 stack ops
96
+ (r'".*?"', String.Double), # Strings don't appear to allow escapes
97
+ (r'\'.', String.Single), # Single character
98
+ (r'[#;]', Comment), # Trampoline... depends on direction hit
99
+ (r'[pg&~=@iotsy]', Keyword), # Misc
100
+ (r'[()A-Z]', Comment), # Fingerprints
101
+ (r'\s+', Whitespace), # Whitespace doesn't matter
102
+ ],
103
+ }
104
+
105
+
106
+ class CAmkESLexer(RegexLexer):
107
+ """
108
+ Basic lexer for the input language for the CAmkES component platform.
109
+ """
110
+ name = 'CAmkES'
111
+ url = 'https://sel4.systems/CAmkES/'
112
+ aliases = ['camkes', 'idl4']
113
+ filenames = ['*.camkes', '*.idl4']
114
+ version_added = '2.1'
115
+
116
+ tokens = {
117
+ 'root': [
118
+ # C pre-processor directive
119
+ (r'^(\s*)(#.*)(\n)', bygroups(Whitespace, Comment.Preproc,
120
+ Whitespace)),
121
+
122
+ # Whitespace, comments
123
+ (r'\s+', Whitespace),
124
+ (r'/\*[\s\S]*?\*/', Comment),
125
+ (r'//.*$', Comment),
126
+
127
+ (r'[\[(){},.;\]]', Punctuation),
128
+ (r'[~!%^&*+=|?:<>/-]', Operator),
129
+
130
+ (words(('assembly', 'attribute', 'component', 'composition',
131
+ 'configuration', 'connection', 'connector', 'consumes',
132
+ 'control', 'dataport', 'Dataport', 'Dataports', 'emits',
133
+ 'event', 'Event', 'Events', 'export', 'from', 'group',
134
+ 'hardware', 'has', 'interface', 'Interface', 'maybe',
135
+ 'procedure', 'Procedure', 'Procedures', 'provides',
136
+ 'template', 'thread', 'threads', 'to', 'uses', 'with'),
137
+ suffix=r'\b'), Keyword),
138
+
139
+ (words(('bool', 'boolean', 'Buf', 'char', 'character', 'double',
140
+ 'float', 'in', 'inout', 'int', 'int16_6', 'int32_t',
141
+ 'int64_t', 'int8_t', 'integer', 'mutex', 'out', 'real',
142
+ 'refin', 'semaphore', 'signed', 'string', 'struct',
143
+ 'uint16_t', 'uint32_t', 'uint64_t', 'uint8_t', 'uintptr_t',
144
+ 'unsigned', 'void'),
145
+ suffix=r'\b'), Keyword.Type),
146
+
147
+ # Recognised attributes
148
+ (r'[a-zA-Z_]\w*_(priority|domain|buffer)', Keyword.Reserved),
149
+ (words(('dma_pool', 'from_access', 'to_access'), suffix=r'\b'),
150
+ Keyword.Reserved),
151
+
152
+ # CAmkES-level include
153
+ (r'(import)(\s+)((?:<[^>]*>|"[^"]*");)',
154
+ bygroups(Comment.Preproc, Whitespace, Comment.Preproc)),
155
+
156
+ # C-level include
157
+ (r'(include)(\s+)((?:<[^>]*>|"[^"]*");)',
158
+ bygroups(Comment.Preproc, Whitespace, Comment.Preproc)),
159
+
160
+ # Literals
161
+ (r'0[xX][\da-fA-F]+', Number.Hex),
162
+ (r'-?[\d]+', Number),
163
+ (r'-?[\d]+\.[\d]+', Number.Float),
164
+ (r'"[^"]*"', String),
165
+ (r'[Tt]rue|[Ff]alse', Name.Builtin),
166
+
167
+ # Identifiers
168
+ (r'[a-zA-Z_]\w*', Name),
169
+ ],
170
+ }
171
+
172
+
173
+ class CapDLLexer(RegexLexer):
174
+ """
175
+ Basic lexer for CapDL.
176
+
177
+ The source of the primary tool that reads such specifications is available
178
+ at https://github.com/seL4/capdl/tree/master/capDL-tool. Note that this
179
+ lexer only supports a subset of the grammar. For example, identifiers can
180
+ shadow type names, but these instances are currently incorrectly
181
+ highlighted as types. Supporting this would need a stateful lexer that is
182
+ considered unnecessarily complex for now.
183
+ """
184
+ name = 'CapDL'
185
+ url = 'https://ssrg.nicta.com.au/publications/nictaabstracts/Kuz_KLW_10.abstract.pml'
186
+ aliases = ['capdl']
187
+ filenames = ['*.cdl']
188
+ version_added = '2.2'
189
+
190
+ tokens = {
191
+ 'root': [
192
+ # C pre-processor directive
193
+ (r'^(\s*)(#.*)(\n)',
194
+ bygroups(Whitespace, Comment.Preproc, Whitespace)),
195
+
196
+ # Whitespace, comments
197
+ (r'\s+', Whitespace),
198
+ (r'/\*[\s\S]*?\*/', Comment),
199
+ (r'(//|--).*$', Comment),
200
+
201
+ (r'[<>\[(){},:;=\]]', Punctuation),
202
+ (r'\.\.', Punctuation),
203
+
204
+ (words(('arch', 'arm11', 'caps', 'child_of', 'ia32', 'irq', 'maps',
205
+ 'objects'), suffix=r'\b'), Keyword),
206
+
207
+ (words(('aep', 'asid_pool', 'cnode', 'ep', 'frame', 'io_device',
208
+ 'io_ports', 'io_pt', 'notification', 'pd', 'pt', 'tcb',
209
+ 'ut', 'vcpu'), suffix=r'\b'), Keyword.Type),
210
+
211
+ # Properties
212
+ (words(('asid', 'addr', 'badge', 'cached', 'dom', 'domainID', 'elf',
213
+ 'fault_ep', 'G', 'guard', 'guard_size', 'init', 'ip',
214
+ 'prio', 'sp', 'R', 'RG', 'RX', 'RW', 'RWG', 'RWX', 'W',
215
+ 'WG', 'WX', 'level', 'masked', 'master_reply', 'paddr',
216
+ 'ports', 'reply', 'uncached'), suffix=r'\b'),
217
+ Keyword.Reserved),
218
+
219
+ # Literals
220
+ (r'0[xX][\da-fA-F]+', Number.Hex),
221
+ (r'\d+(\.\d+)?[kM]?', Number),
222
+ (words(('bits',), suffix=r'\b'), Number),
223
+ (words(('cspace', 'vspace', 'reply_slot', 'caller_slot',
224
+ 'ipc_buffer_slot'), suffix=r'\b'), Number),
225
+
226
+ # Identifiers
227
+ (r'[a-zA-Z_][-@\.\w]*', Name),
228
+ ],
229
+ }
230
+
231
+
232
+ class RedcodeLexer(RegexLexer):
233
+ """
234
+ A simple Redcode lexer based on ICWS'94.
235
+ Contributed by Adam Blinkinsop <blinks@acm.org>.
236
+ """
237
+ name = 'Redcode'
238
+ aliases = ['redcode']
239
+ filenames = ['*.cw']
240
+ url = 'https://en.wikipedia.org/wiki/Core_War'
241
+ version_added = '0.8'
242
+
243
+ opcodes = ('DAT', 'MOV', 'ADD', 'SUB', 'MUL', 'DIV', 'MOD',
244
+ 'JMP', 'JMZ', 'JMN', 'DJN', 'CMP', 'SLT', 'SPL',
245
+ 'ORG', 'EQU', 'END')
246
+ modifiers = ('A', 'B', 'AB', 'BA', 'F', 'X', 'I')
247
+
248
+ tokens = {
249
+ 'root': [
250
+ # Whitespace:
251
+ (r'\s+', Whitespace),
252
+ (r';.*$', Comment.Single),
253
+ # Lexemes:
254
+ # Identifiers
255
+ (r'\b({})\b'.format('|'.join(opcodes)), Name.Function),
256
+ (r'\b({})\b'.format('|'.join(modifiers)), Name.Decorator),
257
+ (r'[A-Za-z_]\w+', Name),
258
+ # Operators
259
+ (r'[-+*/%]', Operator),
260
+ (r'[#$@<>]', Operator), # mode
261
+ (r'[.,]', Punctuation), # mode
262
+ # Numbers
263
+ (r'[-+]?\d+', Number.Integer),
264
+ ],
265
+ }
266
+
267
+
268
+ class AheuiLexer(RegexLexer):
269
+ """
270
+ Aheui is esoteric language based on Korean alphabets.
271
+ """
272
+
273
+ name = 'Aheui'
274
+ url = 'http://aheui.github.io/'
275
+ aliases = ['aheui']
276
+ filenames = ['*.aheui']
277
+ version_added = ''
278
+
279
+ tokens = {
280
+ 'root': [
281
+ ('['
282
+ '나-낳냐-냫너-넣녀-녛노-놓뇨-눟뉴-닇'
283
+ '다-닿댜-댷더-덯뎌-뎧도-돟됴-둫듀-딓'
284
+ '따-땋땨-떃떠-떻뗘-뗳또-똫뚀-뚷뜌-띟'
285
+ '라-랗랴-럏러-렇려-렿로-롷료-뤃류-릫'
286
+ '마-맣먀-먛머-멓며-몋모-뫃묘-뭏뮤-믷'
287
+ '바-밯뱌-뱧버-벟벼-볗보-봏뵤-붛뷰-빃'
288
+ '빠-빻뺘-뺳뻐-뻫뼈-뼣뽀-뽛뾰-뿧쀼-삏'
289
+ '사-샇샤-샿서-섷셔-셯소-솧쇼-숳슈-싛'
290
+ '싸-쌓쌰-썋써-쎃쎠-쎻쏘-쏳쑈-쑿쓔-씧'
291
+ '자-잫쟈-쟣저-젛져-졓조-좋죠-줗쥬-즿'
292
+ '차-챃챠-챻처-첳쳐-쳫초-촣쵸-춯츄-칗'
293
+ '카-캏캬-컇커-컿켜-켷코-콯쿄-쿻큐-킣'
294
+ '타-탛탸-턓터-텋텨-톃토-톻툐-퉇튜-틯'
295
+ '파-팧퍄-퍟퍼-펗펴-폏포-퐇표-풓퓨-픻'
296
+ '하-핳햐-햫허-헣혀-혛호-홓효-훟휴-힇'
297
+ ']', Operator),
298
+ ('.', Comment),
299
+ ],
300
+ }
venv/Lib/site-packages/pygments/lexers/ezhil.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.ezhil
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Pygments lexers for Ezhil language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, include, words
14
+ from pygments.token import Keyword, Comment, Name, String, Number, \
15
+ Punctuation, Operator, Whitespace
16
+
17
+ __all__ = ['EzhilLexer']
18
+
19
+
20
+ class EzhilLexer(RegexLexer):
21
+ """
22
+ Lexer for Ezhil, a Tamil script-based programming language.
23
+ """
24
+ name = 'Ezhil'
25
+ url = 'http://ezhillang.org'
26
+ aliases = ['ezhil']
27
+ filenames = ['*.n']
28
+ mimetypes = ['text/x-ezhil']
29
+ version_added = '2.1'
30
+ # Refer to tamil.utf8.tamil_letters from open-tamil for a stricter version of this.
31
+ # This much simpler version is close enough, and includes combining marks.
32
+ _TALETTERS = '[a-zA-Z_]|[\u0b80-\u0bff]'
33
+ tokens = {
34
+ 'root': [
35
+ include('keywords'),
36
+ (r'#.*$', Comment.Single),
37
+ (r'[@+/*,^\-%]|[!<>=]=?|&&?|\|\|?', Operator),
38
+ ('இல்', Operator.Word),
39
+ (words(('assert', 'max', 'min',
40
+ 'நீளம்', 'சரம்_இடமாற்று', 'சரம்_கண்டுபிடி',
41
+ 'பட்டியல்', 'பின்இணை', 'வரிசைப்படுத்து',
42
+ 'எடு', 'தலைகீழ்', 'நீட்டிக்க', 'நுழைக்க', 'வை',
43
+ 'கோப்பை_திற', 'கோப்பை_எழுது', 'கோப்பை_மூடு',
44
+ 'pi', 'sin', 'cos', 'tan', 'sqrt', 'hypot', 'pow',
45
+ 'exp', 'log', 'log10', 'exit',
46
+ ), suffix=r'\b'), Name.Builtin),
47
+ (r'(True|False)\b', Keyword.Constant),
48
+ (r'[^\S\n]+', Whitespace),
49
+ include('identifier'),
50
+ include('literal'),
51
+ (r'[(){}\[\]:;.]', Punctuation),
52
+ ],
53
+ 'keywords': [
54
+ ('பதிப்பி|தேர்ந்தெடு|தேர்வு|ஏதேனில்|ஆனால்|இல்லைஆனால்|இல்லை|ஆக|ஒவ்வொன்றாக|இல்|வரை|செய்|முடியேனில்|பின்கொடு|முடி|நிரல்பாகம்|தொடர்|நிறுத்து|நிரல்பாகம்', Keyword),
55
+ ],
56
+ 'identifier': [
57
+ ('(?:'+_TALETTERS+')(?:[0-9]|'+_TALETTERS+')*', Name),
58
+ ],
59
+ 'literal': [
60
+ (r'".*?"', String),
61
+ (r'\d+((\.\d*)?[eE][+-]?\d+|\.\d*)', Number.Float),
62
+ (r'\d+', Number.Integer),
63
+ ]
64
+ }
65
+
66
+ def analyse_text(text):
67
+ """This language uses Tamil-script. We'll assume that if there's a
68
+ decent amount of Tamil-characters, it's this language. This assumption
69
+ is obviously horribly off if someone uses string literals in tamil
70
+ in another language."""
71
+ if len(re.findall(r'[\u0b80-\u0bff]', text)) > 10:
72
+ return 0.25
73
+
74
+ def __init__(self, **options):
75
+ super().__init__(**options)
76
+ self.encoding = options.get('encoding', 'utf-8')
venv/Lib/site-packages/pygments/lexers/factor.py ADDED
@@ -0,0 +1,361 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.factor
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for the Factor language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, bygroups, default, words
12
+ from pygments.token import Text, Comment, Keyword, Name, String, Number, \
13
+ Whitespace, Punctuation
14
+
15
+ __all__ = ['FactorLexer']
16
+
17
+
18
+ class FactorLexer(RegexLexer):
19
+ """
20
+ Lexer for the Factor language.
21
+ """
22
+ name = 'Factor'
23
+ url = 'http://factorcode.org'
24
+ aliases = ['factor']
25
+ filenames = ['*.factor']
26
+ mimetypes = ['text/x-factor']
27
+ version_added = '1.4'
28
+
29
+ builtin_kernel = words((
30
+ '-rot', '2bi', '2bi@', '2bi*', '2curry', '2dip', '2drop', '2dup', '2keep', '2nip',
31
+ '2over', '2tri', '2tri@', '2tri*', '3bi', '3curry', '3dip', '3drop', '3dup', '3keep',
32
+ '3tri', '4dip', '4drop', '4dup', '4keep', '<wrapper>', '=', '>boolean', 'clone',
33
+ '?', '?execute', '?if', 'and', 'assert', 'assert=', 'assert?', 'bi', 'bi-curry',
34
+ 'bi-curry@', 'bi-curry*', 'bi@', 'bi*', 'boa', 'boolean', 'boolean?', 'both?',
35
+ 'build', 'call', 'callstack', 'callstack>array', 'callstack?', 'clear', '(clone)',
36
+ 'compose', 'compose?', 'curry', 'curry?', 'datastack', 'die', 'dip', 'do', 'drop',
37
+ 'dup', 'dupd', 'either?', 'eq?', 'equal?', 'execute', 'hashcode', 'hashcode*',
38
+ 'identity-hashcode', 'identity-tuple', 'identity-tuple?', 'if', 'if*',
39
+ 'keep', 'loop', 'most', 'new', 'nip', 'not', 'null', 'object', 'or', 'over',
40
+ 'pick', 'prepose', 'retainstack', 'rot', 'same?', 'swap', 'swapd', 'throw',
41
+ 'tri', 'tri-curry', 'tri-curry@', 'tri-curry*', 'tri@', 'tri*', 'tuple',
42
+ 'tuple?', 'unless', 'unless*', 'until', 'when', 'when*', 'while', 'with',
43
+ 'wrapper', 'wrapper?', 'xor'), suffix=r'(\s+)')
44
+
45
+ builtin_assocs = words((
46
+ '2cache', '<enum>', '>alist', '?at', '?of', 'assoc', 'assoc-all?',
47
+ 'assoc-any?', 'assoc-clone-like', 'assoc-combine', 'assoc-diff',
48
+ 'assoc-diff!', 'assoc-differ', 'assoc-each', 'assoc-empty?',
49
+ 'assoc-filter', 'assoc-filter!', 'assoc-filter-as', 'assoc-find',
50
+ 'assoc-hashcode', 'assoc-intersect', 'assoc-like', 'assoc-map',
51
+ 'assoc-map-as', 'assoc-partition', 'assoc-refine', 'assoc-size',
52
+ 'assoc-stack', 'assoc-subset?', 'assoc-union', 'assoc-union!',
53
+ 'assoc=', 'assoc>map', 'assoc?', 'at', 'at+', 'at*', 'cache', 'change-at',
54
+ 'clear-assoc', 'delete-at', 'delete-at*', 'enum', 'enum?', 'extract-keys',
55
+ 'inc-at', 'key?', 'keys', 'map>assoc', 'maybe-set-at', 'new-assoc', 'of',
56
+ 'push-at', 'rename-at', 'set-at', 'sift-keys', 'sift-values', 'substitute',
57
+ 'unzip', 'value-at', 'value-at*', 'value?', 'values', 'zip'), suffix=r'(\s+)')
58
+
59
+ builtin_combinators = words((
60
+ '2cleave', '2cleave>quot', '3cleave', '3cleave>quot', '4cleave',
61
+ '4cleave>quot', 'alist>quot', 'call-effect', 'case', 'case-find',
62
+ 'case>quot', 'cleave', 'cleave>quot', 'cond', 'cond>quot', 'deep-spread>quot',
63
+ 'execute-effect', 'linear-case-quot', 'no-case', 'no-case?', 'no-cond',
64
+ 'no-cond?', 'recursive-hashcode', 'shallow-spread>quot', 'spread',
65
+ 'to-fixed-point', 'wrong-values', 'wrong-values?'), suffix=r'(\s+)')
66
+
67
+ builtin_math = words((
68
+ '-', '/', '/f', '/i', '/mod', '2/', '2^', '<', '<=', '<fp-nan>', '>',
69
+ '>=', '>bignum', '>fixnum', '>float', '>integer', '(all-integers?)',
70
+ '(each-integer)', '(find-integer)', '*', '+', '?1+',
71
+ 'abs', 'align', 'all-integers?', 'bignum', 'bignum?', 'bit?', 'bitand',
72
+ 'bitnot', 'bitor', 'bits>double', 'bits>float', 'bitxor', 'complex',
73
+ 'complex?', 'denominator', 'double>bits', 'each-integer', 'even?',
74
+ 'find-integer', 'find-last-integer', 'fixnum', 'fixnum?', 'float',
75
+ 'float>bits', 'float?', 'fp-bitwise=', 'fp-infinity?', 'fp-nan-payload',
76
+ 'fp-nan?', 'fp-qnan?', 'fp-sign', 'fp-snan?', 'fp-special?',
77
+ 'if-zero', 'imaginary-part', 'integer', 'integer>fixnum',
78
+ 'integer>fixnum-strict', 'integer?', 'log2', 'log2-expects-positive',
79
+ 'log2-expects-positive?', 'mod', 'neg', 'neg?', 'next-float',
80
+ 'next-power-of-2', 'number', 'number=', 'number?', 'numerator', 'odd?',
81
+ 'out-of-fixnum-range', 'out-of-fixnum-range?', 'power-of-2?',
82
+ 'prev-float', 'ratio', 'ratio?', 'rational', 'rational?', 'real',
83
+ 'real-part', 'real?', 'recip', 'rem', 'sgn', 'shift', 'sq', 'times',
84
+ 'u<', 'u<=', 'u>', 'u>=', 'unless-zero', 'unordered?', 'when-zero',
85
+ 'zero?'), suffix=r'(\s+)')
86
+
87
+ builtin_sequences = words((
88
+ '1sequence', '2all?', '2each', '2map', '2map-as', '2map-reduce', '2reduce',
89
+ '2selector', '2sequence', '3append', '3append-as', '3each', '3map', '3map-as',
90
+ '3sequence', '4sequence', '<repetition>', '<reversed>', '<slice>', '?first',
91
+ '?last', '?nth', '?second', '?set-nth', 'accumulate', 'accumulate!',
92
+ 'accumulate-as', 'all?', 'any?', 'append', 'append!', 'append-as',
93
+ 'assert-sequence', 'assert-sequence=', 'assert-sequence?',
94
+ 'binary-reduce', 'bounds-check', 'bounds-check?', 'bounds-error',
95
+ 'bounds-error?', 'but-last', 'but-last-slice', 'cartesian-each',
96
+ 'cartesian-map', 'cartesian-product', 'change-nth', 'check-slice',
97
+ 'check-slice-error', 'clone-like', 'collapse-slice', 'collector',
98
+ 'collector-for', 'concat', 'concat-as', 'copy', 'count', 'cut', 'cut-slice',
99
+ 'cut*', 'delete-all', 'delete-slice', 'drop-prefix', 'each', 'each-from',
100
+ 'each-index', 'empty?', 'exchange', 'filter', 'filter!', 'filter-as', 'find',
101
+ 'find-from', 'find-index', 'find-index-from', 'find-last', 'find-last-from',
102
+ 'first', 'first2', 'first3', 'first4', 'flip', 'follow', 'fourth', 'glue', 'halves',
103
+ 'harvest', 'head', 'head-slice', 'head-slice*', 'head*', 'head?',
104
+ 'if-empty', 'immutable', 'immutable-sequence', 'immutable-sequence?',
105
+ 'immutable?', 'index', 'index-from', 'indices', 'infimum', 'infimum-by',
106
+ 'insert-nth', 'interleave', 'iota', 'iota-tuple', 'iota-tuple?', 'join',
107
+ 'join-as', 'last', 'last-index', 'last-index-from', 'length', 'lengthen',
108
+ 'like', 'longer', 'longer?', 'longest', 'map', 'map!', 'map-as', 'map-find',
109
+ 'map-find-last', 'map-index', 'map-integers', 'map-reduce', 'map-sum',
110
+ 'max-length', 'member-eq?', 'member?', 'midpoint@', 'min-length',
111
+ 'mismatch', 'move', 'new-like', 'new-resizable', 'new-sequence',
112
+ 'non-negative-integer-expected', 'non-negative-integer-expected?',
113
+ 'nth', 'nths', 'pad-head', 'pad-tail', 'padding', 'partition', 'pop', 'pop*',
114
+ 'prefix', 'prepend', 'prepend-as', 'produce', 'produce-as', 'product', 'push',
115
+ 'push-all', 'push-either', 'push-if', 'reduce', 'reduce-index', 'remove',
116
+ 'remove!', 'remove-eq', 'remove-eq!', 'remove-nth', 'remove-nth!', 'repetition',
117
+ 'repetition?', 'replace-slice', 'replicate', 'replicate-as', 'rest',
118
+ 'rest-slice', 'reverse', 'reverse!', 'reversed', 'reversed?', 'second',
119
+ 'selector', 'selector-for', 'sequence', 'sequence-hashcode', 'sequence=',
120
+ 'sequence?', 'set-first', 'set-fourth', 'set-last', 'set-length', 'set-nth',
121
+ 'set-second', 'set-third', 'short', 'shorten', 'shorter', 'shorter?',
122
+ 'shortest', 'sift', 'slice', 'slice-error', 'slice-error?', 'slice?',
123
+ 'snip', 'snip-slice', 'start', 'start*', 'subseq', 'subseq?', 'suffix',
124
+ 'suffix!', 'sum', 'sum-lengths', 'supremum', 'supremum-by', 'surround', 'tail',
125
+ 'tail-slice', 'tail-slice*', 'tail*', 'tail?', 'third', 'trim',
126
+ 'trim-head', 'trim-head-slice', 'trim-slice', 'trim-tail', 'trim-tail-slice',
127
+ 'unclip', 'unclip-last', 'unclip-last-slice', 'unclip-slice', 'unless-empty',
128
+ 'virtual-exemplar', 'virtual-sequence', 'virtual-sequence?', 'virtual@',
129
+ 'when-empty'), suffix=r'(\s+)')
130
+
131
+ builtin_namespaces = words((
132
+ '+@', 'change', 'change-global', 'counter', 'dec', 'get', 'get-global',
133
+ 'global', 'inc', 'init-namespaces', 'initialize', 'is-global', 'make-assoc',
134
+ 'namespace', 'namestack', 'off', 'on', 'set', 'set-global', 'set-namestack',
135
+ 'toggle', 'with-global', 'with-scope', 'with-variable', 'with-variables'),
136
+ suffix=r'(\s+)')
137
+
138
+ builtin_arrays = words((
139
+ '1array', '2array', '3array', '4array', '<array>', '>array', 'array',
140
+ 'array?', 'pair', 'pair?', 'resize-array'), suffix=r'(\s+)')
141
+
142
+ builtin_io = words((
143
+ '(each-stream-block-slice)', '(each-stream-block)',
144
+ '(stream-contents-by-block)', '(stream-contents-by-element)',
145
+ '(stream-contents-by-length-or-block)',
146
+ '(stream-contents-by-length)', '+byte+', '+character+',
147
+ 'bad-seek-type', 'bad-seek-type?', 'bl', 'contents', 'each-block',
148
+ 'each-block-size', 'each-block-slice', 'each-line', 'each-morsel',
149
+ 'each-stream-block', 'each-stream-block-slice', 'each-stream-line',
150
+ 'error-stream', 'flush', 'input-stream', 'input-stream?',
151
+ 'invalid-read-buffer', 'invalid-read-buffer?', 'lines', 'nl',
152
+ 'output-stream', 'output-stream?', 'print', 'read', 'read-into',
153
+ 'read-partial', 'read-partial-into', 'read-until', 'read1', 'readln',
154
+ 'seek-absolute', 'seek-absolute?', 'seek-end', 'seek-end?',
155
+ 'seek-input', 'seek-output', 'seek-relative', 'seek-relative?',
156
+ 'stream-bl', 'stream-contents', 'stream-contents*', 'stream-copy',
157
+ 'stream-copy*', 'stream-element-type', 'stream-flush',
158
+ 'stream-length', 'stream-lines', 'stream-nl', 'stream-print',
159
+ 'stream-read', 'stream-read-into', 'stream-read-partial',
160
+ 'stream-read-partial-into', 'stream-read-partial-unsafe',
161
+ 'stream-read-unsafe', 'stream-read-until', 'stream-read1',
162
+ 'stream-readln', 'stream-seek', 'stream-seekable?', 'stream-tell',
163
+ 'stream-write', 'stream-write1', 'tell-input', 'tell-output',
164
+ 'with-error-stream', 'with-error-stream*', 'with-error>output',
165
+ 'with-input-output+error-streams',
166
+ 'with-input-output+error-streams*', 'with-input-stream',
167
+ 'with-input-stream*', 'with-output-stream', 'with-output-stream*',
168
+ 'with-output>error', 'with-output+error-stream',
169
+ 'with-output+error-stream*', 'with-streams', 'with-streams*',
170
+ 'write', 'write1'), suffix=r'(\s+)')
171
+
172
+ builtin_strings = words((
173
+ '1string', '<string>', '>string', 'resize-string', 'string',
174
+ 'string?'), suffix=r'(\s+)')
175
+
176
+ builtin_vectors = words((
177
+ '1vector', '<vector>', '>vector', '?push', 'vector', 'vector?'),
178
+ suffix=r'(\s+)')
179
+
180
+ builtin_continuations = words((
181
+ '<condition>', '<continuation>', '<restart>', 'attempt-all',
182
+ 'attempt-all-error', 'attempt-all-error?', 'callback-error-hook',
183
+ 'callcc0', 'callcc1', 'cleanup', 'compute-restarts', 'condition',
184
+ 'condition?', 'continuation', 'continuation?', 'continue',
185
+ 'continue-restart', 'continue-with', 'current-continuation',
186
+ 'error', 'error-continuation', 'error-in-thread', 'error-thread',
187
+ 'ifcc', 'ignore-errors', 'in-callback?', 'original-error', 'recover',
188
+ 'restart', 'restart?', 'restarts', 'rethrow', 'rethrow-restarts',
189
+ 'return', 'return-continuation', 'thread-error-hook', 'throw-continue',
190
+ 'throw-restarts', 'with-datastack', 'with-return'), suffix=r'(\s+)')
191
+
192
+ tokens = {
193
+ 'root': [
194
+ # factor allows a file to start with a shebang
195
+ (r'#!.*$', Comment.Preproc),
196
+ default('base'),
197
+ ],
198
+ 'base': [
199
+ (r'\s+', Whitespace),
200
+
201
+ # defining words
202
+ (r'((?:MACRO|MEMO|TYPED)?:[:]?)(\s+)(\S+)',
203
+ bygroups(Keyword, Whitespace, Name.Function)),
204
+ (r'(M:[:]?)(\s+)(\S+)(\s+)(\S+)',
205
+ bygroups(Keyword, Whitespace, Name.Class, Whitespace,
206
+ Name.Function)),
207
+ (r'(C:)(\s+)(\S+)(\s+)(\S+)',
208
+ bygroups(Keyword, Whitespace, Name.Function, Whitespace,
209
+ Name.Class)),
210
+ (r'(GENERIC:)(\s+)(\S+)',
211
+ bygroups(Keyword, Whitespace, Name.Function)),
212
+ (r'(HOOK:|GENERIC#)(\s+)(\S+)(\s+)(\S+)',
213
+ bygroups(Keyword, Whitespace, Name.Function, Whitespace,
214
+ Name.Function)),
215
+ (r'(\()(\s)', bygroups(Name.Function, Whitespace), 'stackeffect'),
216
+ (r'(;)(\s)', bygroups(Keyword, Whitespace)),
217
+
218
+ # imports and namespaces
219
+ (r'(USING:)(\s+)',
220
+ bygroups(Keyword.Namespace, Whitespace), 'vocabs'),
221
+ (r'(USE:|UNUSE:|IN:|QUALIFIED:)(\s+)(\S+)',
222
+ bygroups(Keyword.Namespace, Whitespace, Name.Namespace)),
223
+ (r'(QUALIFIED-WITH:)(\s+)(\S+)(\s+)(\S+)',
224
+ bygroups(Keyword.Namespace, Whitespace, Name.Namespace,
225
+ Whitespace, Name.Namespace)),
226
+ (r'(FROM:|EXCLUDE:)(\s+)(\S+)(\s+=>\s)',
227
+ bygroups(Keyword.Namespace, Whitespace, Name.Namespace,
228
+ Whitespace), 'words'),
229
+ (r'(RENAME:)(\s+)(\S+)(\s+)(\S+)(\s+)(=>)(\s+)(\S+)',
230
+ bygroups(Keyword.Namespace, Whitespace, Name.Function, Whitespace,
231
+ Name.Namespace, Whitespace, Punctuation, Whitespace,
232
+ Name.Function)),
233
+ (r'(ALIAS:|TYPEDEF:)(\s+)(\S+)(\s+)(\S+)',
234
+ bygroups(Keyword.Namespace, Whitespace, Name.Function, Whitespace,
235
+ Name.Function)),
236
+ (r'(DEFER:|FORGET:|POSTPONE:)(\s+)(\S+)',
237
+ bygroups(Keyword.Namespace, Whitespace, Name.Function)),
238
+
239
+ # tuples and classes
240
+ (r'(TUPLE:|ERROR:)(\s+)(\S+)(\s+)(<)(\s+)(\S+)',
241
+ bygroups(Keyword, Whitespace, Name.Class, Whitespace, Punctuation,
242
+ Whitespace, Name.Class), 'slots'),
243
+ (r'(TUPLE:|ERROR:|BUILTIN:)(\s+)(\S+)',
244
+ bygroups(Keyword, Whitespace, Name.Class), 'slots'),
245
+ (r'(MIXIN:|UNION:|INTERSECTION:)(\s+)(\S+)',
246
+ bygroups(Keyword, Whitespace, Name.Class)),
247
+ (r'(PREDICATE:)(\s+)(\S+)(\s+)(<)(\s+)(\S+)',
248
+ bygroups(Keyword, Whitespace, Name.Class, Whitespace,
249
+ Punctuation, Whitespace, Name.Class)),
250
+ (r'(INSTANCE:)(\s+)(\S+)(\s+)(\S+)',
251
+ bygroups(Keyword, Whitespace, Name.Class, Whitespace, Name.Class)),
252
+ (r'(SLOT:)(\s+)(\S+)', bygroups(Keyword, Whitespace, Name.Function)),
253
+ (r'(SINGLETON:)(\s+)(\S+)', bygroups(Keyword, Whitespace, Name.Class)),
254
+ (r'SINGLETONS:', Keyword, 'classes'),
255
+
256
+ # other syntax
257
+ (r'(CONSTANT:|SYMBOL:|MAIN:|HELP:)(\s+)(\S+)',
258
+ bygroups(Keyword, Whitespace, Name.Function)),
259
+ (r'(SYMBOLS:)(\s+)', bygroups(Keyword, Whitespace), 'words'),
260
+ (r'(SYNTAX:)(\s+)', bygroups(Keyword, Whitespace)),
261
+ (r'(ALIEN:)(\s+)', bygroups(Keyword, Whitespace)),
262
+ (r'(STRUCT:)(\s+)(\S+)', bygroups(Keyword, Whitespace, Name.Class)),
263
+ (r'(FUNCTION:)(\s+)'
264
+ r'(\S+)(\s+)(\S+)(\s+)'
265
+ r'(\()(\s+)([^)]+)(\))(\s)',
266
+ bygroups(Keyword.Namespace, Whitespace,
267
+ Text, Whitespace, Name.Function, Whitespace,
268
+ Punctuation, Whitespace, Text, Punctuation, Whitespace)),
269
+ (r'(FUNCTION-ALIAS:)(\s+)'
270
+ r'(\S+)(\s+)(\S+)(\s+)'
271
+ r'(\S+)(\s+)'
272
+ r'(\()(\s+)([^)]+)(\))(\s)',
273
+ bygroups(Keyword.Namespace, Whitespace,
274
+ Text, Whitespace, Name.Function, Whitespace,
275
+ Name.Function, Whitespace,
276
+ Punctuation, Whitespace, Text, Punctuation, Whitespace)),
277
+
278
+ # vocab.private
279
+ (r'(<PRIVATE|PRIVATE>)(\s)', bygroups(Keyword.Namespace, Whitespace)),
280
+
281
+ # strings
282
+ (r'"""\s[\s\S]*?\s"""', String),
283
+ (r'"(?:\\\\|\\"|[^"])*"', String),
284
+ (r'(\S+")(\s+)((?:\\\\|\\"|[^"])*")',
285
+ bygroups(String, Whitespace, String)),
286
+ (r'(CHAR:)(\s+)(\\[\\abfnrstv]|[^\\]\S*)(\s)',
287
+ bygroups(String.Char, Whitespace, String.Char, Whitespace)),
288
+
289
+ # comments
290
+ (r'!\s+.*$', Comment),
291
+ (r'#!\s+.*$', Comment),
292
+ (r'/\*\s+[\s\S]*?\s\*/', Comment),
293
+
294
+ # boolean constants
295
+ (r'[tf]\b', Name.Constant),
296
+
297
+ # symbols and literals
298
+ (r'[\\$]\s+\S+', Name.Constant),
299
+ (r'M\\\s+\S+\s+\S+', Name.Constant),
300
+
301
+ # numbers
302
+ (r'[+-]?(?:[\d,]*\d)?\.(?:\d([\d,]*\d)?)?(?:[eE][+-]?\d+)?\s', Number),
303
+ (r'[+-]?\d(?:[\d,]*\d)?(?:[eE][+-]?\d+)?\s', Number),
304
+ (r'0x[a-fA-F\d](?:[a-fA-F\d,]*[a-fA-F\d])?(?:p\d([\d,]*\d)?)?\s', Number),
305
+ (r'NAN:\s+[a-fA-F\d](?:[a-fA-F\d,]*[a-fA-F\d])?(?:p\d([\d,]*\d)?)?\s', Number),
306
+ (r'0b[01]+\s', Number.Bin),
307
+ (r'0o[0-7]+\s', Number.Oct),
308
+ (r'(?:\d([\d,]*\d)?)?\+\d(?:[\d,]*\d)?/\d(?:[\d,]*\d)?\s', Number),
309
+ (r'(?:\-\d([\d,]*\d)?)?\-\d(?:[\d,]*\d)?/\d(?:[\d,]*\d)?\s', Number),
310
+
311
+ # keywords
312
+ (r'(?:deprecated|final|foldable|flushable|inline|recursive)\s',
313
+ Keyword),
314
+
315
+ # builtins
316
+ (builtin_kernel, bygroups(Name.Builtin, Whitespace)),
317
+ (builtin_assocs, bygroups(Name.Builtin, Whitespace)),
318
+ (builtin_combinators, bygroups(Name.Builtin, Whitespace)),
319
+ (builtin_math, bygroups(Name.Builtin, Whitespace)),
320
+ (builtin_sequences, bygroups(Name.Builtin, Whitespace)),
321
+ (builtin_namespaces, bygroups(Name.Builtin, Whitespace)),
322
+ (builtin_arrays, bygroups(Name.Builtin, Whitespace)),
323
+ (builtin_io, bygroups(Name.Builtin, Whitespace)),
324
+ (builtin_strings, bygroups(Name.Builtin, Whitespace)),
325
+ (builtin_vectors, bygroups(Name.Builtin, Whitespace)),
326
+ (builtin_continuations, bygroups(Name.Builtin, Whitespace)),
327
+
328
+ # everything else is text
329
+ (r'\S+', Text),
330
+ ],
331
+ 'stackeffect': [
332
+ (r'\s+', Whitespace),
333
+ (r'(\()(\s+)', bygroups(Name.Function, Whitespace), 'stackeffect'),
334
+ (r'(\))(\s+)', bygroups(Name.Function, Whitespace), '#pop'),
335
+ (r'(--)(\s+)', bygroups(Name.Function, Whitespace)),
336
+ (r'\S+', Name.Variable),
337
+ ],
338
+ 'slots': [
339
+ (r'\s+', Whitespace),
340
+ (r'(;)(\s+)', bygroups(Keyword, Whitespace), '#pop'),
341
+ (r'(\{)(\s+)(\S+)(\s+)([^}]+)(\s+)(\})(\s+)',
342
+ bygroups(Text, Whitespace, Name.Variable, Whitespace,
343
+ Text, Whitespace, Text, Whitespace)),
344
+ (r'\S+', Name.Variable),
345
+ ],
346
+ 'vocabs': [
347
+ (r'\s+', Whitespace),
348
+ (r'(;)(\s+)', bygroups(Keyword, Whitespace), '#pop'),
349
+ (r'\S+', Name.Namespace),
350
+ ],
351
+ 'classes': [
352
+ (r'\s+', Whitespace),
353
+ (r'(;)(\s+)', bygroups(Keyword, Whitespace), '#pop'),
354
+ (r'\S+', Name.Class),
355
+ ],
356
+ 'words': [
357
+ (r'\s+', Whitespace),
358
+ (r'(;)(\s+)', bygroups(Keyword, Whitespace), '#pop'),
359
+ (r'\S+', Name.Function),
360
+ ],
361
+ }
venv/Lib/site-packages/pygments/lexers/fantom.py ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.fantom
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Fantom language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from string import Template
12
+
13
+ from pygments.lexer import RegexLexer, include, bygroups, using, \
14
+ this, default, words
15
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16
+ Number, Punctuation, Literal, Whitespace
17
+
18
+ __all__ = ['FantomLexer']
19
+
20
+
21
+ class FantomLexer(RegexLexer):
22
+ """
23
+ For Fantom source code.
24
+ """
25
+ name = 'Fantom'
26
+ aliases = ['fan']
27
+ filenames = ['*.fan']
28
+ mimetypes = ['application/x-fantom']
29
+ url = 'https://www.fantom.org'
30
+ version_added = '1.5'
31
+
32
+ # often used regexes
33
+ def s(str):
34
+ return Template(str).substitute(
35
+ dict(
36
+ pod=r'[\"\w\.]+',
37
+ eos=r'\n|;',
38
+ id=r'[a-zA-Z_]\w*',
39
+ # all chars which can be part of type definition. Starts with
40
+ # either letter, or [ (maps), or | (funcs)
41
+ type=r'(?:\[|[a-zA-Z_]|\|)[:\w\[\]|\->?]*?',
42
+ )
43
+ )
44
+
45
+ tokens = {
46
+ 'comments': [
47
+ (r'(?s)/\*.*?\*/', Comment.Multiline), # Multiline
48
+ (r'//.*?$', Comment.Single), # Single line
49
+ # TODO: highlight references in fandocs
50
+ (r'\*\*.*?$', Comment.Special), # Fandoc
51
+ (r'#.*$', Comment.Single) # Shell-style
52
+ ],
53
+ 'literals': [
54
+ (r'\b-?[\d_]+(ns|ms|sec|min|hr|day)', Number), # Duration
55
+ (r'\b-?[\d_]*\.[\d_]+(ns|ms|sec|min|hr|day)', Number), # Duration with dot
56
+ (r'\b-?(\d+)?\.\d+(f|F|d|D)?', Number.Float), # Float/Decimal
57
+ (r'\b-?0x[0-9a-fA-F_]+', Number.Hex), # Hex
58
+ (r'\b-?[\d_]+', Number.Integer), # Int
59
+ (r"'\\.'|'[^\\]'|'\\u[0-9a-f]{4}'", String.Char), # Char
60
+ (r'"', Punctuation, 'insideStr'), # Opening quote
61
+ (r'`', Punctuation, 'insideUri'), # Opening accent
62
+ (r'\b(true|false|null)\b', Keyword.Constant), # Bool & null
63
+ (r'(?:(\w+)(::))?(\w+)(<\|)(.*?)(\|>)', # DSL
64
+ bygroups(Name.Namespace, Punctuation, Name.Class,
65
+ Punctuation, String, Punctuation)),
66
+ (r'(?:(\w+)(::))?(\w+)?(#)(\w+)?', # Type/slot literal
67
+ bygroups(Name.Namespace, Punctuation, Name.Class,
68
+ Punctuation, Name.Function)),
69
+ (r'\[,\]', Literal), # Empty list
70
+ (s(r'($type)(\[,\])'), # Typed empty list
71
+ bygroups(using(this, state='inType'), Literal)),
72
+ (r'\[:\]', Literal), # Empty Map
73
+ (s(r'($type)(\[:\])'),
74
+ bygroups(using(this, state='inType'), Literal)),
75
+ ],
76
+ 'insideStr': [
77
+ (r'\\\\', String.Escape), # Escaped backslash
78
+ (r'\\"', String.Escape), # Escaped "
79
+ (r'\\`', String.Escape), # Escaped `
80
+ (r'\$\w+', String.Interpol), # Subst var
81
+ (r'\$\{.*?\}', String.Interpol), # Subst expr
82
+ (r'"', Punctuation, '#pop'), # Closing quot
83
+ (r'.', String) # String content
84
+ ],
85
+ 'insideUri': [ # TODO: remove copy/paste str/uri
86
+ (r'\\\\', String.Escape), # Escaped backslash
87
+ (r'\\"', String.Escape), # Escaped "
88
+ (r'\\`', String.Escape), # Escaped `
89
+ (r'\$\w+', String.Interpol), # Subst var
90
+ (r'\$\{.*?\}', String.Interpol), # Subst expr
91
+ (r'`', Punctuation, '#pop'), # Closing tick
92
+ (r'.', String.Backtick) # URI content
93
+ ],
94
+ 'protectionKeywords': [
95
+ (r'\b(public|protected|private|internal)\b', Keyword),
96
+ ],
97
+ 'typeKeywords': [
98
+ (r'\b(abstract|final|const|native|facet|enum)\b', Keyword),
99
+ ],
100
+ 'methodKeywords': [
101
+ (r'\b(abstract|native|once|override|static|virtual|final)\b',
102
+ Keyword),
103
+ ],
104
+ 'fieldKeywords': [
105
+ (r'\b(abstract|const|final|native|override|static|virtual|'
106
+ r'readonly)\b', Keyword)
107
+ ],
108
+ 'otherKeywords': [
109
+ (words((
110
+ 'try', 'catch', 'throw', 'finally', 'for', 'if', 'else', 'while',
111
+ 'as', 'is', 'isnot', 'switch', 'case', 'default', 'continue',
112
+ 'break', 'do', 'return', 'get', 'set'), prefix=r'\b', suffix=r'\b'),
113
+ Keyword),
114
+ (r'\b(it|this|super)\b', Name.Builtin.Pseudo),
115
+ ],
116
+ 'operators': [
117
+ (r'\+\+|\-\-|\+|\-|\*|/|\|\||&&|<=>|<=|<|>=|>|=|!|\[|\]', Operator)
118
+ ],
119
+ 'inType': [
120
+ (r'[\[\]|\->:?]', Punctuation),
121
+ (s(r'$id'), Name.Class),
122
+ default('#pop'),
123
+
124
+ ],
125
+ 'root': [
126
+ include('comments'),
127
+ include('protectionKeywords'),
128
+ include('typeKeywords'),
129
+ include('methodKeywords'),
130
+ include('fieldKeywords'),
131
+ include('literals'),
132
+ include('otherKeywords'),
133
+ include('operators'),
134
+ (r'using\b', Keyword.Namespace, 'using'), # Using stmt
135
+ (r'@\w+', Name.Decorator, 'facet'), # Symbol
136
+ (r'(class|mixin)(\s+)(\w+)', bygroups(Keyword, Whitespace, Name.Class),
137
+ 'inheritance'), # Inheritance list
138
+
139
+ # Type var := val
140
+ (s(r'($type)([ \t]+)($id)(\s*)(:=)'),
141
+ bygroups(using(this, state='inType'), Whitespace,
142
+ Name.Variable, Whitespace, Operator)),
143
+
144
+ # var := val
145
+ (s(r'($id)(\s*)(:=)'),
146
+ bygroups(Name.Variable, Whitespace, Operator)),
147
+
148
+ # .someId( or ->someId( ###
149
+ (s(r'(\.|(?:\->))($id)(\s*)(\()'),
150
+ bygroups(Operator, Name.Function, Whitespace, Punctuation),
151
+ 'insideParen'),
152
+
153
+ # .someId or ->someId
154
+ (s(r'(\.|(?:\->))($id)'),
155
+ bygroups(Operator, Name.Function)),
156
+
157
+ # new makeXXX (
158
+ (r'(new)(\s+)(make\w*)(\s*)(\()',
159
+ bygroups(Keyword, Whitespace, Name.Function, Whitespace, Punctuation),
160
+ 'insideMethodDeclArgs'),
161
+
162
+ # Type name (
163
+ (s(r'($type)([ \t]+)' # Return type and whitespace
164
+ r'($id)(\s*)(\()'), # method name + open brace
165
+ bygroups(using(this, state='inType'), Whitespace,
166
+ Name.Function, Whitespace, Punctuation),
167
+ 'insideMethodDeclArgs'),
168
+
169
+ # ArgType argName,
170
+ (s(r'($type)(\s+)($id)(\s*)(,)'),
171
+ bygroups(using(this, state='inType'), Whitespace, Name.Variable,
172
+ Whitespace, Punctuation)),
173
+
174
+ # ArgType argName)
175
+ # Covered in 'insideParen' state
176
+
177
+ # ArgType argName -> ArgType|
178
+ (s(r'($type)(\s+)($id)(\s*)(\->)(\s*)($type)(\|)'),
179
+ bygroups(using(this, state='inType'), Whitespace, Name.Variable,
180
+ Whitespace, Punctuation, Whitespace, using(this, state='inType'),
181
+ Punctuation)),
182
+
183
+ # ArgType argName|
184
+ (s(r'($type)(\s+)($id)(\s*)(\|)'),
185
+ bygroups(using(this, state='inType'), Whitespace, Name.Variable,
186
+ Whitespace, Punctuation)),
187
+
188
+ # Type var
189
+ (s(r'($type)([ \t]+)($id)'),
190
+ bygroups(using(this, state='inType'), Whitespace,
191
+ Name.Variable)),
192
+
193
+ (r'\(', Punctuation, 'insideParen'),
194
+ (r'\{', Punctuation, 'insideBrace'),
195
+ (r'\s+', Whitespace),
196
+ (r'.', Text)
197
+ ],
198
+ 'insideParen': [
199
+ (r'\)', Punctuation, '#pop'),
200
+ include('root'),
201
+ ],
202
+ 'insideMethodDeclArgs': [
203
+ (r'\)', Punctuation, '#pop'),
204
+ (s(r'($type)(\s+)($id)(\s*)(\))'),
205
+ bygroups(using(this, state='inType'), Whitespace, Name.Variable,
206
+ Whitespace, Punctuation), '#pop'),
207
+ include('root'),
208
+ ],
209
+ 'insideBrace': [
210
+ (r'\}', Punctuation, '#pop'),
211
+ include('root'),
212
+ ],
213
+ 'inheritance': [
214
+ (r'\s+', Whitespace), # Whitespace
215
+ (r':|,', Punctuation),
216
+ (r'(?:(\w+)(::))?(\w+)',
217
+ bygroups(Name.Namespace, Punctuation, Name.Class)),
218
+ (r'\{', Punctuation, '#pop')
219
+ ],
220
+ 'using': [
221
+ (r'[ \t]+', Whitespace), # consume whitespaces
222
+ (r'(\[)(\w+)(\])',
223
+ bygroups(Punctuation, Comment.Special, Punctuation)), # ffi
224
+ (r'(\")?([\w.]+)(\")?',
225
+ bygroups(Punctuation, Name.Namespace, Punctuation)), # podname
226
+ (r'::', Punctuation, 'usingClass'),
227
+ default('#pop')
228
+ ],
229
+ 'usingClass': [
230
+ (r'[ \t]+', Whitespace), # consume whitespaces
231
+ (r'(as)(\s+)(\w+)',
232
+ bygroups(Keyword.Declaration, Whitespace, Name.Class), '#pop:2'),
233
+ (r'[\w$]+', Name.Class),
234
+ default('#pop:2') # jump out to root state
235
+ ],
236
+ 'facet': [
237
+ (r'\s+', Whitespace),
238
+ (r'\{', Punctuation, 'facetFields'),
239
+ default('#pop')
240
+ ],
241
+ 'facetFields': [
242
+ include('comments'),
243
+ include('literals'),
244
+ include('operators'),
245
+ (r'\s+', Whitespace),
246
+ (r'(\s*)(\w+)(\s*)(=)', bygroups(Whitespace, Name, Whitespace, Operator)),
247
+ (r'\}', Punctuation, '#pop'),
248
+ (r'.', Text)
249
+ ],
250
+ }
venv/Lib/site-packages/pygments/lexers/felix.py ADDED
@@ -0,0 +1,275 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.felix
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Felix language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, include, bygroups, default, words, \
12
+ combined
13
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
14
+ Number, Punctuation, Whitespace
15
+
16
+ __all__ = ['FelixLexer']
17
+
18
+
19
+ class FelixLexer(RegexLexer):
20
+ """
21
+ For Felix source code.
22
+ """
23
+
24
+ name = 'Felix'
25
+ url = 'http://www.felix-lang.org'
26
+ aliases = ['felix', 'flx']
27
+ filenames = ['*.flx', '*.flxh']
28
+ mimetypes = ['text/x-felix']
29
+ version_added = '1.2'
30
+
31
+ preproc = (
32
+ 'elif', 'else', 'endif', 'if', 'ifdef', 'ifndef',
33
+ )
34
+
35
+ keywords = (
36
+ '_', '_deref', 'all', 'as',
37
+ 'assert', 'attempt', 'call', 'callback', 'case', 'caseno', 'cclass',
38
+ 'code', 'compound', 'ctypes', 'do', 'done', 'downto', 'elif', 'else',
39
+ 'endattempt', 'endcase', 'endif', 'endmatch', 'enum', 'except',
40
+ 'exceptions', 'expect', 'finally', 'for', 'forall', 'forget', 'fork',
41
+ 'functor', 'goto', 'ident', 'if', 'incomplete', 'inherit', 'instance',
42
+ 'interface', 'jump', 'lambda', 'loop', 'match', 'module', 'namespace',
43
+ 'new', 'noexpand', 'nonterm', 'obj', 'of', 'open', 'parse', 'raise',
44
+ 'regexp', 'reglex', 'regmatch', 'rename', 'return', 'the', 'then',
45
+ 'to', 'type', 'typecase', 'typedef', 'typematch', 'typeof', 'upto',
46
+ 'when', 'whilst', 'with', 'yield',
47
+ )
48
+
49
+ keyword_directives = (
50
+ '_gc_pointer', '_gc_type', 'body', 'comment', 'const', 'export',
51
+ 'header', 'inline', 'lval', 'macro', 'noinline', 'noreturn',
52
+ 'package', 'private', 'pod', 'property', 'public', 'publish',
53
+ 'requires', 'todo', 'virtual', 'use',
54
+ )
55
+
56
+ keyword_declarations = (
57
+ 'def', 'let', 'ref', 'val', 'var',
58
+ )
59
+
60
+ keyword_types = (
61
+ 'unit', 'void', 'any', 'bool',
62
+ 'byte', 'offset',
63
+ 'address', 'caddress', 'cvaddress', 'vaddress',
64
+ 'tiny', 'short', 'int', 'long', 'vlong',
65
+ 'utiny', 'ushort', 'vshort', 'uint', 'ulong', 'uvlong',
66
+ 'int8', 'int16', 'int32', 'int64',
67
+ 'uint8', 'uint16', 'uint32', 'uint64',
68
+ 'float', 'double', 'ldouble',
69
+ 'complex', 'dcomplex', 'lcomplex',
70
+ 'imaginary', 'dimaginary', 'limaginary',
71
+ 'char', 'wchar', 'uchar',
72
+ 'charp', 'charcp', 'ucharp', 'ucharcp',
73
+ 'string', 'wstring', 'ustring',
74
+ 'cont',
75
+ 'array', 'varray', 'list',
76
+ 'lvalue', 'opt', 'slice',
77
+ )
78
+
79
+ keyword_constants = (
80
+ 'false', 'true',
81
+ )
82
+
83
+ operator_words = (
84
+ 'and', 'not', 'in', 'is', 'isin', 'or', 'xor',
85
+ )
86
+
87
+ name_builtins = (
88
+ '_svc', 'while',
89
+ )
90
+
91
+ name_pseudo = (
92
+ 'root', 'self', 'this',
93
+ )
94
+
95
+ decimal_suffixes = '([tTsSiIlLvV]|ll|LL|([iIuU])(8|16|32|64))?'
96
+
97
+ tokens = {
98
+ 'root': [
99
+ include('whitespace'),
100
+
101
+ # Keywords
102
+ (words(('axiom', 'ctor', 'fun', 'gen', 'proc', 'reduce',
103
+ 'union'), suffix=r'\b'),
104
+ Keyword, 'funcname'),
105
+ (words(('class', 'cclass', 'cstruct', 'obj', 'struct'), suffix=r'\b'),
106
+ Keyword, 'classname'),
107
+ (r'(instance|module|typeclass)\b', Keyword, 'modulename'),
108
+
109
+ (words(keywords, suffix=r'\b'), Keyword),
110
+ (words(keyword_directives, suffix=r'\b'), Name.Decorator),
111
+ (words(keyword_declarations, suffix=r'\b'), Keyword.Declaration),
112
+ (words(keyword_types, suffix=r'\b'), Keyword.Type),
113
+ (words(keyword_constants, suffix=r'\b'), Keyword.Constant),
114
+
115
+ # Operators
116
+ include('operators'),
117
+
118
+ # Float Literal
119
+ # -- Hex Float
120
+ (r'0[xX]([0-9a-fA-F_]*\.[0-9a-fA-F_]+|[0-9a-fA-F_]+)'
121
+ r'[pP][+\-]?[0-9_]+[lLfFdD]?', Number.Float),
122
+ # -- DecimalFloat
123
+ (r'[0-9_]+(\.[0-9_]+[eE][+\-]?[0-9_]+|'
124
+ r'\.[0-9_]*|[eE][+\-]?[0-9_]+)[lLfFdD]?', Number.Float),
125
+ (r'\.(0|[1-9][0-9_]*)([eE][+\-]?[0-9_]+)?[lLfFdD]?',
126
+ Number.Float),
127
+
128
+ # IntegerLiteral
129
+ # -- Binary
130
+ (rf'0[Bb][01_]+{decimal_suffixes}', Number.Bin),
131
+ # -- Octal
132
+ (rf'0[0-7_]+{decimal_suffixes}', Number.Oct),
133
+ # -- Hexadecimal
134
+ (rf'0[xX][0-9a-fA-F_]+{decimal_suffixes}', Number.Hex),
135
+ # -- Decimal
136
+ (rf'(0|[1-9][0-9_]*){decimal_suffixes}', Number.Integer),
137
+
138
+ # Strings
139
+ ('([rR][cC]?|[cC][rR])"""', String, 'tdqs'),
140
+ ("([rR][cC]?|[cC][rR])'''", String, 'tsqs'),
141
+ ('([rR][cC]?|[cC][rR])"', String, 'dqs'),
142
+ ("([rR][cC]?|[cC][rR])'", String, 'sqs'),
143
+ ('[cCfFqQwWuU]?"""', String, combined('stringescape', 'tdqs')),
144
+ ("[cCfFqQwWuU]?'''", String, combined('stringescape', 'tsqs')),
145
+ ('[cCfFqQwWuU]?"', String, combined('stringescape', 'dqs')),
146
+ ("[cCfFqQwWuU]?'", String, combined('stringescape', 'sqs')),
147
+
148
+ # Punctuation
149
+ (r'[\[\]{}:(),;?]', Punctuation),
150
+
151
+ # Labels
152
+ (r'[a-zA-Z_]\w*:>', Name.Label),
153
+
154
+ # Identifiers
155
+ (r'({})\b'.format('|'.join(name_builtins)), Name.Builtin),
156
+ (r'({})\b'.format('|'.join(name_pseudo)), Name.Builtin.Pseudo),
157
+ (r'[a-zA-Z_]\w*', Name),
158
+ ],
159
+ 'whitespace': [
160
+ (r'\s+', Whitespace),
161
+
162
+ include('comment'),
163
+
164
+ # Preprocessor
165
+ (r'(#)(\s*)(if)(\s+)(0)',
166
+ bygroups(Comment.Preproc, Whitespace, Comment.Preproc,
167
+ Whitespace, Comment.Preproc), 'if0'),
168
+ (r'#', Comment.Preproc, 'macro'),
169
+ ],
170
+ 'operators': [
171
+ (r'({})\b'.format('|'.join(operator_words)), Operator.Word),
172
+ (r'!=|==|<<|>>|\|\||&&|[-~+/*%=<>&^|.$]', Operator),
173
+ ],
174
+ 'comment': [
175
+ (r'//(.*?)$', Comment.Single),
176
+ (r'/[*]', Comment.Multiline, 'comment2'),
177
+ ],
178
+ 'comment2': [
179
+ (r'[^/*]', Comment.Multiline),
180
+ (r'/[*]', Comment.Multiline, '#push'),
181
+ (r'[*]/', Comment.Multiline, '#pop'),
182
+ (r'[/*]', Comment.Multiline),
183
+ ],
184
+ 'if0': [
185
+ (r'^(\s*)(#if.*?(?<!\\))(\n)',
186
+ bygroups(Whitespace, Comment, Whitespace), '#push'),
187
+ (r'^(\s*)(#endif.*?(?<!\\))(\n)',
188
+ bygroups(Whitespace, Comment, Whitespace), '#pop'),
189
+ (r'(.*?)(\n)', bygroups(Comment, Whitespace)),
190
+ ],
191
+ 'macro': [
192
+ include('comment'),
193
+ (r'(import|include)(\s+)(<[^>]*?>)',
194
+ bygroups(Comment.Preproc, Whitespace, String), '#pop'),
195
+ (r'(import|include)(\s+)("[^"]*?")',
196
+ bygroups(Comment.Preproc, Whitespace, String), '#pop'),
197
+ (r"(import|include)(\s+)('[^']*?')",
198
+ bygroups(Comment.Preproc, Whitespace, String), '#pop'),
199
+ (r'[^/\n]+', Comment.Preproc),
200
+ # (r'/[*](.|\n)*?[*]/', Comment),
201
+ # (r'//.*?\n', Comment, '#pop'),
202
+ (r'/', Comment.Preproc),
203
+ (r'(?<=\\)\n', Comment.Preproc),
204
+ (r'\n', Whitespace, '#pop'),
205
+ ],
206
+ 'funcname': [
207
+ include('whitespace'),
208
+ (r'[a-zA-Z_]\w*', Name.Function, '#pop'),
209
+ # anonymous functions
210
+ (r'(?=\()', Text, '#pop'),
211
+ ],
212
+ 'classname': [
213
+ include('whitespace'),
214
+ (r'[a-zA-Z_]\w*', Name.Class, '#pop'),
215
+ # anonymous classes
216
+ (r'(?=\{)', Text, '#pop'),
217
+ ],
218
+ 'modulename': [
219
+ include('whitespace'),
220
+ (r'\[', Punctuation, ('modulename2', 'tvarlist')),
221
+ default('modulename2'),
222
+ ],
223
+ 'modulename2': [
224
+ include('whitespace'),
225
+ (r'([a-zA-Z_]\w*)', Name.Namespace, '#pop:2'),
226
+ ],
227
+ 'tvarlist': [
228
+ include('whitespace'),
229
+ include('operators'),
230
+ (r'\[', Punctuation, '#push'),
231
+ (r'\]', Punctuation, '#pop'),
232
+ (r',', Punctuation),
233
+ (r'(with|where)\b', Keyword),
234
+ (r'[a-zA-Z_]\w*', Name),
235
+ ],
236
+ 'stringescape': [
237
+ (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
238
+ r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
239
+ ],
240
+ 'strings': [
241
+ (r'%(\([a-zA-Z0-9]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
242
+ '[hlL]?[E-GXc-giorsux%]', String.Interpol),
243
+ (r'[^\\\'"%\n]+', String),
244
+ # quotes, percents and backslashes must be parsed one at a time
245
+ (r'[\'"\\]', String),
246
+ # unhandled string formatting sign
247
+ (r'%', String)
248
+ # newlines are an error (use "nl" state)
249
+ ],
250
+ 'nl': [
251
+ (r'\n', String)
252
+ ],
253
+ 'dqs': [
254
+ (r'"', String, '#pop'),
255
+ # included here again for raw strings
256
+ (r'\\\\|\\"|\\\n', String.Escape),
257
+ include('strings')
258
+ ],
259
+ 'sqs': [
260
+ (r"'", String, '#pop'),
261
+ # included here again for raw strings
262
+ (r"\\\\|\\'|\\\n", String.Escape),
263
+ include('strings')
264
+ ],
265
+ 'tdqs': [
266
+ (r'"""', String, '#pop'),
267
+ include('strings'),
268
+ include('nl')
269
+ ],
270
+ 'tsqs': [
271
+ (r"'''", String, '#pop'),
272
+ include('strings'),
273
+ include('nl')
274
+ ],
275
+ }
venv/Lib/site-packages/pygments/lexers/fift.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.fift
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for fift.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, include
12
+ from pygments.token import Literal, Comment, Name, String, Number, Whitespace
13
+
14
+ __all__ = ['FiftLexer']
15
+
16
+
17
+ class FiftLexer(RegexLexer):
18
+ """
19
+ For Fift source code.
20
+ """
21
+
22
+ name = 'Fift'
23
+ aliases = ['fift', 'fif']
24
+ filenames = ['*.fif']
25
+ url = 'https://ton-blockchain.github.io/docs/fiftbase.pdf'
26
+ version_added = ''
27
+
28
+ tokens = {
29
+ 'root': [
30
+ (r'\s+', Whitespace),
31
+
32
+ include('comments'),
33
+
34
+ (r'[\.+]?\"', String, 'string'),
35
+
36
+ # numbers
37
+ (r'0x[0-9a-fA-F]+', Number.Hex),
38
+ (r'0b[01]+', Number.Bin),
39
+ (r'-?[0-9]+("/"-?[0-9]+)?', Number.Decimal),
40
+
41
+ # slices
42
+ (r'b\{[01]+\}', Literal),
43
+ (r'x\{[0-9a-fA-F_]+\}', Literal),
44
+
45
+ # byte literal
46
+ (r'B\{[0-9a-fA-F_]+\}', Literal),
47
+
48
+ # treat anything as word
49
+ (r'\S+', Name)
50
+ ],
51
+
52
+ 'string': [
53
+ (r'\\.', String.Escape),
54
+ (r'\"', String, '#pop'),
55
+ (r'[^\"\r\n\\]+', String)
56
+ ],
57
+
58
+ 'comments': [
59
+ (r'//.*', Comment.Singleline),
60
+ (r'/\*', Comment.Multiline, 'comment'),
61
+ ],
62
+ 'comment': [
63
+ (r'[^/*]+', Comment.Multiline),
64
+ (r'/\*', Comment.Multiline, '#push'),
65
+ (r'\*/', Comment.Multiline, '#pop'),
66
+ (r'[*/]', Comment.Multiline),
67
+ ],
68
+ }
venv/Lib/site-packages/pygments/lexers/floscript.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.floscript
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for FloScript
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, include, bygroups, words
12
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
13
+ Number, Punctuation, Whitespace
14
+
15
+ __all__ = ['FloScriptLexer']
16
+
17
+
18
+ class FloScriptLexer(RegexLexer):
19
+ """
20
+ For FloScript configuration language source code.
21
+ """
22
+
23
+ name = 'FloScript'
24
+ url = 'https://github.com/ioflo/ioflo'
25
+ aliases = ['floscript', 'flo']
26
+ filenames = ['*.flo']
27
+ version_added = '2.4'
28
+
29
+ def innerstring_rules(ttype):
30
+ return [
31
+ # the old style '%s' % (...) string formatting
32
+ (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
33
+ '[hlL]?[E-GXc-giorsux%]', String.Interpol),
34
+ # backslashes, quotes and formatting signs must be parsed one at a time
35
+ (r'[^\\\'"%\n]+', ttype),
36
+ (r'[\'"\\]', ttype),
37
+ # unhandled string formatting sign
38
+ (r'%', ttype),
39
+ # newlines are an error (use "nl" state)
40
+ ]
41
+
42
+ tokens = {
43
+ 'root': [
44
+ (r'\s+', Whitespace),
45
+
46
+ (r'[]{}:(),;[]', Punctuation),
47
+ (r'(\\)(\n)', bygroups(Text, Whitespace)),
48
+ (r'\\', Text),
49
+ (words(('to', 'by', 'with', 'from', 'per', 'for', 'cum', 'qua', 'via',
50
+ 'as', 'at', 'in', 'of', 'on', 're', 'is',
51
+ 'if', 'be', 'into', 'and', 'not'), suffix=r'\b'), Operator.Word),
52
+ (r'!=|==|<<|>>|[-~+/*%=<>&^|.]', Operator),
53
+ (words(('load', 'init', 'server', 'logger', 'log', 'loggee', 'first',
54
+ 'over', 'under', 'next', 'done', 'timeout',
55
+ 'repeat', 'native', 'benter', 'enter',
56
+ 'recur', 'exit', 'precur', 'renter',
57
+ 'rexit', 'print', 'put', 'inc', 'copy',
58
+ 'set', 'aux', 'rear', 'raze', 'go', 'let',
59
+ 'do', 'bid', 'ready', 'start', 'stop',
60
+ 'run', 'abort', 'use', 'flo', 'give',
61
+ 'take'), suffix=r'\b'), Name.Builtin),
62
+ (r'(frame|framer|house)\b', Keyword),
63
+ ('"', String, 'string'),
64
+
65
+ include('name'),
66
+ include('numbers'),
67
+ (r'#.+$', Comment.Single),
68
+ ],
69
+ 'string': [
70
+ ('[^"]+', String),
71
+ ('"', String, '#pop'),
72
+ ],
73
+ 'numbers': [
74
+ (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
75
+ (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
76
+ (r'0[0-7]+j?', Number.Oct),
77
+ (r'0[bB][01]+', Number.Bin),
78
+ (r'0[xX][a-fA-F0-9]+', Number.Hex),
79
+ (r'\d+L', Number.Integer.Long),
80
+ (r'\d+j?', Number.Integer)
81
+ ],
82
+
83
+ 'name': [
84
+ (r'@[\w.]+', Name.Decorator),
85
+ (r'[a-zA-Z_]\w*', Name),
86
+ ],
87
+ }
venv/Lib/site-packages/pygments/lexers/forth.py ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.forth
3
+ ~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Forth language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, bygroups
14
+ from pygments.token import Text, Comment, Keyword, Name, String, Number, \
15
+ Whitespace
16
+
17
+
18
+ __all__ = ['ForthLexer']
19
+
20
+
21
+ class ForthLexer(RegexLexer):
22
+ """
23
+ Lexer for Forth files.
24
+ """
25
+ name = 'Forth'
26
+ url = 'https://www.forth.com/forth/'
27
+ aliases = ['forth']
28
+ filenames = ['*.frt', '*.fs']
29
+ mimetypes = ['application/x-forth']
30
+ version_added = '2.2'
31
+
32
+ flags = re.IGNORECASE | re.MULTILINE
33
+
34
+ tokens = {
35
+ 'root': [
36
+ (r'\s+', Whitespace),
37
+ # All comment types
38
+ (r'\\.*?$', Comment.Single),
39
+ (r'\([\s].*?\)', Comment.Single),
40
+ # defining words. The next word is a new command name
41
+ (r'(:|variable|constant|value|buffer:)(\s+)',
42
+ bygroups(Keyword.Namespace, Whitespace), 'worddef'),
43
+ # strings are rather simple
44
+ (r'([.sc]")(\s+?)', bygroups(String, Whitespace), 'stringdef'),
45
+ # keywords from the various wordsets
46
+ # *** Wordset BLOCK
47
+ (r'(blk|block|buffer|evaluate|flush|load|save-buffers|update|'
48
+ # *** Wordset BLOCK-EXT
49
+ r'empty-buffers|list|refill|scr|thru|'
50
+ # *** Wordset CORE
51
+ r'\#s|\*\/mod|\+loop|\/mod|0<|0=|1\+|1-|2!|'
52
+ r'2\*|2\/|2@|2drop|2dup|2over|2swap|>body|'
53
+ r'>in|>number|>r|\?dup|abort|abort\"|abs|'
54
+ r'accept|align|aligned|allot|and|base|begin|'
55
+ r'bl|c!|c,|c@|cell\+|cells|char|char\+|'
56
+ r'chars|constant|count|cr|create|decimal|'
57
+ r'depth|do|does>|drop|dup|else|emit|environment\?|'
58
+ r'evaluate|execute|exit|fill|find|fm\/mod|'
59
+ r'here|hold|i|if|immediate|invert|j|key|'
60
+ r'leave|literal|loop|lshift|m\*|max|min|'
61
+ r'mod|move|negate|or|over|postpone|quit|'
62
+ r'r>|r@|recurse|repeat|rot|rshift|s\"|s>d|'
63
+ r'sign|sm\/rem|source|space|spaces|state|swap|'
64
+ r'then|type|u\.|u\<|um\*|um\/mod|unloop|until|'
65
+ r'variable|while|word|xor|\[char\]|\[\'\]|'
66
+ r'@|!|\#|<\#|\#>|:|;|\+|-|\*|\/|,|<|>|\|1\+|1-|\.|'
67
+ # *** Wordset CORE-EXT
68
+ r'\.r|0<>|'
69
+ r'0>|2>r|2r>|2r@|:noname|\?do|again|c\"|'
70
+ r'case|compile,|endcase|endof|erase|false|'
71
+ r'hex|marker|nip|of|pad|parse|pick|refill|'
72
+ r'restore-input|roll|save-input|source-id|to|'
73
+ r'true|tuck|u\.r|u>|unused|value|within|'
74
+ r'\[compile\]|'
75
+ # *** Wordset CORE-EXT-obsolescent
76
+ r'\#tib|convert|expect|query|span|'
77
+ r'tib|'
78
+ # *** Wordset DOUBLE
79
+ r'2constant|2literal|2variable|d\+|d-|'
80
+ r'd\.|d\.r|d0<|d0=|d2\*|d2\/|d<|d=|d>s|'
81
+ r'dabs|dmax|dmin|dnegate|m\*\/|m\+|'
82
+ # *** Wordset DOUBLE-EXT
83
+ r'2rot|du<|'
84
+ # *** Wordset EXCEPTION
85
+ r'catch|throw|'
86
+ # *** Wordset EXCEPTION-EXT
87
+ r'abort|abort\"|'
88
+ # *** Wordset FACILITY
89
+ r'at-xy|key\?|page|'
90
+ # *** Wordset FACILITY-EXT
91
+ r'ekey|ekey>char|ekey\?|emit\?|ms|time&date|'
92
+ # *** Wordset FILE
93
+ r'BIN|CLOSE-FILE|CREATE-FILE|DELETE-FILE|FILE-POSITION|'
94
+ r'FILE-SIZE|INCLUDE-FILE|INCLUDED|OPEN-FILE|R\/O|'
95
+ r'R\/W|READ-FILE|READ-LINE|REPOSITION-FILE|RESIZE-FILE|'
96
+ r'S\"|SOURCE-ID|W/O|WRITE-FILE|WRITE-LINE|'
97
+ # *** Wordset FILE-EXT
98
+ r'FILE-STATUS|FLUSH-FILE|REFILL|RENAME-FILE|'
99
+ # *** Wordset FLOAT
100
+ r'>float|d>f|'
101
+ r'f!|f\*|f\+|f-|f\/|f0<|f0=|f<|f>d|f@|'
102
+ r'falign|faligned|fconstant|fdepth|fdrop|fdup|'
103
+ r'fliteral|float\+|floats|floor|fmax|fmin|'
104
+ r'fnegate|fover|frot|fround|fswap|fvariable|'
105
+ r'represent|'
106
+ # *** Wordset FLOAT-EXT
107
+ r'df!|df@|dfalign|dfaligned|dfloat\+|'
108
+ r'dfloats|f\*\*|f\.|fabs|facos|facosh|falog|'
109
+ r'fasin|fasinh|fatan|fatan2|fatanh|fcos|fcosh|'
110
+ r'fe\.|fexp|fexpm1|fln|flnp1|flog|fs\.|fsin|'
111
+ r'fsincos|fsinh|fsqrt|ftan|ftanh|f~|precision|'
112
+ r'set-precision|sf!|sf@|sfalign|sfaligned|sfloat\+|'
113
+ r'sfloats|'
114
+ # *** Wordset LOCAL
115
+ r'\(local\)|to|'
116
+ # *** Wordset LOCAL-EXT
117
+ r'locals\||'
118
+ # *** Wordset MEMORY
119
+ r'allocate|free|resize|'
120
+ # *** Wordset SEARCH
121
+ r'definitions|find|forth-wordlist|get-current|'
122
+ r'get-order|search-wordlist|set-current|set-order|'
123
+ r'wordlist|'
124
+ # *** Wordset SEARCH-EXT
125
+ r'also|forth|only|order|previous|'
126
+ # *** Wordset STRING
127
+ r'-trailing|\/string|blank|cmove|cmove>|compare|'
128
+ r'search|sliteral|'
129
+ # *** Wordset TOOLS
130
+ r'.s|dump|see|words|'
131
+ # *** Wordset TOOLS-EXT
132
+ r';code|'
133
+ r'ahead|assembler|bye|code|cs-pick|cs-roll|'
134
+ r'editor|state|\[else\]|\[if\]|\[then\]|'
135
+ # *** Wordset TOOLS-EXT-obsolescent
136
+ r'forget|'
137
+ # Forth 2012
138
+ r'defer|defer@|defer!|action-of|begin-structure|field:|buffer:|'
139
+ r'parse-name|buffer:|traverse-wordlist|n>r|nr>|2value|fvalue|'
140
+ r'name>interpret|name>compile|name>string|'
141
+ r'cfield:|end-structure)(?!\S)', Keyword),
142
+
143
+ # Numbers
144
+ (r'(\$[0-9A-F]+)', Number.Hex),
145
+ (r'(\#|%|&|\-|\+)?[0-9]+', Number.Integer),
146
+ (r'(\#|%|&|\-|\+)?[0-9.]+', Keyword.Type),
147
+ # amforth specific
148
+ (r'(@i|!i|@e|!e|pause|noop|turnkey|sleep|'
149
+ r'itype|icompare|sp@|sp!|rp@|rp!|up@|up!|'
150
+ r'>a|a>|a@|a!|a@+|a@-|>b|b>|b@|b!|b@+|b@-|'
151
+ r'find-name|1ms|'
152
+ r'sp0|rp0|\(evaluate\)|int-trap|int!)(?!\S)',
153
+ Name.Constant),
154
+ # a proposal
155
+ (r'(do-recognizer|r:fail|recognizer:|get-recognizers|'
156
+ r'set-recognizers|r:float|r>comp|r>int|r>post|'
157
+ r'r:name|r:word|r:dnum|r:num|recognizer|forth-recognizer|'
158
+ r'rec:num|rec:float|rec:word)(?!\S)', Name.Decorator),
159
+ # defining words. The next word is a new command name
160
+ (r'(Evalue|Rvalue|Uvalue|Edefer|Rdefer|Udefer)(\s+)',
161
+ bygroups(Keyword.Namespace, Text), 'worddef'),
162
+
163
+ (r'\S+', Name.Function), # Anything else is executed
164
+
165
+ ],
166
+ 'worddef': [
167
+ (r'\S+', Name.Class, '#pop'),
168
+ ],
169
+ 'stringdef': [
170
+ (r'[^"]+', String, '#pop'),
171
+ ],
172
+ }
173
+
174
+ def analyse_text(text):
175
+ """Forth uses : COMMAND ; quite a lot in a single line, so we're trying
176
+ to find that."""
177
+ if re.search('\n:[^\n]+;\n', text):
178
+ return 0.3
venv/Lib/site-packages/pygments/lexers/fortran.py ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.fortran
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for Fortran languages.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer, bygroups, include, words, using, default
14
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
15
+ Number, Punctuation, Generic
16
+
17
+ __all__ = ['FortranLexer', 'FortranFixedLexer']
18
+
19
+
20
+ class FortranLexer(RegexLexer):
21
+ """
22
+ Lexer for FORTRAN 90 code.
23
+ """
24
+ name = 'Fortran'
25
+ url = 'https://fortran-lang.org/'
26
+ aliases = ['fortran', 'f90']
27
+ filenames = ['*.f03', '*.f90', '*.F03', '*.F90']
28
+ mimetypes = ['text/x-fortran']
29
+ version_added = '0.10'
30
+ flags = re.IGNORECASE | re.MULTILINE
31
+
32
+ # Data Types: INTEGER, REAL, COMPLEX, LOGICAL, CHARACTER and DOUBLE PRECISION
33
+ # Operators: **, *, +, -, /, <, >, <=, >=, ==, /=
34
+ # Logical (?): NOT, AND, OR, EQV, NEQV
35
+
36
+ # Builtins:
37
+ # http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/Table-of-Intrinsic-Functions.html
38
+
39
+ tokens = {
40
+ 'root': [
41
+ (r'^#.*\n', Comment.Preproc),
42
+ (r'!.*\n', Comment),
43
+ include('strings'),
44
+ include('core'),
45
+ (r'[a-z][\w$]*', Name),
46
+ include('nums'),
47
+ (r'[\s]+', Text.Whitespace),
48
+ ],
49
+ 'core': [
50
+ # Statements
51
+
52
+ (r'\b(DO)(\s+)(CONCURRENT)\b', bygroups(Keyword, Text.Whitespace, Keyword)),
53
+ (r'\b(GO)(\s*)(TO)\b', bygroups(Keyword, Text.Whitespace, Keyword)),
54
+
55
+ (words((
56
+ 'ABSTRACT', 'ACCEPT', 'ALL', 'ALLSTOP', 'ALLOCATABLE', 'ALLOCATE',
57
+ 'ARRAY', 'ASSIGN', 'ASSOCIATE', 'ASYNCHRONOUS', 'BACKSPACE', 'BIND',
58
+ 'BLOCK', 'BLOCKDATA', 'BYTE', 'CALL', 'CASE', 'CLASS', 'CLOSE',
59
+ 'CODIMENSION', 'COMMON', 'CONTIGUOUS', 'CONTAINS',
60
+ 'CONTINUE', 'CRITICAL', 'CYCLE', 'DATA', 'DEALLOCATE', 'DECODE',
61
+ 'DEFERRED', 'DIMENSION', 'DO', 'ELEMENTAL', 'ELSE', 'ELSEIF', 'ENCODE',
62
+ 'END', 'ENDASSOCIATE', 'ENDBLOCK', 'ENDDO', 'ENDENUM', 'ENDFORALL',
63
+ 'ENDFUNCTION', 'ENDIF', 'ENDINTERFACE', 'ENDMODULE', 'ENDPROGRAM',
64
+ 'ENDSELECT', 'ENDSUBMODULE', 'ENDSUBROUTINE', 'ENDTYPE', 'ENDWHERE',
65
+ 'ENTRY', 'ENUM', 'ENUMERATOR', 'EQUIVALENCE', 'ERROR STOP', 'EXIT',
66
+ 'EXTENDS', 'EXTERNAL', 'EXTRINSIC', 'FILE', 'FINAL', 'FORALL', 'FORMAT',
67
+ 'FUNCTION', 'GENERIC', 'IF', 'IMAGES', 'IMPLICIT',
68
+ 'IMPORT', 'IMPURE', 'INCLUDE', 'INQUIRE', 'INTENT', 'INTERFACE',
69
+ 'INTRINSIC', 'IS', 'LOCK', 'MEMORY', 'MODULE', 'NAMELIST', 'NULLIFY',
70
+ 'NONE', 'NON_INTRINSIC', 'NON_OVERRIDABLE', 'NOPASS', 'ONLY', 'OPEN',
71
+ 'OPTIONAL', 'OPTIONS', 'PARAMETER', 'PASS', 'PAUSE', 'POINTER', 'PRINT',
72
+ 'PRIVATE', 'PROGRAM', 'PROCEDURE', 'PROTECTED', 'PUBLIC', 'PURE', 'READ',
73
+ 'RECURSIVE', 'RESULT', 'RETURN', 'REWIND', 'SAVE', 'SELECT', 'SEQUENCE',
74
+ 'STOP', 'SUBMODULE', 'SUBROUTINE', 'SYNC', 'SYNCALL', 'SYNCIMAGES',
75
+ 'SYNCMEMORY', 'TARGET', 'THEN', 'TYPE', 'UNLOCK', 'USE', 'VALUE',
76
+ 'VOLATILE', 'WHERE', 'WRITE', 'WHILE'), prefix=r'\b', suffix=r'\s*\b'),
77
+ Keyword),
78
+
79
+ # Data Types
80
+ (words((
81
+ 'CHARACTER', 'COMPLEX', 'DOUBLE PRECISION', 'DOUBLE COMPLEX', 'INTEGER',
82
+ 'LOGICAL', 'REAL', 'C_INT', 'C_SHORT', 'C_LONG', 'C_LONG_LONG',
83
+ 'C_SIGNED_CHAR', 'C_SIZE_T', 'C_INT8_T', 'C_INT16_T', 'C_INT32_T',
84
+ 'C_INT64_T', 'C_INT_LEAST8_T', 'C_INT_LEAST16_T', 'C_INT_LEAST32_T',
85
+ 'C_INT_LEAST64_T', 'C_INT_FAST8_T', 'C_INT_FAST16_T', 'C_INT_FAST32_T',
86
+ 'C_INT_FAST64_T', 'C_INTMAX_T', 'C_INTPTR_T', 'C_FLOAT', 'C_DOUBLE',
87
+ 'C_LONG_DOUBLE', 'C_FLOAT_COMPLEX', 'C_DOUBLE_COMPLEX',
88
+ 'C_LONG_DOUBLE_COMPLEX', 'C_BOOL', 'C_CHAR', 'C_PTR', 'C_FUNPTR'),
89
+ prefix=r'\b', suffix=r'\s*\b'),
90
+ Keyword.Type),
91
+
92
+ # Operators
93
+ (r'(\*\*|\*|\+|-|\/|<|>|<=|>=|==|\/=|=)', Operator),
94
+
95
+ (r'(::)', Keyword.Declaration),
96
+
97
+ (r'[()\[\],:&%;.]', Punctuation),
98
+ # Intrinsics
99
+ (words((
100
+ 'Abort', 'Abs', 'Access', 'AChar', 'ACos', 'ACosH', 'AdjustL',
101
+ 'AdjustR', 'AImag', 'AInt', 'Alarm', 'All', 'Allocated', 'ALog',
102
+ 'AMax', 'AMin', 'AMod', 'And', 'ANInt', 'Any', 'ASin', 'ASinH',
103
+ 'Associated', 'ATan', 'ATanH', 'Atomic_Define', 'Atomic_Ref',
104
+ 'BesJ', 'BesJN', 'Bessel_J0', 'Bessel_J1', 'Bessel_JN', 'Bessel_Y0',
105
+ 'Bessel_Y1', 'Bessel_YN', 'BesY', 'BesYN', 'BGE', 'BGT', 'BLE',
106
+ 'BLT', 'Bit_Size', 'BTest', 'CAbs', 'CCos', 'Ceiling', 'CExp',
107
+ 'Char', 'ChDir', 'ChMod', 'CLog', 'Cmplx', 'Command_Argument_Count',
108
+ 'Complex', 'Conjg', 'Cos', 'CosH', 'Count', 'CPU_Time', 'CShift',
109
+ 'CSin', 'CSqRt', 'CTime', 'C_Loc', 'C_Associated',
110
+ 'C_Null_Ptr', 'C_Null_Funptr', 'C_F_Pointer', 'C_F_ProcPointer',
111
+ 'C_Null_Char', 'C_Alert', 'C_Backspace', 'C_Form_Feed', 'C_FunLoc',
112
+ 'C_Sizeof', 'C_New_Line', 'C_Carriage_Return',
113
+ 'C_Horizontal_Tab', 'C_Vertical_Tab', 'DAbs', 'DACos', 'DASin',
114
+ 'DATan', 'Date_and_Time', 'DbesJ', 'DbesJN', 'DbesY',
115
+ 'DbesYN', 'Dble', 'DCos', 'DCosH', 'DDiM', 'DErF',
116
+ 'DErFC', 'DExp', 'Digits', 'DiM', 'DInt', 'DLog', 'DMax',
117
+ 'DMin', 'DMod', 'DNInt', 'Dot_Product', 'DProd', 'DSign', 'DSinH',
118
+ 'DShiftL', 'DShiftR', 'DSin', 'DSqRt', 'DTanH', 'DTan', 'DTime',
119
+ 'EOShift', 'Epsilon', 'ErF', 'ErFC', 'ErFC_Scaled', 'ETime',
120
+ 'Execute_Command_Line', 'Exit', 'Exp', 'Exponent', 'Extends_Type_Of',
121
+ 'FDate', 'FGet', 'FGetC', 'FindLoc', 'Float', 'Floor', 'Flush',
122
+ 'FNum', 'FPutC', 'FPut', 'Fraction', 'FSeek', 'FStat', 'FTell',
123
+ 'Gamma', 'GError', 'GetArg', 'Get_Command', 'Get_Command_Argument',
124
+ 'Get_Environment_Variable', 'GetCWD', 'GetEnv', 'GetGId', 'GetLog',
125
+ 'GetPId', 'GetUId', 'GMTime', 'HostNm', 'Huge', 'Hypot', 'IAbs',
126
+ 'IAChar', 'IAll', 'IAnd', 'IAny', 'IArgC', 'IBClr', 'IBits',
127
+ 'IBSet', 'IChar', 'IDate', 'IDiM', 'IDInt', 'IDNInt', 'IEOr',
128
+ 'IErrNo', 'IFix', 'Imag', 'ImagPart', 'Image_Index', 'Index',
129
+ 'Int', 'IOr', 'IParity', 'IRand', 'IsaTty', 'IShft', 'IShftC',
130
+ 'ISign', 'Iso_C_Binding', 'Is_Contiguous', 'Is_Iostat_End',
131
+ 'Is_Iostat_Eor', 'ITime', 'Kill', 'Kind', 'LBound', 'LCoBound',
132
+ 'Len', 'Len_Trim', 'LGe', 'LGt', 'Link', 'LLe', 'LLt', 'LnBlnk',
133
+ 'Loc', 'Log', 'Log_Gamma', 'Logical', 'Long', 'LShift', 'LStat',
134
+ 'LTime', 'MaskL', 'MaskR', 'MatMul', 'Max', 'MaxExponent',
135
+ 'MaxLoc', 'MaxVal', 'MClock', 'Merge', 'Merge_Bits', 'Move_Alloc',
136
+ 'Min', 'MinExponent', 'MinLoc', 'MinVal', 'Mod', 'Modulo', 'MvBits',
137
+ 'Nearest', 'New_Line', 'NInt', 'Norm2', 'Not', 'Null', 'Num_Images',
138
+ 'Or', 'Pack', 'Parity', 'PError', 'Precision', 'Present', 'Product',
139
+ 'Radix', 'Rand', 'Random_Number', 'Random_Seed', 'Range', 'Real',
140
+ 'RealPart', 'Rename', 'Repeat', 'Reshape', 'RRSpacing', 'RShift',
141
+ 'Same_Type_As', 'Scale', 'Scan', 'Second', 'Selected_Char_Kind',
142
+ 'Selected_Int_Kind', 'Selected_Real_Kind', 'Set_Exponent', 'Shape',
143
+ 'ShiftA', 'ShiftL', 'ShiftR', 'Short', 'Sign', 'Signal', 'SinH',
144
+ 'Sin', 'Sleep', 'Sngl', 'Spacing', 'Spread', 'SqRt', 'SRand',
145
+ 'Stat', 'Storage_Size', 'Sum', 'SymLnk', 'System', 'System_Clock',
146
+ 'Tan', 'TanH', 'Time', 'This_Image', 'Tiny', 'TrailZ', 'Transfer',
147
+ 'Transpose', 'Trim', 'TtyNam', 'UBound', 'UCoBound', 'UMask',
148
+ 'Unlink', 'Unpack', 'Verify', 'XOr', 'ZAbs', 'ZCos', 'ZExp',
149
+ 'ZLog', 'ZSin', 'ZSqRt'), prefix=r'\b', suffix=r'\s*\b'),
150
+ Name.Builtin),
151
+
152
+ # Booleans
153
+ (r'\.(true|false)\.', Name.Builtin),
154
+ # Comparing Operators
155
+ (r'\.(eq|ne|lt|le|gt|ge|not|and|or|eqv|neqv)\.', Operator.Word),
156
+ ],
157
+
158
+ 'strings': [
159
+ (r'"(\\[0-7]+|\\[^0-7]|[^"\\])*"', String.Double),
160
+ (r"'(\\[0-7]+|\\[^0-7]|[^'\\])*'", String.Single),
161
+ ],
162
+
163
+ 'nums': [
164
+ (r'\d+(?![.e])(_([1-9]|[a-z]\w*))?', Number.Integer),
165
+ (r'[+-]?\d*\.\d+([ed][-+]?\d+)?(_([1-9]|[a-z]\w*))?', Number.Float),
166
+ (r'[+-]?\d+\.\d*([ed][-+]?\d+)?(_([1-9]|[a-z]\w*))?', Number.Float),
167
+ (r'[+-]?\d+(\.\d*)?[ed][-+]?\d+(_([1-9]|[a-z]\w*))?', Number.Float),
168
+ ],
169
+ }
170
+
171
+
172
+ class FortranFixedLexer(RegexLexer):
173
+ """
174
+ Lexer for fixed format Fortran.
175
+ """
176
+ name = 'FortranFixed'
177
+ aliases = ['fortranfixed']
178
+ filenames = ['*.f', '*.F']
179
+ url = 'https://fortran-lang.org/'
180
+ version_added = '2.1'
181
+
182
+ flags = re.IGNORECASE
183
+
184
+ def _lex_fortran(self, match, ctx=None):
185
+ """Lex a line just as free form fortran without line break."""
186
+ lexer = FortranLexer()
187
+ text = match.group(0) + "\n"
188
+ for index, token, value in lexer.get_tokens_unprocessed(text):
189
+ value = value.replace('\n', '')
190
+ if value != '':
191
+ yield index, token, value
192
+
193
+ tokens = {
194
+ 'root': [
195
+ (r'[C*].*\n', Comment),
196
+ (r'#.*\n', Comment.Preproc),
197
+ (r' {0,4}!.*\n', Comment),
198
+ (r'(.{5})', Name.Label, 'cont-char'),
199
+ (r'.*\n', using(FortranLexer)),
200
+ ],
201
+ 'cont-char': [
202
+ (' ', Text, 'code'),
203
+ ('0', Comment, 'code'),
204
+ ('.', Generic.Strong, 'code'),
205
+ ],
206
+ 'code': [
207
+ (r'(.{66})(.*)(\n)',
208
+ bygroups(_lex_fortran, Comment, Text.Whitespace), 'root'),
209
+ (r'(.*)(\n)', bygroups(_lex_fortran, Text.Whitespace), 'root'),
210
+ default('root'),
211
+ ]
212
+ }
venv/Lib/site-packages/pygments/lexers/foxpro.py ADDED
@@ -0,0 +1,427 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.foxpro
3
+ ~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Simple lexer for Microsoft Visual FoxPro source code.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ import re
12
+
13
+ from pygments.lexer import RegexLexer
14
+ from pygments.token import Punctuation, Text, Comment, Operator, Keyword, \
15
+ Name, String
16
+
17
+ __all__ = ['FoxProLexer']
18
+
19
+
20
+ class FoxProLexer(RegexLexer):
21
+ """Lexer for Microsoft Visual FoxPro language.
22
+
23
+ FoxPro syntax allows to shorten all keywords and function names
24
+ to 4 characters. Shortened forms are not recognized by this lexer.
25
+ """
26
+
27
+ name = 'FoxPro'
28
+ aliases = ['foxpro', 'vfp', 'clipper', 'xbase']
29
+ filenames = ['*.PRG', '*.prg']
30
+ version_added = '1.6'
31
+ mimetype = []
32
+ url = 'https://learn.microsoft.com/en-us/previous-versions/visualstudio/foxpro'
33
+
34
+ flags = re.IGNORECASE | re.MULTILINE
35
+
36
+ tokens = {
37
+ 'root': [
38
+ (r';\s*\n', Punctuation), # consume newline
39
+ (r'(^|\n)\s*', Text, 'newline'),
40
+
41
+ # Square brackets may be used for array indices
42
+ # and for string literal. Look for arrays
43
+ # before matching string literals.
44
+ (r'(?<=\w)\[[0-9, ]+\]', Text),
45
+ (r'\'[^\'\n]*\'|"[^"\n]*"|\[[^]*]\]', String),
46
+ (r'(^\s*\*|&&|&amp;&amp;).*?\n', Comment.Single),
47
+
48
+ (r'(ABS|ACLASS|ACOPY|ACOS|ADATABASES|ADBOBJECTS|ADDBS|'
49
+ r'ADDPROPERTY|ADEL|ADIR|ADLLS|ADOCKSTATE|AELEMENT|AERROR|'
50
+ r'AEVENTS|AFIELDS|AFONT|AGETCLASS|AGETFILEVERSION|AINS|'
51
+ r'AINSTANCE|ALANGUAGE|ALEN|ALIAS|ALINES|ALLTRIM|'
52
+ r'AMEMBERS|AMOUSEOBJ|ANETRESOURCES|APRINTERS|APROCINFO|'
53
+ r'ASC|ASCAN|ASELOBJ|ASESSIONS|ASIN|ASORT|ASQLHANDLES|'
54
+ r'ASTACKINFO|ASUBSCRIPT|AT|AT_C|ATAGINFO|ATAN|ATC|ATCC|'
55
+ r'ATCLINE|ATLINE|ATN2|AUSED|AVCXCLASSES|BAR|BARCOUNT|'
56
+ r'BARPROMPT|BETWEEN|BINDEVENT|BINTOC|BITAND|BITCLEAR|'
57
+ r'BITLSHIFT|BITNOT|BITOR|BITRSHIFT|BITSET|BITTEST|BITXOR|'
58
+ r'BOF|CANDIDATE|CAPSLOCK|CAST|CDOW|CDX|CEILING|CHR|CHRSAW|'
59
+ r'CHRTRAN|CHRTRANC|CLEARRESULTSET|CMONTH|CNTBAR|CNTPAD|COL|'
60
+ r'COM|Functions|COMARRAY|COMCLASSINFO|COMPOBJ|COMPROP|'
61
+ r'COMRETURNERROR|COS|CPCONVERT|CPCURRENT|CPDBF|CREATEBINARY|'
62
+ r'CREATEOBJECT|CREATEOBJECTEX|CREATEOFFLINE|CTOBIN|CTOD|'
63
+ r'CTOT|CURDIR|CURSORGETPROP|CURSORSETPROP|CURSORTOXML|'
64
+ r'CURVAL|DATE|DATETIME|DAY|DBC|DBF|DBGETPROP|DBSETPROP|'
65
+ r'DBUSED|DDEAbortTrans|DDEAdvise|DDEEnabled|DDEExecute|'
66
+ r'DDEInitiate|DDELastError|DDEPoke|DDERequest|DDESetOption|'
67
+ r'DDESetService|DDESetTopic|DDETerminate|DEFAULTEXT|'
68
+ r'DELETED|DESCENDING|DIFFERENCE|DIRECTORY|DISKSPACE|'
69
+ r'DisplayPath|DMY|DODEFAULT|DOW|DRIVETYPE|DROPOFFLINE|'
70
+ r'DTOC|DTOR|DTOS|DTOT|EDITSOURCE|EMPTY|EOF|ERROR|EVAL(UATE)?|'
71
+ r'EVENTHANDLER|EVL|EXECSCRIPT|EXP|FCHSIZE|FCLOSE|FCOUNT|'
72
+ r'FCREATE|FDATE|FEOF|FERROR|FFLUSH|FGETS|FIELD|FILE|'
73
+ r'FILETOSTR|FILTER|FKLABEL|FKMAX|FLDLIST|FLOCK|FLOOR|'
74
+ r'FONTMETRIC|FOPEN|FOR|FORCEEXT|FORCEPATH|FOUND|FPUTS|'
75
+ r'FREAD|FSEEK|FSIZE|FTIME|FULLPATH|FV|FWRITE|'
76
+ r'GETAUTOINCVALUE|GETBAR|GETCOLOR|GETCP|GETDIR|GETENV|'
77
+ r'GETFILE|GETFLDSTATE|GETFONT|GETINTERFACE|'
78
+ r'GETNEXTMODIFIED|GETOBJECT|GETPAD|GETPEM|GETPICT|'
79
+ r'GETPRINTER|GETRESULTSET|GETWORDCOUNT|GETWORDNUM|'
80
+ r'GETCURSORADAPTER|GOMONTH|HEADER|HOME|HOUR|ICASE|'
81
+ r'IDXCOLLATE|IIF|IMESTATUS|INDBC|INDEXSEEK|INKEY|INLIST|'
82
+ r'INPUTBOX|INSMODE|INT|ISALPHA|ISBLANK|ISCOLOR|ISDIGIT|'
83
+ r'ISEXCLUSIVE|ISFLOCKED|ISLEADBYTE|ISLOWER|ISMEMOFETCHED|'
84
+ r'ISMOUSE|ISNULL|ISPEN|ISREADONLY|ISRLOCKED|'
85
+ r'ISTRANSACTABLE|ISUPPER|JUSTDRIVE|JUSTEXT|JUSTFNAME|'
86
+ r'JUSTPATH|JUSTSTEM|KEY|KEYMATCH|LASTKEY|LEFT|LEFTC|LEN|'
87
+ r'LENC|LIKE|LIKEC|LINENO|LOADPICTURE|LOCFILE|LOCK|LOG|'
88
+ r'LOG10|LOOKUP|LOWER|LTRIM|LUPDATE|MAKETRANSACTABLE|MAX|'
89
+ r'MCOL|MDOWN|MDX|MDY|MEMLINES|MEMORY|MENU|MESSAGE|'
90
+ r'MESSAGEBOX|MIN|MINUTE|MLINE|MOD|MONTH|MRKBAR|MRKPAD|'
91
+ r'MROW|MTON|MWINDOW|NDX|NEWOBJECT|NORMALIZE|NTOM|NUMLOCK|'
92
+ r'NVL|OBJNUM|OBJTOCLIENT|OBJVAR|OCCURS|OEMTOANSI|OLDVAL|'
93
+ r'ON|ORDER|OS|PAD|PADL|PARAMETERS|PAYMENT|PCOL|PCOUNT|'
94
+ r'PEMSTATUS|PI|POPUP|PRIMARY|PRINTSTATUS|PRMBAR|PRMPAD|'
95
+ r'PROGRAM|PROMPT|PROPER|PROW|PRTINFO|PUTFILE|PV|QUARTER|'
96
+ r'RAISEEVENT|RAND|RAT|RATC|RATLINE|RDLEVEL|READKEY|RECCOUNT|'
97
+ r'RECNO|RECSIZE|REFRESH|RELATION|REPLICATE|REQUERY|RGB|'
98
+ r'RGBSCHEME|RIGHT|RIGHTC|RLOCK|ROUND|ROW|RTOD|RTRIM|'
99
+ r'SAVEPICTURE|SCHEME|SCOLS|SEC|SECONDS|SEEK|SELECT|SET|'
100
+ r'SETFLDSTATE|SETRESULTSET|SIGN|SIN|SKPBAR|SKPPAD|SOUNDEX|'
101
+ r'SPACE|SQLCANCEL|SQLCOLUMNS|SQLCOMMIT|SQLCONNECT|'
102
+ r'SQLDISCONNECT|SQLEXEC|SQLGETPROP|SQLIDLEDISCONNECT|'
103
+ r'SQLMORERESULTS|SQLPREPARE|SQLROLLBACK|SQLSETPROP|'
104
+ r'SQLSTRINGCONNECT|SQLTABLES|SQRT|SROWS|STR|STRCONV|'
105
+ r'STREXTRACT|STRTOFILE|STRTRAN|STUFF|STUFFC|SUBSTR|'
106
+ r'SUBSTRC|SYS|SYSMETRIC|TABLEREVERT|TABLEUPDATE|TAG|'
107
+ r'TAGCOUNT|TAGNO|TAN|TARGET|TEXTMERGE|TIME|TRANSFORM|'
108
+ r'TRIM|TTOC|TTOD|TXNLEVEL|TXTWIDTH|TYPE|UNBINDEVENTS|'
109
+ r'UNIQUE|UPDATED|UPPER|USED|VAL|VARREAD|VARTYPE|VERSION|'
110
+ r'WBORDER|WCHILD|WCOLS|WDOCKABLE|WEEK|WEXIST|WFONT|WLAST|'
111
+ r'WLCOL|WLROW|WMAXIMUM|WMINIMUM|WONTOP|WOUTPUT|WPARENT|'
112
+ r'WREAD|WROWS|WTITLE|WVISIBLE|XMLTOCURSOR|XMLUPDATEGRAM|'
113
+ r'YEAR)(?=\s*\()', Name.Function),
114
+
115
+ (r'_ALIGNMENT|_ASCIICOLS|_ASCIIROWS|_ASSIST|_BEAUTIFY|_BOX|'
116
+ r'_BROWSER|_BUILDER|_CALCMEM|_CALCVALUE|_CLIPTEXT|_CONVERTER|'
117
+ r'_COVERAGE|_CUROBJ|_DBLCLICK|_DIARYDATE|_DOS|_FOXDOC|_FOXREF|'
118
+ r'_GALLERY|_GENGRAPH|_GENHTML|_GENMENU|_GENPD|_GENSCRN|'
119
+ r'_GENXTAB|_GETEXPR|_INCLUDE|_INCSEEK|_INDENT|_LMARGIN|_MAC|'
120
+ r'_MENUDESIGNER|_MLINE|_PADVANCE|_PAGENO|_PAGETOTAL|_PBPAGE|'
121
+ r'_PCOLNO|_PCOPIES|_PDRIVER|_PDSETUP|_PECODE|_PEJECT|_PEPAGE|'
122
+ r'_PLENGTH|_PLINENO|_PLOFFSET|_PPITCH|_PQUALITY|_PRETEXT|'
123
+ r'_PSCODE|_PSPACING|_PWAIT|_RMARGIN|_REPORTBUILDER|'
124
+ r'_REPORTOUTPUT|_REPORTPREVIEW|_SAMPLES|_SCCTEXT|_SCREEN|'
125
+ r'_SHELL|_SPELLCHK|_STARTUP|_TABS|_TALLY|_TASKPANE|_TEXT|'
126
+ r'_THROTTLE|_TOOLBOX|_TOOLTIPTIMEOUT|_TRANSPORT|_TRIGGERLEVEL|'
127
+ r'_UNIX|_VFP|_WINDOWS|_WIZARD|_WRAP', Keyword.Pseudo),
128
+
129
+ (r'THISFORMSET|THISFORM|THIS', Name.Builtin),
130
+
131
+ (r'Application|CheckBox|Collection|Column|ComboBox|'
132
+ r'CommandButton|CommandGroup|Container|Control|CursorAdapter|'
133
+ r'Cursor|Custom|DataEnvironment|DataObject|EditBox|'
134
+ r'Empty|Exception|Fields|Files|File|FormSet|Form|FoxCode|'
135
+ r'Grid|Header|Hyperlink|Image|Label|Line|ListBox|Objects|'
136
+ r'OptionButton|OptionGroup|PageFrame|Page|ProjectHook|Projects|'
137
+ r'Project|Relation|ReportListener|Separator|Servers|Server|'
138
+ r'Session|Shape|Spinner|Tables|TextBox|Timer|ToolBar|'
139
+ r'XMLAdapter|XMLField|XMLTable', Name.Class),
140
+
141
+ (r'm\.[a-z_]\w*', Name.Variable),
142
+ (r'\.(F|T|AND|OR|NOT|NULL)\.|\b(AND|OR|NOT|NULL)\b', Operator.Word),
143
+
144
+ (r'\.(ActiveColumn|ActiveControl|ActiveForm|ActivePage|'
145
+ r'ActiveProject|ActiveRow|AddLineFeeds|ADOCodePage|Alias|'
146
+ r'Alignment|Align|AllowAddNew|AllowAutoColumnFit|'
147
+ r'AllowCellSelection|AllowDelete|AllowHeaderSizing|'
148
+ r'AllowInsert|AllowModalMessages|AllowOutput|AllowRowSizing|'
149
+ r'AllowSimultaneousFetch|AllowTabs|AllowUpdate|'
150
+ r'AlwaysOnBottom|AlwaysOnTop|Anchor|Application|'
151
+ r'AutoActivate|AutoCenter|AutoCloseTables|AutoComplete|'
152
+ r'AutoCompSource|AutoCompTable|AutoHideScrollBar|'
153
+ r'AutoIncrement|AutoOpenTables|AutoRelease|AutoSize|'
154
+ r'AutoVerbMenu|AutoYield|BackColor|ForeColor|BackStyle|'
155
+ r'BaseClass|BatchUpdateCount|BindControls|BorderColor|'
156
+ r'BorderStyle|BorderWidth|BoundColumn|BoundTo|Bound|'
157
+ r'BreakOnError|BufferModeOverride|BufferMode|'
158
+ r'BuildDateTime|ButtonCount|Buttons|Cancel|Caption|'
159
+ r'Centered|Century|ChildAlias|ChildOrder|ChildTable|'
160
+ r'ClassLibrary|Class|ClipControls|Closable|CLSID|CodePage|'
161
+ r'ColorScheme|ColorSource|ColumnCount|ColumnLines|'
162
+ r'ColumnOrder|Columns|ColumnWidths|CommandClauses|'
163
+ r'Comment|CompareMemo|ConflictCheckCmd|ConflictCheckType|'
164
+ r'ContinuousScroll|ControlBox|ControlCount|Controls|'
165
+ r'ControlSource|ConversionFunc|Count|CurrentControl|'
166
+ r'CurrentDataSession|CurrentPass|CurrentX|CurrentY|'
167
+ r'CursorSchema|CursorSource|CursorStatus|Curvature|'
168
+ r'Database|DataSessionID|DataSession|DataSourceType|'
169
+ r'DataSource|DataType|DateFormat|DateMark|Debug|'
170
+ r'DeclareXMLPrefix|DEClassLibrary|DEClass|DefaultFilePath|'
171
+ r'Default|DefOLELCID|DeleteCmdDataSourceType|DeleteCmdDataSource|'
172
+ r'DeleteCmd|DeleteMark|Description|Desktop|'
173
+ r'Details|DisabledBackColor|DisabledForeColor|'
174
+ r'DisabledItemBackColor|DisabledItemForeColor|'
175
+ r'DisabledPicture|DisableEncode|DisplayCount|'
176
+ r'DisplayValue|Dockable|Docked|DockPosition|'
177
+ r'DocumentFile|DownPicture|DragIcon|DragMode|DrawMode|'
178
+ r'DrawStyle|DrawWidth|DynamicAlignment|DynamicBackColor|'
179
+ r'DynamicForeColor|DynamicCurrentControl|DynamicFontBold|'
180
+ r'DynamicFontItalic|DynamicFontStrikethru|'
181
+ r'DynamicFontUnderline|DynamicFontName|DynamicFontOutline|'
182
+ r'DynamicFontShadow|DynamicFontSize|DynamicInputMask|'
183
+ r'DynamicLineHeight|EditorOptions|Enabled|'
184
+ r'EnableHyperlinks|Encrypted|ErrorNo|Exclude|Exclusive|'
185
+ r'FetchAsNeeded|FetchMemoCmdList|FetchMemoDataSourceType|'
186
+ r'FetchMemoDataSource|FetchMemo|FetchSize|'
187
+ r'FileClassLibrary|FileClass|FillColor|FillStyle|Filter|'
188
+ r'FirstElement|FirstNestedTable|Flags|FontBold|FontItalic|'
189
+ r'FontStrikethru|FontUnderline|FontCharSet|FontCondense|'
190
+ r'FontExtend|FontName|FontOutline|FontShadow|FontSize|'
191
+ r'ForceCloseTag|Format|FormCount|FormattedOutput|Forms|'
192
+ r'FractionDigits|FRXDataSession|FullName|GDIPlusGraphics|'
193
+ r'GridLineColor|GridLines|GridLineWidth|HalfHeightCaption|'
194
+ r'HeaderClassLibrary|HeaderClass|HeaderHeight|Height|'
195
+ r'HelpContextID|HideSelection|HighlightBackColor|'
196
+ r'HighlightForeColor|HighlightStyle|HighlightRowLineWidth|'
197
+ r'HighlightRow|Highlight|HomeDir|Hours|HostName|'
198
+ r'HScrollSmallChange|hWnd|Icon|IncrementalSearch|Increment|'
199
+ r'InitialSelectedAlias|InputMask|InsertCmdDataSourceType|'
200
+ r'InsertCmdDataSource|InsertCmdRefreshCmd|'
201
+ r'InsertCmdRefreshFieldList|InsertCmdRefreshKeyFieldList|'
202
+ r'InsertCmd|Instancing|IntegralHeight|'
203
+ r'Interval|IMEMode|IsAttribute|IsBase64|IsBinary|IsNull|'
204
+ r'IsDiffGram|IsLoaded|ItemBackColor,|ItemData|ItemIDData|'
205
+ r'ItemTips|IXMLDOMElement|KeyboardHighValue|KeyboardLowValue|'
206
+ r'Keyfield|KeyFieldList|KeyPreview|KeySort|LanguageOptions|'
207
+ r'LeftColumn|Left|LineContents|LineNo|LineSlant|LinkMaster|'
208
+ r'ListCount|ListenerType|ListIndex|ListItemID|ListItem|'
209
+ r'List|LockColumnsLeft|LockColumns|LockScreen|MacDesktop|'
210
+ r'MainFile|MapN19_4ToCurrency|MapBinary|MapVarchar|Margin|'
211
+ r'MaxButton|MaxHeight|MaxLeft|MaxLength|MaxRecords|MaxTop|'
212
+ r'MaxWidth|MDIForm|MemberClassLibrary|MemberClass|'
213
+ r'MemoWindow|Message|MinButton|MinHeight|MinWidth|'
214
+ r'MouseIcon|MousePointer|Movable|MoverBars|MultiSelect|'
215
+ r'Name|NestedInto|NewIndex|NewItemID|NextSiblingTable|'
216
+ r'NoCpTrans|NoDataOnLoad|NoData|NullDisplay|'
217
+ r'NumberOfElements|Object|OLEClass|OLEDragMode|'
218
+ r'OLEDragPicture|OLEDropEffects|OLEDropHasData|'
219
+ r'OLEDropMode|OLEDropTextInsertion|OLELCID|'
220
+ r'OLERequestPendingTimeout|OLEServerBusyRaiseError|'
221
+ r'OLEServerBusyTimeout|OLETypeAllowed|OneToMany|'
222
+ r'OpenViews|OpenWindow|Optimize|OrderDirection|Order|'
223
+ r'OutputPageCount|OutputType|PageCount|PageHeight|'
224
+ r'PageNo|PageOrder|Pages|PageTotal|PageWidth|'
225
+ r'PanelLink|Panel|ParentAlias|ParentClass|ParentTable|'
226
+ r'Parent|Partition|PasswordChar|PictureMargin|'
227
+ r'PicturePosition|PictureSpacing|PictureSelectionDisplay|'
228
+ r'PictureVal|Picture|Prepared|'
229
+ r'PolyPoints|PreserveWhiteSpace|PreviewContainer|'
230
+ r'PrintJobName|Procedure|PROCESSID|ProgID|ProjectHookClass|'
231
+ r'ProjectHookLibrary|ProjectHook|QuietMode|'
232
+ r'ReadCycle|ReadLock|ReadMouse|ReadObject|ReadOnly|'
233
+ r'ReadSave|ReadTimeout|RecordMark|RecordSourceType|'
234
+ r'RecordSource|RefreshAlias|'
235
+ r'RefreshCmdDataSourceType|RefreshCmdDataSource|RefreshCmd|'
236
+ r'RefreshIgnoreFieldList|RefreshTimeStamp|RelationalExpr|'
237
+ r'RelativeColumn|RelativeRow|ReleaseType|Resizable|'
238
+ r'RespectCursorCP|RespectNesting|RightToLeft|RotateFlip|'
239
+ r'Rotation|RowColChange|RowHeight|RowSourceType|'
240
+ r'RowSource|ScaleMode|SCCProvider|SCCStatus|ScrollBars|'
241
+ r'Seconds|SelectCmd|SelectedID|'
242
+ r'SelectedItemBackColor|SelectedItemForeColor|Selected|'
243
+ r'SelectionNamespaces|SelectOnEntry|SelLength|SelStart|'
244
+ r'SelText|SendGDIPlusImage|SendUpdates|ServerClassLibrary|'
245
+ r'ServerClass|ServerHelpFile|ServerName|'
246
+ r'ServerProject|ShowTips|ShowInTaskbar|ShowWindow|'
247
+ r'Sizable|SizeBox|SOM|Sorted|Sparse|SpecialEffect|'
248
+ r'SpinnerHighValue|SpinnerLowValue|SplitBar|StackLevel|'
249
+ r'StartMode|StatusBarText|StatusBar|Stretch|StrictDateEntry|'
250
+ r'Style|TabIndex|Tables|TabOrientation|Tabs|TabStop|'
251
+ r'TabStretch|TabStyle|Tag|TerminateRead|Text|Themes|'
252
+ r'ThreadID|TimestampFieldList|TitleBar|ToolTipText|'
253
+ r'TopIndex|TopItemID|Top|TwoPassProcess|TypeLibCLSID|'
254
+ r'TypeLibDesc|TypeLibName|Type|Unicode|UpdatableFieldList|'
255
+ r'UpdateCmdDataSourceType|UpdateCmdDataSource|'
256
+ r'UpdateCmdRefreshCmd|UpdateCmdRefreshFieldList|'
257
+ r'UpdateCmdRefreshKeyFieldList|UpdateCmd|'
258
+ r'UpdateGramSchemaLocation|UpdateGram|UpdateNameList|UpdateType|'
259
+ r'UseCodePage|UseCursorSchema|UseDeDataSource|UseMemoSize|'
260
+ r'UserValue|UseTransactions|UTF8Encoded|Value|VersionComments|'
261
+ r'VersionCompany|VersionCopyright|VersionDescription|'
262
+ r'VersionNumber|VersionProduct|VersionTrademarks|Version|'
263
+ r'VFPXMLProgID|ViewPortHeight|ViewPortLeft|'
264
+ r'ViewPortTop|ViewPortWidth|VScrollSmallChange|View|Visible|'
265
+ r'VisualEffect|WhatsThisButton|WhatsThisHelpID|WhatsThisHelp|'
266
+ r'WhereType|Width|WindowList|WindowState|WindowType|WordWrap|'
267
+ r'WrapCharInCDATA|WrapInCDATA|WrapMemoInCDATA|XMLAdapter|'
268
+ r'XMLConstraints|XMLNameIsXPath|XMLNamespace|XMLName|'
269
+ r'XMLPrefix|XMLSchemaLocation|XMLTable|XMLType|'
270
+ r'XSDfractionDigits|XSDmaxLength|XSDtotalDigits|'
271
+ r'XSDtype|ZoomBox)', Name.Attribute),
272
+
273
+ (r'\.(ActivateCell|AddColumn|AddItem|AddListItem|AddObject|'
274
+ r'AddProperty|AddTableSchema|AddToSCC|Add|'
275
+ r'ApplyDiffgram|Attach|AutoFit|AutoOpen|Box|Build|'
276
+ r'CancelReport|ChangesToCursor|CheckIn|CheckOut|Circle|'
277
+ r'CleanUp|ClearData|ClearStatus|Clear|CloneObject|CloseTables|'
278
+ r'Close|Cls|CursorAttach|CursorDetach|CursorFill|'
279
+ r'CursorRefresh|DataToClip|DelayedMemoFetch|DeleteColumn|'
280
+ r'Dock|DoMessage|DoScroll|DoStatus|DoVerb|Drag|Draw|Eval|'
281
+ r'GetData|GetDockState|GetFormat|GetKey|GetLatestVersion|'
282
+ r'GetPageHeight|GetPageWidth|Help|Hide|IncludePageInOutput|'
283
+ r'IndexToItemID|ItemIDToIndex|Item|LoadXML|Line|Modify|'
284
+ r'MoveItem|Move|Nest|OLEDrag|OnPreviewClose|OutputPage|'
285
+ r'Point|Print|PSet|Quit|ReadExpression|ReadMethod|'
286
+ r'RecordRefresh|Refresh|ReleaseXML|Release|RemoveFromSCC|'
287
+ r'RemoveItem|RemoveListItem|RemoveObject|Remove|'
288
+ r'Render|Requery|RequestData|ResetToDefault|Reset|Run|'
289
+ r'SaveAsClass|SaveAs|SetAll|SetData|SetFocus|SetFormat|'
290
+ r'SetMain|SetVar|SetViewPort|ShowWhatsThis|Show|'
291
+ r'SupportsListenerType|TextHeight|TextWidth|ToCursor|'
292
+ r'ToXML|UndoCheckOut|Unnest|UpdateStatus|WhatsThisMode|'
293
+ r'WriteExpression|WriteMethod|ZOrder)', Name.Function),
294
+
295
+ (r'\.(Activate|AdjustObjectSize|AfterBand|AfterBuild|'
296
+ r'AfterCloseTables|AfterCursorAttach|AfterCursorClose|'
297
+ r'AfterCursorDetach|AfterCursorFill|AfterCursorRefresh|'
298
+ r'AfterCursorUpdate|AfterDelete|AfterInsert|'
299
+ r'AfterRecordRefresh|AfterUpdate|AfterDock|AfterReport|'
300
+ r'AfterRowColChange|BeforeBand|BeforeCursorAttach|'
301
+ r'BeforeCursorClose|BeforeCursorDetach|BeforeCursorFill|'
302
+ r'BeforeCursorRefresh|BeforeCursorUpdate|BeforeDelete|'
303
+ r'BeforeInsert|BeforeDock|BeforeOpenTables|'
304
+ r'BeforeRecordRefresh|BeforeReport|BeforeRowColChange|'
305
+ r'BeforeUpdate|Click|dbc_Activate|dbc_AfterAddTable|'
306
+ r'dbc_AfterAppendProc|dbc_AfterCloseTable|dbc_AfterCopyProc|'
307
+ r'dbc_AfterCreateConnection|dbc_AfterCreateOffline|'
308
+ r'dbc_AfterCreateTable|dbc_AfterCreateView|dbc_AfterDBGetProp|'
309
+ r'dbc_AfterDBSetProp|dbc_AfterDeleteConnection|'
310
+ r'dbc_AfterDropOffline|dbc_AfterDropTable|'
311
+ r'dbc_AfterModifyConnection|dbc_AfterModifyProc|'
312
+ r'dbc_AfterModifyTable|dbc_AfterModifyView|dbc_AfterOpenTable|'
313
+ r'dbc_AfterRemoveTable|dbc_AfterRenameConnection|'
314
+ r'dbc_AfterRenameTable|dbc_AfterRenameView|'
315
+ r'dbc_AfterValidateData|dbc_BeforeAddTable|'
316
+ r'dbc_BeforeAppendProc|dbc_BeforeCloseTable|'
317
+ r'dbc_BeforeCopyProc|dbc_BeforeCreateConnection|'
318
+ r'dbc_BeforeCreateOffline|dbc_BeforeCreateTable|'
319
+ r'dbc_BeforeCreateView|dbc_BeforeDBGetProp|'
320
+ r'dbc_BeforeDBSetProp|dbc_BeforeDeleteConnection|'
321
+ r'dbc_BeforeDropOffline|dbc_BeforeDropTable|'
322
+ r'dbc_BeforeModifyConnection|dbc_BeforeModifyProc|'
323
+ r'dbc_BeforeModifyTable|dbc_BeforeModifyView|'
324
+ r'dbc_BeforeOpenTable|dbc_BeforeRemoveTable|'
325
+ r'dbc_BeforeRenameConnection|dbc_BeforeRenameTable|'
326
+ r'dbc_BeforeRenameView|dbc_BeforeValidateData|'
327
+ r'dbc_CloseData|dbc_Deactivate|dbc_ModifyData|dbc_OpenData|'
328
+ r'dbc_PackData|DblClick|Deactivate|Deleted|Destroy|DoCmd|'
329
+ r'DownClick|DragDrop|DragOver|DropDown|ErrorMessage|Error|'
330
+ r'EvaluateContents|GotFocus|Init|InteractiveChange|KeyPress|'
331
+ r'LoadReport|Load|LostFocus|Message|MiddleClick|MouseDown|'
332
+ r'MouseEnter|MouseLeave|MouseMove|MouseUp|MouseWheel|Moved|'
333
+ r'OLECompleteDrag|OLEDragOver|OLEGiveFeedback|OLESetData|'
334
+ r'OLEStartDrag|OnMoveItem|Paint|ProgrammaticChange|'
335
+ r'QueryAddFile|QueryModifyFile|QueryNewFile|QueryRemoveFile|'
336
+ r'QueryRunFile|QueryUnload|RangeHigh|RangeLow|ReadActivate|'
337
+ r'ReadDeactivate|ReadShow|ReadValid|ReadWhen|Resize|'
338
+ r'RightClick|SCCInit|SCCDestroy|Scrolled|Timer|UIEnable|'
339
+ r'UnDock|UnloadReport|Unload|UpClick|Valid|When)', Name.Function),
340
+
341
+ (r'\s+', Text),
342
+ # everything else is not colored
343
+ (r'.', Text),
344
+ ],
345
+ 'newline': [
346
+ (r'\*.*?$', Comment.Single, '#pop'),
347
+ (r'(ACCEPT|ACTIVATE\s*MENU|ACTIVATE\s*POPUP|ACTIVATE\s*SCREEN|'
348
+ r'ACTIVATE\s*WINDOW|APPEND|APPEND\s*FROM|APPEND\s*FROM\s*ARRAY|'
349
+ r'APPEND\s*GENERAL|APPEND\s*MEMO|ASSIST|AVERAGE|BLANK|BROWSE|'
350
+ r'BUILD\s*APP|BUILD\s*EXE|BUILD\s*PROJECT|CALCULATE|CALL|'
351
+ r'CANCEL|CHANGE|CLEAR|CLOSE|CLOSE\s*MEMO|COMPILE|CONTINUE|'
352
+ r'COPY\s*FILE|COPY\s*INDEXES|COPY\s*MEMO|COPY\s*STRUCTURE|'
353
+ r'COPY\s*STRUCTURE\s*EXTENDED|COPY\s*TAG|COPY\s*TO|'
354
+ r'COPY\s*TO\s*ARRAY|COUNT|CREATE|CREATE\s*COLOR\s*SET|'
355
+ r'CREATE\s*CURSOR|CREATE\s*FROM|CREATE\s*LABEL|CREATE\s*MENU|'
356
+ r'CREATE\s*PROJECT|CREATE\s*QUERY|CREATE\s*REPORT|'
357
+ r'CREATE\s*SCREEN|CREATE\s*TABLE|CREATE\s*VIEW|DDE|'
358
+ r'DEACTIVATE\s*MENU|DEACTIVATE\s*POPUP|DEACTIVATE\s*WINDOW|'
359
+ r'DECLARE|DEFINE\s*BAR|DEFINE\s*BOX|DEFINE\s*MENU|'
360
+ r'DEFINE\s*PAD|DEFINE\s*POPUP|DEFINE\s*WINDOW|DELETE|'
361
+ r'DELETE\s*FILE|DELETE\s*TAG|DIMENSION|DIRECTORY|DISPLAY|'
362
+ r'DISPLAY\s*FILES|DISPLAY\s*MEMORY|DISPLAY\s*STATUS|'
363
+ r'DISPLAY\s*STRUCTURE|DO|EDIT|EJECT|EJECT\s*PAGE|ERASE|'
364
+ r'EXIT|EXPORT|EXTERNAL|FILER|FIND|FLUSH|FUNCTION|GATHER|'
365
+ r'GETEXPR|GO|GOTO|HELP|HIDE\s*MENU|HIDE\s*POPUP|'
366
+ r'HIDE\s*WINDOW|IMPORT|INDEX|INPUT|INSERT|JOIN|KEYBOARD|'
367
+ r'LABEL|LIST|LOAD|LOCATE|LOOP|MENU|MENU\s*TO|MODIFY\s*COMMAND|'
368
+ r'MODIFY\s*FILE|MODIFY\s*GENERAL|MODIFY\s*LABEL|MODIFY\s*MEMO|'
369
+ r'MODIFY\s*MENU|MODIFY\s*PROJECT|MODIFY\s*QUERY|'
370
+ r'MODIFY\s*REPORT|MODIFY\s*SCREEN|MODIFY\s*STRUCTURE|'
371
+ r'MODIFY\s*WINDOW|MOVE\s*POPUP|MOVE\s*WINDOW|NOTE|'
372
+ r'ON\s*APLABOUT|ON\s*BAR|ON\s*ERROR|ON\s*ESCAPE|'
373
+ r'ON\s*EXIT\s*BAR|ON\s*EXIT\s*MENU|ON\s*EXIT\s*PAD|'
374
+ r'ON\s*EXIT\s*POPUP|ON\s*KEY|ON\s*KEY\s*=|ON\s*KEY\s*LABEL|'
375
+ r'ON\s*MACHELP|ON\s*PAD|ON\s*PAGE|ON\s*READERROR|'
376
+ r'ON\s*SELECTION\s*BAR|ON\s*SELECTION\s*MENU|'
377
+ r'ON\s*SELECTION\s*PAD|ON\s*SELECTION\s*POPUP|ON\s*SHUTDOWN|'
378
+ r'PACK|PARAMETERS|PLAY\s*MACRO|POP\s*KEY|POP\s*MENU|'
379
+ r'POP\s*POPUP|PRIVATE|PROCEDURE|PUBLIC|PUSH\s*KEY|'
380
+ r'PUSH\s*MENU|PUSH\s*POPUP|QUIT|READ|READ\s*MENU|RECALL|'
381
+ r'REINDEX|RELEASE|RELEASE\s*MODULE|RENAME|REPLACE|'
382
+ r'REPLACE\s*FROM\s*ARRAY|REPORT|RESTORE\s*FROM|'
383
+ r'RESTORE\s*MACROS|RESTORE\s*SCREEN|RESTORE\s*WINDOW|'
384
+ r'RESUME|RETRY|RETURN|RUN|RUN\s*\/N"|RUNSCRIPT|'
385
+ r'SAVE\s*MACROS|SAVE\s*SCREEN|SAVE\s*TO|SAVE\s*WINDOWS|'
386
+ r'SCATTER|SCROLL|SEEK|SELECT|SET|SET\s*ALTERNATE|'
387
+ r'SET\s*ANSI|SET\s*APLABOUT|SET\s*AUTOSAVE|SET\s*BELL|'
388
+ r'SET\s*BLINK|SET\s*BLOCKSIZE|SET\s*BORDER|SET\s*BRSTATUS|'
389
+ r'SET\s*CARRY|SET\s*CENTURY|SET\s*CLEAR|SET\s*CLOCK|'
390
+ r'SET\s*COLLATE|SET\s*COLOR\s*OF|SET\s*COLOR\s*OF\s*SCHEME|'
391
+ r'SET\s*COLOR\s*SET|SET\s*COLOR\s*TO|SET\s*COMPATIBLE|'
392
+ r'SET\s*CONFIRM|SET\s*CONSOLE|SET\s*CURRENCY|SET\s*CURSOR|'
393
+ r'SET\s*DATE|SET\s*DEBUG|SET\s*DECIMALS|SET\s*DEFAULT|'
394
+ r'SET\s*DELETED|SET\s*DELIMITERS|SET\s*DEVELOPMENT|'
395
+ r'SET\s*DEVICE|SET\s*DISPLAY|SET\s*DOHISTORY|SET\s*ECHO|'
396
+ r'SET\s*ESCAPE|SET\s*EXACT|SET\s*EXCLUSIVE|SET\s*FIELDS|'
397
+ r'SET\s*FILTER|SET\s*FIXED|SET\s*FORMAT|SET\s*FULLPATH|'
398
+ r'SET\s*FUNCTION|SET\s*HEADINGS|SET\s*HELP|SET\s*HELPFILTER|'
399
+ r'SET\s*HOURS|SET\s*INDEX|SET\s*INTENSITY|SET\s*KEY|'
400
+ r'SET\s*KEYCOMP|SET\s*LIBRARY|SET\s*LOCK|SET\s*LOGERRORS|'
401
+ r'SET\s*MACDESKTOP|SET\s*MACHELP|SET\s*MACKEY|SET\s*MARGIN|'
402
+ r'SET\s*MARK\s*OF|SET\s*MARK\s*TO|SET\s*MEMOWIDTH|'
403
+ r'SET\s*MESSAGE|SET\s*MOUSE|SET\s*MULTILOCKS|SET\s*NEAR|'
404
+ r'SET\s*NOCPTRANS|SET\s*NOTIFY|SET\s*ODOMETER|SET\s*OPTIMIZE|'
405
+ r'SET\s*ORDER|SET\s*PALETTE|SET\s*PATH|SET\s*PDSETUP|'
406
+ r'SET\s*POINT|SET\s*PRINTER|SET\s*PROCEDURE|SET\s*READBORDER|'
407
+ r'SET\s*REFRESH|SET\s*RELATION|SET\s*RELATION\s*OFF|'
408
+ r'SET\s*REPROCESS|SET\s*RESOURCE|SET\s*SAFETY|SET\s*SCOREBOARD|'
409
+ r'SET\s*SEPARATOR|SET\s*SHADOWS|SET\s*SKIP|SET\s*SKIP\s*OF|'
410
+ r'SET\s*SPACE|SET\s*STATUS|SET\s*STATUS\s*BAR|SET\s*STEP|'
411
+ r'SET\s*STICKY|SET\s*SYSMENU|SET\s*TALK|SET\s*TEXTMERGE|'
412
+ r'SET\s*TEXTMERGE\s*DELIMITERS|SET\s*TOPIC|SET\s*TRBETWEEN|'
413
+ r'SET\s*TYPEAHEAD|SET\s*UDFPARMS|SET\s*UNIQUE|SET\s*VIEW|'
414
+ r'SET\s*VOLUME|SET\s*WINDOW\s*OF\s*MEMO|SET\s*XCMDFILE|'
415
+ r'SHOW\s*GET|SHOW\s*GETS|SHOW\s*MENU|SHOW\s*OBJECT|'
416
+ r'SHOW\s*POPUP|SHOW\s*WINDOW|SIZE\s*POPUP|SKIP|SORT|'
417
+ r'STORE|SUM|SUSPEND|TOTAL|TYPE|UNLOCK|UPDATE|USE|WAIT|'
418
+ r'ZAP|ZOOM\s*WINDOW|DO\s*CASE|CASE|OTHERWISE|ENDCASE|'
419
+ r'DO\s*WHILE|ENDDO|FOR|ENDFOR|NEXT|IF|ELSE|ENDIF|PRINTJOB|'
420
+ r'ENDPRINTJOB|SCAN|ENDSCAN|TEXT|ENDTEXT|=)',
421
+ Keyword.Reserved, '#pop'),
422
+ (r'#\s*(IF|ELIF|ELSE|ENDIF|DEFINE|IFDEF|IFNDEF|INCLUDE)',
423
+ Comment.Preproc, '#pop'),
424
+ (r'(m\.)?[a-z_]\w*', Name.Variable, '#pop'),
425
+ (r'.', Text, '#pop'),
426
+ ],
427
+ }
venv/Lib/site-packages/pygments/lexers/freefem.py ADDED
@@ -0,0 +1,893 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.freefem
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for FreeFem++ language.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.token import Comment, Operator, Keyword, Name
12
+
13
+ from pygments.lexers.c_cpp import CppLexer
14
+
15
+ __all__ = ['FreeFemLexer']
16
+
17
+
18
+ class FreeFemLexer(CppLexer):
19
+ """
20
+ For FreeFem++ source.
21
+
22
+ This is an extension of the CppLexer, as the FreeFem Language is a superset
23
+ of C++.
24
+ """
25
+
26
+ name = 'Freefem'
27
+ url = 'https://freefem.org/'
28
+ aliases = ['freefem']
29
+ filenames = ['*.edp']
30
+ mimetypes = ['text/x-freefem']
31
+ version_added = '2.4'
32
+
33
+ # Language operators
34
+ operators = {'+', '-', '*', '.*', '/', './', '%', '^', '^-1', ':', '\''}
35
+
36
+ # types
37
+ types = {'bool', 'border', 'complex', 'dmatrix', 'fespace', 'func', 'gslspline',
38
+ 'ifstream', 'int', 'macro', 'matrix', 'mesh', 'mesh3', 'mpiComm',
39
+ 'mpiGroup', 'mpiRequest', 'NewMacro', 'EndMacro', 'ofstream', 'Pmmap',
40
+ 'problem', 'Psemaphore', 'real', 'solve', 'string', 'varf'}
41
+
42
+ # finite element spaces
43
+ fespaces = {'BDM1', 'BDM1Ortho', 'Edge03d', 'Edge13d', 'Edge23d', 'FEQF', 'HCT',
44
+ 'P0', 'P03d', 'P0Edge', 'P1', 'P13d', 'P1b', 'P1b3d', 'P1bl', 'P1bl3d',
45
+ 'P1dc', 'P1Edge', 'P1nc', 'P2', 'P23d', 'P2b', 'P2BR', 'P2dc', 'P2Edge',
46
+ 'P2h', 'P2Morley', 'P2pnc', 'P3', 'P3dc', 'P3Edge', 'P4', 'P4dc',
47
+ 'P4Edge', 'P5Edge', 'RT0', 'RT03d', 'RT0Ortho', 'RT1', 'RT1Ortho',
48
+ 'RT2', 'RT2Ortho'}
49
+
50
+ # preprocessor
51
+ preprocessor = {'ENDIFMACRO', 'include', 'IFMACRO', 'load'}
52
+
53
+ # Language keywords
54
+ keywords = {
55
+ 'adj',
56
+ 'append',
57
+ 'area',
58
+ 'ARGV',
59
+ 'be',
60
+ 'binary',
61
+ 'BoundaryEdge',
62
+ 'bordermeasure',
63
+ 'CG',
64
+ 'Cholesky',
65
+ 'cin',
66
+ 'cout',
67
+ 'Crout',
68
+ 'default',
69
+ 'diag',
70
+ 'edgeOrientation',
71
+ 'endl',
72
+ 'false',
73
+ 'ffind',
74
+ 'FILE',
75
+ 'find',
76
+ 'fixed',
77
+ 'flush',
78
+ 'GMRES',
79
+ 'good',
80
+ 'hTriangle',
81
+ 'im',
82
+ 'imax',
83
+ 'imin',
84
+ 'InternalEdge',
85
+ 'l1',
86
+ 'l2',
87
+ 'label',
88
+ 'lenEdge',
89
+ 'length',
90
+ 'LINE',
91
+ 'linfty',
92
+ 'LU',
93
+ 'm',
94
+ 'max',
95
+ 'measure',
96
+ 'min',
97
+ 'mpiAnySource',
98
+ 'mpiBAND',
99
+ 'mpiBXOR',
100
+ 'mpiCommWorld',
101
+ 'mpiLAND',
102
+ 'mpiLOR',
103
+ 'mpiLXOR',
104
+ 'mpiMAX',
105
+ 'mpiMIN',
106
+ 'mpiPROD',
107
+ 'mpirank',
108
+ 'mpisize',
109
+ 'mpiSUM',
110
+ 'mpiUndefined',
111
+ 'n',
112
+ 'N',
113
+ 'nbe',
114
+ 'ndof',
115
+ 'ndofK',
116
+ 'noshowbase',
117
+ 'noshowpos',
118
+ 'notaregion',
119
+ 'nt',
120
+ 'nTonEdge',
121
+ 'nuEdge',
122
+ 'nuTriangle',
123
+ 'nv',
124
+ 'P',
125
+ 'pi',
126
+ 'precision',
127
+ 'qf1pE',
128
+ 'qf1pElump',
129
+ 'qf1pT',
130
+ 'qf1pTlump',
131
+ 'qfV1',
132
+ 'qfV1lump',
133
+ 'qf2pE',
134
+ 'qf2pT',
135
+ 'qf2pT4P1',
136
+ 'qfV2',
137
+ 'qf3pE',
138
+ 'qf4pE',
139
+ 'qf5pE',
140
+ 'qf5pT',
141
+ 'qfV5',
142
+ 'qf7pT',
143
+ 'qf9pT',
144
+ 'qfnbpE',
145
+ 'quantile',
146
+ 're',
147
+ 'region',
148
+ 'rfind',
149
+ 'scientific',
150
+ 'searchMethod',
151
+ 'setw',
152
+ 'showbase',
153
+ 'showpos',
154
+ 'sparsesolver',
155
+ 'sum',
156
+ 'tellp',
157
+ 'true',
158
+ 'UMFPACK',
159
+ 'unused',
160
+ 'whoinElement',
161
+ 'verbosity',
162
+ 'version',
163
+ 'volume',
164
+ 'x',
165
+ 'y',
166
+ 'z'
167
+ }
168
+
169
+ # Language shipped functions and class ( )
170
+ functions = {
171
+ 'abs',
172
+ 'acos',
173
+ 'acosh',
174
+ 'adaptmesh',
175
+ 'adj',
176
+ 'AffineCG',
177
+ 'AffineGMRES',
178
+ 'arg',
179
+ 'asin',
180
+ 'asinh',
181
+ 'assert',
182
+ 'atan',
183
+ 'atan2',
184
+ 'atanh',
185
+ 'atof',
186
+ 'atoi',
187
+ 'BFGS',
188
+ 'broadcast',
189
+ 'buildlayers',
190
+ 'buildmesh',
191
+ 'ceil',
192
+ 'chi',
193
+ 'complexEigenValue',
194
+ 'copysign',
195
+ 'change',
196
+ 'checkmovemesh',
197
+ 'clock',
198
+ 'cmaes',
199
+ 'conj',
200
+ 'convect',
201
+ 'cos',
202
+ 'cosh',
203
+ 'cube',
204
+ 'd',
205
+ 'dd',
206
+ 'dfft',
207
+ 'diffnp',
208
+ 'diffpos',
209
+ 'dimKrylov',
210
+ 'dist',
211
+ 'dumptable',
212
+ 'dx',
213
+ 'dxx',
214
+ 'dxy',
215
+ 'dxz',
216
+ 'dy',
217
+ 'dyx',
218
+ 'dyy',
219
+ 'dyz',
220
+ 'dz',
221
+ 'dzx',
222
+ 'dzy',
223
+ 'dzz',
224
+ 'EigenValue',
225
+ 'emptymesh',
226
+ 'erf',
227
+ 'erfc',
228
+ 'exec',
229
+ 'exit',
230
+ 'exp',
231
+ 'fdim',
232
+ 'floor',
233
+ 'fmax',
234
+ 'fmin',
235
+ 'fmod',
236
+ 'freeyams',
237
+ 'getARGV',
238
+ 'getline',
239
+ 'gmshload',
240
+ 'gmshload3',
241
+ 'gslcdfugaussianP',
242
+ 'gslcdfugaussianQ',
243
+ 'gslcdfugaussianPinv',
244
+ 'gslcdfugaussianQinv',
245
+ 'gslcdfgaussianP',
246
+ 'gslcdfgaussianQ',
247
+ 'gslcdfgaussianPinv',
248
+ 'gslcdfgaussianQinv',
249
+ 'gslcdfgammaP',
250
+ 'gslcdfgammaQ',
251
+ 'gslcdfgammaPinv',
252
+ 'gslcdfgammaQinv',
253
+ 'gslcdfcauchyP',
254
+ 'gslcdfcauchyQ',
255
+ 'gslcdfcauchyPinv',
256
+ 'gslcdfcauchyQinv',
257
+ 'gslcdflaplaceP',
258
+ 'gslcdflaplaceQ',
259
+ 'gslcdflaplacePinv',
260
+ 'gslcdflaplaceQinv',
261
+ 'gslcdfrayleighP',
262
+ 'gslcdfrayleighQ',
263
+ 'gslcdfrayleighPinv',
264
+ 'gslcdfrayleighQinv',
265
+ 'gslcdfchisqP',
266
+ 'gslcdfchisqQ',
267
+ 'gslcdfchisqPinv',
268
+ 'gslcdfchisqQinv',
269
+ 'gslcdfexponentialP',
270
+ 'gslcdfexponentialQ',
271
+ 'gslcdfexponentialPinv',
272
+ 'gslcdfexponentialQinv',
273
+ 'gslcdfexppowP',
274
+ 'gslcdfexppowQ',
275
+ 'gslcdftdistP',
276
+ 'gslcdftdistQ',
277
+ 'gslcdftdistPinv',
278
+ 'gslcdftdistQinv',
279
+ 'gslcdffdistP',
280
+ 'gslcdffdistQ',
281
+ 'gslcdffdistPinv',
282
+ 'gslcdffdistQinv',
283
+ 'gslcdfbetaP',
284
+ 'gslcdfbetaQ',
285
+ 'gslcdfbetaPinv',
286
+ 'gslcdfbetaQinv',
287
+ 'gslcdfflatP',
288
+ 'gslcdfflatQ',
289
+ 'gslcdfflatPinv',
290
+ 'gslcdfflatQinv',
291
+ 'gslcdflognormalP',
292
+ 'gslcdflognormalQ',
293
+ 'gslcdflognormalPinv',
294
+ 'gslcdflognormalQinv',
295
+ 'gslcdfgumbel1P',
296
+ 'gslcdfgumbel1Q',
297
+ 'gslcdfgumbel1Pinv',
298
+ 'gslcdfgumbel1Qinv',
299
+ 'gslcdfgumbel2P',
300
+ 'gslcdfgumbel2Q',
301
+ 'gslcdfgumbel2Pinv',
302
+ 'gslcdfgumbel2Qinv',
303
+ 'gslcdfweibullP',
304
+ 'gslcdfweibullQ',
305
+ 'gslcdfweibullPinv',
306
+ 'gslcdfweibullQinv',
307
+ 'gslcdfparetoP',
308
+ 'gslcdfparetoQ',
309
+ 'gslcdfparetoPinv',
310
+ 'gslcdfparetoQinv',
311
+ 'gslcdflogisticP',
312
+ 'gslcdflogisticQ',
313
+ 'gslcdflogisticPinv',
314
+ 'gslcdflogisticQinv',
315
+ 'gslcdfbinomialP',
316
+ 'gslcdfbinomialQ',
317
+ 'gslcdfpoissonP',
318
+ 'gslcdfpoissonQ',
319
+ 'gslcdfgeometricP',
320
+ 'gslcdfgeometricQ',
321
+ 'gslcdfnegativebinomialP',
322
+ 'gslcdfnegativebinomialQ',
323
+ 'gslcdfpascalP',
324
+ 'gslcdfpascalQ',
325
+ 'gslinterpakima',
326
+ 'gslinterpakimaperiodic',
327
+ 'gslinterpcsplineperiodic',
328
+ 'gslinterpcspline',
329
+ 'gslinterpsteffen',
330
+ 'gslinterplinear',
331
+ 'gslinterppolynomial',
332
+ 'gslranbernoullipdf',
333
+ 'gslranbeta',
334
+ 'gslranbetapdf',
335
+ 'gslranbinomialpdf',
336
+ 'gslranexponential',
337
+ 'gslranexponentialpdf',
338
+ 'gslranexppow',
339
+ 'gslranexppowpdf',
340
+ 'gslrancauchy',
341
+ 'gslrancauchypdf',
342
+ 'gslranchisq',
343
+ 'gslranchisqpdf',
344
+ 'gslranerlang',
345
+ 'gslranerlangpdf',
346
+ 'gslranfdist',
347
+ 'gslranfdistpdf',
348
+ 'gslranflat',
349
+ 'gslranflatpdf',
350
+ 'gslrangamma',
351
+ 'gslrangammaint',
352
+ 'gslrangammapdf',
353
+ 'gslrangammamt',
354
+ 'gslrangammaknuth',
355
+ 'gslrangaussian',
356
+ 'gslrangaussianratiomethod',
357
+ 'gslrangaussianziggurat',
358
+ 'gslrangaussianpdf',
359
+ 'gslranugaussian',
360
+ 'gslranugaussianratiomethod',
361
+ 'gslranugaussianpdf',
362
+ 'gslrangaussiantail',
363
+ 'gslrangaussiantailpdf',
364
+ 'gslranugaussiantail',
365
+ 'gslranugaussiantailpdf',
366
+ 'gslranlandau',
367
+ 'gslranlandaupdf',
368
+ 'gslrangeometricpdf',
369
+ 'gslrangumbel1',
370
+ 'gslrangumbel1pdf',
371
+ 'gslrangumbel2',
372
+ 'gslrangumbel2pdf',
373
+ 'gslranlogistic',
374
+ 'gslranlogisticpdf',
375
+ 'gslranlognormal',
376
+ 'gslranlognormalpdf',
377
+ 'gslranlogarithmicpdf',
378
+ 'gslrannegativebinomialpdf',
379
+ 'gslranpascalpdf',
380
+ 'gslranpareto',
381
+ 'gslranparetopdf',
382
+ 'gslranpoissonpdf',
383
+ 'gslranrayleigh',
384
+ 'gslranrayleighpdf',
385
+ 'gslranrayleightail',
386
+ 'gslranrayleightailpdf',
387
+ 'gslrantdist',
388
+ 'gslrantdistpdf',
389
+ 'gslranlaplace',
390
+ 'gslranlaplacepdf',
391
+ 'gslranlevy',
392
+ 'gslranweibull',
393
+ 'gslranweibullpdf',
394
+ 'gslsfairyAi',
395
+ 'gslsfairyBi',
396
+ 'gslsfairyAiscaled',
397
+ 'gslsfairyBiscaled',
398
+ 'gslsfairyAideriv',
399
+ 'gslsfairyBideriv',
400
+ 'gslsfairyAiderivscaled',
401
+ 'gslsfairyBiderivscaled',
402
+ 'gslsfairyzeroAi',
403
+ 'gslsfairyzeroBi',
404
+ 'gslsfairyzeroAideriv',
405
+ 'gslsfairyzeroBideriv',
406
+ 'gslsfbesselJ0',
407
+ 'gslsfbesselJ1',
408
+ 'gslsfbesselJn',
409
+ 'gslsfbesselY0',
410
+ 'gslsfbesselY1',
411
+ 'gslsfbesselYn',
412
+ 'gslsfbesselI0',
413
+ 'gslsfbesselI1',
414
+ 'gslsfbesselIn',
415
+ 'gslsfbesselI0scaled',
416
+ 'gslsfbesselI1scaled',
417
+ 'gslsfbesselInscaled',
418
+ 'gslsfbesselK0',
419
+ 'gslsfbesselK1',
420
+ 'gslsfbesselKn',
421
+ 'gslsfbesselK0scaled',
422
+ 'gslsfbesselK1scaled',
423
+ 'gslsfbesselKnscaled',
424
+ 'gslsfbesselj0',
425
+ 'gslsfbesselj1',
426
+ 'gslsfbesselj2',
427
+ 'gslsfbesseljl',
428
+ 'gslsfbessely0',
429
+ 'gslsfbessely1',
430
+ 'gslsfbessely2',
431
+ 'gslsfbesselyl',
432
+ 'gslsfbesseli0scaled',
433
+ 'gslsfbesseli1scaled',
434
+ 'gslsfbesseli2scaled',
435
+ 'gslsfbesselilscaled',
436
+ 'gslsfbesselk0scaled',
437
+ 'gslsfbesselk1scaled',
438
+ 'gslsfbesselk2scaled',
439
+ 'gslsfbesselklscaled',
440
+ 'gslsfbesselJnu',
441
+ 'gslsfbesselYnu',
442
+ 'gslsfbesselInuscaled',
443
+ 'gslsfbesselInu',
444
+ 'gslsfbesselKnuscaled',
445
+ 'gslsfbesselKnu',
446
+ 'gslsfbessellnKnu',
447
+ 'gslsfbesselzeroJ0',
448
+ 'gslsfbesselzeroJ1',
449
+ 'gslsfbesselzeroJnu',
450
+ 'gslsfclausen',
451
+ 'gslsfhydrogenicR1',
452
+ 'gslsfdawson',
453
+ 'gslsfdebye1',
454
+ 'gslsfdebye2',
455
+ 'gslsfdebye3',
456
+ 'gslsfdebye4',
457
+ 'gslsfdebye5',
458
+ 'gslsfdebye6',
459
+ 'gslsfdilog',
460
+ 'gslsfmultiply',
461
+ 'gslsfellintKcomp',
462
+ 'gslsfellintEcomp',
463
+ 'gslsfellintPcomp',
464
+ 'gslsfellintDcomp',
465
+ 'gslsfellintF',
466
+ 'gslsfellintE',
467
+ 'gslsfellintRC',
468
+ 'gslsferfc',
469
+ 'gslsflogerfc',
470
+ 'gslsferf',
471
+ 'gslsferfZ',
472
+ 'gslsferfQ',
473
+ 'gslsfhazard',
474
+ 'gslsfexp',
475
+ 'gslsfexpmult',
476
+ 'gslsfexpm1',
477
+ 'gslsfexprel',
478
+ 'gslsfexprel2',
479
+ 'gslsfexpreln',
480
+ 'gslsfexpintE1',
481
+ 'gslsfexpintE2',
482
+ 'gslsfexpintEn',
483
+ 'gslsfexpintE1scaled',
484
+ 'gslsfexpintE2scaled',
485
+ 'gslsfexpintEnscaled',
486
+ 'gslsfexpintEi',
487
+ 'gslsfexpintEiscaled',
488
+ 'gslsfShi',
489
+ 'gslsfChi',
490
+ 'gslsfexpint3',
491
+ 'gslsfSi',
492
+ 'gslsfCi',
493
+ 'gslsfatanint',
494
+ 'gslsffermidiracm1',
495
+ 'gslsffermidirac0',
496
+ 'gslsffermidirac1',
497
+ 'gslsffermidirac2',
498
+ 'gslsffermidiracint',
499
+ 'gslsffermidiracmhalf',
500
+ 'gslsffermidirachalf',
501
+ 'gslsffermidirac3half',
502
+ 'gslsffermidiracinc0',
503
+ 'gslsflngamma',
504
+ 'gslsfgamma',
505
+ 'gslsfgammastar',
506
+ 'gslsfgammainv',
507
+ 'gslsftaylorcoeff',
508
+ 'gslsffact',
509
+ 'gslsfdoublefact',
510
+ 'gslsflnfact',
511
+ 'gslsflndoublefact',
512
+ 'gslsflnchoose',
513
+ 'gslsfchoose',
514
+ 'gslsflnpoch',
515
+ 'gslsfpoch',
516
+ 'gslsfpochrel',
517
+ 'gslsfgammaincQ',
518
+ 'gslsfgammaincP',
519
+ 'gslsfgammainc',
520
+ 'gslsflnbeta',
521
+ 'gslsfbeta',
522
+ 'gslsfbetainc',
523
+ 'gslsfgegenpoly1',
524
+ 'gslsfgegenpoly2',
525
+ 'gslsfgegenpoly3',
526
+ 'gslsfgegenpolyn',
527
+ 'gslsfhyperg0F1',
528
+ 'gslsfhyperg1F1int',
529
+ 'gslsfhyperg1F1',
530
+ 'gslsfhypergUint',
531
+ 'gslsfhypergU',
532
+ 'gslsfhyperg2F0',
533
+ 'gslsflaguerre1',
534
+ 'gslsflaguerre2',
535
+ 'gslsflaguerre3',
536
+ 'gslsflaguerren',
537
+ 'gslsflambertW0',
538
+ 'gslsflambertWm1',
539
+ 'gslsflegendrePl',
540
+ 'gslsflegendreP1',
541
+ 'gslsflegendreP2',
542
+ 'gslsflegendreP3',
543
+ 'gslsflegendreQ0',
544
+ 'gslsflegendreQ1',
545
+ 'gslsflegendreQl',
546
+ 'gslsflegendrePlm',
547
+ 'gslsflegendresphPlm',
548
+ 'gslsflegendrearraysize',
549
+ 'gslsfconicalPhalf',
550
+ 'gslsfconicalPmhalf',
551
+ 'gslsfconicalP0',
552
+ 'gslsfconicalP1',
553
+ 'gslsfconicalPsphreg',
554
+ 'gslsfconicalPcylreg',
555
+ 'gslsflegendreH3d0',
556
+ 'gslsflegendreH3d1',
557
+ 'gslsflegendreH3d',
558
+ 'gslsflog',
559
+ 'gslsflogabs',
560
+ 'gslsflog1plusx',
561
+ 'gslsflog1plusxmx',
562
+ 'gslsfpowint',
563
+ 'gslsfpsiint',
564
+ 'gslsfpsi',
565
+ 'gslsfpsi1piy',
566
+ 'gslsfpsi1int',
567
+ 'gslsfpsi1',
568
+ 'gslsfpsin',
569
+ 'gslsfsynchrotron1',
570
+ 'gslsfsynchrotron2',
571
+ 'gslsftransport2',
572
+ 'gslsftransport3',
573
+ 'gslsftransport4',
574
+ 'gslsftransport5',
575
+ 'gslsfsin',
576
+ 'gslsfcos',
577
+ 'gslsfhypot',
578
+ 'gslsfsinc',
579
+ 'gslsflnsinh',
580
+ 'gslsflncosh',
581
+ 'gslsfanglerestrictsymm',
582
+ 'gslsfanglerestrictpos',
583
+ 'gslsfzetaint',
584
+ 'gslsfzeta',
585
+ 'gslsfzetam1',
586
+ 'gslsfzetam1int',
587
+ 'gslsfhzeta',
588
+ 'gslsfetaint',
589
+ 'gslsfeta',
590
+ 'imag',
591
+ 'int1d',
592
+ 'int2d',
593
+ 'int3d',
594
+ 'intalledges',
595
+ 'intallfaces',
596
+ 'interpolate',
597
+ 'invdiff',
598
+ 'invdiffnp',
599
+ 'invdiffpos',
600
+ 'Isend',
601
+ 'isInf',
602
+ 'isNaN',
603
+ 'isoline',
604
+ 'Irecv',
605
+ 'j0',
606
+ 'j1',
607
+ 'jn',
608
+ 'jump',
609
+ 'lgamma',
610
+ 'LinearCG',
611
+ 'LinearGMRES',
612
+ 'log',
613
+ 'log10',
614
+ 'lrint',
615
+ 'lround',
616
+ 'max',
617
+ 'mean',
618
+ 'medit',
619
+ 'min',
620
+ 'mmg3d',
621
+ 'movemesh',
622
+ 'movemesh23',
623
+ 'mpiAlltoall',
624
+ 'mpiAlltoallv',
625
+ 'mpiAllgather',
626
+ 'mpiAllgatherv',
627
+ 'mpiAllReduce',
628
+ 'mpiBarrier',
629
+ 'mpiGather',
630
+ 'mpiGatherv',
631
+ 'mpiRank',
632
+ 'mpiReduce',
633
+ 'mpiScatter',
634
+ 'mpiScatterv',
635
+ 'mpiSize',
636
+ 'mpiWait',
637
+ 'mpiWaitAny',
638
+ 'mpiWtick',
639
+ 'mpiWtime',
640
+ 'mshmet',
641
+ 'NaN',
642
+ 'NLCG',
643
+ 'on',
644
+ 'plot',
645
+ 'polar',
646
+ 'Post',
647
+ 'pow',
648
+ 'processor',
649
+ 'processorblock',
650
+ 'projection',
651
+ 'randinit',
652
+ 'randint31',
653
+ 'randint32',
654
+ 'random',
655
+ 'randreal1',
656
+ 'randreal2',
657
+ 'randreal3',
658
+ 'randres53',
659
+ 'Read',
660
+ 'readmesh',
661
+ 'readmesh3',
662
+ 'Recv',
663
+ 'rint',
664
+ 'round',
665
+ 'savemesh',
666
+ 'savesol',
667
+ 'savevtk',
668
+ 'seekg',
669
+ 'Sent',
670
+ 'set',
671
+ 'sign',
672
+ 'signbit',
673
+ 'sin',
674
+ 'sinh',
675
+ 'sort',
676
+ 'splitComm',
677
+ 'splitmesh',
678
+ 'sqrt',
679
+ 'square',
680
+ 'srandom',
681
+ 'srandomdev',
682
+ 'Stringification',
683
+ 'swap',
684
+ 'system',
685
+ 'tan',
686
+ 'tanh',
687
+ 'tellg',
688
+ 'tetg',
689
+ 'tetgconvexhull',
690
+ 'tetgreconstruction',
691
+ 'tetgtransfo',
692
+ 'tgamma',
693
+ 'triangulate',
694
+ 'trunc',
695
+ 'Wait',
696
+ 'Write',
697
+ 'y0',
698
+ 'y1',
699
+ 'yn'
700
+ }
701
+
702
+ # function parameters
703
+ parameters = {
704
+ 'A',
705
+ 'A1',
706
+ 'abserror',
707
+ 'absolute',
708
+ 'aniso',
709
+ 'aspectratio',
710
+ 'B',
711
+ 'B1',
712
+ 'bb',
713
+ 'beginend',
714
+ 'bin',
715
+ 'boundary',
716
+ 'bw',
717
+ 'close',
718
+ 'cmm',
719
+ 'coef',
720
+ 'composante',
721
+ 'cutoff',
722
+ 'datafilename',
723
+ 'dataname',
724
+ 'dim',
725
+ 'distmax',
726
+ 'displacement',
727
+ 'doptions',
728
+ 'dparams',
729
+ 'eps',
730
+ 'err',
731
+ 'errg',
732
+ 'facemerge',
733
+ 'facetcl',
734
+ 'factorize',
735
+ 'file',
736
+ 'fill',
737
+ 'fixedborder',
738
+ 'flabel',
739
+ 'flags',
740
+ 'floatmesh',
741
+ 'floatsol',
742
+ 'fregion',
743
+ 'gradation',
744
+ 'grey',
745
+ 'hmax',
746
+ 'hmin',
747
+ 'holelist',
748
+ 'hsv',
749
+ 'init',
750
+ 'inquire',
751
+ 'inside',
752
+ 'IsMetric',
753
+ 'iso',
754
+ 'ivalue',
755
+ 'keepbackvertices',
756
+ 'label',
757
+ 'labeldown',
758
+ 'labelmid',
759
+ 'labelup',
760
+ 'levelset',
761
+ 'loptions',
762
+ 'lparams',
763
+ 'maxit',
764
+ 'maxsubdiv',
765
+ 'meditff',
766
+ 'mem',
767
+ 'memory',
768
+ 'metric',
769
+ 'mode',
770
+ 'nbarrow',
771
+ 'nbiso',
772
+ 'nbiter',
773
+ 'nbjacoby',
774
+ 'nboffacetcl',
775
+ 'nbofholes',
776
+ 'nbofregions',
777
+ 'nbregul',
778
+ 'nbsmooth',
779
+ 'nbvx',
780
+ 'ncv',
781
+ 'nev',
782
+ 'nomeshgeneration',
783
+ 'normalization',
784
+ 'omega',
785
+ 'op',
786
+ 'optimize',
787
+ 'option',
788
+ 'options',
789
+ 'order',
790
+ 'orientation',
791
+ 'periodic',
792
+ 'power',
793
+ 'precon',
794
+ 'prev',
795
+ 'ps',
796
+ 'ptmerge',
797
+ 'qfe',
798
+ 'qforder',
799
+ 'qft',
800
+ 'qfV',
801
+ 'ratio',
802
+ 'rawvector',
803
+ 'reffacelow',
804
+ 'reffacemid',
805
+ 'reffaceup',
806
+ 'refnum',
807
+ 'reftet',
808
+ 'reftri',
809
+ 'region',
810
+ 'regionlist',
811
+ 'renumv',
812
+ 'rescaling',
813
+ 'ridgeangle',
814
+ 'save',
815
+ 'sigma',
816
+ 'sizeofvolume',
817
+ 'smoothing',
818
+ 'solver',
819
+ 'sparams',
820
+ 'split',
821
+ 'splitin2',
822
+ 'splitpbedge',
823
+ 'stop',
824
+ 'strategy',
825
+ 'swap',
826
+ 'switch',
827
+ 'sym',
828
+ 't',
829
+ 'tgv',
830
+ 'thetamax',
831
+ 'tol',
832
+ 'tolpivot',
833
+ 'tolpivotsym',
834
+ 'transfo',
835
+ 'U2Vc',
836
+ 'value',
837
+ 'varrow',
838
+ 'vector',
839
+ 'veps',
840
+ 'viso',
841
+ 'wait',
842
+ 'width',
843
+ 'withsurfacemesh',
844
+ 'WindowIndex',
845
+ 'which',
846
+ 'zbound'
847
+ }
848
+
849
+ # deprecated
850
+ deprecated = {'fixeborder'}
851
+
852
+ # do not highlight
853
+ suppress_highlight = {
854
+ 'alignof',
855
+ 'asm',
856
+ 'constexpr',
857
+ 'decltype',
858
+ 'div',
859
+ 'double',
860
+ 'grad',
861
+ 'mutable',
862
+ 'namespace',
863
+ 'noexcept',
864
+ 'restrict',
865
+ 'static_assert',
866
+ 'template',
867
+ 'this',
868
+ 'thread_local',
869
+ 'typeid',
870
+ 'typename',
871
+ 'using'
872
+ }
873
+
874
+ def get_tokens_unprocessed(self, text, stack=('root',)):
875
+ for index, token, value in CppLexer.get_tokens_unprocessed(self, text, stack):
876
+ if value in self.operators:
877
+ yield index, Operator, value
878
+ elif value in self.types:
879
+ yield index, Keyword.Type, value
880
+ elif value in self.fespaces:
881
+ yield index, Name.Class, value
882
+ elif value in self.preprocessor:
883
+ yield index, Comment.Preproc, value
884
+ elif value in self.keywords:
885
+ yield index, Keyword.Reserved, value
886
+ elif value in self.functions:
887
+ yield index, Name.Function, value
888
+ elif value in self.parameters:
889
+ yield index, Keyword.Pseudo, value
890
+ elif value in self.suppress_highlight:
891
+ yield index, Name, value
892
+ else:
893
+ yield index, token, value
venv/Lib/site-packages/pygments/lexers/func.py ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.func
3
+ ~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexers for FunC.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, include, words
12
+ from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
13
+ Number, Whitespace, Punctuation
14
+
15
+ __all__ = ['FuncLexer']
16
+
17
+
18
+ class FuncLexer(RegexLexer):
19
+ """
20
+ For FunC source code.
21
+ """
22
+
23
+ name = 'FunC'
24
+ aliases = ['func', 'fc']
25
+ filenames = ['*.fc', '*.func']
26
+ url = 'https://docs.ton.org/develop/func/overview'
27
+ version_added = ''
28
+
29
+ # 1. Does not start from "
30
+ # 2. Can start from ` and end with `, containing any character
31
+ # 3. Starts with underscore or { or } and have more than 1 character after it
32
+ # 4. Starts with letter, contains letters, numbers and underscores
33
+ identifier = r'(?!")(`([^`]+)`|((?=_)_|(?=\{)\{|(?=\})\}|(?![_`{}]))([^;,\[\]\(\)\s~.]+))'
34
+
35
+ tokens = {
36
+ 'root': [
37
+ (r'\n', Whitespace),
38
+ (r'\s+', Whitespace),
39
+
40
+ include('keywords'),
41
+ include('strings'),
42
+ include('directives'),
43
+ include('numeric'),
44
+ include('comments'),
45
+ include('storage'),
46
+ include('functions'),
47
+ include('variables'),
48
+
49
+ (r'[.;(),\[\]~{}]', Punctuation)
50
+ ],
51
+ 'keywords': [
52
+ (words((
53
+ '<=>', '>=', '<=', '!=', '==', '^>>', '~>>',
54
+ '>>', '<<', '/%', '^%', '~%', '^/', '~/', '+=',
55
+ '-=', '*=', '/=', '~/=', '^/=', '%=', '^%=', '<<=',
56
+ '>>=', '~>>=', '^>>=', '&=', '|=', '^=', '^', '=',
57
+ '~', '/', '%', '-', '*', '+','>',
58
+ '<', '&', '|', ':', '?'), prefix=r'(?<=\s)', suffix=r'(?=\s)'),
59
+ Operator),
60
+ (words((
61
+ 'if', 'ifnot',
62
+ 'else', 'elseif', 'elseifnot',
63
+ 'while', 'do', 'until', 'repeat',
64
+ 'return', 'impure', 'method_id',
65
+ 'forall', 'asm', 'inline', 'inline_ref'), prefix=r'\b', suffix=r'\b'),
66
+ Keyword),
67
+ (words(('true', 'false'), prefix=r'\b', suffix=r'\b'), Keyword.Constant),
68
+ ],
69
+ 'directives': [
70
+ (r'#include|#pragma', Keyword, 'directive'),
71
+ ],
72
+ 'directive': [
73
+ include('strings'),
74
+ (r'\s+', Whitespace),
75
+ (r'version|not-version', Keyword),
76
+ (r'(>=|<=|=|>|<|\^)?([0-9]+)(.[0-9]+)?(.[0-9]+)?', Number), # version
77
+ (r';', Text, '#pop')
78
+ ],
79
+ 'strings': [
80
+ (r'\"([^\n\"]+)\"[Hhcusa]?', String),
81
+ ],
82
+ 'numeric': [
83
+ (r'\b(-?(?!_)([\d_]+|0x[\d_a-fA-F]+)|0b[1_0]+)(?<!_)(?=[\s\)\],;])', Number)
84
+ ],
85
+ 'comments': [
86
+ (r';;([^\n]*)', Comment.Singleline),
87
+ (r'\{-', Comment.Multiline, 'comment'),
88
+ ],
89
+ 'comment': [
90
+ (r'[^-}{]+', Comment.Multiline),
91
+ (r'\{-', Comment.Multiline, '#push'),
92
+ (r'-\}', Comment.Multiline, '#pop'),
93
+ (r'[-}{]', Comment.Multiline),
94
+ ],
95
+ 'storage': [
96
+ (words((
97
+ 'var', 'int', 'slice', 'tuple',
98
+ 'cell', 'builder', 'cont', '_'),
99
+ prefix=r'\b', suffix=r'(?=[\s\(\),\[\]])'),
100
+ Keyword.Type),
101
+ (words(('global', 'const'), prefix=r'\b', suffix=r'\b'), Keyword.Constant),
102
+ ],
103
+ 'variables': [
104
+ (identifier, Name.Variable),
105
+ ],
106
+ 'functions': [
107
+ # identifier followed by (
108
+ (identifier + r'(?=[\(])', Name.Function),
109
+ ]
110
+ }
venv/Lib/site-packages/pygments/lexers/functional.py ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.functional
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Just export lexer classes previously contained in this module.
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ # ruff: noqa: F401
12
+ from pygments.lexers.lisp import SchemeLexer, CommonLispLexer, RacketLexer, \
13
+ NewLispLexer, ShenLexer
14
+ from pygments.lexers.haskell import HaskellLexer, LiterateHaskellLexer, \
15
+ KokaLexer
16
+ from pygments.lexers.theorem import RocqLexer
17
+ from pygments.lexers.erlang import ErlangLexer, ErlangShellLexer, \
18
+ ElixirConsoleLexer, ElixirLexer
19
+ from pygments.lexers.ml import SMLLexer, OcamlLexer, OpaLexer
20
+
21
+ __all__ = []
venv/Lib/site-packages/pygments/lexers/futhark.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ pygments.lexers.futhark
3
+ ~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Lexer for the Futhark language
6
+
7
+ :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8
+ :license: BSD, see LICENSE for details.
9
+ """
10
+
11
+ from pygments.lexer import RegexLexer, bygroups
12
+ from pygments.token import Comment, Operator, Keyword, Name, String, \
13
+ Number, Punctuation, Whitespace
14
+ from pygments import unistring as uni
15
+
16
+ __all__ = ['FutharkLexer']
17
+
18
+
19
+ class FutharkLexer(RegexLexer):
20
+ """
21
+ A Futhark lexer
22
+ """
23
+ name = 'Futhark'
24
+ url = 'https://futhark-lang.org/'
25
+ aliases = ['futhark']
26
+ filenames = ['*.fut']
27
+ mimetypes = ['text/x-futhark']
28
+ version_added = '2.8'
29
+
30
+ num_types = ('i8', 'i16', 'i32', 'i64', 'u8', 'u16', 'u32', 'u64', 'f32', 'f64')
31
+
32
+ other_types = ('bool', )
33
+
34
+ reserved = ('if', 'then', 'else', 'def', 'let', 'loop', 'in', 'with',
35
+ 'type', 'type~', 'type^',
36
+ 'val', 'entry', 'for', 'while', 'do', 'case', 'match',
37
+ 'include', 'import', 'module', 'open', 'local', 'assert', '_')
38
+
39
+ ascii = ('NUL', 'SOH', '[SE]TX', 'EOT', 'ENQ', 'ACK',
40
+ 'BEL', 'BS', 'HT', 'LF', 'VT', 'FF', 'CR', 'S[OI]', 'DLE',
41
+ 'DC[1-4]', 'NAK', 'SYN', 'ETB', 'CAN',
42
+ 'EM', 'SUB', 'ESC', '[FGRU]S', 'SP', 'DEL')
43
+
44
+ num_postfix = r'({})?'.format('|'.join(num_types))
45
+
46
+ identifier_re = '[a-zA-Z_][a-zA-Z_0-9\']*'
47
+
48
+ # opstart_re = '+\-\*/%=\!><\|&\^'
49
+
50
+ tokens = {
51
+ 'root': [
52
+ (r'--(.*?)$', Comment.Single),
53
+ (r'\s+', Whitespace),
54
+ (r'\(\)', Punctuation),
55
+ (r'\b({})(?!\')\b'.format('|'.join(reserved)), Keyword.Reserved),
56
+ (r'\b({})(?!\')\b'.format('|'.join(num_types + other_types)), Keyword.Type),
57
+
58
+ # Identifiers
59
+ (r'#\[([a-zA-Z_\(\) ]*)\]', Comment.Preproc),
60
+ (rf'[#!]?({identifier_re}\.)*{identifier_re}', Name),
61
+
62
+ (r'\\', Operator),
63
+ (r'[-+/%=!><|&*^][-+/%=!><|&*^.]*', Operator),
64
+ (r'[][(),:;`{}?.\'~^]', Punctuation),
65
+
66
+ # Numbers
67
+ (r'0[xX]_*[\da-fA-F](_*[\da-fA-F])*_*[pP][+-]?\d(_*\d)*' + num_postfix,
68
+ Number.Float),
69
+ (r'0[xX]_*[\da-fA-F](_*[\da-fA-F])*\.[\da-fA-F](_*[\da-fA-F])*'
70
+ r'(_*[pP][+-]?\d(_*\d)*)?' + num_postfix, Number.Float),
71
+ (r'\d(_*\d)*_*[eE][+-]?\d(_*\d)*' + num_postfix, Number.Float),
72
+ (r'\d(_*\d)*\.\d(_*\d)*(_*[eE][+-]?\d(_*\d)*)?' + num_postfix, Number.Float),
73
+ (r'0[bB]_*[01](_*[01])*' + num_postfix, Number.Bin),
74
+ (r'0[xX]_*[\da-fA-F](_*[\da-fA-F])*' + num_postfix, Number.Hex),
75
+ (r'\d(_*\d)*' + num_postfix, Number.Integer),
76
+
77
+ # Character/String Literals
78
+ (r"'", String.Char, 'character'),
79
+ (r'"', String, 'string'),
80
+ # Special
81
+ (r'\[[a-zA-Z_\d]*\]', Keyword.Type),
82
+ ],
83
+ 'character': [
84
+ # Allows multi-chars, incorrectly.
85
+ (r"[^\\']'", String.Char, '#pop'),
86
+ (r"\\", String.Escape, 'escape'),
87
+ ("'", String.Char, '#pop'),
88
+ ],
89
+ 'string': [
90
+ (r'[^\\"]+', String),
91
+ (r"\\", String.Escape, 'escape'),
92
+ ('"', String, '#pop'),
93
+ ],
94
+
95
+ 'escape': [
96
+ (r'[abfnrtv"\'&\\]', String.Escape, '#pop'),
97
+ (r'\^[][' + uni.Lu + r'@^_]', String.Escape, '#pop'),
98
+ ('|'.join(ascii), String.Escape, '#pop'),
99
+ (r'o[0-7]+', String.Escape, '#pop'),
100
+ (r'x[\da-fA-F]+', String.Escape, '#pop'),
101
+ (r'\d+', String.Escape, '#pop'),
102
+ (r'(\s+)(\\)', bygroups(Whitespace, String.Escape), '#pop'),
103
+ ],
104
+ }