From: Slava P. <sl...@je...> - 2003-10-13 22:08:52
|
Hi, This mode will replace the XSL mode in 4.2pre6. On Wed, 2003-09-10 at 04:06, Magnus Henriksson (M=D6/EAB) wrote: > Hi, >=20 > I have made an alternative (or updated) XSL edit mode for JEdit42pre. Cov= ers XSLT 1.0 and 2.0 (W3C Working Draft 2 May 2003) incl. XPATH 2.0 (W3C Wo= rking Draft 22 August 2003). >=20 > This is my first attempt to write an edit mode, so there is most likely r= oom for improvement. Do with it as you please, it works for me. >=20 > xsl.xml follows: >=20 >=20 >=20 >=20 > <?xml version=3D"1.0"?> > <!DOCTYPE MODE SYSTEM "xmode.dtd"> > <!--=20 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Edit mode for XSLT 1.0 and XSLT 2.0 (W3C Working Draft 2 May 2003) > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Token types: >=20 > COMMENT1 XML comments > COMMENT2 XPath 2.0 comments - top or nested within COMMENT3 > COMMENT3 XPath 2.0 comments - nested within COMMENT2 > COMMENT4 - > DIGIT Digits > FUNCTION Functions > INVALID - > KEYWORD1 XSLT 2.0 tags > KEYWORD2 Attribute values and DTD constructs (not CDATA sections) > KEYWORD3 Axes specifiers > KEYWORD4 CDATA sections > LABEL Namespace prefixes > LITERAL1 String literals and CDATA section content > LITERAL2 Parameter and variable references > LITERAL3 Entity references > LITERAL4 Processing instructions > MARKUP Result elements and extension elements > OPERATOR XPath 2.0 keywords + some other stuff > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --> >=20 > <MODE> > =09 > <PROPS> > <PROPERTY NAME=3D"commentStart" VALUE=3D"<!--"/> > <PROPERTY NAME=3D"commentEnd" VALUE=3D"-->"/> > </PROPS> > =09 > <RULES HIGHLIGHT_DIGITS=3D"FALSE" IGNORE_CASE=3D"FALSE"> >=20 > <!-- XML comments --> > <SPAN TYPE=3D"COMMENT1"> > <BEGIN><!--</BEGIN> > <END>--></END> > </SPAN> > =09 > <!-- CDATA sections --> > <SPAN TYPE=3D"KEYWORD4" DELEGATE=3D"CDATA"> > <BEGIN><![CDATA[</BEGIN> > <END>]]></END> > </SPAN> > =09 > <!-- DTD constructs --> > <SPAN TYPE=3D"KEYWORD2" DELEGATE=3D"xml::DTD-TAGS"> > <BEGIN><!</BEGIN> > <END>></END> > </SPAN> >=20 > <!-- Processing instructions --> > <SPAN TYPE=3D"LITERAL4"> > <BEGIN><?</BEGIN> > <END>?></END> > </SPAN> > =09 > <!-- Tags --> > <SPAN TYPE=3D"MARKUP" DELEGATE=3D"TAGS"> > <BEGIN><</BEGIN> > <END>></END> > </SPAN> >=20 > <!-- Entity references --> > <SPAN TYPE=3D"LITERAL3" NO_WORD_BREAK=3D"TRUE"> > <BEGIN>&</BEGIN> > <END>;</END> > </SPAN> > =09 > </RULES> > =09 > <!-- CDATA content. No rules, just highlight as LITERAL1 --> > <RULES SET=3D"CDATA" DEFAULT=3D"LITERAL1"/> > =09 > <!-- All tags --> > <RULES DEFAULT=3D"MARKUP" HIGHLIGHT_DIGITS=3D"FALSE" NO_WORD_SEP=3D".-_:= " SET=3D"TAGS"> > =09 > <!-- Assume 'xsl' prefix for XSLT elements --> > <SEQ DELEGATE=3D"XSLTAGS" TYPE=3D"LABEL">xsl:</SEQ> > =09 > <!-- Highlight all AVTs in result attribute values. XPaths in extension= elements are not highlighted. --> > <SPAN TYPE=3D"MARKUP" DELEGATE=3D"AVT"> > <BEGIN>"</BEGIN> > <END>"</END> > </SPAN> > <SPAN TYPE=3D"MARKUP" DELEGATE=3D"AVT"> > <BEGIN>'</BEGIN> > <END>'</END> > </SPAN> > =09 > <!-- Namespace declarations --> > <SEQ TYPE=3D"OPERATOR">xmlns:</SEQ> > <!-- Default namespace declaration. Not really used in XSLT --> > <SEQ TYPE=3D"OPERATOR">xmlns</SEQ> > =09 > <!-- Namespace prefixes --> > <MARK_PREVIOUS EXCLUDE_MATCH=3D"FALSE" TYPE=3D"LABEL">:</MARK_PREVIOUS> > =09 > </RULES> > =09 > <!-- AVTs --> > <RULES DEFAULT=3D"KEYWORD2" HIGHLIGHT_DIGITS=3D"FALSE" NO_WORD_SEP=3D".-= _:" SET=3D"AVT"> > =09 > <!-- Literal curly braces ({}) must be written as {{ or }} --> > <SEQ>{{</SEQ> > <SEQ>}}</SEQ><!-- Does nothing. Is overridden by the SPAN below. --> > =09 > <!-- The AVT itself --> > <SPAN DELEGATE=3D"XPATH" TYPE=3D"OPERATOR"> > <BEGIN>{</BEGIN> > <END>}</END> > </SPAN> > =09 > <!-- Entity references --> > <SPAN TYPE=3D"LITERAL3" NO_WORD_BREAK=3D"TRUE"> > <BEGIN>&</BEGIN> > <END>;</END> > </SPAN> > =09 > </RULES> > =09 > <!-- XSLT tags --> > <RULES DEFAULT=3D"MARKUP" HIGHLIGHT_DIGITS=3D"FALSE" NO_WORD_SEP=3D".-_:= " SET=3D"XSLTAGS"> > =09 > <!-- If we spot something that looks like an AVT, assume it is. Lazy, I= know... --> > <SPAN TYPE=3D"MARKUP" DELEGATE=3D"AVT"> > <BEGIN>"</BEGIN> > <END>"</END> > </SPAN> > <SPAN TYPE=3D"MARKUP" DELEGATE=3D"AVT"> > <BEGIN>'</BEGIN> > <END>'</END> > </SPAN> > =09 > <!-- XSLT attributes that contains XPath expressions or match patterns = --> > <!-- count --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"c" DELEGATE=3D"XPATH"> > <BEGIN>count[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"c" DELEGATE=3D"XPATH"> > <BEGIN>count[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- from --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"f" DELEGATE=3D"XPATH"> > <BEGIN>from[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"f" DELEGATE=3D"XPATH"> > <BEGIN>from[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- group-adjacent --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"g" DELEGATE=3D"XPATH"> > <BEGIN>group-adjacent[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"g" DELEGATE=3D"XPATH"> > <BEGIN>group-adjacent[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- group-by --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"g" DELEGATE=3D"XPATH"> > <BEGIN>group-by[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"g" DELEGATE=3D"XPATH"> > <BEGIN>group-by[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- group-ending-with --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"g" DELEGATE=3D"XPATH"> > <BEGIN>group-ending-with[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"g" DELEGATE=3D"XPATH"> > <BEGIN>group-ending-with[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- group-starting-with --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"g" DELEGATE=3D"XPATH"> > <BEGIN>group-starting-with[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"g" DELEGATE=3D"XPATH"> > <BEGIN>group-starting-with[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- match --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"m" DELEGATE=3D"XPATH"> > <BEGIN>match[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"m" DELEGATE=3D"XPATH"> > <BEGIN>match[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- select --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"s" DELEGATE=3D"XPATH"> > <BEGIN>select[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"s" DELEGATE=3D"XPATH"> > <BEGIN>select[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- test --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"t" DELEGATE=3D"XPATH"> > <BEGIN>test[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"t" DELEGATE=3D"XPATH"> > <BEGIN>test[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > <!-- use --> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"u" DELEGATE=3D"XPATH"> > <BEGIN>use[[:space:]]*=3D[[:space:]]*"</BEGIN> > <END>"</END> > </SPAN_REGEXP> > <SPAN_REGEXP TYPE=3D"MARKUP" HASH_CHAR=3D"u" DELEGATE=3D"XPATH"> > <BEGIN>use[[:space:]]*=3D[[:space:]]*'</BEGIN> > <END>'</END> > </SPAN_REGEXP> > =09 > <!-- 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>date-format</KEYWORD1> > <KEYWORD1>decimal-format</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>preserve-space</KEYWORD1> > <KEYWORD1>processing-instruction</KEYWORD1> > <KEYWORD1>result-document</KEYWORD1> > <KEYWORD1>sequence</KEYWORD1> > <KEYWORD1>sort</KEYWORD1> > <KEYWORD1>sort-key</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> > =09 > <!-- Namespace declarations --> > <SEQ TYPE=3D"OPERATOR">xmlns:</SEQ> > <!-- Default namespace declaration. Not really used in XSLT --> > <SEQ TYPE=3D"OPERATOR">xmlns</SEQ> > =09 > <!-- Namespace prefixes --> > <MARK_PREVIOUS EXCLUDE_MATCH=3D"FALSE" TYPE=3D"LABEL">:</MARK_PREVIOUS> > =09 > </RULES> > =09 > <RULES DEFAULT=3D"KEYWORD2" HIGHLIGHT_DIGITS=3D"TRUE" DIGIT_RE=3D"[[:dig= it:]]+([[:punct:]][[:digit:]]+)?" NO_WORD_SEP=3D".-_" SET=3D"XPATH"> > <!-- String literals --> > <SPAN TYPE=3D"LITERAL1"> > <BEGIN>"</BEGIN> > <END>"</END> > </SPAN> > <SPAN TYPE=3D"LITERAL1"> > <BEGIN>'</BEGIN> > <END>'</END> > </SPAN> > =09 > <!-- XPath comments --> > <SPAN TYPE=3D"COMMENT2" DELEGATE=3D"XPATHCOMMENT2"> > <BEGIN>(:</BEGIN> > <END>:)</END> > </SPAN> > =09 > <!-- 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> > =09 > <!-- Subtraction operator --> > <OPERATOR>-</OPERATOR> > =09 > </KEYWORDS> > =09 > <!-- Axes specifiers --> > <MARK_PREVIOUS TYPE=3D"KEYWORD3" EXCLUDE_MATCH=3D"FALSE">::</MARK_PREVI= OUS> > <!-- Abbreviated 'attribute::' --> > <SEQ TYPE=3D"KEYWORD3">@</SEQ> > =09 > <!-- XPath 2.0 operators + some other stuff --> > <!-- Comparison expressions --> > <SEQ TYPE=3D"OPERATOR">=3D</SEQ> > <SEQ TYPE=3D"OPERATOR">!=3D</SEQ> > <SEQ TYPE=3D"OPERATOR">></SEQ> > <SEQ TYPE=3D"OPERATOR">&gt;</SEQ><!-- Treat as operator --> > <SEQ TYPE=3D"OPERATOR">&lt;</SEQ><!-- Treat as operator --> > <!-- Optional occurrence indicator --> > <SEQ TYPE=3D"OPERATOR">?</SEQ> > <!-- Addition operator, one-or-more occurrence indicator--> > <SEQ TYPE=3D"OPERATOR">+</SEQ> > <!-- Multiplication operator, zero-or-more occurrence indicator, node t= est --> > <SEQ TYPE=3D"OPERATOR">*</SEQ> > <!-- Path expression step separator --> > <SEQ TYPE=3D"OPERATOR">/</SEQ> > <!-- Union operator --> > <SEQ TYPE=3D"OPERATOR">|</SEQ> > <!-- Sequence expression item separator --> > <SEQ TYPE=3D"OPERATOR">,</SEQ> > =09 > <!-- Predicates --> > <SPAN TYPE=3D"OPERATOR" DELEGATE=3D"XPATH"> > <BEGIN>[</BEGIN> > <END>]</END> > </SPAN> > =09 > <!-- Entity references --> > <SPAN TYPE=3D"LITERAL3" NO_WORD_BREAK=3D"TRUE"> > <BEGIN>&</BEGIN> > <END>;</END> > </SPAN> >=20 > <!-- Namespace prefixes --> > <MARK_PREVIOUS TYPE=3D"LABEL" EXCLUDE_MATCH=3D"FALSE">:</MARK_PREVIOUS> > =09 > <!-- Functions --> > <MARK_PREVIOUS TYPE=3D"FUNCTION" EXCLUDE_MATCH=3D"TRUE">(</MARK_PREVIOU= S> > =09 > <!-- Variables --> > <MARK_FOLLOWING TYPE=3D"LITERAL2">$</MARK_FOLLOWING> > =09 > </RULES> > =09 > <!-- XPath comments - top or nested within COMMENT3 --> > <RULES DEFAULT=3D"COMMENT2" SET=3D"XPATHCOMMENT2"> > <SPAN TYPE=3D"COMMENT3" DELEGATE=3D"XPATHCOMMENT3"> > <BEGIN>(:</BEGIN> > <END>:)</END> > </SPAN> > </RULES> > =09 > <!-- XPath comments - nested within COMMENT2 --> > <RULES DEFAULT=3D"COMMENT3" SET=3D"XPATHCOMMENT3"> > <SPAN TYPE=3D"COMMENT2" DELEGATE=3D"XPATHCOMMENT2"> > <BEGIN>(:</BEGIN> > <END>:)</END> > </SPAN> > </RULES> >=20 > </MODE> >=20 >=20 > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf --=20 Slava Pestov |