131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
+
+
+
+
+
+
|
case Arguments.Current_Event is
when Events.Add_Atom =>
State.Set_Right_Padding (Arguments.Current_Atom);
when others =>
null;
end case;
when Commands.Prefix =>
Parse (State.Prefix, Arguments);
when Commands.Sign =>
case Arguments.Current_Event is
when Events.Add_Atom =>
State.Set_Positive_Sign (Arguments.Current_Atom);
when others =>
return;
end case;
Arguments.Next (Event);
case Event is
when Events.Add_Atom =>
State.Set_Negative_Sign (Arguments.Current_Atom);
when others =>
null;
end case;
when Commands.Suffix =>
Parse (State.Suffix, Arguments);
when Commands.Width =>
case Arguments.Current_Event is
when Events.Add_Atom =>
declare
New_Width : constant Width
:= Width'Value (To_String (Arguments.Current_Atom));
begin
|
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
|
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
|
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
if not Template.Positive_Sign.Is_Empty then
Output.Append (Template.Positive_Sign.Query.Data.all);
else
Has_Sign := False;
end if;
end if;
Output.Invert;
if Has_Sign then
Length := Length + 1;
end if;
Add_Prefix :
declare
Cursor : constant Atom_Maps.Cursor
:= Template.Prefix.Find ((Value, Value));
begin
if Atom_Maps.Has_Element (Cursor) then
Output.Append_Reverse (Atom_Maps.Element (Cursor).Query.Data.all);
end if;
end Add_Prefix;
Output.Invert;
Add_Suffix :
declare
Cursor : constant Atom_Maps.Cursor
:= Template.Suffix.Find ((Value, Value));
begin
if Atom_Maps.Has_Element (Cursor) then
Output.Append (Atom_Maps.Element (Cursor).Query.Data.all);
end if;
end Add_Suffix;
if Length > Template.Maximum_Width then
return Safe_Atom (Template.Overflow_Message, "");
end if;
if Length < Template.Minimum_Width then
declare
Needed : constant Width := Template.Minimum_Width - Length;
|
638
639
640
641
642
643
644
645
646
647
648
649
650
651
|
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
procedure Remove_Image (Object : in out Format; Value : in T) is
begin
Exclude (Object.Images, (Value, Value));
end Remove_Image;
procedure Remove_Prefix
(Object : in out Format;
Value : in T) is
begin
Remove_Prefix (Object, (Value, Value));
end Remove_Prefix;
procedure Remove_Prefix
(Object : in out Format;
Values : in Interval) is
begin
Set_Prefix (Object, Values, Atom_Refs.Null_Immutable_Reference);
end Remove_Prefix;
procedure Remove_Suffix
(Object : in out Format;
Value : in T) is
begin
Remove_Suffix (Object, (Value, Value));
end Remove_Suffix;
procedure Remove_Suffix
(Object : in out Format;
Values : in Interval) is
begin
Set_Suffix (Object, Values, Atom_Refs.Null_Immutable_Reference);
end Remove_Suffix;
procedure Set_Align (Object : in out Format; Value : in Alignment) is
begin
Object.Align := Value;
end Set_Align;
|
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
|
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
procedure Set_Positive_Sign
(Object : in out Format;
Sign : in Atom) is
begin
Set_Positive_Sign (Object, Create (Sign));
end Set_Positive_Sign;
procedure Set_Prefix
(Object : in out Format;
Value : in T;
Prefix : in Atom_Refs.Immutable_Reference) is
begin
Set_Prefix (Object, (Value, Value), Prefix);
end Set_Prefix;
procedure Set_Prefix
(Object : in out Format;
Value : in T;
Prefix : in Atom) is
begin
Set_Prefix (Object, Value, Create (Prefix));
end Set_Prefix;
procedure Set_Prefix
(Object : in out Format;
Values : in Interval;
Prefix : in Atom_Refs.Immutable_Reference) is
begin
if Prefix.Is_Empty then
Exclude (Object.Prefix, Values);
else
Include (Object.Prefix, Values, Prefix);
end if;
end Set_Prefix;
procedure Set_Prefix
(Object : in out Format;
Values : in Interval;
Prefix : in Atom) is
begin
Set_Prefix (Object, Values, Create (Prefix));
end Set_Prefix;
procedure Set_Right_Padding
(Object : in out Format;
Symbol : in Atom_Refs.Immutable_Reference) is
begin
Object.Right_Padding := Symbol;
end Set_Right_Padding;
procedure Set_Right_Padding
(Object : in out Format;
Symbol : in Atom) is
begin
Set_Right_Padding (Object, Create (Symbol));
end Set_Right_Padding;
procedure Set_Suffix
(Object : in out Format;
Value : in T;
Suffix : in Atom_Refs.Immutable_Reference) is
begin
Set_Suffix (Object, (Value, Value), Suffix);
end Set_Suffix;
procedure Set_Suffix
(Object : in out Format;
Value : in T;
Suffix : in Atom) is
begin
Set_Suffix (Object, Value, Create (Suffix));
end Set_Suffix;
procedure Set_Suffix
(Object : in out Format;
Values : in Interval;
Suffix : in Atom_Refs.Immutable_Reference) is
begin
if Suffix.Is_Empty then
Exclude (Object.Suffix, Values);
else
Include (Object.Suffix, Values, Suffix);
end if;
end Set_Suffix;
procedure Set_Suffix
(Object : in out Format;
Values : in Interval;
Suffix : in Atom) is
begin
Set_Suffix (Object, Values, Create (Suffix));
end Set_Suffix;
procedure Set_Symbols
(Object : in out Format;
Symbols : in Atom_Arrays.Immutable_Reference) is
begin
if not Symbols.Is_Empty and then Symbols.Query.Data.all'Length >= 2 then
Object.Symbols := Symbols;
|