indent_off_on.c revision 1.10 1 1.10 rillig /* $NetBSD: indent_off_on.c,v 1.10 2023/05/14 17:53:38 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.1 rillig /*
19 1.1 rillig * XXX: It is asymmetric that 'INDENT OFF' is kept as is, while 'INDENT ON'
20 1.1 rillig * gets enclosed with spaces.
21 1.1 rillig */
22 1.8 rillig //indent run
23 1.1 rillig {
24 1.1 rillig }
25 1.1 rillig /* $ FIXME: This empty line must stay. */
26 1.1 rillig /*INDENT OFF*/
27 1.9 rillig /* $ FIXME: The empty line below must be above the 'OFF' comment. */
28 1.9 rillig
29 1.1 rillig /* INDENT ON */
30 1.1 rillig
31 1.1 rillig {
32 1.1 rillig }
33 1.8 rillig //indent end
34 1.1 rillig
35 1.1 rillig
36 1.8 rillig //indent input
37 1.1 rillig {}
38 1.3 rillig
39 1.3 rillig
40 1.3 rillig /*INDENT OFF*/
41 1.3 rillig /*INDENT ON*/
42 1.8 rillig //indent end
43 1.3 rillig
44 1.8 rillig //indent run
45 1.3 rillig {
46 1.3 rillig }
47 1.9 rillig
48 1.3 rillig /*INDENT OFF*/
49 1.9 rillig /* $ FIXME: The empty line below must be above the 'OFF' comment. */
50 1.9 rillig
51 1.3 rillig /* INDENT ON */
52 1.8 rillig //indent end
53 1.3 rillig
54 1.3 rillig
55 1.8 rillig //indent input
56 1.3 rillig {}
57 1.1 rillig /* INDENT OFF */
58 1.1 rillig /* INDENT ON */
59 1.1 rillig {}
60 1.8 rillig //indent end
61 1.1 rillig
62 1.1 rillig /*
63 1.1 rillig * XXX: It is asymmetric that 'INDENT OFF' is indented, while 'INDENT ON'
64 1.1 rillig * is aligned.
65 1.1 rillig */
66 1.8 rillig //indent run
67 1.1 rillig {
68 1.1 rillig }
69 1.1 rillig /* INDENT OFF */
70 1.9 rillig /* $ FIXME: The empty line below must be removed. */
71 1.9 rillig
72 1.1 rillig /* INDENT ON */
73 1.1 rillig {
74 1.1 rillig }
75 1.8 rillig //indent end
76 1.1 rillig
77 1.1 rillig
78 1.8 rillig //indent input
79 1.1 rillig {}
80 1.1 rillig /* INDENT OFF */
81 1.1 rillig /* INDENT ON */
82 1.1 rillig {}
83 1.8 rillig //indent end
84 1.1 rillig
85 1.1 rillig /*
86 1.1 rillig * XXX: It is asymmetric that 'INDENT OFF' is indented, while 'INDENT ON'
87 1.1 rillig * is aligned.
88 1.1 rillig */
89 1.8 rillig //indent run
90 1.1 rillig {
91 1.1 rillig }
92 1.1 rillig /* INDENT OFF */
93 1.9 rillig /* $ FIXME: The empty line below must be removed. */
94 1.9 rillig
95 1.1 rillig /* INDENT ON */
96 1.1 rillig {
97 1.1 rillig }
98 1.8 rillig //indent end
99 1.1 rillig
100 1.5 rillig
101 1.1 rillig /*
102 1.1 rillig * The INDENT comments can be written without space between the words, but
103 1.1 rillig * nobody does this.
104 1.1 rillig */
105 1.8 rillig //indent input
106 1.1 rillig int decl ;
107 1.1 rillig /*INDENTOFF*/
108 1.1 rillig int decl ;
109 1.1 rillig /*INDENTON*/
110 1.1 rillig int decl ;
111 1.8 rillig //indent end
112 1.1 rillig
113 1.8 rillig //indent run -di0
114 1.1 rillig int decl;
115 1.1 rillig /*INDENTOFF*/
116 1.1 rillig int decl ;
117 1.9 rillig /* $ FIXME: The empty line below must be removed. */
118 1.9 rillig
119 1.1 rillig /* INDENTON */
120 1.1 rillig int decl;
121 1.8 rillig //indent end
122 1.1 rillig
123 1.1 rillig
124 1.1 rillig /*
125 1.1 rillig * Any whitespace around the 'INDENT ON/OFF' is ignored, as is any whitespace
126 1.1 rillig * between the two words.
127 1.1 rillig */
128 1.8 rillig //indent input
129 1.4 rillig int decl ;
130 1.1 rillig /* INDENT OFF */
131 1.1 rillig int decl ;
132 1.1 rillig /* INDENT ON */
133 1.4 rillig int decl ;
134 1.8 rillig //indent end
135 1.1 rillig
136 1.1 rillig /*
137 1.1 rillig * XXX: It is asymmetric that 'INDENT OFF' is indented, while 'INDENT ON'
138 1.4 rillig * is pushed to the start of the line.
139 1.1 rillig */
140 1.8 rillig //indent run -di0
141 1.1 rillig int decl;
142 1.1 rillig /* INDENT OFF */
143 1.1 rillig int decl ;
144 1.9 rillig /* $ FIXME: The empty line below must be removed. */
145 1.9 rillig
146 1.1 rillig /* INDENT ON */
147 1.1 rillig int decl;
148 1.8 rillig //indent end
149 1.2 rillig
150 1.2 rillig
151 1.8 rillig //indent input
152 1.2 rillig /*INDENT OFF*/
153 1.2 rillig /* No formatting takes place here. */
154 1.2 rillig int format( void ) {{{
155 1.2 rillig /*INDENT ON*/
156 1.2 rillig }}}
157 1.8 rillig //indent end
158 1.2 rillig
159 1.8 rillig //indent run
160 1.2 rillig /*INDENT OFF*/
161 1.2 rillig /* No formatting takes place here. */
162 1.2 rillig int format( void ) {{{
163 1.2 rillig /* $ XXX: Why is the INDENT ON comment indented? */
164 1.2 rillig /* $ XXX: Why does the INDENT ON comment get spaces, but not the OFF comment? */
165 1.9 rillig /* $ FIXME: The empty line below must be removed. */
166 1.9 rillig
167 1.2 rillig /* INDENT ON */
168 1.2 rillig }
169 1.2 rillig }
170 1.2 rillig }
171 1.8 rillig //indent end
172 1.2 rillig
173 1.2 rillig
174 1.8 rillig //indent input
175 1.2 rillig /* INDENT OFF */
176 1.2 rillig void indent_off ( void ) ;
177 1.2 rillig /* INDENT */
178 1.2 rillig void indent_on ( void ) ;
179 1.2 rillig /* INDENT OFF */
180 1.2 rillig void indent_off ( void ) ;
181 1.2 rillig /* INDENT ON */
182 1.2 rillig void indent_on ( void ) ; /* the comment may be indented */
183 1.2 rillig /* INDENT OFF */
184 1.2 rillig void indent_off ( void ) ;
185 1.2 rillig /* INDENTATION ON */
186 1.2 rillig void indent_still_off ( void ) ; /* due to the word 'INDENTATION' */
187 1.2 rillig /* INDENT ON * */
188 1.2 rillig void indent_still_off ( void ) ; /* due to the extra '*' at the end */
189 1.2 rillig /* INDENT ON */
190 1.2 rillig void indent_on ( void ) ;
191 1.2 rillig /* INDENT: OFF */
192 1.2 rillig void indent_still_on ( void ) ; /* due to the colon in the middle */
193 1.2 rillig /* INDENT OFF */ /* extra comment */
194 1.2 rillig void indent_still_on ( void ) ; /* due to the extra comment to the right */
195 1.8 rillig //indent end
196 1.2 rillig
197 1.8 rillig //indent run
198 1.2 rillig /* INDENT OFF */
199 1.2 rillig void indent_off ( void ) ;
200 1.9 rillig /* $ FIXME: The empty line below must be removed. */
201 1.9 rillig
202 1.2 rillig /* $ XXX: The double space from the below comment got merged to a single */
203 1.2 rillig /* $ XXX: space even though the comment might be regarded to be still in */
204 1.2 rillig /* $ XXX: the OFF section. */
205 1.2 rillig /* INDENT */
206 1.6 rillig void indent_on(void);
207 1.2 rillig /* INDENT OFF */
208 1.2 rillig void indent_off ( void ) ;
209 1.9 rillig /* $ FIXME: The empty line below must be removed. */
210 1.9 rillig
211 1.2 rillig /* $ XXX: The below comment got moved from column 9 to column 1. */
212 1.2 rillig /* INDENT ON */
213 1.6 rillig void indent_on(void); /* the comment may be indented */
214 1.2 rillig /* INDENT OFF */
215 1.2 rillig void indent_off ( void ) ;
216 1.2 rillig /* INDENTATION ON */
217 1.2 rillig void indent_still_off ( void ) ; /* due to the word 'INDENTATION' */
218 1.2 rillig /* INDENT ON * */
219 1.2 rillig void indent_still_off ( void ) ; /* due to the extra '*' at the end */
220 1.9 rillig /* $ FIXME: The empty line below must be removed. */
221 1.9 rillig
222 1.2 rillig /* INDENT ON */
223 1.6 rillig void indent_on(void);
224 1.2 rillig /* INDENT: OFF */
225 1.6 rillig void indent_still_on(void); /* due to the colon in the middle */
226 1.10 rillig /* $ The extra comment got moved to a separate line, but indenting is still */
227 1.10 rillig /* $ off because the 'INDENT OFF' comment was not in a line of its own. */
228 1.10 rillig /* INDENT OFF */
229 1.10 rillig /* extra comment */
230 1.6 rillig void indent_still_on(void); /* due to the extra comment to the
231 1.6 rillig * right */
232 1.8 rillig //indent end
233 1.4 rillig
234 1.4 rillig
235 1.4 rillig /*
236 1.4 rillig * Try to confuse indent by having a string literal that has an embedded
237 1.4 rillig * INDENT comment. Indent doesn't get confused though because it requires the
238 1.4 rillig * INDENT comment to go from the very beginning of the line to the very end of
239 1.4 rillig * the line.
240 1.4 rillig */
241 1.8 rillig //indent input
242 1.4 rillig const char *str = "\
243 1.4 rillig /* INDENT OFF */\
244 1.4 rillig " , ch;
245 1.8 rillig //indent end
246 1.4 rillig
247 1.8 rillig //indent run
248 1.4 rillig const char *str = "\
249 1.4 rillig /* INDENT OFF */\
250 1.4 rillig ", ch;
251 1.8 rillig //indent end
252 1.4 rillig
253 1.4 rillig
254 1.4 rillig /*
255 1.4 rillig * The keywords in the INDENT comments must all be uppercase.
256 1.4 rillig */
257 1.8 rillig //indent input
258 1.4 rillig int on ;
259 1.4 rillig /* indent off */
260 1.4 rillig int still_on ;
261 1.4 rillig /* INDENT off */
262 1.4 rillig int still_on ;
263 1.4 rillig /* indent OFF */
264 1.4 rillig int still_on ;
265 1.4 rillig /* INDENT OFF */
266 1.4 rillig int finally_off ;
267 1.8 rillig //indent end
268 1.4 rillig
269 1.8 rillig //indent run -di0
270 1.4 rillig int on;
271 1.4 rillig /* indent off */
272 1.4 rillig int still_on;
273 1.4 rillig /* INDENT off */
274 1.4 rillig int still_on;
275 1.4 rillig /* indent OFF */
276 1.4 rillig int still_on;
277 1.4 rillig /* INDENT OFF */
278 1.4 rillig int finally_off ;
279 1.8 rillig //indent end
280