eric6/ThirdParty/Pygments/pygments/lexers/arrow.py

changeset 7701
25f42e208e08
child 7983
54c5cfbb1e29
diff -r a3cf077a8db3 -r 25f42e208e08 eric6/ThirdParty/Pygments/pygments/lexers/arrow.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/ThirdParty/Pygments/pygments/lexers/arrow.py	Tue Sep 15 19:09:05 2020 +0200
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+"""
+    pygments.lexers.arrow
+    ~~~~~~~~~~~~~~~~~~~~~
+
+    Lexer for Arrow.
+
+    :copyright: Copyright 2006-2020 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
+
+__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+', Text),
+            (r'^[|\s]+', Punctuation),
+            include('blocks'),
+            include('statements'),
+            include('expressions'),
+        ],
+        'blocks': [
+            (r'(function)(\n+)(/-->)(\s*)' +
+             DECL +  # 4 groups
+             r'(\()', bygroups(
+                 Keyword.Reserved, Text, Punctuation,
+                 Text, Keyword.Type, Punctuation, Text,
+                 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+', Text),
+            (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, Text, 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, Text, 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'),
+        ],
+    }

eric ide

mercurial