1------------------------------------------------------------------------------ 2-- -- 3-- GNAT RUN-TIME COMPONENTS -- 4-- -- 5-- A D A . W I D E _ C H A R A C T E R S . H A N D L I N G -- 6-- -- 7-- B o d y -- 8-- -- 9-- Copyright (C) 2010-2021, 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-- As a special exception under Section 7 of GPL version 3, you are granted -- 19-- additional permissions described in the GCC Runtime Library Exception, -- 20-- version 3.1, as published by the Free Software Foundation. -- 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 32with Ada.Wide_Characters.Unicode; use Ada.Wide_Characters.Unicode; 33 34package body Ada.Wide_Characters.Handling is 35 36 --------------------------- 37 -- Character_Set_Version -- 38 --------------------------- 39 40 function Character_Set_Version return String is 41 begin 42 return "Unicode 4.0"; 43 end Character_Set_Version; 44 45 --------------------- 46 -- Is_Alphanumeric -- 47 --------------------- 48 49 function Is_Alphanumeric (Item : Wide_Character) return Boolean is 50 begin 51 return Is_Letter (Item) or else Is_Digit (Item); 52 end Is_Alphanumeric; 53 54 -------------- 55 -- Is_Basic -- 56 -------------- 57 58 function Is_Basic (Item : Wide_Character) return Boolean 59 renames Ada.Wide_Characters.Unicode.Is_Basic; 60 61 ---------------- 62 -- Is_Control -- 63 ---------------- 64 65 function Is_Control (Item : Wide_Character) return Boolean is 66 begin 67 return Get_Category (Item) = Cc; 68 end Is_Control; 69 70 -------------- 71 -- Is_Digit -- 72 -------------- 73 74 function Is_Digit (Item : Wide_Character) return Boolean 75 renames Ada.Wide_Characters.Unicode.Is_Digit; 76 77 ---------------- 78 -- Is_Graphic -- 79 ---------------- 80 81 function Is_Graphic (Item : Wide_Character) return Boolean is 82 begin 83 return not Is_Non_Graphic (Item); 84 end Is_Graphic; 85 86 -------------------------- 87 -- Is_Hexadecimal_Digit -- 88 -------------------------- 89 90 function Is_Hexadecimal_Digit (Item : Wide_Character) return Boolean is 91 begin 92 return Is_Digit (Item) 93 or else Item in 'A' .. 'F' 94 or else Item in 'a' .. 'f'; 95 end Is_Hexadecimal_Digit; 96 97 --------------- 98 -- Is_Letter -- 99 --------------- 100 101 function Is_Letter (Item : Wide_Character) return Boolean 102 renames Ada.Wide_Characters.Unicode.Is_Letter; 103 104 ------------------------ 105 -- Is_Line_Terminator -- 106 ------------------------ 107 108 function Is_Line_Terminator (Item : Wide_Character) return Boolean 109 renames Ada.Wide_Characters.Unicode.Is_Line_Terminator; 110 111 -------------- 112 -- Is_Lower -- 113 -------------- 114 115 function Is_Lower (Item : Wide_Character) return Boolean is 116 begin 117 return Get_Category (Item) = Ll; 118 end Is_Lower; 119 120 ------------- 121 -- Is_Mark -- 122 ------------- 123 124 function Is_Mark (Item : Wide_Character) return Boolean 125 renames Ada.Wide_Characters.Unicode.Is_Mark; 126 127 ------------- 128 -- Is_NFKC -- 129 ------------- 130 131 function Is_NFKC (Item : Wide_Character) return Boolean 132 renames Ada.Wide_Characters.Unicode.Is_NFKC; 133 134 --------------------- 135 -- Is_Other_Format -- 136 --------------------- 137 138 function Is_Other_Format (Item : Wide_Character) return Boolean 139 renames Ada.Wide_Characters.Unicode.Is_Other; 140 141 ------------------------------ 142 -- Is_Punctuation_Connector -- 143 ------------------------------ 144 145 function Is_Punctuation_Connector (Item : Wide_Character) return Boolean 146 renames Ada.Wide_Characters.Unicode.Is_Punctuation; 147 148 -------------- 149 -- Is_Space -- 150 -------------- 151 152 function Is_Space (Item : Wide_Character) return Boolean 153 renames Ada.Wide_Characters.Unicode.Is_Space; 154 155 ---------------- 156 -- Is_Special -- 157 ---------------- 158 159 function Is_Special (Item : Wide_Character) return Boolean is 160 begin 161 return Is_Graphic (Item) and then not Is_Alphanumeric (Item); 162 end Is_Special; 163 164 -------------- 165 -- Is_Upper -- 166 -------------- 167 168 function Is_Upper (Item : Wide_Character) return Boolean is 169 begin 170 return Get_Category (Item) = Lu; 171 end Is_Upper; 172 173 -------------- 174 -- To_Lower -- 175 -------------- 176 177 function To_Lower (Item : Wide_Character) return Wide_Character 178 renames Ada.Wide_Characters.Unicode.To_Lower_Case; 179 180 function To_Lower (Item : Wide_String) return Wide_String is 181 Result : Wide_String (Item'Range); 182 183 begin 184 for J in Result'Range loop 185 Result (J) := To_Lower (Item (J)); 186 end loop; 187 188 return Result; 189 end To_Lower; 190 191 -------------- 192 -- To_Upper -- 193 -------------- 194 195 function To_Upper (Item : Wide_Character) return Wide_Character 196 renames Ada.Wide_Characters.Unicode.To_Upper_Case; 197 198 function To_Upper (Item : Wide_String) return Wide_String is 199 Result : Wide_String (Item'Range); 200 201 begin 202 for J in Result'Range loop 203 Result (J) := To_Upper (Item (J)); 204 end loop; 205 206 return Result; 207 end To_Upper; 208 209 -------------- 210 -- To_Basic -- 211 -------------- 212 213 function To_Basic (Item : Wide_Character) return Wide_Character 214 renames Ada.Wide_Characters.Unicode.To_Basic; 215 216 function To_Basic (Item : Wide_String) return Wide_String is 217 Result : Wide_String (Item'Range); 218 219 begin 220 for J in Result'Range loop 221 Result (J) := To_Basic (Item (J)); 222 end loop; 223 224 return Result; 225 end To_Basic; 226 227end Ada.Wide_Characters.Handling; 228