]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/modes/cplusplus.xml
b7810562f1d41f4937499621a6751ac2c1458608
[factor.git] / basis / xmode / modes / cplusplus.xml
1 <?xml version="1.0"?>\r
2 \r
3 <!DOCTYPE MODE SYSTEM "xmode.dtd">\r
4 \r
5 <!-- Extension of c.xml to add C++ specific syntax. -->\r
6 <MODE>\r
7     <PROPS>\r
8         <PROPERTY NAME="commentStart" VALUE="/*" />\r
9         <PROPERTY NAME="commentEnd" VALUE="*/" />\r
10         <PROPERTY NAME="lineComment" VALUE="//" />\r
11         <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
12 \r
13 \r
14         <!-- Auto indent -->\r
15         <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
16         <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
17         <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
18         <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
19         <PROPERTY NAME="indentNextLine"\r
20             VALUE="(?!^\s*(#|//)).*(\b(if|while|for)\s*\(.*\)|\b(else|do)\b)[^{;]*$" />\r
21         <PROPERTY NAME="unindentThisLine"\r
22             VALUE="^\s*((case\b.*|[\p{Alpha}_][\p{Alnum}_]*)\s*:(?!:)).*$" />\r
23         <PROPERTY NAME="electricKeys" VALUE=":" />\r
24     </PROPS>\r
25 \r
26     <RULES\r
27         ESCAPE="\" IGNORE_CASE="FALSE"\r
28         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
29         <EOL_SPAN TYPE="KEYWORD2" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>\r
30 \r
31         <IMPORT DELEGATE="LEX"/>\r
32         <IMPORT DELEGATE="CORE"/>\r
33     </RULES>\r
34 \r
35     <!-- Core C++ language -->\r
36     <RULES SET="LEX"\r
37         ESCAPE="\" IGNORE_CASE="FALSE"\r
38         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
39 \r
40         <!-- A hack not to mark namespace qualification like "std::"\r
41             as labels. -->\r
42         <SEQ TYPE="OPERATOR">::</SEQ>\r
43 \r
44         <IMPORT DELEGATE="c::LEX"/>\r
45     </RULES>\r
46 \r
47     <!-- Core C++ language -->\r
48     <RULES SET="CORE"\r
49         ESCAPE="\" IGNORE_CASE="FALSE"\r
50         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
51 \r
52         <IMPORT DELEGATE="c::CORE"/>\r
53 \r
54         <KEYWORDS>\r
55             <KEYWORD3>catch</KEYWORD3>\r
56             <KEYWORD3>class</KEYWORD3>\r
57             <KEYWORD3>const_cast</KEYWORD3>\r
58             <KEYWORD1>delete</KEYWORD1>\r
59             <KEYWORD3>dynamic_cast</KEYWORD3>\r
60             <KEYWORD1>explicit</KEYWORD1>\r
61             <KEYWORD2>export</KEYWORD2>\r
62             <KEYWORD1>friend</KEYWORD1>\r
63             <KEYWORD3>mutable</KEYWORD3>\r
64             <KEYWORD2>namespace</KEYWORD2>\r
65             <KEYWORD1>new</KEYWORD1>\r
66             <KEYWORD3>operator</KEYWORD3>\r
67             <KEYWORD1>private</KEYWORD1>\r
68             <KEYWORD1>protected</KEYWORD1>\r
69             <KEYWORD1>public</KEYWORD1>\r
70             <KEYWORD3>reinterpret_cast</KEYWORD3>\r
71             <KEYWORD3>static_assert</KEYWORD3>\r
72             <KEYWORD3>static_cast</KEYWORD3>\r
73             <KEYWORD3>template</KEYWORD3>\r
74             <LITERAL2>this</LITERAL2>\r
75             <KEYWORD1>throw</KEYWORD1>\r
76             <KEYWORD1>try</KEYWORD1>\r
77             <KEYWORD3>typeid</KEYWORD3>\r
78             <KEYWORD3>typename</KEYWORD3>\r
79             <KEYWORD2>using</KEYWORD2>\r
80             <KEYWORD1>virtual</KEYWORD1>\r
81         </KEYWORDS>\r
82     </RULES>\r
83 \r
84     <!-- Preprocessor specific rules -->\r
85     <RULES SET="CPP"\r
86         ESCAPE="\" IGNORE_CASE="FALSE"\r
87         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
88 \r
89         <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="MARKUP" DELEGATE="c::INCLUDE">include\b</EOL_SPAN_REGEXP>\r
90         <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="MARKUP" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>\r
91         <EOL_SPAN_REGEXP HASH_CHAR="endif" TYPE="MARKUP" DELEGATE="c::LEX">endif\b</EOL_SPAN_REGEXP>\r
92         <EOL_SPAN_REGEXP HASH_CHAR="elif" TYPE="MARKUP" DELEGATE="c::CONDITION">elif\b</EOL_SPAN_REGEXP>\r
93         <EOL_SPAN_REGEXP HASH_CHAR="if" TYPE="MARKUP" DELEGATE="c::CONDITION">if\b</EOL_SPAN_REGEXP>\r
94 \r
95         <IMPORT DELEGATE="LEX"/>\r
96 \r
97         <!-- Directives -->\r
98         <KEYWORDS>\r
99             <MARKUP>ifdef</MARKUP>\r
100             <MARKUP>ifndef</MARKUP>\r
101             <MARKUP>else</MARKUP>\r
102             <MARKUP>error</MARKUP>\r
103             <MARKUP>line</MARKUP>\r
104             <MARKUP>pragma</MARKUP>\r
105             <MARKUP>undef</MARKUP>\r
106             <MARKUP>warning</MARKUP>\r
107         </KEYWORDS>\r
108     </RULES>\r
109 \r
110     <!-- After #define directive -->\r
111     <!-- Almost same as the normal code,\r
112         except two additional operators # and ##. -->\r
113     <RULES SET="DEFINE"\r
114         ESCAPE="\" IGNORE_CASE="FALSE"\r
115         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
116         <SEQ TYPE="OPERATOR">#</SEQ>\r
117         <IMPORT DELEGATE="LEX"/>\r
118         <IMPORT DELEGATE="CORE"/>\r
119     </RULES>\r
120 \r
121 </MODE>\r
122 \r