@@ -52,21 +52,21 @@ package body Filter is
5252
5353 -- Filter tokens
5454
55- Multiply_Token : aliased constant String := " "" *"" " ;
56- Plus_Token : aliased constant String := " "" +"" " ;
57- Minus_Token : aliased constant String := " "" -"" " ;
58- Divide_Token : aliased constant String := " "" /"" " ;
5955 Abs_Token : aliased constant String := " ABS" ;
60- Add_Token : aliased constant String := " ADD" ;
6156 Add_Param_Token : aliased constant String := " ADD_PARAM" ;
57+ Add_Token : aliased constant String := " ADD" ;
58+ Alternate_Token : aliased constant String := " ALTERNATE" ;
6259 BR_2_EOL_Token : aliased constant String := " BR_2_EOL" ;
6360 BR_2_LF_Token : aliased constant String := " BR_2_LF" ;
6461 Capitalize_Token : aliased constant String := " CAPITALIZE" ;
6562 Clean_Text_Token : aliased constant String := " CLEAN_TEXT" ;
6663 Coma_2_Point_Token : aliased constant String := " COMA_2_POINT" ;
6764 Contract_Token : aliased constant String := " CONTRACT" ;
65+ Default_Token : aliased constant String := " DEFAULT" ;
6866 Del_Param_Token : aliased constant String := " DEL_PARAM" ;
6967 Div_Token : aliased constant String := " DIV" ;
68+ Divide_Token : aliased constant String := " "" /"" " ;
69+ End_With_Token : aliased constant String := " END_WITH" ;
7070 Exist_Token : aliased constant String := " EXIST" ;
7171 File_Exists_Token : aliased constant String := " FILE_EXISTS" ;
7272 Format_Date_Token : aliased constant String := " FORMAT_DATE" ;
@@ -77,22 +77,26 @@ package body Filter is
7777 Match_Token : aliased constant String := " MATCH" ;
7878 Max_Token : aliased constant String := " MAX" ;
7979 Min_Token : aliased constant String := " MIN" ;
80+ Minus_Token : aliased constant String := " "" -"" " ;
8081 Modulo_Token : aliased constant String := " MOD" ;
8182 Mult_Token : aliased constant String := " MULT" ;
83+ Multiply_Token : aliased constant String := " "" *"" " ;
8284 Neg_Token : aliased constant String := " NEG" ;
8385 No_Digit_Token : aliased constant String := " NO_DIGIT" ;
8486 No_Dynamic_Token : aliased constant String := " NO_DYNAMIC" ;
8587 No_Letter_Token : aliased constant String := " NO_LETTER" ;
8688 No_Space_Token : aliased constant String := " NO_SPACE" ;
8789 Oui_Non_Token : aliased constant String := " OUI_NON" ;
90+ Plus_Token : aliased constant String := " "" +"" " ;
8891 Point_2_Coma_Token : aliased constant String := " POINT_2_COMA" ;
8992 Repeat_Token : aliased constant String := " REPEAT" ;
90- Replace_Token : aliased constant String := " REPLACE" ;
9193 Replace_All_Token : aliased constant String := " REPLACE_ALL" ;
9294 Replace_Param_Token : aliased constant String := " REPLACE_PARAM" ;
95+ Replace_Token : aliased constant String := " REPLACE" ;
9396 Reverse_Token : aliased constant String := " REVERSE" ;
9497 Size_Token : aliased constant String := " SIZE" ;
9598 Slice_Token : aliased constant String := " SLICE" ;
99+ Start_With_Token : aliased constant String := " START_WITH" ;
96100 Strip_Token : aliased constant String := " STRIP" ;
97101 Sub_Token : aliased constant String := " SUB" ;
98102 Trim_Token : aliased constant String := " TRIM" ;
@@ -103,8 +107,6 @@ package body Filter is
103107 Web_NBSP_Token : aliased constant String := " WEB_NBSP" ;
104108 Wrap_Token : aliased constant String := " WRAP" ;
105109 Yes_No_Token : aliased constant String := " YES_NO" ;
106- Default_Token : aliased constant String := " DEFAULT" ;
107- Alternate_Token : aliased constant String := " ALTERNATE" ;
108110
109111 -- Filters Table
110112
@@ -265,6 +267,12 @@ package body Filter is
265267 Wrap =>
266268 (Wrap_Token'Access , Wrap'Access ),
267269
270+ Start_With =>
271+ (Start_With_Token'Access , Start_With'Access ),
272+
273+ End_With =>
274+ (End_With_Token'Access , End_With'Access ),
275+
268276 Yes_No =>
269277 (Yes_No_Token'Access , Yes_No'Access )
270278 ];
@@ -708,6 +716,34 @@ package body Filter is
708716 end ;
709717 end Divide ;
710718
719+ -- ------------
720+ -- End_With --
721+ -- ------------
722+
723+ function End_With
724+ (S : String;
725+ C : not null access Filter_Context;
726+ P : Parameter_Data := No_Parameter) return String
727+ is
728+ pragma Unreferenced (C);
729+ begin
730+ if P = No_Parameter then
731+ raise Template_Error with " missing parameter for END_WITH filter" ;
732+ end if ;
733+
734+ declare
735+ Sub : constant String := To_String (P.S);
736+ begin
737+ if S'Length >= Sub'Length
738+ and then S (S'Last - Sub'Length + 1 .. S'Last) = Sub
739+ then
740+ return " TRUE" ;
741+ else
742+ return " FALSE" ;
743+ end if ;
744+ end ;
745+ end End_With ;
746+
711747 -- ---------
712748 -- Exist --
713749 -- ---------
@@ -1785,6 +1821,34 @@ package body Filter is
17851821 end if ;
17861822 end Slice ;
17871823
1824+ -- --------------
1825+ -- Start_With --
1826+ -- --------------
1827+
1828+ function Start_With
1829+ (S : String;
1830+ C : not null access Filter_Context;
1831+ P : Parameter_Data := No_Parameter) return String
1832+ is
1833+ pragma Unreferenced (C);
1834+ begin
1835+ if P = No_Parameter then
1836+ raise Template_Error with " missing parameter for START_WITH filter" ;
1837+ end if ;
1838+
1839+ declare
1840+ Sub : constant String := To_String (P.S);
1841+ begin
1842+ if S'Length >= Sub'Length
1843+ and then S (S'First .. S'First + Sub'Length - 1 ) = Sub
1844+ then
1845+ return " TRUE" ;
1846+ else
1847+ return " FALSE" ;
1848+ end if ;
1849+ end ;
1850+ end Start_With ;
1851+
17881852 -- ---------
17891853 -- Strip --
17901854 -- ---------
0 commit comments