File : s-imgwch.adb


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --                     S Y S T E M . I M G _ W C H A R                      --
   6 --                                                                          --
   7 --                                 B o d y                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
  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 with Interfaces; use Interfaces;
  33 
  34 with System.Img_Char; use System.Img_Char;
  35 
  36 package body System.Img_WChar is
  37 
  38    --------------------------
  39    -- Image_Wide_Character --
  40    --------------------------
  41 
  42    procedure Image_Wide_Character
  43      (V        : Wide_Character;
  44       S        : in out String;
  45       P        : out Natural;
  46       Ada_2005 : Boolean)
  47    is
  48       pragma Assert (S'First = 1);
  49 
  50    begin
  51       --  Annoying Ada 95 incompatibility with FFFE/FFFF
  52 
  53       if V >= Wide_Character'Val (16#FFFE#)
  54         and then not Ada_2005
  55       then
  56          if V = Wide_Character'Val (16#FFFE#) then
  57             S (1 .. 4) := "FFFE";
  58          else
  59             S (1 .. 4) := "FFFF";
  60          end if;
  61 
  62          P := 4;
  63 
  64       --  Deal with annoying Ada 95 incompatibility with soft hyphen
  65 
  66       elsif V = Wide_Character'Val (16#00AD#)
  67         and then not Ada_2005
  68       then
  69          P := 3;
  70          S (1) := ''';
  71          S (2) := Character'Val (16#00AD#);
  72          S (3) := ''';
  73 
  74       --  Normal case, same as Wide_Wide_Character
  75 
  76       else
  77          Image_Wide_Wide_Character
  78            (Wide_Wide_Character'Val (Wide_Character'Pos (V)), S, P);
  79       end if;
  80    end Image_Wide_Character;
  81 
  82    -------------------------------
  83    -- Image_Wide_Wide_Character --
  84    -------------------------------
  85 
  86    procedure Image_Wide_Wide_Character
  87      (V : Wide_Wide_Character;
  88       S : in out String;
  89       P : out Natural)
  90    is
  91       pragma Assert (S'First = 1);
  92 
  93       Val : Unsigned_32 := Wide_Wide_Character'Pos (V);
  94 
  95    begin
  96       --  If in range of standard Character, use Character routine. Use the
  97       --  Ada 2005 version, since either we are called directly in Ada 2005
  98       --  mode for Wide_Wide_Character, or this is the Wide_Character case
  99       --  which already took care of the Soft_Hyphen glitch.
 100 
 101       if Val <= 16#FF# then
 102          Image_Character_05
 103            (Character'Val (Wide_Wide_Character'Pos (V)), S, P);
 104 
 105       --  Otherwise value returned is Hex_hhhhhhhh
 106 
 107       else
 108          declare
 109             Hex : constant array (Unsigned_32 range 0 .. 15) of Character :=
 110                     "0123456789ABCDEF";
 111 
 112          begin
 113             S (1 .. 4) := "Hex_";
 114 
 115             for J in reverse 5 .. 12 loop
 116                S (J) := Hex (Val mod 16);
 117                Val := Val / 16;
 118             end loop;
 119 
 120             P := 12;
 121          end;
 122       end if;
 123    end Image_Wide_Wide_Character;
 124 
 125 end System.Img_WChar;