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

Unified Diff: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc

Issue 2960673004: Templatize NGInlineItemsBuilder to take a OffsetMappingBuilder parameter (Closed)
Patch Set: Move EmptyOffsetMappingBuilder to ng/inline/ Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
index 8533bd9907a97669386f62a25511a084d274f610..a01621dc912888df7cabb8eea436204bf3b02173 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
@@ -10,12 +10,15 @@
namespace blink {
-NGInlineItemsBuilder::~NGInlineItemsBuilder() {
+template <typename OffsetMappingBuilder>
+NGInlineItemsBuilderTemplate<
+ OffsetMappingBuilder>::~NGInlineItemsBuilderTemplate() {
DCHECK_EQ(0u, exits_.size());
DCHECK_EQ(text_.length(), items_->IsEmpty() ? 0 : items_->back().EndOffset());
}
-String NGInlineItemsBuilder::ToString() {
+template <typename OffsetMappingBuilder>
+String NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::ToString() {
// Segment Break Transformation Rules[1] defines to keep trailing new lines,
// but it will be removed in Phase II[2]. We prefer not to add trailing new
// lines and collapsible spaces in Phase I.
@@ -123,9 +126,11 @@ static inline bool IsControlItemCharacter(UChar c) {
return c == kTabulationCharacter || c == kNewlineCharacter;
}
-void NGInlineItemsBuilder::Append(const String& string,
- const ComputedStyle* style,
- LayoutObject* layout_object) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::Append(
+ const String& string,
+ const ComputedStyle* style,
+ LayoutObject* layout_object) {
if (string.IsEmpty())
return;
text_.ReserveCapacity(string.length());
@@ -140,12 +145,13 @@ void NGInlineItemsBuilder::Append(const String& string,
layout_object);
}
-void NGInlineItemsBuilder::AppendWithWhiteSpaceCollapsing(
- const String& string,
- unsigned start,
- unsigned end,
- const ComputedStyle* style,
- LayoutObject* layout_object) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::
+ AppendWithWhiteSpaceCollapsing(const String& string,
+ unsigned start,
+ unsigned end,
+ const ComputedStyle* style,
+ LayoutObject* layout_object) {
unsigned start_offset = text_.length();
for (unsigned i = start; i < end;) {
UChar c = string[i];
@@ -193,10 +199,11 @@ void NGInlineItemsBuilder::AppendWithWhiteSpaceCollapsing(
// Even when without whitespace collapsing, control characters (newlines and
// tabs) are in their own control items to make the line breaker easier.
-void NGInlineItemsBuilder::AppendWithoutWhiteSpaceCollapsing(
- const String& string,
- const ComputedStyle* style,
- LayoutObject* layout_object) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::
+ AppendWithoutWhiteSpaceCollapsing(const String& string,
+ const ComputedStyle* style,
+ LayoutObject* layout_object) {
for (unsigned start = 0; start < string.length();) {
UChar c = string[start];
if (IsControlItemCharacter(c)) {
@@ -218,10 +225,11 @@ void NGInlineItemsBuilder::AppendWithoutWhiteSpaceCollapsing(
last_collapsible_space_ = CollapsibleSpace::kNone;
}
-void NGInlineItemsBuilder::AppendWithPreservingNewlines(
- const String& string,
- const ComputedStyle* style,
- LayoutObject* layout_object) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::
+ AppendWithPreservingNewlines(const String& string,
+ const ComputedStyle* style,
+ LayoutObject* layout_object) {
for (unsigned start = 0; start < string.length();) {
if (string[start] == kNewlineCharacter) {
AppendForcedBreak(style, layout_object);
@@ -237,8 +245,10 @@ void NGInlineItemsBuilder::AppendWithPreservingNewlines(
}
}
-void NGInlineItemsBuilder::AppendForcedBreak(const ComputedStyle* style,
- LayoutObject* layout_object) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::AppendForcedBreak(
+ const ComputedStyle* style,
+ LayoutObject* layout_object) {
// Remove collapsible spaces immediately before a preserved newline.
RemoveTrailingCollapsibleSpaceIfExists();
@@ -248,10 +258,12 @@ void NGInlineItemsBuilder::AppendForcedBreak(const ComputedStyle* style,
last_collapsible_space_ = CollapsibleSpace::kSpace;
}
-void NGInlineItemsBuilder::Append(NGInlineItem::NGInlineItemType type,
- UChar character,
- const ComputedStyle* style,
- LayoutObject* layout_object) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::Append(
+ NGInlineItem::NGInlineItemType type,
+ UChar character,
+ const ComputedStyle* style,
+ LayoutObject* layout_object) {
DCHECK_NE(character, kSpaceCharacter);
DCHECK_NE(character, kZeroWidthSpaceCharacter);
@@ -261,26 +273,31 @@ void NGInlineItemsBuilder::Append(NGInlineItem::NGInlineItemType type,
last_collapsible_space_ = CollapsibleSpace::kNone;
}
-void NGInlineItemsBuilder::AppendOpaque(NGInlineItem::NGInlineItemType type,
- UChar character) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::AppendOpaque(
+ NGInlineItem::NGInlineItemType type,
+ UChar character) {
text_.Append(character);
unsigned end_offset = text_.length();
AppendItem(items_, type, end_offset - 1, end_offset, nullptr, nullptr);
}
-void NGInlineItemsBuilder::AppendOpaque(NGInlineItem::NGInlineItemType type,
- const ComputedStyle* style,
- LayoutObject* layout_object) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::AppendOpaque(
+ NGInlineItem::NGInlineItemType type,
+ const ComputedStyle* style,
+ LayoutObject* layout_object) {
unsigned end_offset = text_.length();
AppendItem(items_, type, end_offset, end_offset, style, layout_object);
}
// Removes the collapsible newline at the end of |text_| if exists and the
// removal conditions met.
-void NGInlineItemsBuilder::RemoveTrailingCollapsibleNewlineIfNeeded(
- const String& after,
- unsigned after_index,
- const ComputedStyle* after_style) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::
+ RemoveTrailingCollapsibleNewlineIfNeeded(const String& after,
+ unsigned after_index,
+ const ComputedStyle* after_style) {
DCHECK_EQ(last_collapsible_space_, CollapsibleSpace::kNewline);
if (text_.IsEmpty() || text_[text_.length() - 1] != kSpaceCharacter)
@@ -298,7 +315,9 @@ void NGInlineItemsBuilder::RemoveTrailingCollapsibleNewlineIfNeeded(
}
// Removes the collapsible space at the end of |text_| if exists.
-void NGInlineItemsBuilder::RemoveTrailingCollapsibleSpaceIfExists() {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<
+ OffsetMappingBuilder>::RemoveTrailingCollapsibleSpaceIfExists() {
if (last_collapsible_space_ == CollapsibleSpace::kNone || text_.IsEmpty())
return;
@@ -320,7 +339,9 @@ void NGInlineItemsBuilder::RemoveTrailingCollapsibleSpaceIfExists() {
}
// Removes the collapsible space at the specified index.
-void NGInlineItemsBuilder::RemoveTrailingCollapsibleSpace(unsigned index) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<
+ OffsetMappingBuilder>::RemoveTrailingCollapsibleSpace(unsigned index) {
DCHECK_NE(last_collapsible_space_, CollapsibleSpace::kNone);
DCHECK(!text_.IsEmpty());
DCHECK_EQ(text_[index], kSpaceCharacter);
@@ -350,14 +371,18 @@ void NGInlineItemsBuilder::RemoveTrailingCollapsibleSpace(unsigned index) {
}
}
-void NGInlineItemsBuilder::AppendBidiControl(const ComputedStyle* style,
- UChar ltr,
- UChar rtl) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::AppendBidiControl(
+ const ComputedStyle* style,
+ UChar ltr,
+ UChar rtl) {
AppendOpaque(NGInlineItem::kBidiControl,
IsLtr(style->Direction()) ? ltr : rtl);
}
-void NGInlineItemsBuilder::EnterBlock(const ComputedStyle* style) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::EnterBlock(
+ const ComputedStyle* style) {
// Handle bidi-override on the block itself.
switch (style->GetUnicodeBidi()) {
case UnicodeBidi::kNormal:
@@ -384,7 +409,9 @@ void NGInlineItemsBuilder::EnterBlock(const ComputedStyle* style) {
}
}
-void NGInlineItemsBuilder::EnterInline(LayoutObject* node) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::EnterInline(
+ LayoutObject* node) {
// https://drafts.csswg.org/css-writing-modes-3/#bidi-control-codes-injection-table
const ComputedStyle* style = node->Style();
switch (style->GetUnicodeBidi()) {
@@ -421,16 +448,22 @@ void NGInlineItemsBuilder::EnterInline(LayoutObject* node) {
AppendOpaque(NGInlineItem::kOpenTag, style, node);
}
-void NGInlineItemsBuilder::Enter(LayoutObject* node, UChar character_to_exit) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::Enter(
+ LayoutObject* node,
+ UChar character_to_exit) {
exits_.push_back(OnExitNode{node, character_to_exit});
has_bidi_controls_ = true;
}
-void NGInlineItemsBuilder::ExitBlock() {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::ExitBlock() {
Exit(nullptr);
}
-void NGInlineItemsBuilder::ExitInline(LayoutObject* node) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::ExitInline(
+ LayoutObject* node) {
DCHECK(node);
AppendOpaque(NGInlineItem::kCloseTag, node->Style(), node);
@@ -438,11 +471,16 @@ void NGInlineItemsBuilder::ExitInline(LayoutObject* node) {
Exit(node);
}
-void NGInlineItemsBuilder::Exit(LayoutObject* node) {
+template <typename OffsetMappingBuilder>
+void NGInlineItemsBuilderTemplate<OffsetMappingBuilder>::Exit(
+ LayoutObject* node) {
while (!exits_.IsEmpty() && exits_.back().node == node) {
AppendOpaque(NGInlineItem::kBidiControl, exits_.back().character);
exits_.pop_back();
}
}
+template class CORE_TEMPLATE_EXPORT
+ NGInlineItemsBuilderTemplate<EmptyOffsetMappingBuilder>;
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698