1 /* $NetBSD: indent_off_on.c,v 1.15 2023/06/04 22:20:04 rillig Exp $ */
2
3 /*
4 * Tests for the comments 'INDENT OFF' and 'INDENT ON', which temporarily
5 * disable formatting, copying the input directly to the output. Internally,
6 * indent still keeps track of the number of braces and other indentation.
7 */
8
9 //indent input
10 {}
11
12 /*INDENT OFF*/
13 /*INDENT ON*/
14
15 {}
16 //indent end
17
18 //indent run
19 {
20 }
21
22 /*INDENT OFF*/
23 /*INDENT ON*/
24
25 {
26 }
27 //indent end
28
29
30 //indent input
31 {}
32
33
34 /*INDENT OFF*/
35 /*INDENT ON*/
36 //indent end
37
38 //indent run
39 {
40 }
41
42
43 /*INDENT OFF*/
44 /*INDENT ON*/
45 //indent end
46
47
48 //indent input
49 {}
50 /* INDENT OFF */
51 /* INDENT ON */
52 {}
53 //indent end
54
55 //indent run
56 {
57 }
58 /* INDENT OFF */
59 /* INDENT ON */
60 {
61 }
62 //indent end
63
64
65 //indent input
66 {}
67 /* INDENT OFF */
68 /* INDENT ON */
69 {}
70 //indent end
71
72 //indent run
73 {
74 }
75 /* INDENT OFF */
76 /* INDENT ON */
77 {
78 }
79 //indent end
80
81
82 /*
83 * The INDENT comments can be written without space between the words, but
84 * nobody does this.
85 */
86 //indent input
87 int decl ;
88 /*INDENTOFF*/
89 int decl ;
90 /*INDENTON*/
91 int decl ;
92 //indent end
93
94 //indent run -di0
95 int decl;
96 /*INDENTOFF*/
97 int decl ;
98 /*INDENTON*/
99 int decl;
100 //indent end
101
102
103 /*
104 * Any whitespace around the 'INDENT ON/OFF' is ignored, as is any whitespace
105 * between the two words.
106 */
107 //indent input
108 int decl ;
109 /* INDENT OFF */
110 int decl ;
111 /* INDENT ON */
112 int decl ;
113 //indent end
114
115 //indent run -di0
116 int decl;
117 /* INDENT OFF */
118 int decl ;
119 /* INDENT ON */
120 int decl;
121 //indent end
122
123
124 //indent input
125 /*INDENT OFF*/
126 /* No formatting takes place here. */
format(void)127 int format( void ) {{{
128 /*INDENT ON*/
129 }}}
130 //indent end
131
132 //indent run
133 /*INDENT OFF*/
134 /* No formatting takes place here. */
format(void)135 int format( void ) {{{
136 /*INDENT ON*/
137 }
138 }
139 }
140 //indent end
141
142
143 //indent input
144 /* INDENT OFF */
145 void indent_off ( void ) ;
146 /* INDENT */
147 void indent_on ( void ) ;
148 /* INDENT OFF */
149 void indent_off ( void ) ;
150 /* INDENT ON */
151 void indent_on ( void ) ; /* the comment may be indented */
152 /* INDENT OFF */
153 void indent_off ( void ) ;
154 /* INDENTATION ON */
155 void indent_still_off ( void ) ; /* due to the word 'INDENTATION' */
156 /* INDENT ON * */
157 void indent_still_off ( void ) ; /* due to the extra '*' at the end */
158 /* INDENT ON */
159 void indent_on ( void ) ;
160 /* INDENT: OFF */
161 void indent_still_on ( void ) ; /* due to the colon in the middle */
162 /* INDENT OFF */ /* extra comment */
163 void indent_still_on ( void ) ; /* due to the extra comment to the right */
164 //indent end
165
166 //indent run
167 /* INDENT OFF */
168 void indent_off ( void ) ;
169 /* INDENT */
170 void indent_on(void);
171 /* INDENT OFF */
172 void indent_off ( void ) ;
173 /* INDENT ON */
174 void indent_on(void); /* the comment may be indented */
175 /* INDENT OFF */
176 void indent_off ( void ) ;
177 /* INDENTATION ON */
178 void indent_still_off ( void ) ; /* due to the word 'INDENTATION' */
179 /* INDENT ON * */
180 void indent_still_off ( void ) ; /* due to the extra '*' at the end */
181 /* INDENT ON */
182 void indent_on(void);
183 /* INDENT: OFF */
184 void indent_still_on(void); /* due to the colon in the middle */
185 /* $ The extra comment got moved to a separate line, but indenting is still */
186 /* $ on because the 'INDENT OFF' comment was not in a line of its own. */
187 /* INDENT OFF */
188 /* extra comment */
189 void indent_still_on(void); /* due to the extra comment to the
190 * right */
191 //indent end
192
193
194 /*
195 * Try to confuse indent by having a string literal that has an embedded
196 * INDENT comment. Indent doesn't get confused though because it requires the
197 * INDENT comment to go from the very beginning of the line to the very end of
198 * the line.
199 */
200 //indent input
201 const char *str = "\
202 /* INDENT OFF */\
203 " , ch;
204 //indent end
205
206 //indent run
207 const char *str = "\
208 /* INDENT OFF */\
209 ", ch;
210 //indent end
211
212
213 /*
214 * The keywords in the INDENT comments must all be uppercase.
215 */
216 //indent input
217 int on ;
218 /* indent off */
219 int still_on ;
220 /* INDENT off */
221 int still_on ;
222 /* indent OFF */
223 int still_on ;
224 /* INDENT OFF */
225 int finally_off ;
226 //indent end
227
228 //indent run -di0
229 int on;
230 /* indent off */
231 int still_on;
232 /* INDENT off */
233 int still_on;
234 /* indent OFF */
235 int still_on;
236 /* INDENT OFF */
237 int finally_off ;
238 //indent end
239
240
241 /*
242 * Ensure that in 'INDENT OFF' mode, no blank line is added between lines, even
243 * when requested via the -bacc option.
244 */
245 //indent input
246 /* INDENT OFF */
247 int declaration;
248 #if 0
249 #endif
250 int declaration;
251 /* INDENT ON */
252 //indent end
253
254 //indent run-equals-input -bacc
255
256
257 /*
258 * If an 'INDENT OFF' comment directly follows a line continuation, the line
259 * continuation is dropped but the rest of the line is still formatted.
260 */
261 //indent input
262 int x ; \
263 /* INDENT OFF */
264 int y ;
265 /* INDENT ON */
266 int z ;
267 //indent end
268
269 //indent run
270 int x;
271 /* INDENT OFF */
272 int y ;
273 /* INDENT ON */
274 int z;
275 //indent end
276