| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, 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 753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 | 764 |
| 765 void VisibleSelection::trace(Visitor* visitor) | 765 void VisibleSelection::trace(Visitor* visitor) |
| 766 { | 766 { |
| 767 visitor->trace(m_base); | 767 visitor->trace(m_base); |
| 768 visitor->trace(m_extent); | 768 visitor->trace(m_extent); |
| 769 visitor->trace(m_start); | 769 visitor->trace(m_start); |
| 770 visitor->trace(m_end); | 770 visitor->trace(m_end); |
| 771 visitor->trace(m_changeObserver); | 771 visitor->trace(m_changeObserver); |
| 772 } | 772 } |
| 773 | 773 |
| 774 static bool isValidPosition(const Position& position) |
| 775 { |
| 776 if (!position.inDocument()) |
| 777 return false; |
| 778 |
| 779 if (position.anchorType() != Position::PositionIsOffsetInAnchor) |
| 780 return true; |
| 781 |
| 782 if (position.offsetInContainerNode() < 0) |
| 783 return false; |
| 784 |
| 785 const unsigned offset = static_cast<unsigned>(position.offsetInContainerNode
()); |
| 786 const unsigned nodeLength = position.anchorNode()->lengthOfContents(); |
| 787 return offset <= nodeLength; |
| 788 } |
| 789 |
| 790 void VisibleSelection::validatePositionsIfNeeded() |
| 791 { |
| 792 if (!isValidPosition(m_base) || !isValidPosition(m_extent) || !isValidPositi
on(m_start) || !isValidPosition(m_end)) |
| 793 validate(); |
| 794 } |
| 795 |
| 774 #ifndef NDEBUG | 796 #ifndef NDEBUG |
| 775 | 797 |
| 776 void VisibleSelection::debugPosition() const | 798 void VisibleSelection::debugPosition() const |
| 777 { | 799 { |
| 778 fprintf(stderr, "VisibleSelection ===============\n"); | 800 fprintf(stderr, "VisibleSelection ===============\n"); |
| 779 | 801 |
| 780 if (!m_start.anchorNode()) | 802 if (!m_start.anchorNode()) |
| 781 fputs("pos: null", stderr); | 803 fputs("pos: null", stderr); |
| 782 else if (m_start == m_end) { | 804 else if (m_start == m_end) { |
| 783 fprintf(stderr, "pos: %s ", m_start.anchorNode()->nodeName().utf8().da
ta()); | 805 fprintf(stderr, "pos: %s ", m_start.anchorNode()->nodeName().utf8().da
ta()); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 835 sel.showTreeForThis(); | 857 sel.showTreeForThis(); |
| 836 } | 858 } |
| 837 | 859 |
| 838 void showTree(const WebCore::VisibleSelection* sel) | 860 void showTree(const WebCore::VisibleSelection* sel) |
| 839 { | 861 { |
| 840 if (sel) | 862 if (sel) |
| 841 sel->showTreeForThis(); | 863 sel->showTreeForThis(); |
| 842 } | 864 } |
| 843 | 865 |
| 844 #endif | 866 #endif |
| OLD | NEW |