| Index: third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
|
| diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
|
| index 8fd8a1134328f25716b7ae9f7434673b1bf06842..6452faed57ae10e0e86a7a49d91cdae44bf18a47 100644
|
| --- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
|
| +++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
|
| @@ -28,15 +28,16 @@
|
|
|
| #include "core/editing/markers/DocumentMarkerController.h"
|
|
|
| +#include <algorithm>
|
| #include "core/dom/Node.h"
|
| #include "core/dom/NodeTraversal.h"
|
| #include "core/dom/Range.h"
|
| #include "core/dom/Text.h"
|
| #include "core/editing/iterators/TextIterator.h"
|
| +#include "core/editing/markers/DocumentMarkerListEditor.h"
|
| #include "core/editing/markers/RenderedDocumentMarker.h"
|
| #include "core/frame/FrameView.h"
|
| #include "core/layout/LayoutObject.h"
|
| -#include <algorithm>
|
|
|
| #ifndef NDEBUG
|
| #include <stdio.h>
|
| @@ -175,26 +176,11 @@ void DocumentMarkerController::RemoveMarkers(
|
| DocumentMarkerController::RemoveMarkers(marked_text, marker_types);
|
| }
|
|
|
| -static bool StartsFurther(const Member<RenderedDocumentMarker>& lhv,
|
| - const DocumentMarker* rhv) {
|
| - return lhv->StartOffset() < rhv->StartOffset();
|
| -}
|
| -
|
| -static bool EndsBefore(size_t start_offset,
|
| - const Member<RenderedDocumentMarker>& rhv) {
|
| - return start_offset < rhv->EndOffset();
|
| -}
|
| -
|
| static bool CompareByStart(const Member<DocumentMarker>& lhv,
|
| const Member<DocumentMarker>& rhv) {
|
| return lhv->StartOffset() < rhv->StartOffset();
|
| }
|
|
|
| -static bool DoesNotOverlap(const Member<RenderedDocumentMarker>& lhv,
|
| - const DocumentMarker* rhv) {
|
| - return lhv->EndOffset() < rhv->StartOffset();
|
| -}
|
| -
|
| static void UpdateMarkerRenderedRect(const Node& node,
|
| RenderedDocumentMarker& marker) {
|
| Range* range = Range::Create(node.GetDocument());
|
| @@ -248,47 +234,6 @@ void DocumentMarkerController::AddMarker(Node* node,
|
| }
|
| }
|
|
|
| -// TODO(rlanday): move DocumentMarkerListEditor into its own .h/.cpp files
|
| -// TODO(rlanday): this method was created by cutting and pasting code from
|
| -// DocumentMarkerController::AddMarker(), it should be refactored in a future CL
|
| -void DocumentMarkerListEditor::AddMarker(MarkerList* list,
|
| - const DocumentMarker* marker) {
|
| - RenderedDocumentMarker* rendered_marker =
|
| - RenderedDocumentMarker::Create(*marker);
|
| - if (list->IsEmpty() || list->back()->EndOffset() < marker->StartOffset()) {
|
| - list->push_back(rendered_marker);
|
| - } else {
|
| - if (marker->GetType() != DocumentMarker::kTextMatch &&
|
| - marker->GetType() != DocumentMarker::kComposition) {
|
| - MergeOverlapping(list, rendered_marker);
|
| - } else {
|
| - MarkerList::iterator pos =
|
| - std::lower_bound(list->begin(), list->end(), marker, StartsFurther);
|
| - list->insert(pos - list->begin(), rendered_marker);
|
| - }
|
| - }
|
| -}
|
| -
|
| -// TODO(rlanday): move DocumentMarkerListEditor into its own .h/.cpp files
|
| -void DocumentMarkerListEditor::MergeOverlapping(
|
| - MarkerList* list,
|
| - RenderedDocumentMarker* to_insert) {
|
| - MarkerList::iterator first_overlapping =
|
| - std::lower_bound(list->begin(), list->end(), to_insert, DoesNotOverlap);
|
| - size_t index = first_overlapping - list->begin();
|
| - list->insert(index, to_insert);
|
| - MarkerList::iterator inserted = list->begin() + index;
|
| - first_overlapping = inserted + 1;
|
| - for (MarkerList::iterator i = first_overlapping;
|
| - i != list->end() && (*i)->StartOffset() <= (*inserted)->EndOffset();) {
|
| - (*inserted)->SetStartOffset(
|
| - std::min((*inserted)->StartOffset(), (*i)->StartOffset()));
|
| - (*inserted)->SetEndOffset(
|
| - std::max((*inserted)->EndOffset(), (*i)->EndOffset()));
|
| - list->erase(i - list->begin());
|
| - }
|
| -}
|
| -
|
| // Moves markers from src_node to dst_node. Markers are moved if their start
|
| // offset is less than length. Markers that run past that point are truncated.
|
| void DocumentMarkerController::MoveMarkers(Node* src_node,
|
| @@ -333,35 +278,6 @@ void DocumentMarkerController::MoveMarkers(Node* src_node,
|
| }
|
| }
|
|
|
| -// TODO(rlanday): move DocumentMarkerListEditor into its own .h/.cpp files
|
| -bool DocumentMarkerListEditor::MoveMarkers(MarkerList* src_list,
|
| - int length,
|
| - MarkerList* dst_list) {
|
| - DCHECK_GT(length, 0);
|
| - bool doc_dirty = false;
|
| - const unsigned end_offset = length - 1;
|
| - MarkerList::iterator it;
|
| - for (it = src_list->begin(); it != src_list->end(); ++it) {
|
| - DocumentMarker* marker = it->Get();
|
| -
|
| - // stop if we are now past the specified range
|
| - if (marker->StartOffset() > end_offset)
|
| - break;
|
| -
|
| - // pin the marker to the specified range
|
| - doc_dirty = true;
|
| - if (marker->EndOffset() > end_offset)
|
| - marker->SetEndOffset(end_offset);
|
| -
|
| - DocumentMarkerListEditor::AddMarker(dst_list, marker);
|
| - }
|
| -
|
| - // Remove the range of markers that were moved to dst_node
|
| - src_list->erase(0, it - src_list->begin());
|
| -
|
| - return doc_dirty;
|
| -}
|
| -
|
| void DocumentMarkerController::RemoveMarkers(
|
| Node* node,
|
| unsigned start_offset,
|
| @@ -415,32 +331,6 @@ void DocumentMarkerController::RemoveMarkers(
|
| }
|
| }
|
|
|
| -// TODO(rlanday): move DocumentMarkerListEditor into its own .h/.cpp files
|
| -// TODO(rlanday): this method was created by cutting and pasting code from
|
| -// DocumentMarkerController::RemoveMarkers(), it should be refactored in a
|
| -// future CL
|
| -bool DocumentMarkerListEditor::RemoveMarkers(MarkerList* list,
|
| - unsigned start_offset,
|
| - int length) {
|
| - bool doc_dirty = false;
|
| - unsigned end_offset = start_offset + length;
|
| - MarkerList::iterator start_pos =
|
| - std::upper_bound(list->begin(), list->end(), start_offset, EndsBefore);
|
| - for (MarkerList::iterator i = start_pos; i != list->end();) {
|
| - DocumentMarker marker(*i->Get());
|
| -
|
| - // markers are returned in order, so stop if we are now past the specified
|
| - // range
|
| - if (marker.StartOffset() >= end_offset)
|
| - break;
|
| -
|
| - list->erase(i - list->begin());
|
| - doc_dirty = true;
|
| - }
|
| -
|
| - return doc_dirty;
|
| -}
|
| -
|
| DocumentMarkerVector DocumentMarkerController::MarkersFor(
|
| Node* node,
|
| DocumentMarker::MarkerTypes marker_types) {
|
| @@ -781,8 +671,8 @@ bool DocumentMarkerController::SetMarkersActive(Node* node,
|
| Member<MarkerList>& list = ListForType(markers, DocumentMarker::kTextMatch);
|
| if (!list)
|
| return false;
|
| - MarkerList::iterator start_pos =
|
| - std::upper_bound(list->begin(), list->end(), start_offset, EndsBefore);
|
| + MarkerList::iterator start_pos = std::upper_bound(
|
| + list->begin(), list->end(), start_offset, DocumentMarker::EndsBefore);
|
| for (MarkerList::iterator marker = start_pos; marker != list->end();
|
| ++marker) {
|
| // Markers are returned in order, so stop if we are now past the specified
|
| @@ -868,34 +758,6 @@ void DocumentMarkerController::DidUpdateCharacterData(CharacterData* node,
|
| node->GetLayoutObject()->SetShouldDoFullPaintInvalidation();
|
| }
|
|
|
| -// TODO(rlanday): move DocumentMarkerListEditor into its own .h/.cpp files
|
| -bool DocumentMarkerListEditor::ShiftMarkers(MarkerList* list,
|
| - unsigned offset,
|
| - unsigned old_length,
|
| - unsigned new_length) {
|
| - bool did_shift_marker = false;
|
| - for (MarkerList::iterator it = list->begin(); it != list->end(); ++it) {
|
| - RenderedDocumentMarker& marker = **it;
|
| - Optional<DocumentMarker::MarkerOffsets> result =
|
| - marker.ComputeOffsetsAfterShift(offset, old_length, new_length);
|
| - if (result == WTF::kNullopt) {
|
| - list->erase(it - list->begin());
|
| - --it;
|
| - did_shift_marker = true;
|
| - continue;
|
| - }
|
| -
|
| - if (marker.StartOffset() != result.value().start_offset ||
|
| - marker.EndOffset() != result.value().end_offset) {
|
| - did_shift_marker = true;
|
| - marker.SetStartOffset(result.value().start_offset);
|
| - marker.SetEndOffset(result.value().end_offset);
|
| - }
|
| - }
|
| -
|
| - return did_shift_marker;
|
| -}
|
| -
|
| } // namespace blink
|
|
|
| #ifndef NDEBUG
|
|
|