313 lines
5.4 KiB
Plaintext
313 lines
5.4 KiB
Plaintext
# Improved XML highlighter by: Brian Candler <B.Candler@pobox.com>
|
|
# 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: </
|
|
|
|
:end_tag TagEnd
|
|
* error noeat recolor=-1
|
|
":\i" end_tag2 recolor=-1
|
|
|
|
:end_tag2 TagEnd
|
|
* error noeat recolor=-1
|
|
"-.:\c" end_tag2
|
|
" \t\r\n" end_tag2_sp recolor=-1
|
|
">" 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: <tag
|
|
|
|
:start_or_empty_tag TagName
|
|
.ifdef ant
|
|
* decide_tag_type noeat strings
|
|
"target" kw
|
|
done
|
|
.else
|
|
* decide_tag_type noeat
|
|
.endif
|
|
":" tag_namespace markend recolormark recolor=-1
|
|
"-.\c" start_or_empty_tag
|
|
|
|
:kw Keyword
|
|
* decide_tag_type noeat
|
|
|
|
:decide_tag_type TagName
|
|
* error noeat recolor=-1
|
|
"/" empty_tag mark
|
|
" \t\r\n" start_or_empty_tag_sp markend buffer recolor=-1
|
|
">" close_tag noeat
|
|
|
|
:tag_namespace Namespace
|
|
* start_or_empty_tag noeat buffer
|
|
|
|
:start_or_empty_tag_sp Idle
|
|
* tag_space noeat
|
|
|
|
# Matched: <tag/
|
|
|
|
:empty_tag Tag
|
|
* error noeat recolor=-1
|
|
">" close_tag noeat
|
|
|
|
# Matched: <tag SPACE
|
|
|
|
:tag_space Attr
|
|
* error noeat recolor=-1
|
|
" \t\r\n" tag_space_sp recolor=-1
|
|
":\i" attr mark
|
|
"/" empty_tag recolor=-1
|
|
">" close_tag noeat
|
|
|
|
:tag_space_sp Idle
|
|
* tag_space mark noeat
|
|
|
|
# Matched: <tag attr
|
|
|
|
:attr Attr
|
|
* error noeat recolor=-1
|
|
":" attr_namespace markend recolormark recolor=-1
|
|
"-.\c" attr
|
|
" \t\r\n" attr_sp recolor=-1
|
|
"=" string
|
|
|
|
:attr_namespace Namespace
|
|
* attr noeat
|
|
|
|
:attr_sp Idle
|
|
* attr_before noeat
|
|
|
|
:attr_before Attr
|
|
* error noeat recolor=-1
|
|
" \t\r\n" attr_sp recolor=-1
|
|
"=" string
|
|
|
|
# Matched: <tag attr=
|
|
|
|
:string Attr
|
|
* error noeat recolor=-1
|
|
" \t\r\n" string_sp recolor=-1
|
|
"\"" astring recolor=-1
|
|
"'" bstring recolor=-1
|
|
|
|
:string_sp Idle
|
|
* string noeat
|
|
|
|
# Matched: <tag attr="
|
|
|
|
:astring String string
|
|
* astring
|
|
"<" error noeat recolor=-1
|
|
"&" achar recolor=-1
|
|
"\"" endstring
|
|
.ifdef ant
|
|
"$" astring call=ant.antvar() recolor=-1
|
|
.endif
|
|
|
|
# ">" 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: <tag attr="foo"
|
|
|
|
:endstring Attr
|
|
* error noeat recolor=-1
|
|
" \t\r\n" tag_space_sp
|
|
"/" empty_tag recolor=-1
|
|
">" close_tag noeat
|
|
|
|
# This state is just to recolor the final ">" at the end of <tag attr="val">
|
|
|
|
:close_tag Tag
|
|
* content
|
|
|
|
:close_tag_end TagEnd
|
|
* content
|
|
|
|
# Matched: <?
|
|
|
|
:pi_start PIStart
|
|
* pi noeat recolor=-1
|
|
|
|
:pi PIBody
|
|
* pi
|
|
"?" pi2
|
|
|
|
:pi2 PIBody
|
|
* pi
|
|
">" pi_end recolor=-2
|
|
|
|
:pi_end PIEnd
|
|
* content noeat recolor=-1
|
|
|
|
# Matched: <!
|
|
|
|
:decl Decl
|
|
* decl strings
|
|
"!--" comment_start recolor=-5
|
|
"![CDATA[" cdata_start recolor=-10
|
|
done
|
|
# "<" decl_nest
|
|
">" content
|
|
|
|
# We allow one level of <...> nesting within declarations
|
|
|
|
:decl_nest Decl
|
|
* decl_nest
|
|
">" decl
|
|
|
|
# Matched: <!--
|
|
|
|
:comment_start CommentEdge
|
|
* comment noeat
|
|
|
|
:comment Comment comment
|
|
* comment
|
|
"BFHNTX" comment noeat call=comment_todo.comment_todo()
|
|
"-" comment2
|
|
|
|
:comment2 Comment comment
|
|
* comment
|
|
"-" comment3
|
|
|
|
:comment3 Comment comment
|
|
* comment_error noeat recolor=-3
|
|
">" comment_end recolor=-3
|
|
|
|
:comment_end CommentEdge
|
|
* content noeat recolor=-1
|
|
|
|
# For compatibility, the string "--" (double-hyphen) MUST NOT occur within
|
|
# comments. [http://www.w3.org/TR/REC-xml/ section 2.5]
|
|
|
|
:comment_error Bad
|
|
* comment
|
|
"-" comment_error
|
|
">" comment_end recolor=-3
|
|
|
|
# Matched: <![CDATA[
|
|
|
|
:cdata_start CdataEdge
|
|
* cdata noeat
|
|
|
|
:cdata CdataBody
|
|
* cdata
|
|
"]" cdata2
|
|
|
|
:cdata2 CdataBody
|
|
* cdata
|
|
"]" cdata3
|
|
|
|
:cdata3 CdataBody
|
|
* cdata
|
|
"]" cdata3
|
|
">" cdata_end recolor=-3
|
|
|
|
:cdata_end CdataEdge
|
|
* content noeat recolor=-1
|
|
|
|
.end
|