]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/catalog/modes/slax.xml
basis/xmode: refactor to be deploy friendly.
[factor.git] / basis / xmode / catalog / modes / slax.xml
1 <?xml version="1.0"?>\r
2 <!DOCTYPE MODE SYSTEM "xmode.dtd">\r
3 \r
4 <!-- SLAX Script mode written by Curtis Call  \r
5 \r
6      Types:\r
7      \r
8         LITERAL1 = " " Strings \r
9         LITERAL2 = ' ' Strings\r
10         LITERAL3 = /* */ Comments, Operators, Location Paths, Namespace prefix declarations\r
11         KEYWORD1 = SLAX statements\r
12         KEYWORD2 = Variables\r
13         KEYWORD3 = XML Tags\r
14         KEYWORD4 = Attributes\r
15         FUNCTION = Templates\r
16         DIGIT = Numbers\r
17      \r
18      Note - LITERAL3 had to highlight different types due to the quirks of the matching\r
19      possibilities.  The main problem is with trying to match comments that follow a line\r
20      termination.  I could determine no possible way to correctly match only correct comments\r
21      and to also use the correct color for the comment as well as the line termination.  The \r
22      workaround was to combine multiple types of syntax into the LITERAL3 value. \r
23      This is why operators are not matched.  They have to be grouped in along with the rest\r
24      so it is ok to let them be caught by default.  -->\r
25      \r
26 <MODE>\r
27 \r
28     <PROPS>\r
29         <!-- SLAX has no line comment, only a /* */ comment -->\r
30         <PROPERTY NAME="commentStart" VALUE="/*"/>\r
31         <PROPERTY NAME="commentEnd" VALUE="*/"/>\r
32     \r
33         <!--  - and _ and : are valid within SLAX words -->\r
34         <PROPERTY NAME="wordBreakChars" VALUE=",/+=*"/>\r
35         <PROPERTY NAME="noWordSep" VALUE="-_:."/>\r
36     \r
37         <!-- { and } always surround SLAX code blocks, but I cannot get auto-indenting\r
38              to work correctly so I'll just disable the functionality.\r
39         <PROPERTY NAME="indentOpenBrackets" VALUE="{"/>\r
40         <PROPERTY NAME="indentCloseBrackets" VALUE="}"/>\r
41         <PROPERTY NAME="unalignedOpenBrackets" VALUE="("/>\r
42         <PROPERTY NAME="unalignedCloseBrackets" VALUE=")"/>\r
43                                                             -->\r
44     </PROPS>\r
45     \r
46     <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE" NO_WORD_SEP="-_:." \r
47         DIGIT_RE="([0-9])*\.?([0-9])+" DEFAULT="LITERAL3">\r
48 \r
49         <IMPORT DELEGATE="leading-comments"/>\r
50         <IMPORT DELEGATE="strings"/>\r
51         <IMPORT DELEGATE="variables"/>\r
52         <IMPORT DELEGATE="templates"/>\r
53         <IMPORT DELEGATE="statements"/>\r
54         <IMPORT DELEGATE="xml-tags"/>\r
55         <IMPORT DELEGATE="trailing-comments"/>\r
56     </RULES>\r
57 \r
58     <!-- These comments start the line so it is obvious that they are not location paths -->\r
59     <RULES SET="leading-comments">\r
60         <SPAN TYPE="LITERAL3" AT_WHITESPACE_END="TRUE">\r
61             <BEGIN>/*</BEGIN> \r
62             <END>*/</END>\r
63         </SPAN>\r
64     </RULES>\r
65         \r
66     <!-- These comments trail at the end of the line - impossible to catch and maintain separate\r
67          colors with operators -->\r
68     <RULES SET="trailing-comments">\r
69         <SPAN_REGEXP TYPE="LITERAL3">\r
70             <BEGIN>((;)|(\})|(\{)|(\)))(\s)*/\*</BEGIN> \r
71             <END>*/</END>\r
72         </SPAN_REGEXP>\r
73     </RULES>\r
74         \r
75     <!-- Both " " and ' ' strings are correctly caught -->\r
76     <RULES SET="strings">\r
77         <SPAN TYPE="LITERAL1" ESCAPE="\">\r
78             <BEGIN>"</BEGIN>\r
79             <END>"</END>\r
80         </SPAN>\r
81         <SPAN TYPE="LITERAL2" ESCAPE="\">\r
82             <BEGIN>'</BEGIN>\r
83             <END>'</END>\r
84         </SPAN>\r
85     </RULES>\r
86     \r
87     <!-- The XML start tag is embedded in SLAX scripts -->\r
88     <RULES SET="xml-tags" DEFAULT="KEYWORD3">\r
89         <SPAN_REGEXP TYPE="KEYWORD3" DELEGATE="inside-the-tag">\r
90             <BEGIN><![CDATA[<([a-z]|[A-Z])]]></BEGIN>\r
91             <END><![CDATA[>]]></END>\r
92         </SPAN_REGEXP>\r
93     </RULES>\r
94     \r
95     <!-- This sets the actual tag < > and tag name to KEYWORD3, the = to LITERAL3\r
96          and sends the attributes to the attribute RULES and strings to string RULES -->\r
97     <RULES SET="inside-the-tag" DEFAULT="KEYWORD3">\r
98         <SPAN_REGEXP TYPE="LITERAL3" DELEGATE="attribute">\r
99             <BEGIN>(\s)+(?!&gt;)</BEGIN>\r
100             <END>=</END>\r
101         </SPAN_REGEXP>\r
102         <IMPORT DELEGATE="strings"/>\r
103     </RULES>\r
104     \r
105     <!-- XML attributes are KEYWORD4 -->\r
106     <RULES SET="attribute" DEFAULT="KEYWORD4">\r
107     </RULES>\r
108 \r
109     <!-- Applies to both variables and parameters, everything that starts with a $ -->\r
110     <RULES SET="variables">\r
111         <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING>\r
112     </RULES>\r
113 \r
114     <!-- Anything that is immediately prior to a ( will be set to FUNCTION and the ( to\r
115          LITERAL3 -->\r
116     <RULES SET="templates">\r
117         <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="LITERAL3">(</MARK_PREVIOUS>\r
118     </RULES>\r
119 \r
120     <!-- This is the SLAX statement set, they use KEYWORD1 -->\r
121     <RULES SET="statements">\r
122         <KEYWORDS>\r
123             <KEYWORD1>if</KEYWORD1>\r
124             <KEYWORD1>version</KEYWORD1>\r
125             <KEYWORD1>ns</KEYWORD1>\r
126             <KEYWORD1>param</KEYWORD1>\r
127             <KEYWORD1>var</KEYWORD1>\r
128             <KEYWORD1>template</KEYWORD1>\r
129             <KEYWORD1>match</KEYWORD1>\r
130             <KEYWORD1>else</KEYWORD1>\r
131             <KEYWORD1>copy-of</KEYWORD1>\r
132             <KEYWORD1>copy</KEYWORD1>\r
133             <KEYWORD1>call</KEYWORD1>\r
134             <KEYWORD1>apply-templates</KEYWORD1>\r
135             <KEYWORD1>expr</KEYWORD1>\r
136             <KEYWORD1>import</KEYWORD1>\r
137             <KEYWORD1>input</KEYWORD1>\r
138             <KEYWORD1>for-each</KEYWORD1>\r
139             <KEYWORD1>mode</KEYWORD1>\r
140             <KEYWORD1>priority</KEYWORD1>\r
141             <KEYWORD1>extension</KEYWORD1>\r
142             <KEYWORD1>preserve-space</KEYWORD1>\r
143             <KEYWORD1>strip-space</KEYWORD1>\r
144             <KEYWORD1>with</KEYWORD1>\r
145         </KEYWORDS>\r
146     </RULES>\r
147 \r
148 </MODE>\r
149
150