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