with Ada.Wide_Wide_Text_IO; with VSS.Application; with VSS.Regular_Expressions; with VSS.Strings; with VSS.Strings.Conversions; procedure Grep is procedure Print_Match (Match : VSS.Regular_Expressions.Regular_Expression_Match; Group : Natural := 0); -- Print Match information procedure Print_Match (Match : VSS.Regular_Expressions.Regular_Expression_Match; Group : Natural := 0) is begin Ada.Wide_Wide_Text_IO.Put_Line (":" & Match.First_Marker (Group).Character_Index'Wide_Wide_Image & " .." & Match.Last_Marker (Group).Character_Index'Wide_Wide_Image & " => '" & VSS.Strings.Conversions.To_Wide_Wide_String (Match.Captured (Group)) & "'"); end Print_Match; Pattern : constant VSS.Strings.Virtual_String := VSS.Application.Arguments.Element (1); Reg_Exp : constant VSS.Regular_Expressions.Regular_Expression := VSS.Regular_Expressions.To_Regular_Expression (Pattern); begin if Reg_Exp.Is_Valid then while not Ada.Wide_Wide_Text_IO.End_Of_File loop declare Line : constant Wide_Wide_String := Ada.Wide_Wide_Text_IO.Get_Line; Text : constant VSS.Strings.Virtual_String := VSS.Strings.To_Virtual_String (Line); Match : constant VSS.Regular_Expressions.Regular_Expression_Match := Reg_Exp.Match (Text); begin if Match.Has_Match then Ada.Wide_Wide_Text_IO.Put ("Match found"); Print_Match (Match); for J in 1 .. Reg_Exp.Capture_Group_Count loop if Match.Has_Capture (J) then Ada.Wide_Wide_Text_IO.Put (" "); Ada.Wide_Wide_Text_IO.Put (J'Wide_Wide_Image); Print_Match (Match, J); end if; end loop; end if; end; end loop; else Ada.Wide_Wide_Text_IO.Put ("Invalid regexp:"); Ada.Wide_Wide_Text_IO.Put (VSS.Strings.Conversions.To_Wide_Wide_String (Reg_Exp.Error_String)); Ada.Wide_Wide_Text_IO.New_Line; end if; end Grep;