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

Side by Side Diff: third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp

Issue 2948133004: [MarkersIntersectingRange #2] Add DocumentMarkerController::MarkersIntersectingRange() (Closed)
Patch Set: Update comment, Empty => Collapsed 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
7 * reserved. 7 * reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 static_cast<unsigned>(position.ComputeOffsetInContainerNode()); 372 static_cast<unsigned>(position.ComputeOffsetInContainerNode());
373 373
374 const auto& markers = MarkersFor(node, marker_types); 374 const auto& markers = MarkersFor(node, marker_types);
375 const auto& it = 375 const auto& it =
376 std::find_if(markers.begin(), markers.end(), [=](DocumentMarker* marker) { 376 std::find_if(markers.begin(), markers.end(), [=](DocumentMarker* marker) {
377 return marker->StartOffset() < offset && offset < marker->EndOffset(); 377 return marker->StartOffset() < offset && offset < marker->EndOffset();
378 }); 378 });
379 return it == markers.end() ? nullptr : *it; 379 return it == markers.end() ? nullptr : *it;
380 } 380 }
381 381
382 template <typename Strategy>
383 HeapVector<std::pair<Member<Node>, Member<DocumentMarker>>>
384 DocumentMarkerController::MarkersIntersectingRange(
385 const EphemeralRangeTemplate<Strategy>& range,
386 DocumentMarker::MarkerTypes types) {
387 HeapVector<std::pair<Member<Node>, Member<DocumentMarker>>> node_marker_pairs;
388 if (!PossiblyHasMarkers(types))
389 return node_marker_pairs;
390
391 Node* const range_start_container =
392 range.StartPosition().ComputeContainerNode();
393 const unsigned range_start_offset =
394 range.StartPosition().ComputeOffsetInContainerNode();
395 Node* const range_end_container = range.EndPosition().ComputeContainerNode();
396 const unsigned range_end_offset =
397 range.EndPosition().ComputeOffsetInContainerNode();
398
399 for (Node& node : range.Nodes()) {
400 MarkerLists* const markers = markers_.at(&node);
401 if (!markers)
402 continue;
403
404 for (DocumentMarker::MarkerType type : types) {
405 const DocumentMarkerList* const list = ListForType(markers, type);
406 if (!list)
407 continue;
408
409 const unsigned start_offset =
410 node == range_start_container ? range_start_offset : 0;
411 const unsigned end_offset = node == range_end_container
412 ? range_end_offset
413 : node.MaxCharacterOffset();
414
415 const DocumentMarkerVector& markers_from_this_list =
416 list->MarkersIntersectingRange(start_offset, end_offset);
417 for (DocumentMarker* marker : markers_from_this_list)
418 node_marker_pairs.push_back(std::make_pair(&node, marker));
419 }
420 }
421
422 return node_marker_pairs;
423 }
424
425 template HeapVector<std::pair<Member<Node>, Member<DocumentMarker>>>
rlanday 2017/06/24 01:08:29 I probably need CORE_TEMPLATE_EXPORT here to fix t
426 DocumentMarkerController::MarkersIntersectingRange(const EphemeralRange&,
427 DocumentMarker::MarkerTypes);
428
429 template HeapVector<std::pair<Member<Node>, Member<DocumentMarker>>>
430 DocumentMarkerController::MarkersIntersectingRange(
431 const EphemeralRangeInFlatTree&,
432 DocumentMarker::MarkerTypes);
433
382 DocumentMarkerVector DocumentMarkerController::MarkersFor( 434 DocumentMarkerVector DocumentMarkerController::MarkersFor(
383 Node* node, 435 Node* node,
384 DocumentMarker::MarkerTypes marker_types) { 436 DocumentMarker::MarkerTypes marker_types) {
385 DocumentMarkerVector result; 437 DocumentMarkerVector result;
386 438
387 MarkerLists* markers = markers_.at(node); 439 MarkerLists* markers = markers_.at(node);
388 if (!markers) 440 if (!markers)
389 return result; 441 return result;
390 442
391 for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) { 443 for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) {
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 } 785 }
734 786
735 } // namespace blink 787 } // namespace blink
736 788
737 #ifndef NDEBUG 789 #ifndef NDEBUG
738 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { 790 void showDocumentMarkers(const blink::DocumentMarkerController* controller) {
739 if (controller) 791 if (controller)
740 controller->ShowMarkers(); 792 controller->ShowMarkers();
741 } 793 }
742 #endif 794 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698