123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- """
- 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
- __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'),
- ],
- }
|