3,7 → 3,7 |
(************************************************) |
(* OIDUTILS.PAS *) |
(* Author: Daniel Marschall *) |
(* Revision: 2022-02-14 *) |
(* Revision: 2022-02-19 *) |
(* License: Apache 2.0 *) |
(* This file contains: *) |
(* - Various OID functions *) |
18,6 → 18,7 |
function CompareOID(a, b: string): integer; |
procedure ListBubbleSortOID(list: PStringList); |
function ASN1IDValid(asn1id: string): boolean; |
function UnicodeLabelValid(unicodeLabel: string): boolean; |
|
implementation |
|
73,6 → 74,8 |
OIDtoArcList(a, la); |
OIDtoArcList(b, lb); |
CompareOID := CompareOIDArcList(la, lb); |
FreeList(la); |
FreeList(lb); |
end; |
|
procedure ListBubbleSortOID(list: PStringList); |
126,4 → 129,77 |
ASN1IDValid := true; |
end; |
|
function UnicodeLabelValid(unicodeLabel: string): boolean; |
begin |
UnicodeLabelValid := true; |
(* TODO: Implement *) |
|
(* |
|
|
function iri_char_valid($c, $firstchar, $lastchar) { |
// see Rec. ITU-T X.660, clause 7.5 |
|
if (($firstchar || $lastchar) && ($c == '-')) return false; |
|
if ($c == '-') return true; |
if ($c == '.') return true; |
if ($c == '_') return true; |
if ($c == '~') return true; |
if (($c >= '0') && ($c <= '9') && (!$firstchar)) return true; |
if (($c >= 'A') && ($c <= 'Z')) return true; |
if (($c >= 'a') && ($c <= 'z')) return true; |
|
$v = mb_ord($c); |
|
if (($v >= 0x000000A0) && ($v <= 0x0000DFFE)) return true; |
if (($v >= 0x0000F900) && ($v <= 0x0000FDCF)) return true; |
if (($v >= 0x0000FDF0) && ($v <= 0x0000FFEF)) return true; |
if (($v >= 0x00010000) && ($v <= 0x0001FFFD)) return true; |
if (($v >= 0x00020000) && ($v <= 0x0002FFFD)) return true; |
if (($v >= 0x00030000) && ($v <= 0x0003FFFD)) return true; |
if (($v >= 0x00040000) && ($v <= 0x0004FFFD)) return true; |
if (($v >= 0x00050000) && ($v <= 0x0005FFFD)) return true; |
if (($v >= 0x00060000) && ($v <= 0x0006FFFD)) return true; |
if (($v >= 0x00070000) && ($v <= 0x0007FFFD)) return true; |
if (($v >= 0x00080000) && ($v <= 0x0008FFFD)) return true; |
if (($v >= 0x00090000) && ($v <= 0x0009FFFD)) return true; |
if (($v >= 0x000A0000) && ($v <= 0x000AFFFD)) return true; |
if (($v >= 0x000B0000) && ($v <= 0x000BFFFD)) return true; |
if (($v >= 0x000C0000) && ($v <= 0x000CFFFD)) return true; |
if (($v >= 0x000D0000) && ($v <= 0x000DFFFD)) return true; |
if (($v >= 0x000E1000) && ($v <= 0x000EFFFD)) return true; |
|
// Note: Rec. ITU-T X.660, clause 7.5.3 would also forbid ranges which are marked |
// in ISO/IEC 10646 as "(This position shall not be used)" |
// But tool implementers should be tolerate them, since these limitations can be removed in future. |
|
return false; |
} |
|
function iri_arc_valid($arc, $allow_numeric=true) { |
if ($arc == '') return false; |
|
$m = array(); |
if ($allow_numeric && preg_match('@^(\\d+)$@', $arc, $m)) return true; # numeric arc |
|
// Question: Should we strip RTL/LTR characters? |
|
if (mb_substr($arc, 2, 2) == '--') return false; // see Rec. ITU-T X.660, clause 7.5.4 |
|
$array = array(); |
preg_match_all('/./u', $arc, $array, PREG_SET_ORDER); |
$len = count($array); |
foreach ($array as $i => $char) { |
if (!iri_char_valid($char[0], $i==0, $i==$len-1)) return false; |
} |
|
return true; |
} |
|
|
*) |
|
end; |
|
end. |