# Improved XML highlighter by: Brian Candler # Incorporated some Ant logic from Christian Nicolai (http://mycrobase.de) =Idle =Bad =Tag +DefinedFunction +DefinedIdent =TagName +Tag =TagEnd +Tag =Attr +Type =Constant =String +Constant =Entity +Escape =StringEntity +StringEscape +Entity =Namespace +Comment =Decl +Preproc +Tag =Comment =CommentEdge +Comment =PIStart +Preproc +Tag =PIBody +Comment =PIEnd +Preproc +Tag =CdataEdge +Statement =CdataBody +String =Keyword # http://www.w3.org/TR/2004/REC-xml-20040204/ # # NOTE: For UNICODE compatibility, the ranges # "A-Za-z_:" -- first character of Name # "A-Za-z0-9._:-" -- subsequent characters of Name # ought to be replaced with some appropriate Unicode character classes # # Actually the standard tells you which characters to use, see: # http://www.w3.org/TR/xml11/#NT-NameStartChar :init Idle * idle noeat call=.xml() .subr xml :content Idle * content "<" tag recolor=-1 "&" entityref recolor=-1 # > is allowed # ">" error noeat recolor=-1 # In several contexts a space is an error, and since a coloured space is # not visible, we colour the next non-space character as well. :error Bad * error_visible noeat recolor=-1 " \t\r\n" error :error_visible Bad * content # Matched: & :entityref Entity * error noeat recolor=-1 "-.:\c" entityref "#" entityref ";" content # Matched: < :tag Tag * error noeat recolor=-1 "/" end_tag recolor=-2 mark ":\i" start_or_empty_tag recolor=-1 mark buffer "?" pi_start recolor=-2 "!" decl recolor=-2 buffer # Matched: " close_tag_end noeat :end_tag2_sp TagEnd * end_tag3 noeat :end_tag3 TagEnd * error noeat recolor=-1 " \t\r\n" end_tag3_sp recolor=-1 ">" close_tag_end noeat :end_tag3_sp TagEnd * end_tag_3 noeat # Matched: " close_tag noeat :tag_namespace Namespace * start_or_empty_tag noeat buffer :start_or_empty_tag_sp Idle * tag_space noeat # Matched: " close_tag noeat # Matched: " close_tag noeat :tag_space_sp Idle * tag_space mark noeat # Matched: " error noeat recolor=-1 :bstring String string * bstring "<" error noeat recolor=-1 "&" bchar recolor=-1 "'" endstring .ifdef ant "$" bstring call=ant.maybe_antvar() .endif # ">" error noeat recolor=-1 :achar StringEntity string * error noeat recolor=-1 "-.:\c" achar "#" achar ";" astring :bchar Entity * error noeat recolor=-1 "-.:\c" bchar "#" bchar ";" bstring # Matched: " close_tag noeat # This state is just to recolor the final ">" at the end of :close_tag Tag * content :close_tag_end TagEnd * content # Matched: " pi_end recolor=-2 :pi_end PIEnd * content noeat recolor=-1 # Matched: " content # We allow one level of <...> nesting within declarations :decl_nest Decl * decl_nest ">" decl # Matched: