1
0
mirror of https://github.com/cmur2/joe-syntax.git synced 2024-12-22 02:54:23 +01:00
joe-syntax/ruby.jsf
Christian Nicolai 495194d5ca Fixed ruby string substitution highlight
In (at least recent versions of) ruby the phrase #{var} is used
for string substitution in "..." strings.
2011-08-02 15:16:22 +02:00

513 lines
8.2 KiB
Plaintext

# JOE syntax highlight file for Ruby
# Oh No! It's another perl!
# <<EOF1, <<EOF2 is not working. Only EOF1 is seen. It should wait for the
# EOF2.
=Idle
=Comment green
=POD green
=Constant cyan
=Escape bold cyan
=Type bold
=Keyword bold
=Bad bold red
=Var yellow
=Brace magenta
=CommentTODO bold green
=Symbol red
=ProcArg #yellow
=ClassMember fg_310 # brown
# Detect pod
:idle Idle
* rest noeat
"=" pod_start
# Rest of line
:rest Idle
* rest
"#" line_comment_i recolor=-1
"\n" idle
"{}" brace recolor=-1
"0" first_digit recolor=-1
"1-9" decimal recolor=-1
"." maybe_float
"\"" string recolor=-1
"'" char recolor=-1
"`" backtick recolor=-1
"/" regex recolor=-1
"<" maybe_inc
"$" not_string buffer
"%" pstring
"a-zA-Z_" ident buffer
# higher level, ruby specific
":" maybe_symbol noeat
"|" proc_arg
"@" class_member1
# / / regex not allowed after terms
:after_term Idle
* rest noeat
"{}" brace recolor=-1
" )" after_term
"/%" rest
:pod_start Idle
* pod_start
"\n" pod_block
:pod_block POD
* pod_block
"=" pod_ident buffer
:pod_ident POD
* pod_block noeat strings
"=end" rest
done
"a-zA-Z0-9_" pod_ident
:maybe_inc Idle
* after_term noeat
"<" maybe_inc1
:maybe_inc1 Idle
* after_term noeat
"-" allow_space
"'\"" quoted_inc_start save_c recolor=-1
"A-Za-z_" inc buffer noeat
:allow_space Idle
* after_term noeat
"'\"" quoted_inc_start_allow save_c recolor=-1
"A-Za-z_" inc_allow buffer noeat
:quoted_inc_start Var
* quoted_inc buffer
:quoted_inc_start_allow Var
* quoted_inc_allow buffer
:quoted_inc Var
* quoted_inc
& skipline save_s
:quoted_inc_allow Var
* quoted_inc_allow
& skipline_allow save_s
:inc Var
* skipline save_s noeat
"A-Za-z0-9_" inc
:inc_allow Var
* skipline_allow save_s noeat
"A-Za-z0-9_" inc_allow
# Should be treated as a normal line here...
:skipline Idle
* skipline
"\n" next_line
:skipline_allow Idle
* skipline_allow
"\n" next_line_allow
:todelim Constant
* todelim
"\n" next_line strings
"&" founddelim
done
:todelim_allow Constant
* todelim_allow
"\n" next_line_allow strings
"&" founddelim
done
# eat \n so it's not in string.
:next_line Constant
* todelim buffer
"\n" next_line
:next_line_allow Constant
* todelim_allow buffer
" \n" next_line_allow
:founddelim Var
* idle noeat
:regex Constant
* regex
"\\" regex_quote recolor=-1
"/" after_term
:regex_quote Escape
* regex
:not_string Idle
* rest noeat
"A-Za-z_" ident
"\"'`#/" rest
:brace Brace
* rest noeat
:line_comment Comment
* line_comment
"\n" rest
# pimped by a line matching on possible upper-case "todo" labels (like TODO, FIXME, etc.)
# and buffering all following chars in :line_comment_todo_guess
:line_comment_i Comment
* line_comment_i
"TFBX" line_comment_todo_guess noeat buffer
"\n" idle
# if the current char _is_ in [A-Z] put it to the buffer
# if it's not (e.g. a space) then it is an unknown char so we should exit
# but before we'll check if the buffer matches one of our keywords (like TODO)
# and color it so - else we are wrong with the guess that it's a todo-keyword
# so it's a normal 'Comment'
:line_comment_todo_guess Comment
* line_comment_todo_unkwn noeat strings
"TODO" line_comment_todo
"FIXME" line_comment_todo
"BUG" line_comment_todo
"XXX" line_comment_todo
done
"A-Z" line_comment_todo_guess
:line_comment_todo_unkwn Idle
* line_comment_i noeat
:line_comment_todo CommentTODO
* line_comment_i noeat
:end_of_file_comment Comment
* end_of_file_comment
:first_digit Constant
* after_term noeat
"x" hex
"b" binary
"." float
"eE" epart
"0-7" octal
"89" bad_number recolor=-1
:bad_number Bad
* after_term noeat
"0-9" bad_number
:octal Constant
* after_term noeat
"0-7_" octal
"89" bad_number recolor=-1
:binary Constant
* after_term noeat
"01_" binary
"2-9" bad_number recolor=-1
:hex Constant
* after_term noeat
"0-9A-Fa-f_" hex
:decimal Constant
* after_term noeat
"0-9_" decimal
"eE" epart
"." float
:maybe_float Constant
* after_term recolor=-2 noeat
"0-9" float recolor=-2
:float Constant
* after_term noeat
"eE" epart
"0-9_" float
:epart Constant
* after_term noeat
"0-9+\-" enum
:enum Constant
* after_term noeat
"0-9_" enum
:string Constant
* string
"\"" after_term
"\\" string_escape recolor=-1
"#" maybe_string_subst recolor=-1
:maybe_string_subst Constant
* string
"{" string_subst recolor=-2
:string_subst Escape
* string_subst
"}" string
:string_escape Escape
* string
"x" string_hex1
"c" string_ctrl
"N" string_named
"0-7" string_octal2
"\n" string recolor=-2
:string_named Escape
* string
"{" string_named_rest
:string_named_rest Escape
* string_named_rest
"}" string
:string_ctrl Escape
* string
:string_hex1 Escape
* string noeat
"{" string_unicode
"0-9a-fA-F" string_hex2
:string_unicode Escape
* string_unicode
"}" string
:string_hex2 Escape
* string noeat
"0-9a-fA-F" string
:string_octal2 Escape
* string noeat
"0-7" string_octal3
:string_octal3 Escape
* string noeat
"0-7" string
# Only \\ and \' allowed in single quoted strings
:char Constant
* char
"\n" reset
"'" after_term
"\\" char_escape recolor=-1
:char_escape Escape
* char recolor=-2
"\\'" char
:backtick Constant
* backtick
"`" after_term
"\\" backtick_escape recolor=-1
"$@" backtick_subst recolor=-1
:backtick_subst Escape
* backtick noeat recolor=-1
"a-zA-Z_0-9" backtick_subst
:backtick_escape Escape
* backtick
"x" backtick_hex1
"c" backtick_ctrl
"N" backtick_named
"0-7" backtick_octal2
"\n" backtick recolor=-2
:backtick_named Escape
* backtick
"{" backtick_named_rest
:backtick_named_rest Escape
* backtick_named_rest
"}" backtick
:backtick_ctrl Escape
* backtick
:backtick_hex1 Escape
* backtick noeat
"{" backtick_unicode
"0-9a-fA-F" backtick_hex2
:backtick_unicode Escape
* backtick_unicode
"}" backtick
:backtick_hex2 Escape
* backtick noeat
"0-9a-fA-F" backtick
:backtick_octal2 Escape
* backtick noeat
"0-7" backtick_octal3
:backtick_octal3 Escape
* backtick noeat
"0-7" backtick
:ident Idle
* after_term noeat strings
"BEGIN" kw
"END" kw
"alias" kw
"and" kw
"begin" kw
"break" kw
"case" kw
"class" kw
"def" kw
"defined" kw
"do" kw
"else" kw
"elsif" kw
"end" kw
"ensure" kw
"false" kw
"for" kw
"if" kw
"in" kw
"module" kw
"next" kw
"nil" kw
"not" kw
"or" kw
"redo" kw
"rescue" kw
"retry" kw
"return" kw
"self" kw
"super" kw
"then" kw
"true" kw
"undef" kw
"unless" kw
"until" kw
"when" kw
"while" kw
"yield" kw
# quasi-keywords (Module or Kernel methods)
"require" kw
"include" kw
"puts" kw
"exit" kw
"attr_accessor" kw
"attr_reader" kw
"attr_writer" kw
done
"a-zA-Z0-9_" ident
:kw Keyword
* rest noeat
:pstring Idle
* match noeat
" " after_term noeat
"xrqQw" match
:match Idle
* inmatch save_c recolor=-1
" " match
:inmatch Constant
* inmatch
& after_term
"\\" inmatch_quote recolor=-1
:inmatch_quote Escape
* inmatch
:subst Idle
* insubst save_c recolor=-1
"<([{`" delim_insubst save_c recolor=-1
" " subst
:insubst Constant
* insubst
& inrepl
"\\" insubst_quote recolor=-1
:insubst_quote Escape
* insubst
:inrepl Constant
* inrepl
& after_term
"\\" inrepl_quote
:inrepl_quote Escape
* inrepl
:delim_insubst Constant
* delim_insubst
& delim_repl
"\\" delim_quote
:delim_quote Escape
* delim_insubst
:delim_repl Constant
* repl save_c recolor=-1
" " delim_repl
:repl Constant
* repl
& after_term
"\\" repl_quote
:repl_quote Escape
* repl
:maybe_symbol Idle
* rest noeat
":" maybe_symbol2
:maybe_symbol2 Idle
* rest noeat
# prevent wrong Module::Member detection
":" rest
# first char mustn't be 0-9
"a-zA-Z_" symbol
# # might be a :"symbol"
# "\""
:symbol Symbol
* rest noeat
"a-zA-Z0-9_" symbol recolor=-3
:proc_arg ProcArg
* rest noeat
"," proc_arg_sep noeat
"a-zA-Z_" proc_arg
:proc_arg_sep Idle
* proc_arg
:class_member1 Idle
* rest noeat
"a-zA-Z_" class_member recolor=-2
"@" class_member2
:class_member2 ClassMember
* rest noeat
"a-zA-Z_" class_member recolor=-3
:class_member ClassMember
* rest noeat
"a-zA-Z0-9_" class_member