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

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

Issue 2943573002: Make NGInlineItemsBuilder construct whitespace-collapsed offset mapping (Closed)
Patch Set: Wed Jun 21 16:40:35 PDT 2017 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 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;

Powered by Google App Engine
This is Rietveld 408576698