$(IDENT)=[a-zA-Z0-9:_][a-zA-Z0-9-:_.·]*
prolog{Prolog=Preprocessor}:
  from /^<\?xml/ to /\?>/
comment:
  from <!-- to -->
cdata{CData=Constant}:
  from <![CDATA[ to ]]>
  cdata.contents{Normal}:
    match *
entity{Entity}:
  match /&[A-Za-z]+;/
  match /&#[0-9]+;/
markup{Markup}:
  from /<$(IDENT)/ to //?>/
  attribute{Attribute}:
    match /$(IDENT)/
  equal{Normal}:
    symbol =
  value{Value}:
    from " to "
    from ' to '
    string.entity{Entity}:
      match /&[A-Za-z]+;/
      match /&#[0-9]+;/
  value.unquoted{Value}:
    match /[^"'`=<>\s]+/
markup.close{Markup}:
  match /</$(IDENT)\s*>/
