This patch adds a number of functions to Ada.Characters.Handling that
were added late on in the design process and missed it into the first
version of this package. The test below tests these missing functions.
It is to be compiled with -gnata and executed:

     1. with Ada.Characters.Handling;
     2. use Ada.Characters.Handling;
     3. with Ada.Characters.Latin_1;
     4. use Ada.Characters.Latin_1;
     5. procedure ChaHanXtra is
     6. begin
     7.    pragma Assert (Is_Line_Terminator (ASCII.CR));
     8.    pragma Assert (not Is_Line_Terminator ('A'));
     9.    pragma Assert (not Is_Mark ('A'));
    10.    pragma Assert (Is_Other_Format (Soft_Hyphen));
    11.    pragma Assert (not Is_Other_Format ('_'));
    12.    pragma Assert (Is_Punctuation_Connector ('_'));
    13.    pragma Assert (not Is_Punctuation_Connector (';'));
    14.    pragma Assert (Is_Space (No_Break_Space));
    15.    pragma Assert (not Is_Space ('_'));
    16.    pragma Assert (not Is_Space (' ')); -- FAILURE
    17.    null;
    18. end;

The output should be:

raised SYSTEM.ASSERTIONS.ASSERT_FAILURE : chahanxtra.adb:16

Tested on x86_64-pc-linux-gnu, committed on trunk

2013-10-10  Robert Dewar  <de...@adacore.com>

        * a-chahan.ads, a-chahan.adb (Is_Line_Terminator): New function
        (Is_Mark): New function.
        (Is_Other_Format): New function.
        (Is_Punctuation_Connector): New function.
        (Is_Space): New function.

Index: a-chahan.adb
===================================================================
--- a-chahan.adb        (revision 203342)
+++ a-chahan.adb        (working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -49,6 +49,7 @@
    Hex_Digit  : constant Character_Flags := 16;
    Digit      : constant Character_Flags := 32;
    Special    : constant Character_Flags := 64;
+   Line_Term  : constant Character_Flags := 128;
 
    Letter     : constant Character_Flags := Lower or Upper;
    Alphanum   : constant Character_Flags := Letter or Digit;
@@ -66,10 +67,10 @@
      BEL                         => Control,
      BS                          => Control,
      HT                          => Control,
-     LF                          => Control,
-     VT                          => Control,
-     FF                          => Control,
-     CR                          => Control,
+     LF                          => Control + Line_Term,
+     VT                          => Control + Line_Term,
+     FF                          => Control + Line_Term,
+     CR                          => Control + Line_Term,
      SO                          => Control,
      SI                          => Control,
 
@@ -141,7 +142,7 @@
      BPH                         => Control,
      NBH                         => Control,
      Reserved_132                => Control,
-     NEL                         => Control,
+     NEL                         => Control + Line_Term,
      SSA                         => Control,
      ESA                         => Control,
      HTS                         => Control,
@@ -370,6 +371,15 @@
       return (Char_Map (Item) and Letter) /= 0;
    end Is_Letter;
 
+   ------------------------
+   -- Is_Line_Terminator --
+   ------------------------
+
+   function Is_Line_Terminator (Item : Character) return Boolean is
+   begin
+      return (Char_Map (Item) and Line_Term) /= 0;
+   end Is_Line_Terminator;
+
    --------------
    -- Is_Lower --
    --------------
@@ -379,6 +389,43 @@
       return (Char_Map (Item) and Lower) /= 0;
    end Is_Lower;
 
+   -------------
+   -- Is_Mark --
+   -------------
+
+   function Is_Mark (Item : Character) return Boolean is
+      pragma Unreferenced (Item);
+   begin
+      return False;
+   end Is_Mark;
+
+   ---------------------
+   -- Is_Other_Format --
+   ---------------------
+
+   function Is_Other_Format (Item : Character) return Boolean is
+   begin
+      return Item = Soft_Hyphen;
+   end Is_Other_Format;
+
+   ------------------------------
+   -- Is_Punctuation_Connector --
+   ------------------------------
+
+   function Is_Punctuation_Connector (Item : Character) return Boolean is
+   begin
+      return Item = '_';
+   end Is_Punctuation_Connector;
+
+   --------------
+   -- Is_Space --
+   --------------
+
+   function Is_Space (Item : Character) return Boolean is
+   begin
+      return Item = ' ' or else Item = No_Break_Space;
+   end Is_Space;
+
    ----------------
    -- Is_Special --
    ----------------
Index: a-chahan.ads
===================================================================
--- a-chahan.ads        (revision 203342)
+++ a-chahan.ads        (working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
 --                                                                          --
 -- This specification is derived from the Ada Reference Manual for use with --
 -- GNAT. The copyright notice above, and the license provisions that follow --
@@ -42,18 +42,23 @@
    -- Character Classification Functions --
    ----------------------------------------
 
-   function Is_Control           (Item : Character) return Boolean;
-   function Is_Graphic           (Item : Character) return Boolean;
-   function Is_Letter            (Item : Character) return Boolean;
-   function Is_Lower             (Item : Character) return Boolean;
-   function Is_Upper             (Item : Character) return Boolean;
-   function Is_Basic             (Item : Character) return Boolean;
-   function Is_Digit             (Item : Character) return Boolean;
-   function Is_Decimal_Digit     (Item : Character) return Boolean
+   function Is_Control               (Item : Character) return Boolean;
+   function Is_Graphic               (Item : Character) return Boolean;
+   function Is_Letter                (Item : Character) return Boolean;
+   function Is_Lower                 (Item : Character) return Boolean;
+   function Is_Upper                 (Item : Character) return Boolean;
+   function Is_Basic                 (Item : Character) return Boolean;
+   function Is_Digit                 (Item : Character) return Boolean;
+   function Is_Decimal_Digit         (Item : Character) return Boolean
      renames Is_Digit;
-   function Is_Hexadecimal_Digit (Item : Character) return Boolean;
-   function Is_Alphanumeric      (Item : Character) return Boolean;
-   function Is_Special           (Item : Character) return Boolean;
+   function Is_Hexadecimal_Digit     (Item : Character) return Boolean;
+   function Is_Alphanumeric          (Item : Character) return Boolean;
+   function Is_Special               (Item : Character) return Boolean;
+   function Is_Line_Terminator       (Item : Character) return Boolean;
+   function Is_Mark                  (Item : Character) return Boolean;
+   function Is_Other_Format          (Item : Character) return Boolean;
+   function Is_Punctuation_Connector (Item : Character) return Boolean;
+   function Is_Space                 (Item : Character) return Boolean;
 
    ---------------------------------------------------
    -- Conversion Functions for Character and String --
@@ -129,22 +134,27 @@
      (Item : String) return Wide_String;
 
 private
+   pragma Inline (Is_Alphanumeric);
+   pragma Inline (Is_Basic);
+   pragma Inline (Is_Character);
    pragma Inline (Is_Control);
+   pragma Inline (Is_Digit);
    pragma Inline (Is_Graphic);
+   pragma Inline (Is_Hexadecimal_Digit);
+   pragma Inline (Is_ISO_646);
    pragma Inline (Is_Letter);
+   pragma Inline (Is_Line_Terminator);
    pragma Inline (Is_Lower);
+   pragma Inline (Is_Mark);
+   pragma Inline (Is_Other_Format);
+   pragma Inline (Is_Punctuation_Connector);
+   pragma Inline (Is_Space);
+   pragma Inline (Is_Special);
    pragma Inline (Is_Upper);
-   pragma Inline (Is_Basic);
-   pragma Inline (Is_Digit);
-   pragma Inline (Is_Hexadecimal_Digit);
-   pragma Inline (Is_Alphanumeric);
-   pragma Inline (Is_Special);
+   pragma Inline (To_Basic);
+   pragma Inline (To_Character);
    pragma Inline (To_Lower);
    pragma Inline (To_Upper);
-   pragma Inline (To_Basic);
-   pragma Inline (Is_ISO_646);
-   pragma Inline (Is_Character);
-   pragma Inline (To_Character);
    pragma Inline (To_Wide_Character);
 
 end Ada.Characters.Handling;

Reply via email to