Warning, /frameworks/ktexteditor/autotests/input/indent/pascal/longtest4/origin is written in an unsupported language. File is not indexed.
0001 // kate: space-indent on; indent-width 4; replace-tabs on; remove-trailing-spaces all; 0002 // kate: syntax pascal; indent-mode pascal; 0003 0004 // these variables are understood by the pascal indenter ... 0005 // kate: cfgIndentCase false; // indent elements in a case statement 0006 // kate: cfgIndentBegin 0; // indent 'begin' this many spaces 0007 // kate: debugMode false; // show how indent is determined 0008 // kate: cfgAutoInsertStar true; // auto insert '*' in (* ... *)-comments 0009 // kate: cfgSnapParen true; // snap '* )' to '*)' in comments 0010 0011 begin {main program } 0012 0013 if f1 > 0 then result := f1-1 0014 else begin 0015 f1 := -23; 0016 end; 0017 0018 case e012 of 0019 2: 0020 if eeeeeeeeeeeeeeeeee 0021 or e33333333333 0022 then 0023 a := 12 0024 else 0025 for iiiiiiiiiii := 12 0026 to 89 // CHECK 89 lines up with 12 0027 do begin 0028 if very_long_expression 0029 or another_very_long_expression 0030 and yet_another_very_long_expression then 0031 s1; 0032 s11; 0033 end; 0034 1: 0035 if e 0036 +e2 0037 +e3 0038 +e2 0039 or 75 // CHECK: follows first continue line 0040 then 0041 for i := 1 0042 to 89 0043 do begin 0044 a := 12 + 24 0045 3 + // CHECK 3 lines up with 24 above 0046 19 + 0047 25; 0048 s1 := e1 0049 + e2; 0050 end; 0051 5: 0052 f32verylongfunctionnamezzzzzzzzzzzzzzz( 0053 z, // user can realign this anywhere 0054 a,b, // this should line up with 'z''' 0055 c, 0056 d, 0057 e 0058 ); 0059 0060 3: begin 0061 s0; 0062 s3; // bad code, 'end' is missing 0063 //end; // missing end, so next few case values interpreted as labels 0064 5: 0065 if q then z; 0066 0067 s3; // code error - case value belongs here, not statement 0068 5: 0069 if c2 then s2; 0070 0071 16: 0072 if c2 then 0073 s1; 0074 17: 0075 if c2 then begin s1; s2 end; 0076 0077 4: 0078 if a then begin 0079 s2; 0080 s3 // no trailing semi, but it indents 0081 end; 0082 end; { ** bad code ** } // crossed begin/end - matches '3: begin' above 0083 0084 0085 2: s2; 0086 3: while c4 0087 and e3 do // CHECK: should indent beyond while 0088 s8; 0089 1: s1; 0090 { 0091 23: 0092 } 0093 23: s1; 0094 s2: 0095 begin 0096 s2 0097 s3 // no trailing semi in line above, but it indents correctly 0098 end; // need ';' to force alignment with new case value 0099 otherwise if a then b; 0100 if c0 then begin 0101 if c1 then begin 0102 // it does!! 0103 if c3 then 0104 write( // CHECK: deeply nested levels of parens 0105 f(5.5), 0106 'test', // should be aligned 0107 notCaseValue:4, 0108 f1(8,8), 0109 ff( a, 0110 b( f(13), 0111 12, 0112 x 0113 ), 0114 c( g(55) ), 0115 0116 )); 0117 0118 end else // statement unfinished 0119 otherwise // duplicate eotherwise 0120 if a then begin 0121 b 0122 end else if a1 then begin 0123 c; 0124 c; 0125 if a 0126 and a1 then 0127 b 0128 else 0129 c; { CHECK: outdents only when 'c' is followed by ';' } 0130 if a then begin 0131 b; 0132 b1; 0133 end else 0134 s3; 0135 if a then b else c; 0136 if a then 0137 b 0138 else 0139 c; 0140 if a then b 0141 else f( arg, 0142 arg2, 0143 a1, 0144 a2 0145 # this is a pp line!! // bug! silly place to put a pp line 0146 f( a, 0147 b 0148 )); 0149 0150 if a then 0151 b 0152 else if c1 then 0153 s1; 0154 if c2 then begin 0155 s33; 0156 s34 0157 end; { !!! classic error, shouldn't be a semi colon here } 0158 else if c3 then begin 0159 s44; 0160 s45 0161 end else begin 0162 s; 0163 s; 0164 end 0165 0166 end else if c1 then begin // comment 0167 s3 0168 end; 0169 0170 while c3 do 0171 s4; 0172 end; // spurious end 0173 0174 s0; 0175 s1; 0176 s2; 0177 s3; 0178 end // case e012 of 0179 else if c2 then begin // spurious else 0180 0181 ss; 0182 0183 if c1 then begin 0184 write( 'test', 0185 notCaseValue:4 0186 ) 0187 end else // this else has no statement 0188 end else begin { should still be in sync } 0189 0190 s1; 0191 0192 s1; 0193 0194 0195 0196 s2 0197 end; 0198 0199 f( a, 0200 b, 0201 ) 0202 0203 ff( a, 0204 b, 0205 c 0206 ) 0207 )) 0208 0209 writeln( 'this is a string ', n:1, ' ', ' ', r:10:2 ); 0210 0211 with p do 0212 begin 0213 0214 end; 0215 0216 with p065 do 0217 begin 0218 x := 2; 0219 end; 0220 case e07 of 0221 0: 0222 1: s1; 0223 2: begin 0224 s2; 0225 s3; 0226 end; 0227 3: s3; 0228 12: 0229 0230 15: 0231 4,5,6..9: begin s1; end; 0232 otherwise 0233 s6; 0234 0235 0236 s3; 0237 s1; 0238 0239 s2; 0240 0241 while e and 0242 e2 DO begin { comment } 0243 s0; 0244 s33; 0245 s44; 0246 end; 0247 0248 if e97 then begin 0249 s3; 0250 label: 0251 while c103 do begin 0252 s4; 0253 q := 0; 0254 case e of 0255 12,13..16,20: begin 0256 s2; 0257 s3; 0258 end; 0259 8: writeln( 'test', 0260 x, 0261 r:4 0262 ); 0263 9: 0264 0265 end; 0266 while c1 0267 and c2 do begin 0268 s5; 0269 s9; 0270 end; 0271 0272 s; 0273 s; 0274 s1; 0275 if e105 then 0276 if c2 then begin 0277 0278 s3; 0279 end; // if 0280 0281 case e11 of 0282 2..4,5: begin 0283 s1; 0284 s2 0285 end; 0286 0287 0288 3: a:= 13; 0289 0290 0291 89: 0292 0293 case e12 of 0294 2,3: 0295 a:=13; 0296 2: begin 0297 a:= 13 0298 end; 0299 5,6, 0300 7: 0301 otherwise 0302 0303 s3; 0304 s4; 0305 end; // case e12 of 0306 0307 otherwise 0308 0309 0310 s4; 0311 s5; 0312 if c2 then 0313 s5 0314 end; // case e11 of 0315 0316 s3; 0317 0318 end; // while c103 0319 0320 end; // if e97 0321 0322 repeat 0323 s3; 0324 s4; 0325 until c1; 0326 0327 s0; 0328 s1; 0329 0330 if e then begin 0331 s3; 0332 s4; 0333 s0; 0334 0335 s1; 0336 0337 s1; 0338 s1; 0339 end; 0340 0341 repeat 0342 ss; 0343 s2; 0344 if e then 0345 ss; 0346 s3; 0347 s1; 0348 until e; 0349 0350 if e then begin 0351 s1; 0352 s3; 0353 if e then begin 0354 s3; 0355 s5; 0356 end; 0357 s6; 0358 s2; 0359 end; 0360 0361 0362 of:=2; // more bad code 0363 0364 repeat 0365 s1 0366 until c; 0367 0368 0369 a := 123456789; 0370 IF (e1) or (* comment *) 0371 (e2) then 0372 0373 begin // CHECK: the begin should follow 'if' line, not 'then' line 0374 0375 if e then begin s end 0376 else begin 0377 s1; 0378 s2; 0379 end; 0380 0381 if e then 0382 s0; 0383 if e then begin 0384 s1; 0385 s2; ( // unattached parens 0386 0387 ) 0388 s; // problem caused by unattached parens 0389 end 0390 123456 0391 { comment } 0392 0393 if e4 then 0394 while e5 do begin 0395 (* ... 0396 * CHECK: stars should line up 0397 * 0398 * 0399 *) 0400 (aa) 0401 if a then b; (* qwe 0402 *rty *) 0403 cc; 0404 s; 0405 // comment 0406 0407 end; 0408 0409 0410 f( a, b) 0411 0412 case e of 0413 12,13: a:=12; 0414 1,2,3,4..6: writeln( 0415 a, 'TODO:', b ); 0416 0417 567: 0418 s2; 0419 0420 88: writeln( 'zzzzzzzzzz', 0421 a:12, 0422 b 0423 ); 0424 99: writeln( 0425 z:13, 0426 b 0427 ); 0428 13: begin 0429 // no statement 0430 end; 0431 0432 0433 0434 0: f( a, 0435 b 0436 ); 0437 12: ff ( a, 0438 b 0439 ); 0440 (13+12): f( a, 0441 37,508.18 0442 ); 0443 0444 0445 0446 2: if a = 12 then 0447 s1; 0448 else begin 0449 s2; 0450 end; 0451 0452 0: writeln( 'zzzzzzzzz', 0453 0454 a:3, 0455 b:4, 0456 'xxxxxxxxxx' 0457 0458 ); 0459 0460 1: s1; 0461 3: 0462 0463 0464 0465 2: begin 0466 0467 s1; 0468 s2; 0469 s3; 0470 end; 0471 0472 5 : 0473 writeln( 'this is ', 0474 'multiline arg list' 0475 ); 0476 0477 0478 0479 0480 5: 0481 6: 0482 s1; 0483 0484 9: 0485 c := 13; 0486 0487 c2,3,4..7: begin 0488 0489 s4; 0490 sl; 0491 a := 13; 0492 0493 label: // this is a label, not case value 0494 cc; 0495 0496 b := 17; 0497 0498 writeln( 'strrrrrr', a:4 ); 0499 0500 end; 0501 c9 : 0502 s1; 0503 0504 end; { case e of } 0505 // comment 0506 ff( a, // this line aligns with 'end' 0507 b, // CHECK: keep relative indent 0508 c 0509 ) 0510 ; 0511 0512 end; // begin CHECK: 0513 0514 ggggg: 0515 0516 0517 f( 0518 a, 0519 b, 0520 c 0521 ); 0522 0523 0524 writeln( a, 0525 0526 b, 0527 0528 b, { check indent after cr here } 0529 ); 0530 0531 f(13); 0532 end; // case e07 0533 0534 end. // main