configure.ac: Add AM_GNU_GETTEXT_VERSION([0.17]). Remove ALL_LINGUAS.
[enscript.git] / states / hl / c_ppline.st
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 \f
216 /*
217 Local variables:
218 mode: c
219 End:
220 */