// Copyright 2017 The Chromium Authors // 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_LAYOUT_INLINE_OFFSET_MAPPING_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_INLINE_OFFSET_MAPPING_H_ #include <optional> #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/node.h" #include "third_party/blink/renderer/core/editing/forward.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/vector.h" namespace blink { class LayoutBlockFlow; class LayoutObject; enum class OffsetMappingUnitType { … }; // An OffsetMappingUnit indicates a "simple" offset mapping between dom offset // range [dom_start, dom_end] on node |owner| and text content offset range // [text_content_start, text_content_end]. The mapping between them falls in one // of the following categories, depending on |type|: // - kIdentity: The mapping between the two ranges is the identity mapping. In // other words, the two ranges have the same length, and the offsets are // mapped one-to-one. // - kCollapsed: The mapping is collapsed, namely, |text_content_start| and // |text_content_end| are the same, and characters in the dom range are // collapsed. // - kVariable: The mapping is expanded or shrunk, namely. // -- |dom_end == dom_start + 1|, and // |text_content_end > text_content_start + 1|, indicating that the // character in the dom range is expanded into multiple characters, or // -- |dom_end > dom_start + 1|, and // |text_content_end == text_content_start + 1|, indicating that multiple // characters in the dom range is shrunk into a single character. // See design doc https://goo.gl/CJbxky for details. class CORE_EXPORT OffsetMappingUnit { … }; // Each inline formatting context laid out with LayoutNG has an OffsetMapping // object that stores the mapping information between DOM positions and offsets // in the text content string of the context. // See design doc https://goo.gl/CJbxky for details. class CORE_EXPORT OffsetMapping final : public GarbageCollected<OffsetMapping> { … }; CORE_EXPORT LayoutBlockFlow* NGInlineFormattingContextOf(const Position&); } // namespace blink namespace WTF { template <> struct VectorTraits<blink::OffsetMappingUnit> : VectorTraitsBase<blink::OffsetMappingUnit> { … }; } // namespace WTF #endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_INLINE_OFFSET_MAPPING_H_