fix some db docs
[factor/jcg.git] / basis / xmode / modes / xsl.xml
blob94a5610165ec9edb05a3f6718d42d013702f2d1c
1 <?xml version="1.0"?>\r
2 <!DOCTYPE MODE SYSTEM "xmode.dtd"><!--\r
3   ======================================================================\r
4   Edit mode for XSLT 1.0 and XSLT 2.0\r
5   ======================================================================\r
6   Token types:\r
7 \r
8   COMMENT1    XML comments\r
9   COMMENT2    XPath 2.0 comments - top or nested within COMMENT3\r
10   COMMENT3    XPath 2.0 comments - nested within COMMENT2\r
11   COMMENT4    Default task names used in Task List\r
12   DIGIT       Digits\r
13   FUNCTION    Functions\r
14   INVALID     -\r
15   KEYWORD1    XSLT element names\r
16   KEYWORD2    XSLT attribute names\r
17   KEYWORD3    Attribute values\r
18   KEYWORD4    Axes specifiers\r
19   LABEL       Namespace prefixes\r
20   LITERAL1    String literals\r
21   LITERAL2    Parameter and variable references\r
22   LITERAL3    Entity references and processing instructions\r
23   LITERAL4    DTD constructs and CDATA sections\r
24   MARKUP      Result elements and extension elements\r
25   OPERATOR    XPath 2.0 keywords + some other stuff\r
26   ======================================================================\r
27 -->\r
29 <MODE>\r
31   <PROPS>\r
32     <PROPERTY NAME="commentStart" VALUE="&lt;!--"/>\r
33     <PROPERTY NAME="commentEnd" VALUE="--&gt;"/>\r
34   </PROPS>\r
36   <RULES HIGHLIGHT_DIGITS="FALSE" IGNORE_CASE="FALSE">\r
38     <!-- XML comments -->\r
39     <SPAN DELEGATE="TASKS" TYPE="COMMENT1">\r
40       <BEGIN>&lt;!--</BEGIN>\r
41       <END>--&gt;</END>\r
42     </SPAN>\r
44     <!-- Assume 'xsl' prefix for XSLT elements -->\r
45     <SPAN_REGEXP HASH_CHAR="&lt;" DELEGATE="XSLTAGS" TYPE="KEYWORD2">\r
46       <BEGIN>&lt;(?=xsl:)</BEGIN>\r
47       <END>&gt;</END>\r
48     </SPAN_REGEXP>\r
50     <SPAN_REGEXP HASH_CHAR="&lt;" DELEGATE="XSLTAGS" TYPE="KEYWORD2">\r
51       <BEGIN>&lt;(?=/xsl:)</BEGIN>\r
52       <END>&gt;</END>\r
53     </SPAN_REGEXP>\r
55     <!-- CDATA marked sections. Reuse common xml mode -->\r
56     <SPAN TYPE="KEYWORD2" DELEGATE="xml::CDATA">\r
57       <BEGIN>&lt;![CDATA[</BEGIN>\r
58       <END>]]&gt;</END>\r
59     </SPAN>\r
61     <!-- DTD constructs. Reuse common xml mode  -->\r
62     <SPAN TYPE="KEYWORD2" DELEGATE="xml::DTD-TAGS">\r
63       <BEGIN>&lt;!</BEGIN>\r
64       <END>&gt;</END>\r
65     </SPAN>\r
67     <!-- Entity references -->\r
68     <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
69       <BEGIN>&amp;</BEGIN>\r
70       <END>;</END>\r
71     </SPAN>\r
73     <!-- Processing instructions -->\r
74     <SPAN TYPE="LITERAL3">\r
75       <BEGIN>&lt;?</BEGIN>\r
76       <END>?&gt;</END>\r
77     </SPAN>\r
79     <!-- Result elements and extension elements -->\r
80     <SPAN DELEGATE="TAGS" TYPE="MARKUP">\r
81       <BEGIN>&lt;</BEGIN>\r
82       <END>&gt;</END>\r
83     </SPAN>\r
84   </RULES>\r
86   <!-- XML comments -->\r
87   <RULES DEFAULT="COMMENT1" IGNORE_CASE="FALSE" SET="TASKS">\r
88     <!-- Default task names used in Task List -->\r
89     <KEYWORDS>\r
90       <COMMENT4>DEBUG:</COMMENT4>\r
91       <COMMENT4>DONE:</COMMENT4>\r
92       <COMMENT4>FIXME:</COMMENT4>\r
93       <COMMENT4>IDEA:</COMMENT4>\r
94       <COMMENT4>NOTE:</COMMENT4>\r
95       <COMMENT4>QUESTION:</COMMENT4>\r
96       <COMMENT4>TODO:</COMMENT4>\r
97       <COMMENT4>XXX</COMMENT4>\r
98       <COMMENT4>???</COMMENT4>\r
99     </KEYWORDS>\r
100   </RULES>\r
102   <!-- Result elements and extension elements -->\r
103   <RULES DEFAULT="MARKUP" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="TAGS">\r
105     <!-- Highlight all AVTs in result attribute values. -->\r
106     <SPAN TYPE="MARKUP" DELEGATE="AVT">\r
107       <BEGIN>"</BEGIN>\r
108       <END>"</END>\r
109     </SPAN>\r
110     <SPAN TYPE="MARKUP" DELEGATE="AVT">\r
111       <BEGIN>'</BEGIN>\r
112       <END>'</END>\r
113     </SPAN>\r
115     <!-- Namespace declarations -->\r
116     <SEQ TYPE="OPERATOR">xmlns:</SEQ>\r
117     <!-- Default namespace declaration. Not really used in XSLT -->\r
118     <SEQ TYPE="OPERATOR">xmlns</SEQ>\r
120     <!-- Namespace prefixes -->\r
121     <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
123   </RULES>\r
125   <!-- AVTs -->\r
126   <RULES DEFAULT="KEYWORD3" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="AVT">\r
128     <!-- Literal curly braces ({}) must be written as {{ or }} -->\r
129     <SEQ>{{</SEQ>\r
130     <SEQ>}}</SEQ><!-- Does nothing. Is overridden by the SPAN below. -->\r
132     <!-- The AVT itself -->\r
133     <SPAN DELEGATE="XPATH" TYPE="OPERATOR">\r
134       <BEGIN>{</BEGIN>\r
135       <END>}</END>\r
136     </SPAN>\r
138     <!-- Entity references -->\r
139     <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
140       <BEGIN>&amp;</BEGIN>\r
141       <END>;</END>\r
142     </SPAN>\r
144   </RULES>\r
146   <!-- XSLT tags -->\r
147   <RULES DEFAULT="KEYWORD2" HIGHLIGHT_DIGITS="FALSE" NO_WORD_SEP=".-_:" SET="XSLTAGS">\r
149     <!-- If we spot something that looks like an AVT, assume it is. Lazy, I know... -->\r
150     <SPAN TYPE="KEYWORD2" DELEGATE="AVT">\r
151       <BEGIN>"</BEGIN>\r
152       <END>"</END>\r
153     </SPAN>\r
154     <SPAN TYPE="KEYWORD2" DELEGATE="AVT">\r
155       <BEGIN>'</BEGIN>\r
156       <END>'</END>\r
157     </SPAN>\r
159     <!-- XSLT attributes that contains XPath expressions or match patterns -->\r
160     <!-- count -->\r
161     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="count" DELEGATE="XPATH">\r
162       <BEGIN>count[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
163       <END>"</END>\r
164     </SPAN_REGEXP>\r
165     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="count" DELEGATE="XPATH">\r
166       <BEGIN>count[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
167       <END>'</END>\r
168     </SPAN_REGEXP>\r
169     <!-- from -->\r
170     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="from" DELEGATE="XPATH">\r
171       <BEGIN>from[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
172       <END>"</END>\r
173     </SPAN_REGEXP>\r
174     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="from" DELEGATE="XPATH">\r
175       <BEGIN>from[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
176       <END>'</END>\r
177     </SPAN_REGEXP>\r
178     <!-- group-adjacent -->\r
179     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-adjacent" DELEGATE="XPATH">\r
180       <BEGIN>group-adjacent[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
181       <END>"</END>\r
182     </SPAN_REGEXP>\r
183     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-adjacent" DELEGATE="XPATH">\r
184       <BEGIN>group-adjacent[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
185       <END>'</END>\r
186     </SPAN_REGEXP>\r
187     <!-- group-by -->\r
188     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-by" DELEGATE="XPATH">\r
189       <BEGIN>group-by[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
190       <END>"</END>\r
191     </SPAN_REGEXP>\r
192     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-by" DELEGATE="XPATH">\r
193       <BEGIN>group-by[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
194       <END>'</END>\r
195     </SPAN_REGEXP>\r
196     <!-- group-ending-with -->\r
197     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-ending-with" DELEGATE="XPATH">\r
198       <BEGIN>group-ending-with[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
199       <END>"</END>\r
200     </SPAN_REGEXP>\r
201     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-ending-with" DELEGATE="XPATH">\r
202       <BEGIN>group-ending-with[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
203       <END>'</END>\r
204     </SPAN_REGEXP>\r
205     <!-- group-starting-with -->\r
206     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-starting-with" DELEGATE="XPATH">\r
207       <BEGIN>group-starting-with[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
208       <END>"</END>\r
209     </SPAN_REGEXP>\r
210     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="group-starting-with" DELEGATE="XPATH">\r
211       <BEGIN>group-starting-with[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
212       <END>'</END>\r
213     </SPAN_REGEXP>\r
214     <!-- match -->\r
215     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="match" DELEGATE="XPATH">\r
216       <BEGIN>match[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
217       <END>"</END>\r
218     </SPAN_REGEXP>\r
219     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="match" DELEGATE="XPATH">\r
220       <BEGIN>match[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
221       <END>'</END>\r
222     </SPAN_REGEXP>\r
223     <!-- select -->\r
224     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">\r
225       <BEGIN>select[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
226       <END>"</END>\r
227     </SPAN_REGEXP>\r
228     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="select" DELEGATE="XPATH">\r
229       <BEGIN>select[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
230       <END>'</END>\r
231     </SPAN_REGEXP>\r
232     <!-- test -->\r
233     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="test" DELEGATE="XPATH">\r
234       <BEGIN>test[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
235       <END>"</END>\r
236     </SPAN_REGEXP>\r
237     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="test" DELEGATE="XPATH">\r
238       <BEGIN>test[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
239       <END>'</END>\r
240     </SPAN_REGEXP>\r
241     <!-- use -->\r
242     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="use" DELEGATE="XPATH">\r
243       <BEGIN>use[\p{Space}]*=[\p{Space}]*"</BEGIN>\r
244       <END>"</END>\r
245     </SPAN_REGEXP>\r
246     <SPAN_REGEXP TYPE="KEYWORD2" HASH_CHAR="use" DELEGATE="XPATH">\r
247       <BEGIN>use[\p{Space}]*=[\p{Space}]*'</BEGIN>\r
248       <END>'</END>\r
249     </SPAN_REGEXP>\r
251     <!-- Namespace declarations -->\r
252     <SEQ TYPE="OPERATOR">xmlns:</SEQ>\r
253     <!-- Default namespace declaration. Not really used in XSLT -->\r
254     <SEQ TYPE="OPERATOR">xmlns</SEQ>\r
256     <!-- Namespace prefixes -->\r
257     <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
259     <!-- XSLT 2.0 element names -->\r
260     <KEYWORDS>\r
261       <KEYWORD1>analyze-string</KEYWORD1>\r
262       <KEYWORD1>apply-imports</KEYWORD1>\r
263       <KEYWORD1>apply-templates</KEYWORD1>\r
264       <KEYWORD1>attribute</KEYWORD1>\r
265       <KEYWORD1>attribute-set</KEYWORD1>\r
266       <KEYWORD1>call-template</KEYWORD1>\r
267       <KEYWORD1>character-map</KEYWORD1>\r
268       <KEYWORD1>choose</KEYWORD1>\r
269       <KEYWORD1>comment</KEYWORD1>\r
270       <KEYWORD1>copy</KEYWORD1>\r
271       <KEYWORD1>copy-of</KEYWORD1>\r
272       <KEYWORD1>date-format</KEYWORD1>\r
273       <KEYWORD1>decimal-format</KEYWORD1>\r
274       <KEYWORD1>element</KEYWORD1>\r
275       <KEYWORD1>fallback</KEYWORD1>\r
276       <KEYWORD1>for-each</KEYWORD1>\r
277       <KEYWORD1>for-each-group</KEYWORD1>\r
278       <KEYWORD1>function</KEYWORD1>\r
279       <KEYWORD1>if</KEYWORD1>\r
280       <KEYWORD1>import</KEYWORD1>\r
281       <KEYWORD1>import-schema</KEYWORD1>\r
282       <KEYWORD1>include</KEYWORD1>\r
283       <KEYWORD1>key</KEYWORD1>\r
284       <KEYWORD1>matching-substring</KEYWORD1>\r
285       <KEYWORD1>message</KEYWORD1>\r
286       <KEYWORD1>namespace</KEYWORD1>\r
287       <KEYWORD1>namespace-alias</KEYWORD1>\r
288       <KEYWORD1>next-match</KEYWORD1>\r
289       <KEYWORD1>non-matching-substring</KEYWORD1>\r
290       <KEYWORD1>number</KEYWORD1>\r
291       <KEYWORD1>otherwise</KEYWORD1>\r
292       <KEYWORD1>output</KEYWORD1>\r
293       <KEYWORD1>output-character</KEYWORD1>\r
294       <KEYWORD1>param</KEYWORD1>\r
295       <KEYWORD1>preserve-space</KEYWORD1>\r
296       <KEYWORD1>processing-instruction</KEYWORD1>\r
297       <KEYWORD1>result-document</KEYWORD1>\r
298       <KEYWORD1>sequence</KEYWORD1>\r
299       <KEYWORD1>sort</KEYWORD1>\r
300       <KEYWORD1>sort-key</KEYWORD1>\r
301       <KEYWORD1>strip-space</KEYWORD1>\r
302       <KEYWORD1>stylesheet</KEYWORD1>\r
303       <KEYWORD1>template</KEYWORD1>\r
304       <KEYWORD1>text</KEYWORD1>\r
305       <KEYWORD1>transform</KEYWORD1>\r
306       <KEYWORD1>value-of</KEYWORD1>\r
307       <KEYWORD1>variable</KEYWORD1>\r
308       <KEYWORD1>when</KEYWORD1>\r
309       <KEYWORD1>with-param</KEYWORD1>\r
310     </KEYWORDS>\r
312   </RULES>\r
314   <RULES DEFAULT="KEYWORD3" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[\p{Digit}]+([\p{Punct}][\p{Digit}]+)?" NO_WORD_SEP=".-_" SET="XPATH">\r
315     <!-- String literals -->\r
316     <SPAN TYPE="LITERAL1">\r
317       <BEGIN>"</BEGIN>\r
318       <END>"</END>\r
319     </SPAN>\r
320     <SPAN TYPE="LITERAL1">\r
321       <BEGIN>'</BEGIN>\r
322       <END>'</END>\r
323     </SPAN>\r
325     <!-- XPath comments -->\r
326     <SPAN TYPE="COMMENT2" DELEGATE="XPATHCOMMENT2">\r
327       <BEGIN>(:</BEGIN>\r
328       <END>:)</END>\r
329     </SPAN>\r
331     <!-- Axes specifiers -->\r
332     <MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>\r
333     <!-- Abbreviated 'attribute::' -->\r
334     <SEQ TYPE="KEYWORD4">@</SEQ>\r
336     <!-- XPath 2.0 operators + some other stuff -->\r
337     <!-- Comparison expressions -->\r
338     <SEQ TYPE="OPERATOR">=</SEQ>\r
339     <SEQ TYPE="OPERATOR">!=</SEQ>\r
340     <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
341     <SEQ TYPE="OPERATOR">&amp;gt;</SEQ><!-- Treat as operator -->\r
342     <SEQ TYPE="OPERATOR">&amp;lt;</SEQ><!-- Treat as operator -->\r
343     <!-- Optional occurrence indicator -->\r
344     <SEQ TYPE="OPERATOR">?</SEQ>\r
345     <!-- Addition operator, one-or-more occurrence indicator-->\r
346     <SEQ TYPE="OPERATOR">+</SEQ>\r
347     <!-- Multiplication operator, zero-or-more occurrence indicator, node test -->\r
348     <SEQ TYPE="OPERATOR">*</SEQ>\r
349     <!-- Path expression step separator -->\r
350     <SEQ TYPE="OPERATOR">/</SEQ>\r
351     <!-- Union operator -->\r
352     <SEQ TYPE="OPERATOR">|</SEQ>\r
353     <!-- Sequence expression item separator -->\r
354     <SEQ TYPE="OPERATOR">,</SEQ>\r
356     <!-- Predicates -->\r
357     <SPAN TYPE="OPERATOR" DELEGATE="XPATH">\r
358       <BEGIN>[</BEGIN>\r
359       <END>]</END>\r
360     </SPAN>\r
362     <!-- Entity references -->\r
363     <SPAN TYPE="LITERAL3" NO_WORD_BREAK="TRUE">\r
364       <BEGIN>&amp;</BEGIN>\r
365       <END>;</END>\r
366     </SPAN>\r
368     <!-- Namespace prefixes -->\r
369     <MARK_PREVIOUS TYPE="LABEL">:</MARK_PREVIOUS>\r
371     <!-- Functions -->\r
372     <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
373         <SEQ TYPE="OPERATOR">)</SEQ>\r
375     <!-- Variables -->\r
376     <MARK_FOLLOWING TYPE="LITERAL2">$</MARK_FOLLOWING>\r
377     <!-- XPath 2.0 keywords + some other stuff -->\r
378     <KEYWORDS>\r
379       <!-- Keywords -->\r
380       <OPERATOR>and</OPERATOR>\r
381       <OPERATOR>as</OPERATOR>\r
382       <OPERATOR>castable</OPERATOR>\r
383       <OPERATOR>div</OPERATOR>\r
384       <OPERATOR>else</OPERATOR>\r
385       <OPERATOR>eq</OPERATOR>\r
386       <OPERATOR>every</OPERATOR>\r
387       <OPERATOR>except</OPERATOR>\r
388       <OPERATOR>for</OPERATOR>\r
389       <OPERATOR>ge</OPERATOR>\r
390       <OPERATOR>gt</OPERATOR>\r
391       <OPERATOR>idiv</OPERATOR>\r
392       <OPERATOR>if</OPERATOR>\r
393       <OPERATOR>in</OPERATOR>\r
394       <OPERATOR>instance</OPERATOR>\r
395       <OPERATOR>intersect</OPERATOR>\r
396       <OPERATOR>is</OPERATOR>\r
397       <OPERATOR>isnot</OPERATOR>\r
398       <OPERATOR>le</OPERATOR>\r
399       <OPERATOR>lt</OPERATOR>\r
400       <OPERATOR>mod</OPERATOR>\r
401       <OPERATOR>nillable</OPERATOR>\r
402       <OPERATOR>ne</OPERATOR>\r
403       <OPERATOR>of</OPERATOR>\r
404       <OPERATOR>or</OPERATOR>\r
405       <OPERATOR>return</OPERATOR>\r
406       <OPERATOR>satisfies</OPERATOR>\r
407       <OPERATOR>some</OPERATOR>\r
408       <OPERATOR>then</OPERATOR>\r
409       <OPERATOR>to</OPERATOR>\r
410       <OPERATOR>treat</OPERATOR>\r
411       <OPERATOR>union</OPERATOR>\r
413       <!-- Subtraction operator -->\r
414       <OPERATOR>-</OPERATOR>\r
416     </KEYWORDS>\r
418   </RULES>\r
420   <!-- XPath comments - top or nested within COMMENT3 -->\r
421   <RULES DEFAULT="COMMENT2" SET="XPATHCOMMENT2">\r
422     <SPAN TYPE="COMMENT3" DELEGATE="XPATHCOMMENT3">\r
423       <BEGIN>(:</BEGIN>\r
424       <END>:)</END>\r
425     </SPAN>\r
426   </RULES>\r
428   <!-- XPath comments - nested within COMMENT2 -->\r
429   <RULES DEFAULT="COMMENT3" SET="XPATHCOMMENT3">\r
430     <SPAN TYPE="COMMENT2" DELEGATE="XPATHCOMMENT2">\r
431       <BEGIN>(:</BEGIN>\r
432       <END>:)</END>\r
433     </SPAN>\r
434   </RULES>\r
436 </MODE>\r