507 lines
8.3 KiB
Plaintext
507 lines
8.3 KiB
Plaintext
|
# JOE syntax highlight file for C#
|
||
|
# Based on Java highlighter
|
||
|
|
||
|
=Idle
|
||
|
=Ident
|
||
|
=Preproc
|
||
|
=Precondit +Preproc
|
||
|
=Define +Preproc
|
||
|
=DefinedIdent +Ident
|
||
|
=Comment
|
||
|
=DocComment +Comment
|
||
|
=Constant
|
||
|
=String +Constant
|
||
|
=Character +Constant +String
|
||
|
=Number +Constant
|
||
|
=Boolean +Constant
|
||
|
=Escape
|
||
|
=StringEscape +Escape
|
||
|
=CharacterEscape +Escape
|
||
|
=Type
|
||
|
=Structure +Keyword
|
||
|
=StorageClass +Type +Keyword
|
||
|
=Modifier +StorageClass
|
||
|
=Keyword
|
||
|
=Operator +Keyword
|
||
|
=Statement +Keyword
|
||
|
=Loop +Statement
|
||
|
=Conditional +Statement
|
||
|
=Label +DefinedIdent
|
||
|
=Bad
|
||
|
=Brace
|
||
|
=Control
|
||
|
|
||
|
:begin Idle
|
||
|
* begin noeat call=.csharp()
|
||
|
|
||
|
.subr csharp
|
||
|
|
||
|
:reset Idle
|
||
|
* first noeat
|
||
|
" \t" reset
|
||
|
|
||
|
:first Idle
|
||
|
* idle noeat
|
||
|
"#" pre mark
|
||
|
|
||
|
:pre Preproc
|
||
|
* pre noeat
|
||
|
"a-zA-Z" preident recolor=-1 buffer
|
||
|
" \t" pre
|
||
|
"\n" reset
|
||
|
|
||
|
:preident Preproc
|
||
|
* preunknown markend recolormark strings
|
||
|
"if" precondit markend recolormark
|
||
|
"else" precondit markend recolormark
|
||
|
"elif" precondit markend recolormark
|
||
|
"endif" precondit markend recolormark
|
||
|
"region" preregion markend recolormark
|
||
|
"endregion" preregion markend recolormark
|
||
|
"define" predefine markend recolormark
|
||
|
"undef" predefine markend recolormark
|
||
|
"warning" preregion markend recolormark
|
||
|
"error" preregion markend recolormark
|
||
|
"line" prebody markend recolormark
|
||
|
done
|
||
|
"a-z" preident
|
||
|
|
||
|
:prebody Preproc
|
||
|
* prebody
|
||
|
"\n" reset
|
||
|
|
||
|
:precondit Precondit
|
||
|
* precondit
|
||
|
"\n" reset
|
||
|
|
||
|
:preregion Preproc
|
||
|
* preregion_text
|
||
|
"\n" reset
|
||
|
|
||
|
:preregion_text Comment
|
||
|
* preregion_text
|
||
|
"\n" reset
|
||
|
|
||
|
:predefine Define
|
||
|
* predefine_text noeat
|
||
|
" \t" predefine
|
||
|
"\n" reset
|
||
|
|
||
|
:predefine_text DefinedIdent
|
||
|
* predefine_text
|
||
|
" \t" predefine_value
|
||
|
"\n" reset
|
||
|
|
||
|
:predefine_value Idle
|
||
|
* predefine_value
|
||
|
"\n" reset
|
||
|
|
||
|
:preunknown Preproc
|
||
|
* preunknown
|
||
|
"\n" reset
|
||
|
|
||
|
:idle Idle
|
||
|
* idle
|
||
|
"\n" reset
|
||
|
"/" slash
|
||
|
"0" first_digit recolor=-1
|
||
|
"1-9" decimal recolor=-1
|
||
|
"." maybe_float
|
||
|
"\"" string recolor=-1
|
||
|
"@" forcedliteral recolor=-1
|
||
|
"'" char recolor=-1
|
||
|
"\i" ident buffer
|
||
|
"{}" brace recolor=-1
|
||
|
",:;=()><[]*&|!~+\-%^" control recolor=-1
|
||
|
|
||
|
:maybe_done Control
|
||
|
* idle noeat
|
||
|
"/" idle noeat return recolor=-2
|
||
|
|
||
|
:brace Brace
|
||
|
* idle noeat
|
||
|
|
||
|
:control Control
|
||
|
* idle noeat
|
||
|
|
||
|
:forcedliteral Ident
|
||
|
* idle noeat
|
||
|
"\i" ident recolor=-2
|
||
|
"\"" forcedstring recolor=-2
|
||
|
|
||
|
:forcedstring String string
|
||
|
* forcedstring
|
||
|
"\"" forcedstringquot
|
||
|
|
||
|
:forcedstringquot String string
|
||
|
* idle noeat
|
||
|
"\"" forcedstring # @"This -> "" <- is a literal quote"
|
||
|
|
||
|
:slash Idle
|
||
|
* idle noeat
|
||
|
"*" comment recolor=-2
|
||
|
"/" maybe_line_comment recolor=-2
|
||
|
|
||
|
:comment Comment
|
||
|
* comment
|
||
|
"BFHNTX" comment noeat call=comment_todo.comment_todo()
|
||
|
"*" maybe_end_comment
|
||
|
|
||
|
:maybe_end_comment Comment
|
||
|
* comment
|
||
|
"/" idle
|
||
|
"*" maybe_end_comment
|
||
|
|
||
|
:maybe_line_comment Comment
|
||
|
* line_comment noeat recolor=-1
|
||
|
"/" doc_comment recolor=-3
|
||
|
|
||
|
:line_comment Comment
|
||
|
* line_comment
|
||
|
"BFHNTX" line_comment noeat call=comment_todo.comment_todo()
|
||
|
"\n" reset
|
||
|
|
||
|
:doc_comment DocComment
|
||
|
* doc_comment
|
||
|
"BFHNTX" doc_comment noeat call=comment_todo.comment_todo()
|
||
|
"\n" reset
|
||
|
|
||
|
:first_digit Number
|
||
|
* idle noeat
|
||
|
"xX" hex
|
||
|
"." float
|
||
|
"eE" epart
|
||
|
"0-7" octal
|
||
|
"89" bad_number recolor=-1
|
||
|
|
||
|
:bad_number Bad
|
||
|
* idle noeat
|
||
|
"0-9" bad_number
|
||
|
|
||
|
:octal Number
|
||
|
* idle noeat
|
||
|
"0-7" octal
|
||
|
"89" bad_number recolor=-1
|
||
|
|
||
|
:hex Number
|
||
|
* idle noeat
|
||
|
"0-9A-Fa-f" hex
|
||
|
|
||
|
:decimal Number
|
||
|
* idle noeat
|
||
|
"0-9" decimal
|
||
|
"eE" epart
|
||
|
"." float
|
||
|
|
||
|
:maybe_float Number
|
||
|
* idle recolor=-2 noeat
|
||
|
"0-9" float recolor=-2
|
||
|
|
||
|
:float Number
|
||
|
* idle noeat
|
||
|
"eE" epart
|
||
|
"0-9" float
|
||
|
|
||
|
:epart Number
|
||
|
* idle noeat
|
||
|
"0-9+\-" enum
|
||
|
|
||
|
:enum Number
|
||
|
* idle noeat
|
||
|
"0-9" enum
|
||
|
|
||
|
:string String string
|
||
|
* string
|
||
|
"\"" idle
|
||
|
"\\" string_escape recolor=-1
|
||
|
"{" maybe_string_control recolor=-1
|
||
|
"}" maybe_control_end recolor=-1
|
||
|
|
||
|
:string_escape StringEscape string
|
||
|
* string
|
||
|
"xu" string_hex_4 # Yes, \x has up to 4 numbers in C#
|
||
|
"U" string_hex_8
|
||
|
"0-7" string_octal2
|
||
|
"\n" string recolor=-2
|
||
|
|
||
|
# Eight all-purpose (hex/unicode short/unicode long) states for hexadecimal
|
||
|
# escape sequences
|
||
|
|
||
|
:string_hex_8 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex_7
|
||
|
|
||
|
:string_hex_7 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex_6
|
||
|
|
||
|
:string_hex_6 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex_5
|
||
|
|
||
|
:string_hex_5 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex_4
|
||
|
|
||
|
:string_hex_4 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex_3
|
||
|
|
||
|
:string_hex_3 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex_2
|
||
|
|
||
|
:string_hex_2 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex_1
|
||
|
|
||
|
:string_hex_1 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string
|
||
|
|
||
|
:string_octal2 StringEscape string
|
||
|
* string noeat
|
||
|
"0-7" string_octal3
|
||
|
|
||
|
:string_octal3 StringEscape string
|
||
|
* string noeat
|
||
|
"0-7" string
|
||
|
|
||
|
:maybe_string_control StringEscape string
|
||
|
* string noeat recolor=-2
|
||
|
"0-9" string_control
|
||
|
"{" string
|
||
|
|
||
|
:string_control StringEscape string
|
||
|
* string_control
|
||
|
"\"" string noeat
|
||
|
"}" string
|
||
|
|
||
|
:maybe_control_end StringEscape string
|
||
|
* string noeat recolor=-2
|
||
|
"}" string
|
||
|
|
||
|
:char Character string
|
||
|
* char
|
||
|
"\n" reset
|
||
|
"'" idle
|
||
|
"\\" char_escape recolor=-1
|
||
|
|
||
|
:char_escape CharacterEscape string
|
||
|
* char
|
||
|
"xu" char_hex4
|
||
|
"U" char_hex8
|
||
|
"0-7" char_octal2
|
||
|
"\n" char recolor=-2
|
||
|
|
||
|
:char_hex8 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex7
|
||
|
|
||
|
:char_hex7 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex6
|
||
|
|
||
|
:char_hex6 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex5
|
||
|
|
||
|
:char_hex5 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex4
|
||
|
|
||
|
:char_hex4 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex3
|
||
|
|
||
|
:char_hex3 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex2
|
||
|
|
||
|
:char_hex2 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex1
|
||
|
|
||
|
:char_hex1 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char
|
||
|
|
||
|
:char_octal2 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-7" char_octal3
|
||
|
|
||
|
:char_octal3 CharacterEscape string
|
||
|
* char noeat
|
||
|
"0-7" char
|
||
|
|
||
|
:ident Ident # http://msdn.microsoft.com/en-us/library/x53a06bb.aspx
|
||
|
* idle noeat strings
|
||
|
"abstract" modifier
|
||
|
"as" operator
|
||
|
"base" kw
|
||
|
"break" loop
|
||
|
"case" label
|
||
|
"catch" stmt
|
||
|
"checked" operator
|
||
|
"class" struct
|
||
|
"const" storage
|
||
|
"continue" loop
|
||
|
"default" label
|
||
|
"delegate" kw
|
||
|
"do" loop
|
||
|
"else" cond
|
||
|
"enum" struct
|
||
|
"event" kw
|
||
|
"explicit" kw
|
||
|
"extern" modifier
|
||
|
"finally" stmt
|
||
|
"fixed" kw
|
||
|
"for" loop
|
||
|
"foreach" loop
|
||
|
"goto" loop
|
||
|
"if" cond
|
||
|
"implicit" kw
|
||
|
"in" operator
|
||
|
"interface" struct
|
||
|
"internal" modifier
|
||
|
"is" operator
|
||
|
"lock" stmt
|
||
|
"nameof" kw
|
||
|
"namespace" struct
|
||
|
"new" operator
|
||
|
"operator" kw
|
||
|
"out" storage
|
||
|
"override" storage
|
||
|
"params" kw
|
||
|
"private" modifier
|
||
|
"protected" modifier
|
||
|
"public" modifier
|
||
|
"readonly" modifier
|
||
|
"ref" storage
|
||
|
"return" stmt
|
||
|
"sealed" modifier
|
||
|
"sizeof" operator
|
||
|
"stackalloc" storage
|
||
|
"static" modifier
|
||
|
"struct" struct
|
||
|
"switch" cond
|
||
|
"this" kw
|
||
|
"throw" stmt
|
||
|
"try" stmt
|
||
|
"typeof" operator
|
||
|
"unchecked" operator
|
||
|
"unsafe" kw
|
||
|
"using" stmt
|
||
|
"virtual" modifier
|
||
|
"volatile" modifier
|
||
|
"while" loop
|
||
|
|
||
|
# Types
|
||
|
|
||
|
"bool" type
|
||
|
"Boolean" type
|
||
|
"byte" type
|
||
|
"Byte" type
|
||
|
"char" type
|
||
|
"Character" type
|
||
|
"decimal" type
|
||
|
"double" type
|
||
|
"Double" type
|
||
|
"float" type
|
||
|
"Float" type
|
||
|
"int" type
|
||
|
"Integer" type
|
||
|
"int16" type
|
||
|
"Int16" type
|
||
|
"int32" type
|
||
|
"Int32" type
|
||
|
"int64" type
|
||
|
"Int64" type
|
||
|
"IntPtr" type
|
||
|
"long" type
|
||
|
"object" type
|
||
|
"Object" type
|
||
|
"sbyte" type
|
||
|
"short" type
|
||
|
"string" type
|
||
|
"String" type
|
||
|
"uint" type
|
||
|
"uint16" type
|
||
|
"uint32" type
|
||
|
"uint64" type
|
||
|
"ulong" type
|
||
|
"ushort" type
|
||
|
"void" type
|
||
|
|
||
|
|
||
|
# These are "contextual" keywords. Should try to do a better and
|
||
|
# and find the context (most are LINQ), but it may not be possible
|
||
|
# in all cases:
|
||
|
|
||
|
"add" kw
|
||
|
"alias" kw
|
||
|
"ascending" kw
|
||
|
"async" kw
|
||
|
"await" kw
|
||
|
"descending" kw
|
||
|
"dynamic" type
|
||
|
"from" kw
|
||
|
"get" kw
|
||
|
"global" kw
|
||
|
"group" kw
|
||
|
"into" kw
|
||
|
"join" kw
|
||
|
"let" kw
|
||
|
"orderby" kw
|
||
|
"partial" kw
|
||
|
"remove" kw
|
||
|
"select" kw
|
||
|
"set" kw
|
||
|
"value" kw
|
||
|
"var" type
|
||
|
"where" kw
|
||
|
"yield" kw
|
||
|
|
||
|
# Literals
|
||
|
|
||
|
"true" bool
|
||
|
"false" bool
|
||
|
"null" lit
|
||
|
done
|
||
|
"\c" ident
|
||
|
|
||
|
:type Type
|
||
|
* idle noeat
|
||
|
|
||
|
:kw Keyword
|
||
|
* idle noeat
|
||
|
|
||
|
:stmt Statement
|
||
|
* idle noeat
|
||
|
|
||
|
:cond Conditional
|
||
|
* idle noeat
|
||
|
|
||
|
:loop Loop
|
||
|
* idle noeat
|
||
|
|
||
|
:struct Structure
|
||
|
* idle noeat
|
||
|
|
||
|
:storage StorageClass
|
||
|
* idle noeat
|
||
|
|
||
|
:modifier Modifier
|
||
|
* idle noeat
|
||
|
|
||
|
:bool Boolean
|
||
|
* idle noeat
|
||
|
|
||
|
:lit Constant
|
||
|
* idle noeat
|
||
|
|
||
|
:operator Operator
|
||
|
* idle noeat
|
||
|
|
||
|
.end
|