| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_TEXT_SEGMENTS_H_ |
| #define THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_TEXT_SEGMENTS_H_ |
| |
| #include "base/optional.h" |
| #include "third_party/blink/renderer/core/editing/forward.h" |
| #include "third_party/blink/renderer/platform/wtf/allocator.h" |
| #include "third_party/blink/renderer/platform/wtf/forward.h" |
| |
| namespace blink { |
| |
| // Provides functions for finding boundary of text segments. |
| class TextSegments final { |
| STATIC_ONLY(TextSegments); |
| |
| public: |
| // The interface to find boundary of text segment. |
| class Finder { |
| public: |
| class Position final { |
| STACK_ALLOCATED(); |
| |
| public: |
| Position(); |
| |
| static Position Before(unsigned offset); |
| static Position After(unsigned offset); |
| |
| bool IsAfter() const { return type_ == kAfter; } |
| bool IsBefore() const { return type_ == kBefore; } |
| bool IsNone() const { return type_ == kNone; } |
| |
| unsigned Offset() const; |
| |
| private: |
| enum Type { kNone, kBefore, kAfter }; |
| |
| Position(unsigned value, Type type); |
| |
| const unsigned offset_ = 0; |
| const Type type_ = kNone; |
| }; |
| |
| // Returns a text segment boundary position in |text| from |offset|. |
| // Note: |text| must contains character 16. |
| // Note: Since implementations can have state, |Find()| function isn't |
| // marked |const| intentionally. |
| virtual Position Find(const String text, unsigned offset) = 0; |
| }; |
| |
| // Returns a boundary position found by |finder| followed by |position| |
| // (inclusive). |finder| can be stateful or stateless. |
| static PositionInFlatTree FindBoundaryForward( |
| const PositionInFlatTree& position, |
| Finder* finder); |
| |
| static PositionInFlatTree FindBoundaryBackward( |
| const PositionInFlatTree& position, |
| Finder* finder); |
| }; |
| |
| } // namespace blink |
| |
| #endif // THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_TEXT_SEGMENTS_H_ |