File : s-casuti.adb


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --                     S Y S T E M . C A S E _ U T I L                      --
   6 --                                                                          --
   7 --                                 B o d y                                  --
   8 --                                                                          --
   9 --                     Copyright (C) 1995-2013, AdaCore                     --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- GNAT was originally developed  by the GNAT team at  New York University. --
  28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 pragma Compiler_Unit_Warning;
  33 
  34 package body System.Case_Util is
  35 
  36    --------------
  37    -- To_Lower --
  38    --------------
  39 
  40    function To_Lower (A : Character) return Character is
  41       A_Val : constant Natural := Character'Pos (A);
  42 
  43    begin
  44       if A in 'A' .. 'Z'
  45         or else A_Val in 16#C0# .. 16#D6#
  46         or else A_Val in 16#D8# .. 16#DE#
  47       then
  48          return Character'Val (A_Val + 16#20#);
  49       else
  50          return A;
  51       end if;
  52    end To_Lower;
  53 
  54    procedure To_Lower (A : in out String) is
  55    begin
  56       for J in A'Range loop
  57          A (J) := To_Lower (A (J));
  58       end loop;
  59    end To_Lower;
  60 
  61    --------------
  62    -- To_Mixed --
  63    --------------
  64 
  65    procedure To_Mixed (A : in out String) is
  66       Ucase : Boolean := True;
  67 
  68    begin
  69       for J in A'Range loop
  70          if Ucase then
  71             A (J) := To_Upper (A (J));
  72          else
  73             A (J) := To_Lower (A (J));
  74          end if;
  75 
  76          Ucase := A (J) = '_';
  77       end loop;
  78    end To_Mixed;
  79 
  80    --------------
  81    -- To_Upper --
  82    --------------
  83 
  84    function To_Upper (A : Character) return Character is
  85       A_Val : constant Natural := Character'Pos (A);
  86 
  87    begin
  88       if A in 'a' .. 'z'
  89         or else A_Val in 16#E0# .. 16#F6#
  90         or else A_Val in 16#F8# .. 16#FE#
  91       then
  92          return Character'Val (A_Val - 16#20#);
  93       else
  94          return A;
  95       end if;
  96    end To_Upper;
  97 
  98    procedure To_Upper (A : in out String) is
  99    begin
 100       for J in A'Range loop
 101          A (J) := To_Upper (A (J));
 102       end loop;
 103    end To_Upper;
 104 
 105 end System.Case_Util;