# Fancy "sed" highlighter # Bugs: delimiter should be ignored in [...] # # it would be nice if this did more correct # error checking for the sed programmer - =Idle =Comment =String +Constant =StringEscape +Escape =Regex +String =RegexEscape +StringEscape =Bad =Keyword =Delimiter #+Operator +Type =Label +DefinedIdent # Zero address commands: # : } # Zero or one address: = a i q r # Range address: { b t c d D h H g G x l n N p P s w y :idle Idle * cmd noeat " \t" idle "\n" idle "0-9" first_addr recolor=-1 "$" first_eof recolor=-1 "/" first_regex_c recolor=-1 :first_eof String string * first_addr_done noeat :first_regex_c Delimiter * first_regex noeat :first_regex Regex string * first_regex "\\" first_regex_quote recolor=-1 "/" first_regex_e recolor=-1 :first_regex_e Delimiter * first_addr_done noeat :first_regex_quote RegexEscape string * first_regex :first_addr String string * first_addr_done noeat "0-9" first_addr :first_addr_done Idle * cmd noeat "," second_addr_start :second_addr_start Idle * bad noeat "0-9" second_addr recolor=-1 "$" second_eof recolor=-1 "/" second_regex recolor=-1 :second_eof String string * cmd noeat :second_regex Regex string * second_regex "/" cmd :second_addr String string * cmd noeat "0-9" second_addr :bad Bad * bad "\n" idle :cmd Delimiter * the_cmd noeat " \t" cmd "!" the_cmd :the_cmd Idle * bad noeat " \t" the_cmd ";" next noeat "#" comment recolor=-1 "sy" accepts recolor=-1 "{" accepto recolor=-1 "aic" accept recolor=-1 "=}rqbtdDhHgGxlnNpPw" acceptc recolor=-1 ":" label recolor=-1 :accepto Keyword * idle noeat :accept Keyword * next noeat :acceptc Keyword * nextallow noeat :accepts Keyword * subst noeat :label Label * idle noeat "a-zA-Z0-9" label :subst Delimiter * subst_rest save_c :subst_rest String string * subst_rest & subst_rest_2_c recolor=-1 "\\" subst_rest_quote recolor=-1 :subst_rest_quote StringEscape string * subst_rest :subst_rest_2_c Delimiter * subst_rest_2 noeat :subst_rest_2 String string * subst_rest_2 & next_c recolor=-1 "\\" subst_rest_2_quote recolor=-1 :next_c Delimiter * nextallow noeat :subst_rest_2_quote StringEscape string * subst_rest_2 :nextallow Idle * nextallow "\n" idle ";" idle "#" comment recolor=-1 :next Idle * next "\n" idle "\\" continue :continue Idle * next :comment Comment comment * comment "\n" idle