Warning, /frameworks/ktexteditor/autotests/input/indent/pascal/longtest1/origin is written in an unsupported language. File is not indexed.
0001 // kate: space-indent on; indent-width 3; replace-tabs on; remove-trailing-spaces all; 0002 // kate: syntax pascal; indent-mode pascal; 0003 0004 (********************************************** // check: indent OK? 0005 * * 0006 * Commment to test alignment * 0007 * * 0008 * * 0009 **********************************************) 0010 0011 (************************************************************************* 0012 Another Comment 0013 0014 Relative alignment should be kept ... 0015 After indent, first character of this line should 0016 still remain under the 'v' in relative 0017 0018 *************************************************************************) 0019 0020 program fred; 0021 0022 uses bbb; 0023 0024 label fred001; 0025 var i: integer; 0026 0027 const const0 = 0; 0028 c33 = 12; 0029 const1 = 17; 0030 const2 = 18.4; 0031 0032 type x = record a: real; c : char end; 0033 0034 // r = record ... vs unfinished typedef 0035 rType = record // cr here ==> type def 0036 a: aType; // this can be realigned manually 0037 b: bType; // should follow line above 0038 c: cType 0039 end; 0040 0041 colourType = 0042 { unfinished type declaration } 0043 ( red, // CHECK: everything should line up below this 0044 orange, // this must follow line above 0045 green, 0046 blue, 0047 indigo, 0048 yellow, 0049 violet 0050 // CHECK: the comments should line up as well 0051 // closing paren should align to list when it's left shifted 0052 // to opening paren otherwise 0053 ); 0054 0055 otherTypeDef = integer; 0056 0057 // CHECK: next line should keep its relative alignment 0058 {next} 0059 ant = RECORD CASE F: BOOLEAN OF 0060 TRUE: ( fred : REAL; 0061 joe : INTEGER; 0062 ); // parens should line up 0063 FALSE: ( ted : ARRAY[ 0064 1..16 0065 ] OF BOOLEAN; 0066 moe: CHAR; 0067 ); 0068 END; // 'case' + 'record' share same 'end' 0069 0070 0071 0072 var a: real; 0073 0074 RW: ARRAY [AASY..ZZSY] 0075 OF (*RESERVED WORDS*) PACKED ARRAY [1..RWLENGTH, 0076 2..66 ] // CHECK: this line should be indented 0077 OF CHAR; // CHECK: this line should be indented from array 0078 0079 RW: ARRAY [AASY..ZZSY] OF (*RESERVED WORDS*) 0080 PACKED ARRAY [1..RWLENGTH] OF CHAR; 0081 0082 var 0083 sym : keysymbol; 0084 pos : hashIndex; 0085 len : charLenType; 0086 0087 0088 type tR = record 0089 i: integer; // CHECK: can be aligned manually, but default indented from record 0090 r: real; // should align with line immediately above 0091 a: array[1..11] of char; 0092 0093 case boolean of 0094 true: ( fred : real; 0095 joe : integer; 0096 ); // parens should line up 0097 false: ( ted : array[ 0098 1..16 0099 ] of boolean; 0100 moe: char; 0101 ); 0102 end; // 'case' + 'record' share same 'end' 0103 0104 tArray = array[0..17] of real; // should indent wrt 'type' 0105 0106 type colourType = ( 0107 red, // CHECK: this line can be adjusted manually 0108 orange, // this must follow line above 0109 green, 0110 blue, 0111 indigo, 0112 yellow, 0113 violet 0114 // CHECK: the comments should line up as well 0115 // closing paren should align to list when it's left shifted 0116 // to opening paren otherwise 0117 ); 0118 0119 blah = char; // should align after type 0120 0121 optionset = set of options; 0122 0123 var 0124 r1: record 0125 i: integer; 0126 r: real; // should line up with first member 0127 a: array[0..7] of char; 0128 end; // CHECK: end is outdented relative to first member 0129 0130 optionset : set of options; 0131 0132 options : ( crsupp,crbefore,blinbefore, 0133 dindonkey,dindent,spbef, 0134 spaft,gobsym, 0135 inbytab, { indent current margin (was indent from symbol pos) } 0136 crafter, 0137 finl { force symbol to follow on same line as previous symbol } 0138 ); 0139 0140 optionset = set of options; 0141 0142 aa: array[ 1..9, // should be indented after cr 0143 3..22 ] 0144 of ( crsupp,crbefore,blinbefore, 0145 dindonkey,dindent,spbef, 0146 spaft,gobsym, 0147 inbytab, { indent current margin (was indent from symbol pos) } 0148 crafter, 0149 finl { force symbol to follow on same line as previous symbol } 0150 ); 0151 0152 aaa: array[ 1..3, 0153 4..5, 0154 12..11 ] 0155 of record // cr after here should indent from record 0156 a: array[1..6] of char; 0157 i: integer; 0158 end; 0159 0160 { CHECK: following text should keep indent relative to open/close brace 0161 when annotating, behavior of "external", "end" and possibly other keywords 0162 depends on whether we are in procedure declaration, 0163 item (var/const/type) declaration, or statements 0164 } 0165 0166 0167 procedure AVeryVeryLongFunctionName(const A : tRealArrayType; 0168 N : tIntegerType; 0169 var H : tRealArrayType); forward; 0170 0171 (************************************************************************* 0172 CHECK: comment is correctly aligned with precedinging statement 0173 0174 Input parameters: 0175 A - description 0176 0177 N - longer description, but 0178 still preserving relative format 0179 0180 Output parameters: 0181 H - other meaningful description 0182 0183 Result: 0184 True, if successful 0185 False, otherwise 0186 *************************************************************************) 0187 0188 var size : (small, medium, large); 0189 fred : real; 0190 0191 var r : record i: integer; c: char end; 0192 0193 a: array[ 1..9, // should be indented after var 0194 'a'..'z' // non-code, should line up with opening arg 0195 ] of integer; 0196 0197 begin (* AVeryVeryLongFunctionName *) 0198 0199 if a then begin 0200 s1; 0201 16: f(32); //CHECK: label forced to margin, statement is on new line with comment 0202 end; 0203 0204 for i := 0 to 100 do 0205 begin 0206 with p^ do 0207 begin s1; s2; s3 end 0208 end; 0209 0210 with p^ do 0211 begin s1; s2; s3 end; 0212 0213 for i := firstCh to lastCh do chtype[chr(i)] := none; 0214 value['0'] := 0; value['1'] := 1; value['2'] := 2; 0215 value['3'] := 3; value['4'] := 4; value['5'] := 5; 0216 value['6'] := 6; value['7'] := 7; value['8'] := 8; 0217 value['9'] := 9; 0218 value['A'] := 10; value['B'] := 11; value['C'] := 12; 0219 value['D'] := 13; value['E'] := 14; value['F'] := 15; 0220 value['a'] := 10; value['b'] := 11; value['c'] := 12; 0221 value['d'] := 13; value['e'] := 14; value['f'] := 15; 0222 0223 IF NOT (CH IN ['{','}']) THEN 0224 // comment 0225 BEGIN IF CH <= 'Z' THEN CMDCH := CH ELSE CMDCH := CHR(ORD(CH)-ORD('a')+ORD('A') ); 0226 NEXTCH; 0227 IF CMDCH = 'L' THEN 0228 COMMAND(LISTON) 0229 ELSE IF CMDCH = 'T' THEN 0230 COMMAND(TRACEON) 0231 ELSE IF CMDCH = 'I' THEN 0232 COMMAND(INCLUDE) 0233 ELSE IF CMDCH = 'Z' THEN 0234 REPEAT 0235 BEGIN 0236 www.fred.com; 0237 REPEAT commandIn UNTIL numRem = 0; 0238 s1; 0239 s2; 0240 END; 0241 UNTIL False 0242 ELSE IF CMDCH = 'Q' THEN begin 0243 COMMAND(QUIET) 0244 end ELSE IF CMDCH = 'V' THEN 0245 COMMAND(VERBOSE) 0246 else if COMMAND.STRVAL = 'unknown' then 0247 begin 0248 IF 0249 (numStr[0] >= 0) AND 0250 (numStr[1] IN ['+', '-', '0' .. '9', '?']) // CHECK: indent 0251 THEN 0252 Power.Supply := '"AC' ELSE Power.Supply := '"DC' 0253 end else if CommandResult.Str = 'helpIamLost' then begin 0254 Power.Supply := SetPowerSupplyCommands(Plus15V.Increase(Amps)); 0255 end else if (line = 'SHORT') OR (line = 'OPEN') THEN BEGIN 0256 OpenCircuit; 0257 {*smoke billows out*} 0258 IF SPARKS THEN 0259 BEGIN 0260 SPARKS := FALSE; 0261 ShutDown 0262 END 0263 END ELSE IF 0264 (line = 'OPEN') OR (line = 'CLOSED') THEN 0265 BEGIN; 0266 AddFuse(Low); 0267 IF SPARKS THEN 0268 BEGIN; 0269 SPARKS := False; 0270 CircuitBreaker(wishfulThinking) 0271 END else if cond then 0272 statement; 0273 END ELSE IF (line = 'PLUS') OR (line = 'MINUS') THEN Transform(RedPhase) 0274 ELSE IF (line = 'RED') OR (line = 'BLACK') THEN Transform(BluePhase) 0275 ELSE IF line = 'XX' THEN Transistor 0276 ELSE IF line = 'YYYY' THEN SetCurrent(FiveAmps) 0277 ELSE IF line = 'QQQQ' THEN SetPower(FiveWatts) 0278 ELSE IF line = 'AAAAA' THEN Power(FiveAmps) 0279 ELSE IF 0280 {* QWERTY COMMENT LLLLLLLLL ####### *} 0281 line = 'SSSSS' THEN 0282 BEGIN 0283 actualphase := YellowPhase; 0284 AdjustLinePhase(NewPhase); 0285 END 0286 ELSE IF 0287 line = 'Noisy' THEN Filter 0288 ELSE IF line = 'BLUE' THEN 0289 BEGIN 0290 AdjustLinePhase(XPhase); 0291 Erase := True 0292 END ELSE IF 0293 line = 'RED' THEN BEGIN Swap; Hope END 0294 ELSE IF 0295 line = '415' THEN iNumPut415 0296 ELSE IF 0297 // a statement like this has no chance of being correctly indented ... 0298 // otoh, it shouldn't turn out catastrophically wrong. 0299 line = 'REFL' THEN FOR i := 1 TO numLines DO 0300 WriteLn('level=', powerLevel[i], ' ', name[i]+'='+power[i]) 0301 ELSE IF 0302 line = 'HIGH' THEN reduce 0303 ELSE IF 0304 line = 'LOW' THEN increase 0305 ELSE IF 0306 line = 'END' THEN 0307 BEGIN 0308 WHILE powerlevel[NumPowers] = level DO NumPowers := NumPowers-1; 0309 level := level-1; 0310 END 0311 ELSE IF 0312 line = 'WAIT' THEN 0313 BEGIN 0314 Z := ReActivate; 0315 Z := X*240.0 + i*Y*240; 0316 ROTATE(ABS(Z)) 0317 END 0318 ELSE IF line = 'HILD' THEN motor(induction) 0319 ELSE IF (line = 'REV') THEN BEGIN 0320 v := YellowPhase; 0321 IF (NOT(v IN [#14..#240])) THEN 0322 WriteLn(' POWER SUPPLY OUT OF SPEC') ELSE specValue := v; 0323 specValidate 0324 END 0325 ELSE IF (line = 'OK') THEN BEGIN 0326 IncomingSupply := True; specValidate END 0327 ELSE IF (line = 'NOK') THEN BEGIN IncomingSupply := False; specValidate END 0328 else begin 0329 GeneratedPowerLine.IncreasePower( 0330 'Unknown input power "%s"', [SwitchPower.Current]); // CHECK: string should not cause problems 0331 end; 0332 END; 0333 0334 0335 end (* AVeryVeryLongFunctionName *) ; // check that only necessary work is done to align