Upload folder using huggingface_hub (part 5)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- venv/Lib/site-packages/pygments/lexers/boa.py +97 -0
- venv/Lib/site-packages/pygments/lexers/bqn.py +112 -0
- venv/Lib/site-packages/pygments/lexers/business.py +625 -0
- venv/Lib/site-packages/pygments/lexers/c_cpp.py +481 -0
- venv/Lib/site-packages/pygments/lexers/c_like.py +743 -0
- venv/Lib/site-packages/pygments/lexers/capnproto.py +74 -0
- venv/Lib/site-packages/pygments/lexers/carbon.py +95 -0
- venv/Lib/site-packages/pygments/lexers/cddl.py +172 -0
- venv/Lib/site-packages/pygments/lexers/cel.py +142 -0
- venv/Lib/site-packages/pygments/lexers/chapel.py +139 -0
- venv/Lib/site-packages/pygments/lexers/clean.py +180 -0
- venv/Lib/site-packages/pygments/lexers/codeql.py +80 -0
- venv/Lib/site-packages/pygments/lexers/comal.py +81 -0
- venv/Lib/site-packages/pygments/lexers/compiled.py +35 -0
- venv/Lib/site-packages/pygments/lexers/configs.py +1499 -0
- venv/Lib/site-packages/pygments/lexers/console.py +125 -0
- venv/Lib/site-packages/pygments/lexers/cplint.py +43 -0
- venv/Lib/site-packages/pygments/lexers/crystal.py +364 -0
- venv/Lib/site-packages/pygments/lexers/csound.py +466 -0
- venv/Lib/site-packages/pygments/lexers/css.py +633 -0
- venv/Lib/site-packages/pygments/lexers/d.py +259 -0
- venv/Lib/site-packages/pygments/lexers/dalvik.py +126 -0
- venv/Lib/site-packages/pygments/lexers/data.py +763 -0
- venv/Lib/site-packages/pygments/lexers/dax.py +135 -0
- venv/Lib/site-packages/pygments/lexers/devicetree.py +120 -0
- venv/Lib/site-packages/pygments/lexers/diff.py +169 -0
- venv/Lib/site-packages/pygments/lexers/dns.py +109 -0
- venv/Lib/site-packages/pygments/lexers/dotnet.py +886 -0
- venv/Lib/site-packages/pygments/lexers/dsls.py +970 -0
- venv/Lib/site-packages/pygments/lexers/dylan.py +279 -0
- venv/Lib/site-packages/pygments/lexers/ecl.py +144 -0
- venv/Lib/site-packages/pygments/lexers/eiffel.py +67 -0
- venv/Lib/site-packages/pygments/lexers/elm.py +123 -0
- venv/Lib/site-packages/pygments/lexers/elpi.py +201 -0
- venv/Lib/site-packages/pygments/lexers/email.py +132 -0
- venv/Lib/site-packages/pygments/lexers/erlang.py +526 -0
- venv/Lib/site-packages/pygments/lexers/esoteric.py +300 -0
- venv/Lib/site-packages/pygments/lexers/ezhil.py +76 -0
- venv/Lib/site-packages/pygments/lexers/factor.py +361 -0
- venv/Lib/site-packages/pygments/lexers/fantom.py +250 -0
- venv/Lib/site-packages/pygments/lexers/felix.py +275 -0
- venv/Lib/site-packages/pygments/lexers/fift.py +68 -0
- venv/Lib/site-packages/pygments/lexers/floscript.py +87 -0
- venv/Lib/site-packages/pygments/lexers/forth.py +178 -0
- venv/Lib/site-packages/pygments/lexers/fortran.py +212 -0
- venv/Lib/site-packages/pygments/lexers/foxpro.py +427 -0
- venv/Lib/site-packages/pygments/lexers/freefem.py +893 -0
- venv/Lib/site-packages/pygments/lexers/func.py +110 -0
- venv/Lib/site-packages/pygments/lexers/functional.py +21 -0
- 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*\*|&&|&&).*?\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 |
+
}
|