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