Warning, /frameworks/ktexteditor/autotests/input/indent/ada/longtest/origin is written in an unsupported language. File is not indexed.
0001 -- 0002 -- 0003 0004 0005 -- 0006 0007 with text_io; 0008 use text_io; 0009 0010 with Ada.Integer_Text_IO; 0011 use Ada.Integer_Text_IO; 0012 0013 0014 package Package_With_Private is 0015 0016 type Private_Type is private; 0017 0018 private 0019 0020 type Private_Type is array (1 .. 10) of Integer; 0021 0022 end Package_With_Private; 0023 0024 0025 procedure Range_1( i : integer ); -- forward declaration 0026 0027 0028 Block_Name : -- CHECK: block labels are handled sensibly 0029 declare 0030 A_Variable : The_Type; 0031 begin 0032 Use A_Variable 0033 end Block_Name; 0034 0035 generic 0036 Max: Positive; 0037 type Element_T is private; 0038 package Generic_Stack is 0039 procedure Push (E: Element_T); 0040 function Pop return Element_T; 0041 end Generic_Stack; 0042 0043 0044 procedure Generic_Swap is 0045 generic 0046 type Item is private; 0047 procedure Exchange(X, Y: in out Item); 0048 procedure Exchange(X, Y: in out Item) is 0049 Temp: Item; 0050 begin 0051 Temp := X; 0052 Result.Elements (i, Result.Elements'Last (2)) 0053 := 3 + Right.Elements (i); 0054 a := long_expression 0055 + another_long_expression; -- CHECK: this should be indented 0056 func 0057 ( a, 0058 b 0059 ); 0060 Y := func 0061 ( a, 0062 b 0063 ); 0064 Y := 0065 func 0066 ( a, 0067 b 0068 ); 0069 end; 0070 0071 A, B : Integer; 0072 procedure Swap is new Exchange(integer); 0073 0074 begin 0075 A := 1; 0076 B := 2; 0077 Swap(A,B); 0078 Ada.Float_Text_IO.put -- Float literal 0079 (Item => gamma(i), Fore => 1, Aft => 1, Exp => 0); 0080 new_line; 0081 Ada.Float_Text_IO.put( -- Float literal 0082 Item => gamma(i), Fore => 1, Aft => 1, Exp => 0); 0083 new_line; 0084 return( a+b ); 0085 return( 0086 a+b ); 0087 return 0088 ( a 0089 +b); 0090 0091 end Generic_Swap; 0092 0093 0094 function SUBSTRING (DSTR: DYN_STRING; -- this is a forward reference 0095 START : natural; 0096 LENGTH : natural := 0) 0097 return DYN_STRING; 0098 0099 function SUBSTRING (DSTR: DYN_STRING; 0100 LENGTH : natural := 0) 0101 return DYN_STRING is 0102 DS: DYN_STRING; 0103 L : natural := LENGTH; 0104 0105 type Degrees is new Float range -273.15 .. Float'Last; 0106 Temperature : Degrees; 0107 0108 type Car is record 0109 Identity : Long_Long_Integer; 0110 Number_Wheels : Positive range 1 .. 10; 0111 Paint : Color; 0112 Horse_Power_kW : Float range 0.0 .. 2_000.0; 0113 Consumption : Float range 0.0 .. 100.0; 0114 end record; 0115 0116 BMW : Car := 0117 (Identity => 2007_752_83992434, 0118 Number_Wheels => 5, 0119 Horse_Power_kW => 190.0, 0120 Consumption => 10.1, 0121 Paint => Blue); 0122 0123 type Directions is (North, South, East, West); 0124 Heading : Directions; 0125 0126 begin 0127 put_line("It works!"); 0128 0129 case long_expression 0130 + Another_long_expression is 0131 when 89 ==> 0132 s1; 0133 s2; 0134 <<lab>> -- CHECK: label should be aligned with begin 0135 # 0136 when 1 => 0137 Walk_The_Dog; 0138 0139 when 16#5# ==> 0140 a := 5; 0141 a := 9; 0142 f(18); 0143 s1; 0144 0145 #include "fred" 0146 0147 when 5 => 0148 case Heading is 0149 when North => 0150 Y := Y + 1; 0151 when South => 0152 Y := Y - 1; 0153 when East => 0154 X := X + 1; 0155 when West => 0156 X := X - 1; 0157 end case; 0158 0159 when 8 | 10 => 0160 0161 Sell_All_Stock; 0162 0163 when others => 0164 0165 if Temperature >= 40.0 then 0166 Put_Line ("Wow!"); 0167 Put_Line ("It's extremely hot"); 0168 elsif Temperature >= 30.0 then 0169 Put_Line ("It's hot"); 0170 elsif Temperature >= 20.0 then 0171 Put_Line ("It's warm"); 0172 elsif Temperature >= 10.0 then 0173 Put_Line ("It's cool"); 0174 elsif Temperature >= 0.0 then 0175 Put_Line ("It's cold"); 0176 else 0177 Put_Line ("It's freezing"); 0178 end if; 0179 0180 end case; 0181 0182 DS3.DATA(1..DS3.SIZE):= DS1.DATA(1..DS1.SIZE) 0183 & DS2.DATA(1..DS2.SIZE); 0184 return DS3; -- CHECK: should align with DS3 above 0185 end main; 0186 0187 0188 procedure Quadratic_Equation 0189 (A, B, C : Float; -- By default it is "in". 0190 R1, R2 : out Float; 0191 Valid : out Boolean) 0192 is 0193 Z : Float; 0194 0195 type Discriminated_Record (Size : Natural) is 0196 record 0197 A : String (1 .. Size); 0198 B : Integer; 0199 end record; 0200 0201 begin 0202 Z := B**2 - 4.0 * A * C; 0203 0204 if At_Location > In_Text'Last 0205 or else At_Location + Pattern'Length - 1 > 0206 In_Text'Last 0207 or else Slided_Text_T (In_Text ( 0208 At_Location .. At_Location + Pattern'Length - 1)) /= 0209 Slided_Pattern 0210 then 0211 Valid := False; -- Being out parameter, it should be modified at least once. 0212 R1 := 0.0; 0213 R2 := 0.0; 0214 <<lab>> 0215 else 0216 Valid := True; 0217 R1 := (-B + Sqrt (Z)) / (2.0 * A); 0218 R2 := (-B - Sqrt (Z)) / (2.0 * A); 0219 end if; 0220 end Quadratic_Equation; 0221 0222 0223 procedure Error_Handling_4 is 0224 0225 Float_Error : exception; 0226 0227 type DEVICE is (PRINTER, DISK, DRUM); 0228 type STATE is (OPEN, CLOSED); 0229 0230 type PERIPHERAL(UNIT : DEVICE := DISK) is 0231 record 0232 STATUS : STATE; 0233 case UNIT is 0234 when PRINTER => 0235 LINE_COUNT : INTEGER range 1 .. PAGE_SIZE; 0236 when others => 0237 CYLINDER : CYLINDER_INDEX; 0238 TRACK : TRACK_NUMBER; 0239 end case; 0240 end record; 0241 0242 0243 function Square_Root (X : in Float) return Float is 0244 use Ada.Numerics.Elementary_Functions; 0245 begin 0246 if (X < 0.0) then 0247 raise Float_Error; 0248 else 0249 return Sqrt (X); 0250 end if; 0251 end Square_Root; 0252 0253 begin 0254 0255 begin 0256 C := Square_Root (A ** 2 + B ** 2); 0257 0258 T_IO.Put ("C is "); 0259 F_IO.Put 0260 (Item => C, 0261 Fore => (F_IO.Default_Fore + 0262 1 ), 0263 Aft => F_IO.Default_Aft, 0264 Exp => F_IO.Default_Exp); 0265 exception 0266 when Constraint_Error => 0267 T_IO.Put ("C cannot be calculated!"); 0268 end; 0269 0270 return; 0271 end Error_Handling_4; 0272 0273 0274 procedure Range_1 is 0275 type Range_Type is range -5 .. 10; 0276 0277 Default_String : constant String := "This is the long string returned by" & 0278 " default. It is broken into multiple" & 0279 " Ada source lines for convenience."; 0280 0281 Another_Default_String : constant String := 0282 "This is the long string returned by" & 0283 " default. It is broken into multiple" & 0284 " Ada source lines for convenience."; 0285 0286 type Op_Codes_In_Column is 0287 ( Push, 0288 Pop, 0289 Add ); 0290 0291 package T_IO renames Ada.Text_IO; 0292 package I_IO is 0293 new Ada.Text_IO.Integer_IO (Range_Type); 0294 0295 a: real; 0296 0297 0298 begin 0299 for A in Range_Type loop 0300 I_IO.Put (Item => A, 0301 Width => 3, -- CHECK: params should line up 0302 Base => 10); 0303 0304 if A < Range_Type'Last then 0305 Process_Each_Page: 0306 loop 0307 0308 declare 0309 package Float_100_Stack is new Generic_Stack (100, Float); 0310 use Float_100_Stack; 0311 begin 0312 Push (45.8); 0313 end; 0314 0315 Process_All_The_Lines_On_This_Page: 0316 loop 0317 s1; 0318 exit Process_All_The_Lines_On_This_Page when Line_Number = Max_Lines_On_Page; 0319 s2; 0320 Look_For_Sentinel_Value: 0321 loop 0322 s3; 0323 exit Look_For_Sentinel_Value when Current_Symbol = Sentinel; 0324 s4; 0325 end loop Look_For_Sentinel_Value; 0326 s5; 0327 end loop Process_All_The_Lines_On_This_Page; 0328 s6; 0329 exit Process_Each_Page when Page_Number = Maximum_Pages; 0330 s7; 0331 end loop Process_Each_Page; 0332 else 0333 T_IO.New_Line; 0334 0335 -- comment below scans back to here !!?? 0336 for I in A'Range (1) loop 0337 for J in A'Range (2) loop 0338 Sum := 0.0; 0339 for R in A'Range (2) loop 0340 Sum := Sum + A.all (I, R) * B.all (R, J); 0341 end loop; 0342 C.all (I, J) := Sum + 0343 second_part_of_long_expression + 0344 third_part_of_long_expression; 0345 if Input_Found then 0346 Count_Characters; 0347 0348 else --not Input_Found 0349 Reset_State; 0350 Character_Total := 0351 First_Part_Total * First_Part_Scale_Factor + 0352 Second_Part_Total * Second_Part_Scale_Factor + 0353 Default_String'Length + Delimiter_Size; 0354 end if; 0355 0356 end loop; 0357 end loop; 0358 end if; 0359 end loop; 0360 end Range_1; 0361 0362 -- generic instantiation -- TODO: wrong, ... 0363 -- ... statementIndent() scans back to for R in A'Range ... ??? ... 0364 -- ... because it skips over the ends 0365 0366 package Day_Of_Month_IO is -- TODO: scans back to beginning of file: generic? should have stopped at 'procedure' 0367 new Ada.Text_IO.Integer_IO (Day_Of_Month); 0368 0369 procedure f; 0370 0371 -- CHECK: these should be recognised as forward procedures ... 0372 procedure Day_Of (Day, Month, Year : in Integer; 0373 Result : out Integer); 0374 procedure x; 0375 procedure x1; 0376 0377 procedure TRAVERSE_TREE; 0378 procedure INCREMENT(X : in out INTEGER); 0379 procedure RIGHT_INDENT(MARGIN : out LINE_SIZE); -- see 3.5.4 0380 procedure SWITCH(FROM, TO : in out LINK); -- see 3.8.1 0381 0382 function RANDOM return PROBABILITY; -- see 3.5.7 0383 0384 function MIN_CELL(X : LINK) return CELL; -- see 3.8.1 0385 function NEXT_FRAME(K : POSITIVE) return FRAME; -- see 3.8 0386 function DOT_PRODUCT(LEFT,RIGHT: VECTOR) return REAL; -- see 3.6 0387 0388 function "*"(LEFT,RIGHT : MATRIX) return MATRIX; -- see 3.6 0389 0390 procedure Nesting is 0391 0392 procedure Triple is 0393 0394 procedure Second_Layer(Persistence : in out Persistence_View; 0395 Stream : not null access Root_Stream_Type'Class) 0396 is 0397 0398 procedure Bottom_Layer is 0399 begin 0400 Put_Line("This is the Bottom Layer talking."); 0401 Do_Something; 0402 0403 if Test then 0404 goto Exit_Use_Goto; 0405 end if; 0406 Do_Something_Else; 0407 <<Label>> 0408 0409 <<Exit_Use_Goto>> -- CHECK: should align with 'begin' 0410 return; 0411 end Bottom_Layer; 0412 0413 begin -- Second_Layer 0414 Put_Line("This is the Second Layer talking."); 0415 Bottom_Layer; 0416 <<Exit_Use_Goto>> -- CHECK: should align with 'begin' 0417 Put_Line("We are back up to the Second Layer."); 0418 end Second_Layer; 0419 0420 begin -- Triple 0421 Put_Line("This is procedure Triple talking to you."); 0422 Second_Layer; 0423 Put_Line("We are back up to the procedure named Triple."); 0424 end Triple; 0425 0426 begin -- Nesting 0427 Put_Line("Start the triple nesting here."); 0428 Triple; 0429 Put_Line("Finished, and back to the top level."); 0430 end Nesting; 0431 0432 0433 procedure Proced3 is 0434 0435 Dogs, Cats, Animals : INTEGER; 0436 0437 -- This is a procedure specification 0438 procedure Total_Number_Of_Animals(Variety1 : in INTEGER; 0439 Variety2 : in INTEGER; 0440 Total : out INTEGER); 0441 0442 -- This is a procedure body 0443 procedure Total_Number_Of_Animals(Variety1 : in INTEGER; 0444 Variety2 : in INTEGER; 0445 Total : out INTEGER) is 0446 begin 0447 Total := Variety1 + Variety2; 0448 end Total_Number_Of_Animals; 0449 0450 begin 0451 Dogs := 3; 0452 Cats := 4; 0453 if some_condition 0454 or some_other_condition 0455 or yet_another_condition 0456 then 0457 action( a, 0458 b+c, 0459 c + d 0460 + e +f +g, -- would be nice if this was indented 0461 ); 0462 0463 end if; 0464 0465 Total_Number_Of_Animals(Dogs, Cats, Animals); 0466 Put("The total number of animals is"); 0467 Put(Animals, 3); 0468 if cond then 0469 while c loop 0470 for i in integer -- multiline for loop 0471 range 1..1000 0472 loop 0473 a := long_expression 0474 + long_expression 0475 + long_expression; 0476 a(i) := 10; 0477 end loop; 0478 a := long_expression 0479 + long_expression 0480 + long_expression; 0481 0482 while x > 0 0483 and x <= 100 0484 loop -- CHECK: not indented 0485 loop -- CHECK: indented 0486 a := q1 + 0487 q2 + 0488 q3; 0489 end loop; 0490 end loop; 0491 0492 while x > 0 loop 0493 loop -- forever loop 0494 aaaaaaa := 0495 q1 + 0496 q2 + 0497 q3; 0498 end loop; 0499 end loop; 0500 end loop; 0501 0502 end loop; 0503 0504 fredzarmplezzzzzzzzzzzz( arg1, 0505 arg1, 0506 arg2, 0507 arg3 0508 ); 0509 x := f(a) + f(b); 0510 fffffffffffff( func0( func1( func2( f3( arg1, 0511 arg2, 0512 arg3, 0513 arg4 0514 ), 0515 a1, -- should be aligned with arg f3, not '(' 0516 a2, 0517 a3, 0518 a4 0519 ), 0520 0521 aa2, 0522 aa3, 0523 aa4, 0524 aa5 0525 ), 0526 bb1, 0527 bb2, 0528 bb3, 0529 bb4 0530 ), 0531 cc1, 0532 cc2, 0533 cc3, 0534 cc4 0535 ); 0536 0537 s1; 0538 end if; 0539 0540 New_Line; 0541 end Proced3; 0542 0543 0544 procedure Main is 0545 task Sub is 0546 entry Wake_Up(I: Integer); 0547 end Sub; 0548 0549 task body Sub is 0550 Stop: Boolean := False; 0551 begin 0552 while not Stop loop 0553 Put("Sub: Wait"); New_Line(1); 0554 accept Wake_Up(I: Integer) do 0555 Put("Sub: "); Put(I); New_Line(1); 0556 if I = 0 then 0557 Stop := True; 0558 end if; 0559 end Wake_Up; 0560 end loop; 0561 Put("Sub: Stop"); New_Line(1); 0562 end Sub; 0563 begin 0564 Extract_Publisher: 0565 for Index in Base_11_Digits (Item.Country + 1) .. 0566 Base_11_Digits (Item.Publisher) loop 0567 declare 0568 0569 Digit : constant Natural range 0 .. 9 0570 := Natural (Item.Number (Index)); 0571 Power : constant Natural range 0 .. 9 0572 := Item.Publisher - Natural (Index); 0573 0574 begin 0575 Publisher := Publisher + Digit * (10 ** Power); 0576 end; 0577 end loop Extract_Publisher; -- CHECK: matches 'for' above 0578 0579 Put("Main: Stop"); New_Line(1); 0580 declare 0581 begin 0582 end; 0583 if c 0584 and c2 0585 then 0586 s1; 0587 for i in a'range 0588 loop 0589 loop 0590 s12; 0591 s13; 0592 end lop; 0593 end loop; 0594 elsif c05 0595 or c06 0596 then 0597 s12; 0598 elsif c1 then 0599 s2; 0600 else 0601 s3; 0602 a12 := 0603 f(13); 0604 end if; 0605 end; 0606 end; 0607 0608 0609 package Utilities is 0610 generic 0611 type Item is private; 0612 procedure Swap(L, R : in out Item); 0613 -- A handy package at the project-specific level 0614 -- A constrained generic formal parameter 0615 generic 0616 type Item is (<>); 0617 function Next (Data : Item) return Item; 0618 -- A discrete type generic formal parameter 0619 generic 0620 type Item is (<>); 0621 -- A discrete type generic formal parameter 0622 function Prev (Data : Item) return Item; 0623 -- more generic subprograms as appropriate to your particular project needs 0624 end Utilities; 0625 0626 0627 // kate: line-numbers true; indent-width 3; replace-tabs on 0628 // kate: debugMode off