Warning, /frameworks/ktexteditor/autotests/input/indent/pascal/longtest2/expected 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 2; // 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 0012 unit unit1; 0013 0014 interface 0015 type t = real; 0016 0017 implementation 0018 0019 FUNCTION f( 0020 alf : real; 0021 fred : integer; // should line up with alf 0022 bill : boolean; 0023 joe: char; 0024 ); 0025 VAR s : string; 0026 BEGIN s := do; WriteLn(s) END; 0027 0028 0029 procedure getbyte; // CHECK: cr after this line is **not** indented 0030 0031 var // CHECK: cr after this line **is** indented 0032 ch : char; 0033 0034 begin 0035 0036 // need to consider: 0037 // if c then begin s1; s2 end; // strip these lines 0038 // begin // normal case 0039 // end // normal case 0040 // end else if begin // should be OK since /end/ tested last 0041 // need to consider ... 0042 // if c1 then begin s1; s2 end 0043 // else s3; 0044 // <-- align this line 0045 0046 { checking multi line statements } 0047 0048 0049 while aaaaaaaaaaaaaaaaaaaaaaa 0050 and bbbbbbbbbbb do 0051 if c1 then begin 0052 s1; 0053 for i := 1 0054 to 10 do 0055 s3 0056 end; 0057 s4; 0058 s5; // the ';' here links to the ';' after the 'case' below 0059 0060 if c1 then 0061 case e01 of 0062 111111111: s1; 0063 23: 0064 writeln(x, 0065 'fred', 0066 notCaseValue:4, 0067 x); 0068 0069 2: 0070 case e05 of 0071 1: s1; // CHECK: cr here should go to new case value! 0072 88: 0073 s3; 0074 0075 2: begin 0076 s2; 0077 s3; 0078 end; 0079 0080 3: 0081 case e09 of 0082 1: s1; // CHECK: cr here should go to new case value! 0083 88: 0084 s3; 0085 0086 2: 0087 begin 0088 s2; 0089 s3; 0090 end; 0091 0092 3: s3; 0093 4,5,6..9: s6; 0094 0095 otherwise 0096 writeln('lots'); 0097 writeln(' and lots'); 0098 end; {case} 0099 0100 4,5,6..9: s6; 0101 0102 otherwise 0103 writeln('lots'); 0104 writeln(' and lots'); 0105 end; {case} 0106 0107 4: if e then 0108 begin // CHECK: should be indented after case value 0109 s1; 0110 s2 0111 end 0112 else if ee 0113 and ee1 0114 then begin 0115 s1; 0116 s2; 0117 end; 0118 0119 99: a:= 13; 0120 100: if e then s1; 0121 0122 333333: if c then 0123 begin // CKECK: should indent one level from case value 0124 s3; // CHECK: should be indented another level 0125 s4 0126 end; 0127 0128 30: 0129 if c then begin // cr here is OK 0130 s3; 0131 s4 0132 end; 0133 4: writeln('fred', 0134 notCaseValue:4, 0135 x 0136 ); 0137 s4; // incorrect code, indenter should expect a case value here 0138 88: 0139 if c1 then 0140 begin 0141 s6; 0142 s7 0143 else 0144 s8 0145 end; // stress test: else/end crossed over !! 0146 end; {case} 0147 s6; 0148 0149 a := 1; 0150 a := 2; 0151 a := 3; 0152 if c1 0153 and c2 then begin // can be aligned manually 0154 a := 12; // should be indented one level from if statement 0155 f(x) 0156 end; 0157 if c1 0158 and c2 // can be aligned manually 0159 then 0160 begin 0161 a := 12; // should be indented one level from if statement 0162 f(x) 0163 end; 0164 if c then 0165 if c then 0166 if c then 0167 repeat s1 until c 0168 else 0169 a[ i, 0170 j, 0171 zzzzzzzzzz[ a, 0172 b 0173 ], 0174 vvvvv // CHECK: indent lines with zzzzzzzzz 0175 ] := x 0176 + 10; 0177 if a then 0178 if b then 0179 if c then begin 0180 s1; 0181 s2; 0182 end; {if} 0183 while z do s1; 0184 0185 0186 while not ( ((currchar.value = '*') and (nextchar.value = ')')) 0187 or (currchar.value = '}') // args should line up inside parens 0188 or (nextchar.name = endofline) 0189 or ( sym^.length >= maxsymbolsize-2 ) 0190 or (nextchar.name = filemark)) do 0191 storenextchar(sym^.length,sym^.value); // should be indented from while 0192 0193 while not (currchar.value = '*') and (nextchar.value = ')') 0194 or (currchar.value = '}') // possible to realign first line manually 0195 or (nextchar.name = endofline) // CHECK: other lines should follow first line // CHECK:: indents line up 0196 or ( sym^.length >= maxsymbolsize-2 ) 0197 or (nextchar.name = filemark) do 0198 storenextchar(sym^.length,sym^.value); // should be indented from while 0199 0200 while not (currchar.value = '*') and (nextchar.value = ')') 0201 or (currchar.value = '}') // possible to realign first line manually 0202 or (nextchar.name = endofline) // CHECK: other lines should follow first line // CHECK:: indents line up 0203 or ( sym^.length >= maxsymbolsize-2 ) 0204 or (nextchar.name = filemark) 0205 do 0206 storenextchar(sym^.length,sym^.value); // should be indented from while 0207 0208 dblchar[becomes] := ':='; 0209 dblchar[opencomment] := '(*'; // not start of comment! 0210 sglchar[semicolon] := ';'; 0211 sglchar[colon] := ':'; 0212 sglchar[equals] := '='; 0213 sglchar[openparen] := '('; 0214 sglchar[closeparen] := ')'; 0215 sglchar[period] := '.'; 0216 sglchar[opencomment] := '{'; 0217 sglchar[closecomment] := '}'; 0218 0219 with nextchar do 0220 if eof(infile) then 0221 begin 0222 name := filemark; 0223 if ch in ['0'..'9'] then 0224 name := digit 0225 else if ch = '''' then begin 0226 name := quote 0227 end else if (ch = blank) or (ch = chr(tab)) then 0228 name := space 0229 else name := otherchar 0230 value := blank 0231 end 0232 else if eoln(infile) then 0233 begin 0234 name := endofline; 0235 value := blank; 0236 if c1 then begin s1; s2 end 0237 else s7; 0238 inlines := inlines + 1; 0239 readln(infile) 0240 end 0241 else 0242 begin 0243 read(infile,ch); 0244 value := ch; 0245 if ch in ['a'..'z','A'..'Z','_'] then 0246 name := letter 0247 else 0248 if ch in ['0'..'9'] then 0249 name := digit 0250 else if ch = '''' then while c do 0251 begin 0252 s1; 0253 name := quote 0254 end; 0255 else if (ch = blank) or (ch = chr(tab)) then 0256 name := space 0257 else name := otherchar 0258 end; 0259 0260 { CHECK: 0261 # pp lines go to start of line, unless they are in a comment 0262 } 0263 0264 #if 0265 #endif 0266 cccccc; // CHECK: this aligns with code 0267 # // CHECK: preprocessor lines go to start of line 0268 0269 if c1 then 0270 if c2 then while c do 0271 s 0272 else 0273 s2; 0274 s3; 0275 s4; 0276 0277 end; { getbyte }