| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2005 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 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 CompositeEditCommand::deleteTextFromNode(node, offset, count); | 424 CompositeEditCommand::deleteTextFromNode(node, offset, count); |
| 425 } | 425 } |
| 426 | 426 |
| 427 void DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPr
eventStyleLoss() | 427 void DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPr
eventStyleLoss() |
| 428 { | 428 { |
| 429 RefPtr<Range> range = m_selectionToDelete.toNormalizedRange(); | 429 RefPtr<Range> range = m_selectionToDelete.toNormalizedRange(); |
| 430 RefPtr<Node> node = range->firstNode(); | 430 RefPtr<Node> node = range->firstNode(); |
| 431 while (node && node != range->pastLastNode()) { | 431 while (node && node != range->pastLastNode()) { |
| 432 RefPtr<Node> nextNode = NodeTraversal::next(*node); | 432 RefPtr<Node> nextNode = NodeTraversal::next(*node); |
| 433 if ((node->hasTagName(styleTag) && !(toElement(node)->hasAttribute(scope
dAttr))) || node->hasTagName(linkTag)) { | 433 if ((node->hasTagName(styleTag) && !(toElement(node)->hasAttribute(scope
dAttr))) || node->hasTagName(linkTag)) { |
| 434 nextNode = NodeTraversal::nextSkippingChildren(node.get()); | 434 nextNode = NodeTraversal::nextSkippingChildren(*node); |
| 435 RefPtr<ContainerNode> rootEditableElement = node->rootEditableElemen
t(); | 435 RefPtr<ContainerNode> rootEditableElement = node->rootEditableElemen
t(); |
| 436 if (rootEditableElement.get()) { | 436 if (rootEditableElement.get()) { |
| 437 removeNode(node); | 437 removeNode(node); |
| 438 appendNode(node, rootEditableElement); | 438 appendNode(node, rootEditableElement); |
| 439 } | 439 } |
| 440 } | 440 } |
| 441 node = nextNode; | 441 node = nextNode; |
| 442 } | 442 } |
| 443 } | 443 } |
| 444 | 444 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 461 return; | 461 return; |
| 462 } | 462 } |
| 463 | 463 |
| 464 if (startOffset >= caretMaxOffset(startNode) && startNode->isTextNode()) { | 464 if (startOffset >= caretMaxOffset(startNode) && startNode->isTextNode()) { |
| 465 Text* text = toText(startNode); | 465 Text* text = toText(startNode); |
| 466 if (text->length() > (unsigned)caretMaxOffset(startNode)) | 466 if (text->length() > (unsigned)caretMaxOffset(startNode)) |
| 467 deleteTextFromNode(text, caretMaxOffset(startNode), text->length() -
caretMaxOffset(startNode)); | 467 deleteTextFromNode(text, caretMaxOffset(startNode), text->length() -
caretMaxOffset(startNode)); |
| 468 } | 468 } |
| 469 | 469 |
| 470 if (startOffset >= lastOffsetForEditing(startNode)) { | 470 if (startOffset >= lastOffsetForEditing(startNode)) { |
| 471 startNode = NodeTraversal::nextSkippingChildren(startNode); | 471 startNode = NodeTraversal::nextSkippingChildren(*startNode); |
| 472 startOffset = 0; | 472 startOffset = 0; |
| 473 } | 473 } |
| 474 | 474 |
| 475 // Done adjusting the start. See if we're all done. | 475 // Done adjusting the start. See if we're all done. |
| 476 if (!startNode) | 476 if (!startNode) |
| 477 return; | 477 return; |
| 478 | 478 |
| 479 if (startNode == m_downstreamEnd.deprecatedNode()) { | 479 if (startNode == m_downstreamEnd.deprecatedNode()) { |
| 480 if (m_downstreamEnd.deprecatedEditingOffset() - startOffset > 0) { | 480 if (m_downstreamEnd.deprecatedEditingOffset() - startOffset > 0) { |
| 481 if (startNode->isTextNode()) { | 481 if (startNode->isTextNode()) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 510 Text* text = toText(m_upstreamEnd.deprecatedNode()); | 510 Text* text = toText(m_upstreamEnd.deprecatedNode()); |
| 511 deleteTextFromNode(text, 0, m_upstreamEnd.deprecatedEditingOffset())
; | 511 deleteTextFromNode(text, 0, m_upstreamEnd.deprecatedEditingOffset())
; |
| 512 } | 512 } |
| 513 | 513 |
| 514 // handle deleting all nodes that are completely selected | 514 // handle deleting all nodes that are completely selected |
| 515 while (node && node != m_downstreamEnd.deprecatedNode()) { | 515 while (node && node != m_downstreamEnd.deprecatedNode()) { |
| 516 if (comparePositions(firstPositionInOrBeforeNode(node.get()), m_down
streamEnd) >= 0) { | 516 if (comparePositions(firstPositionInOrBeforeNode(node.get()), m_down
streamEnd) >= 0) { |
| 517 // NodeTraversal::nextSkippingChildren just blew past the end po
sition, so stop deleting | 517 // NodeTraversal::nextSkippingChildren just blew past the end po
sition, so stop deleting |
| 518 node = 0; | 518 node = 0; |
| 519 } else if (!m_downstreamEnd.deprecatedNode()->isDescendantOf(node.ge
t())) { | 519 } else if (!m_downstreamEnd.deprecatedNode()->isDescendantOf(node.ge
t())) { |
| 520 RefPtr<Node> nextNode = NodeTraversal::nextSkippingChildren(node
.get()); | 520 RefPtr<Node> nextNode = NodeTraversal::nextSkippingChildren(*nod
e); |
| 521 // if we just removed a node from the end container, update end
position so the | 521 // if we just removed a node from the end container, update end
position so the |
| 522 // check above will work | 522 // check above will work |
| 523 updatePositionForNodeRemoval(m_downstreamEnd, node.get()); | 523 updatePositionForNodeRemoval(m_downstreamEnd, node.get()); |
| 524 removeNode(node.get()); | 524 removeNode(node.get()); |
| 525 node = nextNode.get(); | 525 node = nextNode.get(); |
| 526 } else { | 526 } else { |
| 527 Node& n = node->lastDescendant(); | 527 Node& n = node->lastDescendant(); |
| 528 if (m_downstreamEnd.deprecatedNode() == n && m_downstreamEnd.dep
recatedEditingOffset() >= caretMaxOffset(&n)) { | 528 if (m_downstreamEnd.deprecatedNode() == n && m_downstreamEnd.dep
recatedEditingOffset() >= caretMaxOffset(&n)) { |
| 529 removeNode(node.get()); | 529 removeNode(node.get()); |
| 530 node = 0; | 530 node = 0; |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 855 | 855 |
| 856 // Normally deletion doesn't preserve the typing style that was present before i
t. For example, | 856 // Normally deletion doesn't preserve the typing style that was present before i
t. For example, |
| 857 // type a character, Bold, then delete the character and start typing. The Bold
typing style shouldn't | 857 // type a character, Bold, then delete the character and start typing. The Bold
typing style shouldn't |
| 858 // stick around. Deletion should preserve a typing style that *it* sets, howeve
r. | 858 // stick around. Deletion should preserve a typing style that *it* sets, howeve
r. |
| 859 bool DeleteSelectionCommand::preservesTypingStyle() const | 859 bool DeleteSelectionCommand::preservesTypingStyle() const |
| 860 { | 860 { |
| 861 return m_typingStyle; | 861 return m_typingStyle; |
| 862 } | 862 } |
| 863 | 863 |
| 864 } // namespace WebCore | 864 } // namespace WebCore |
| OLD | NEW |