581 lines
9.6 KiB
Plaintext
581 lines
9.6 KiB
Plaintext
|
# JOE syntax highlight file for Coffeescript
|
||
|
|
||
|
# node = a.b.c /\s+/ seems to be allowed, foo
|
||
|
# need to recognize ... and ..
|
||
|
# include - as part of number?
|
||
|
|
||
|
# after term: it's a regex if
|
||
|
|
||
|
# suppress literals after .
|
||
|
|
||
|
=Idle
|
||
|
=Comment
|
||
|
=Constant
|
||
|
=Number +Constant
|
||
|
=Boolean +Constant
|
||
|
=String +Constant
|
||
|
=Regex +String
|
||
|
=Escape
|
||
|
=StringEscape +Escape
|
||
|
=StringVariable +StringEscape
|
||
|
=RegexEscape +StringEscape
|
||
|
=RegexVariable +RegexEscape
|
||
|
=Keyword
|
||
|
=Structure +Keyword
|
||
|
=Operator +Keyword
|
||
|
=Statement +Keyword
|
||
|
=Loop +Statement
|
||
|
=Conditional +Statement
|
||
|
=Label +DefinedIdent
|
||
|
=Ident
|
||
|
=Bad
|
||
|
|
||
|
:pre_idle Idle
|
||
|
* NULL noeat call=.coffee()
|
||
|
|
||
|
.subr coffee
|
||
|
|
||
|
:idle Idle
|
||
|
* idle
|
||
|
"(" idle call=.coffee(paren)
|
||
|
"[" idle call=.coffee(brack)
|
||
|
"{" idle call=.coffee(squiggly)
|
||
|
.ifdef paren
|
||
|
")" idle return
|
||
|
.else
|
||
|
")" stray recolor=-1
|
||
|
.endif
|
||
|
.ifdef brack
|
||
|
"]" idle return
|
||
|
.else
|
||
|
"]" stray recolor=-1
|
||
|
.endif
|
||
|
.ifdef squiggly_str
|
||
|
"}" string_end_subst noeat
|
||
|
.else
|
||
|
.ifdef squiggly_regex
|
||
|
"}" regex_end_subst noeat
|
||
|
.else
|
||
|
.ifdef squiggly
|
||
|
"}" idle return
|
||
|
.else
|
||
|
"}" stray recolor=-1
|
||
|
.endif
|
||
|
.endif
|
||
|
.endif
|
||
|
|
||
|
"#" comment recolor=-1
|
||
|
"0" zero recolor=-1
|
||
|
"1-9" decimal recolor=-1
|
||
|
"." decimal_point recolor=-1
|
||
|
"\"" maybe_string recolor=-1
|
||
|
"'" maybe_char recolor=-1
|
||
|
"/" slash recolor=-1
|
||
|
"@$\i" ident buffer
|
||
|
|
||
|
:stray Bad
|
||
|
* idle
|
||
|
|
||
|
:after_term Idle
|
||
|
* idle noeat
|
||
|
" \t" after_term_1
|
||
|
"/" slash_after_term_0
|
||
|
|
||
|
# "foo/x" is division?
|
||
|
# "foo/ x" is division.
|
||
|
|
||
|
:slash_after_term_0 Idle
|
||
|
* idle noeat
|
||
|
|
||
|
:after_term_1 Idle
|
||
|
* idle noeat
|
||
|
" \t" after_term_1
|
||
|
"/" slash_after_term_1
|
||
|
|
||
|
# "foo / x" is division
|
||
|
# "foo /x" is regex
|
||
|
|
||
|
:slash_after_term_1 Idle
|
||
|
* sregex noeat recolor=-2
|
||
|
"/" slashslash
|
||
|
" = " idle noeat
|
||
|
|
||
|
:comment Comment comment
|
||
|
* line_comment noeat
|
||
|
"#" maybe_block_comment
|
||
|
|
||
|
:maybe_block_comment Comment comment
|
||
|
* line_comment noeat
|
||
|
"#" maybe_block_comment_1
|
||
|
|
||
|
# This is weird... #### is a line comment, but ### is a block comment
|
||
|
|
||
|
:maybe_block_comment_1 Comment comment
|
||
|
* block_comment noeat
|
||
|
"#" line_comment
|
||
|
|
||
|
:line_comment Comment comment
|
||
|
* line_comment
|
||
|
"BFHNTX" line_comment noeat call=comment_todo.comment_todo()
|
||
|
"\n" idle
|
||
|
|
||
|
:block_comment Comment comment
|
||
|
* block_comment
|
||
|
"BFHNTX" block_comment noeat call=comment_todo.comment_todo()
|
||
|
"#" block_comment_1
|
||
|
|
||
|
:block_comment_1 Comment comment
|
||
|
* block_comment noeat
|
||
|
"#" block_comment_2
|
||
|
|
||
|
:block_comment_2 Comment comment
|
||
|
* block_comment noeat
|
||
|
"#" idle
|
||
|
|
||
|
# Check for regex
|
||
|
|
||
|
:slash Constant
|
||
|
* sregex noeat recolor=-2
|
||
|
"/" slashslash
|
||
|
|
||
|
:slashslash Constant
|
||
|
* after_term noeat
|
||
|
"/" regex recolor=-3
|
||
|
|
||
|
# Regex like this ///foo///
|
||
|
|
||
|
:regex Regex
|
||
|
* regex
|
||
|
"\\" regex_escape recolor=-1
|
||
|
"#" regex_maybe_subst recolor=-1
|
||
|
"/" regexslash
|
||
|
|
||
|
:regex_maybe_subst RegexVariable
|
||
|
* regex noeat recolor=-1
|
||
|
"{" regex call=.coffee(squiggly_regex)
|
||
|
|
||
|
:regex_end_subst RegexVariable
|
||
|
* idle return
|
||
|
|
||
|
:regexslash Regex
|
||
|
* regex noeat
|
||
|
"/" regexslashslash
|
||
|
|
||
|
:regexslashslash Regex
|
||
|
* regex noeat
|
||
|
"/" after_term
|
||
|
|
||
|
:regex_escape RegexEscape
|
||
|
* regex
|
||
|
"x" regex_hex2
|
||
|
"u" regex_hex4
|
||
|
|
||
|
:regex_uni RegexEscape
|
||
|
* regex_uni
|
||
|
"}" regex
|
||
|
|
||
|
:regex_hex4 RegexEscape
|
||
|
* regex noeat
|
||
|
"{" regex_uni
|
||
|
"0-9a-fA-F" regex_hex3
|
||
|
|
||
|
:regex_hex3 RegexEscape
|
||
|
* regex noeat
|
||
|
"0-9a-fA-F" regex_hex2
|
||
|
|
||
|
:regex_hex2 RegexEscape
|
||
|
* regex noeat
|
||
|
"0-9a-fA-F" regex_hex1
|
||
|
|
||
|
:regex_hex1 RegexEscape
|
||
|
* regex noeat
|
||
|
"0-9a-fA-F" regex
|
||
|
|
||
|
# Regex like this: /foo/
|
||
|
|
||
|
:sregex Regex
|
||
|
* sregex
|
||
|
"\\" sregex_escape recolor=-1
|
||
|
"#" sregex_maybe_subst recolor=-1
|
||
|
"/" after_term
|
||
|
|
||
|
:sregex_maybe_subst RegexVariable
|
||
|
* sregex noeat recolor=-1
|
||
|
"{" sregex call=.coffee(squiggly_regex)
|
||
|
|
||
|
:sregex_escape RegexEscape
|
||
|
* sregex
|
||
|
"x" sregex_hex2
|
||
|
"u" sregex_hex4
|
||
|
|
||
|
:sregex_uni RegexEscape
|
||
|
* sregex_uni
|
||
|
"}" sregex
|
||
|
|
||
|
:sregex_hex4 RegexEscape
|
||
|
* sregex noeat
|
||
|
"{" sregex_uni
|
||
|
"0-9a-fA-F" sregex_hex3
|
||
|
|
||
|
:sregex_hex3 RegexEscape
|
||
|
* sregex noeat
|
||
|
"0-9a-fA-F" sregex_hex2
|
||
|
|
||
|
:sregex_hex2 RegexEscape
|
||
|
* sregex noeat
|
||
|
"0-9a-fA-F" sregex_hex1
|
||
|
|
||
|
:sregex_hex1 RegexEscape
|
||
|
* sregex noeat
|
||
|
"0-9a-fA-F" sregex
|
||
|
|
||
|
# Numbers
|
||
|
|
||
|
:bad_number Bad
|
||
|
* after_term noeat
|
||
|
"0-9" bad_number
|
||
|
|
||
|
:zero Number
|
||
|
* after_term noeat
|
||
|
"b" binary
|
||
|
"o" octal
|
||
|
"x" hex
|
||
|
"." maybe_float
|
||
|
"eE" epart
|
||
|
"0-9" decimal recolor=-1
|
||
|
|
||
|
:decimal_point Number
|
||
|
* after_term noeat recolor=-2
|
||
|
"." decimal_point_1 recolor=-2
|
||
|
"\i" not_ident recolor=-2
|
||
|
"0-9" float
|
||
|
|
||
|
:not_ident Idle
|
||
|
* after_term noeat
|
||
|
"\c" not_ident
|
||
|
|
||
|
:decimal_point_1 Number
|
||
|
* idle noeat
|
||
|
"." idle
|
||
|
|
||
|
:octal Number
|
||
|
* after_term noeat
|
||
|
"0-7_" octal
|
||
|
"89" bad_number recolor=-1
|
||
|
|
||
|
:binary Number
|
||
|
* after_term noeat
|
||
|
"01_" binary
|
||
|
"2-9" bad_number recolor=-1
|
||
|
|
||
|
:hex Number
|
||
|
* after_term noeat
|
||
|
"0-9A-Fa-f_" hex
|
||
|
|
||
|
:decimal Number
|
||
|
* after_term noeat
|
||
|
"0-9_" decimal
|
||
|
"eE" epart
|
||
|
"." maybe_float
|
||
|
|
||
|
:maybe_float Number
|
||
|
* after_term noeat recolor=-2
|
||
|
"." decimal_point_1 recolor=-2
|
||
|
"eE" epart
|
||
|
"0-9_" float
|
||
|
|
||
|
:float Number
|
||
|
* after_term noeat
|
||
|
"eE" epart
|
||
|
"0-9_" float
|
||
|
|
||
|
:epart Number
|
||
|
* after_term noeat
|
||
|
"0-9+\-" enum
|
||
|
|
||
|
:enum Number
|
||
|
* after_term noeat
|
||
|
"0-9_" enum
|
||
|
|
||
|
# strings like "hello"
|
||
|
|
||
|
:maybe_string String string
|
||
|
* string noeat
|
||
|
"\"" maybe_string_1
|
||
|
|
||
|
:maybe_string_1 String string
|
||
|
* after_term noeat
|
||
|
"\"" stringstring
|
||
|
|
||
|
:string String string
|
||
|
* string
|
||
|
"\"" after_term
|
||
|
"#" string_maybe_subst recolor=-1
|
||
|
"\\" string_escape recolor=-1
|
||
|
|
||
|
:string_maybe_subst StringVariable string
|
||
|
* string noeat recolor=-1
|
||
|
"{" string call=.coffee(squiggly_str)
|
||
|
|
||
|
:string_end_subst StringVariable string
|
||
|
* idle return
|
||
|
|
||
|
:string_escape StringEscape string
|
||
|
* string
|
||
|
"x" string_hex2
|
||
|
"u" string_hex4
|
||
|
|
||
|
:string_uni StringEscape string
|
||
|
* string_uni
|
||
|
"}" string
|
||
|
|
||
|
:string_hex4 StringEscape string
|
||
|
* string noeat
|
||
|
"{" string_uni
|
||
|
"0-9a-fA-F" string_hex3
|
||
|
|
||
|
:string_hex3 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex2
|
||
|
|
||
|
:string_hex2 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string_hex1
|
||
|
|
||
|
:string_hex1 StringEscape string
|
||
|
* string noeat
|
||
|
"0-9a-fA-F" string
|
||
|
|
||
|
# Strings like """ foo """
|
||
|
|
||
|
:stringstring String string
|
||
|
* stringstring
|
||
|
"\"" stringstring_1
|
||
|
"#" stringstring_maybe_subst recolor=-1
|
||
|
"\\" stringstring_escape recolor=-1
|
||
|
|
||
|
:stringstring_1 String string
|
||
|
* stringstring noeat
|
||
|
"\"" stringstring_2
|
||
|
|
||
|
:stringstring_2 String string
|
||
|
* stringstring noeat
|
||
|
"\"" after_term
|
||
|
|
||
|
:stringstring_maybe_subst StringVariable string
|
||
|
* stringstring noeat recolor=-1
|
||
|
"{" stringstring call=.coffee(squiggly_str)
|
||
|
|
||
|
:stringstring_escape StringEscape string
|
||
|
* stringstring
|
||
|
"x" stringstring_hex2
|
||
|
"u" stringstring_hex4
|
||
|
|
||
|
:stringstring_uni StringEscape string
|
||
|
* stringstring_uni
|
||
|
"}" stringstring
|
||
|
|
||
|
:stringstring_hex4 StringEscape string
|
||
|
* stringstring noeat
|
||
|
"{" stringstring_uni
|
||
|
"0-9a-fA-F" stringstring_hex3
|
||
|
|
||
|
:stringstring_hex3 StringEscape string
|
||
|
* stringstring noeat
|
||
|
"0-9a-fA-F" stringstring_hex2
|
||
|
|
||
|
:stringstring_hex2 StringEscape string
|
||
|
* stringstring noeat
|
||
|
"0-9a-fA-F" stringstring_hex1
|
||
|
|
||
|
:stringstring_hex1 StringEscape string
|
||
|
* stringstring noeat
|
||
|
"0-9a-fA-F" stringstring
|
||
|
|
||
|
# string constants like 'h'
|
||
|
|
||
|
:maybe_char String string
|
||
|
* char noeat
|
||
|
"'" maybe_char_1
|
||
|
|
||
|
:maybe_char_1 String string
|
||
|
* after_term noeat
|
||
|
"'" charchar
|
||
|
|
||
|
:char String string
|
||
|
* char
|
||
|
"'" after_term
|
||
|
"\\" char_escape recolor=-1
|
||
|
|
||
|
:char_escape StringEscape string
|
||
|
* char noeat
|
||
|
"x" char_hex2
|
||
|
"u" char_hex4
|
||
|
|
||
|
:char_uni StringEscape string
|
||
|
* char_uni
|
||
|
"}" char_done
|
||
|
|
||
|
:char_hex4 StringEscape string
|
||
|
* char noeat
|
||
|
"{" char_uni
|
||
|
"0-9a-fA-F" char_hex3
|
||
|
|
||
|
:char_hex3 StringEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex2
|
||
|
|
||
|
:char_hex2 StringEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char_hex1
|
||
|
|
||
|
:char_hex1 StringEscape string
|
||
|
* char noeat
|
||
|
"0-9a-fA-F" char
|
||
|
|
||
|
# strings like this '''foo'''
|
||
|
|
||
|
:charchar String string
|
||
|
* charchar
|
||
|
"'" charchar_1
|
||
|
"\\" charchar_escape recolor=-1
|
||
|
|
||
|
:charchar_1 String string
|
||
|
* charchar noeat
|
||
|
"'" charchar_2
|
||
|
|
||
|
:charchar_2 String string
|
||
|
* charchar noeat
|
||
|
"'" after_term
|
||
|
|
||
|
:charchar_escape StringEscape string
|
||
|
* charchar noeat
|
||
|
"x" charchar_hex2
|
||
|
"u" charchar_hex4
|
||
|
|
||
|
:charchar_uni StringEscape string
|
||
|
* charchar_uni
|
||
|
"}" charchar_done
|
||
|
|
||
|
:charchar_hex4 StringEscape string
|
||
|
* charchar noeat
|
||
|
"{" charchar_uni
|
||
|
"0-9a-fA-F" charchar_hex3
|
||
|
|
||
|
:charchar_hex3 StringEscape string
|
||
|
* charchar noeat
|
||
|
"0-9a-fA-F" charchar_hex2
|
||
|
|
||
|
:charchar_hex2 StringEscape string
|
||
|
* charchar noeat
|
||
|
"0-9a-fA-F" charchar_hex1
|
||
|
|
||
|
:charchar_hex1 StringEscape string
|
||
|
* charchar noeat
|
||
|
"0-9a-fA-F" charchar
|
||
|
|
||
|
|
||
|
# Identifiers
|
||
|
|
||
|
:ident Ident
|
||
|
* after_term noeat strings
|
||
|
"and" operator
|
||
|
"break" loop
|
||
|
"by" kw
|
||
|
"catch" kw
|
||
|
"class" struct
|
||
|
"continue" loop
|
||
|
"delete" kw
|
||
|
"debugger" stmt
|
||
|
"do" loop
|
||
|
"else" cond
|
||
|
"extends" kw
|
||
|
"false" bool
|
||
|
"finally" kw
|
||
|
"for" loop
|
||
|
"if" cond
|
||
|
"in" operator
|
||
|
"instanceof" kw
|
||
|
"is" operator
|
||
|
"isnt" operator
|
||
|
"loop" loop
|
||
|
"new" kw
|
||
|
"no" bool
|
||
|
"not" operator
|
||
|
"null" lit
|
||
|
"off" bool
|
||
|
"of" operator
|
||
|
"on" bool
|
||
|
"or" operator
|
||
|
"return" stmt
|
||
|
"super" kw
|
||
|
"switch" cond
|
||
|
"then" kw
|
||
|
"this" lit
|
||
|
"throw" stmt
|
||
|
"true" bool
|
||
|
"try" kw
|
||
|
"typeof" kw
|
||
|
"undefined" lit
|
||
|
"unless" cond
|
||
|
"until" loop
|
||
|
"when" kw
|
||
|
"while" loop
|
||
|
"yes" lit
|
||
|
"yield" stmt
|
||
|
"case" label
|
||
|
"default" label
|
||
|
"function" forbid
|
||
|
"var" forbid
|
||
|
"void" forbid
|
||
|
"with" forbid
|
||
|
"const" forbid
|
||
|
"let" forbid
|
||
|
"enum" forbid
|
||
|
"export" forbid
|
||
|
"import" forbid
|
||
|
"native" forbid
|
||
|
"implements" forbid
|
||
|
"interface" forbid
|
||
|
"package" forbid
|
||
|
"private" forbid
|
||
|
"protected" forbid
|
||
|
"public" forbid
|
||
|
"static" forbid
|
||
|
"arguments" forbid
|
||
|
"eval" forbid
|
||
|
done
|
||
|
"$\c" ident
|
||
|
|
||
|
:kw Keyword
|
||
|
* idle noeat
|
||
|
|
||
|
:forbid Keyword
|
||
|
* idle noeat
|
||
|
|
||
|
:lit Constant
|
||
|
* after_term noeat
|
||
|
|
||
|
:bool Boolean
|
||
|
* after_term noeat
|
||
|
|
||
|
:stmt Statement
|
||
|
* idle noeat
|
||
|
|
||
|
:loop Loop
|
||
|
* idle noeat
|
||
|
|
||
|
:cond Conditional
|
||
|
* idle noeat
|
||
|
|
||
|
:struct Structure
|
||
|
* idle noeat
|
||
|
|
||
|
:operator Operator
|
||
|
* idle noeat
|
||
|
|
||
|
:label Label
|
||
|
* idle noeat
|
||
|
|
||
|
.end
|