OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/layout/ng/inline/ng_inline_items_builder.h" | 5 #include "core/layout/ng/inline/ng_inline_items_builder.h" |
6 | 6 |
7 #include "core/layout/LayoutObject.h" | 7 #include "core/layout/LayoutObject.h" |
8 #include "core/layout/ng/inline/ng_inline_node.h" | 8 #include "core/layout/ng/inline/ng_inline_node.h" |
9 #include "core/style/ComputedStyle.h" | 9 #include "core/style/ComputedStyle.h" |
10 | 10 |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
150 unsigned start_offset = text_.length(); | 150 unsigned start_offset = text_.length(); |
151 for (unsigned i = start; i < end;) { | 151 for (unsigned i = start; i < end;) { |
152 UChar c = string[i]; | 152 UChar c = string[i]; |
153 if (c == kNewlineCharacter) { | 153 if (c == kNewlineCharacter) { |
154 // LayoutBR does not set preserve_newline, but should be preserved. | 154 // LayoutBR does not set preserve_newline, but should be preserved. |
155 if (!i && end == 1 && layout_object && layout_object->IsBR()) { | 155 if (!i && end == 1 && layout_object && layout_object->IsBR()) { |
156 AppendForcedBreak(style, layout_object); | 156 AppendForcedBreak(style, layout_object); |
157 return; | 157 return; |
158 } | 158 } |
159 | 159 |
160 if (last_collapsible_space_ == CollapsibleSpace::kNone) | 160 if (last_collapsible_space_ == CollapsibleSpace::kNone) { |
161 text_.Append(kSpaceCharacter); | 161 text_.Append(kSpaceCharacter); |
162 } | |
162 last_collapsible_space_ = CollapsibleSpace::kNewline; | 163 last_collapsible_space_ = CollapsibleSpace::kNewline; |
164 if (offset_mapping_) | |
165 offset_mapping_->push_back(text_.length()); | |
163 i++; | 166 i++; |
164 continue; | 167 continue; |
165 } | 168 } |
166 | 169 |
167 if (c == kSpaceCharacter || c == kTabulationCharacter) { | 170 if (c == kSpaceCharacter || c == kTabulationCharacter) { |
168 if (last_collapsible_space_ == CollapsibleSpace::kNone) { | 171 if (last_collapsible_space_ == CollapsibleSpace::kNone) { |
169 text_.Append(kSpaceCharacter); | 172 text_.Append(kSpaceCharacter); |
170 last_collapsible_space_ = CollapsibleSpace::kSpace; | 173 last_collapsible_space_ = CollapsibleSpace::kSpace; |
171 } | 174 } |
175 if (offset_mapping_) | |
176 offset_mapping_->push_back(text_.length()); | |
172 i++; | 177 i++; |
173 continue; | 178 continue; |
174 } | 179 } |
175 | 180 |
176 if (last_collapsible_space_ == CollapsibleSpace::kNewline) { | 181 if (last_collapsible_space_ == CollapsibleSpace::kNewline) { |
177 RemoveTrailingCollapsibleNewlineIfNeeded(&start_offset, string, i, style); | 182 RemoveTrailingCollapsibleNewlineIfNeeded(&start_offset, string, i, style); |
178 } | 183 } |
179 | 184 |
180 size_t end_of_non_space = string.Find(IsCollapsibleSpace, i + 1); | 185 size_t end_of_non_space = string.Find(IsCollapsibleSpace, i + 1); |
181 if (end_of_non_space == kNotFound) | 186 if (end_of_non_space == kNotFound) |
182 end_of_non_space = string.length(); | 187 end_of_non_space = string.length(); |
183 text_.Append(string, i, end_of_non_space - i); | 188 text_.Append(string, i, end_of_non_space - i); |
189 if (offset_mapping_) { | |
kojii
2017/06/16 11:25:56
Changes in this file is not for review, correct?
| |
190 size_t apend_size = end_of_non_space - i; | |
191 for (size_t k = 0; k < apend_size; k++) | |
192 offset_mapping_->push_back(text_.length() - apend_size + k + 1); | |
193 } | |
194 | |
184 i = end_of_non_space; | 195 i = end_of_non_space; |
185 last_collapsible_space_ = CollapsibleSpace::kNone; | 196 last_collapsible_space_ = CollapsibleSpace::kNone; |
186 } | 197 } |
187 | 198 |
188 if (text_.length() > start_offset) { | 199 if (text_.length() > start_offset) { |
189 AppendItem(items_, NGInlineItem::kText, start_offset, text_.length(), style, | 200 AppendItem(items_, NGInlineItem::kText, start_offset, text_.length(), style, |
190 layout_object); | 201 layout_object); |
191 } | 202 } |
192 } | 203 } |
193 | 204 |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
422 } | 433 } |
423 | 434 |
424 void NGInlineItemsBuilder::Exit(LayoutObject* node) { | 435 void NGInlineItemsBuilder::Exit(LayoutObject* node) { |
425 while (!exits_.IsEmpty() && exits_.back().node == node) { | 436 while (!exits_.IsEmpty() && exits_.back().node == node) { |
426 Append(NGInlineItem::kBidiControl, exits_.back().character); | 437 Append(NGInlineItem::kBidiControl, exits_.back().character); |
427 exits_.pop_back(); | 438 exits_.pop_back(); |
428 } | 439 } |
429 } | 440 } |
430 | 441 |
431 } // namespace blink | 442 } // namespace blink |
OLD | NEW |