------------------------------------------------------------------------------ -- -- -- Matreshka Project -- -- -- -- Localization, Internationalization, Globalization for Ada -- -- -- -- Tools Component -- -- -- ------------------------------------------------------------------------------ -- -- -- Copyright © 2010-2011, Vadim Godunko -- -- All rights reserved. -- -- -- -- Redistribution and use in source and binary forms, with or without -- -- modification, are permitted provided that the following conditions -- -- are met: -- -- -- -- * Redistributions of source code must retain the above copyright -- -- notice, this list of conditions and the following disclaimer. -- -- -- -- * Redistributions in binary form must reproduce the above copyright -- -- notice, this list of conditions and the following disclaimer in the -- -- documentation and/or other materials provided with the distribution. -- -- -- -- * Neither the name of the Vadim Godunko, IE nor the names of its -- -- contributors may be used to endorse or promote products derived from -- -- this software without specific prior written permission. -- -- -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- -- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -- -- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -- -- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -- -- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -- -- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -- -- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- -- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -- -- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -- -- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- -- -- ------------------------------------------------------------------------------ -- $Revision: 1535 $ $Date: 2011-02-25 22:56:48 +0300 (Пт, 25 фев 2011) $ ------------------------------------------------------------------------------ with Ada.Command_Line; with Ada.Directories; with Ada.Strings.Unbounded.Text_IO; with Ada.Text_IO; with GNAT.Regpat; procedure Configure.Instantiate (Configuration_File_Name : String; Suppress_Message : Boolean := False) is use Ada.Command_Line; use Ada.Directories; use Ada.Strings.Unbounded; use Ada.Strings.Unbounded.Text_IO; use Ada.Text_IO; use GNAT.Regpat; function "+" (Item : Unbounded_String) return String renames To_String; Template_File : File_Type; Configuration_File : File_Type; Line : Unbounded_String; Replacement : Unbounded_String; Pattern : Pattern_Matcher := Compile ("(@(.+?)@)"); Matches : Match_Array (0 .. 2); begin if not Suppress_Message then Put_Line (Simple_Name (Command_Name) & ": creating " & Configuration_File_Name); end if; Open (Template_File, In_File, Configuration_File_Name & ".in"); Create (Configuration_File, Out_File, Configuration_File_Name); while not End_Of_File (Template_File) loop Line := Get_Line (Template_File); loop Match (Pattern, +Line, Matches); exit when Matches (0) = No_Match; if Substitutions.Contains (Unbounded_Slice (Line, Matches (2).First, Matches (2).Last)) then Replacement := Substitutions.Element (Unbounded_Slice (Line, Matches (2).First, Matches (2).Last)); else Warning ("substitution '" & Slice (Line, Matches (2).First, Matches (2).Last) & "' is not defined"); Replacement := Null_Unbounded_String; end if; Replace_Slice (Line, Matches (1).First, Matches (1).Last, +Replacement); end loop; Put_Line (Configuration_File, Line); end loop; Close (Configuration_File); Close (Template_File); end Configure.Instantiate;