-<?xml version="1.0"?>\r
-<!DOCTYPE MODE SYSTEM "xmode.dtd"><!--\r
- ======================================================================\r
- Edit mode for XSLT 1.0 and XSLT 2.0\r
- ======================================================================\r
- Token types:\r
-\r
- COMMENT1 XML comments\r
- COMMENT2 XPath 2.0 comments - top or nested within COMMENT3\r
- COMMENT3 XPath 2.0 comments - nested within COMMENT2\r
- COMMENT4 Default task names used in Task List\r
- DIGIT Digits\r
- FUNCTION Functions\r
- INVALID -\r
- KEYWORD1 XSLT element names\r
- KEYWORD2 XSLT attribute names\r
- KEYWORD3 Attribute values\r
- KEYWORD4 Axes specifiers\r
- LABEL Namespace prefixes\r
- LITERAL1 String literals\r
- LITERAL2 Parameter and variable references\r
- LITERAL3 Entity references and processing instructions\r
- LITERAL4 DTD constructs and CDATA sections\r
- MARKUP Result elements and extension elements\r
- OPERATOR XPath 2.0 keywords + some other stuff\r
- ======================================================================\r
--->\r
-\r
-<MODE>\r
-\r
- <PROPS>\r
- <PROPERTY NAME="commentStart" VALUE="<!--"/>\r
- <PROPERTY NAME="commentEnd" VALUE="-->"/>\r
- </PROPS>\r
-\r
- <RULES HIGHLIGHT_DIGITS="FALSE" IGNORE_CASE="FALSE">\r
-\r
- <!-- XML comments -->\r
- <SPAN DELEGATE="TASKS" TYPE="COMMENT1">\r
- <BEGIN><!--</BEGIN>\r
- <END>--></END>\r
- </SPAN>\r
-\r
- <!-- Assume 'xsl' prefix for XSLT elements -->\r
- <SPAN_REGEXP HASH_CHAR="<" DELEGATE="XSLTAGS" TYPE="KEYWORD2">\r
- <BEGIN><(?=xsl:)</BEGIN>\r
- <END>></END>\r
- </SPAN_REGEXP>\r
-\r
- <SPAN_REGEXP HASH_CHAR="<" DELEGATE="XSLTAGS" TYPE="KEYWORD2">\r
- <BEGIN><(?=/xsl:)</BEGIN>\r
- <END>></END>\r
- </SPAN_REGEXP>\r
-\r
- <!-- CDATA marked sections. Reuse common xml mode -->\r
- <SPAN TYPE="KEYWORD2" DELEGATE="xml::CDATA">\r
- <BEGIN><![CDATA[</BEGIN>\r
- <END>]]></END>\r
- </SPAN>\r
-\r
- <!-- DTD constructs. Reuse common xml mode -->\r
- <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
- <BEGIN><!</BEGIN>\r
- <END>></END>\r
- </SPAN>\r
-\r
- <!-- Entity references -->\r
- <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
- <BEGIN>&</BEGIN>\r
- <END>;</END>\r
- </SPAN>\r
-\r
- <!-- Processing instructions -->\r
- <SPAN TYPE="LITERAL3">\r
- <BEGIN><?</BEGIN>\r
- <END>?></END>\r
- </SPAN>\r
-\r
- <!-- Result elements and extension elements -->\r
- <SPAN DELEGATE="TAGS" TYPE="MARKUP">\r
- <BEGIN><</BEGIN>\r
- <END>></END>\r
- </SPAN>\r
- </RULES>\r
-\r
- <!-- XML comments -->\r
- <RULES DEFAULT="COMMENT1" IGNORE_CASE="FALSE" SET="TASKS">\r
- <!-- Default task names used in Task List -->\r
- <KEYWORDS>\r
- <COMMENT4>DEBUG:</COMMENT4>\r
- <COMMENT4>DONE:</COMMENT4>\r
- <COMMENT4>FIXME:</COMMENT4>\r
- <COMMENT4>IDEA:</COMMENT4>\r
- <COMMENT4>NOTE:</COMMENT4>\r
- <COMMENT4>QUESTION:</COMMENT4>\r
- <COMMENT4>TODO:</COMMENT4>\r
- <COMMENT4>XXX</COMMENT4>\r
- <COMMENT4>???</COMMENT4>\r
- </KEYWORDS>\r
- </RULES>\r
-\r
- <!-- Result elements and extension elements -->\r
- <RULES DEFAULT="MARKUP" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="TAGS">\r
-\r
- <!-- Highlight all AVTs in result attribute values. -->\r
- <SPAN TYPE="MARKUP" DELEGATE="AVT">\r
- <BEGIN>"</BEGIN>\r
- <END>"</END>\r
- </SPAN>\r
- <SPAN TYPE="MARKUP" DELEGATE="AVT">\r
- <BEGIN>'</BEGIN>\r
- <END>'</END>\r
- </SPAN>\r
-\r
- <!-- Namespace declarations -->\r
- <SEQ TYPE="OPERATOR">xmlns:</SEQ>\r
- <!-- Default namespace declaration. Not really used in XSLT -->\r
- <SEQ TYPE="OPERATOR">xmlns</SEQ>\r
-\r
- <!-- Namespace prefixes -->\r
- <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
-\r
- </RULES>\r
-\r
- <!-- AVTs -->\r
- <RULES DEFAULT="KEYWORD3" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="AVT">\r
-\r
- <!-- Literal curly braces ({}) must be written as {{ or }} -->\r
- <SEQ>{{</SEQ>\r
- <SEQ>}}</SEQ><!-- Does nothing. Is overridden by the SPAN below. -->\r
-\r
- <!-- The AVT itself -->\r
- <SPAN DELEGATE="XPATH" TYPE="OPERATOR">\r
- <BEGIN>{</BEGIN>\r
- <END>}</END>\r
- </SPAN>\r
-\r
- <!-- Entity references -->\r
- <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
- <BEGIN>&</BEGIN>\r
- <END>;</END>\r
- </SPAN>\r
-\r
- </RULES>\r
-\r
- <!-- XSLT tags -->\r
- <RULES DEFAULT="KEYWORD2" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="XSLTAGS">\r
-\r
- <!-- If we spot something that looks like an AVT, assume it is. Lazy, I know... -->\r
- <SPAN TYPE="KEYWORD2" DELEGATE="AVT">\r
- <BEGIN>"</BEGIN>\r
- <END>"</END>\r
- </SPAN>\r
- <SPAN TYPE="KEYWORD2" DELEGATE="AVT">\r
- <BEGIN>'</BEGIN>\r
- <END>'</END>\r
- </SPAN>\r
-\r
- <!-- XSLT attributes that contains XPath expressions or match patterns -->\r
- <!-- count -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="count" DELEGATE="XPATH">\r
- <BEGIN>count[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="count" DELEGATE="XPATH">\r
- <BEGIN>count[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- from -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="from" DELEGATE="XPATH">\r
- <BEGIN>from[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="from" DELEGATE="XPATH">\r
- <BEGIN>from[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- group-adjacent -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-adjacent" DELEGATE="XPATH">\r
- <BEGIN>group-adjacent[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-adjacent" DELEGATE="XPATH">\r
- <BEGIN>group-adjacent[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- group-by -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-by" DELEGATE="XPATH">\r
- <BEGIN>group-by[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-by" DELEGATE="XPATH">\r
- <BEGIN>group-by[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- group-ending-with -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-ending-with" DELEGATE="XPATH">\r
- <BEGIN>group-ending-with[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-ending-with" DELEGATE="XPATH">\r
- <BEGIN>group-ending-with[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- group-starting-with -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-starting-with" DELEGATE="XPATH">\r
- <BEGIN>group-starting-with[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-starting-with" DELEGATE="XPATH">\r
- <BEGIN>group-starting-with[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- match -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="match" DELEGATE="XPATH">\r
- <BEGIN>match[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="match" DELEGATE="XPATH">\r
- <BEGIN>match[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- select -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">\r
- <BEGIN>select[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">\r
- <BEGIN>select[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- test -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="test" DELEGATE="XPATH">\r
- <BEGIN>test[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="test" DELEGATE="XPATH">\r
- <BEGIN>test[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
- <!-- use -->\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="use" DELEGATE="XPATH">\r
- <BEGIN>use[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
- <END>"</END>\r
- </SPAN_REGEXP>\r
- <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="use" DELEGATE="XPATH">\r
- <BEGIN>use[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
- <END>'</END>\r
- </SPAN_REGEXP>\r
-\r
- <!-- Namespace declarations -->\r
- <SEQ TYPE="OPERATOR">xmlns:</SEQ>\r
- <!-- Default namespace declaration. Not really used in XSLT -->\r
- <SEQ TYPE="OPERATOR">xmlns</SEQ>\r
-\r
- <!-- Namespace prefixes -->\r
- <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
-\r
- <!-- XSLT 2.0 element names -->\r
- <KEYWORDS>\r
- <KEYWORD1>analyze-string</KEYWORD1>\r
- <KEYWORD1>apply-imports</KEYWORD1>\r
- <KEYWORD1>apply-templates</KEYWORD1>\r
- <KEYWORD1>attribute</KEYWORD1>\r
- <KEYWORD1>attribute-set</KEYWORD1>\r
- <KEYWORD1>call-template</KEYWORD1>\r
- <KEYWORD1>character-map</KEYWORD1>\r
- <KEYWORD1>choose</KEYWORD1>\r
- <KEYWORD1>comment</KEYWORD1>\r
- <KEYWORD1>copy</KEYWORD1>\r
- <KEYWORD1>copy-of</KEYWORD1>\r
- <KEYWORD1>date-format</KEYWORD1>\r
- <KEYWORD1>decimal-format</KEYWORD1>\r
- <KEYWORD1>element</KEYWORD1>\r
- <KEYWORD1>fallback</KEYWORD1>\r
- <KEYWORD1>for-each</KEYWORD1>\r
- <KEYWORD1>for-each-group</KEYWORD1>\r
- <KEYWORD1>function</KEYWORD1>\r
- <KEYWORD1>if</KEYWORD1>\r
- <KEYWORD1>import</KEYWORD1>\r
- <KEYWORD1>import-schema</KEYWORD1>\r
- <KEYWORD1>include</KEYWORD1>\r
- <KEYWORD1>key</KEYWORD1>\r
- <KEYWORD1>matching-substring</KEYWORD1>\r
- <KEYWORD1>message</KEYWORD1>\r
- <KEYWORD1>namespace</KEYWORD1>\r
- <KEYWORD1>namespace-alias</KEYWORD1>\r
- <KEYWORD1>next-match</KEYWORD1>\r
- <KEYWORD1>non-matching-substring</KEYWORD1>\r
- <KEYWORD1>number</KEYWORD1>\r
- <KEYWORD1>otherwise</KEYWORD1>\r
- <KEYWORD1>output</KEYWORD1>\r
- <KEYWORD1>output-character</KEYWORD1>\r
- <KEYWORD1>param</KEYWORD1>\r
- <KEYWORD1>preserve-space</KEYWORD1>\r
- <KEYWORD1>processing-instruction</KEYWORD1>\r
- <KEYWORD1>result-document</KEYWORD1>\r
- <KEYWORD1>sequence</KEYWORD1>\r
- <KEYWORD1>sort</KEYWORD1>\r
- <KEYWORD1>sort-key</KEYWORD1>\r
- <KEYWORD1>strip-space</KEYWORD1>\r
- <KEYWORD1>stylesheet</KEYWORD1>\r
- <KEYWORD1>template</KEYWORD1>\r
- <KEYWORD1>text</KEYWORD1>\r
- <KEYWORD1>transform</KEYWORD1>\r
- <KEYWORD1>value-of</KEYWORD1>\r
- <KEYWORD1>variable</KEYWORD1>\r
- <KEYWORD1>when</KEYWORD1>\r
- <KEYWORD1>with-param</KEYWORD1>\r
- </KEYWORDS>\r
-\r
- </RULES>\r
-\r
- <RULES DEFAULT="KEYWORD3" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[\p{Digit}]+([\p{Punct}][\p{Digit}]+)?" NO_WORD_SEP=".-_" SET="XPATH">\r
- <!-- String literals -->\r
- <SPAN TYPE="LITERAL1">\r
- <BEGIN>"</BEGIN>\r
- <END>"</END>\r
- </SPAN>\r
- <SPAN TYPE="LITERAL1">\r
- <BEGIN>'</BEGIN>\r
- <END>'</END>\r
- </SPAN>\r
-\r
- <!-- XPath comments -->\r
- <SPAN TYPE="COMMENT2" DELEGATE="XPATHCOMMENT2">\r
- <BEGIN>(:</BEGIN>\r
- <END>:)</END>\r
- </SPAN>\r
-\r
- <!-- Axes specifiers -->\r
- <MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>\r
- <!-- Abbreviated 'attribute::' -->\r
- <SEQ TYPE="KEYWORD4">@</SEQ>\r
-\r
- <!-- XPath 2.0 operators + some other stuff -->\r
- <!-- Comparison expressions -->\r
- <SEQ TYPE="OPERATOR">=</SEQ>\r
- <SEQ TYPE="OPERATOR">!=</SEQ>\r
- <SEQ TYPE="OPERATOR">></SEQ>\r
- <SEQ TYPE="OPERATOR">&gt;</SEQ><!-- Treat as operator -->\r
- <SEQ TYPE="OPERATOR">&lt;</SEQ><!-- Treat as operator -->\r
- <!-- Optional occurrence indicator -->\r
- <SEQ TYPE="OPERATOR">?</SEQ>\r
- <!-- Addition operator, one-or-more occurrence indicator-->\r
- <SEQ TYPE="OPERATOR">+</SEQ>\r
- <!-- Multiplication operator, zero-or-more occurrence indicator, node test -->\r
- <SEQ TYPE="OPERATOR">*</SEQ>\r
- <!-- Path expression step separator -->\r
- <SEQ TYPE="OPERATOR">/</SEQ>\r
- <!-- Union operator -->\r
- <SEQ TYPE="OPERATOR">|</SEQ>\r
- <!-- Sequence expression item separator -->\r
- <SEQ TYPE="OPERATOR">,</SEQ>\r
-\r
- <!-- Predicates -->\r
- <SPAN TYPE="OPERATOR" DELEGATE="XPATH">\r
- <BEGIN>[</BEGIN>\r
- <END>]</END>\r
- </SPAN>\r
-\r
- <!-- Entity references -->\r
- <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
- <BEGIN>&</BEGIN>\r
- <END>;</END>\r
- </SPAN>\r
-\r
- <!-- Namespace prefixes -->\r
- <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
-\r
- <!-- Functions -->\r
- <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
- <SEQ TYPE="OPERATOR">)</SEQ>\r
-\r
- <!-- Variables -->\r
- <MARK_FOLLOWING TYPE="LITERAL2">$</MARK_FOLLOWING>\r
- <!-- XPath 2.0 keywords + some other stuff -->\r
- <KEYWORDS>\r
- <!-- Keywords -->\r
- <OPERATOR>and</OPERATOR>\r
- <OPERATOR>as</OPERATOR>\r
- <OPERATOR>castable</OPERATOR>\r
- <OPERATOR>div</OPERATOR>\r
- <OPERATOR>else</OPERATOR>\r
- <OPERATOR>eq</OPERATOR>\r
- <OPERATOR>every</OPERATOR>\r
- <OPERATOR>except</OPERATOR>\r
- <OPERATOR>for</OPERATOR>\r
- <OPERATOR>ge</OPERATOR>\r
- <OPERATOR>gt</OPERATOR>\r
- <OPERATOR>idiv</OPERATOR>\r
- <OPERATOR>if</OPERATOR>\r
- <OPERATOR>in</OPERATOR>\r
- <OPERATOR>instance</OPERATOR>\r
- <OPERATOR>intersect</OPERATOR>\r
- <OPERATOR>is</OPERATOR>\r
- <OPERATOR>isnot</OPERATOR>\r
- <OPERATOR>le</OPERATOR>\r
- <OPERATOR>lt</OPERATOR>\r
- <OPERATOR>mod</OPERATOR>\r
- <OPERATOR>nillable</OPERATOR>\r
- <OPERATOR>ne</OPERATOR>\r
- <OPERATOR>of</OPERATOR>\r
- <OPERATOR>or</OPERATOR>\r
- <OPERATOR>return</OPERATOR>\r
- <OPERATOR>satisfies</OPERATOR>\r
- <OPERATOR>some</OPERATOR>\r
- <OPERATOR>then</OPERATOR>\r
- <OPERATOR>to</OPERATOR>\r
- <OPERATOR>treat</OPERATOR>\r
- <OPERATOR>union</OPERATOR>\r
-\r
- <!-- Subtraction operator -->\r
- <OPERATOR>-</OPERATOR>\r
-\r
- </KEYWORDS>\r
-\r
- </RULES>\r
-\r
- <!-- XPath comments - top or nested within COMMENT3 -->\r
- <RULES DEFAULT="COMMENT2" SET="XPATHCOMMENT2">\r
- <SPAN TYPE="COMMENT3" DELEGATE="XPATHCOMMENT3">\r
- <BEGIN>(:</BEGIN>\r
- <END>:)</END>\r
- </SPAN>\r
- </RULES>\r
-\r
- <!-- XPath comments - nested within COMMENT2 -->\r
- <RULES DEFAULT="COMMENT3" SET="XPATHCOMMENT3">\r
- <SPAN TYPE="COMMENT2" DELEGATE="XPATHCOMMENT2">\r
- <BEGIN>(:</BEGIN>\r
- <END>:)</END>\r
- </SPAN>\r
- </RULES>\r
-\r
-</MODE>\r
+<?xml version="1.0"?>
+<!DOCTYPE MODE SYSTEM "xmode.dtd"><!--
+ ======================================================================
+ Edit mode for XSLT 1.0 and XSLT 2.0
+ ======================================================================
+ Token types:
+
+ COMMENT1 XML comments
+ COMMENT2 XPath 2.0 comments - top or nested within COMMENT3
+ COMMENT3 XPath 2.0 comments - nested within COMMENT2
+ COMMENT4 Default task names used in Task List
+ DIGIT Digits
+ FUNCTION Functions
+ INVALID -
+ KEYWORD1 XSLT element names
+ KEYWORD2 XSLT attribute names
+ KEYWORD3 Attribute values
+ KEYWORD4 Axes specifiers
+ LABEL Namespace prefixes
+ LITERAL1 String literals
+ LITERAL2 Parameter and variable references
+ LITERAL3 Entity references and processing instructions
+ LITERAL4 DTD constructs and CDATA sections
+ MARKUP Result elements and extension elements
+ OPERATOR XPath 2.0 keywords + some other stuff
+ ======================================================================
+-->
+
+<MODE>
+
+ <PROPS>
+ <PROPERTY NAME="commentStart" VALUE="<!--"/>
+ <PROPERTY NAME="commentEnd" VALUE="-->"/>
+ </PROPS>
+
+ <RULES HIGHLIGHT_DIGITS="FALSE" IGNORE_CASE="FALSE">
+
+ <!-- XML comments -->
+ <SPAN DELEGATE="TASKS" TYPE="COMMENT1">
+ <BEGIN><!--</BEGIN>
+ <END>--></END>
+ </SPAN>
+
+ <!-- Assume 'xsl' prefix for XSLT elements -->
+ <SPAN_REGEXP HASH_CHAR="<" DELEGATE="XSLTAGS" TYPE="KEYWORD2">
+ <BEGIN><(?=xsl:)</BEGIN>
+ <END>></END>
+ </SPAN_REGEXP>
+
+ <SPAN_REGEXP HASH_CHAR="<" DELEGATE="XSLTAGS" TYPE="KEYWORD2">
+ <BEGIN><(?=/xsl:)</BEGIN>
+ <END>></END>
+ </SPAN_REGEXP>
+
+ <!-- CDATA marked sections. Reuse common xml mode -->
+ <SPAN TYPE="KEYWORD2" DELEGATE="xml::CDATA">
+ <BEGIN><![CDATA[</BEGIN>
+ <END>]]></END>
+ </SPAN>
+
+ <!-- DTD constructs. Reuse common xml mode -->
+ <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">
+ <BEGIN><!</BEGIN>
+ <END>></END>
+ </SPAN>
+
+ <!-- Entity references -->
+ <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">
+ <BEGIN>&</BEGIN>
+ <END>;</END>
+ </SPAN>
+
+ <!-- Processing instructions -->
+ <SPAN TYPE="LITERAL3">
+ <BEGIN><?</BEGIN>
+ <END>?></END>
+ </SPAN>
+
+ <!-- Result elements and extension elements -->
+ <SPAN DELEGATE="TAGS" TYPE="MARKUP">
+ <BEGIN><</BEGIN>
+ <END>></END>
+ </SPAN>
+ </RULES>
+
+ <!-- XML comments -->
+ <RULES DEFAULT="COMMENT1" IGNORE_CASE="FALSE" SET="TASKS">
+ <!-- Default task names used in Task List -->
+ <KEYWORDS>
+ <COMMENT4>DEBUG:</COMMENT4>
+ <COMMENT4>DONE:</COMMENT4>
+ <COMMENT4>FIXME:</COMMENT4>
+ <COMMENT4>IDEA:</COMMENT4>
+ <COMMENT4>NOTE:</COMMENT4>
+ <COMMENT4>QUESTION:</COMMENT4>
+ <COMMENT4>TODO:</COMMENT4>
+ <COMMENT4>XXX</COMMENT4>
+ <COMMENT4>???</COMMENT4>
+ </KEYWORDS>
+ </RULES>
+
+ <!-- Result elements and extension elements -->
+ <RULES DEFAULT="MARKUP" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="TAGS">
+
+ <!-- Highlight all AVTs in result attribute values. -->
+ <SPAN TYPE="MARKUP" DELEGATE="AVT">
+ <BEGIN>"</BEGIN>
+ <END>"</END>
+ </SPAN>
+ <SPAN TYPE="MARKUP" DELEGATE="AVT">
+ <BEGIN>'</BEGIN>
+ <END>'</END>
+ </SPAN>
+
+ <!-- Namespace declarations -->
+ <SEQ TYPE="OPERATOR">xmlns:</SEQ>
+ <!-- Default namespace declaration. Not really used in XSLT -->
+ <SEQ TYPE="OPERATOR">xmlns</SEQ>
+
+ <!-- Namespace prefixes -->
+ <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>
+
+ </RULES>
+
+ <!-- AVTs -->
+ <RULES DEFAULT="KEYWORD3" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="AVT">
+
+ <!-- Literal curly braces ({}) must be written as {{ or }} -->
+ <SEQ>{{</SEQ>
+ <SEQ>}}</SEQ><!-- Does nothing. Is overridden by the SPAN below. -->
+
+ <!-- The AVT itself -->
+ <SPAN DELEGATE="XPATH" TYPE="OPERATOR">
+ <BEGIN>{</BEGIN>
+ <END>}</END>
+ </SPAN>
+
+ <!-- Entity references -->
+ <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">
+ <BEGIN>&</BEGIN>
+ <END>;</END>
+ </SPAN>
+
+ </RULES>
+
+ <!-- XSLT tags -->
+ <RULES DEFAULT="KEYWORD2" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="XSLTAGS">
+
+ <!-- If we spot something that looks like an AVT, assume it is. Lazy, I know... -->
+ <SPAN TYPE="KEYWORD2" DELEGATE="AVT">
+ <BEGIN>"</BEGIN>
+ <END>"</END>
+ </SPAN>
+ <SPAN TYPE="KEYWORD2" DELEGATE="AVT">
+ <BEGIN>'</BEGIN>
+ <END>'</END>
+ </SPAN>
+
+ <!-- XSLT attributes that contains XPath expressions or match patterns -->
+ <!-- count -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="count" DELEGATE="XPATH">
+ <BEGIN>count[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="count" DELEGATE="XPATH">
+ <BEGIN>count[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- from -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="from" DELEGATE="XPATH">
+ <BEGIN>from[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="from" DELEGATE="XPATH">
+ <BEGIN>from[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- group-adjacent -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-adjacent" DELEGATE="XPATH">
+ <BEGIN>group-adjacent[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-adjacent" DELEGATE="XPATH">
+ <BEGIN>group-adjacent[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- group-by -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-by" DELEGATE="XPATH">
+ <BEGIN>group-by[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-by" DELEGATE="XPATH">
+ <BEGIN>group-by[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- group-ending-with -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-ending-with" DELEGATE="XPATH">
+ <BEGIN>group-ending-with[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-ending-with" DELEGATE="XPATH">
+ <BEGIN>group-ending-with[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- group-starting-with -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-starting-with" DELEGATE="XPATH">
+ <BEGIN>group-starting-with[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-starting-with" DELEGATE="XPATH">
+ <BEGIN>group-starting-with[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- match -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="match" DELEGATE="XPATH">
+ <BEGIN>match[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="match" DELEGATE="XPATH">
+ <BEGIN>match[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- select -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">
+ <BEGIN>select[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">
+ <BEGIN>select[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- test -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="test" DELEGATE="XPATH">
+ <BEGIN>test[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="test" DELEGATE="XPATH">
+ <BEGIN>test[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- use -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="use" DELEGATE="XPATH">
+ <BEGIN>use[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="use" DELEGATE="XPATH">
+ <BEGIN>use[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+ <!-- value -->
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="value" DELEGATE="XPATH">
+ <BEGIN>value[\p{Space}]*=[\p{Space}]*"</BEGIN>
+ <END>"</END>
+ </SPAN_REGEXP>
+ <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">
+ <BEGIN>select[\p{Space}]*=[\p{Space}]*'</BEGIN>
+ <END>'</END>
+ </SPAN_REGEXP>
+
+ <!-- Namespace declarations -->
+ <SEQ TYPE="OPERATOR">xmlns:</SEQ>
+ <!-- Default namespace declaration. Not really used in XSLT -->
+ <SEQ TYPE="OPERATOR">xmlns</SEQ>
+
+ <!-- Namespace prefixes -->
+ <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>
+
+ <!-- XSLT 2.0 element names -->
+ <KEYWORDS>
+ <KEYWORD1>analyze-string</KEYWORD1>
+ <KEYWORD1>apply-imports</KEYWORD1>
+ <KEYWORD1>apply-templates</KEYWORD1>
+ <KEYWORD1>attribute</KEYWORD1>
+ <KEYWORD1>attribute-set</KEYWORD1>
+ <KEYWORD1>call-template</KEYWORD1>
+ <KEYWORD1>character-map</KEYWORD1>
+ <KEYWORD1>choose</KEYWORD1>
+ <KEYWORD1>comment</KEYWORD1>
+ <KEYWORD1>copy</KEYWORD1>
+ <KEYWORD1>copy-of</KEYWORD1>
+ <KEYWORD1>decimal-format</KEYWORD1>
+ <KEYWORD1>document</KEYWORD1>
+ <KEYWORD1>element</KEYWORD1>
+ <KEYWORD1>fallback</KEYWORD1>
+ <KEYWORD1>for-each</KEYWORD1>
+ <KEYWORD1>for-each-group</KEYWORD1>
+ <KEYWORD1>function</KEYWORD1>
+ <KEYWORD1>if</KEYWORD1>
+ <KEYWORD1>import</KEYWORD1>
+ <KEYWORD1>import-schema</KEYWORD1>
+ <KEYWORD1>include</KEYWORD1>
+ <KEYWORD1>key</KEYWORD1>
+ <KEYWORD1>matching-substring</KEYWORD1>
+ <KEYWORD1>message</KEYWORD1>
+ <KEYWORD1>namespace</KEYWORD1>
+ <KEYWORD1>namespace-alias</KEYWORD1>
+ <KEYWORD1>next-match</KEYWORD1>
+ <KEYWORD1>non-matching-substring</KEYWORD1>
+ <KEYWORD1>number</KEYWORD1>
+ <KEYWORD1>otherwise</KEYWORD1>
+ <KEYWORD1>output</KEYWORD1>
+ <KEYWORD1>output-character</KEYWORD1>
+ <KEYWORD1>param</KEYWORD1>
+ <KEYWORD1>perform-sort</KEYWORD1>
+ <KEYWORD1>preserve-space</KEYWORD1>
+ <KEYWORD1>processing-instruction</KEYWORD1>
+ <KEYWORD1>result-document</KEYWORD1>
+ <KEYWORD1>sequence</KEYWORD1>
+ <KEYWORD1>sort</KEYWORD1>
+ <KEYWORD1>strip-space</KEYWORD1>
+ <KEYWORD1>stylesheet</KEYWORD1>
+ <KEYWORD1>template</KEYWORD1>
+ <KEYWORD1>text</KEYWORD1>
+ <KEYWORD1>transform</KEYWORD1>
+ <KEYWORD1>value-of</KEYWORD1>
+ <KEYWORD1>variable</KEYWORD1>
+ <KEYWORD1>when</KEYWORD1>
+ <KEYWORD1>with-param</KEYWORD1>
+ </KEYWORDS>
+
+ </RULES>
+
+ <RULES DEFAULT="KEYWORD3" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[\p{Digit}]+([\p{Punct}][\p{Digit}]+)?" NO_WORD_SEP=".-_" SET="XPATH">
+ <!-- String literals -->
+ <SPAN TYPE="LITERAL1">
+ <BEGIN>"</BEGIN>
+ <END>"</END>
+ </SPAN>
+ <SPAN TYPE="LITERAL1">
+ <BEGIN>'</BEGIN>
+ <END>'</END>
+ </SPAN>
+
+ <!-- XPath comments -->
+ <SPAN TYPE="COMMENT2" DELEGATE="XPATHCOMMENT2">
+ <BEGIN>(:</BEGIN>
+ <END>:)</END>
+ </SPAN>
+
+ <!-- Axes specifiers -->
+ <MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>
+ <!-- Abbreviated 'attribute::' -->
+ <SEQ TYPE="KEYWORD4">@</SEQ>
+
+ <!-- XPath 2.0 operators + some other stuff -->
+ <!-- Comparison expressions -->
+ <SEQ TYPE="OPERATOR">=</SEQ>
+ <SEQ TYPE="OPERATOR">!=</SEQ>
+ <SEQ TYPE="OPERATOR">></SEQ>
+ <SEQ TYPE="OPERATOR">&gt;</SEQ><!-- Treat as operator -->
+ <SEQ TYPE="OPERATOR">&lt;</SEQ><!-- Treat as operator -->
+ <!-- Optional occurrence indicator -->
+ <SEQ TYPE="OPERATOR">?</SEQ>
+ <!-- Addition operator, one-or-more occurrence indicator-->
+ <SEQ TYPE="OPERATOR">+</SEQ>
+ <!-- Multiplication operator, zero-or-more occurrence indicator, node test -->
+ <SEQ TYPE="OPERATOR">*</SEQ>
+ <!-- Path expression step separator -->
+ <SEQ TYPE="OPERATOR">/</SEQ>
+ <!-- Union operator -->
+ <SEQ TYPE="OPERATOR">|</SEQ>
+ <!-- Sequence expression item separator -->
+ <SEQ TYPE="OPERATOR">,</SEQ>
+
+ <!-- Predicates -->
+ <SPAN TYPE="OPERATOR" DELEGATE="XPATH">
+ <BEGIN>[</BEGIN>
+ <END>]</END>
+ </SPAN>
+
+ <!-- Entity references -->
+ <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">
+ <BEGIN>&</BEGIN>
+ <END>;</END>
+ </SPAN>
+
+ <!-- Namespace prefixes -->
+ <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>
+
+ <!-- Functions -->
+ <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
+ <SEQ TYPE="OPERATOR">)</SEQ>
+
+ <!-- Variables -->
+ <MARK_FOLLOWING TYPE="LITERAL2">$</MARK_FOLLOWING>
+ <!-- XPath 2.0 keywords + some other stuff -->
+ <KEYWORDS>
+ <!-- Keywords -->
+ <OPERATOR>and</OPERATOR>
+ <OPERATOR>as</OPERATOR>
+ <OPERATOR>castable</OPERATOR>
+ <OPERATOR>div</OPERATOR>
+ <OPERATOR>else</OPERATOR>
+ <OPERATOR>eq</OPERATOR>
+ <OPERATOR>every</OPERATOR>
+ <OPERATOR>except</OPERATOR>
+ <OPERATOR>for</OPERATOR>
+ <OPERATOR>ge</OPERATOR>
+ <OPERATOR>gt</OPERATOR>
+ <OPERATOR>idiv</OPERATOR>
+ <OPERATOR>if</OPERATOR>
+ <OPERATOR>in</OPERATOR>
+ <OPERATOR>instance</OPERATOR>
+ <OPERATOR>intersect</OPERATOR>
+ <OPERATOR>is</OPERATOR>
+ <OPERATOR>isnot</OPERATOR>
+ <OPERATOR>le</OPERATOR>
+ <OPERATOR>lt</OPERATOR>
+ <OPERATOR>mod</OPERATOR>
+ <OPERATOR>nillable</OPERATOR>
+ <OPERATOR>ne</OPERATOR>
+ <OPERATOR>of</OPERATOR>
+ <OPERATOR>or</OPERATOR>
+ <OPERATOR>return</OPERATOR>
+ <OPERATOR>satisfies</OPERATOR>
+ <OPERATOR>some</OPERATOR>
+ <OPERATOR>then</OPERATOR>
+ <OPERATOR>to</OPERATOR>
+ <OPERATOR>treat</OPERATOR>
+ <OPERATOR>union</OPERATOR>
+
+ <!-- Subtraction operator -->
+ <OPERATOR>-</OPERATOR>
+
+ </KEYWORDS>
+
+ </RULES>
+
+ <!-- XPath comments - top or nested within COMMENT3 -->
+ <RULES DEFAULT="COMMENT2" SET="XPATHCOMMENT2">
+ <SPAN TYPE="COMMENT3" DELEGATE="XPATHCOMMENT3">
+ <BEGIN>(:</BEGIN>
+ <END>:)</END>
+ </SPAN>
+ </RULES>
+
+ <!-- XPath comments - nested within COMMENT2 -->
+ <RULES DEFAULT="COMMENT3" SET="XPATHCOMMENT3">
+ <SPAN TYPE="COMMENT2" DELEGATE="XPATHCOMMENT2">
+ <BEGIN>(:</BEGIN>
+ <END>:)</END>
+ </SPAN>
+ </RULES>
+
+</MODE>
+
+