Collator.cpp 2.2 KB

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