/usr/share/ada/adainclude/xmlada/sax-utils.ads is in libxmlada4.1-dev 4.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 | -----------------------------------------------------------------------
-- XML/Ada - An XML suite for Ada95 --
-- --
-- Copyright (C) 2005-2010, AdaCore --
-- --
-- This library is free software; you can redistribute it and/or --
-- modify it under the terms of the GNU General Public --
-- License as published by the Free Software Foundation; either --
-- version 2 of the License, or (at your option) any later version. --
-- --
-- This library is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY 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 along with this library; if not, write to the --
-- Free Software Foundation, Inc., 59 Temple Place - Suite 330, --
-- Boston, MA 02111-1307, USA. --
-- --
-----------------------------------------------------------------------
-- This package contains various subprograms not described in the SAX
-- standard, but which are used by the various components of XML/Ada
with Unicode.CES;
with Interfaces;
with Sax.Pointers;
with Sax.Symbols;
package Sax.Utils is
type XML_Versions is
(XML_1_0_Third_Edition,
XML_1_0_Fourth_Edition,
XML_1_0_Fifth_Edition,
XML_1_0, -- Alias for the latest version
XML_1_1
);
function Is_Valid_Language_Name
(Lang : Unicode.CES.Byte_Sequence) return Boolean;
-- Whether Lang is a valid language, as per 2.12 in the XML specifications.
-- Lang is encoded with Sax.Encodings.Encoding
function Is_Valid_Name_Char
(Char : Unicode.Unicode_Char;
Version : XML_Versions := XML_1_1) return Boolean;
function Is_Valid_Name_Startchar
(Char : Unicode.Unicode_Char;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Char is a valid NameChar, as per 2.3 in the XML specifications
function Is_Valid_NCname_Char
(Char : Unicode.Unicode_Char;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Char is a valid NCnameChar, as per 2 in the XML specifications
function Is_Valid_Nmtoken
(Nmtoken : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Nmtoken is valid NMTOKEN as per 2.3 in the XML specifications
function Is_Valid_Nmtokens
(Nmtokens : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Nmtokens is valid NMTOKENS as per 2.3
function Is_Valid_Name
(Name : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Name is valid name as per 2.3 in the XML specifications
function Is_Valid_Names
(Name : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Name contains one or more valid Name, separated by a single
-- space character.
function Is_Valid_NCname
(Name : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Name is valid NCname as per 2 in the XML namespaces
-- specifications
-- Colon should not be allowed when namespaces are supported, since names
-- must then match NCName, as per 6 in XML Namespaces specifications
function Is_Valid_NCnames
(Name : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Name contains one or more valid NCname, separated by a single
-- space character.
function Is_Valid_QName
(Name : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Name is valid QName as per 3 in the XML specifications
type URI_Type is (URI_Absolute, URI_Relative_Ref, URI_None);
function Check_URI
(Name : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return URI_Type;
-- Check whether Name is a URI, and its type if it is. This is RFC 3986,
-- see http://www.ietf.org/rfc/rfc3986.txt.
function Is_Valid_URI
(Name : Unicode.CES.Byte_Sequence) return Boolean;
-- Check whether URI is a valid absolute or relative URI
function Is_Valid_URN
(Name : Unicode.CES.Byte_Sequence) return Boolean;
-- True if Name is a valid URN (Uniform Ressource Name) identification, as
-- per RFC 2141.
-- See http://www.faqs.org/rfcs/rfc2141.html
function Is_Valid_IRI
(Name : Unicode.CES.Byte_Sequence;
Version : XML_Versions := XML_1_1) return Boolean;
-- Whether Name is a valid IRI (Internationalized Resource Identifier), as
-- per Namespaces in XML 1.1 definition
-- See http://www.w3.org/TR/xml-names11/#dt-IRI
function Contains_URI_Fragment
(Name : Unicode.CES.Byte_Sequence) return Boolean;
-- True if Name contains a URI fragment (starting with #)
function Is_Valid_HexBinary
(Str : Unicode.CES.Byte_Sequence) return Boolean;
-- Whether Str only contains valid hexadecimal digits
function Is_Valid_Base64Binary
(Value : Unicode.CES.Byte_Sequence) return Boolean;
-- Whether Str only contains valid base64Binary digits
function Hash
(Key : Unicode.CES.Byte_Sequence) return Interfaces.Unsigned_32;
function Hash
(Key : Unicode.CES.Byte_Sequence_Access) return Interfaces.Unsigned_32;
-- Hash-code used for all htables indexed on strings
function Equal (S1, S2 : Unicode.CES.Byte_Sequence_Access) return Boolean;
-- Compare the byte_Sequence
function Split_Qname (Qname : Unicode.CES.Byte_Sequence) return Integer;
-- Return an index so that:
-- Qname (Qname'First .. Result - 1) = <prefix>
-- Qname (Result + 1 .. Qname'Last) = <local_name>
function Collapse_Whitespaces (Str : String) return String;
-- Collapse whitespaces in Str, according to the attributes normalization
-- rule
-----------
-- Lists --
-----------
generic
with procedure Callback (Str : Unicode.CES.Byte_Sequence);
procedure For_Each_Item (Ch : Unicode.CES.Byte_Sequence);
-- Iterate over each element of the list
-------------
-- Symbols --
-------------
package Symbol_Table_Pointers is new Sax.Pointers.Smart_Pointers
(Encapsulated => Sax.Symbols.Symbol_Table_Record);
subtype Symbol_Table is Symbol_Table_Pointers.Pointer;
No_Symbol_Table : constant Symbol_Table :=
Symbol_Table_Pointers.Null_Pointer;
function Allocate return Symbol_Table;
-- Return a new symbol table
function Find
(Table : Symbol_Table; Str : Unicode.CES.Byte_Sequence)
return Sax.Symbols.Symbol;
-- Creates a new symbol in the symbol table.
function Convert
(Table : Symbol_Table; Sym : Sax.Symbols.Symbol)
return Sax.Symbols.Symbol;
pragma Inline (Convert);
-- Store Sym in Table (this is not needed if it was already allocated in
-- that table, although it is harmless).
----------------
-- Namespaces --
----------------
type XML_NS is private;
No_XML_NS : constant XML_NS;
-- A namespace and its prefix in the XML file (there might be multiple
-- prefixes for a given namespace_URI)
function Get_Prefix (NS : XML_NS) return Sax.Symbols.Symbol;
function Get_URI (NS : XML_NS) return Sax.Symbols.Symbol;
pragma Inline (Get_Prefix, Get_URI);
-- Return the URI for this namespace
procedure Set_System_Id (NS : XML_NS; System_Id : Sax.Symbols.Symbol);
function Get_System_Id (NS : XML_NS) return Sax.Symbols.Symbol;
-- Return the location of the file or stream used associated with that
-- namespace
procedure Increment_Count (NS : XML_NS);
function Element_Count (NS : XML_NS) return Natural;
-- Return the count of elements (or attributes) seen so far in this
-- namespace. This does not include the count of uses in the current
-- context (that is for the <element> we are currently parsing or its
-- attributes).
function Next_In_List (NS : XML_NS) return XML_NS;
-- Return the next namespace in the list
procedure Free (NS : in out XML_NS);
-- Free NS and its successors in the list
function Find_NS_In_List
(List : XML_NS;
Prefix : Sax.Symbols.Symbol;
Include_Default_NS : Boolean := True;
List_Is_From_Element : Boolean) return XML_NS;
function Find_NS_From_URI_In_List
(List : XML_NS; URI : Sax.Symbols.Symbol) return XML_NS;
-- Find in List the first matching the prefix.
-- If Include_Default_NS is False, this will not return the "" namespace
procedure Add_NS_To_List
(List : in out XML_NS;
Same_As : XML_NS := No_XML_NS;
Prefix, URI : Sax.Symbols.Symbol);
-- Add a new namespace to the list (which might be empty to start with)
private
type XML_NS_Record;
type XML_NS is access XML_NS_Record;
No_XML_NS : constant XML_NS := null;
type XML_NS_Record is record
Prefix : Sax.Symbols.Symbol;
URI : Sax.Symbols.Symbol := Sax.Symbols.No_Symbol;
System_Id : Sax.Symbols.Symbol := Sax.Symbols.No_Symbol;
Same_As : XML_NS; -- If set, URI is null
Use_Count : Natural := 0;
Next : XML_NS;
end record;
-- Same_As points to the first prefix referencing the same namespace.
-- A namespace must be freed before the ones it references (or you will get
-- a Storage_Error).
-- Use_Count will always be 0 if Same_As is not null, since the uses are
-- incremented in only one namespace.
end Sax.Utils;
|