Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/ng/api/ng_offset_mapping_builder.cc |
| diff --git a/third_party/WebKit/Source/core/layout/ng/api/ng_offset_mapping_builder.cc b/third_party/WebKit/Source/core/layout/ng/api/ng_offset_mapping_builder.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..721775a3d3d20adbb007aefcc2693e0d6a87ce96 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/core/layout/ng/api/ng_offset_mapping_builder.cc |
| @@ -0,0 +1,48 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "core/layout/ng/api/ng_offset_mapping_builder.h" |
| + |
| +#include "platform/wtf/text/StringBuilder.h" |
| + |
| +namespace blink { |
| + |
| +NGOffsetMappingBuilder::NGOffsetMappingBuilder() { |
| + mapping_.push_back(0); |
| +} |
| + |
| +void NGOffsetMappingBuilder::AppendIdentityMapping(unsigned length) { |
| + DCHECK_GT(length, 0u); |
|
yosin_UTC9
2017/06/28 01:44:21
Please add |DCHECK(!mapping_.IsEmpty())| for |mapp
Xiaocheng
2017/06/28 03:34:04
Done.
|
| + for (unsigned i = 0; i < length; ++i) { |
| + unsigned next = mapping_.back() + 1; |
| + mapping_.push_back(next); |
| + } |
| +} |
| + |
| +void NGOffsetMappingBuilder::AppendCollapsedMapping(unsigned length) { |
| + DCHECK_GT(length, 0u); |
| + unsigned back = mapping_.back(); |
|
yosin_UTC9
2017/06/28 01:44:21
nit: s/unsigned/const unsigned/
Please add |DCHECK
Xiaocheng
2017/06/28 03:34:05
Done.
|
| + for (unsigned i = 0; i < length; ++i) |
| + mapping_.push_back(back); |
| +} |
| + |
| +void NGOffsetMappingBuilder::CollapseTrailingSpace(unsigned skip_length) { |
| + DCHECK(mapping_.size()); |
|
yosin_UTC9
2017/06/28 01:44:21
nit: s/mapping_.size()/!mapping.IsEmpty()/
Xiaocheng
2017/06/28 03:34:05
Done.
|
| + |
| + // Find the |skipped_count + 1|-st last uncollapsed character. By collapsing |
| + // it, all mapping values beyond this position are decremented by 1. |
| + unsigned skipped_count = 0; |
| + for (unsigned i = mapping_.size() - 1; skipped_count <= skip_length; --i) { |
| + DCHECK_GT(i, 0u); |
| + if (mapping_[i] != mapping_[i - 1]) |
| + ++skipped_count; |
| + --mapping_[i]; |
| + } |
| +} |
| + |
| +Vector<unsigned> NGOffsetMappingBuilder::DumpOffsetMappingForTesting() const { |
| + return mapping_; |
| +} |
| + |
| +} // namespace blink |