IDNA.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * Copyright (c) 2023, Simon Wanner <simon@skyrising.xyz>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/String.h>
  8. #include <AK/Utf32View.h>
  9. #include <AK/Utf8View.h>
  10. namespace Unicode::IDNA {
  11. enum class MappingStatus : u8 {
  12. Valid,
  13. Ignored,
  14. Mapped,
  15. Deviation,
  16. Disallowed,
  17. DisallowedStd3Valid,
  18. DisallowedStd3Mapped,
  19. };
  20. enum class IDNA2008Status : u8 {
  21. NV8,
  22. XV8,
  23. };
  24. struct Mapping {
  25. MappingStatus status;
  26. IDNA2008Status idna_2008_status;
  27. Utf32View mapped_to;
  28. };
  29. enum class CheckHyphens {
  30. No,
  31. Yes,
  32. };
  33. enum class CheckBidi {
  34. No,
  35. Yes,
  36. };
  37. enum class CheckJoiners {
  38. No,
  39. Yes,
  40. };
  41. enum class UseStd3AsciiRules {
  42. No,
  43. Yes,
  44. };
  45. enum class TransitionalProcessing {
  46. No,
  47. Yes,
  48. };
  49. enum class VerifyDnsLength {
  50. No,
  51. Yes,
  52. };
  53. struct ToAsciiOptions {
  54. CheckHyphens check_hyphens { CheckHyphens::Yes };
  55. CheckBidi check_bidi { CheckBidi::Yes };
  56. CheckJoiners check_joiners { CheckJoiners::Yes };
  57. UseStd3AsciiRules use_std3_ascii_rules { UseStd3AsciiRules::No };
  58. TransitionalProcessing transitional_processing { TransitionalProcessing::No };
  59. VerifyDnsLength verify_dns_length { VerifyDnsLength::Yes };
  60. };
  61. ErrorOr<String> to_ascii(Utf8View domain_name, ToAsciiOptions const& = {});
  62. Optional<Mapping> get_idna_mapping(u32 code_point);
  63. }