summaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/lexers/arrow.py
diff options
context:
space:
mode:
authorDevtools Arcadia <[email protected]>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <[email protected]>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/python/Pygments/py3/pygments/lexers/arrow.py
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/python/Pygments/py3/pygments/lexers/arrow.py')
-rw-r--r--contrib/python/Pygments/py3/pygments/lexers/arrow.py116
1 files changed, 116 insertions, 0 deletions
diff --git a/contrib/python/Pygments/py3/pygments/lexers/arrow.py b/contrib/python/Pygments/py3/pygments/lexers/arrow.py
new file mode 100644
index 00000000000..20c9e9b5fbf
--- /dev/null
+++ b/contrib/python/Pygments/py3/pygments/lexers/arrow.py
@@ -0,0 +1,116 @@
+"""
+ pygments.lexers.arrow
+ ~~~~~~~~~~~~~~~~~~~~~
+
+ Lexer for Arrow.
+
+ :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import RegexLexer, bygroups, default, include
+from pygments.token import Text, Operator, Keyword, Punctuation, Name, \
+ String, Number, Whitespace
+
+__all__ = ['ArrowLexer']
+
+TYPES = r'\b(int|bool|char)((?:\[\])*)(?=\s+)'
+IDENT = r'([a-zA-Z_][a-zA-Z0-9_]*)'
+DECL = TYPES + r'(\s+)' + IDENT
+
+
+class ArrowLexer(RegexLexer):
+ """
+ Lexer for Arrow: https://pypi.org/project/py-arrow-lang/
+
+ .. versionadded:: 2.7
+ """
+
+ name = 'Arrow'
+ aliases = ['arrow']
+ filenames = ['*.arw']
+
+ tokens = {
+ 'root': [
+ (r'\s+', Whitespace),
+ (r'^[|\s]+', Punctuation),
+ include('blocks'),
+ include('statements'),
+ include('expressions'),
+ ],
+ 'blocks': [
+ (r'(function)(\n+)(/-->)(\s*)' +
+ DECL + # 4 groups
+ r'(\()', bygroups(
+ Keyword.Reserved, Whitespace, Punctuation,
+ Whitespace, Keyword.Type, Punctuation, Whitespace,
+ Name.Function, Punctuation
+ ), 'fparams'),
+ (r'/-->$|\\-->$|/--<|\\--<|\^', Punctuation),
+ ],
+ 'statements': [
+ (DECL, bygroups(Keyword.Type, Punctuation, Text, Name.Variable)),
+ (r'\[', Punctuation, 'index'),
+ (r'=', Operator),
+ (r'require|main', Keyword.Reserved),
+ (r'print', Keyword.Reserved, 'print'),
+ ],
+ 'expressions': [
+ (r'\s+', Whitespace),
+ (r'[0-9]+', Number.Integer),
+ (r'true|false', Keyword.Constant),
+ (r"'", String.Char, 'char'),
+ (r'"', String.Double, 'string'),
+ (r'\{', Punctuation, 'array'),
+ (r'==|!=|<|>|\+|-|\*|/|%', Operator),
+ (r'and|or|not|length', Operator.Word),
+ (r'(input)(\s+)(int|char\[\])', bygroups(
+ Keyword.Reserved, Whitespace, Keyword.Type
+ )),
+ (IDENT + r'(\()', bygroups(
+ Name.Function, Punctuation
+ ), 'fargs'),
+ (IDENT, Name.Variable),
+ (r'\[', Punctuation, 'index'),
+ (r'\(', Punctuation, 'expressions'),
+ (r'\)', Punctuation, '#pop'),
+ ],
+ 'print': [
+ include('expressions'),
+ (r',', Punctuation),
+ default('#pop'),
+ ],
+ 'fparams': [
+ (DECL, bygroups(Keyword.Type, Punctuation, Whitespace, Name.Variable)),
+ (r',', Punctuation),
+ (r'\)', Punctuation, '#pop'),
+ ],
+ 'escape': [
+ (r'\\(["\\/abfnrtv]|[0-9]{1,3}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})',
+ String.Escape),
+ ],
+ 'char': [
+ (r"'", String.Char, '#pop'),
+ include('escape'),
+ (r"[^'\\]", String.Char),
+ ],
+ 'string': [
+ (r'"', String.Double, '#pop'),
+ include('escape'),
+ (r'[^"\\]+', String.Double),
+ ],
+ 'array': [
+ include('expressions'),
+ (r'\}', Punctuation, '#pop'),
+ (r',', Punctuation),
+ ],
+ 'fargs': [
+ include('expressions'),
+ (r'\)', Punctuation, '#pop'),
+ (r',', Punctuation),
+ ],
+ 'index': [
+ include('expressions'),
+ (r'\]', Punctuation, '#pop'),
+ ],
+ }