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 1038485901038a4a211dbd51b71fa06440c5c91e..1549a3712393572136cf193299eaa56b60874f57 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" |
@@ -157,8 +158,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_->AppendBijection(1); |
+ } else { |
+ if (mapping_builder_) |
+ mapping_builder_->AppendCollapsed(1); |
+ } |
last_collapsible_space_ = CollapsibleSpace::kNewline; |
i++; |
continue; |
@@ -168,6 +175,11 @@ void NGInlineItemsBuilder::AppendWithWhiteSpaceCollapsing( |
if (last_collapsible_space_ == CollapsibleSpace::kNone) { |
text_.Append(kSpaceCharacter); |
last_collapsible_space_ = CollapsibleSpace::kSpace; |
+ if (mapping_builder_) |
+ mapping_builder_->AppendBijection(1); |
+ } else { |
+ if (mapping_builder_) |
+ mapping_builder_->AppendCollapsed(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_->AppendBijection(end_of_non_space - i); |
i = end_of_non_space; |
last_collapsible_space_ = CollapsibleSpace::kNone; |
} |
@@ -216,6 +230,8 @@ void NGInlineItemsBuilder::AppendWithoutWhiteSpaceCollapsing( |
} |
last_collapsible_space_ = CollapsibleSpace::kNone; |
+ if (mapping_builder_) |
+ mapping_builder_->AppendBijection(string.length()); |
} |
void NGInlineItemsBuilder::AppendWithPreservingNewlines( |
@@ -244,6 +260,8 @@ void NGInlineItemsBuilder::AppendForcedBreak(const ComputedStyle* style, |
RemoveTrailingCollapsibleSpaceIfExists(&start_offset); |
Append(NGInlineItem::kControl, kNewlineCharacter, style, layout_object); |
+ if (mapping_builder_) |
+ mapping_builder_->AppendBijection(1); |
// Remove collapsible spaces immediately after a preserved newline. |
last_collapsible_space_ = CollapsibleSpace::kSpace; |
@@ -307,6 +325,9 @@ void NGInlineItemsBuilder::RemoveTrailingCollapsibleSpace( |
text_.Resize(new_size); |
last_collapsible_space_ = CollapsibleSpace::kNone; |
+ if (mapping_builder_) |
+ mapping_builder_->CollapseLastCharacter(); |
+ |
if (*next_start_offset <= new_size) |
return; |
*next_start_offset = new_size; |