diff options
Diffstat (limited to 'venv/lib/python3.9/site-packages/pygments/lexers/bare.py')
-rw-r--r-- | venv/lib/python3.9/site-packages/pygments/lexers/bare.py | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/venv/lib/python3.9/site-packages/pygments/lexers/bare.py b/venv/lib/python3.9/site-packages/pygments/lexers/bare.py new file mode 100644 index 00000000..fce5ae07 --- /dev/null +++ b/venv/lib/python3.9/site-packages/pygments/lexers/bare.py @@ -0,0 +1,102 @@ +""" + pygments.lexers.bare + ~~~~~~~~~~~~~~~~~~~~ + + Lexer for the BARE schema. + + :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from pygments.lexer import RegexLexer, words, bygroups +from pygments.token import Text, Comment, Keyword, Name, Literal, Whitespace + +__all__ = ['BareLexer'] + + +class BareLexer(RegexLexer): + """ + For BARE schema source. + + .. versionadded:: 2.7 + """ + name = 'BARE' + url = 'https://baremessages.org' + filenames = ['*.bare'] + aliases = ['bare'] + + keywords = [ + 'type', + 'enum', + 'u8', + 'u16', + 'u32', + 'u64', + 'uint', + 'i8', + 'i16', + 'i32', + 'i64', + 'int', + 'f32', + 'f64', + 'bool', + 'void', + 'data', + 'string', + 'optional', + 'map', + ] + + tokens = { + 'root': [ + (r'(type)(\s+)([A-Z][a-zA-Z0-9]+)(\s+)(\{)', + bygroups(Keyword, Whitespace, Name.Class, Whitespace, Text), 'struct'), + (r'(type)(\s+)([A-Z][a-zA-Z0-9]+)(\s+)(\()', + bygroups(Keyword, Whitespace, Name.Class, Whitespace, Text), 'union'), + (r'(type)(\s+)([A-Z][a-zA-Z0-9]+)(\s+)', + bygroups(Keyword, Whitespace, Name, Whitespace), 'typedef'), + (r'(enum)(\s+)([A-Z][a-zA-Z0-9]+)(\s+\{)', + bygroups(Keyword, Whitespace, Name.Class, Whitespace), 'enum'), + (r'#.*?$', Comment), + (r'\s+', Whitespace), + ], + 'struct': [ + (r'\{', Text, '#push'), + (r'\}', Text, '#pop'), + (r'([a-zA-Z0-9]+)(:)(\s*)', + bygroups(Name.Attribute, Text, Whitespace), 'typedef'), + (r'\s+', Whitespace), + ], + 'union': [ + (r'\)', Text, '#pop'), + (r'(\s*)(\|)(\s*)', bygroups(Whitespace, Text, Whitespace)), + (r'[A-Z][a-zA-Z0-9]+', Name.Class), + (words(keywords), Keyword), + (r'\s+', Whitespace), + ], + 'typedef': [ + (r'\[\]', Text), + (r'#.*?$', Comment, '#pop'), + (r'(\[)(\d+)(\])', bygroups(Text, Literal, Text)), + (r'<|>', Text), + (r'\(', Text, 'union'), + (r'(\[)([a-z][a-z-A-Z0-9]+)(\])', bygroups(Text, Keyword, Text)), + (r'(\[)([A-Z][a-z-A-Z0-9]+)(\])', bygroups(Text, Name.Class, Text)), + (r'([A-Z][a-z-A-Z0-9]+)', Name.Class), + (words(keywords), Keyword), + (r'\n', Text, '#pop'), + (r'\{', Text, 'struct'), + (r'\s+', Whitespace), + (r'\d+', Literal), + ], + 'enum': [ + (r'\{', Text, '#push'), + (r'\}', Text, '#pop'), + (r'([A-Z][A-Z0-9_]*)(\s*=\s*)(\d+)', + bygroups(Name.Attribute, Text, Literal)), + (r'([A-Z][A-Z0-9_]*)', bygroups(Name.Attribute)), + (r'#.*?$', Comment), + (r'\s+', Whitespace), + ], + } |