Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(442)

Side by Side Diff: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h

Issue 2943573002: Make NGInlineItemsBuilder construct whitespace-collapsed offset mapping (Closed)
Patch Set: Wed Jun 28 11:44:29 PDT 2017 Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NGInlineItemsBuilder_h 5 #ifndef NGInlineItemsBuilder_h
6 #define NGInlineItemsBuilder_h 6 #define NGInlineItemsBuilder_h
7 7
8 #include "core/CoreExport.h" 8 #include "core/CoreExport.h"
9 #include "core/layout/ng/inline/empty_offset_mapping_builder.h" 9 #include "core/layout/ng/inline/empty_offset_mapping_builder.h"
10 #include "core/layout/ng/inline/ng_inline_node.h" 10 #include "core/layout/ng/inline/ng_inline_node.h"
11 #include "core/layout/ng/inline/ng_offset_mapping_builder.h"
11 #include "platform/wtf/Allocator.h" 12 #include "platform/wtf/Allocator.h"
12 #include "platform/wtf/Vector.h" 13 #include "platform/wtf/Vector.h"
13 #include "platform/wtf/text/StringBuilder.h" 14 #include "platform/wtf/text/StringBuilder.h"
14 #include "platform/wtf/text/WTFString.h" 15 #include "platform/wtf/text/WTFString.h"
15 16
16 namespace blink { 17 namespace blink {
17 18
18 class ComputedStyle; 19 class ComputedStyle;
19 class LayoutObject; 20 class LayoutObject;
20 class NGInlineItem; 21 class NGInlineItem;
21 22
22 // NGInlineItemsBuilder builds a string and a list of NGInlineItem from inlines. 23 // NGInlineItemsBuilder builds a string and a list of NGInlineItem from inlines.
23 // 24 //
24 // When appending, spaces are collapsed according to CSS Text, The white space 25 // When appending, spaces are collapsed according to CSS Text, The white space
25 // processing rules 26 // processing rules
26 // https://drafts.csswg.org/css-text-3/#white-space-rules 27 // https://drafts.csswg.org/css-text-3/#white-space-rules
27 // 28 //
28 // By calling EnterInline/ExitInline, it inserts bidirectional control 29 // By calling EnterInline/ExitInline, it inserts bidirectional control
29 // characters as defined in: 30 // characters as defined in:
30 // https://drafts.csswg.org/css-writing-modes-3/#bidi-control-codes-injection-ta ble 31 // https://drafts.csswg.org/css-writing-modes-3/#bidi-control-codes-injection-ta ble
31 // TODO(xiaochengh): Utilize the passed-in OffsetMappingBuilder to construct 32 //
32 // the whitespace-collapsed offset mapping. 33 // NGInlineItemsBuilder may optionally take an NGOffsetMappingBuilder template
34 // parameter to construct the white-space collapsed offset mapping, which maps
35 // offsets in the concatenation of all appended strings and characters to
36 // offsets in |text_|.
37 // See https://goo.gl/CJbxky for more details about offset mapping.
33 template <typename OffsetMappingBuilder> 38 template <typename OffsetMappingBuilder>
34 class CORE_TEMPLATE_CLASS_EXPORT NGInlineItemsBuilderTemplate { 39 class CORE_TEMPLATE_CLASS_EXPORT NGInlineItemsBuilderTemplate {
35 STACK_ALLOCATED(); 40 STACK_ALLOCATED();
36 41
37 public: 42 public:
38 explicit NGInlineItemsBuilderTemplate(Vector<NGInlineItem>* items) 43 explicit NGInlineItemsBuilderTemplate(Vector<NGInlineItem>* items)
39 : items_(items) {} 44 : items_(items) {}
40 ~NGInlineItemsBuilderTemplate(); 45 ~NGInlineItemsBuilderTemplate();
41 46
42 String ToString(); 47 String ToString();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 LayoutObject* = nullptr); 85 LayoutObject* = nullptr);
81 86
82 // Append a Bidi control character, for LTR or RTL depends on the style. 87 // Append a Bidi control character, for LTR or RTL depends on the style.
83 void AppendBidiControl(const ComputedStyle*, UChar ltr, UChar rtl); 88 void AppendBidiControl(const ComputedStyle*, UChar ltr, UChar rtl);
84 89
85 void EnterBlock(const ComputedStyle*); 90 void EnterBlock(const ComputedStyle*);
86 void ExitBlock(); 91 void ExitBlock();
87 void EnterInline(LayoutObject*); 92 void EnterInline(LayoutObject*);
88 void ExitInline(LayoutObject*); 93 void ExitInline(LayoutObject*);
89 94
95 OffsetMappingBuilder& GetOffsetMappingBuilder() { return mapping_builder_; }
96
90 private: 97 private:
91 Vector<NGInlineItem>* items_; 98 Vector<NGInlineItem>* items_;
92 StringBuilder text_; 99 StringBuilder text_;
100 OffsetMappingBuilder mapping_builder_;
93 101
94 typedef struct OnExitNode { 102 typedef struct OnExitNode {
95 LayoutObject* node; 103 LayoutObject* node;
96 UChar character; 104 UChar character;
97 } OnExitNode; 105 } OnExitNode;
98 Vector<OnExitNode> exits_; 106 Vector<OnExitNode> exits_;
99 107
100 enum class CollapsibleSpace { kNone, kSpace, kNewline }; 108 enum class CollapsibleSpace { kNone, kSpace, kNewline };
101 109
102 CollapsibleSpace last_collapsible_space_ = CollapsibleSpace::kSpace; 110 CollapsibleSpace last_collapsible_space_ = CollapsibleSpace::kSpace;
(...skipping 19 matching lines...) Expand all
122 void RemoveTrailingCollapsibleNewlineIfNeeded(const String&, 130 void RemoveTrailingCollapsibleNewlineIfNeeded(const String&,
123 unsigned, 131 unsigned,
124 const ComputedStyle*); 132 const ComputedStyle*);
125 133
126 void Enter(LayoutObject*, UChar); 134 void Enter(LayoutObject*, UChar);
127 void Exit(LayoutObject*); 135 void Exit(LayoutObject*);
128 }; 136 };
129 137
130 extern template class CORE_EXTERN_TEMPLATE_EXPORT 138 extern template class CORE_EXTERN_TEMPLATE_EXPORT
131 NGInlineItemsBuilderTemplate<EmptyOffsetMappingBuilder>; 139 NGInlineItemsBuilderTemplate<EmptyOffsetMappingBuilder>;
140 extern template class CORE_EXTERN_TEMPLATE_EXPORT
141 NGInlineItemsBuilderTemplate<NGOffsetMappingBuilder>;
132 142
133 using NGInlineItemsBuilder = 143 using NGInlineItemsBuilder =
134 NGInlineItemsBuilderTemplate<EmptyOffsetMappingBuilder>; 144 NGInlineItemsBuilderTemplate<EmptyOffsetMappingBuilder>;
145 using NGInlineItemsBuilderForOffsetMapping =
146 NGInlineItemsBuilderTemplate<NGOffsetMappingBuilder>;
135 147
136 } // namespace blink 148 } // namespace blink
137 149
138 #endif // NGInlineItemsBuilder_h 150 #endif // NGInlineItemsBuilder_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698