| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2007 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 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 } | 808 } |
| 809 | 809 |
| 810 static HTMLElement* lastInSpecialElement(const Position& pos) | 810 static HTMLElement* lastInSpecialElement(const Position& pos) |
| 811 { | 811 { |
| 812 Element* rootEditableElement = pos.computeContainerNode()->rootEditableEleme
nt(); | 812 Element* rootEditableElement = pos.computeContainerNode()->rootEditableEleme
nt(); |
| 813 for (Node* n = pos.anchorNode(); n && n->rootEditableElement() == rootEditab
leElement; n = n->parentNode()) { | 813 for (Node* n = pos.anchorNode(); n && n->rootEditableElement() == rootEditab
leElement; n = n->parentNode()) { |
| 814 if (isSpecialHTMLElement(*n)) { | 814 if (isSpecialHTMLElement(*n)) { |
| 815 HTMLElement* specialElement = toHTMLElement(n); | 815 HTMLElement* specialElement = toHTMLElement(n); |
| 816 VisiblePosition vPos = VisiblePosition(pos); | 816 VisiblePosition vPos = VisiblePosition(pos); |
| 817 VisiblePosition lastInElement = VisiblePosition(lastPositionInOrAfte
rNode(specialElement)); | 817 VisiblePosition lastInElement = VisiblePosition(lastPositionInOrAfte
rNode(specialElement)); |
| 818 if (isRenderedTableElement(specialElement) && vPos.deepEquivalent()
== lastInElement.previous().deepEquivalent()) | 818 if (isRenderedTableElement(specialElement) && vPos.deepEquivalent()
== previousPositionOf(lastInElement).deepEquivalent()) |
| 819 return specialElement; | 819 return specialElement; |
| 820 if (vPos.deepEquivalent() == lastInElement.deepEquivalent()) | 820 if (vPos.deepEquivalent() == lastInElement.deepEquivalent()) |
| 821 return specialElement; | 821 return specialElement; |
| 822 } | 822 } |
| 823 } | 823 } |
| 824 return 0; | 824 return 0; |
| 825 } | 825 } |
| 826 | 826 |
| 827 Position positionBeforeContainingSpecialElement(const Position& pos, HTMLElement
** containingSpecialElement) | 827 Position positionBeforeContainingSpecialElement(const Position& pos, HTMLElement
** containingSpecialElement) |
| 828 { | 828 { |
| (...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1464 VisibleSelection newSelection(original); | 1464 VisibleSelection newSelection(original); |
| 1465 VisiblePosition startOfSelection(newSelection.visibleStart()); | 1465 VisiblePosition startOfSelection(newSelection.visibleStart()); |
| 1466 VisiblePosition endOfSelection(newSelection.visibleEnd()); | 1466 VisiblePosition endOfSelection(newSelection.visibleEnd()); |
| 1467 | 1467 |
| 1468 // If the end of the selection to modify is just after a table, and | 1468 // If the end of the selection to modify is just after a table, and |
| 1469 // if the start of the selection is inside that table, then the last paragra
ph | 1469 // if the start of the selection is inside that table, then the last paragra
ph |
| 1470 // that we'll want modify is the last one inside the table, not the table it
self | 1470 // that we'll want modify is the last one inside the table, not the table it
self |
| 1471 // (a table is itself a paragraph). | 1471 // (a table is itself a paragraph). |
| 1472 if (Element* table = isFirstPositionAfterTable(endOfSelection)) { | 1472 if (Element* table = isFirstPositionAfterTable(endOfSelection)) { |
| 1473 if (startOfSelection.deepEquivalent().anchorNode()->isDescendantOf(table
)) | 1473 if (startOfSelection.deepEquivalent().anchorNode()->isDescendantOf(table
)) |
| 1474 newSelection = VisibleSelection(startOfSelection, endOfSelection.pre
vious(CannotCrossEditingBoundary)); | 1474 newSelection = VisibleSelection(startOfSelection, previousPositionOf
(endOfSelection, CannotCrossEditingBoundary)); |
| 1475 } | 1475 } |
| 1476 | 1476 |
| 1477 // If the start of the selection to modify is just before a table, | 1477 // If the start of the selection to modify is just before a table, |
| 1478 // and if the end of the selection is inside that table, then the first para
graph | 1478 // and if the end of the selection is inside that table, then the first para
graph |
| 1479 // we'll want to modify is the first one inside the table, not the paragraph | 1479 // we'll want to modify is the first one inside the table, not the paragraph |
| 1480 // containing the table itself. | 1480 // containing the table itself. |
| 1481 if (Element* table = isLastPositionBeforeTable(startOfSelection)) { | 1481 if (Element* table = isLastPositionBeforeTable(startOfSelection)) { |
| 1482 if (endOfSelection.deepEquivalent().anchorNode()->isDescendantOf(table)) | 1482 if (endOfSelection.deepEquivalent().anchorNode()->isDescendantOf(table)) |
| 1483 newSelection = VisibleSelection(startOfSelection.next(CannotCrossEdi
tingBoundary), endOfSelection); | 1483 newSelection = VisibleSelection(startOfSelection.next(CannotCrossEdi
tingBoundary), endOfSelection); |
| 1484 } | 1484 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1607 // if the selection starts just before a paragraph break, skip over it | 1607 // if the selection starts just before a paragraph break, skip over it |
| 1608 if (isEndOfParagraph(visiblePosition)) | 1608 if (isEndOfParagraph(visiblePosition)) |
| 1609 return mostForwardCaretPosition(visiblePosition.next().deepEquivalent())
; | 1609 return mostForwardCaretPosition(visiblePosition.next().deepEquivalent())
; |
| 1610 | 1610 |
| 1611 // otherwise, make sure to be at the start of the first selected node, | 1611 // otherwise, make sure to be at the start of the first selected node, |
| 1612 // instead of possibly at the end of the last node before the selection | 1612 // instead of possibly at the end of the last node before the selection |
| 1613 return mostForwardCaretPosition(visiblePosition.deepEquivalent()); | 1613 return mostForwardCaretPosition(visiblePosition.deepEquivalent()); |
| 1614 } | 1614 } |
| 1615 | 1615 |
| 1616 } // namespace blink | 1616 } // namespace blink |
| OLD | NEW |