123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- """
- pygments.lexers.bare
- ~~~~~~~~~~~~~~~~~~~~
- Lexer for the BARE schema.
- :copyright: Copyright 2006-2024 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.
- """
- name = 'BARE'
- url = 'https://baremessages.org'
- filenames = ['*.bare']
- aliases = ['bare']
- version_added = '2.7'
- 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),
- ],
- }
|