OSDN Git Service

* ChangeLog.vta: New.
[pf3gnuchains/gcc-fork.git] / gcc / ada / s-wwdwch.adb
index ac3d1e9..798c66e 100644 (file)
@@ -1,6 +1,6 @@
 ------------------------------------------------------------------------------
 --                                                                          --
---                         GNAT RUNTIME COMPONENTS                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
 --                     S Y S T E M . W W D _ W C H A R                      --
 --                                                                          --
@@ -16,8 +16,8 @@
 -- 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 GNAT;  see file COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
+-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
+-- Boston, MA 02110-1301, 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, --
@@ -59,7 +59,6 @@ package body System.Wwd_WChar is
    function Wide_Wide_Width_Wide_Wide_Char
      (Lo, Hi : Wide_Wide_Character) return Natural
    is
-      W  : Natural := 0;
       LV : constant Unsigned_32 := Wide_Wide_Character'Pos (Lo);
       HV : constant Unsigned_32 := Wide_Wide_Character'Pos (Hi);
 
@@ -68,36 +67,22 @@ package body System.Wwd_WChar is
 
       if LV > HV then
          return 0;
-      end if;
+
+      --  Return max value (12) for wide character (Hex_hhhhhhhh)
+
+      elsif HV > 255 then
+         return 12;
 
       --  If any characters in normal character range, then use normal
       --  Wide_Wide_Width attribute on this range to find out a starting point.
       --  Otherwise start with zero.
 
-      if LV <= 255 then
-         W :=
+      else
+         return
            System.WWd_Char.Wide_Wide_Width_Character
              (Lo => Character'Val (LV),
               Hi => Character'Val (Unsigned_32'Min (255, HV)));
-      else
-         W := 0;
       end if;
-
-      --  Increase to at least 4 if FFFE or FFFF present. These correspond
-      --  to the special language defined names FFFE/FFFF for these values.
-
-      if 16#FFFF# in LV .. HV or else 16#FFFE# in LV .. HV then
-         W := Natural'Max (W, 4);
-      end if;
-
-      --  Increase to at least 3 if any wide characters, corresponding to
-      --  the normal ' character ' sequence. We know that the character fits.
-
-      if HV > 255 then
-         W := Natural'Max (W, 3);
-      end if;
-
-      return W;
    end Wide_Wide_Width_Wide_Wide_Char;
 
    -------------------------------
@@ -107,7 +92,6 @@ package body System.Wwd_WChar is
    function Wide_Width_Wide_Character
      (Lo, Hi : Wide_Character) return Natural
    is
-      W  : Natural := 0;
       LV : constant Unsigned_32 := Wide_Character'Pos (Lo);
       HV : constant Unsigned_32 := Wide_Character'Pos (Hi);
 
@@ -116,62 +100,33 @@ package body System.Wwd_WChar is
 
       if LV > HV then
          return 0;
-      end if;
+
+      --  Return max value (12) for wide character (Hex_hhhhhhhh)
+
+      elsif HV > 255 then
+         return 12;
 
       --  If any characters in normal character range, then use normal
       --  Wide_Wide_Width attribute on this range to find out a starting point.
       --  Otherwise start with zero.
 
-      if LV <= 255 then
-         W :=
+      else
+         return
            System.WWd_Char.Wide_Width_Character
              (Lo => Character'Val (LV),
               Hi => Character'Val (Unsigned_32'Min (255, HV)));
-      else
-         W := 0;
-      end if;
-
-      --  Increase to at least 4 if FFFE or FFFF present. These correspond
-      --  to the special language defined names FFFE/FFFF for these values.
-
-      if 16#FFFF# in LV .. HV or else 16#FFFE# in LV .. HV then
-         W := Natural'Max (W, 4);
       end if;
-
-      --  Increase to at least 3 if any wide characters, corresponding to
-      --  the normal 'character' sequence. We know that the character fits.
-
-      if HV > 255 then
-         W := Natural'Max (W, 3);
-      end if;
-
-      return W;
    end Wide_Width_Wide_Character;
 
    ------------------------------------
    -- Wide_Width_Wide_Wide_Character --
    ------------------------------------
 
-   --  This is a nasty case, because we get into the business of representing
-   --  out of range wide wide characters as wide strings. Let's let image do
-   --  the work here. Too bad if this takes lots of time. It's silly anyway!
-
    function Wide_Width_Wide_Wide_Character
      (Lo, Hi : Wide_Wide_Character) return Natural
    is
-      W : Natural;
-
    begin
-      W := 0;
-      for J in Lo .. Hi loop
-         declare
-            S : constant Wide_String := Wide_Wide_Character'Wide_Image (J);
-         begin
-            W := Natural'Max (W, S'Length);
-         end;
-      end loop;
-
-      return W;
+      return Wide_Wide_Width_Wide_Wide_Char (Lo, Hi);
    end Wide_Width_Wide_Wide_Character;
 
 end System.Wwd_WChar;