Warning, /frameworks/ktexteditor/autotests/input/indent/pascal/longtest1/expected 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:
0202       f(32);  //CHECK: label forced to margin, statement is on new line with comment
0203    end;
0204 
0205    for i := 0 to 100 do
0206    begin
0207       with p^ do
0208          begin s1; s2; s3 end
0209    end;
0210 
0211    with p^ do
0212       begin s1; s2; s3 end;
0213 
0214    for i := firstCh to lastCh do chtype[chr(i)] := none;
0215    value['0'] := 0; value['1'] := 1; value['2'] := 2;
0216    value['3'] := 3; value['4'] := 4; value['5'] := 5;
0217    value['6'] := 6; value['7'] := 7; value['8'] := 8;
0218    value['9'] := 9;
0219    value['A'] := 10; value['B'] := 11; value['C'] := 12;
0220    value['D'] := 13; value['E'] := 14; value['F'] := 15;
0221    value['a'] := 10; value['b'] := 11; value['c'] := 12;
0222    value['d'] := 13; value['e'] := 14; value['f'] := 15;
0223 
0224    IF NOT (CH IN ['{','}']) THEN
0225    // comment
0226    BEGIN  IF CH <= 'Z' THEN CMDCH := CH ELSE CMDCH := CHR(ORD(CH)-ORD('a')+ORD('A') );
0227       NEXTCH;
0228       IF CMDCH = 'L' THEN
0229          COMMAND(LISTON)
0230       ELSE IF CMDCH = 'T' THEN
0231          COMMAND(TRACEON)
0232       ELSE IF CMDCH = 'I' THEN
0233          COMMAND(INCLUDE)
0234       ELSE IF CMDCH = 'Z' THEN
0235          REPEAT
0236             BEGIN
0237                www.fred.com;
0238                REPEAT commandIn UNTIL numRem = 0;
0239                s1;
0240                s2;
0241             END;
0242          UNTIL False
0243       ELSE IF CMDCH = 'Q' THEN begin
0244          COMMAND(QUIET)
0245       end ELSE IF CMDCH = 'V' THEN
0246          COMMAND(VERBOSE)
0247       else if COMMAND.STRVAL = 'unknown' then
0248       begin
0249          IF
0250                (numStr[0] >= 0) AND
0251                (numStr[1] IN ['+', '-', '0' .. '9', '?']) // CHECK: indent
0252          THEN
0253             Power.Supply := '"AC' ELSE Power.Supply := '"DC'
0254       end else  if CommandResult.Str = 'helpIamLost' then begin
0255          Power.Supply := SetPowerSupplyCommands(Plus15V.Increase(Amps));
0256       end else if (line = 'SHORT') OR (line = 'OPEN') THEN  BEGIN
0257          OpenCircuit;
0258          {*smoke billows out*}
0259          IF SPARKS THEN
0260          BEGIN
0261             SPARKS := FALSE;
0262             ShutDown
0263          END
0264       END ELSE IF
0265          (line = 'OPEN') OR (line = 'CLOSED') THEN
0266       BEGIN;
0267          AddFuse(Low);
0268          IF SPARKS THEN
0269          BEGIN;
0270             SPARKS := False;
0271             CircuitBreaker(wishfulThinking)
0272          END else if cond then
0273             statement;
0274       END ELSE IF (line = 'PLUS') OR (line = 'MINUS') THEN Transform(RedPhase)
0275       ELSE IF (line = 'RED') OR (line = 'BLACK') THEN Transform(BluePhase)
0276       ELSE IF line = 'XX' THEN Transistor
0277       ELSE IF line = 'YYYY' THEN SetCurrent(FiveAmps)
0278       ELSE IF line = 'QQQQ' THEN SetPower(FiveWatts)
0279       ELSE IF line = 'AAAAA' THEN Power(FiveAmps)
0280       ELSE IF
0281          {* QWERTY COMMENT LLLLLLLLL ####### *}
0282          line = 'SSSSS' THEN
0283       BEGIN
0284          actualphase := YellowPhase;
0285          AdjustLinePhase(NewPhase);
0286       END
0287       ELSE IF
0288             line = 'Noisy' THEN Filter
0289       ELSE IF line = 'BLUE' THEN
0290       BEGIN
0291          AdjustLinePhase(XPhase);
0292          Erase := True
0293       END ELSE IF
0294          line = 'RED' THEN BEGIN Swap; Hope END
0295       ELSE IF
0296          line = '415' THEN iNumPut415
0297       ELSE IF
0298          // a statement like this has no chance of being correctly indented ...
0299          // otoh, it shouldn't turn out catastrophically wrong.
0300          line = 'REFL' THEN FOR i := 1 TO numLines DO
0301                                      WriteLn('level=', powerLevel[i], ' ', name[i]+'='+power[i])
0302       ELSE IF
0303          line = 'HIGH' THEN reduce
0304       ELSE IF
0305          line = 'LOW' THEN increase
0306       ELSE IF
0307          line = 'END' THEN
0308       BEGIN
0309          WHILE powerlevel[NumPowers] = level DO NumPowers := NumPowers-1;
0310          level := level-1;
0311       END
0312       ELSE IF
0313          line = 'WAIT' THEN
0314       BEGIN
0315          Z := ReActivate;
0316          Z := X*240.0 + i*Y*240;
0317          ROTATE(ABS(Z))
0318       END
0319       ELSE IF line = 'HILD' THEN motor(induction)
0320       ELSE IF (line = 'REV') THEN        BEGIN
0321          v := YellowPhase;
0322          IF (NOT(v IN [#14..#240])) THEN
0323             WriteLn(' POWER SUPPLY OUT OF SPEC') ELSE specValue := v;
0324          specValidate
0325       END
0326       ELSE IF (line = 'OK') THEN BEGIN
0327          IncomingSupply := True; specValidate END
0328       ELSE IF (line = 'NOK') THEN BEGIN IncomingSupply := False; specValidate END
0329       else    begin
0330          GeneratedPowerLine.IncreasePower(
0331                        'Unknown input power "%s"', [SwitchPower.Current]);    // CHECK: string should not cause problems
0332       end;
0333    END;
0334 
0335 
0336 end (* AVeryVeryLongFunctionName *) ;  // check that only necessary work is done to align