Collator.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibJS/Runtime/Intl/Collator.h>
  7. namespace JS::Intl {
  8. JS_DEFINE_ALLOCATOR(Collator);
  9. // 10 Collator Objects, https://tc39.es/ecma402/#collator-objects
  10. Collator::Collator(Object& prototype)
  11. : Object(ConstructWithPrototypeTag::Tag, prototype)
  12. {
  13. }
  14. void Collator::set_usage(StringView type)
  15. {
  16. if (type == "sort"sv)
  17. m_usage = Usage::Sort;
  18. else if (type == "search"sv)
  19. m_usage = Usage::Search;
  20. else
  21. VERIFY_NOT_REACHED();
  22. }
  23. StringView Collator::usage_string() const
  24. {
  25. switch (m_usage) {
  26. case Usage::Sort:
  27. return "sort"sv;
  28. case Usage::Search:
  29. return "search"sv;
  30. default:
  31. VERIFY_NOT_REACHED();
  32. }
  33. }
  34. void Collator::set_sensitivity(StringView type)
  35. {
  36. if (type == "base"sv)
  37. m_sensitivity = Sensitivity::Base;
  38. else if (type == "accent"sv)
  39. m_sensitivity = Sensitivity::Accent;
  40. else if (type == "case"sv)
  41. m_sensitivity = Sensitivity::Case;
  42. else if (type == "variant"sv)
  43. m_sensitivity = Sensitivity::Variant;
  44. else
  45. VERIFY_NOT_REACHED();
  46. }
  47. StringView Collator::sensitivity_string() const
  48. {
  49. switch (m_sensitivity) {
  50. case Sensitivity::Base:
  51. return "base"sv;
  52. case Sensitivity::Accent:
  53. return "accent"sv;
  54. case Sensitivity::Case:
  55. return "case"sv;
  56. case Sensitivity::Variant:
  57. return "variant"sv;
  58. default:
  59. VERIFY_NOT_REACHED();
  60. }
  61. }
  62. void Collator::set_case_first(StringView case_first)
  63. {
  64. if (case_first == "upper"sv)
  65. m_case_first = CaseFirst::Upper;
  66. else if (case_first == "lower"sv)
  67. m_case_first = CaseFirst::Lower;
  68. else if (case_first == "false"sv)
  69. m_case_first = CaseFirst::False;
  70. else
  71. VERIFY_NOT_REACHED();
  72. }
  73. StringView Collator::case_first_string() const
  74. {
  75. switch (m_case_first) {
  76. case CaseFirst::Upper:
  77. return "upper"sv;
  78. case CaseFirst::Lower:
  79. return "lower"sv;
  80. case CaseFirst::False:
  81. return "false"sv;
  82. default:
  83. VERIFY_NOT_REACHED();
  84. }
  85. }
  86. void Collator::visit_edges(Visitor& visitor)
  87. {
  88. Base::visit_edges(visitor);
  89. visitor.visit(m_bound_compare);
  90. }
  91. }