diff --git a/examples/example_11.cpp b/examples/example_11.cpp index daf958c1..3fed7c49 100644 --- a/examples/example_11.cpp +++ b/examples/example_11.cpp @@ -11,14 +11,14 @@ using namespace std::string_view_literals; int main() { auto host_domain = skyr::parse_host("example.com"sv); - std::cout << host_domain.value().domain().value() << std::endl; + std::cout << host_domain.value().serialize() << std::endl; auto host_ipv4 = skyr::parse_host("192.168.0.1"sv); - std::cout << host_ipv4.value().ipv4_address().value().serialize() << std::endl; + std::cout << host_ipv4.value().serialize() << std::endl; - auto host_ipv6 = skyr::parse_host("[::1]"sv); - std::cout << host_ipv6.value().ipv6_address().value().serialize() << std::endl; + auto host_ipv6 = skyr::parse_host("[2001:0db8:0:0::1428:57ab]"sv); + std::cout << host_ipv6.value().serialize() << std::endl; auto localhost = skyr::parse_host("localhost"sv); - std::cout << localhost.value().domain().value() << std::endl; + std::cout << localhost.value().serialize() << std::endl; } diff --git a/src/v1/domain/domain.cpp b/src/v1/domain/domain.cpp index 4081f363..3d65083b 100644 --- a/src/v1/domain/domain.cpp +++ b/src/v1/domain/domain.cpp @@ -28,37 +28,37 @@ auto map_code_points( auto it = first; while (it != last) { - switch (domain::map_idna_status(*it)) { - case domain::idna_status::disallowed: + switch (idna::code_point_status(*it)) { + case idna::idna_status::disallowed: error = true; break; - case domain::idna_status::disallowed_std3_valid: + case idna::idna_status::disallowed_std3_valid: if (use_std3_ascii_rules) { error = true; } else { result += *it; } break; - case domain::idna_status::disallowed_std3_mapped: + case idna::idna_status::disallowed_std3_mapped: if (use_std3_ascii_rules) { error = true; } else { - result += domain::map_idna_code_point(*it); + result += idna::map_code_point(*it); } break; - case domain::idna_status::ignored: + case idna::idna_status::ignored: break; - case domain::idna_status::mapped: - result += domain::map_idna_code_point(*it); + case idna::idna_status::mapped: + result += idna::map_code_point(*it); break; - case domain::idna_status::deviation: + case idna::idna_status::deviation: if (transitional_processing) { - result += domain::map_idna_code_point(*it); + result += idna::map_code_point(*it); } else { result += *it; } break; - case domain::idna_status::valid: + case idna::idna_status::valid: result += *it; break; } @@ -95,8 +95,8 @@ auto validate_label(std::u32string_view label, [[maybe_unused]] bool use_std3_as /// Criterion 6 if (transitional_processing) { static constexpr auto is_valid = [](auto cp) { - auto status = domain::map_idna_status(cp); - return (cp <= U'\x7e') || (status == domain::idna_status::valid); + auto status = idna::code_point_status(cp); + return (cp <= U'\x7e') || (status == idna::idna_status::valid); }; auto it = std::find_if_not(first, last, is_valid); @@ -106,8 +106,8 @@ auto validate_label(std::u32string_view label, [[maybe_unused]] bool use_std3_as } else { static constexpr auto is_valid_or_deviation = [](auto cp) { - auto status = domain::map_idna_status(cp); - return (cp <= U'\x7e') || (status == domain::idna_status::valid) || (status == domain::idna_status::deviation); + auto status = idna::code_point_status(cp); + return (cp <= U'\x7e') || (status == idna::idna_status::valid) || (status == idna::idna_status::deviation); }; auto it = std::find_if_not(first, last, is_valid_or_deviation); diff --git a/src/v1/domain/idna.cpp b/src/v1/domain/idna.cpp index fc90c9b9..b47a395e 100644 --- a/src/v1/domain/idna.cpp +++ b/src/v1/domain/idna.cpp @@ -11,7 +11,7 @@ namespace skyr { inline namespace v1 { -namespace domain { +namespace idna { namespace { struct code_point_range { char32_t first; @@ -19,336 +19,176 @@ struct code_point_range { idna_status status; }; -constexpr static auto statuses = std::array{{ +constexpr static auto statuses = std::array{{ { U'\x0000', U'\x002c', idna_status::disallowed_std3_valid }, - { U'\x002d', U'\x002e', idna_status::valid }, { U'\x002f', U'\x002f', idna_status::disallowed_std3_valid }, - { U'\x0030', U'\x0039', idna_status::valid }, { U'\x003a', U'\x0040', idna_status::disallowed_std3_valid }, { U'\x0041', U'\x005a', idna_status::mapped }, { U'\x005b', U'\x0060', idna_status::disallowed_std3_valid }, - { U'\x0061', U'\x007a', idna_status::valid }, { U'\x007b', U'\x007f', idna_status::disallowed_std3_valid }, { U'\x0080', U'\x009f', idna_status::disallowed }, { U'\x00a0', U'\x00a0', idna_status::disallowed_std3_mapped }, - { U'\x00a1', U'\x00a7', idna_status::valid }, { U'\x00a8', U'\x00a8', idna_status::disallowed_std3_mapped }, - { U'\x00a9', U'\x00a9', idna_status::valid }, { U'\x00aa', U'\x00aa', idna_status::mapped }, - { U'\x00ab', U'\x00ac', idna_status::valid }, { U'\x00ad', U'\x00ad', idna_status::ignored }, - { U'\x00ae', U'\x00ae', idna_status::valid }, { U'\x00af', U'\x00af', idna_status::disallowed_std3_mapped }, - { U'\x00b0', U'\x00b1', idna_status::valid }, { U'\x00b2', U'\x00b3', idna_status::mapped }, { U'\x00b4', U'\x00b4', idna_status::disallowed_std3_mapped }, { U'\x00b5', U'\x00b5', idna_status::mapped }, - { U'\x00b6', U'\x00b7', idna_status::valid }, { U'\x00b8', U'\x00b8', idna_status::disallowed_std3_mapped }, { U'\x00b9', U'\x00ba', idna_status::mapped }, - { U'\x00bb', U'\x00bb', idna_status::valid }, { U'\x00bc', U'\x00be', idna_status::mapped }, - { U'\x00bf', U'\x00bf', idna_status::valid }, { U'\x00c0', U'\x00d6', idna_status::mapped }, - { U'\x00d7', U'\x00d7', idna_status::valid }, { U'\x00d8', U'\x00de', idna_status::mapped }, { U'\x00df', U'\x00df', idna_status::deviation }, - { U'\x00e0', U'\x00ff', idna_status::valid }, { U'\x0100', U'\x0100', idna_status::mapped }, - { U'\x0101', U'\x0101', idna_status::valid }, { U'\x0102', U'\x0102', idna_status::mapped }, - { U'\x0103', U'\x0103', idna_status::valid }, { U'\x0104', U'\x0104', idna_status::mapped }, - { U'\x0105', U'\x0105', idna_status::valid }, { U'\x0106', U'\x0106', idna_status::mapped }, - { U'\x0107', U'\x0107', idna_status::valid }, { U'\x0108', U'\x0108', idna_status::mapped }, - { U'\x0109', U'\x0109', idna_status::valid }, { U'\x010a', U'\x010a', idna_status::mapped }, - { U'\x010b', U'\x010b', idna_status::valid }, { U'\x010c', U'\x010c', idna_status::mapped }, - { U'\x010d', U'\x010d', idna_status::valid }, { U'\x010e', U'\x010e', idna_status::mapped }, - { U'\x010f', U'\x010f', idna_status::valid }, { U'\x0110', U'\x0110', idna_status::mapped }, - { U'\x0111', U'\x0111', idna_status::valid }, { U'\x0112', U'\x0112', idna_status::mapped }, - { U'\x0113', U'\x0113', idna_status::valid }, { U'\x0114', U'\x0114', idna_status::mapped }, - { U'\x0115', U'\x0115', idna_status::valid }, { U'\x0116', U'\x0116', idna_status::mapped }, - { U'\x0117', U'\x0117', idna_status::valid }, { U'\x0118', U'\x0118', idna_status::mapped }, - { U'\x0119', U'\x0119', idna_status::valid }, { U'\x011a', U'\x011a', idna_status::mapped }, - { U'\x011b', U'\x011b', idna_status::valid }, { U'\x011c', U'\x011c', idna_status::mapped }, - { U'\x011d', U'\x011d', idna_status::valid }, { U'\x011e', U'\x011e', idna_status::mapped }, - { U'\x011f', U'\x011f', idna_status::valid }, { U'\x0120', U'\x0120', idna_status::mapped }, - { U'\x0121', U'\x0121', idna_status::valid }, { U'\x0122', U'\x0122', idna_status::mapped }, - { U'\x0123', U'\x0123', idna_status::valid }, { U'\x0124', U'\x0124', idna_status::mapped }, - { U'\x0125', U'\x0125', idna_status::valid }, { U'\x0126', U'\x0126', idna_status::mapped }, - { U'\x0127', U'\x0127', idna_status::valid }, { U'\x0128', U'\x0128', idna_status::mapped }, - { U'\x0129', U'\x0129', idna_status::valid }, { U'\x012a', U'\x012a', idna_status::mapped }, - { U'\x012b', U'\x012b', idna_status::valid }, { U'\x012c', U'\x012c', idna_status::mapped }, - { U'\x012d', U'\x012d', idna_status::valid }, { U'\x012e', U'\x012e', idna_status::mapped }, - { U'\x012f', U'\x012f', idna_status::valid }, { U'\x0130', U'\x0130', idna_status::mapped }, - { U'\x0131', U'\x0131', idna_status::valid }, { U'\x0132', U'\x0134', idna_status::mapped }, - { U'\x0135', U'\x0135', idna_status::valid }, { U'\x0136', U'\x0136', idna_status::mapped }, - { U'\x0137', U'\x0138', idna_status::valid }, { U'\x0139', U'\x0139', idna_status::mapped }, - { U'\x013a', U'\x013a', idna_status::valid }, { U'\x013b', U'\x013b', idna_status::mapped }, - { U'\x013c', U'\x013c', idna_status::valid }, { U'\x013d', U'\x013d', idna_status::mapped }, - { U'\x013e', U'\x013e', idna_status::valid }, { U'\x013f', U'\x0141', idna_status::mapped }, - { U'\x0142', U'\x0142', idna_status::valid }, { U'\x0143', U'\x0143', idna_status::mapped }, - { U'\x0144', U'\x0144', idna_status::valid }, { U'\x0145', U'\x0145', idna_status::mapped }, - { U'\x0146', U'\x0146', idna_status::valid }, { U'\x0147', U'\x0147', idna_status::mapped }, - { U'\x0148', U'\x0148', idna_status::valid }, { U'\x0149', U'\x014a', idna_status::mapped }, - { U'\x014b', U'\x014b', idna_status::valid }, { U'\x014c', U'\x014c', idna_status::mapped }, - { U'\x014d', U'\x014d', idna_status::valid }, { U'\x014e', U'\x014e', idna_status::mapped }, - { U'\x014f', U'\x014f', idna_status::valid }, { U'\x0150', U'\x0150', idna_status::mapped }, - { U'\x0151', U'\x0151', idna_status::valid }, { U'\x0152', U'\x0152', idna_status::mapped }, - { U'\x0153', U'\x0153', idna_status::valid }, { U'\x0154', U'\x0154', idna_status::mapped }, - { U'\x0155', U'\x0155', idna_status::valid }, { U'\x0156', U'\x0156', idna_status::mapped }, - { U'\x0157', U'\x0157', idna_status::valid }, { U'\x0158', U'\x0158', idna_status::mapped }, - { U'\x0159', U'\x0159', idna_status::valid }, { U'\x015a', U'\x015a', idna_status::mapped }, - { U'\x015b', U'\x015b', idna_status::valid }, { U'\x015c', U'\x015c', idna_status::mapped }, - { U'\x015d', U'\x015d', idna_status::valid }, { U'\x015e', U'\x015e', idna_status::mapped }, - { U'\x015f', U'\x015f', idna_status::valid }, { U'\x0160', U'\x0160', idna_status::mapped }, - { U'\x0161', U'\x0161', idna_status::valid }, { U'\x0162', U'\x0162', idna_status::mapped }, - { U'\x0163', U'\x0163', idna_status::valid }, { U'\x0164', U'\x0164', idna_status::mapped }, - { U'\x0165', U'\x0165', idna_status::valid }, { U'\x0166', U'\x0166', idna_status::mapped }, - { U'\x0167', U'\x0167', idna_status::valid }, { U'\x0168', U'\x0168', idna_status::mapped }, - { U'\x0169', U'\x0169', idna_status::valid }, { U'\x016a', U'\x016a', idna_status::mapped }, - { U'\x016b', U'\x016b', idna_status::valid }, { U'\x016c', U'\x016c', idna_status::mapped }, - { U'\x016d', U'\x016d', idna_status::valid }, { U'\x016e', U'\x016e', idna_status::mapped }, - { U'\x016f', U'\x016f', idna_status::valid }, { U'\x0170', U'\x0170', idna_status::mapped }, - { U'\x0171', U'\x0171', idna_status::valid }, { U'\x0172', U'\x0172', idna_status::mapped }, - { U'\x0173', U'\x0173', idna_status::valid }, { U'\x0174', U'\x0174', idna_status::mapped }, - { U'\x0175', U'\x0175', idna_status::valid }, { U'\x0176', U'\x0176', idna_status::mapped }, - { U'\x0177', U'\x0177', idna_status::valid }, { U'\x0178', U'\x0179', idna_status::mapped }, - { U'\x017a', U'\x017a', idna_status::valid }, { U'\x017b', U'\x017b', idna_status::mapped }, - { U'\x017c', U'\x017c', idna_status::valid }, { U'\x017d', U'\x017d', idna_status::mapped }, - { U'\x017e', U'\x017e', idna_status::valid }, { U'\x017f', U'\x017f', idna_status::mapped }, - { U'\x0180', U'\x0180', idna_status::valid }, { U'\x0181', U'\x0182', idna_status::mapped }, - { U'\x0183', U'\x0183', idna_status::valid }, { U'\x0184', U'\x0184', idna_status::mapped }, - { U'\x0185', U'\x0185', idna_status::valid }, { U'\x0186', U'\x0187', idna_status::mapped }, - { U'\x0188', U'\x0188', idna_status::valid }, { U'\x0189', U'\x018b', idna_status::mapped }, - { U'\x018c', U'\x018d', idna_status::valid }, { U'\x018e', U'\x0191', idna_status::mapped }, - { U'\x0192', U'\x0192', idna_status::valid }, { U'\x0193', U'\x0194', idna_status::mapped }, - { U'\x0195', U'\x0195', idna_status::valid }, { U'\x0196', U'\x0198', idna_status::mapped }, - { U'\x0199', U'\x019b', idna_status::valid }, { U'\x019c', U'\x019d', idna_status::mapped }, - { U'\x019e', U'\x019e', idna_status::valid }, { U'\x019f', U'\x01a0', idna_status::mapped }, - { U'\x01a1', U'\x01a1', idna_status::valid }, { U'\x01a2', U'\x01a2', idna_status::mapped }, - { U'\x01a3', U'\x01a3', idna_status::valid }, { U'\x01a4', U'\x01a4', idna_status::mapped }, - { U'\x01a5', U'\x01a5', idna_status::valid }, { U'\x01a6', U'\x01a7', idna_status::mapped }, - { U'\x01a8', U'\x01a8', idna_status::valid }, { U'\x01a9', U'\x01a9', idna_status::mapped }, - { U'\x01aa', U'\x01ab', idna_status::valid }, { U'\x01ac', U'\x01ac', idna_status::mapped }, - { U'\x01ad', U'\x01ad', idna_status::valid }, { U'\x01ae', U'\x01af', idna_status::mapped }, - { U'\x01b0', U'\x01b0', idna_status::valid }, { U'\x01b1', U'\x01b3', idna_status::mapped }, - { U'\x01b4', U'\x01b4', idna_status::valid }, { U'\x01b5', U'\x01b5', idna_status::mapped }, - { U'\x01b6', U'\x01b6', idna_status::valid }, { U'\x01b7', U'\x01b8', idna_status::mapped }, - { U'\x01b9', U'\x01bb', idna_status::valid }, { U'\x01bc', U'\x01bc', idna_status::mapped }, - { U'\x01bd', U'\x01c3', idna_status::valid }, { U'\x01c4', U'\x01cd', idna_status::mapped }, - { U'\x01ce', U'\x01ce', idna_status::valid }, { U'\x01cf', U'\x01cf', idna_status::mapped }, - { U'\x01d0', U'\x01d0', idna_status::valid }, { U'\x01d1', U'\x01d1', idna_status::mapped }, - { U'\x01d2', U'\x01d2', idna_status::valid }, { U'\x01d3', U'\x01d3', idna_status::mapped }, - { U'\x01d4', U'\x01d4', idna_status::valid }, { U'\x01d5', U'\x01d5', idna_status::mapped }, - { U'\x01d6', U'\x01d6', idna_status::valid }, { U'\x01d7', U'\x01d7', idna_status::mapped }, - { U'\x01d8', U'\x01d8', idna_status::valid }, { U'\x01d9', U'\x01d9', idna_status::mapped }, - { U'\x01da', U'\x01da', idna_status::valid }, { U'\x01db', U'\x01db', idna_status::mapped }, - { U'\x01dc', U'\x01dd', idna_status::valid }, { U'\x01de', U'\x01de', idna_status::mapped }, - { U'\x01df', U'\x01df', idna_status::valid }, { U'\x01e0', U'\x01e0', idna_status::mapped }, - { U'\x01e1', U'\x01e1', idna_status::valid }, { U'\x01e2', U'\x01e2', idna_status::mapped }, - { U'\x01e3', U'\x01e3', idna_status::valid }, { U'\x01e4', U'\x01e4', idna_status::mapped }, - { U'\x01e5', U'\x01e5', idna_status::valid }, { U'\x01e6', U'\x01e6', idna_status::mapped }, - { U'\x01e7', U'\x01e7', idna_status::valid }, { U'\x01e8', U'\x01e8', idna_status::mapped }, - { U'\x01e9', U'\x01e9', idna_status::valid }, { U'\x01ea', U'\x01ea', idna_status::mapped }, - { U'\x01eb', U'\x01eb', idna_status::valid }, { U'\x01ec', U'\x01ec', idna_status::mapped }, - { U'\x01ed', U'\x01ed', idna_status::valid }, { U'\x01ee', U'\x01ee', idna_status::mapped }, - { U'\x01ef', U'\x01f0', idna_status::valid }, { U'\x01f1', U'\x01f4', idna_status::mapped }, - { U'\x01f5', U'\x01f5', idna_status::valid }, { U'\x01f6', U'\x01f8', idna_status::mapped }, - { U'\x01f9', U'\x01f9', idna_status::valid }, { U'\x01fa', U'\x01fa', idna_status::mapped }, - { U'\x01fb', U'\x01fb', idna_status::valid }, { U'\x01fc', U'\x01fc', idna_status::mapped }, - { U'\x01fd', U'\x01fd', idna_status::valid }, { U'\x01fe', U'\x01fe', idna_status::mapped }, - { U'\x01ff', U'\x01ff', idna_status::valid }, { U'\x0200', U'\x0200', idna_status::mapped }, - { U'\x0201', U'\x0201', idna_status::valid }, { U'\x0202', U'\x0202', idna_status::mapped }, - { U'\x0203', U'\x0203', idna_status::valid }, { U'\x0204', U'\x0204', idna_status::mapped }, - { U'\x0205', U'\x0205', idna_status::valid }, { U'\x0206', U'\x0206', idna_status::mapped }, - { U'\x0207', U'\x0207', idna_status::valid }, { U'\x0208', U'\x0208', idna_status::mapped }, - { U'\x0209', U'\x0209', idna_status::valid }, { U'\x020a', U'\x020a', idna_status::mapped }, - { U'\x020b', U'\x020b', idna_status::valid }, { U'\x020c', U'\x020c', idna_status::mapped }, - { U'\x020d', U'\x020d', idna_status::valid }, { U'\x020e', U'\x020e', idna_status::mapped }, - { U'\x020f', U'\x020f', idna_status::valid }, { U'\x0210', U'\x0210', idna_status::mapped }, - { U'\x0211', U'\x0211', idna_status::valid }, { U'\x0212', U'\x0212', idna_status::mapped }, - { U'\x0213', U'\x0213', idna_status::valid }, { U'\x0214', U'\x0214', idna_status::mapped }, - { U'\x0215', U'\x0215', idna_status::valid }, { U'\x0216', U'\x0216', idna_status::mapped }, - { U'\x0217', U'\x0217', idna_status::valid }, { U'\x0218', U'\x0218', idna_status::mapped }, - { U'\x0219', U'\x0219', idna_status::valid }, { U'\x021a', U'\x021a', idna_status::mapped }, - { U'\x021b', U'\x021b', idna_status::valid }, { U'\x021c', U'\x021c', idna_status::mapped }, - { U'\x021d', U'\x021d', idna_status::valid }, { U'\x021e', U'\x021e', idna_status::mapped }, - { U'\x021f', U'\x021f', idna_status::valid }, { U'\x0220', U'\x0220', idna_status::mapped }, - { U'\x0221', U'\x0221', idna_status::valid }, { U'\x0222', U'\x0222', idna_status::mapped }, - { U'\x0223', U'\x0223', idna_status::valid }, { U'\x0224', U'\x0224', idna_status::mapped }, - { U'\x0225', U'\x0225', idna_status::valid }, { U'\x0226', U'\x0226', idna_status::mapped }, - { U'\x0227', U'\x0227', idna_status::valid }, { U'\x0228', U'\x0228', idna_status::mapped }, - { U'\x0229', U'\x0229', idna_status::valid }, { U'\x022a', U'\x022a', idna_status::mapped }, - { U'\x022b', U'\x022b', idna_status::valid }, { U'\x022c', U'\x022c', idna_status::mapped }, - { U'\x022d', U'\x022d', idna_status::valid }, { U'\x022e', U'\x022e', idna_status::mapped }, - { U'\x022f', U'\x022f', idna_status::valid }, { U'\x0230', U'\x0230', idna_status::mapped }, - { U'\x0231', U'\x0231', idna_status::valid }, { U'\x0232', U'\x0232', idna_status::mapped }, - { U'\x0233', U'\x0239', idna_status::valid }, { U'\x023a', U'\x023b', idna_status::mapped }, - { U'\x023c', U'\x023c', idna_status::valid }, { U'\x023d', U'\x023e', idna_status::mapped }, - { U'\x023f', U'\x0240', idna_status::valid }, { U'\x0241', U'\x0241', idna_status::mapped }, - { U'\x0242', U'\x0242', idna_status::valid }, { U'\x0243', U'\x0246', idna_status::mapped }, - { U'\x0247', U'\x0247', idna_status::valid }, { U'\x0248', U'\x0248', idna_status::mapped }, - { U'\x0249', U'\x0249', idna_status::valid }, { U'\x024a', U'\x024a', idna_status::mapped }, - { U'\x024b', U'\x024b', idna_status::valid }, { U'\x024c', U'\x024c', idna_status::mapped }, - { U'\x024d', U'\x024d', idna_status::valid }, { U'\x024e', U'\x024e', idna_status::mapped }, - { U'\x024f', U'\x02af', idna_status::valid }, { U'\x02b0', U'\x02b8', idna_status::mapped }, - { U'\x02b9', U'\x02d7', idna_status::valid }, { U'\x02d8', U'\x02dd', idna_status::disallowed_std3_mapped }, - { U'\x02de', U'\x02df', idna_status::valid }, { U'\x02e0', U'\x02e4', idna_status::mapped }, - { U'\x02e5', U'\x033f', idna_status::valid }, { U'\x0340', U'\x0341', idna_status::mapped }, - { U'\x0342', U'\x0342', idna_status::valid }, { U'\x0343', U'\x0345', idna_status::mapped }, - { U'\x0346', U'\x034e', idna_status::valid }, { U'\x034f', U'\x034f', idna_status::ignored }, - { U'\x0350', U'\x036f', idna_status::valid }, { U'\x0370', U'\x0370', idna_status::mapped }, - { U'\x0371', U'\x0371', idna_status::valid }, { U'\x0372', U'\x0372', idna_status::mapped }, - { U'\x0373', U'\x0373', idna_status::valid }, { U'\x0374', U'\x0374', idna_status::mapped }, - { U'\x0375', U'\x0375', idna_status::valid }, { U'\x0376', U'\x0376', idna_status::mapped }, - { U'\x0377', U'\x0377', idna_status::valid }, { U'\x0378', U'\x0379', idna_status::disallowed }, { U'\x037a', U'\x037a', idna_status::disallowed_std3_mapped }, - { U'\x037b', U'\x037d', idna_status::valid }, { U'\x037e', U'\x037e', idna_status::disallowed_std3_mapped }, { U'\x037f', U'\x037f', idna_status::mapped }, { U'\x0380', U'\x0383', idna_status::disallowed }, @@ -358,1032 +198,534 @@ constexpr static auto statuses = std::array{{ { U'\x038c', U'\x038c', idna_status::mapped }, { U'\x038d', U'\x038d', idna_status::disallowed }, { U'\x038e', U'\x038f', idna_status::mapped }, - { U'\x0390', U'\x0390', idna_status::valid }, { U'\x0391', U'\x03a1', idna_status::mapped }, { U'\x03a2', U'\x03a2', idna_status::disallowed }, { U'\x03a3', U'\x03ab', idna_status::mapped }, - { U'\x03ac', U'\x03c1', idna_status::valid }, { U'\x03c2', U'\x03c2', idna_status::deviation }, - { U'\x03c3', U'\x03ce', idna_status::valid }, { U'\x03cf', U'\x03d6', idna_status::mapped }, - { U'\x03d7', U'\x03d7', idna_status::valid }, { U'\x03d8', U'\x03d8', idna_status::mapped }, - { U'\x03d9', U'\x03d9', idna_status::valid }, { U'\x03da', U'\x03da', idna_status::mapped }, - { U'\x03db', U'\x03db', idna_status::valid }, { U'\x03dc', U'\x03dc', idna_status::mapped }, - { U'\x03dd', U'\x03dd', idna_status::valid }, { U'\x03de', U'\x03de', idna_status::mapped }, - { U'\x03df', U'\x03df', idna_status::valid }, { U'\x03e0', U'\x03e0', idna_status::mapped }, - { U'\x03e1', U'\x03e1', idna_status::valid }, { U'\x03e2', U'\x03e2', idna_status::mapped }, - { U'\x03e3', U'\x03e3', idna_status::valid }, { U'\x03e4', U'\x03e4', idna_status::mapped }, - { U'\x03e5', U'\x03e5', idna_status::valid }, { U'\x03e6', U'\x03e6', idna_status::mapped }, - { U'\x03e7', U'\x03e7', idna_status::valid }, { U'\x03e8', U'\x03e8', idna_status::mapped }, - { U'\x03e9', U'\x03e9', idna_status::valid }, { U'\x03ea', U'\x03ea', idna_status::mapped }, - { U'\x03eb', U'\x03eb', idna_status::valid }, { U'\x03ec', U'\x03ec', idna_status::mapped }, - { U'\x03ed', U'\x03ed', idna_status::valid }, { U'\x03ee', U'\x03ee', idna_status::mapped }, - { U'\x03ef', U'\x03ef', idna_status::valid }, { U'\x03f0', U'\x03f2', idna_status::mapped }, - { U'\x03f3', U'\x03f3', idna_status::valid }, { U'\x03f4', U'\x03f5', idna_status::mapped }, - { U'\x03f6', U'\x03f6', idna_status::valid }, { U'\x03f7', U'\x03f7', idna_status::mapped }, - { U'\x03f8', U'\x03f8', idna_status::valid }, { U'\x03f9', U'\x03fa', idna_status::mapped }, - { U'\x03fb', U'\x03fc', idna_status::valid }, { U'\x03fd', U'\x042f', idna_status::mapped }, - { U'\x0430', U'\x045f', idna_status::valid }, { U'\x0460', U'\x0460', idna_status::mapped }, - { U'\x0461', U'\x0461', idna_status::valid }, { U'\x0462', U'\x0462', idna_status::mapped }, - { U'\x0463', U'\x0463', idna_status::valid }, { U'\x0464', U'\x0464', idna_status::mapped }, - { U'\x0465', U'\x0465', idna_status::valid }, { U'\x0466', U'\x0466', idna_status::mapped }, - { U'\x0467', U'\x0467', idna_status::valid }, { U'\x0468', U'\x0468', idna_status::mapped }, - { U'\x0469', U'\x0469', idna_status::valid }, { U'\x046a', U'\x046a', idna_status::mapped }, - { U'\x046b', U'\x046b', idna_status::valid }, { U'\x046c', U'\x046c', idna_status::mapped }, - { U'\x046d', U'\x046d', idna_status::valid }, { U'\x046e', U'\x046e', idna_status::mapped }, - { U'\x046f', U'\x046f', idna_status::valid }, { U'\x0470', U'\x0470', idna_status::mapped }, - { U'\x0471', U'\x0471', idna_status::valid }, { U'\x0472', U'\x0472', idna_status::mapped }, - { U'\x0473', U'\x0473', idna_status::valid }, { U'\x0474', U'\x0474', idna_status::mapped }, - { U'\x0475', U'\x0475', idna_status::valid }, { U'\x0476', U'\x0476', idna_status::mapped }, - { U'\x0477', U'\x0477', idna_status::valid }, { U'\x0478', U'\x0478', idna_status::mapped }, - { U'\x0479', U'\x0479', idna_status::valid }, { U'\x047a', U'\x047a', idna_status::mapped }, - { U'\x047b', U'\x047b', idna_status::valid }, { U'\x047c', U'\x047c', idna_status::mapped }, - { U'\x047d', U'\x047d', idna_status::valid }, { U'\x047e', U'\x047e', idna_status::mapped }, - { U'\x047f', U'\x047f', idna_status::valid }, { U'\x0480', U'\x0480', idna_status::mapped }, - { U'\x0481', U'\x0489', idna_status::valid }, { U'\x048a', U'\x048a', idna_status::mapped }, - { U'\x048b', U'\x048b', idna_status::valid }, { U'\x048c', U'\x048c', idna_status::mapped }, - { U'\x048d', U'\x048d', idna_status::valid }, { U'\x048e', U'\x048e', idna_status::mapped }, - { U'\x048f', U'\x048f', idna_status::valid }, { U'\x0490', U'\x0490', idna_status::mapped }, - { U'\x0491', U'\x0491', idna_status::valid }, { U'\x0492', U'\x0492', idna_status::mapped }, - { U'\x0493', U'\x0493', idna_status::valid }, { U'\x0494', U'\x0494', idna_status::mapped }, - { U'\x0495', U'\x0495', idna_status::valid }, { U'\x0496', U'\x0496', idna_status::mapped }, - { U'\x0497', U'\x0497', idna_status::valid }, { U'\x0498', U'\x0498', idna_status::mapped }, - { U'\x0499', U'\x0499', idna_status::valid }, { U'\x049a', U'\x049a', idna_status::mapped }, - { U'\x049b', U'\x049b', idna_status::valid }, { U'\x049c', U'\x049c', idna_status::mapped }, - { U'\x049d', U'\x049d', idna_status::valid }, { U'\x049e', U'\x049e', idna_status::mapped }, - { U'\x049f', U'\x049f', idna_status::valid }, { U'\x04a0', U'\x04a0', idna_status::mapped }, - { U'\x04a1', U'\x04a1', idna_status::valid }, { U'\x04a2', U'\x04a2', idna_status::mapped }, - { U'\x04a3', U'\x04a3', idna_status::valid }, { U'\x04a4', U'\x04a4', idna_status::mapped }, - { U'\x04a5', U'\x04a5', idna_status::valid }, { U'\x04a6', U'\x04a6', idna_status::mapped }, - { U'\x04a7', U'\x04a7', idna_status::valid }, { U'\x04a8', U'\x04a8', idna_status::mapped }, - { U'\x04a9', U'\x04a9', idna_status::valid }, { U'\x04aa', U'\x04aa', idna_status::mapped }, - { U'\x04ab', U'\x04ab', idna_status::valid }, { U'\x04ac', U'\x04ac', idna_status::mapped }, - { U'\x04ad', U'\x04ad', idna_status::valid }, { U'\x04ae', U'\x04ae', idna_status::mapped }, - { U'\x04af', U'\x04af', idna_status::valid }, { U'\x04b0', U'\x04b0', idna_status::mapped }, - { U'\x04b1', U'\x04b1', idna_status::valid }, { U'\x04b2', U'\x04b2', idna_status::mapped }, - { U'\x04b3', U'\x04b3', idna_status::valid }, { U'\x04b4', U'\x04b4', idna_status::mapped }, - { U'\x04b5', U'\x04b5', idna_status::valid }, { U'\x04b6', U'\x04b6', idna_status::mapped }, - { U'\x04b7', U'\x04b7', idna_status::valid }, { U'\x04b8', U'\x04b8', idna_status::mapped }, - { U'\x04b9', U'\x04b9', idna_status::valid }, { U'\x04ba', U'\x04ba', idna_status::mapped }, - { U'\x04bb', U'\x04bb', idna_status::valid }, { U'\x04bc', U'\x04bc', idna_status::mapped }, - { U'\x04bd', U'\x04bd', idna_status::valid }, { U'\x04be', U'\x04be', idna_status::mapped }, - { U'\x04bf', U'\x04bf', idna_status::valid }, { U'\x04c0', U'\x04c0', idna_status::disallowed }, { U'\x04c1', U'\x04c1', idna_status::mapped }, - { U'\x04c2', U'\x04c2', idna_status::valid }, { U'\x04c3', U'\x04c3', idna_status::mapped }, - { U'\x04c4', U'\x04c4', idna_status::valid }, { U'\x04c5', U'\x04c5', idna_status::mapped }, - { U'\x04c6', U'\x04c6', idna_status::valid }, { U'\x04c7', U'\x04c7', idna_status::mapped }, - { U'\x04c8', U'\x04c8', idna_status::valid }, { U'\x04c9', U'\x04c9', idna_status::mapped }, - { U'\x04ca', U'\x04ca', idna_status::valid }, { U'\x04cb', U'\x04cb', idna_status::mapped }, - { U'\x04cc', U'\x04cc', idna_status::valid }, { U'\x04cd', U'\x04cd', idna_status::mapped }, - { U'\x04ce', U'\x04cf', idna_status::valid }, { U'\x04d0', U'\x04d0', idna_status::mapped }, - { U'\x04d1', U'\x04d1', idna_status::valid }, { U'\x04d2', U'\x04d2', idna_status::mapped }, - { U'\x04d3', U'\x04d3', idna_status::valid }, { U'\x04d4', U'\x04d4', idna_status::mapped }, - { U'\x04d5', U'\x04d5', idna_status::valid }, { U'\x04d6', U'\x04d6', idna_status::mapped }, - { U'\x04d7', U'\x04d7', idna_status::valid }, { U'\x04d8', U'\x04d8', idna_status::mapped }, - { U'\x04d9', U'\x04d9', idna_status::valid }, { U'\x04da', U'\x04da', idna_status::mapped }, - { U'\x04db', U'\x04db', idna_status::valid }, { U'\x04dc', U'\x04dc', idna_status::mapped }, - { U'\x04dd', U'\x04dd', idna_status::valid }, { U'\x04de', U'\x04de', idna_status::mapped }, - { U'\x04df', U'\x04df', idna_status::valid }, { U'\x04e0', U'\x04e0', idna_status::mapped }, - { U'\x04e1', U'\x04e1', idna_status::valid }, { U'\x04e2', U'\x04e2', idna_status::mapped }, - { U'\x04e3', U'\x04e3', idna_status::valid }, { U'\x04e4', U'\x04e4', idna_status::mapped }, - { U'\x04e5', U'\x04e5', idna_status::valid }, { U'\x04e6', U'\x04e6', idna_status::mapped }, - { U'\x04e7', U'\x04e7', idna_status::valid }, { U'\x04e8', U'\x04e8', idna_status::mapped }, - { U'\x04e9', U'\x04e9', idna_status::valid }, { U'\x04ea', U'\x04ea', idna_status::mapped }, - { U'\x04eb', U'\x04eb', idna_status::valid }, { U'\x04ec', U'\x04ec', idna_status::mapped }, - { U'\x04ed', U'\x04ed', idna_status::valid }, { U'\x04ee', U'\x04ee', idna_status::mapped }, - { U'\x04ef', U'\x04ef', idna_status::valid }, { U'\x04f0', U'\x04f0', idna_status::mapped }, - { U'\x04f1', U'\x04f1', idna_status::valid }, { U'\x04f2', U'\x04f2', idna_status::mapped }, - { U'\x04f3', U'\x04f3', idna_status::valid }, { U'\x04f4', U'\x04f4', idna_status::mapped }, - { U'\x04f5', U'\x04f5', idna_status::valid }, { U'\x04f6', U'\x04f6', idna_status::mapped }, - { U'\x04f7', U'\x04f7', idna_status::valid }, { U'\x04f8', U'\x04f8', idna_status::mapped }, - { U'\x04f9', U'\x04f9', idna_status::valid }, { U'\x04fa', U'\x04fa', idna_status::mapped }, - { U'\x04fb', U'\x04fb', idna_status::valid }, { U'\x04fc', U'\x04fc', idna_status::mapped }, - { U'\x04fd', U'\x04fd', idna_status::valid }, { U'\x04fe', U'\x04fe', idna_status::mapped }, - { U'\x04ff', U'\x04ff', idna_status::valid }, { U'\x0500', U'\x0500', idna_status::mapped }, - { U'\x0501', U'\x0501', idna_status::valid }, { U'\x0502', U'\x0502', idna_status::mapped }, - { U'\x0503', U'\x0503', idna_status::valid }, { U'\x0504', U'\x0504', idna_status::mapped }, - { U'\x0505', U'\x0505', idna_status::valid }, { U'\x0506', U'\x0506', idna_status::mapped }, - { U'\x0507', U'\x0507', idna_status::valid }, { U'\x0508', U'\x0508', idna_status::mapped }, - { U'\x0509', U'\x0509', idna_status::valid }, { U'\x050a', U'\x050a', idna_status::mapped }, - { U'\x050b', U'\x050b', idna_status::valid }, { U'\x050c', U'\x050c', idna_status::mapped }, - { U'\x050d', U'\x050d', idna_status::valid }, { U'\x050e', U'\x050e', idna_status::mapped }, - { U'\x050f', U'\x050f', idna_status::valid }, { U'\x0510', U'\x0510', idna_status::mapped }, - { U'\x0511', U'\x0511', idna_status::valid }, { U'\x0512', U'\x0512', idna_status::mapped }, - { U'\x0513', U'\x0513', idna_status::valid }, { U'\x0514', U'\x0514', idna_status::mapped }, - { U'\x0515', U'\x0515', idna_status::valid }, { U'\x0516', U'\x0516', idna_status::mapped }, - { U'\x0517', U'\x0517', idna_status::valid }, { U'\x0518', U'\x0518', idna_status::mapped }, - { U'\x0519', U'\x0519', idna_status::valid }, { U'\x051a', U'\x051a', idna_status::mapped }, - { U'\x051b', U'\x051b', idna_status::valid }, { U'\x051c', U'\x051c', idna_status::mapped }, - { U'\x051d', U'\x051d', idna_status::valid }, { U'\x051e', U'\x051e', idna_status::mapped }, - { U'\x051f', U'\x051f', idna_status::valid }, { U'\x0520', U'\x0520', idna_status::mapped }, - { U'\x0521', U'\x0521', idna_status::valid }, { U'\x0522', U'\x0522', idna_status::mapped }, - { U'\x0523', U'\x0523', idna_status::valid }, { U'\x0524', U'\x0524', idna_status::mapped }, - { U'\x0525', U'\x0525', idna_status::valid }, { U'\x0526', U'\x0526', idna_status::mapped }, - { U'\x0527', U'\x0527', idna_status::valid }, { U'\x0528', U'\x0528', idna_status::mapped }, - { U'\x0529', U'\x0529', idna_status::valid }, { U'\x052a', U'\x052a', idna_status::mapped }, - { U'\x052b', U'\x052b', idna_status::valid }, { U'\x052c', U'\x052c', idna_status::mapped }, - { U'\x052d', U'\x052d', idna_status::valid }, { U'\x052e', U'\x052e', idna_status::mapped }, - { U'\x052f', U'\x052f', idna_status::valid }, { U'\x0530', U'\x0530', idna_status::disallowed }, { U'\x0531', U'\x0556', idna_status::mapped }, { U'\x0557', U'\x0558', idna_status::disallowed }, - { U'\x0559', U'\x0586', idna_status::valid }, { U'\x0587', U'\x0587', idna_status::mapped }, - { U'\x0588', U'\x058a', idna_status::valid }, { U'\x058b', U'\x058c', idna_status::disallowed }, - { U'\x058d', U'\x058f', idna_status::valid }, { U'\x0590', U'\x0590', idna_status::disallowed }, - { U'\x0591', U'\x05c7', idna_status::valid }, { U'\x05c8', U'\x05cf', idna_status::disallowed }, - { U'\x05d0', U'\x05ea', idna_status::valid }, { U'\x05eb', U'\x05ee', idna_status::disallowed }, - { U'\x05ef', U'\x05f4', idna_status::valid }, { U'\x05f5', U'\x0605', idna_status::disallowed }, - { U'\x0606', U'\x061b', idna_status::valid }, { U'\x061c', U'\x061d', idna_status::disallowed }, - { U'\x061e', U'\x0674', idna_status::valid }, { U'\x0675', U'\x0678', idna_status::mapped }, - { U'\x0679', U'\x06dc', idna_status::valid }, { U'\x06dd', U'\x06dd', idna_status::disallowed }, - { U'\x06de', U'\x070d', idna_status::valid }, { U'\x070e', U'\x070f', idna_status::disallowed }, - { U'\x0710', U'\x074a', idna_status::valid }, { U'\x074b', U'\x074c', idna_status::disallowed }, - { U'\x074d', U'\x07b1', idna_status::valid }, { U'\x07b2', U'\x07bf', idna_status::disallowed }, - { U'\x07c0', U'\x07fa', idna_status::valid }, { U'\x07fb', U'\x07fc', idna_status::disallowed }, - { U'\x07fd', U'\x082d', idna_status::valid }, { U'\x082e', U'\x082f', idna_status::disallowed }, - { U'\x0830', U'\x083e', idna_status::valid }, { U'\x083f', U'\x083f', idna_status::disallowed }, - { U'\x0840', U'\x085b', idna_status::valid }, { U'\x085c', U'\x085d', idna_status::disallowed }, - { U'\x085e', U'\x085e', idna_status::valid }, { U'\x085f', U'\x085f', idna_status::disallowed }, - { U'\x0860', U'\x086a', idna_status::valid }, { U'\x086b', U'\x089f', idna_status::disallowed }, - { U'\x08a0', U'\x08b4', idna_status::valid }, { U'\x08b5', U'\x08b5', idna_status::disallowed }, - { U'\x08b6', U'\x08bd', idna_status::valid }, { U'\x08be', U'\x08d2', idna_status::disallowed }, - { U'\x08d3', U'\x08e1', idna_status::valid }, { U'\x08e2', U'\x08e2', idna_status::disallowed }, - { U'\x08e3', U'\x0957', idna_status::valid }, { U'\x0958', U'\x095f', idna_status::mapped }, - { U'\x0960', U'\x0983', idna_status::valid }, { U'\x0984', U'\x0984', idna_status::disallowed }, - { U'\x0985', U'\x098c', idna_status::valid }, { U'\x098d', U'\x098e', idna_status::disallowed }, - { U'\x098f', U'\x0990', idna_status::valid }, { U'\x0991', U'\x0992', idna_status::disallowed }, - { U'\x0993', U'\x09a8', idna_status::valid }, { U'\x09a9', U'\x09a9', idna_status::disallowed }, - { U'\x09aa', U'\x09b0', idna_status::valid }, { U'\x09b1', U'\x09b1', idna_status::disallowed }, - { U'\x09b2', U'\x09b2', idna_status::valid }, { U'\x09b3', U'\x09b5', idna_status::disallowed }, - { U'\x09b6', U'\x09b9', idna_status::valid }, { U'\x09ba', U'\x09bb', idna_status::disallowed }, - { U'\x09bc', U'\x09c4', idna_status::valid }, { U'\x09c5', U'\x09c6', idna_status::disallowed }, - { U'\x09c7', U'\x09c8', idna_status::valid }, { U'\x09c9', U'\x09ca', idna_status::disallowed }, - { U'\x09cb', U'\x09ce', idna_status::valid }, { U'\x09cf', U'\x09d6', idna_status::disallowed }, - { U'\x09d7', U'\x09d7', idna_status::valid }, { U'\x09d8', U'\x09db', idna_status::disallowed }, { U'\x09dc', U'\x09dd', idna_status::mapped }, { U'\x09de', U'\x09de', idna_status::disallowed }, { U'\x09df', U'\x09df', idna_status::mapped }, - { U'\x09e0', U'\x09e3', idna_status::valid }, { U'\x09e4', U'\x09e5', idna_status::disallowed }, - { U'\x09e6', U'\x09fe', idna_status::valid }, { U'\x09ff', U'\x0a00', idna_status::disallowed }, - { U'\x0a01', U'\x0a03', idna_status::valid }, { U'\x0a04', U'\x0a04', idna_status::disallowed }, - { U'\x0a05', U'\x0a0a', idna_status::valid }, { U'\x0a0b', U'\x0a0e', idna_status::disallowed }, - { U'\x0a0f', U'\x0a10', idna_status::valid }, { U'\x0a11', U'\x0a12', idna_status::disallowed }, - { U'\x0a13', U'\x0a28', idna_status::valid }, { U'\x0a29', U'\x0a29', idna_status::disallowed }, - { U'\x0a2a', U'\x0a30', idna_status::valid }, { U'\x0a31', U'\x0a31', idna_status::disallowed }, - { U'\x0a32', U'\x0a32', idna_status::valid }, { U'\x0a33', U'\x0a33', idna_status::mapped }, { U'\x0a34', U'\x0a34', idna_status::disallowed }, - { U'\x0a35', U'\x0a35', idna_status::valid }, { U'\x0a36', U'\x0a36', idna_status::mapped }, { U'\x0a37', U'\x0a37', idna_status::disallowed }, - { U'\x0a38', U'\x0a39', idna_status::valid }, { U'\x0a3a', U'\x0a3b', idna_status::disallowed }, - { U'\x0a3c', U'\x0a3c', idna_status::valid }, { U'\x0a3d', U'\x0a3d', idna_status::disallowed }, - { U'\x0a3e', U'\x0a42', idna_status::valid }, { U'\x0a43', U'\x0a46', idna_status::disallowed }, - { U'\x0a47', U'\x0a48', idna_status::valid }, { U'\x0a49', U'\x0a4a', idna_status::disallowed }, - { U'\x0a4b', U'\x0a4d', idna_status::valid }, { U'\x0a4e', U'\x0a50', idna_status::disallowed }, - { U'\x0a51', U'\x0a51', idna_status::valid }, { U'\x0a52', U'\x0a58', idna_status::disallowed }, { U'\x0a59', U'\x0a5b', idna_status::mapped }, - { U'\x0a5c', U'\x0a5c', idna_status::valid }, { U'\x0a5d', U'\x0a5d', idna_status::disallowed }, { U'\x0a5e', U'\x0a5e', idna_status::mapped }, { U'\x0a5f', U'\x0a65', idna_status::disallowed }, - { U'\x0a66', U'\x0a76', idna_status::valid }, { U'\x0a77', U'\x0a80', idna_status::disallowed }, - { U'\x0a81', U'\x0a83', idna_status::valid }, { U'\x0a84', U'\x0a84', idna_status::disallowed }, - { U'\x0a85', U'\x0a8d', idna_status::valid }, { U'\x0a8e', U'\x0a8e', idna_status::disallowed }, - { U'\x0a8f', U'\x0a91', idna_status::valid }, { U'\x0a92', U'\x0a92', idna_status::disallowed }, - { U'\x0a93', U'\x0aa8', idna_status::valid }, { U'\x0aa9', U'\x0aa9', idna_status::disallowed }, - { U'\x0aaa', U'\x0ab0', idna_status::valid }, { U'\x0ab1', U'\x0ab1', idna_status::disallowed }, - { U'\x0ab2', U'\x0ab3', idna_status::valid }, { U'\x0ab4', U'\x0ab4', idna_status::disallowed }, - { U'\x0ab5', U'\x0ab9', idna_status::valid }, { U'\x0aba', U'\x0abb', idna_status::disallowed }, - { U'\x0abc', U'\x0ac5', idna_status::valid }, { U'\x0ac6', U'\x0ac6', idna_status::disallowed }, - { U'\x0ac7', U'\x0ac9', idna_status::valid }, { U'\x0aca', U'\x0aca', idna_status::disallowed }, - { U'\x0acb', U'\x0acd', idna_status::valid }, { U'\x0ace', U'\x0acf', idna_status::disallowed }, - { U'\x0ad0', U'\x0ad0', idna_status::valid }, { U'\x0ad1', U'\x0adf', idna_status::disallowed }, - { U'\x0ae0', U'\x0ae3', idna_status::valid }, { U'\x0ae4', U'\x0ae5', idna_status::disallowed }, - { U'\x0ae6', U'\x0af1', idna_status::valid }, { U'\x0af2', U'\x0af8', idna_status::disallowed }, - { U'\x0af9', U'\x0aff', idna_status::valid }, { U'\x0b00', U'\x0b00', idna_status::disallowed }, - { U'\x0b01', U'\x0b03', idna_status::valid }, { U'\x0b04', U'\x0b04', idna_status::disallowed }, - { U'\x0b05', U'\x0b0c', idna_status::valid }, { U'\x0b0d', U'\x0b0e', idna_status::disallowed }, - { U'\x0b0f', U'\x0b10', idna_status::valid }, { U'\x0b11', U'\x0b12', idna_status::disallowed }, - { U'\x0b13', U'\x0b28', idna_status::valid }, { U'\x0b29', U'\x0b29', idna_status::disallowed }, - { U'\x0b2a', U'\x0b30', idna_status::valid }, { U'\x0b31', U'\x0b31', idna_status::disallowed }, - { U'\x0b32', U'\x0b33', idna_status::valid }, { U'\x0b34', U'\x0b34', idna_status::disallowed }, - { U'\x0b35', U'\x0b39', idna_status::valid }, { U'\x0b3a', U'\x0b3b', idna_status::disallowed }, - { U'\x0b3c', U'\x0b44', idna_status::valid }, { U'\x0b45', U'\x0b46', idna_status::disallowed }, - { U'\x0b47', U'\x0b48', idna_status::valid }, { U'\x0b49', U'\x0b4a', idna_status::disallowed }, - { U'\x0b4b', U'\x0b4d', idna_status::valid }, { U'\x0b4e', U'\x0b55', idna_status::disallowed }, - { U'\x0b56', U'\x0b57', idna_status::valid }, { U'\x0b58', U'\x0b5b', idna_status::disallowed }, { U'\x0b5c', U'\x0b5d', idna_status::mapped }, { U'\x0b5e', U'\x0b5e', idna_status::disallowed }, - { U'\x0b5f', U'\x0b63', idna_status::valid }, { U'\x0b64', U'\x0b65', idna_status::disallowed }, - { U'\x0b66', U'\x0b77', idna_status::valid }, { U'\x0b78', U'\x0b81', idna_status::disallowed }, - { U'\x0b82', U'\x0b83', idna_status::valid }, { U'\x0b84', U'\x0b84', idna_status::disallowed }, - { U'\x0b85', U'\x0b8a', idna_status::valid }, { U'\x0b8b', U'\x0b8d', idna_status::disallowed }, - { U'\x0b8e', U'\x0b90', idna_status::valid }, { U'\x0b91', U'\x0b91', idna_status::disallowed }, - { U'\x0b92', U'\x0b95', idna_status::valid }, { U'\x0b96', U'\x0b98', idna_status::disallowed }, - { U'\x0b99', U'\x0b9a', idna_status::valid }, { U'\x0b9b', U'\x0b9b', idna_status::disallowed }, - { U'\x0b9c', U'\x0b9c', idna_status::valid }, { U'\x0b9d', U'\x0b9d', idna_status::disallowed }, - { U'\x0b9e', U'\x0b9f', idna_status::valid }, { U'\x0ba0', U'\x0ba2', idna_status::disallowed }, - { U'\x0ba3', U'\x0ba4', idna_status::valid }, { U'\x0ba5', U'\x0ba7', idna_status::disallowed }, - { U'\x0ba8', U'\x0baa', idna_status::valid }, { U'\x0bab', U'\x0bad', idna_status::disallowed }, - { U'\x0bae', U'\x0bb9', idna_status::valid }, { U'\x0bba', U'\x0bbd', idna_status::disallowed }, - { U'\x0bbe', U'\x0bc2', idna_status::valid }, { U'\x0bc3', U'\x0bc5', idna_status::disallowed }, - { U'\x0bc6', U'\x0bc8', idna_status::valid }, { U'\x0bc9', U'\x0bc9', idna_status::disallowed }, - { U'\x0bca', U'\x0bcd', idna_status::valid }, { U'\x0bce', U'\x0bcf', idna_status::disallowed }, - { U'\x0bd0', U'\x0bd0', idna_status::valid }, { U'\x0bd1', U'\x0bd6', idna_status::disallowed }, - { U'\x0bd7', U'\x0bd7', idna_status::valid }, { U'\x0bd8', U'\x0be5', idna_status::disallowed }, - { U'\x0be6', U'\x0bfa', idna_status::valid }, { U'\x0bfb', U'\x0bff', idna_status::disallowed }, - { U'\x0c00', U'\x0c0c', idna_status::valid }, { U'\x0c0d', U'\x0c0d', idna_status::disallowed }, - { U'\x0c0e', U'\x0c10', idna_status::valid }, { U'\x0c11', U'\x0c11', idna_status::disallowed }, - { U'\x0c12', U'\x0c28', idna_status::valid }, { U'\x0c29', U'\x0c29', idna_status::disallowed }, - { U'\x0c2a', U'\x0c39', idna_status::valid }, { U'\x0c3a', U'\x0c3c', idna_status::disallowed }, - { U'\x0c3d', U'\x0c44', idna_status::valid }, { U'\x0c45', U'\x0c45', idna_status::disallowed }, - { U'\x0c46', U'\x0c48', idna_status::valid }, { U'\x0c49', U'\x0c49', idna_status::disallowed }, - { U'\x0c4a', U'\x0c4d', idna_status::valid }, { U'\x0c4e', U'\x0c54', idna_status::disallowed }, - { U'\x0c55', U'\x0c56', idna_status::valid }, { U'\x0c57', U'\x0c57', idna_status::disallowed }, - { U'\x0c58', U'\x0c5a', idna_status::valid }, { U'\x0c5b', U'\x0c5f', idna_status::disallowed }, - { U'\x0c60', U'\x0c63', idna_status::valid }, { U'\x0c64', U'\x0c65', idna_status::disallowed }, - { U'\x0c66', U'\x0c6f', idna_status::valid }, { U'\x0c70', U'\x0c76', idna_status::disallowed }, - { U'\x0c77', U'\x0c8c', idna_status::valid }, { U'\x0c8d', U'\x0c8d', idna_status::disallowed }, - { U'\x0c8e', U'\x0c90', idna_status::valid }, { U'\x0c91', U'\x0c91', idna_status::disallowed }, - { U'\x0c92', U'\x0ca8', idna_status::valid }, { U'\x0ca9', U'\x0ca9', idna_status::disallowed }, - { U'\x0caa', U'\x0cb3', idna_status::valid }, { U'\x0cb4', U'\x0cb4', idna_status::disallowed }, - { U'\x0cb5', U'\x0cb9', idna_status::valid }, { U'\x0cba', U'\x0cbb', idna_status::disallowed }, - { U'\x0cbc', U'\x0cc4', idna_status::valid }, { U'\x0cc5', U'\x0cc5', idna_status::disallowed }, - { U'\x0cc6', U'\x0cc8', idna_status::valid }, { U'\x0cc9', U'\x0cc9', idna_status::disallowed }, - { U'\x0cca', U'\x0ccd', idna_status::valid }, { U'\x0cce', U'\x0cd4', idna_status::disallowed }, - { U'\x0cd5', U'\x0cd6', idna_status::valid }, { U'\x0cd7', U'\x0cdd', idna_status::disallowed }, - { U'\x0cde', U'\x0cde', idna_status::valid }, { U'\x0cdf', U'\x0cdf', idna_status::disallowed }, - { U'\x0ce0', U'\x0ce3', idna_status::valid }, { U'\x0ce4', U'\x0ce5', idna_status::disallowed }, - { U'\x0ce6', U'\x0cef', idna_status::valid }, { U'\x0cf0', U'\x0cf0', idna_status::disallowed }, - { U'\x0cf1', U'\x0cf2', idna_status::valid }, { U'\x0cf3', U'\x0cff', idna_status::disallowed }, - { U'\x0d00', U'\x0d03', idna_status::valid }, { U'\x0d04', U'\x0d04', idna_status::disallowed }, - { U'\x0d05', U'\x0d0c', idna_status::valid }, { U'\x0d0d', U'\x0d0d', idna_status::disallowed }, - { U'\x0d0e', U'\x0d10', idna_status::valid }, { U'\x0d11', U'\x0d11', idna_status::disallowed }, - { U'\x0d12', U'\x0d44', idna_status::valid }, { U'\x0d45', U'\x0d45', idna_status::disallowed }, - { U'\x0d46', U'\x0d48', idna_status::valid }, { U'\x0d49', U'\x0d49', idna_status::disallowed }, - { U'\x0d4a', U'\x0d4f', idna_status::valid }, { U'\x0d50', U'\x0d53', idna_status::disallowed }, - { U'\x0d54', U'\x0d63', idna_status::valid }, { U'\x0d64', U'\x0d65', idna_status::disallowed }, - { U'\x0d66', U'\x0d7f', idna_status::valid }, { U'\x0d80', U'\x0d81', idna_status::disallowed }, - { U'\x0d82', U'\x0d83', idna_status::valid }, { U'\x0d84', U'\x0d84', idna_status::disallowed }, - { U'\x0d85', U'\x0d96', idna_status::valid }, { U'\x0d97', U'\x0d99', idna_status::disallowed }, - { U'\x0d9a', U'\x0db1', idna_status::valid }, { U'\x0db2', U'\x0db2', idna_status::disallowed }, - { U'\x0db3', U'\x0dbb', idna_status::valid }, { U'\x0dbc', U'\x0dbc', idna_status::disallowed }, - { U'\x0dbd', U'\x0dbd', idna_status::valid }, { U'\x0dbe', U'\x0dbf', idna_status::disallowed }, - { U'\x0dc0', U'\x0dc6', idna_status::valid }, { U'\x0dc7', U'\x0dc9', idna_status::disallowed }, - { U'\x0dca', U'\x0dca', idna_status::valid }, { U'\x0dcb', U'\x0dce', idna_status::disallowed }, - { U'\x0dcf', U'\x0dd4', idna_status::valid }, { U'\x0dd5', U'\x0dd5', idna_status::disallowed }, - { U'\x0dd6', U'\x0dd6', idna_status::valid }, { U'\x0dd7', U'\x0dd7', idna_status::disallowed }, - { U'\x0dd8', U'\x0ddf', idna_status::valid }, { U'\x0de0', U'\x0de5', idna_status::disallowed }, - { U'\x0de6', U'\x0def', idna_status::valid }, { U'\x0df0', U'\x0df1', idna_status::disallowed }, - { U'\x0df2', U'\x0df4', idna_status::valid }, { U'\x0df5', U'\x0e00', idna_status::disallowed }, - { U'\x0e01', U'\x0e32', idna_status::valid }, { U'\x0e33', U'\x0e33', idna_status::mapped }, - { U'\x0e34', U'\x0e3a', idna_status::valid }, { U'\x0e3b', U'\x0e3e', idna_status::disallowed }, - { U'\x0e3f', U'\x0e5b', idna_status::valid }, { U'\x0e5c', U'\x0e80', idna_status::disallowed }, - { U'\x0e81', U'\x0e82', idna_status::valid }, { U'\x0e83', U'\x0e83', idna_status::disallowed }, - { U'\x0e84', U'\x0e84', idna_status::valid }, { U'\x0e85', U'\x0e85', idna_status::disallowed }, - { U'\x0e86', U'\x0e8a', idna_status::valid }, { U'\x0e8b', U'\x0e8b', idna_status::disallowed }, - { U'\x0e8c', U'\x0ea3', idna_status::valid }, { U'\x0ea4', U'\x0ea4', idna_status::disallowed }, - { U'\x0ea5', U'\x0ea5', idna_status::valid }, { U'\x0ea6', U'\x0ea6', idna_status::disallowed }, - { U'\x0ea7', U'\x0eb2', idna_status::valid }, { U'\x0eb3', U'\x0eb3', idna_status::mapped }, - { U'\x0eb4', U'\x0ebd', idna_status::valid }, { U'\x0ebe', U'\x0ebf', idna_status::disallowed }, - { U'\x0ec0', U'\x0ec4', idna_status::valid }, { U'\x0ec5', U'\x0ec5', idna_status::disallowed }, - { U'\x0ec6', U'\x0ec6', idna_status::valid }, { U'\x0ec7', U'\x0ec7', idna_status::disallowed }, - { U'\x0ec8', U'\x0ecd', idna_status::valid }, { U'\x0ece', U'\x0ecf', idna_status::disallowed }, - { U'\x0ed0', U'\x0ed9', idna_status::valid }, { U'\x0eda', U'\x0edb', idna_status::disallowed }, { U'\x0edc', U'\x0edd', idna_status::mapped }, - { U'\x0ede', U'\x0edf', idna_status::valid }, { U'\x0ee0', U'\x0eff', idna_status::disallowed }, - { U'\x0f00', U'\x0f0b', idna_status::valid }, { U'\x0f0c', U'\x0f0c', idna_status::mapped }, - { U'\x0f0d', U'\x0f42', idna_status::valid }, { U'\x0f43', U'\x0f43', idna_status::mapped }, - { U'\x0f44', U'\x0f47', idna_status::valid }, { U'\x0f48', U'\x0f48', idna_status::disallowed }, - { U'\x0f49', U'\x0f4c', idna_status::valid }, { U'\x0f4d', U'\x0f4d', idna_status::mapped }, - { U'\x0f4e', U'\x0f51', idna_status::valid }, { U'\x0f52', U'\x0f52', idna_status::mapped }, - { U'\x0f53', U'\x0f56', idna_status::valid }, { U'\x0f57', U'\x0f57', idna_status::mapped }, - { U'\x0f58', U'\x0f5b', idna_status::valid }, { U'\x0f5c', U'\x0f5c', idna_status::mapped }, - { U'\x0f5d', U'\x0f68', idna_status::valid }, { U'\x0f69', U'\x0f69', idna_status::mapped }, - { U'\x0f6a', U'\x0f6c', idna_status::valid }, { U'\x0f6d', U'\x0f70', idna_status::disallowed }, - { U'\x0f71', U'\x0f72', idna_status::valid }, { U'\x0f73', U'\x0f73', idna_status::mapped }, - { U'\x0f74', U'\x0f74', idna_status::valid }, { U'\x0f75', U'\x0f79', idna_status::mapped }, - { U'\x0f7a', U'\x0f80', idna_status::valid }, { U'\x0f81', U'\x0f81', idna_status::mapped }, - { U'\x0f82', U'\x0f92', idna_status::valid }, { U'\x0f93', U'\x0f93', idna_status::mapped }, - { U'\x0f94', U'\x0f97', idna_status::valid }, { U'\x0f98', U'\x0f98', idna_status::disallowed }, - { U'\x0f99', U'\x0f9c', idna_status::valid }, { U'\x0f9d', U'\x0f9d', idna_status::mapped }, - { U'\x0f9e', U'\x0fa1', idna_status::valid }, { U'\x0fa2', U'\x0fa2', idna_status::mapped }, - { U'\x0fa3', U'\x0fa6', idna_status::valid }, { U'\x0fa7', U'\x0fa7', idna_status::mapped }, - { U'\x0fa8', U'\x0fab', idna_status::valid }, { U'\x0fac', U'\x0fac', idna_status::mapped }, - { U'\x0fad', U'\x0fb8', idna_status::valid }, { U'\x0fb9', U'\x0fb9', idna_status::mapped }, - { U'\x0fba', U'\x0fbc', idna_status::valid }, { U'\x0fbd', U'\x0fbd', idna_status::disallowed }, - { U'\x0fbe', U'\x0fcc', idna_status::valid }, { U'\x0fcd', U'\x0fcd', idna_status::disallowed }, - { U'\x0fce', U'\x0fda', idna_status::valid }, { U'\x0fdb', U'\x0fff', idna_status::disallowed }, - { U'\x1000', U'\x109f', idna_status::valid }, { U'\x10a0', U'\x10c6', idna_status::disallowed }, { U'\x10c7', U'\x10c7', idna_status::mapped }, { U'\x10c8', U'\x10cc', idna_status::disallowed }, { U'\x10cd', U'\x10cd', idna_status::mapped }, { U'\x10ce', U'\x10cf', idna_status::disallowed }, - { U'\x10d0', U'\x10fb', idna_status::valid }, { U'\x10fc', U'\x10fc', idna_status::mapped }, - { U'\x10fd', U'\x115e', idna_status::valid }, { U'\x115f', U'\x1160', idna_status::disallowed }, - { U'\x1161', U'\x1248', idna_status::valid }, { U'\x1249', U'\x1249', idna_status::disallowed }, - { U'\x124a', U'\x124d', idna_status::valid }, { U'\x124e', U'\x124f', idna_status::disallowed }, - { U'\x1250', U'\x1256', idna_status::valid }, { U'\x1257', U'\x1257', idna_status::disallowed }, - { U'\x1258', U'\x1258', idna_status::valid }, { U'\x1259', U'\x1259', idna_status::disallowed }, - { U'\x125a', U'\x125d', idna_status::valid }, { U'\x125e', U'\x125f', idna_status::disallowed }, - { U'\x1260', U'\x1288', idna_status::valid }, { U'\x1289', U'\x1289', idna_status::disallowed }, - { U'\x128a', U'\x128d', idna_status::valid }, { U'\x128e', U'\x128f', idna_status::disallowed }, - { U'\x1290', U'\x12b0', idna_status::valid }, { U'\x12b1', U'\x12b1', idna_status::disallowed }, - { U'\x12b2', U'\x12b5', idna_status::valid }, { U'\x12b6', U'\x12b7', idna_status::disallowed }, - { U'\x12b8', U'\x12be', idna_status::valid }, { U'\x12bf', U'\x12bf', idna_status::disallowed }, - { U'\x12c0', U'\x12c0', idna_status::valid }, { U'\x12c1', U'\x12c1', idna_status::disallowed }, - { U'\x12c2', U'\x12c5', idna_status::valid }, { U'\x12c6', U'\x12c7', idna_status::disallowed }, - { U'\x12c8', U'\x12d6', idna_status::valid }, { U'\x12d7', U'\x12d7', idna_status::disallowed }, - { U'\x12d8', U'\x1310', idna_status::valid }, { U'\x1311', U'\x1311', idna_status::disallowed }, - { U'\x1312', U'\x1315', idna_status::valid }, { U'\x1316', U'\x1317', idna_status::disallowed }, - { U'\x1318', U'\x135a', idna_status::valid }, { U'\x135b', U'\x135c', idna_status::disallowed }, - { U'\x135d', U'\x137c', idna_status::valid }, { U'\x137d', U'\x137f', idna_status::disallowed }, - { U'\x1380', U'\x1399', idna_status::valid }, { U'\x139a', U'\x139f', idna_status::disallowed }, - { U'\x13a0', U'\x13f5', idna_status::valid }, { U'\x13f6', U'\x13f7', idna_status::disallowed }, { U'\x13f8', U'\x13fd', idna_status::mapped }, { U'\x13fe', U'\x13ff', idna_status::disallowed }, - { U'\x1400', U'\x167f', idna_status::valid }, { U'\x1680', U'\x1680', idna_status::disallowed }, - { U'\x1681', U'\x169c', idna_status::valid }, { U'\x169d', U'\x169f', idna_status::disallowed }, - { U'\x16a0', U'\x16f8', idna_status::valid }, { U'\x16f9', U'\x16ff', idna_status::disallowed }, - { U'\x1700', U'\x170c', idna_status::valid }, { U'\x170d', U'\x170d', idna_status::disallowed }, - { U'\x170e', U'\x1714', idna_status::valid }, { U'\x1715', U'\x171f', idna_status::disallowed }, - { U'\x1720', U'\x1736', idna_status::valid }, { U'\x1737', U'\x173f', idna_status::disallowed }, - { U'\x1740', U'\x1753', idna_status::valid }, { U'\x1754', U'\x175f', idna_status::disallowed }, - { U'\x1760', U'\x176c', idna_status::valid }, { U'\x176d', U'\x176d', idna_status::disallowed }, - { U'\x176e', U'\x1770', idna_status::valid }, { U'\x1771', U'\x1771', idna_status::disallowed }, - { U'\x1772', U'\x1773', idna_status::valid }, { U'\x1774', U'\x177f', idna_status::disallowed }, - { U'\x1780', U'\x17b3', idna_status::valid }, { U'\x17b4', U'\x17b5', idna_status::disallowed }, - { U'\x17b6', U'\x17dd', idna_status::valid }, { U'\x17de', U'\x17df', idna_status::disallowed }, - { U'\x17e0', U'\x17e9', idna_status::valid }, { U'\x17ea', U'\x17ef', idna_status::disallowed }, - { U'\x17f0', U'\x17f9', idna_status::valid }, { U'\x17fa', U'\x17ff', idna_status::disallowed }, - { U'\x1800', U'\x1805', idna_status::valid }, { U'\x1806', U'\x1806', idna_status::disallowed }, - { U'\x1807', U'\x180a', idna_status::valid }, { U'\x180b', U'\x180d', idna_status::ignored }, { U'\x180e', U'\x180f', idna_status::disallowed }, - { U'\x1810', U'\x1819', idna_status::valid }, { U'\x181a', U'\x181f', idna_status::disallowed }, - { U'\x1820', U'\x1878', idna_status::valid }, { U'\x1879', U'\x187f', idna_status::disallowed }, - { U'\x1880', U'\x18aa', idna_status::valid }, { U'\x18ab', U'\x18af', idna_status::disallowed }, - { U'\x18b0', U'\x18f5', idna_status::valid }, { U'\x18f6', U'\x18ff', idna_status::disallowed }, - { U'\x1900', U'\x191e', idna_status::valid }, { U'\x191f', U'\x191f', idna_status::disallowed }, - { U'\x1920', U'\x192b', idna_status::valid }, { U'\x192c', U'\x192f', idna_status::disallowed }, - { U'\x1930', U'\x193b', idna_status::valid }, { U'\x193c', U'\x193f', idna_status::disallowed }, - { U'\x1940', U'\x1940', idna_status::valid }, { U'\x1941', U'\x1943', idna_status::disallowed }, - { U'\x1944', U'\x196d', idna_status::valid }, { U'\x196e', U'\x196f', idna_status::disallowed }, - { U'\x1970', U'\x1974', idna_status::valid }, { U'\x1975', U'\x197f', idna_status::disallowed }, - { U'\x1980', U'\x19ab', idna_status::valid }, { U'\x19ac', U'\x19af', idna_status::disallowed }, - { U'\x19b0', U'\x19c9', idna_status::valid }, { U'\x19ca', U'\x19cf', idna_status::disallowed }, - { U'\x19d0', U'\x19da', idna_status::valid }, { U'\x19db', U'\x19dd', idna_status::disallowed }, - { U'\x19de', U'\x1a1b', idna_status::valid }, { U'\x1a1c', U'\x1a1d', idna_status::disallowed }, - { U'\x1a1e', U'\x1a5e', idna_status::valid }, { U'\x1a5f', U'\x1a5f', idna_status::disallowed }, - { U'\x1a60', U'\x1a7c', idna_status::valid }, { U'\x1a7d', U'\x1a7e', idna_status::disallowed }, - { U'\x1a7f', U'\x1a89', idna_status::valid }, { U'\x1a8a', U'\x1a8f', idna_status::disallowed }, - { U'\x1a90', U'\x1a99', idna_status::valid }, { U'\x1a9a', U'\x1a9f', idna_status::disallowed }, - { U'\x1aa0', U'\x1aad', idna_status::valid }, { U'\x1aae', U'\x1aaf', idna_status::disallowed }, - { U'\x1ab0', U'\x1abe', idna_status::valid }, { U'\x1abf', U'\x1aff', idna_status::disallowed }, - { U'\x1b00', U'\x1b4b', idna_status::valid }, { U'\x1b4c', U'\x1b4f', idna_status::disallowed }, - { U'\x1b50', U'\x1b7c', idna_status::valid }, { U'\x1b7d', U'\x1b7f', idna_status::disallowed }, - { U'\x1b80', U'\x1bf3', idna_status::valid }, { U'\x1bf4', U'\x1bfb', idna_status::disallowed }, - { U'\x1bfc', U'\x1c37', idna_status::valid }, { U'\x1c38', U'\x1c3a', idna_status::disallowed }, - { U'\x1c3b', U'\x1c49', idna_status::valid }, { U'\x1c4a', U'\x1c4c', idna_status::disallowed }, - { U'\x1c4d', U'\x1c7f', idna_status::valid }, { U'\x1c80', U'\x1c88', idna_status::mapped }, { U'\x1c89', U'\x1c8f', idna_status::disallowed }, { U'\x1c90', U'\x1cba', idna_status::mapped }, { U'\x1cbb', U'\x1cbc', idna_status::disallowed }, { U'\x1cbd', U'\x1cbf', idna_status::mapped }, - { U'\x1cc0', U'\x1cc7', idna_status::valid }, { U'\x1cc8', U'\x1ccf', idna_status::disallowed }, - { U'\x1cd0', U'\x1cfa', idna_status::valid }, { U'\x1cfb', U'\x1cff', idna_status::disallowed }, - { U'\x1d00', U'\x1d2b', idna_status::valid }, { U'\x1d2c', U'\x1d2e', idna_status::mapped }, - { U'\x1d2f', U'\x1d2f', idna_status::valid }, { U'\x1d30', U'\x1d3a', idna_status::mapped }, - { U'\x1d3b', U'\x1d3b', idna_status::valid }, { U'\x1d3c', U'\x1d4d', idna_status::mapped }, - { U'\x1d4e', U'\x1d4e', idna_status::valid }, { U'\x1d4f', U'\x1d6a', idna_status::mapped }, - { U'\x1d6b', U'\x1d77', idna_status::valid }, { U'\x1d78', U'\x1d78', idna_status::mapped }, - { U'\x1d79', U'\x1d9a', idna_status::valid }, { U'\x1d9b', U'\x1dbf', idna_status::mapped }, - { U'\x1dc0', U'\x1df9', idna_status::valid }, { U'\x1dfa', U'\x1dfa', idna_status::disallowed }, - { U'\x1dfb', U'\x1dff', idna_status::valid }, { U'\x1e00', U'\x1e00', idna_status::mapped }, - { U'\x1e01', U'\x1e01', idna_status::valid }, { U'\x1e02', U'\x1e02', idna_status::mapped }, - { U'\x1e03', U'\x1e03', idna_status::valid }, { U'\x1e04', U'\x1e04', idna_status::mapped }, - { U'\x1e05', U'\x1e05', idna_status::valid }, { U'\x1e06', U'\x1e06', idna_status::mapped }, - { U'\x1e07', U'\x1e07', idna_status::valid }, { U'\x1e08', U'\x1e08', idna_status::mapped }, - { U'\x1e09', U'\x1e09', idna_status::valid }, { U'\x1e0a', U'\x1e0a', idna_status::mapped }, - { U'\x1e0b', U'\x1e0b', idna_status::valid }, { U'\x1e0c', U'\x1e0c', idna_status::mapped }, - { U'\x1e0d', U'\x1e0d', idna_status::valid }, { U'\x1e0e', U'\x1e0e', idna_status::mapped }, - { U'\x1e0f', U'\x1e0f', idna_status::valid }, { U'\x1e10', U'\x1e10', idna_status::mapped }, - { U'\x1e11', U'\x1e11', idna_status::valid }, { U'\x1e12', U'\x1e12', idna_status::mapped }, - { U'\x1e13', U'\x1e13', idna_status::valid }, { U'\x1e14', U'\x1e14', idna_status::mapped }, - { U'\x1e15', U'\x1e15', idna_status::valid }, { U'\x1e16', U'\x1e16', idna_status::mapped }, - { U'\x1e17', U'\x1e17', idna_status::valid }, { U'\x1e18', U'\x1e18', idna_status::mapped }, - { U'\x1e19', U'\x1e19', idna_status::valid }, { U'\x1e1a', U'\x1e1a', idna_status::mapped }, - { U'\x1e1b', U'\x1e1b', idna_status::valid }, { U'\x1e1c', U'\x1e1c', idna_status::mapped }, - { U'\x1e1d', U'\x1e1d', idna_status::valid }, { U'\x1e1e', U'\x1e1e', idna_status::mapped }, - { U'\x1e1f', U'\x1e1f', idna_status::valid }, { U'\x1e20', U'\x1e20', idna_status::mapped }, - { U'\x1e21', U'\x1e21', idna_status::valid }, { U'\x1e22', U'\x1e22', idna_status::mapped }, - { U'\x1e23', U'\x1e23', idna_status::valid }, { U'\x1e24', U'\x1e24', idna_status::mapped }, - { U'\x1e25', U'\x1e25', idna_status::valid }, { U'\x1e26', U'\x1e26', idna_status::mapped }, - { U'\x1e27', U'\x1e27', idna_status::valid }, { U'\x1e28', U'\x1e28', idna_status::mapped }, - { U'\x1e29', U'\x1e29', idna_status::valid }, { U'\x1e2a', U'\x1e2a', idna_status::mapped }, - { U'\x1e2b', U'\x1e2b', idna_status::valid }, { U'\x1e2c', U'\x1e2c', idna_status::mapped }, - { U'\x1e2d', U'\x1e2d', idna_status::valid }, { U'\x1e2e', U'\x1e2e', idna_status::mapped }, - { U'\x1e2f', U'\x1e2f', idna_status::valid }, { U'\x1e30', U'\x1e30', idna_status::mapped }, - { U'\x1e31', U'\x1e31', idna_status::valid }, { U'\x1e32', U'\x1e32', idna_status::mapped }, - { U'\x1e33', U'\x1e33', idna_status::valid }, { U'\x1e34', U'\x1e34', idna_status::mapped }, - { U'\x1e35', U'\x1e35', idna_status::valid }, { U'\x1e36', U'\x1e36', idna_status::mapped }, - { U'\x1e37', U'\x1e37', idna_status::valid }, { U'\x1e38', U'\x1e38', idna_status::mapped }, - { U'\x1e39', U'\x1e39', idna_status::valid }, { U'\x1e3a', U'\x1e3a', idna_status::mapped }, - { U'\x1e3b', U'\x1e3b', idna_status::valid }, { U'\x1e3c', U'\x1e3c', idna_status::mapped }, - { U'\x1e3d', U'\x1e3d', idna_status::valid }, { U'\x1e3e', U'\x1e3e', idna_status::mapped }, - { U'\x1e3f', U'\x1e3f', idna_status::valid }, { U'\x1e40', U'\x1e40', idna_status::mapped }, - { U'\x1e41', U'\x1e41', idna_status::valid }, { U'\x1e42', U'\x1e42', idna_status::mapped }, - { U'\x1e43', U'\x1e43', idna_status::valid }, { U'\x1e44', U'\x1e44', idna_status::mapped }, - { U'\x1e45', U'\x1e45', idna_status::valid }, { U'\x1e46', U'\x1e46', idna_status::mapped }, - { U'\x1e47', U'\x1e47', idna_status::valid }, { U'\x1e48', U'\x1e48', idna_status::mapped }, - { U'\x1e49', U'\x1e49', idna_status::valid }, { U'\x1e4a', U'\x1e4a', idna_status::mapped }, - { U'\x1e4b', U'\x1e4b', idna_status::valid }, { U'\x1e4c', U'\x1e4c', idna_status::mapped }, - { U'\x1e4d', U'\x1e4d', idna_status::valid }, { U'\x1e4e', U'\x1e4e', idna_status::mapped }, - { U'\x1e4f', U'\x1e4f', idna_status::valid }, { U'\x1e50', U'\x1e50', idna_status::mapped }, - { U'\x1e51', U'\x1e51', idna_status::valid }, { U'\x1e52', U'\x1e52', idna_status::mapped }, - { U'\x1e53', U'\x1e53', idna_status::valid }, { U'\x1e54', U'\x1e54', idna_status::mapped }, - { U'\x1e55', U'\x1e55', idna_status::valid }, { U'\x1e56', U'\x1e56', idna_status::mapped }, - { U'\x1e57', U'\x1e57', idna_status::valid }, { U'\x1e58', U'\x1e58', idna_status::mapped }, - { U'\x1e59', U'\x1e59', idna_status::valid }, { U'\x1e5a', U'\x1e5a', idna_status::mapped }, - { U'\x1e5b', U'\x1e5b', idna_status::valid }, { U'\x1e5c', U'\x1e5c', idna_status::mapped }, - { U'\x1e5d', U'\x1e5d', idna_status::valid }, { U'\x1e5e', U'\x1e5e', idna_status::mapped }, - { U'\x1e5f', U'\x1e5f', idna_status::valid }, { U'\x1e60', U'\x1e60', idna_status::mapped }, - { U'\x1e61', U'\x1e61', idna_status::valid }, { U'\x1e62', U'\x1e62', idna_status::mapped }, - { U'\x1e63', U'\x1e63', idna_status::valid }, { U'\x1e64', U'\x1e64', idna_status::mapped }, - { U'\x1e65', U'\x1e65', idna_status::valid }, { U'\x1e66', U'\x1e66', idna_status::mapped }, - { U'\x1e67', U'\x1e67', idna_status::valid }, { U'\x1e68', U'\x1e68', idna_status::mapped }, - { U'\x1e69', U'\x1e69', idna_status::valid }, { U'\x1e6a', U'\x1e6a', idna_status::mapped }, - { U'\x1e6b', U'\x1e6b', idna_status::valid }, { U'\x1e6c', U'\x1e6c', idna_status::mapped }, - { U'\x1e6d', U'\x1e6d', idna_status::valid }, { U'\x1e6e', U'\x1e6e', idna_status::mapped }, - { U'\x1e6f', U'\x1e6f', idna_status::valid }, { U'\x1e70', U'\x1e70', idna_status::mapped }, - { U'\x1e71', U'\x1e71', idna_status::valid }, { U'\x1e72', U'\x1e72', idna_status::mapped }, - { U'\x1e73', U'\x1e73', idna_status::valid }, { U'\x1e74', U'\x1e74', idna_status::mapped }, - { U'\x1e75', U'\x1e75', idna_status::valid }, { U'\x1e76', U'\x1e76', idna_status::mapped }, - { U'\x1e77', U'\x1e77', idna_status::valid }, { U'\x1e78', U'\x1e78', idna_status::mapped }, - { U'\x1e79', U'\x1e79', idna_status::valid }, { U'\x1e7a', U'\x1e7a', idna_status::mapped }, - { U'\x1e7b', U'\x1e7b', idna_status::valid }, { U'\x1e7c', U'\x1e7c', idna_status::mapped }, - { U'\x1e7d', U'\x1e7d', idna_status::valid }, { U'\x1e7e', U'\x1e7e', idna_status::mapped }, - { U'\x1e7f', U'\x1e7f', idna_status::valid }, { U'\x1e80', U'\x1e80', idna_status::mapped }, - { U'\x1e81', U'\x1e81', idna_status::valid }, { U'\x1e82', U'\x1e82', idna_status::mapped }, - { U'\x1e83', U'\x1e83', idna_status::valid }, { U'\x1e84', U'\x1e84', idna_status::mapped }, - { U'\x1e85', U'\x1e85', idna_status::valid }, { U'\x1e86', U'\x1e86', idna_status::mapped }, - { U'\x1e87', U'\x1e87', idna_status::valid }, { U'\x1e88', U'\x1e88', idna_status::mapped }, - { U'\x1e89', U'\x1e89', idna_status::valid }, { U'\x1e8a', U'\x1e8a', idna_status::mapped }, - { U'\x1e8b', U'\x1e8b', idna_status::valid }, { U'\x1e8c', U'\x1e8c', idna_status::mapped }, - { U'\x1e8d', U'\x1e8d', idna_status::valid }, { U'\x1e8e', U'\x1e8e', idna_status::mapped }, - { U'\x1e8f', U'\x1e8f', idna_status::valid }, { U'\x1e90', U'\x1e90', idna_status::mapped }, - { U'\x1e91', U'\x1e91', idna_status::valid }, { U'\x1e92', U'\x1e92', idna_status::mapped }, - { U'\x1e93', U'\x1e93', idna_status::valid }, { U'\x1e94', U'\x1e94', idna_status::mapped }, - { U'\x1e95', U'\x1e99', idna_status::valid }, { U'\x1e9a', U'\x1e9b', idna_status::mapped }, - { U'\x1e9c', U'\x1e9d', idna_status::valid }, { U'\x1e9e', U'\x1e9e', idna_status::mapped }, - { U'\x1e9f', U'\x1e9f', idna_status::valid }, { U'\x1ea0', U'\x1ea0', idna_status::mapped }, - { U'\x1ea1', U'\x1ea1', idna_status::valid }, { U'\x1ea2', U'\x1ea2', idna_status::mapped }, - { U'\x1ea3', U'\x1ea3', idna_status::valid }, { U'\x1ea4', U'\x1ea4', idna_status::mapped }, - { U'\x1ea5', U'\x1ea5', idna_status::valid }, { U'\x1ea6', U'\x1ea6', idna_status::mapped }, - { U'\x1ea7', U'\x1ea7', idna_status::valid }, { U'\x1ea8', U'\x1ea8', idna_status::mapped }, - { U'\x1ea9', U'\x1ea9', idna_status::valid }, { U'\x1eaa', U'\x1eaa', idna_status::mapped }, - { U'\x1eab', U'\x1eab', idna_status::valid }, { U'\x1eac', U'\x1eac', idna_status::mapped }, - { U'\x1ead', U'\x1ead', idna_status::valid }, { U'\x1eae', U'\x1eae', idna_status::mapped }, - { U'\x1eaf', U'\x1eaf', idna_status::valid }, { U'\x1eb0', U'\x1eb0', idna_status::mapped }, - { U'\x1eb1', U'\x1eb1', idna_status::valid }, { U'\x1eb2', U'\x1eb2', idna_status::mapped }, - { U'\x1eb3', U'\x1eb3', idna_status::valid }, { U'\x1eb4', U'\x1eb4', idna_status::mapped }, - { U'\x1eb5', U'\x1eb5', idna_status::valid }, { U'\x1eb6', U'\x1eb6', idna_status::mapped }, - { U'\x1eb7', U'\x1eb7', idna_status::valid }, { U'\x1eb8', U'\x1eb8', idna_status::mapped }, - { U'\x1eb9', U'\x1eb9', idna_status::valid }, { U'\x1eba', U'\x1eba', idna_status::mapped }, - { U'\x1ebb', U'\x1ebb', idna_status::valid }, { U'\x1ebc', U'\x1ebc', idna_status::mapped }, - { U'\x1ebd', U'\x1ebd', idna_status::valid }, { U'\x1ebe', U'\x1ebe', idna_status::mapped }, - { U'\x1ebf', U'\x1ebf', idna_status::valid }, { U'\x1ec0', U'\x1ec0', idna_status::mapped }, - { U'\x1ec1', U'\x1ec1', idna_status::valid }, { U'\x1ec2', U'\x1ec2', idna_status::mapped }, - { U'\x1ec3', U'\x1ec3', idna_status::valid }, { U'\x1ec4', U'\x1ec4', idna_status::mapped }, - { U'\x1ec5', U'\x1ec5', idna_status::valid }, { U'\x1ec6', U'\x1ec6', idna_status::mapped }, - { U'\x1ec7', U'\x1ec7', idna_status::valid }, { U'\x1ec8', U'\x1ec8', idna_status::mapped }, - { U'\x1ec9', U'\x1ec9', idna_status::valid }, { U'\x1eca', U'\x1eca', idna_status::mapped }, - { U'\x1ecb', U'\x1ecb', idna_status::valid }, { U'\x1ecc', U'\x1ecc', idna_status::mapped }, - { U'\x1ecd', U'\x1ecd', idna_status::valid }, { U'\x1ece', U'\x1ece', idna_status::mapped }, - { U'\x1ecf', U'\x1ecf', idna_status::valid }, { U'\x1ed0', U'\x1ed0', idna_status::mapped }, - { U'\x1ed1', U'\x1ed1', idna_status::valid }, { U'\x1ed2', U'\x1ed2', idna_status::mapped }, - { U'\x1ed3', U'\x1ed3', idna_status::valid }, { U'\x1ed4', U'\x1ed4', idna_status::mapped }, - { U'\x1ed5', U'\x1ed5', idna_status::valid }, { U'\x1ed6', U'\x1ed6', idna_status::mapped }, - { U'\x1ed7', U'\x1ed7', idna_status::valid }, { U'\x1ed8', U'\x1ed8', idna_status::mapped }, - { U'\x1ed9', U'\x1ed9', idna_status::valid }, { U'\x1eda', U'\x1eda', idna_status::mapped }, - { U'\x1edb', U'\x1edb', idna_status::valid }, { U'\x1edc', U'\x1edc', idna_status::mapped }, - { U'\x1edd', U'\x1edd', idna_status::valid }, { U'\x1ede', U'\x1ede', idna_status::mapped }, - { U'\x1edf', U'\x1edf', idna_status::valid }, { U'\x1ee0', U'\x1ee0', idna_status::mapped }, - { U'\x1ee1', U'\x1ee1', idna_status::valid }, { U'\x1ee2', U'\x1ee2', idna_status::mapped }, - { U'\x1ee3', U'\x1ee3', idna_status::valid }, { U'\x1ee4', U'\x1ee4', idna_status::mapped }, - { U'\x1ee5', U'\x1ee5', idna_status::valid }, { U'\x1ee6', U'\x1ee6', idna_status::mapped }, - { U'\x1ee7', U'\x1ee7', idna_status::valid }, { U'\x1ee8', U'\x1ee8', idna_status::mapped }, - { U'\x1ee9', U'\x1ee9', idna_status::valid }, { U'\x1eea', U'\x1eea', idna_status::mapped }, - { U'\x1eeb', U'\x1eeb', idna_status::valid }, { U'\x1eec', U'\x1eec', idna_status::mapped }, - { U'\x1eed', U'\x1eed', idna_status::valid }, { U'\x1eee', U'\x1eee', idna_status::mapped }, - { U'\x1eef', U'\x1eef', idna_status::valid }, { U'\x1ef0', U'\x1ef0', idna_status::mapped }, - { U'\x1ef1', U'\x1ef1', idna_status::valid }, { U'\x1ef2', U'\x1ef2', idna_status::mapped }, - { U'\x1ef3', U'\x1ef3', idna_status::valid }, { U'\x1ef4', U'\x1ef4', idna_status::mapped }, - { U'\x1ef5', U'\x1ef5', idna_status::valid }, { U'\x1ef6', U'\x1ef6', idna_status::mapped }, - { U'\x1ef7', U'\x1ef7', idna_status::valid }, { U'\x1ef8', U'\x1ef8', idna_status::mapped }, - { U'\x1ef9', U'\x1ef9', idna_status::valid }, { U'\x1efa', U'\x1efa', idna_status::mapped }, - { U'\x1efb', U'\x1efb', idna_status::valid }, { U'\x1efc', U'\x1efc', idna_status::mapped }, - { U'\x1efd', U'\x1efd', idna_status::valid }, { U'\x1efe', U'\x1efe', idna_status::mapped }, - { U'\x1eff', U'\x1f07', idna_status::valid }, { U'\x1f08', U'\x1f0f', idna_status::mapped }, - { U'\x1f10', U'\x1f15', idna_status::valid }, { U'\x1f16', U'\x1f17', idna_status::disallowed }, { U'\x1f18', U'\x1f1d', idna_status::mapped }, { U'\x1f1e', U'\x1f1f', idna_status::disallowed }, - { U'\x1f20', U'\x1f27', idna_status::valid }, { U'\x1f28', U'\x1f2f', idna_status::mapped }, - { U'\x1f30', U'\x1f37', idna_status::valid }, { U'\x1f38', U'\x1f3f', idna_status::mapped }, - { U'\x1f40', U'\x1f45', idna_status::valid }, { U'\x1f46', U'\x1f47', idna_status::disallowed }, { U'\x1f48', U'\x1f4d', idna_status::mapped }, { U'\x1f4e', U'\x1f4f', idna_status::disallowed }, - { U'\x1f50', U'\x1f57', idna_status::valid }, { U'\x1f58', U'\x1f58', idna_status::disallowed }, { U'\x1f59', U'\x1f59', idna_status::mapped }, { U'\x1f5a', U'\x1f5a', idna_status::disallowed }, @@ -1392,53 +734,37 @@ constexpr static auto statuses = std::array{{ { U'\x1f5d', U'\x1f5d', idna_status::mapped }, { U'\x1f5e', U'\x1f5e', idna_status::disallowed }, { U'\x1f5f', U'\x1f5f', idna_status::mapped }, - { U'\x1f60', U'\x1f67', idna_status::valid }, { U'\x1f68', U'\x1f6f', idna_status::mapped }, - { U'\x1f70', U'\x1f70', idna_status::valid }, { U'\x1f71', U'\x1f71', idna_status::mapped }, - { U'\x1f72', U'\x1f72', idna_status::valid }, { U'\x1f73', U'\x1f73', idna_status::mapped }, - { U'\x1f74', U'\x1f74', idna_status::valid }, { U'\x1f75', U'\x1f75', idna_status::mapped }, - { U'\x1f76', U'\x1f76', idna_status::valid }, { U'\x1f77', U'\x1f77', idna_status::mapped }, - { U'\x1f78', U'\x1f78', idna_status::valid }, { U'\x1f79', U'\x1f79', idna_status::mapped }, - { U'\x1f7a', U'\x1f7a', idna_status::valid }, { U'\x1f7b', U'\x1f7b', idna_status::mapped }, - { U'\x1f7c', U'\x1f7c', idna_status::valid }, { U'\x1f7d', U'\x1f7d', idna_status::mapped }, { U'\x1f7e', U'\x1f7f', idna_status::disallowed }, { U'\x1f80', U'\x1faf', idna_status::mapped }, - { U'\x1fb0', U'\x1fb1', idna_status::valid }, { U'\x1fb2', U'\x1fb4', idna_status::mapped }, { U'\x1fb5', U'\x1fb5', idna_status::disallowed }, - { U'\x1fb6', U'\x1fb6', idna_status::valid }, { U'\x1fb7', U'\x1fbc', idna_status::mapped }, { U'\x1fbd', U'\x1fbd', idna_status::disallowed_std3_mapped }, { U'\x1fbe', U'\x1fbe', idna_status::mapped }, { U'\x1fbf', U'\x1fc1', idna_status::disallowed_std3_mapped }, { U'\x1fc2', U'\x1fc4', idna_status::mapped }, { U'\x1fc5', U'\x1fc5', idna_status::disallowed }, - { U'\x1fc6', U'\x1fc6', idna_status::valid }, { U'\x1fc7', U'\x1fcc', idna_status::mapped }, { U'\x1fcd', U'\x1fcf', idna_status::disallowed_std3_mapped }, - { U'\x1fd0', U'\x1fd2', idna_status::valid }, { U'\x1fd3', U'\x1fd3', idna_status::mapped }, { U'\x1fd4', U'\x1fd5', idna_status::disallowed }, - { U'\x1fd6', U'\x1fd7', idna_status::valid }, { U'\x1fd8', U'\x1fdb', idna_status::mapped }, { U'\x1fdc', U'\x1fdc', idna_status::disallowed }, { U'\x1fdd', U'\x1fdf', idna_status::disallowed_std3_mapped }, - { U'\x1fe0', U'\x1fe2', idna_status::valid }, { U'\x1fe3', U'\x1fe3', idna_status::mapped }, - { U'\x1fe4', U'\x1fe7', idna_status::valid }, { U'\x1fe8', U'\x1fec', idna_status::mapped }, { U'\x1fed', U'\x1fef', idna_status::disallowed_std3_mapped }, { U'\x1ff0', U'\x1ff1', idna_status::disallowed }, { U'\x1ff2', U'\x1ff4', idna_status::mapped }, { U'\x1ff5', U'\x1ff5', idna_status::disallowed }, - { U'\x1ff6', U'\x1ff6', idna_status::valid }, { U'\x1ff7', U'\x1ffc', idna_status::mapped }, { U'\x1ffd', U'\x1ffe', idna_status::disallowed_std3_mapped }, { U'\x1fff', U'\x1fff', idna_status::disallowed }, @@ -1446,28 +772,17 @@ constexpr static auto statuses = std::array{{ { U'\x200b', U'\x200b', idna_status::ignored }, { U'\x200c', U'\x200d', idna_status::deviation }, { U'\x200e', U'\x200f', idna_status::disallowed }, - { U'\x2010', U'\x2010', idna_status::valid }, { U'\x2011', U'\x2011', idna_status::mapped }, - { U'\x2012', U'\x2016', idna_status::valid }, { U'\x2017', U'\x2017', idna_status::disallowed_std3_mapped }, - { U'\x2018', U'\x2023', idna_status::valid }, { U'\x2024', U'\x2026', idna_status::disallowed }, - { U'\x2027', U'\x2027', idna_status::valid }, { U'\x2028', U'\x202e', idna_status::disallowed }, { U'\x202f', U'\x202f', idna_status::disallowed_std3_mapped }, - { U'\x2030', U'\x2032', idna_status::valid }, { U'\x2033', U'\x2034', idna_status::mapped }, - { U'\x2035', U'\x2035', idna_status::valid }, { U'\x2036', U'\x2037', idna_status::mapped }, - { U'\x2038', U'\x203b', idna_status::valid }, { U'\x203c', U'\x203c', idna_status::disallowed_std3_mapped }, - { U'\x203d', U'\x203d', idna_status::valid }, { U'\x203e', U'\x203e', idna_status::disallowed_std3_mapped }, - { U'\x203f', U'\x2046', idna_status::valid }, { U'\x2047', U'\x2049', idna_status::disallowed_std3_mapped }, - { U'\x204a', U'\x2056', idna_status::valid }, { U'\x2057', U'\x2057', idna_status::mapped }, - { U'\x2058', U'\x205e', idna_status::valid }, { U'\x205f', U'\x205f', idna_status::disallowed_std3_mapped }, { U'\x2060', U'\x2060', idna_status::ignored }, { U'\x2061', U'\x2063', idna_status::disallowed }, @@ -1486,284 +801,157 @@ constexpr static auto statuses = std::array{{ { U'\x208f', U'\x208f', idna_status::disallowed }, { U'\x2090', U'\x209c', idna_status::mapped }, { U'\x209d', U'\x209f', idna_status::disallowed }, - { U'\x20a0', U'\x20a7', idna_status::valid }, { U'\x20a8', U'\x20a8', idna_status::mapped }, - { U'\x20a9', U'\x20bf', idna_status::valid }, { U'\x20c0', U'\x20cf', idna_status::disallowed }, - { U'\x20d0', U'\x20f0', idna_status::valid }, { U'\x20f1', U'\x20ff', idna_status::disallowed }, { U'\x2100', U'\x2101', idna_status::disallowed_std3_mapped }, { U'\x2102', U'\x2103', idna_status::mapped }, - { U'\x2104', U'\x2104', idna_status::valid }, { U'\x2105', U'\x2106', idna_status::disallowed_std3_mapped }, { U'\x2107', U'\x2107', idna_status::mapped }, - { U'\x2108', U'\x2108', idna_status::valid }, { U'\x2109', U'\x2113', idna_status::mapped }, - { U'\x2114', U'\x2114', idna_status::valid }, { U'\x2115', U'\x2116', idna_status::mapped }, - { U'\x2117', U'\x2118', idna_status::valid }, { U'\x2119', U'\x211d', idna_status::mapped }, - { U'\x211e', U'\x211f', idna_status::valid }, { U'\x2120', U'\x2122', idna_status::mapped }, - { U'\x2123', U'\x2123', idna_status::valid }, { U'\x2124', U'\x2124', idna_status::mapped }, - { U'\x2125', U'\x2125', idna_status::valid }, { U'\x2126', U'\x2126', idna_status::mapped }, - { U'\x2127', U'\x2127', idna_status::valid }, { U'\x2128', U'\x2128', idna_status::mapped }, - { U'\x2129', U'\x2129', idna_status::valid }, { U'\x212a', U'\x212d', idna_status::mapped }, - { U'\x212e', U'\x212e', idna_status::valid }, { U'\x212f', U'\x2131', idna_status::mapped }, { U'\x2132', U'\x2132', idna_status::disallowed }, { U'\x2133', U'\x2139', idna_status::mapped }, - { U'\x213a', U'\x213a', idna_status::valid }, { U'\x213b', U'\x2140', idna_status::mapped }, - { U'\x2141', U'\x2144', idna_status::valid }, { U'\x2145', U'\x2149', idna_status::mapped }, - { U'\x214a', U'\x214f', idna_status::valid }, { U'\x2150', U'\x217f', idna_status::mapped }, - { U'\x2180', U'\x2182', idna_status::valid }, { U'\x2183', U'\x2183', idna_status::disallowed }, - { U'\x2184', U'\x2188', idna_status::valid }, { U'\x2189', U'\x2189', idna_status::mapped }, - { U'\x218a', U'\x218b', idna_status::valid }, { U'\x218c', U'\x218f', idna_status::disallowed }, - { U'\x2190', U'\x222b', idna_status::valid }, { U'\x222c', U'\x222d', idna_status::mapped }, - { U'\x222e', U'\x222e', idna_status::valid }, { U'\x222f', U'\x2230', idna_status::mapped }, - { U'\x2231', U'\x225f', idna_status::valid }, { U'\x2260', U'\x2260', idna_status::disallowed_std3_valid }, - { U'\x2261', U'\x226d', idna_status::valid }, { U'\x226e', U'\x226f', idna_status::disallowed_std3_valid }, - { U'\x2270', U'\x2328', idna_status::valid }, { U'\x2329', U'\x232a', idna_status::mapped }, - { U'\x232b', U'\x2426', idna_status::valid }, { U'\x2427', U'\x243f', idna_status::disallowed }, - { U'\x2440', U'\x244a', idna_status::valid }, { U'\x244b', U'\x245f', idna_status::disallowed }, { U'\x2460', U'\x2473', idna_status::mapped }, { U'\x2474', U'\x2487', idna_status::disallowed_std3_mapped }, { U'\x2488', U'\x249b', idna_status::disallowed }, { U'\x249c', U'\x24b5', idna_status::disallowed_std3_mapped }, { U'\x24b6', U'\x24ea', idna_status::mapped }, - { U'\x24eb', U'\x2a0b', idna_status::valid }, { U'\x2a0c', U'\x2a0c', idna_status::mapped }, - { U'\x2a0d', U'\x2a73', idna_status::valid }, { U'\x2a74', U'\x2a76', idna_status::disallowed_std3_mapped }, - { U'\x2a77', U'\x2adb', idna_status::valid }, { U'\x2adc', U'\x2adc', idna_status::mapped }, - { U'\x2add', U'\x2b73', idna_status::valid }, { U'\x2b74', U'\x2b75', idna_status::disallowed }, - { U'\x2b76', U'\x2b95', idna_status::valid }, { U'\x2b96', U'\x2b97', idna_status::disallowed }, - { U'\x2b98', U'\x2bff', idna_status::valid }, { U'\x2c00', U'\x2c2e', idna_status::mapped }, { U'\x2c2f', U'\x2c2f', idna_status::disallowed }, - { U'\x2c30', U'\x2c5e', idna_status::valid }, { U'\x2c5f', U'\x2c5f', idna_status::disallowed }, { U'\x2c60', U'\x2c60', idna_status::mapped }, - { U'\x2c61', U'\x2c61', idna_status::valid }, { U'\x2c62', U'\x2c64', idna_status::mapped }, - { U'\x2c65', U'\x2c66', idna_status::valid }, { U'\x2c67', U'\x2c67', idna_status::mapped }, - { U'\x2c68', U'\x2c68', idna_status::valid }, { U'\x2c69', U'\x2c69', idna_status::mapped }, - { U'\x2c6a', U'\x2c6a', idna_status::valid }, { U'\x2c6b', U'\x2c6b', idna_status::mapped }, - { U'\x2c6c', U'\x2c6c', idna_status::valid }, { U'\x2c6d', U'\x2c70', idna_status::mapped }, - { U'\x2c71', U'\x2c71', idna_status::valid }, { U'\x2c72', U'\x2c72', idna_status::mapped }, - { U'\x2c73', U'\x2c74', idna_status::valid }, { U'\x2c75', U'\x2c75', idna_status::mapped }, - { U'\x2c76', U'\x2c7b', idna_status::valid }, { U'\x2c7c', U'\x2c80', idna_status::mapped }, - { U'\x2c81', U'\x2c81', idna_status::valid }, { U'\x2c82', U'\x2c82', idna_status::mapped }, - { U'\x2c83', U'\x2c83', idna_status::valid }, { U'\x2c84', U'\x2c84', idna_status::mapped }, - { U'\x2c85', U'\x2c85', idna_status::valid }, { U'\x2c86', U'\x2c86', idna_status::mapped }, - { U'\x2c87', U'\x2c87', idna_status::valid }, { U'\x2c88', U'\x2c88', idna_status::mapped }, - { U'\x2c89', U'\x2c89', idna_status::valid }, { U'\x2c8a', U'\x2c8a', idna_status::mapped }, - { U'\x2c8b', U'\x2c8b', idna_status::valid }, { U'\x2c8c', U'\x2c8c', idna_status::mapped }, - { U'\x2c8d', U'\x2c8d', idna_status::valid }, { U'\x2c8e', U'\x2c8e', idna_status::mapped }, - { U'\x2c8f', U'\x2c8f', idna_status::valid }, { U'\x2c90', U'\x2c90', idna_status::mapped }, - { U'\x2c91', U'\x2c91', idna_status::valid }, { U'\x2c92', U'\x2c92', idna_status::mapped }, - { U'\x2c93', U'\x2c93', idna_status::valid }, { U'\x2c94', U'\x2c94', idna_status::mapped }, - { U'\x2c95', U'\x2c95', idna_status::valid }, { U'\x2c96', U'\x2c96', idna_status::mapped }, - { U'\x2c97', U'\x2c97', idna_status::valid }, { U'\x2c98', U'\x2c98', idna_status::mapped }, - { U'\x2c99', U'\x2c99', idna_status::valid }, { U'\x2c9a', U'\x2c9a', idna_status::mapped }, - { U'\x2c9b', U'\x2c9b', idna_status::valid }, { U'\x2c9c', U'\x2c9c', idna_status::mapped }, - { U'\x2c9d', U'\x2c9d', idna_status::valid }, { U'\x2c9e', U'\x2c9e', idna_status::mapped }, - { U'\x2c9f', U'\x2c9f', idna_status::valid }, { U'\x2ca0', U'\x2ca0', idna_status::mapped }, - { U'\x2ca1', U'\x2ca1', idna_status::valid }, { U'\x2ca2', U'\x2ca2', idna_status::mapped }, - { U'\x2ca3', U'\x2ca3', idna_status::valid }, { U'\x2ca4', U'\x2ca4', idna_status::mapped }, - { U'\x2ca5', U'\x2ca5', idna_status::valid }, { U'\x2ca6', U'\x2ca6', idna_status::mapped }, - { U'\x2ca7', U'\x2ca7', idna_status::valid }, { U'\x2ca8', U'\x2ca8', idna_status::mapped }, - { U'\x2ca9', U'\x2ca9', idna_status::valid }, { U'\x2caa', U'\x2caa', idna_status::mapped }, - { U'\x2cab', U'\x2cab', idna_status::valid }, { U'\x2cac', U'\x2cac', idna_status::mapped }, - { U'\x2cad', U'\x2cad', idna_status::valid }, { U'\x2cae', U'\x2cae', idna_status::mapped }, - { U'\x2caf', U'\x2caf', idna_status::valid }, { U'\x2cb0', U'\x2cb0', idna_status::mapped }, - { U'\x2cb1', U'\x2cb1', idna_status::valid }, { U'\x2cb2', U'\x2cb2', idna_status::mapped }, - { U'\x2cb3', U'\x2cb3', idna_status::valid }, { U'\x2cb4', U'\x2cb4', idna_status::mapped }, - { U'\x2cb5', U'\x2cb5', idna_status::valid }, { U'\x2cb6', U'\x2cb6', idna_status::mapped }, - { U'\x2cb7', U'\x2cb7', idna_status::valid }, { U'\x2cb8', U'\x2cb8', idna_status::mapped }, - { U'\x2cb9', U'\x2cb9', idna_status::valid }, { U'\x2cba', U'\x2cba', idna_status::mapped }, - { U'\x2cbb', U'\x2cbb', idna_status::valid }, { U'\x2cbc', U'\x2cbc', idna_status::mapped }, - { U'\x2cbd', U'\x2cbd', idna_status::valid }, { U'\x2cbe', U'\x2cbe', idna_status::mapped }, - { U'\x2cbf', U'\x2cbf', idna_status::valid }, { U'\x2cc0', U'\x2cc0', idna_status::mapped }, - { U'\x2cc1', U'\x2cc1', idna_status::valid }, { U'\x2cc2', U'\x2cc2', idna_status::mapped }, - { U'\x2cc3', U'\x2cc3', idna_status::valid }, { U'\x2cc4', U'\x2cc4', idna_status::mapped }, - { U'\x2cc5', U'\x2cc5', idna_status::valid }, { U'\x2cc6', U'\x2cc6', idna_status::mapped }, - { U'\x2cc7', U'\x2cc7', idna_status::valid }, { U'\x2cc8', U'\x2cc8', idna_status::mapped }, - { U'\x2cc9', U'\x2cc9', idna_status::valid }, { U'\x2cca', U'\x2cca', idna_status::mapped }, - { U'\x2ccb', U'\x2ccb', idna_status::valid }, { U'\x2ccc', U'\x2ccc', idna_status::mapped }, - { U'\x2ccd', U'\x2ccd', idna_status::valid }, { U'\x2cce', U'\x2cce', idna_status::mapped }, - { U'\x2ccf', U'\x2ccf', idna_status::valid }, { U'\x2cd0', U'\x2cd0', idna_status::mapped }, - { U'\x2cd1', U'\x2cd1', idna_status::valid }, { U'\x2cd2', U'\x2cd2', idna_status::mapped }, - { U'\x2cd3', U'\x2cd3', idna_status::valid }, { U'\x2cd4', U'\x2cd4', idna_status::mapped }, - { U'\x2cd5', U'\x2cd5', idna_status::valid }, { U'\x2cd6', U'\x2cd6', idna_status::mapped }, - { U'\x2cd7', U'\x2cd7', idna_status::valid }, { U'\x2cd8', U'\x2cd8', idna_status::mapped }, - { U'\x2cd9', U'\x2cd9', idna_status::valid }, { U'\x2cda', U'\x2cda', idna_status::mapped }, - { U'\x2cdb', U'\x2cdb', idna_status::valid }, { U'\x2cdc', U'\x2cdc', idna_status::mapped }, - { U'\x2cdd', U'\x2cdd', idna_status::valid }, { U'\x2cde', U'\x2cde', idna_status::mapped }, - { U'\x2cdf', U'\x2cdf', idna_status::valid }, { U'\x2ce0', U'\x2ce0', idna_status::mapped }, - { U'\x2ce1', U'\x2ce1', idna_status::valid }, { U'\x2ce2', U'\x2ce2', idna_status::mapped }, - { U'\x2ce3', U'\x2cea', idna_status::valid }, { U'\x2ceb', U'\x2ceb', idna_status::mapped }, - { U'\x2cec', U'\x2cec', idna_status::valid }, { U'\x2ced', U'\x2ced', idna_status::mapped }, - { U'\x2cee', U'\x2cf1', idna_status::valid }, { U'\x2cf2', U'\x2cf2', idna_status::mapped }, - { U'\x2cf3', U'\x2cf3', idna_status::valid }, { U'\x2cf4', U'\x2cf8', idna_status::disallowed }, - { U'\x2cf9', U'\x2d25', idna_status::valid }, { U'\x2d26', U'\x2d26', idna_status::disallowed }, - { U'\x2d27', U'\x2d27', idna_status::valid }, { U'\x2d28', U'\x2d2c', idna_status::disallowed }, - { U'\x2d2d', U'\x2d2d', idna_status::valid }, { U'\x2d2e', U'\x2d2f', idna_status::disallowed }, - { U'\x2d30', U'\x2d67', idna_status::valid }, { U'\x2d68', U'\x2d6e', idna_status::disallowed }, { U'\x2d6f', U'\x2d6f', idna_status::mapped }, - { U'\x2d70', U'\x2d70', idna_status::valid }, { U'\x2d71', U'\x2d7e', idna_status::disallowed }, - { U'\x2d7f', U'\x2d96', idna_status::valid }, { U'\x2d97', U'\x2d9f', idna_status::disallowed }, - { U'\x2da0', U'\x2da6', idna_status::valid }, { U'\x2da7', U'\x2da7', idna_status::disallowed }, - { U'\x2da8', U'\x2dae', idna_status::valid }, { U'\x2daf', U'\x2daf', idna_status::disallowed }, - { U'\x2db0', U'\x2db6', idna_status::valid }, { U'\x2db7', U'\x2db7', idna_status::disallowed }, - { U'\x2db8', U'\x2dbe', idna_status::valid }, { U'\x2dbf', U'\x2dbf', idna_status::disallowed }, - { U'\x2dc0', U'\x2dc6', idna_status::valid }, { U'\x2dc7', U'\x2dc7', idna_status::disallowed }, - { U'\x2dc8', U'\x2dce', idna_status::valid }, { U'\x2dcf', U'\x2dcf', idna_status::disallowed }, - { U'\x2dd0', U'\x2dd6', idna_status::valid }, { U'\x2dd7', U'\x2dd7', idna_status::disallowed }, - { U'\x2dd8', U'\x2dde', idna_status::valid }, { U'\x2ddf', U'\x2ddf', idna_status::disallowed }, - { U'\x2de0', U'\x2e4f', idna_status::valid }, { U'\x2e50', U'\x2e7f', idna_status::disallowed }, - { U'\x2e80', U'\x2e99', idna_status::valid }, { U'\x2e9a', U'\x2e9a', idna_status::disallowed }, - { U'\x2e9b', U'\x2e9e', idna_status::valid }, { U'\x2e9f', U'\x2e9f', idna_status::mapped }, - { U'\x2ea0', U'\x2ef2', idna_status::valid }, { U'\x2ef3', U'\x2ef3', idna_status::mapped }, { U'\x2ef4', U'\x2eff', idna_status::disallowed }, { U'\x2f00', U'\x2fd5', idna_status::mapped }, { U'\x2fd6', U'\x2fff', idna_status::disallowed }, { U'\x3000', U'\x3000', idna_status::disallowed_std3_mapped }, - { U'\x3001', U'\x3001', idna_status::valid }, { U'\x3002', U'\x3002', idna_status::mapped }, - { U'\x3003', U'\x3035', idna_status::valid }, { U'\x3036', U'\x3036', idna_status::mapped }, - { U'\x3037', U'\x3037', idna_status::valid }, { U'\x3038', U'\x303a', idna_status::mapped }, - { U'\x303b', U'\x303f', idna_status::valid }, { U'\x3040', U'\x3040', idna_status::disallowed }, - { U'\x3041', U'\x3096', idna_status::valid }, { U'\x3097', U'\x3098', idna_status::disallowed }, - { U'\x3099', U'\x309a', idna_status::valid }, { U'\x309b', U'\x309c', idna_status::disallowed_std3_mapped }, - { U'\x309d', U'\x309e', idna_status::valid }, { U'\x309f', U'\x309f', idna_status::mapped }, - { U'\x30a0', U'\x30fe', idna_status::valid }, { U'\x30ff', U'\x30ff', idna_status::mapped }, { U'\x3100', U'\x3104', idna_status::disallowed }, - { U'\x3105', U'\x312f', idna_status::valid }, { U'\x3130', U'\x3130', idna_status::disallowed }, { U'\x3131', U'\x3163', idna_status::mapped }, { U'\x3164', U'\x3164', idna_status::disallowed }, { U'\x3165', U'\x318e', idna_status::mapped }, { U'\x318f', U'\x318f', idna_status::disallowed }, - { U'\x3190', U'\x3191', idna_status::valid }, { U'\x3192', U'\x319f', idna_status::mapped }, - { U'\x31a0', U'\x31ba', idna_status::valid }, { U'\x31bb', U'\x31bf', idna_status::disallowed }, - { U'\x31c0', U'\x31e3', idna_status::valid }, { U'\x31e4', U'\x31ef', idna_status::disallowed }, - { U'\x31f0', U'\x31ff', idna_status::valid }, { U'\x3200', U'\x321e', idna_status::disallowed_std3_mapped }, { U'\x321f', U'\x321f', idna_status::disallowed }, { U'\x3220', U'\x3243', idna_status::disallowed_std3_mapped }, { U'\x3244', U'\x3247', idna_status::mapped }, - { U'\x3248', U'\x324f', idna_status::valid }, { U'\x3250', U'\x327e', idna_status::mapped }, - { U'\x327f', U'\x327f', idna_status::valid }, { U'\x3280', U'\x33c1', idna_status::mapped }, { U'\x33c2', U'\x33c2', idna_status::disallowed }, { U'\x33c3', U'\x33c6', idna_status::mapped }, @@ -1771,304 +959,157 @@ constexpr static auto statuses = std::array{{ { U'\x33c8', U'\x33d7', idna_status::mapped }, { U'\x33d8', U'\x33d8', idna_status::disallowed }, { U'\x33d9', U'\x33ff', idna_status::mapped }, - { U'\x3400', U'\x4db5', idna_status::valid }, { U'\x4db6', U'\x4dbf', idna_status::disallowed }, - { U'\x4dc0', U'\x9fef', idna_status::valid }, { U'\x9ff0', U'\x9fff', idna_status::disallowed }, - { U'\xa000', U'\xa48c', idna_status::valid }, { U'\xa48d', U'\xa48f', idna_status::disallowed }, - { U'\xa490', U'\xa4c6', idna_status::valid }, { U'\xa4c7', U'\xa4cf', idna_status::disallowed }, - { U'\xa4d0', U'\xa62b', idna_status::valid }, { U'\xa62c', U'\xa63f', idna_status::disallowed }, { U'\xa640', U'\xa640', idna_status::mapped }, - { U'\xa641', U'\xa641', idna_status::valid }, { U'\xa642', U'\xa642', idna_status::mapped }, - { U'\xa643', U'\xa643', idna_status::valid }, { U'\xa644', U'\xa644', idna_status::mapped }, - { U'\xa645', U'\xa645', idna_status::valid }, { U'\xa646', U'\xa646', idna_status::mapped }, - { U'\xa647', U'\xa647', idna_status::valid }, { U'\xa648', U'\xa648', idna_status::mapped }, - { U'\xa649', U'\xa649', idna_status::valid }, { U'\xa64a', U'\xa64a', idna_status::mapped }, - { U'\xa64b', U'\xa64b', idna_status::valid }, { U'\xa64c', U'\xa64c', idna_status::mapped }, - { U'\xa64d', U'\xa64d', idna_status::valid }, { U'\xa64e', U'\xa64e', idna_status::mapped }, - { U'\xa64f', U'\xa64f', idna_status::valid }, { U'\xa650', U'\xa650', idna_status::mapped }, - { U'\xa651', U'\xa651', idna_status::valid }, { U'\xa652', U'\xa652', idna_status::mapped }, - { U'\xa653', U'\xa653', idna_status::valid }, { U'\xa654', U'\xa654', idna_status::mapped }, - { U'\xa655', U'\xa655', idna_status::valid }, { U'\xa656', U'\xa656', idna_status::mapped }, - { U'\xa657', U'\xa657', idna_status::valid }, { U'\xa658', U'\xa658', idna_status::mapped }, - { U'\xa659', U'\xa659', idna_status::valid }, { U'\xa65a', U'\xa65a', idna_status::mapped }, - { U'\xa65b', U'\xa65b', idna_status::valid }, { U'\xa65c', U'\xa65c', idna_status::mapped }, - { U'\xa65d', U'\xa65d', idna_status::valid }, { U'\xa65e', U'\xa65e', idna_status::mapped }, - { U'\xa65f', U'\xa65f', idna_status::valid }, { U'\xa660', U'\xa660', idna_status::mapped }, - { U'\xa661', U'\xa661', idna_status::valid }, { U'\xa662', U'\xa662', idna_status::mapped }, - { U'\xa663', U'\xa663', idna_status::valid }, { U'\xa664', U'\xa664', idna_status::mapped }, - { U'\xa665', U'\xa665', idna_status::valid }, { U'\xa666', U'\xa666', idna_status::mapped }, - { U'\xa667', U'\xa667', idna_status::valid }, { U'\xa668', U'\xa668', idna_status::mapped }, - { U'\xa669', U'\xa669', idna_status::valid }, { U'\xa66a', U'\xa66a', idna_status::mapped }, - { U'\xa66b', U'\xa66b', idna_status::valid }, { U'\xa66c', U'\xa66c', idna_status::mapped }, - { U'\xa66d', U'\xa67f', idna_status::valid }, { U'\xa680', U'\xa680', idna_status::mapped }, - { U'\xa681', U'\xa681', idna_status::valid }, { U'\xa682', U'\xa682', idna_status::mapped }, - { U'\xa683', U'\xa683', idna_status::valid }, { U'\xa684', U'\xa684', idna_status::mapped }, - { U'\xa685', U'\xa685', idna_status::valid }, { U'\xa686', U'\xa686', idna_status::mapped }, - { U'\xa687', U'\xa687', idna_status::valid }, { U'\xa688', U'\xa688', idna_status::mapped }, - { U'\xa689', U'\xa689', idna_status::valid }, { U'\xa68a', U'\xa68a', idna_status::mapped }, - { U'\xa68b', U'\xa68b', idna_status::valid }, { U'\xa68c', U'\xa68c', idna_status::mapped }, - { U'\xa68d', U'\xa68d', idna_status::valid }, { U'\xa68e', U'\xa68e', idna_status::mapped }, - { U'\xa68f', U'\xa68f', idna_status::valid }, { U'\xa690', U'\xa690', idna_status::mapped }, - { U'\xa691', U'\xa691', idna_status::valid }, { U'\xa692', U'\xa692', idna_status::mapped }, - { U'\xa693', U'\xa693', idna_status::valid }, { U'\xa694', U'\xa694', idna_status::mapped }, - { U'\xa695', U'\xa695', idna_status::valid }, { U'\xa696', U'\xa696', idna_status::mapped }, - { U'\xa697', U'\xa697', idna_status::valid }, { U'\xa698', U'\xa698', idna_status::mapped }, - { U'\xa699', U'\xa699', idna_status::valid }, { U'\xa69a', U'\xa69a', idna_status::mapped }, - { U'\xa69b', U'\xa69b', idna_status::valid }, { U'\xa69c', U'\xa69d', idna_status::mapped }, - { U'\xa69e', U'\xa6f7', idna_status::valid }, { U'\xa6f8', U'\xa6ff', idna_status::disallowed }, - { U'\xa700', U'\xa721', idna_status::valid }, { U'\xa722', U'\xa722', idna_status::mapped }, - { U'\xa723', U'\xa723', idna_status::valid }, { U'\xa724', U'\xa724', idna_status::mapped }, - { U'\xa725', U'\xa725', idna_status::valid }, { U'\xa726', U'\xa726', idna_status::mapped }, - { U'\xa727', U'\xa727', idna_status::valid }, { U'\xa728', U'\xa728', idna_status::mapped }, - { U'\xa729', U'\xa729', idna_status::valid }, { U'\xa72a', U'\xa72a', idna_status::mapped }, - { U'\xa72b', U'\xa72b', idna_status::valid }, { U'\xa72c', U'\xa72c', idna_status::mapped }, - { U'\xa72d', U'\xa72d', idna_status::valid }, { U'\xa72e', U'\xa72e', idna_status::mapped }, - { U'\xa72f', U'\xa731', idna_status::valid }, { U'\xa732', U'\xa732', idna_status::mapped }, - { U'\xa733', U'\xa733', idna_status::valid }, { U'\xa734', U'\xa734', idna_status::mapped }, - { U'\xa735', U'\xa735', idna_status::valid }, { U'\xa736', U'\xa736', idna_status::mapped }, - { U'\xa737', U'\xa737', idna_status::valid }, { U'\xa738', U'\xa738', idna_status::mapped }, - { U'\xa739', U'\xa739', idna_status::valid }, { U'\xa73a', U'\xa73a', idna_status::mapped }, - { U'\xa73b', U'\xa73b', idna_status::valid }, { U'\xa73c', U'\xa73c', idna_status::mapped }, - { U'\xa73d', U'\xa73d', idna_status::valid }, { U'\xa73e', U'\xa73e', idna_status::mapped }, - { U'\xa73f', U'\xa73f', idna_status::valid }, { U'\xa740', U'\xa740', idna_status::mapped }, - { U'\xa741', U'\xa741', idna_status::valid }, { U'\xa742', U'\xa742', idna_status::mapped }, - { U'\xa743', U'\xa743', idna_status::valid }, { U'\xa744', U'\xa744', idna_status::mapped }, - { U'\xa745', U'\xa745', idna_status::valid }, { U'\xa746', U'\xa746', idna_status::mapped }, - { U'\xa747', U'\xa747', idna_status::valid }, { U'\xa748', U'\xa748', idna_status::mapped }, - { U'\xa749', U'\xa749', idna_status::valid }, { U'\xa74a', U'\xa74a', idna_status::mapped }, - { U'\xa74b', U'\xa74b', idna_status::valid }, { U'\xa74c', U'\xa74c', idna_status::mapped }, - { U'\xa74d', U'\xa74d', idna_status::valid }, { U'\xa74e', U'\xa74e', idna_status::mapped }, - { U'\xa74f', U'\xa74f', idna_status::valid }, { U'\xa750', U'\xa750', idna_status::mapped }, - { U'\xa751', U'\xa751', idna_status::valid }, { U'\xa752', U'\xa752', idna_status::mapped }, - { U'\xa753', U'\xa753', idna_status::valid }, { U'\xa754', U'\xa754', idna_status::mapped }, - { U'\xa755', U'\xa755', idna_status::valid }, { U'\xa756', U'\xa756', idna_status::mapped }, - { U'\xa757', U'\xa757', idna_status::valid }, { U'\xa758', U'\xa758', idna_status::mapped }, - { U'\xa759', U'\xa759', idna_status::valid }, { U'\xa75a', U'\xa75a', idna_status::mapped }, - { U'\xa75b', U'\xa75b', idna_status::valid }, { U'\xa75c', U'\xa75c', idna_status::mapped }, - { U'\xa75d', U'\xa75d', idna_status::valid }, { U'\xa75e', U'\xa75e', idna_status::mapped }, - { U'\xa75f', U'\xa75f', idna_status::valid }, { U'\xa760', U'\xa760', idna_status::mapped }, - { U'\xa761', U'\xa761', idna_status::valid }, { U'\xa762', U'\xa762', idna_status::mapped }, - { U'\xa763', U'\xa763', idna_status::valid }, { U'\xa764', U'\xa764', idna_status::mapped }, - { U'\xa765', U'\xa765', idna_status::valid }, { U'\xa766', U'\xa766', idna_status::mapped }, - { U'\xa767', U'\xa767', idna_status::valid }, { U'\xa768', U'\xa768', idna_status::mapped }, - { U'\xa769', U'\xa769', idna_status::valid }, { U'\xa76a', U'\xa76a', idna_status::mapped }, - { U'\xa76b', U'\xa76b', idna_status::valid }, { U'\xa76c', U'\xa76c', idna_status::mapped }, - { U'\xa76d', U'\xa76d', idna_status::valid }, { U'\xa76e', U'\xa76e', idna_status::mapped }, - { U'\xa76f', U'\xa76f', idna_status::valid }, { U'\xa770', U'\xa770', idna_status::mapped }, - { U'\xa771', U'\xa778', idna_status::valid }, { U'\xa779', U'\xa779', idna_status::mapped }, - { U'\xa77a', U'\xa77a', idna_status::valid }, { U'\xa77b', U'\xa77b', idna_status::mapped }, - { U'\xa77c', U'\xa77c', idna_status::valid }, { U'\xa77d', U'\xa77e', idna_status::mapped }, - { U'\xa77f', U'\xa77f', idna_status::valid }, { U'\xa780', U'\xa780', idna_status::mapped }, - { U'\xa781', U'\xa781', idna_status::valid }, { U'\xa782', U'\xa782', idna_status::mapped }, - { U'\xa783', U'\xa783', idna_status::valid }, { U'\xa784', U'\xa784', idna_status::mapped }, - { U'\xa785', U'\xa785', idna_status::valid }, { U'\xa786', U'\xa786', idna_status::mapped }, - { U'\xa787', U'\xa78a', idna_status::valid }, { U'\xa78b', U'\xa78b', idna_status::mapped }, - { U'\xa78c', U'\xa78c', idna_status::valid }, { U'\xa78d', U'\xa78d', idna_status::mapped }, - { U'\xa78e', U'\xa78f', idna_status::valid }, { U'\xa790', U'\xa790', idna_status::mapped }, - { U'\xa791', U'\xa791', idna_status::valid }, { U'\xa792', U'\xa792', idna_status::mapped }, - { U'\xa793', U'\xa795', idna_status::valid }, { U'\xa796', U'\xa796', idna_status::mapped }, - { U'\xa797', U'\xa797', idna_status::valid }, { U'\xa798', U'\xa798', idna_status::mapped }, - { U'\xa799', U'\xa799', idna_status::valid }, { U'\xa79a', U'\xa79a', idna_status::mapped }, - { U'\xa79b', U'\xa79b', idna_status::valid }, { U'\xa79c', U'\xa79c', idna_status::mapped }, - { U'\xa79d', U'\xa79d', idna_status::valid }, { U'\xa79e', U'\xa79e', idna_status::mapped }, - { U'\xa79f', U'\xa79f', idna_status::valid }, { U'\xa7a0', U'\xa7a0', idna_status::mapped }, - { U'\xa7a1', U'\xa7a1', idna_status::valid }, { U'\xa7a2', U'\xa7a2', idna_status::mapped }, - { U'\xa7a3', U'\xa7a3', idna_status::valid }, { U'\xa7a4', U'\xa7a4', idna_status::mapped }, - { U'\xa7a5', U'\xa7a5', idna_status::valid }, { U'\xa7a6', U'\xa7a6', idna_status::mapped }, - { U'\xa7a7', U'\xa7a7', idna_status::valid }, { U'\xa7a8', U'\xa7a8', idna_status::mapped }, - { U'\xa7a9', U'\xa7a9', idna_status::valid }, { U'\xa7aa', U'\xa7ae', idna_status::mapped }, - { U'\xa7af', U'\xa7af', idna_status::valid }, { U'\xa7b0', U'\xa7b4', idna_status::mapped }, - { U'\xa7b5', U'\xa7b5', idna_status::valid }, { U'\xa7b6', U'\xa7b6', idna_status::mapped }, - { U'\xa7b7', U'\xa7b7', idna_status::valid }, { U'\xa7b8', U'\xa7b8', idna_status::mapped }, - { U'\xa7b9', U'\xa7b9', idna_status::valid }, { U'\xa7ba', U'\xa7ba', idna_status::mapped }, - { U'\xa7bb', U'\xa7bb', idna_status::valid }, { U'\xa7bc', U'\xa7bc', idna_status::mapped }, - { U'\xa7bd', U'\xa7bd', idna_status::valid }, { U'\xa7be', U'\xa7be', idna_status::mapped }, - { U'\xa7bf', U'\xa7bf', idna_status::valid }, { U'\xa7c0', U'\xa7c1', idna_status::disallowed }, { U'\xa7c2', U'\xa7c2', idna_status::mapped }, - { U'\xa7c3', U'\xa7c3', idna_status::valid }, { U'\xa7c4', U'\xa7c6', idna_status::mapped }, { U'\xa7c7', U'\xa7f6', idna_status::disallowed }, - { U'\xa7f7', U'\xa7f7', idna_status::valid }, { U'\xa7f8', U'\xa7f9', idna_status::mapped }, - { U'\xa7fa', U'\xa82b', idna_status::valid }, { U'\xa82c', U'\xa82f', idna_status::disallowed }, - { U'\xa830', U'\xa839', idna_status::valid }, { U'\xa83a', U'\xa83f', idna_status::disallowed }, - { U'\xa840', U'\xa877', idna_status::valid }, { U'\xa878', U'\xa87f', idna_status::disallowed }, - { U'\xa880', U'\xa8c5', idna_status::valid }, { U'\xa8c6', U'\xa8cd', idna_status::disallowed }, - { U'\xa8ce', U'\xa8d9', idna_status::valid }, { U'\xa8da', U'\xa8df', idna_status::disallowed }, - { U'\xa8e0', U'\xa953', idna_status::valid }, { U'\xa954', U'\xa95e', idna_status::disallowed }, - { U'\xa95f', U'\xa97c', idna_status::valid }, { U'\xa97d', U'\xa97f', idna_status::disallowed }, - { U'\xa980', U'\xa9cd', idna_status::valid }, { U'\xa9ce', U'\xa9ce', idna_status::disallowed }, - { U'\xa9cf', U'\xa9d9', idna_status::valid }, { U'\xa9da', U'\xa9dd', idna_status::disallowed }, - { U'\xa9de', U'\xa9fe', idna_status::valid }, { U'\xa9ff', U'\xa9ff', idna_status::disallowed }, - { U'\xaa00', U'\xaa36', idna_status::valid }, { U'\xaa37', U'\xaa3f', idna_status::disallowed }, - { U'\xaa40', U'\xaa4d', idna_status::valid }, { U'\xaa4e', U'\xaa4f', idna_status::disallowed }, - { U'\xaa50', U'\xaa59', idna_status::valid }, { U'\xaa5a', U'\xaa5b', idna_status::disallowed }, - { U'\xaa5c', U'\xaac2', idna_status::valid }, { U'\xaac3', U'\xaada', idna_status::disallowed }, - { U'\xaadb', U'\xaaf6', idna_status::valid }, { U'\xaaf7', U'\xab00', idna_status::disallowed }, - { U'\xab01', U'\xab06', idna_status::valid }, { U'\xab07', U'\xab08', idna_status::disallowed }, - { U'\xab09', U'\xab0e', idna_status::valid }, { U'\xab0f', U'\xab10', idna_status::disallowed }, - { U'\xab11', U'\xab16', idna_status::valid }, { U'\xab17', U'\xab1f', idna_status::disallowed }, - { U'\xab20', U'\xab26', idna_status::valid }, { U'\xab27', U'\xab27', idna_status::disallowed }, - { U'\xab28', U'\xab2e', idna_status::valid }, { U'\xab2f', U'\xab2f', idna_status::disallowed }, - { U'\xab30', U'\xab5b', idna_status::valid }, { U'\xab5c', U'\xab5f', idna_status::mapped }, - { U'\xab60', U'\xab67', idna_status::valid }, { U'\xab68', U'\xab6f', idna_status::disallowed }, { U'\xab70', U'\xabbf', idna_status::mapped }, - { U'\xabc0', U'\xabed', idna_status::valid }, { U'\xabee', U'\xabef', idna_status::disallowed }, - { U'\xabf0', U'\xabf9', idna_status::valid }, { U'\xabfa', U'\xabff', idna_status::disallowed }, - { U'\xac00', U'\xd7a3', idna_status::valid }, { U'\xd7a4', U'\xd7af', idna_status::disallowed }, - { U'\xd7b0', U'\xd7c6', idna_status::valid }, { U'\xd7c7', U'\xd7ca', idna_status::disallowed }, - { U'\xd7cb', U'\xd7fb', idna_status::valid }, { U'\xd7fc', U'\xf8ff', idna_status::disallowed }, { U'\xf900', U'\xfa0d', idna_status::mapped }, - { U'\xfa0e', U'\xfa0f', idna_status::valid }, { U'\xfa10', U'\xfa10', idna_status::mapped }, - { U'\xfa11', U'\xfa11', idna_status::valid }, { U'\xfa12', U'\xfa12', idna_status::mapped }, - { U'\xfa13', U'\xfa14', idna_status::valid }, { U'\xfa15', U'\xfa1e', idna_status::mapped }, - { U'\xfa1f', U'\xfa1f', idna_status::valid }, { U'\xfa20', U'\xfa20', idna_status::mapped }, - { U'\xfa21', U'\xfa21', idna_status::valid }, { U'\xfa22', U'\xfa22', idna_status::mapped }, - { U'\xfa23', U'\xfa24', idna_status::valid }, { U'\xfa25', U'\xfa26', idna_status::mapped }, - { U'\xfa27', U'\xfa29', idna_status::valid }, { U'\xfa2a', U'\xfa6d', idna_status::mapped }, { U'\xfa6e', U'\xfa6f', idna_status::disallowed }, { U'\xfa70', U'\xfad9', idna_status::mapped }, @@ -2078,7 +1119,6 @@ constexpr static auto statuses = std::array{{ { U'\xfb13', U'\xfb17', idna_status::mapped }, { U'\xfb18', U'\xfb1c', idna_status::disallowed }, { U'\xfb1d', U'\xfb1d', idna_status::mapped }, - { U'\xfb1e', U'\xfb1e', idna_status::valid }, { U'\xfb1f', U'\xfb28', idna_status::mapped }, { U'\xfb29', U'\xfb29', idna_status::disallowed_std3_mapped }, { U'\xfb2a', U'\xfb36', idna_status::mapped }, @@ -2092,12 +1132,10 @@ constexpr static auto statuses = std::array{{ { U'\xfb43', U'\xfb44', idna_status::mapped }, { U'\xfb45', U'\xfb45', idna_status::disallowed }, { U'\xfb46', U'\xfbb1', idna_status::mapped }, - { U'\xfbb2', U'\xfbc1', idna_status::valid }, { U'\xfbc2', U'\xfbd2', idna_status::disallowed }, { U'\xfbd3', U'\xfc5d', idna_status::mapped }, { U'\xfc5e', U'\xfc63', idna_status::disallowed_std3_mapped }, { U'\xfc64', U'\xfd3d', idna_status::mapped }, - { U'\xfd3e', U'\xfd3f', idna_status::valid }, { U'\xfd40', U'\xfd4f', idna_status::disallowed }, { U'\xfd50', U'\xfd8f', idna_status::mapped }, { U'\xfd90', U'\xfd91', idna_status::disallowed }, @@ -2106,7 +1144,6 @@ constexpr static auto statuses = std::array{{ { U'\xfdf0', U'\xfdf9', idna_status::mapped }, { U'\xfdfa', U'\xfdfb', idna_status::disallowed_std3_mapped }, { U'\xfdfc', U'\xfdfc', idna_status::mapped }, - { U'\xfdfd', U'\xfdfd', idna_status::valid }, { U'\xfdfe', U'\xfdff', idna_status::disallowed }, { U'\xfe00', U'\xfe0f', idna_status::ignored }, { U'\xfe10', U'\xfe10', idna_status::disallowed_std3_mapped }, @@ -2115,12 +1152,10 @@ constexpr static auto statuses = std::array{{ { U'\xfe13', U'\xfe16', idna_status::disallowed_std3_mapped }, { U'\xfe17', U'\xfe18', idna_status::mapped }, { U'\xfe19', U'\xfe1f', idna_status::disallowed }, - { U'\xfe20', U'\xfe2f', idna_status::valid }, { U'\xfe30', U'\xfe30', idna_status::disallowed }, { U'\xfe31', U'\xfe32', idna_status::mapped }, { U'\xfe33', U'\xfe38', idna_status::disallowed_std3_mapped }, { U'\xfe39', U'\xfe44', idna_status::mapped }, - { U'\xfe45', U'\xfe46', idna_status::valid }, { U'\xfe47', U'\xfe50', idna_status::disallowed_std3_mapped }, { U'\xfe51', U'\xfe51', idna_status::mapped }, { U'\xfe52', U'\xfe53', idna_status::disallowed }, @@ -2137,7 +1172,6 @@ constexpr static auto statuses = std::array{{ { U'\xfe70', U'\xfe70', idna_status::disallowed_std3_mapped }, { U'\xfe71', U'\xfe71', idna_status::mapped }, { U'\xfe72', U'\xfe72', idna_status::disallowed_std3_mapped }, - { U'\xfe73', U'\xfe73', idna_status::valid }, { U'\xfe74', U'\xfe74', idna_status::disallowed_std3_mapped }, { U'\xfe75', U'\xfe75', idna_status::disallowed }, { U'\xfe76', U'\xfe76', idna_status::disallowed_std3_mapped }, @@ -2180,405 +1214,209 @@ constexpr static auto statuses = std::array{{ { U'\xffe7', U'\xffe7', idna_status::disallowed }, { U'\xffe8', U'\xffee', idna_status::mapped }, { U'\xffef', U'\xffff', idna_status::disallowed }, - { U'\x10000', U'\x1000b', idna_status::valid }, { U'\x1000c', U'\x1000c', idna_status::disallowed }, - { U'\x1000d', U'\x10026', idna_status::valid }, { U'\x10027', U'\x10027', idna_status::disallowed }, - { U'\x10028', U'\x1003a', idna_status::valid }, { U'\x1003b', U'\x1003b', idna_status::disallowed }, - { U'\x1003c', U'\x1003d', idna_status::valid }, { U'\x1003e', U'\x1003e', idna_status::disallowed }, - { U'\x1003f', U'\x1004d', idna_status::valid }, { U'\x1004e', U'\x1004f', idna_status::disallowed }, - { U'\x10050', U'\x1005d', idna_status::valid }, { U'\x1005e', U'\x1007f', idna_status::disallowed }, - { U'\x10080', U'\x100fa', idna_status::valid }, { U'\x100fb', U'\x100ff', idna_status::disallowed }, - { U'\x10100', U'\x10102', idna_status::valid }, { U'\x10103', U'\x10106', idna_status::disallowed }, - { U'\x10107', U'\x10133', idna_status::valid }, { U'\x10134', U'\x10136', idna_status::disallowed }, - { U'\x10137', U'\x1018e', idna_status::valid }, { U'\x1018f', U'\x1018f', idna_status::disallowed }, - { U'\x10190', U'\x1019b', idna_status::valid }, { U'\x1019c', U'\x1019f', idna_status::disallowed }, - { U'\x101a0', U'\x101a0', idna_status::valid }, { U'\x101a1', U'\x101cf', idna_status::disallowed }, - { U'\x101d0', U'\x101fd', idna_status::valid }, { U'\x101fe', U'\x1027f', idna_status::disallowed }, - { U'\x10280', U'\x1029c', idna_status::valid }, { U'\x1029d', U'\x1029f', idna_status::disallowed }, - { U'\x102a0', U'\x102d0', idna_status::valid }, { U'\x102d1', U'\x102df', idna_status::disallowed }, - { U'\x102e0', U'\x102fb', idna_status::valid }, { U'\x102fc', U'\x102ff', idna_status::disallowed }, - { U'\x10300', U'\x10323', idna_status::valid }, { U'\x10324', U'\x1032c', idna_status::disallowed }, - { U'\x1032d', U'\x1034a', idna_status::valid }, { U'\x1034b', U'\x1034f', idna_status::disallowed }, - { U'\x10350', U'\x1037a', idna_status::valid }, { U'\x1037b', U'\x1037f', idna_status::disallowed }, - { U'\x10380', U'\x1039d', idna_status::valid }, { U'\x1039e', U'\x1039e', idna_status::disallowed }, - { U'\x1039f', U'\x103c3', idna_status::valid }, { U'\x103c4', U'\x103c7', idna_status::disallowed }, - { U'\x103c8', U'\x103d5', idna_status::valid }, { U'\x103d6', U'\x103ff', idna_status::disallowed }, { U'\x10400', U'\x10427', idna_status::mapped }, - { U'\x10428', U'\x1049d', idna_status::valid }, { U'\x1049e', U'\x1049f', idna_status::disallowed }, - { U'\x104a0', U'\x104a9', idna_status::valid }, { U'\x104aa', U'\x104af', idna_status::disallowed }, { U'\x104b0', U'\x104d3', idna_status::mapped }, { U'\x104d4', U'\x104d7', idna_status::disallowed }, - { U'\x104d8', U'\x104fb', idna_status::valid }, { U'\x104fc', U'\x104ff', idna_status::disallowed }, - { U'\x10500', U'\x10527', idna_status::valid }, { U'\x10528', U'\x1052f', idna_status::disallowed }, - { U'\x10530', U'\x10563', idna_status::valid }, { U'\x10564', U'\x1056e', idna_status::disallowed }, - { U'\x1056f', U'\x1056f', idna_status::valid }, { U'\x10570', U'\x105ff', idna_status::disallowed }, - { U'\x10600', U'\x10736', idna_status::valid }, { U'\x10737', U'\x1073f', idna_status::disallowed }, - { U'\x10740', U'\x10755', idna_status::valid }, { U'\x10756', U'\x1075f', idna_status::disallowed }, - { U'\x10760', U'\x10767', idna_status::valid }, { U'\x10768', U'\x107ff', idna_status::disallowed }, - { U'\x10800', U'\x10805', idna_status::valid }, { U'\x10806', U'\x10807', idna_status::disallowed }, - { U'\x10808', U'\x10808', idna_status::valid }, { U'\x10809', U'\x10809', idna_status::disallowed }, - { U'\x1080a', U'\x10835', idna_status::valid }, { U'\x10836', U'\x10836', idna_status::disallowed }, - { U'\x10837', U'\x10838', idna_status::valid }, { U'\x10839', U'\x1083b', idna_status::disallowed }, - { U'\x1083c', U'\x1083c', idna_status::valid }, { U'\x1083d', U'\x1083e', idna_status::disallowed }, - { U'\x1083f', U'\x10855', idna_status::valid }, { U'\x10856', U'\x10856', idna_status::disallowed }, - { U'\x10857', U'\x1089e', idna_status::valid }, { U'\x1089f', U'\x108a6', idna_status::disallowed }, - { U'\x108a7', U'\x108af', idna_status::valid }, { U'\x108b0', U'\x108df', idna_status::disallowed }, - { U'\x108e0', U'\x108f2', idna_status::valid }, { U'\x108f3', U'\x108f3', idna_status::disallowed }, - { U'\x108f4', U'\x108f5', idna_status::valid }, { U'\x108f6', U'\x108fa', idna_status::disallowed }, - { U'\x108fb', U'\x1091b', idna_status::valid }, { U'\x1091c', U'\x1091e', idna_status::disallowed }, - { U'\x1091f', U'\x10939', idna_status::valid }, { U'\x1093a', U'\x1093e', idna_status::disallowed }, - { U'\x1093f', U'\x1093f', idna_status::valid }, { U'\x10940', U'\x1097f', idna_status::disallowed }, - { U'\x10980', U'\x109b7', idna_status::valid }, { U'\x109b8', U'\x109bb', idna_status::disallowed }, - { U'\x109bc', U'\x109cf', idna_status::valid }, { U'\x109d0', U'\x109d1', idna_status::disallowed }, - { U'\x109d2', U'\x10a03', idna_status::valid }, { U'\x10a04', U'\x10a04', idna_status::disallowed }, - { U'\x10a05', U'\x10a06', idna_status::valid }, { U'\x10a07', U'\x10a0b', idna_status::disallowed }, - { U'\x10a0c', U'\x10a13', idna_status::valid }, { U'\x10a14', U'\x10a14', idna_status::disallowed }, - { U'\x10a15', U'\x10a17', idna_status::valid }, { U'\x10a18', U'\x10a18', idna_status::disallowed }, - { U'\x10a19', U'\x10a35', idna_status::valid }, { U'\x10a36', U'\x10a37', idna_status::disallowed }, - { U'\x10a38', U'\x10a3a', idna_status::valid }, { U'\x10a3b', U'\x10a3e', idna_status::disallowed }, - { U'\x10a3f', U'\x10a48', idna_status::valid }, { U'\x10a49', U'\x10a4f', idna_status::disallowed }, - { U'\x10a50', U'\x10a58', idna_status::valid }, { U'\x10a59', U'\x10a5f', idna_status::disallowed }, - { U'\x10a60', U'\x10a9f', idna_status::valid }, { U'\x10aa0', U'\x10abf', idna_status::disallowed }, - { U'\x10ac0', U'\x10ae6', idna_status::valid }, { U'\x10ae7', U'\x10aea', idna_status::disallowed }, - { U'\x10aeb', U'\x10af6', idna_status::valid }, { U'\x10af7', U'\x10aff', idna_status::disallowed }, - { U'\x10b00', U'\x10b35', idna_status::valid }, { U'\x10b36', U'\x10b38', idna_status::disallowed }, - { U'\x10b39', U'\x10b55', idna_status::valid }, { U'\x10b56', U'\x10b57', idna_status::disallowed }, - { U'\x10b58', U'\x10b72', idna_status::valid }, { U'\x10b73', U'\x10b77', idna_status::disallowed }, - { U'\x10b78', U'\x10b91', idna_status::valid }, { U'\x10b92', U'\x10b98', idna_status::disallowed }, - { U'\x10b99', U'\x10b9c', idna_status::valid }, { U'\x10b9d', U'\x10ba8', idna_status::disallowed }, - { U'\x10ba9', U'\x10baf', idna_status::valid }, { U'\x10bb0', U'\x10bff', idna_status::disallowed }, - { U'\x10c00', U'\x10c48', idna_status::valid }, { U'\x10c49', U'\x10c7f', idna_status::disallowed }, { U'\x10c80', U'\x10cb2', idna_status::mapped }, { U'\x10cb3', U'\x10cbf', idna_status::disallowed }, - { U'\x10cc0', U'\x10cf2', idna_status::valid }, { U'\x10cf3', U'\x10cf9', idna_status::disallowed }, - { U'\x10cfa', U'\x10d27', idna_status::valid }, { U'\x10d28', U'\x10d2f', idna_status::disallowed }, - { U'\x10d30', U'\x10d39', idna_status::valid }, { U'\x10d3a', U'\x10e5f', idna_status::disallowed }, - { U'\x10e60', U'\x10e7e', idna_status::valid }, { U'\x10e7f', U'\x10eff', idna_status::disallowed }, - { U'\x10f00', U'\x10f27', idna_status::valid }, { U'\x10f28', U'\x10f2f', idna_status::disallowed }, - { U'\x10f30', U'\x10f59', idna_status::valid }, { U'\x10f5a', U'\x10fdf', idna_status::disallowed }, - { U'\x10fe0', U'\x10ff6', idna_status::valid }, { U'\x10ff7', U'\x10fff', idna_status::disallowed }, - { U'\x11000', U'\x1104d', idna_status::valid }, { U'\x1104e', U'\x11051', idna_status::disallowed }, - { U'\x11052', U'\x1106f', idna_status::valid }, { U'\x11070', U'\x1107e', idna_status::disallowed }, - { U'\x1107f', U'\x110bc', idna_status::valid }, { U'\x110bd', U'\x110bd', idna_status::disallowed }, - { U'\x110be', U'\x110c1', idna_status::valid }, { U'\x110c2', U'\x110cf', idna_status::disallowed }, - { U'\x110d0', U'\x110e8', idna_status::valid }, { U'\x110e9', U'\x110ef', idna_status::disallowed }, - { U'\x110f0', U'\x110f9', idna_status::valid }, { U'\x110fa', U'\x110ff', idna_status::disallowed }, - { U'\x11100', U'\x11134', idna_status::valid }, { U'\x11135', U'\x11135', idna_status::disallowed }, - { U'\x11136', U'\x11146', idna_status::valid }, { U'\x11147', U'\x1114f', idna_status::disallowed }, - { U'\x11150', U'\x11176', idna_status::valid }, { U'\x11177', U'\x1117f', idna_status::disallowed }, - { U'\x11180', U'\x111cd', idna_status::valid }, { U'\x111ce', U'\x111cf', idna_status::disallowed }, - { U'\x111d0', U'\x111df', idna_status::valid }, { U'\x111e0', U'\x111e0', idna_status::disallowed }, - { U'\x111e1', U'\x111f4', idna_status::valid }, { U'\x111f5', U'\x111ff', idna_status::disallowed }, - { U'\x11200', U'\x11211', idna_status::valid }, { U'\x11212', U'\x11212', idna_status::disallowed }, - { U'\x11213', U'\x1123e', idna_status::valid }, { U'\x1123f', U'\x1127f', idna_status::disallowed }, - { U'\x11280', U'\x11286', idna_status::valid }, { U'\x11287', U'\x11287', idna_status::disallowed }, - { U'\x11288', U'\x11288', idna_status::valid }, { U'\x11289', U'\x11289', idna_status::disallowed }, - { U'\x1128a', U'\x1128d', idna_status::valid }, { U'\x1128e', U'\x1128e', idna_status::disallowed }, - { U'\x1128f', U'\x1129d', idna_status::valid }, { U'\x1129e', U'\x1129e', idna_status::disallowed }, - { U'\x1129f', U'\x112a9', idna_status::valid }, { U'\x112aa', U'\x112af', idna_status::disallowed }, - { U'\x112b0', U'\x112ea', idna_status::valid }, { U'\x112eb', U'\x112ef', idna_status::disallowed }, - { U'\x112f0', U'\x112f9', idna_status::valid }, { U'\x112fa', U'\x112ff', idna_status::disallowed }, - { U'\x11300', U'\x11303', idna_status::valid }, { U'\x11304', U'\x11304', idna_status::disallowed }, - { U'\x11305', U'\x1130c', idna_status::valid }, { U'\x1130d', U'\x1130e', idna_status::disallowed }, - { U'\x1130f', U'\x11310', idna_status::valid }, { U'\x11311', U'\x11312', idna_status::disallowed }, - { U'\x11313', U'\x11328', idna_status::valid }, { U'\x11329', U'\x11329', idna_status::disallowed }, - { U'\x1132a', U'\x11330', idna_status::valid }, { U'\x11331', U'\x11331', idna_status::disallowed }, - { U'\x11332', U'\x11333', idna_status::valid }, { U'\x11334', U'\x11334', idna_status::disallowed }, - { U'\x11335', U'\x11339', idna_status::valid }, { U'\x1133a', U'\x1133a', idna_status::disallowed }, - { U'\x1133b', U'\x11344', idna_status::valid }, { U'\x11345', U'\x11346', idna_status::disallowed }, - { U'\x11347', U'\x11348', idna_status::valid }, { U'\x11349', U'\x1134a', idna_status::disallowed }, - { U'\x1134b', U'\x1134d', idna_status::valid }, { U'\x1134e', U'\x1134f', idna_status::disallowed }, - { U'\x11350', U'\x11350', idna_status::valid }, { U'\x11351', U'\x11356', idna_status::disallowed }, - { U'\x11357', U'\x11357', idna_status::valid }, { U'\x11358', U'\x1135c', idna_status::disallowed }, - { U'\x1135d', U'\x11363', idna_status::valid }, { U'\x11364', U'\x11365', idna_status::disallowed }, - { U'\x11366', U'\x1136c', idna_status::valid }, { U'\x1136d', U'\x1136f', idna_status::disallowed }, - { U'\x11370', U'\x11374', idna_status::valid }, { U'\x11375', U'\x113ff', idna_status::disallowed }, - { U'\x11400', U'\x11459', idna_status::valid }, { U'\x1145a', U'\x1145a', idna_status::disallowed }, - { U'\x1145b', U'\x1145b', idna_status::valid }, { U'\x1145c', U'\x1145c', idna_status::disallowed }, - { U'\x1145d', U'\x1145f', idna_status::valid }, { U'\x11460', U'\x1147f', idna_status::disallowed }, - { U'\x11480', U'\x114c7', idna_status::valid }, { U'\x114c8', U'\x114cf', idna_status::disallowed }, - { U'\x114d0', U'\x114d9', idna_status::valid }, { U'\x114da', U'\x1157f', idna_status::disallowed }, - { U'\x11580', U'\x115b5', idna_status::valid }, { U'\x115b6', U'\x115b7', idna_status::disallowed }, - { U'\x115b8', U'\x115dd', idna_status::valid }, { U'\x115de', U'\x115ff', idna_status::disallowed }, - { U'\x11600', U'\x11644', idna_status::valid }, { U'\x11645', U'\x1164f', idna_status::disallowed }, - { U'\x11650', U'\x11659', idna_status::valid }, { U'\x1165a', U'\x1165f', idna_status::disallowed }, - { U'\x11660', U'\x1166c', idna_status::valid }, { U'\x1166d', U'\x1167f', idna_status::disallowed }, - { U'\x11680', U'\x116b8', idna_status::valid }, { U'\x116b9', U'\x116bf', idna_status::disallowed }, - { U'\x116c0', U'\x116c9', idna_status::valid }, { U'\x116ca', U'\x116ff', idna_status::disallowed }, - { U'\x11700', U'\x1171a', idna_status::valid }, { U'\x1171b', U'\x1171c', idna_status::disallowed }, - { U'\x1171d', U'\x1172b', idna_status::valid }, { U'\x1172c', U'\x1172f', idna_status::disallowed }, - { U'\x11730', U'\x1173f', idna_status::valid }, { U'\x11740', U'\x117ff', idna_status::disallowed }, - { U'\x11800', U'\x1183b', idna_status::valid }, { U'\x1183c', U'\x1189f', idna_status::disallowed }, { U'\x118a0', U'\x118bf', idna_status::mapped }, - { U'\x118c0', U'\x118f2', idna_status::valid }, { U'\x118f3', U'\x118fe', idna_status::disallowed }, - { U'\x118ff', U'\x118ff', idna_status::valid }, { U'\x11900', U'\x1199f', idna_status::disallowed }, - { U'\x119a0', U'\x119a7', idna_status::valid }, { U'\x119a8', U'\x119a9', idna_status::disallowed }, - { U'\x119aa', U'\x119d7', idna_status::valid }, { U'\x119d8', U'\x119d9', idna_status::disallowed }, - { U'\x119da', U'\x119e4', idna_status::valid }, { U'\x119e5', U'\x119ff', idna_status::disallowed }, - { U'\x11a00', U'\x11a47', idna_status::valid }, { U'\x11a48', U'\x11a4f', idna_status::disallowed }, - { U'\x11a50', U'\x11aa2', idna_status::valid }, { U'\x11aa3', U'\x11abf', idna_status::disallowed }, - { U'\x11ac0', U'\x11af8', idna_status::valid }, { U'\x11af9', U'\x11bff', idna_status::disallowed }, - { U'\x11c00', U'\x11c08', idna_status::valid }, { U'\x11c09', U'\x11c09', idna_status::disallowed }, - { U'\x11c0a', U'\x11c36', idna_status::valid }, { U'\x11c37', U'\x11c37', idna_status::disallowed }, - { U'\x11c38', U'\x11c45', idna_status::valid }, { U'\x11c46', U'\x11c4f', idna_status::disallowed }, - { U'\x11c50', U'\x11c6c', idna_status::valid }, { U'\x11c6d', U'\x11c6f', idna_status::disallowed }, - { U'\x11c70', U'\x11c8f', idna_status::valid }, { U'\x11c90', U'\x11c91', idna_status::disallowed }, - { U'\x11c92', U'\x11ca7', idna_status::valid }, { U'\x11ca8', U'\x11ca8', idna_status::disallowed }, - { U'\x11ca9', U'\x11cb6', idna_status::valid }, { U'\x11cb7', U'\x11cff', idna_status::disallowed }, - { U'\x11d00', U'\x11d06', idna_status::valid }, { U'\x11d07', U'\x11d07', idna_status::disallowed }, - { U'\x11d08', U'\x11d09', idna_status::valid }, { U'\x11d0a', U'\x11d0a', idna_status::disallowed }, - { U'\x11d0b', U'\x11d36', idna_status::valid }, { U'\x11d37', U'\x11d39', idna_status::disallowed }, - { U'\x11d3a', U'\x11d3a', idna_status::valid }, { U'\x11d3b', U'\x11d3b', idna_status::disallowed }, - { U'\x11d3c', U'\x11d3d', idna_status::valid }, { U'\x11d3e', U'\x11d3e', idna_status::disallowed }, - { U'\x11d3f', U'\x11d47', idna_status::valid }, { U'\x11d48', U'\x11d4f', idna_status::disallowed }, - { U'\x11d50', U'\x11d59', idna_status::valid }, { U'\x11d5a', U'\x11d5f', idna_status::disallowed }, - { U'\x11d60', U'\x11d65', idna_status::valid }, { U'\x11d66', U'\x11d66', idna_status::disallowed }, - { U'\x11d67', U'\x11d68', idna_status::valid }, { U'\x11d69', U'\x11d69', idna_status::disallowed }, - { U'\x11d6a', U'\x11d8e', idna_status::valid }, { U'\x11d8f', U'\x11d8f', idna_status::disallowed }, - { U'\x11d90', U'\x11d91', idna_status::valid }, { U'\x11d92', U'\x11d92', idna_status::disallowed }, - { U'\x11d93', U'\x11d98', idna_status::valid }, { U'\x11d99', U'\x11d9f', idna_status::disallowed }, - { U'\x11da0', U'\x11da9', idna_status::valid }, { U'\x11daa', U'\x11edf', idna_status::disallowed }, - { U'\x11ee0', U'\x11ef8', idna_status::valid }, { U'\x11ef9', U'\x11fbf', idna_status::disallowed }, - { U'\x11fc0', U'\x11ff1', idna_status::valid }, { U'\x11ff2', U'\x11ffe', idna_status::disallowed }, - { U'\x11fff', U'\x12399', idna_status::valid }, { U'\x1239a', U'\x123ff', idna_status::disallowed }, - { U'\x12400', U'\x1246e', idna_status::valid }, { U'\x1246f', U'\x1246f', idna_status::disallowed }, - { U'\x12470', U'\x12474', idna_status::valid }, { U'\x12475', U'\x1247f', idna_status::disallowed }, - { U'\x12480', U'\x12543', idna_status::valid }, { U'\x12544', U'\x12fff', idna_status::disallowed }, - { U'\x13000', U'\x1342e', idna_status::valid }, { U'\x1342f', U'\x143ff', idna_status::disallowed }, - { U'\x14400', U'\x14646', idna_status::valid }, { U'\x14647', U'\x167ff', idna_status::disallowed }, - { U'\x16800', U'\x16a38', idna_status::valid }, { U'\x16a39', U'\x16a3f', idna_status::disallowed }, - { U'\x16a40', U'\x16a5e', idna_status::valid }, { U'\x16a5f', U'\x16a5f', idna_status::disallowed }, - { U'\x16a60', U'\x16a69', idna_status::valid }, { U'\x16a6a', U'\x16a6d', idna_status::disallowed }, - { U'\x16a6e', U'\x16a6f', idna_status::valid }, { U'\x16a70', U'\x16acf', idna_status::disallowed }, - { U'\x16ad0', U'\x16aed', idna_status::valid }, { U'\x16aee', U'\x16aef', idna_status::disallowed }, - { U'\x16af0', U'\x16af5', idna_status::valid }, { U'\x16af6', U'\x16aff', idna_status::disallowed }, - { U'\x16b00', U'\x16b45', idna_status::valid }, { U'\x16b46', U'\x16b4f', idna_status::disallowed }, - { U'\x16b50', U'\x16b59', idna_status::valid }, { U'\x16b5a', U'\x16b5a', idna_status::disallowed }, - { U'\x16b5b', U'\x16b61', idna_status::valid }, { U'\x16b62', U'\x16b62', idna_status::disallowed }, - { U'\x16b63', U'\x16b77', idna_status::valid }, { U'\x16b78', U'\x16b7c', idna_status::disallowed }, - { U'\x16b7d', U'\x16b8f', idna_status::valid }, { U'\x16b90', U'\x16e3f', idna_status::disallowed }, { U'\x16e40', U'\x16e5f', idna_status::mapped }, - { U'\x16e60', U'\x16e9a', idna_status::valid }, { U'\x16e9b', U'\x16eff', idna_status::disallowed }, - { U'\x16f00', U'\x16f4a', idna_status::valid }, { U'\x16f4b', U'\x16f4e', idna_status::disallowed }, - { U'\x16f4f', U'\x16f87', idna_status::valid }, { U'\x16f88', U'\x16f8e', idna_status::disallowed }, - { U'\x16f8f', U'\x16f9f', idna_status::valid }, { U'\x16fa0', U'\x16fdf', idna_status::disallowed }, - { U'\x16fe0', U'\x16fe3', idna_status::valid }, { U'\x16fe4', U'\x16fff', idna_status::disallowed }, - { U'\x17000', U'\x187f7', idna_status::valid }, { U'\x187f8', U'\x187ff', idna_status::disallowed }, - { U'\x18800', U'\x18af2', idna_status::valid }, { U'\x18af3', U'\x1afff', idna_status::disallowed }, - { U'\x1b000', U'\x1b11e', idna_status::valid }, { U'\x1b11f', U'\x1b14f', idna_status::disallowed }, - { U'\x1b150', U'\x1b152', idna_status::valid }, { U'\x1b153', U'\x1b163', idna_status::disallowed }, - { U'\x1b164', U'\x1b167', idna_status::valid }, { U'\x1b168', U'\x1b16f', idna_status::disallowed }, - { U'\x1b170', U'\x1b2fb', idna_status::valid }, { U'\x1b2fc', U'\x1bbff', idna_status::disallowed }, - { U'\x1bc00', U'\x1bc6a', idna_status::valid }, { U'\x1bc6b', U'\x1bc6f', idna_status::disallowed }, - { U'\x1bc70', U'\x1bc7c', idna_status::valid }, { U'\x1bc7d', U'\x1bc7f', idna_status::disallowed }, - { U'\x1bc80', U'\x1bc88', idna_status::valid }, { U'\x1bc89', U'\x1bc8f', idna_status::disallowed }, - { U'\x1bc90', U'\x1bc99', idna_status::valid }, { U'\x1bc9a', U'\x1bc9b', idna_status::disallowed }, - { U'\x1bc9c', U'\x1bc9f', idna_status::valid }, { U'\x1bca0', U'\x1bca3', idna_status::ignored }, { U'\x1bca4', U'\x1cfff', idna_status::disallowed }, - { U'\x1d000', U'\x1d0f5', idna_status::valid }, { U'\x1d0f6', U'\x1d0ff', idna_status::disallowed }, - { U'\x1d100', U'\x1d126', idna_status::valid }, { U'\x1d127', U'\x1d128', idna_status::disallowed }, - { U'\x1d129', U'\x1d15d', idna_status::valid }, { U'\x1d15e', U'\x1d164', idna_status::mapped }, - { U'\x1d165', U'\x1d172', idna_status::valid }, { U'\x1d173', U'\x1d17a', idna_status::disallowed }, - { U'\x1d17b', U'\x1d1ba', idna_status::valid }, { U'\x1d1bb', U'\x1d1c0', idna_status::mapped }, - { U'\x1d1c1', U'\x1d1e8', idna_status::valid }, { U'\x1d1e9', U'\x1d1ff', idna_status::disallowed }, - { U'\x1d200', U'\x1d245', idna_status::valid }, { U'\x1d246', U'\x1d2df', idna_status::disallowed }, - { U'\x1d2e0', U'\x1d2f3', idna_status::valid }, { U'\x1d2f4', U'\x1d2ff', idna_status::disallowed }, - { U'\x1d300', U'\x1d356', idna_status::valid }, { U'\x1d357', U'\x1d35f', idna_status::disallowed }, - { U'\x1d360', U'\x1d378', idna_status::valid }, { U'\x1d379', U'\x1d3ff', idna_status::disallowed }, { U'\x1d400', U'\x1d454', idna_status::mapped }, { U'\x1d455', U'\x1d455', idna_status::disallowed }, @@ -2621,48 +1459,27 @@ constexpr static auto statuses = std::array{{ { U'\x1d6a8', U'\x1d7cb', idna_status::mapped }, { U'\x1d7cc', U'\x1d7cd', idna_status::disallowed }, { U'\x1d7ce', U'\x1d7ff', idna_status::mapped }, - { U'\x1d800', U'\x1da8b', idna_status::valid }, { U'\x1da8c', U'\x1da9a', idna_status::disallowed }, - { U'\x1da9b', U'\x1da9f', idna_status::valid }, { U'\x1daa0', U'\x1daa0', idna_status::disallowed }, - { U'\x1daa1', U'\x1daaf', idna_status::valid }, { U'\x1dab0', U'\x1dfff', idna_status::disallowed }, - { U'\x1e000', U'\x1e006', idna_status::valid }, { U'\x1e007', U'\x1e007', idna_status::disallowed }, - { U'\x1e008', U'\x1e018', idna_status::valid }, { U'\x1e019', U'\x1e01a', idna_status::disallowed }, - { U'\x1e01b', U'\x1e021', idna_status::valid }, { U'\x1e022', U'\x1e022', idna_status::disallowed }, - { U'\x1e023', U'\x1e024', idna_status::valid }, { U'\x1e025', U'\x1e025', idna_status::disallowed }, - { U'\x1e026', U'\x1e02a', idna_status::valid }, { U'\x1e02b', U'\x1e0ff', idna_status::disallowed }, - { U'\x1e100', U'\x1e12c', idna_status::valid }, { U'\x1e12d', U'\x1e12f', idna_status::disallowed }, - { U'\x1e130', U'\x1e13d', idna_status::valid }, { U'\x1e13e', U'\x1e13f', idna_status::disallowed }, - { U'\x1e140', U'\x1e149', idna_status::valid }, { U'\x1e14a', U'\x1e14d', idna_status::disallowed }, - { U'\x1e14e', U'\x1e14f', idna_status::valid }, { U'\x1e150', U'\x1e2bf', idna_status::disallowed }, - { U'\x1e2c0', U'\x1e2f9', idna_status::valid }, { U'\x1e2fa', U'\x1e2fe', idna_status::disallowed }, - { U'\x1e2ff', U'\x1e2ff', idna_status::valid }, { U'\x1e300', U'\x1e7ff', idna_status::disallowed }, - { U'\x1e800', U'\x1e8c4', idna_status::valid }, { U'\x1e8c5', U'\x1e8c6', idna_status::disallowed }, - { U'\x1e8c7', U'\x1e8d6', idna_status::valid }, { U'\x1e8d7', U'\x1e8ff', idna_status::disallowed }, { U'\x1e900', U'\x1e921', idna_status::mapped }, - { U'\x1e922', U'\x1e94b', idna_status::valid }, { U'\x1e94c', U'\x1e94f', idna_status::disallowed }, - { U'\x1e950', U'\x1e959', idna_status::valid }, { U'\x1e95a', U'\x1e95d', idna_status::disallowed }, - { U'\x1e95e', U'\x1e95f', idna_status::valid }, { U'\x1e960', U'\x1ec70', idna_status::disallowed }, - { U'\x1ec71', U'\x1ecb4', idna_status::valid }, { U'\x1ecb5', U'\x1ed00', idna_status::disallowed }, - { U'\x1ed01', U'\x1ed3d', idna_status::valid }, { U'\x1ed3e', U'\x1edff', idna_status::disallowed }, { U'\x1ee00', U'\x1ee03', idna_status::mapped }, { U'\x1ee04', U'\x1ee04', idna_status::disallowed }, @@ -2730,35 +1547,22 @@ constexpr static auto statuses = std::array{{ { U'\x1eeaa', U'\x1eeaa', idna_status::disallowed }, { U'\x1eeab', U'\x1eebb', idna_status::mapped }, { U'\x1eebc', U'\x1eeef', idna_status::disallowed }, - { U'\x1eef0', U'\x1eef1', idna_status::valid }, { U'\x1eef2', U'\x1efff', idna_status::disallowed }, - { U'\x1f000', U'\x1f02b', idna_status::valid }, { U'\x1f02c', U'\x1f02f', idna_status::disallowed }, - { U'\x1f030', U'\x1f093', idna_status::valid }, { U'\x1f094', U'\x1f09f', idna_status::disallowed }, - { U'\x1f0a0', U'\x1f0ae', idna_status::valid }, { U'\x1f0af', U'\x1f0b0', idna_status::disallowed }, - { U'\x1f0b1', U'\x1f0bf', idna_status::valid }, { U'\x1f0c0', U'\x1f0c0', idna_status::disallowed }, - { U'\x1f0c1', U'\x1f0cf', idna_status::valid }, { U'\x1f0d0', U'\x1f0d0', idna_status::disallowed }, - { U'\x1f0d1', U'\x1f0f5', idna_status::valid }, { U'\x1f0f6', U'\x1f100', idna_status::disallowed }, { U'\x1f101', U'\x1f10a', idna_status::disallowed_std3_mapped }, - { U'\x1f10b', U'\x1f10c', idna_status::valid }, { U'\x1f10d', U'\x1f10f', idna_status::disallowed }, { U'\x1f110', U'\x1f129', idna_status::disallowed_std3_mapped }, { U'\x1f12a', U'\x1f12e', idna_status::mapped }, - { U'\x1f12f', U'\x1f12f', idna_status::valid }, { U'\x1f130', U'\x1f14f', idna_status::mapped }, - { U'\x1f150', U'\x1f169', idna_status::valid }, { U'\x1f16a', U'\x1f16c', idna_status::mapped }, { U'\x1f16d', U'\x1f16f', idna_status::disallowed }, - { U'\x1f170', U'\x1f18f', idna_status::valid }, { U'\x1f190', U'\x1f190', idna_status::mapped }, - { U'\x1f191', U'\x1f1ac', idna_status::valid }, { U'\x1f1ad', U'\x1f1e5', idna_status::disallowed }, - { U'\x1f1e6', U'\x1f1ff', idna_status::valid }, { U'\x1f200', U'\x1f202', idna_status::mapped }, { U'\x1f203', U'\x1f20f', idna_status::disallowed }, { U'\x1f210', U'\x1f23b', idna_status::mapped }, @@ -2767,63 +1571,34 @@ constexpr static auto statuses = std::array{{ { U'\x1f249', U'\x1f24f', idna_status::disallowed }, { U'\x1f250', U'\x1f251', idna_status::mapped }, { U'\x1f252', U'\x1f25f', idna_status::disallowed }, - { U'\x1f260', U'\x1f265', idna_status::valid }, { U'\x1f266', U'\x1f2ff', idna_status::disallowed }, - { U'\x1f300', U'\x1f6d5', idna_status::valid }, { U'\x1f6d6', U'\x1f6df', idna_status::disallowed }, - { U'\x1f6e0', U'\x1f6ec', idna_status::valid }, { U'\x1f6ed', U'\x1f6ef', idna_status::disallowed }, - { U'\x1f6f0', U'\x1f6fa', idna_status::valid }, { U'\x1f6fb', U'\x1f6ff', idna_status::disallowed }, - { U'\x1f700', U'\x1f773', idna_status::valid }, { U'\x1f774', U'\x1f77f', idna_status::disallowed }, - { U'\x1f780', U'\x1f7d8', idna_status::valid }, { U'\x1f7d9', U'\x1f7df', idna_status::disallowed }, - { U'\x1f7e0', U'\x1f7eb', idna_status::valid }, { U'\x1f7ec', U'\x1f7ff', idna_status::disallowed }, - { U'\x1f800', U'\x1f80b', idna_status::valid }, { U'\x1f80c', U'\x1f80f', idna_status::disallowed }, - { U'\x1f810', U'\x1f847', idna_status::valid }, { U'\x1f848', U'\x1f84f', idna_status::disallowed }, - { U'\x1f850', U'\x1f859', idna_status::valid }, { U'\x1f85a', U'\x1f85f', idna_status::disallowed }, - { U'\x1f860', U'\x1f887', idna_status::valid }, { U'\x1f888', U'\x1f88f', idna_status::disallowed }, - { U'\x1f890', U'\x1f8ad', idna_status::valid }, { U'\x1f8ae', U'\x1f8ff', idna_status::disallowed }, - { U'\x1f900', U'\x1f90b', idna_status::valid }, { U'\x1f90c', U'\x1f90c', idna_status::disallowed }, - { U'\x1f90d', U'\x1f971', idna_status::valid }, { U'\x1f972', U'\x1f972', idna_status::disallowed }, - { U'\x1f973', U'\x1f976', idna_status::valid }, { U'\x1f977', U'\x1f979', idna_status::disallowed }, - { U'\x1f97a', U'\x1f9a2', idna_status::valid }, { U'\x1f9a3', U'\x1f9a4', idna_status::disallowed }, - { U'\x1f9a5', U'\x1f9aa', idna_status::valid }, { U'\x1f9ab', U'\x1f9ad', idna_status::disallowed }, - { U'\x1f9ae', U'\x1f9ca', idna_status::valid }, { U'\x1f9cb', U'\x1f9cc', idna_status::disallowed }, - { U'\x1f9cd', U'\x1fa53', idna_status::valid }, { U'\x1fa54', U'\x1fa5f', idna_status::disallowed }, - { U'\x1fa60', U'\x1fa6d', idna_status::valid }, { U'\x1fa6e', U'\x1fa6f', idna_status::disallowed }, - { U'\x1fa70', U'\x1fa73', idna_status::valid }, { U'\x1fa74', U'\x1fa77', idna_status::disallowed }, - { U'\x1fa78', U'\x1fa7a', idna_status::valid }, { U'\x1fa7b', U'\x1fa7f', idna_status::disallowed }, - { U'\x1fa80', U'\x1fa82', idna_status::valid }, { U'\x1fa83', U'\x1fa8f', idna_status::disallowed }, - { U'\x1fa90', U'\x1fa95', idna_status::valid }, { U'\x1fa96', U'\x1ffff', idna_status::disallowed }, - { U'\x20000', U'\x2a6d6', idna_status::valid }, { U'\x2a6d7', U'\x2a6ff', idna_status::disallowed }, - { U'\x2a700', U'\x2b734', idna_status::valid }, { U'\x2b735', U'\x2b73f', idna_status::disallowed }, - { U'\x2b740', U'\x2b81d', idna_status::valid }, { U'\x2b81e', U'\x2b81f', idna_status::disallowed }, - { U'\x2b820', U'\x2cea1', idna_status::valid }, { U'\x2cea2', U'\x2ceaf', idna_status::disallowed }, - { U'\x2ceb0', U'\x2ebe0', idna_status::valid }, { U'\x2ebe1', U'\x2f7ff', idna_status::disallowed }, { U'\x2f800', U'\x2f867', idna_status::mapped }, { U'\x2f868', U'\x2f868', idna_status::disallowed }, @@ -2842,24 +1617,23 @@ constexpr static auto statuses = std::array{{ }}; } // namespace -auto map_idna_status(char32_t code_point) -> idna_status { +auto code_point_status(char32_t code_point) -> idna_status { constexpr static auto less = [] (const auto &range, auto code_point) { return range.last < code_point; }; auto first = std::begin(statuses), last = std::end(statuses); auto it = std::lower_bound(first, last, code_point, less); - assert(it != last); - return it->status; + return (it == last) || !((code_point >= (*it).first) && (code_point <= (*it).last)) ? idna_status::valid : it->status; } namespace { -struct mapped_code_point { - char32_t code_point; - char32_t mapped; +struct mapped_16_code_point { + char16_t code_point; + char16_t mapped; }; -constexpr static auto mapped = std::array{{ +constexpr static auto mapped_16 = std::array{{ { U'\x0041', U'\x0061' }, { U'\x0042', U'\x0062' }, { U'\x0043', U'\x0063' }, @@ -5662,7 +4436,6 @@ constexpr static auto mapped = std::array{{ { U'\xfa69', U'\x97ff' }, { U'\xfa6a', U'\x983b' }, { U'\xfa6b', U'\x6075' }, - { U'\xfa6c', U'\x242ee' }, { U'\xfa6d', U'\x8218' }, { U'\xfa70', U'\x4e26' }, { U'\xfa71', U'\x51b5' }, @@ -5759,15 +4532,9 @@ constexpr static auto mapped = std::array{{ { U'\xfacc', U'\x983b' }, { U'\xfacd', U'\x9b12' }, { U'\xface', U'\x9f9c' }, - { U'\xfacf', U'\x2284a' }, - { U'\xfad0', U'\x22844' }, - { U'\xfad1', U'\x233d5' }, { U'\xfad2', U'\x3b9d' }, { U'\xfad3', U'\x4018' }, { U'\xfad4', U'\x4039' }, - { U'\xfad5', U'\x25249' }, - { U'\xfad6', U'\x25cd0' }, - { U'\xfad7', U'\x27ed3' }, { U'\xfad8', U'\x9f43' }, { U'\xfad9', U'\x9f8e' }, { U'\xfb00', U'\x0066' }, @@ -6640,6 +5407,31 @@ constexpr static auto mapped = std::array{{ { U'\xffec', U'\x2193' }, { U'\xffed', U'\x25a0' }, { U'\xffee', U'\x25cb' }, +}}; + +auto map_code_point_16(char16_t code_point) -> char16_t { + constexpr static auto less = [](const auto &lhs, auto rhs) { + return lhs.code_point < rhs; + }; + + auto first = std::begin(mapped_16), last = std::end(mapped_16); + auto it = std::lower_bound(first, last, code_point, less); + return (it != last) ? it->mapped : code_point; +} + +struct mapped_32_code_point { + char32_t code_point; + char32_t mapped; +}; + +constexpr static auto mapped_32 = std::array{{ + { U'\xfa6c', U'\x242ee' }, + { U'\xfacf', U'\x2284a' }, + { U'\xfad0', U'\x22844' }, + { U'\xfad1', U'\x233d5' }, + { U'\xfad5', U'\x25249' }, + { U'\xfad6', U'\x25cd0' }, + { U'\xfad7', U'\x27ed3' }, { U'\x10400', U'\x10428' }, { U'\x10401', U'\x10429' }, { U'\x10402', U'\x1042a' }, @@ -8674,15 +7466,19 @@ constexpr static auto mapped = std::array{{ }}; } // namespace -auto map_idna_code_point(char32_t code_point) -> char32_t { - constexpr static auto less = [](const auto &mapped, auto code_point) { - return mapped.code_point < code_point; +auto map_code_point(char32_t code_point) -> char32_t { + constexpr static auto less = [](const auto &lhs, auto rhs) { + return lhs.code_point < rhs; }; + + if (code_point <= U'\xffff') { + return static_cast(map_code_point_16(static_cast(code_point))); + } - auto first = std::begin(mapped), last = std::end(mapped); + auto first = std::begin(mapped_32), last = std::end(mapped_32); auto it = std::lower_bound(first, last, code_point, less); return (it != last) ? it->mapped : code_point; } -} // namespace domain +} // namespace idna } // namespace v1 -} // namespace skyr \ No newline at end of file +} // namespace skyr diff --git a/src/v1/domain/idna.hpp b/src/v1/domain/idna.hpp index ef847252..d7ea9650 100644 --- a/src/v1/domain/idna.hpp +++ b/src/v1/domain/idna.hpp @@ -8,7 +8,7 @@ namespace skyr { inline namespace v1 { -namespace domain { +namespace idna { /// \enum idna_status /// The status values come from the IDNA mapping table in domain TR46: /// @@ -38,14 +38,14 @@ enum class idna_status { /// /// \param code_point A code point value /// \return The status of the code point -auto map_idna_status(char32_t code_point) -> idna_status; +auto code_point_status(char32_t code_point) -> idna_status; /// /// \param code_point A code point value /// \return The code point or mapped value, depending on the status of the code /// point -auto map_idna_code_point(char32_t code_point) -> char32_t; -} // namespace domain +auto map_code_point(char32_t code_point) -> char32_t; +} // namespace idna } // namespace v1 } // namespace skyr diff --git a/src/v1/url/url.cpp b/src/v1/url/url.cpp index d1ae6a78..53d2b355 100644 --- a/src/v1/url/url.cpp +++ b/src/v1/url/url.cpp @@ -3,11 +3,9 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include #include #include -#include #include #include #include "v1/core/url_parse_impl.hpp" diff --git a/tests/domain/idna_table_tests.cpp b/tests/domain/idna_table_tests.cpp index 078bb9f6..ebe221ed 100644 --- a/tests/domain/idna_table_tests.cpp +++ b/tests/domain/idna_table_tests.cpp @@ -9,16 +9,17 @@ #include "../../src/v1/domain/idna.hpp" TEST_CASE("IDNA character values", "[idna]") { - using param = std::pair; + using param = std::pair; auto code_point = GENERATE( - param{0x0000, skyr::domain::idna_status::disallowed_std3_valid}, - param{0x002d, skyr::domain::idna_status::valid}, - param{0x10fffd, skyr::domain::idna_status::disallowed}, - param{0x10ffff, skyr::domain::idna_status::disallowed}); + param{0x0000, skyr::idna::idna_status::disallowed_std3_valid}, + param{0x002d, skyr::idna::idna_status::valid}, + param{0x10fffd, skyr::idna::idna_status::disallowed}, + param{0x10ffff, skyr::idna::idna_status::disallowed}); SECTION("code_point_set") { - const auto [value, mapped] = code_point; - REQUIRE(mapped == skyr::domain::map_idna_status(value)); + const auto [value, status] = code_point; + INFO("0x" << std::hex << value << ", " << static_cast(status)); + REQUIRE(status == skyr::idna::code_point_status(value)); } } diff --git a/tools/make_idna_table.py b/tools/make_idna_table.py index 376598bf..79ebff75 100644 --- a/tools/make_idna_table.py +++ b/tools/make_idna_table.py @@ -42,6 +42,18 @@ def __init__(self, range, status, mapped): self.status = status self.mapped = int(mapped, 16) if mapped else None + @property + def is_mapped(self): + return self.status in ('mapped', 'disallowed_STD3_mapped') + + @property + def is_valid(self): + return self.status == 'valid' + + @property + def can_be_16_bit(self): + return self.range[0] <= 0xffff and self.mapped is not None and self.mapped <= 0xffff + def squeeze(code_points): code_points_copy = [code_points[0]] @@ -64,9 +76,13 @@ def main(): code_points.append(CodePointRange( code_point[0], code_point[1], code_point[2] if len(code_point) > 2 else None)) - mapped_code_points = [ - entry for entry in code_points if entry.status in ('mapped', 'disallowed_STD3_mapped')] - code_points = squeeze(code_points) + # Store code point mappings as std::char16_t if they can, otherwise store them as std::char32_t + mapped_code_points_16, mapped_code_points_32 = [], [] + for code_point in filter(lambda cp: cp.is_mapped, code_points): + (mapped_code_points_32, mapped_code_points_16)[code_point.can_be_16_bit].append(code_point) + + # Squeeze code points to reduce table size, and remove all valid code points as they will be handled by default + code_points = [code_point for code_point in code_points if not code_point.is_valid] template = jinja2.Template( """// Auto-generated. @@ -82,7 +98,7 @@ def main(): namespace skyr { inline namespace v1 { -namespace domain { +namespace idna { namespace { struct code_point_range { char32_t first; @@ -95,45 +111,70 @@ def main(): {% endfor %}{% raw %}}}{% endraw %}; } // namespace -auto map_idna_status(char32_t code_point) -> idna_status { +auto code_point_status(char32_t code_point) -> idna_status { constexpr static auto less = [] (const auto &range, auto code_point) { return range.last < code_point; }; auto first = std::begin(statuses), last = std::end(statuses); auto it = std::lower_bound(first, last, code_point, less); - assert(it != last); - return it->status; + return (it == last) || !((code_point >= (*it).first) && (code_point <= (*it).last)) ? idna_status::valid : it->status; } namespace { -struct mapped_code_point { +struct mapped_16_code_point { + char16_t code_point; + char16_t mapped; +}; + +constexpr static auto mapped_16 = std::array{% raw %}{{{% endraw %} +{% for code_point in mapped_entries_16 %} { U'\\x{{ '%04x' % code_point.range[0] }}', U'\\x{{ '%04x' % code_point.mapped }}' }, +{% endfor %}{% raw %}}}{% endraw %}; + +auto map_code_point_16(char16_t code_point) -> char16_t { + constexpr static auto less = [](const auto &lhs, auto rhs) { + return lhs.code_point < rhs; + }; + + auto first = std::begin(mapped_16), last = std::end(mapped_16); + auto it = std::lower_bound(first, last, code_point, less); + return (it != last) ? it->mapped : code_point; +} + +struct mapped_32_code_point { char32_t code_point; char32_t mapped; }; -constexpr static auto mapped = std::array{% raw %}{{{% endraw %} -{% for code_point in mapped_entries %}{% if code_point.status in ('mapped', 'disallowed_STD3_mapped') %} { U'\\x{{ '%04x' % code_point.range[0] }}', U'\\x{{ '%04x' % code_point.mapped }}' }, -{% endif %}{% endfor %}{% raw %}}}{% endraw %}; +constexpr static auto mapped_32 = std::array{% raw %}{{{% endraw %} +{% for code_point in mapped_entries_32 %} { U'\\x{{ '%04x' % code_point.range[0] }}', U'\\x{{ '%04x' % code_point.mapped }}' }, +{% endfor %}{% raw %}}}{% endraw %}; } // namespace -auto map_idna_code_point(char32_t code_point) -> char32_t { - constexpr static auto less = [](const auto &mapped, auto code_point) { - return mapped.code_point < code_point; +auto map_code_point(char32_t code_point) -> char32_t { + constexpr static auto less = [](const auto &lhs, auto rhs) { + return lhs.code_point < rhs; }; + + if (code_point <= U'\\xffff') { + return static_cast(map_code_point_16(static_cast(code_point))); + } - auto first = std::begin(mapped), last = std::end(mapped); + auto first = std::begin(mapped_32), last = std::end(mapped_32); auto it = std::lower_bound(first, last, code_point, less); return (it != last) ? it->mapped : code_point; } -} // namespace domain +} // namespace idna } // namespace v1 } // namespace skyr + """) template.stream( entries=code_points, - mapped_entries=mapped_code_points).dump(output_file) + mapped_entries_16=mapped_code_points_16, + mapped_entries_32=mapped_code_points_32 + ).dump(output_file) if __name__ == '__main__':