OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |