c_ppline.st - enscript - GNU Enscript
HTML git clone git://thinkerwim.org/enscript.git
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
c_ppline.st (4211B)
---
1 /*
2 * C preprocessor line handling. This is shared between C, C++, and
3 * Objective-C highlighting rules.
4 */
5
6 require_state (c);
7
8 state c_ppline extends CHighlight
9 {
10 /* Comments within a pre-processor line. */
11 /\/\*/ {
12 comment_face (true);
13 language_print ($0);
14 call (c_ppline_comment);
15 comment_face (false);
16 }
17 /* Include line. */
18 /(include)([ \t]+)/ {
19 reference_face (true);
20 language_print ($1);
21 reference_face (false);
22 language_print ($2);
23 call (c_ppline_include);
24 return;
25 }
26 /* Define line. */
27 /(define)([ \t]+)/ {
28 reference_face (true);
29 language_print ($1);
30 reference_face (false);
31 language_print ($2);
32 call (c_ppline_define);
33 return;
34 }
35 /* Simple directives:
36 (build-re '(undef if ifdef ifndef endif elif else line error pragma))
37 */
38 /\b(e(l(if|se)|ndif|rror)|if(|def|ndef)|line|pragma|undef)\b/ {
39 reference_face (true);
40 language_print ($0);
41 reference_face (false);
42 call (c_ppline_tokensequence);
43 return;
44 }
45 /* An unknown pre-processor directive. */
46 /[a-zA-Z_][^ \t\n]*/ {
47 reference_face (true);
48 language_print ($0);
49 reference_face (false);
50 call (c_ppline_tokensequence);
51 return;
52 }
53 /\\\\\n/ {
54 language_print ($0);
55 }
56 /\n/ {
57 language_print ($0);
58 return;
59 }
60 }
61
62 state c_ppline_include extends CHighlight
63 {
64 /\"/ {
65 string_face (true);
66 language_print ($0);
67 call (c_string);
68 string_face (false);
69 call (c_ppline_comments_strings_chars);
70 return;
71 }
72 /<[^<>]+>/ {
73 string_face (true);
74 language_print ($0);
75 string_face (false);
76 call (c_ppline_comments_strings_chars);
77 return;
78 }
79 /[a-zA-Z_][a-zA-Z_0-9]*/ {
80 variable_name_face (true);
81 print ($0);
82 variable_name_face (false);
83 call (c_ppline_comments_strings_chars);
84 return;
85 }
86 /\\\\\n/ {
87 language_print ($0);
88 }
89 /\n/ {
90 language_print ($0);
91 return;
92 }
93 }
94
95 state c_ppline_define extends CHighlight
96 {
97 /([a-zA-Z_][a-zA-Z_0-9]*)(\([^\)]*\))?/ {
98 if (strcmp ($2, "") != 0)
99 {
100 function_name_face (true);
101 language_print ($1);
102 function_name_face (false);
103 language_print ($2);
104 }
105 else
106 {
107 variable_name_face (true);
108 language_print ($1);
109 variable_name_face (false);
110 }
111 call (c_ppline_comments_strings_chars);
112 return;
113 }
114 /\\\\\n/ {
115 language_print ($0);
116 }
117 /\n/ {
118 language_print ($0);
119 return;
120 }
121 }
122
123 state c_ppline_comments_strings_chars extends CHighlight
124 {
125 /* Comments. */
126 /\/\*/ {
127 comment_face (true);
128 language_print ($0);
129 call (c_ppline_comment);
130 comment_face (false);
131 }
132 /* String constants. */
133 /\"/ {
134 string_face (true);
135 language_print ($0);
136 call (c_string);
137 string_face (false);
138 }
139 /* Character constants. */
140 /'.'|'\\\\.'/ {
141 string_face (true);
142 language_print ($0);
143 string_face (false);
144 }
145 /\\\\\n/ {
146 language_print ($0);
147 }
148 /\n/ {
149 language_print ($0);
150 return;
151 }
152 }
153
154 state c_ppline_tokensequence extends CHighlight
155 {
156 /* Comments. */
157 /\/\*/ {
158 comment_face (true);
159 language_print ($0);
160 call (c_ppline_comment);
161 comment_face (false);
162 }
163 /* String constants. */
164 /\"/ {
165 string_face (true);
166 language_print ($0);
167 call (c_string);
168 string_face (false);
169 }
170 /* Character constants. */
171 /'.'|'\\\\.'/ {
172 string_face (true);
173 language_print ($0);
174 string_face (false);
175 }
176 /* defined() operators. */
177 /(defined)(\()([^\)]+)(\))/ {
178 reference_face (true);
179 language_print ($1);
180 reference_face (false);
181 language_print ($2);
182
183 variable_name_face (true);
184 language_print ($3);
185 variable_name_face (false);
186
187 language_print ($4);
188 }
189 /* Variable references. */
190 /\b[a-zA-Z_][a-zA-Z_0-9]*\b/ {
191 variable_name_face (true);
192 language_print ($0);
193 variable_name_face (false);
194 }
195 /\\\\\n/ {
196 language_print ($0);
197 }
198 /\n/ {
199 language_print ($0);
200 return;
201 }
202 }
203
204 /* Comments within pre-processor directives need escaped newlines. */
205 state c_ppline_comment extends c_comment {
206 /\\\\\n/ {
207 language_print ($0);
208 }
209 /\n/ {
210 language_print ($0);
211 return;
212 }
213 }
214
215
216 /*
217 Local variables:
218 mode: c
219 End:
220 */