------------------------------------------------------------------------ -- -- -- McKae Software Utilities -- -- -- -- Copyright (C) 2006 McKae Technologies -- -- -- -- The McKae software utilities are free software; you can -- -- redistribute it and/or modify it under terms of the GNU General -- -- Public License as published by the Free Software Foundation; -- -- either version 2, or (at your option) any later version. McKae -- -- Software Utilities are distributed in the hope that they will be -- -- useful, but WITHOUT ANY WARRANTY; without even the implied -- -- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -- -- See the GNU General Public License for more details. You should -- -- have received a copy of the GNU General Public License distributed -- -- with DTraq; see file COPYING. If not, write to the Free Software -- -- Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -- -- USA. -- -- -- -- As a special exception, if other files instantiate generics from -- -- this unit, or you link this unit with other files to produce an -- -- executable, this unit does not by itself cause the resulting -- -- executable to be covered by the GNU General Public License. This -- -- exception does not however invalidate any other reasons why the -- -- executable file might be covered by the GNU Public License. -- -- -- -- The McKae Software Utilities are maintained by McKae Technologies -- -- (http://www.mckae.com). -- ------------------------------------------------------------------------ with Ada.Strings.Fixed; use Ada.Strings.Fixed; with Ada.Strings.Maps.Constants; use Ada.Strings.Maps.Constants; package body McKae.Text.Lexicals is --------------- -- Transform -- --------------- function Transform (S : String; Capitalization : Capitalizations; Remove_Underscores : Boolean := False) return String is use Ada.Strings.Maps; T : String (S'Range); P : Positive := S'Last; Cap_Next : Boolean := Capitalization = Capitalized; begin case Capitalization is when No_Change => T := S; when Lower => T := Translate (S, Lower_Case_Map); when Upper => T := Translate (S, Upper_Case_Map); when Capitalized | Camelback => T := Translate (S, Lower_Case_Map); for I in T'Range loop if Cap_Next then T (I) := Value (Upper_Case_Map, T (I)); Cap_Next := False; end if; Cap_Next := T (I) = '_'; end loop; end case; if Remove_Underscores then P := T'First; for I in T'Range loop if T (I) /= '_' then T (P) := T (I); P := P + 1; end if; end loop; P := P - 1; end if; return T (T'First .. P); end Transform; end McKae.Text.Lexicals;