| 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;
|
|
|