Segmenter.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2022, Idan Horowitz <idan.horowitz@serenityos.org>
  3. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/String.h>
  9. #include <LibJS/Runtime/Object.h>
  10. #include <LibUnicode/Segmenter.h>
  11. namespace JS::Intl {
  12. class Segmenter final : public Object {
  13. JS_OBJECT(Segmenter, Object);
  14. GC_DECLARE_ALLOCATOR(Segmenter);
  15. public:
  16. virtual ~Segmenter() override = default;
  17. String const& locale() const { return m_locale; }
  18. void set_locale(String locale) { m_locale = move(locale); }
  19. Unicode::SegmenterGranularity segmenter_granularity() const { return m_segmenter_granularity; }
  20. void set_segmenter_granularity(StringView segmenter_granularity) { m_segmenter_granularity = Unicode::segmenter_granularity_from_string(segmenter_granularity); }
  21. StringView segmenter_granularity_string() const { return Unicode::segmenter_granularity_to_string(m_segmenter_granularity); }
  22. Unicode::Segmenter const& segmenter() const { return *m_segmenter; }
  23. void set_segmenter(NonnullOwnPtr<Unicode::Segmenter> segmenter) { m_segmenter = move(segmenter); }
  24. private:
  25. explicit Segmenter(Object& prototype);
  26. String m_locale; // [[Locale]]
  27. Unicode::SegmenterGranularity m_segmenter_granularity { Unicode::SegmenterGranularity::Grapheme }; // [[SegmenterGranularity]]
  28. // Non-standard. Stores the ICU segmenter for the Intl object's segmentation options.
  29. OwnPtr<Unicode::Segmenter> m_segmenter;
  30. };
  31. ThrowCompletionOr<GC::Ref<Object>> create_segment_data_object(VM&, Unicode::Segmenter const&, Utf16View const&, size_t start_index, size_t end_index);
  32. enum class Direction {
  33. Before,
  34. After,
  35. };
  36. size_t find_boundary(Unicode::Segmenter&, Utf16View const&, size_t start_index, Direction);
  37. }