Rewrite JavaScript syntax highlighting

This commit is contained in:
Rebecca Turner 2014-08-29 16:28:56 -04:00
parent 8340b64b22
commit f763acaaf6
1 changed files with 417 additions and 277 deletions

448
js.jsf
View File

@ -1,29 +1,37 @@
# JOE syntax highlight file for JavaScript
# the real one - not a pimped Java file...
# just getting this idea seams crazy...
# TODO: regex escape highlighter ignored \x (and other?) sequences
# Define colors
=Idle
=Comment green
=CommentLabel bold green
=Constant cyan
=Escape bold cyan
=String cyan
=StringEscape bold cyan
=Regexp cyan
=RegexpEscape bold cyan
=RegexpOptions cyan
=Number cyan
=Type bold
=CustomType
=Keyword bold
=Global bold
=Exports bold black
=Exports
=ExportItem
=Operator bold
=Bad inverse bold red
=Brace magenta
=Control
=Assign bold
=Paren
=Bracket
=Semicolon
=Comma
=PropSep
=Syntax
=Ident
=Method
# additional classes not present everywhere but useful
=Methods
=Number cyan #fg_520 # orange
# from html.jsf to support <?php?>
# from html.jsf to support embedded languages
=TagEdge green
:begin Idle
@ -33,62 +41,145 @@
:idle Idle
* idle
"\n" idle
"/" slash
"/" regex_or_comment recolor=-1
"0" first_digit recolor=-1
"1-9" decimal recolor=-1
"." maybe_float
"\"" string recolor=-1
"'" char recolor=-1
"a-zA-Z_" ident mark buffer
"\"" string recolor=-1 save_c
"'" string recolor=-1 save_c
"A-Z" type_match mark buffer recolor=-1
"$a-z_" ident mark buffer recolor=-1
"{}" brace recolor=-1
"()" paren noeat recolor=-1
";" semicolon recolor=-1
"," comma recolor=-1
"=" assign_maybe recolor=-1
"[]" bracket noeat recolor=-1
"\-" subtract recolor=-1
"+" add recolor=-1
"*|&^%" mutate_maybe recolor=-1
":?~" syntax recolor=-1
.ifdef html
",:;=()>[]*&|!?~+\-%^" control recolor=-1
"<" maybe_done recolor=-1
">!" eqmixer_maybe recolor=-1
.else
.ifdef php
",:;=()>[]*&|!?~+\-%^" control recolor=-1
"<" maybe_done recolor=-1
">!" eqmixer_maybe recolor=-1
.else
",:;=()><[]*&|!?~+\-%^" control recolor=-1
.ifdef mason
"<" maybe_done recolor=-1
">!" eqmixer_maybe recolor=-1
.else
"<>!" eqmixer_maybe recolor=-1
.endif
.endif
.endif
# / / regex not allowed after terms
# class Control to handle ')' right
:after_term Control
* idle noeat
" \t)" after_term
"%" control recolor=-1
"/" after_term_slash
:subtract Assign
* mutate_maybe noeat
"\-" assign recolor=-2
:add Assign
* mutate_maybe noeat
"+" assign recolor=-2
:mutate_maybe Assign
* syntax recolor=-2 noeat
"=" assign recolor=-2
:syntax Syntax
* idle recolor=-1 noeat
:assign Assign
* idle recolor=-1 noeat
:eqmixer_maybe Syntax
* idle recolor=-1 noeat
"=" eqmixer_maybe
:assign_maybe Assign
* idle recolor=-1 noeat
"=" equality recolor=-2
:equality Syntax
* idle recolor=-1 noeat
"=" syntax
:maybe_done TagEdge
* idle noeat
* eqmixer_maybe noeat
"/" idle noeat return recolor=-2
.ifdef php
"?%" rtn_php call=php.php()
"?" rtn_embed call=php.php()
.endif
.ifdef mason
"&%" rtn_embed call=perl.perl()
.endif
# this state allows php and perl to recolor the ?> %> or &> properly.
:rtn_php TagEdge
:rtn_embed TagEdge
* idle noeat
:brace Brace
:no_regex Idle
* idle noeat
"/" maybe_comment recolor=-1
" " no_regex
:control Control
* idle noeat
:after_term Idle
* after_term
"\n" idle
"/" maybe_comment recolor=-1
"." prop_sep recolor=-1
"a-z" infix_operator buffer recolor=-1
"\"'A-Z_0-9" bad_after_term recolor=-1
"{}" brace recolor=-1
"()" paren noeat recolor=-1
";" semicolon recolor=-1
"=" assign_maybe recolor=-1
"," comma recolor=-1
"[]" bracket noeat recolor=-1
"\-" subtract recolor=-1
"+" add recolor=-1
"*|&^%" mutate_maybe recolor=-1
":?~" syntax recolor=-1
.ifdef html
"<" maybe_done recolor=-1
">!" eqmixer_maybe recolor=-1
.else
.ifdef php
"<" maybe_done recolor=-1
">!" eqmixer_maybe recolor=-1
.else
.ifdef mason
"<" maybe_done recolor=-1
">!" eqmixer_maybe recolor=-1
.else
"<>!" eqmixer_maybe recolor=-1
.endif
.endif
.endif
:slash Idle
* regex noeat recolor=-2
"*" comment recolor=-2
"/" line_comment recolor=-2
# allow // and /* after terms
:after_term_slash Idle
* idle noeat
:ident_only Idle
* bad_after_term recolor=-1
"A-Z" type_match mark buffer recolor=-1
"$a-z_" ident mark buffer recolor=-1
" \t" ident_only
"\n" idle
:bad_after_term Bad
* after_term noeat markend strings
done
"\"'" after_term
"a-zA-Z0-9_." bad_after_term
:regex_or_comment Syntax
* regex recolor=-2
"*/" maybe_comment noeat
:maybe_comment Syntax
* syntax noeat
"*" comment recolor=-2
"/" line_comment recolor=-2
"=" assign recolor=-2
:comment Comment
* comment
@ -107,18 +198,38 @@
"BFHNTX" line_comment noeat call=.comment_todo()
"\n" idle
:regex Constant
:regex Regexp
* regex
"\\" regex_quote recolor=-1
"/" regex_mod
:regex_quote Escape
:regex_quote RegexpEscape
* regex
:regex_mod Constant
:regex_mod RegexpOptions
* after_term noeat
"igm" regex_mod
:brace Brace
* idle noeat
:paren Paren
"(" idle
")" no_regex
:bracket Bracket
"[" idle
"]" after_term
:syntax Syntax
* idle noeat
:comma Comma
* idle noeat
:semicolon Semicolon
* idle noeat
:first_digit Number
* after_term noeat
"xX" hex
@ -147,9 +258,12 @@
"." float
:maybe_float Number
* after_term recolor=-2 noeat
* prop_sep noeat recolor=-2
"0-9" float recolor=-2
:prop_sep PropSep
* ident_only noeat
:float Number
* after_term noeat
"eE" epart
@ -163,162 +277,177 @@
* after_term noeat
"0-9" enum
:string Constant
* string
"\"" after_term
"\\" string_escape recolor=-1
"%" string_control recolor=-1
:string String
* string_body noeat mark
:string_escape Escape
:string_body String
* string
"\n" string_bad
& after_term
"\\" string_escape recolor=-1
:string_bad Bad
* string_bad
"\\" string_bad_escape
& after_term
:string_bad_escape Bad
* string_bad
:string_escape StringEscape
* string
"x" string_hex1
"0-7" string_octal2
"\n" string recolor=-2
"\n" string_bad noeat
:string_hex1 Escape
:string_hex1 StringEscape
* string noeat
"0-9a-fA-F" string_hex2
:string_hex2 Escape
:string_hex2 StringEscape
* string noeat
"0-9a-fA-F" string
:string_octal2 Escape
:string_octal2 StringEscape
* string noeat
"0-7" string_octal3
:string_octal3 Escape
:string_octal3 StringEscape
* string noeat
"0-7" string
:string_control Escape
* string_control
"\n" reset
"diouxXeEfFgGaAcspn%SC" string
:infix_operator Bad
* bad_op noeat markend strings
"in" operator
"instanceof" operator
done
"a-zA-Z0-9_" infix_operator
:char Constant
* char
"\n" reset
"'" after_term
"\\" char_escape recolor=-1
:bad_op Bad
* idle noeat
"a-zA-Z0-9_" bad_op
:char_escape Escape
* char
"x" char_hex1
"0-7" char_octal2
"\n" char recolor=-2
:operator Operator
* idle noeat
:char_hex1 Escape
* char noeat
"0-9a-fA-F" char_hex2
:char_hex2 Escape
* char noeat
"0-9a-fA-F" char
:char_octal2 Escape
* char noeat
"0-7" char_octal3
:char_octal3 Escape
* char noeat
"0-7" char
:ident Idle
* ident_end noeat markend strings
"arguments" kw
:type_match CustomType
* type_end noeat markend strings
"Infinity" lit
"NaN" lit
"Array" type
"ArrayBuffer" type
"break" kw
"Boolean" type
"case" kw
"catch" kw
"const" global
"continue" kw
"DataView" type
"decodeURI" global
"decodeURIComponent" global
"default" kw
"delete" operator
"do" kw
"Date" type
"else" kw
"encodeURI" global
"encodeURIComponent" global
"Error" type
"escape" global
"eval" global
"EvalError" type
"false" lit
"finally" kw
"for" kw
"function" kw
"Function" type
"Float32Array" type
"Float64Array" type
"if" kw
"in" kw
"Infinity" lit
"instanceof" operator
"Int16Array" type
"Int32Array" type
"Int8Array" type
"isFinite" global
"isNaN" global
"JSON" type
"let" kw
"Math" type
"NaN" lit
"new" operator
"null" lit
"Number" type
"Object" type
"parseFloat" global
"parseInt" global
"return" kw
"RangeError" type
"ReferenceError" type
"RegExp" type
"switch" kw
"String" type
"SyntaxError" type
"this" kw
"throw" kw
"true" lit
"try" kw
"typeof" operator
"TypeError" type
"Uint16Array" type
"Uint32Array" type
"Uint8Array" type
"Uint8ClampedArray" type
"undefined" lit
"unescape" global
"URIError" type
# node.js
"Buffer" type
done
"a-zA-Z0-9_" type_match
:type_end Idle
* after_term noeat
" " type_end
"." prop_sep recolor=-1
:ident Ident
* ident_end noeat markend strings
"delete" operator
"in" operator
"instanceof" operator
"typeof" operator
"new" operator
"arguments" kw
"break" kw
"case" kw
"catch" kw
"continue" kw
"default" kw
"do" kw
"else" kw
"finally" kw
"for" kw
"function" kw
"if" kw
"let" kw
"return" kw
"switch" kw
"throw" kw
"try" kw
"var" kw
"void" kw
"while" kw
"with" kw
# quasi-keywords
"prototype" kw
# Node.js
"module" global
"false" lit
"null" lit
"true" lit
"const" global
"decodeURI" global
"decodeURIComponent" global
"encodeURI" global
"encodeURIComponent" global
"escape" global
"eval" global
"isFinite" global
"isNaN" global
"parseFloat" global
"parseInt" global
"undefined" global
"unescape" global
"setImmediate" global
"this" quasikw
"prototype" quasikw
# node.js
"exports" export
"module" global
"process" global
"global" global
"console" global
"setTimeout" global
"setInterval" global
"clearInterval" global
"Buffer" type
# Node.js globals that we'll pretend are keywords
"require" kw
"__filename" kw
"__dirname" kw
"clearTimeout" global
"require" quasikw
"__filename" quasikw
"__dirname" quasikw
# By convention...
"self" kw
"self" quasikw
done
"a-zA-Z0-9_" ident
"$a-zA-Z0-9_" ident
:ident_end Idle
* after_term noeat
" " ident_end
"." prop_sep recolor=-1
"(" method_start recolor=-1
:method_start Paren
* method_end noeat recolormark
:method_end Method
* idle noeat
:type Type
* after_term noeat
@ -326,25 +455,36 @@ done
:kw Keyword
* idle noeat
:quasikw Keyword
* after_term noeat
:global Global
* idle noeat
* after_term noeat
:export Exports
* idle noeat
* export_end noeat
:export_end Exports
* after_term noeat
" " export_end
"." export_item_start
:export_item_start ExportItem
* bad_after_term recolor=-1 noeat
" " export_item_start
"a-zA-Z_" export_item
:export_item ExportItem
* after_term noeat
"a-zA-Z0-9_" export_item
:lit Constant
* lit_end noeat
:lit_end Constant
* after_term noeat
:operator Operator
* idle noeat
:ident_end Idle
* after_term noeat
" " ident_end
"(" method_end noeat recolormark
:method_end Methods
* idle noeat
" " lit_end
"." prop_sep recolor=-1
.end