aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/lexers/smithy.py
blob: 52cf85cea5bda5f2be3ad8be63e43ed9daa9719d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
""" 
    pygments.lexers.smithy 
    ~~~~~~~~~~~~~~~~~~~~~~ 
 
    Lexers for the Smithy IDL. 
 
    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS. 
    :license: BSD, see LICENSE for details. 
""" 
 
import re 
 
from pygments.lexer import RegexLexer, bygroups, words 
from pygments.token import Text, Comment, Keyword, Name, String, \ 
    Number, Whitespace, Punctuation 
 
__all__ = ['SmithyLexer'] 
 
 
class SmithyLexer(RegexLexer): 
    """ 
    For Smithy IDL 
 
    .. versionadded:: 2.10 
    """ 
    name = 'Smithy' 
    filenames = ['*.smithy'] 
    aliases = ['smithy'] 
 
    flags = re.MULTILINE | re.UNICODE 
    unquoted = r'[A-Za-z0-9_\.#$-]+' 
    identifier = r"[A-Za-z0-9_\.#$-]+" 
 
    simple_shapes = ( 
        'use', 'byte', 'short', 'integer', 'long', 'float', 'document', 
        'double', 'bigInteger', 'bigDecimal', 'boolean', 'blob', 'string', 
        'timestamp', 
    ) 
 
    aggregate_shapes = ( 
       'apply', 'list', 'map', 'set', 'structure', 'union', 'resource', 
       'operation', 'service', 'trait' 
    ) 
 
    tokens = { 
        'root': [ 
            (r'///.*$', Comment.Multiline), 
            (r'//.*$', Comment), 
            (r'@[0-9a-zA-Z\.#-]*', Name.Decorator), 
            (r'(=)', Name.Decorator), 
            (r'^(\$version)(:)(.+)', 
                bygroups(Keyword.Declaration, Name.Decorator, Name.Class)), 
            (r'^(namespace)(\s+' + identifier + r')\b', 
                bygroups(Keyword.Declaration, Name.Class)), 
            (words(simple_shapes, 
                   prefix=r'^', suffix=r'(\s+' + identifier + r')\b'), 
                bygroups(Keyword.Declaration, Name.Class)), 
            (words(aggregate_shapes, 
                   prefix=r'^', suffix=r'(\s+' + identifier + r')'), 
                bygroups(Keyword.Declaration, Name.Class)), 
            (r'^(metadata)(\s+.+)(\s*)(=)', 
                bygroups(Keyword.Declaration, Name.Class, Whitespace, Name.Decorator)), 
            (r"(true|false|null)", Keyword.Constant), 
            (r"(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)", Number), 
            (identifier + ":", Name.Label), 
            (identifier, Name.Variable.Class), 
            (r'\[', Text, "#push"), 
            (r'\]', Text, "#pop"), 
            (r'\(', Text, "#push"), 
            (r'\)', Text, "#pop"), 
            (r'\{', Text, "#push"), 
            (r'\}', Text, "#pop"), 
            (r'"{3}(\\\\|\n|\\")*"{3}', String.Doc), 
            (r'"(\\\\|\n|\\"|[^"])*"', String.Double), 
            (r"'(\\\\|\n|\\'|[^'])*'", String.Single), 
            (r'[:,]+', Punctuation), 
            (r'\s+', Whitespace), 
        ] 
    }