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