codekingpro/portable-devtools
114k
1"""2 pygments.lexers.bare3 ~~~~~~~~~~~~~~~~~~~~4 5 Lexer for the BARE schema.6 7 :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.8 :license: BSD, see LICENSE for details.9"""10 11from pygments.lexer import RegexLexer, words, bygroups12from pygments.token import Text, Comment, Keyword, Name, Literal, Whitespace13 14__all__ = ['BareLexer']15 16 17class BareLexer(RegexLexer):18 """19 For BARE schema source.20 """21 name = 'BARE'22 url = 'https://baremessages.org'23 filenames = ['*.bare']24 aliases = ['bare']25 version_added = '2.7'26 27 keywords = [28 'type',29 'enum',30 'u8',31 'u16',32 'u32',33 'u64',34 'uint',35 'i8',36 'i16',37 'i32',38 'i64',39 'int',40 'f32',41 'f64',42 'bool',43 'void',44 'data',45 'string',46 'optional',47 'map',48 ]49 50 tokens = {51 'root': [52 (r'(type)(\s+)([A-Z][a-zA-Z0-9]+)(\s+)(\{)',53 bygroups(Keyword, Whitespace, Name.Class, Whitespace, Text), 'struct'),54 (r'(type)(\s+)([A-Z][a-zA-Z0-9]+)(\s+)(\()',55 bygroups(Keyword, Whitespace, Name.Class, Whitespace, Text), 'union'),56 (r'(type)(\s+)([A-Z][a-zA-Z0-9]+)(\s+)',57 bygroups(Keyword, Whitespace, Name, Whitespace), 'typedef'),58 (r'(enum)(\s+)([A-Z][a-zA-Z0-9]+)(\s+\{)',59 bygroups(Keyword, Whitespace, Name.Class, Whitespace), 'enum'),60 (r'#.*?$', Comment),61 (r'\s+', Whitespace),62 ],63 'struct': [64 (r'\{', Text, '#push'),65 (r'\}', Text, '#pop'),66 (r'([a-zA-Z0-9]+)(:)(\s*)',67 bygroups(Name.Attribute, Text, Whitespace), 'typedef'),68 (r'\s+', Whitespace),69 ],70 'union': [71 (r'\)', Text, '#pop'),72 (r'(\s*)(\|)(\s*)', bygroups(Whitespace, Text, Whitespace)),73 (r'[A-Z][a-zA-Z0-9]+', Name.Class),74 (words(keywords), Keyword),75 (r'\s+', Whitespace),76 ],77 'typedef': [78 (r'\[\]', Text),79 (r'#.*?$', Comment, '#pop'),80 (r'(\[)(\d+)(\])', bygroups(Text, Literal, Text)),81 (r'<|>', Text),82 (r'\(', Text, 'union'),83 (r'(\[)([a-z][a-z-A-Z0-9]+)(\])', bygroups(Text, Keyword, Text)),84 (r'(\[)([A-Z][a-z-A-Z0-9]+)(\])', bygroups(Text, Name.Class, Text)),85 (r'([A-Z][a-z-A-Z0-9]+)', Name.Class),86 (words(keywords), Keyword),87 (r'\n', Text, '#pop'),88 (r'\{', Text, 'struct'),89 (r'\s+', Whitespace),90 (r'\d+', Literal),91 ],92 'enum': [93 (r'\{', Text, '#push'),94 (r'\}', Text, '#pop'),95 (r'([A-Z][A-Z0-9_]*)(\s*=\s*)(\d+)',96 bygroups(Name.Attribute, Text, Literal)),97 (r'([A-Z][A-Z0-9_]*)', bygroups(Name.Attribute)),98 (r'#.*?$', Comment),99 (r'\s+', Whitespace),100 ],101 }102 