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..a90f5e958330b01b567110ee7db8afd8e04c31c4 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 |
@@ -5,6 +5,7 @@ |
#include "core/layout/ng/inline/ng_inline_items_builder.h" |
#include "core/layout/LayoutObject.h" |
+#include "core/layout/ng/api/ng_offset_mapping_builder.h" |
#include "core/layout/ng/inline/ng_inline_node.h" |
#include "core/style/ComputedStyle.h" |
@@ -156,8 +157,14 @@ void NGInlineItemsBuilder::AppendWithWhiteSpaceCollapsing( |
return; |
} |
- if (last_collapsible_space_ == CollapsibleSpace::kNone) |
+ if (last_collapsible_space_ == CollapsibleSpace::kNone) { |
text_.Append(kSpaceCharacter); |
+ if (mapping_builder_) |
+ mapping_builder_->AppendIdentityMapping(1); |
+ } else { |
+ if (mapping_builder_) |
+ mapping_builder_->AppendCollapsedMapping(1); |
+ } |
last_collapsible_space_ = CollapsibleSpace::kNewline; |
i++; |
continue; |
@@ -167,6 +174,11 @@ void NGInlineItemsBuilder::AppendWithWhiteSpaceCollapsing( |
if (last_collapsible_space_ == CollapsibleSpace::kNone) { |
text_.Append(kSpaceCharacter); |
last_collapsible_space_ = CollapsibleSpace::kSpace; |
+ if (mapping_builder_) |
+ mapping_builder_->AppendIdentityMapping(1); |
+ } else { |
+ if (mapping_builder_) |
+ mapping_builder_->AppendCollapsedMapping(1); |
} |
i++; |
continue; |
@@ -181,6 +193,8 @@ void NGInlineItemsBuilder::AppendWithWhiteSpaceCollapsing( |
if (end_of_non_space == kNotFound) |
end_of_non_space = string.length(); |
text_.Append(string, i, end_of_non_space - i); |
+ if (mapping_builder_) |
+ mapping_builder_->AppendIdentityMapping(end_of_non_space - i); |
yosin_UTC9
2017/06/28 01:44:21
So, do we call mapping builder for every word?
Xiaocheng
2017/06/28 02:05:20
Yes. To decouple the mapping builder with impl det
|
i = end_of_non_space; |
last_collapsible_space_ = CollapsibleSpace::kNone; |
} |
@@ -210,6 +224,8 @@ void NGInlineItemsBuilder::AppendWithoutWhiteSpaceCollapsing( |
end = string.length(); |
unsigned start_offset = text_.length(); |
text_.Append(string, start, end - start); |
+ if (mapping_builder_) |
+ mapping_builder_->AppendIdentityMapping(end - start); |
AppendItem(items_, NGInlineItem::kText, start_offset, text_.length(), style, |
layout_object); |
start = end; |
@@ -256,6 +272,8 @@ void NGInlineItemsBuilder::Append(NGInlineItem::NGInlineItemType type, |
DCHECK_NE(character, kZeroWidthSpaceCharacter); |
text_.Append(character); |
+ if (mapping_builder_) |
+ mapping_builder_->AppendIdentityMapping(1); |
unsigned end_offset = text_.length(); |
AppendItem(items_, type, end_offset - 1, end_offset, style, layout_object); |
last_collapsible_space_ = CollapsibleSpace::kNone; |
@@ -264,6 +282,8 @@ void NGInlineItemsBuilder::Append(NGInlineItem::NGInlineItemType type, |
void NGInlineItemsBuilder::AppendOpaque(NGInlineItem::NGInlineItemType type, |
UChar character) { |
text_.Append(character); |
+ if (mapping_builder_) |
+ mapping_builder_->AppendIdentityMapping(1); |
unsigned end_offset = text_.length(); |
AppendItem(items_, type, end_offset - 1, end_offset, nullptr, nullptr); |
} |
@@ -327,6 +347,8 @@ void NGInlineItemsBuilder::RemoveTrailingCollapsibleSpace(unsigned index) { |
text_.erase(index); |
last_collapsible_space_ = CollapsibleSpace::kNone; |
+ if (mapping_builder_) |
+ mapping_builder_->CollapseTrailingSpace(text_.length() - index); |
// Adjust items if the removed space is already included. |
for (unsigned i = items_->size(); i > 0;) { |