OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2012 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 Node* node = *it; | 590 Node* node = *it; |
591 if (!isContainedInNodes(nodes, node)) | 591 if (!isContainedInNodes(nodes, node)) |
592 nodes.append(node); | 592 nodes.append(node); |
593 } | 593 } |
594 | 594 |
595 for (size_t i = 0; i < nodes.size(); i++) { | 595 for (size_t i = 0; i < nodes.size(); i++) { |
596 Node* contentNode = nodes.at(i); | 596 Node* contentNode = nodes.at(i); |
597 if (!contentNode->renderer()) | 597 if (!contentNode->renderer()) |
598 continue; | 598 continue; |
599 | 599 |
600 RefPtr<Range> range = Range::create(&contentNode->document()); | 600 RefPtr<Range> range = Range::create(contentNode->document()); |
601 bool foundStartPosition = false; | 601 bool foundStartPosition = false; |
602 bool startsAboveRegion = true; | 602 bool startsAboveRegion = true; |
603 bool endsBelowRegion = true; | 603 bool endsBelowRegion = true; |
604 bool skipOverOutsideNodes = false; | 604 bool skipOverOutsideNodes = false; |
605 Node* lastEndNode = 0; | 605 Node* lastEndNode = 0; |
606 | 606 |
607 for (Node* node = contentNode; node; node = NodeTraversal::next(node, co
ntentNode)) { | 607 for (Node* node = contentNode; node; node = NodeTraversal::next(node, co
ntentNode)) { |
608 RenderObject* renderer = node->renderer(); | 608 RenderObject* renderer = node->renderer(); |
609 if (!renderer) | 609 if (!renderer) |
610 continue; | 610 continue; |
(...skipping 20 matching lines...) Expand all Loading... |
631 | 631 |
632 // if the bounding box of the current element doesn't intersect the
region box | 632 // if the bounding box of the current element doesn't intersect the
region box |
633 // close the current range only if the start element began inside th
e region, | 633 // close the current range only if the start element began inside th
e region, |
634 // otherwise just move the start position after this node and keep s
kipping them until we found a proper start position. | 634 // otherwise just move the start position after this node and keep s
kipping them until we found a proper start position. |
635 if (!boxIntersectsRegion(logicalTopForRenderer, logicalBottomForRend
erer, logicalTopForRegion, logicalBottomForRegion)) { | 635 if (!boxIntersectsRegion(logicalTopForRenderer, logicalBottomForRend
erer, logicalTopForRegion, logicalBottomForRegion)) { |
636 if (foundStartPosition) { | 636 if (foundStartPosition) { |
637 if (!startsAboveRegion) { | 637 if (!startsAboveRegion) { |
638 if (range->intersectsNode(node, IGNORE_EXCEPTION)) | 638 if (range->intersectsNode(node, IGNORE_EXCEPTION)) |
639 range->setEndBefore(node, IGNORE_EXCEPTION); | 639 range->setEndBefore(node, IGNORE_EXCEPTION); |
640 rangeObjects.append(range->cloneRange(IGNORE_EXCEPTION))
; | 640 rangeObjects.append(range->cloneRange(IGNORE_EXCEPTION))
; |
641 range = Range::create(&contentNode->document()); | 641 range = Range::create(contentNode->document()); |
642 startsAboveRegion = true; | 642 startsAboveRegion = true; |
643 } else | 643 } else |
644 skipOverOutsideNodes = true; | 644 skipOverOutsideNodes = true; |
645 } | 645 } |
646 if (skipOverOutsideNodes) | 646 if (skipOverOutsideNodes) |
647 range->setStartAfter(node, IGNORE_EXCEPTION); | 647 range->setStartAfter(node, IGNORE_EXCEPTION); |
648 foundStartPosition = false; | 648 foundStartPosition = false; |
649 continue; | 649 continue; |
650 } | 650 } |
651 | 651 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 lastEndNode = node; | 710 lastEndNode = node; |
711 } | 711 } |
712 } | 712 } |
713 } | 713 } |
714 if (foundStartPosition || skipOverOutsideNodes) | 714 if (foundStartPosition || skipOverOutsideNodes) |
715 rangeObjects.append(range); | 715 rangeObjects.append(range); |
716 } | 716 } |
717 } | 717 } |
718 | 718 |
719 } | 719 } |
OLD | NEW |