OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005, 2006, 2008, 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2008, 2009 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 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1091 pushDownInlineStyleAroundNode(style, pushDownEnd.deprecatedNode()); | 1091 pushDownInlineStyleAroundNode(style, pushDownEnd.deprecatedNode()); |
1092 | 1092 |
1093 // The s and e variables store the positions used to set the ending selectio
n after style removal | 1093 // The s and e variables store the positions used to set the ending selectio
n after style removal |
1094 // takes place. This will help callers to recognize when either the start no
de or the end node | 1094 // takes place. This will help callers to recognize when either the start no
de or the end node |
1095 // are removed from the document during the work of this function. | 1095 // are removed from the document during the work of this function. |
1096 // If pushDownInlineStyleAroundNode has pruned start.deprecatedNode() or end
.deprecatedNode(), | 1096 // If pushDownInlineStyleAroundNode has pruned start.deprecatedNode() or end
.deprecatedNode(), |
1097 // use pushDownStart or pushDownEnd instead, which pushDownInlineStyleAround
Node won't prune. | 1097 // use pushDownStart or pushDownEnd instead, which pushDownInlineStyleAround
Node won't prune. |
1098 Position s = start.isNull() || start.isOrphan() ? pushDownStart : start; | 1098 Position s = start.isNull() || start.isOrphan() ? pushDownStart : start; |
1099 Position e = end.isNull() || end.isOrphan() ? pushDownEnd : end; | 1099 Position e = end.isNull() || end.isOrphan() ? pushDownEnd : end; |
1100 | 1100 |
1101 Node* node = start.deprecatedNode(); | 1101 RefPtr<Node> node = start.deprecatedNode(); |
1102 while (node) { | 1102 while (node) { |
1103 RefPtr<Node> next; | 1103 RefPtr<Node> next; |
1104 if (editingIgnoresContent(node)) { | 1104 if (editingIgnoresContent(node.get())) { |
1105 ASSERT(node == end.deprecatedNode() || !node->contains(end.deprecate
dNode())); | 1105 ASSERT(node == end.deprecatedNode() || !node->contains(end.deprecate
dNode())); |
1106 next = NodeTraversal::nextSkippingChildren(node); | 1106 next = NodeTraversal::nextSkippingChildren(node.get()); |
1107 } else | 1107 } else { |
1108 next = NodeTraversal::next(node); | 1108 next = NodeTraversal::next(node.get()); |
1109 if (node->isHTMLElement() && nodeFullySelected(node, start, end)) { | 1109 } |
1110 RefPtr<HTMLElement> elem = toHTMLElement(node); | 1110 if (node->isHTMLElement() && nodeFullySelected(node.get(), start, end))
{ |
| 1111 RefPtr<HTMLElement> elem = toHTMLElement(node.get()); |
1111 RefPtr<Node> prev = NodeTraversal::previousPostOrder(elem.get()); | 1112 RefPtr<Node> prev = NodeTraversal::previousPostOrder(elem.get()); |
1112 RefPtr<Node> next = NodeTraversal::next(elem.get()); | 1113 RefPtr<Node> next = NodeTraversal::next(elem.get()); |
1113 RefPtr<EditingStyle> styleToPushDown; | 1114 RefPtr<EditingStyle> styleToPushDown; |
1114 RefPtr<Node> childNode; | 1115 RefPtr<Node> childNode; |
1115 if (isStyledInlineElementToRemove(elem.get())) { | 1116 if (isStyledInlineElementToRemove(elem.get())) { |
1116 styleToPushDown = EditingStyle::create(); | 1117 styleToPushDown = EditingStyle::create(); |
1117 childNode = elem->firstChild(); | 1118 childNode = elem->firstChild(); |
1118 } | 1119 } |
1119 | 1120 |
1120 removeInlineStyleFromElement(style, elem.get(), RemoveIfNeeded, styl
eToPushDown.get()); | 1121 removeInlineStyleFromElement(style, elem.get(), RemoveIfNeeded, styl
eToPushDown.get()); |
(...skipping 13 matching lines...) Expand all Loading... |
1134 } | 1135 } |
1135 } | 1136 } |
1136 | 1137 |
1137 if (styleToPushDown) { | 1138 if (styleToPushDown) { |
1138 for (; childNode; childNode = childNode->nextSibling()) | 1139 for (; childNode; childNode = childNode->nextSibling()) |
1139 applyInlineStyleToPushDown(childNode.get(), styleToPushDown.
get()); | 1140 applyInlineStyleToPushDown(childNode.get(), styleToPushDown.
get()); |
1140 } | 1141 } |
1141 } | 1142 } |
1142 if (node == end.deprecatedNode()) | 1143 if (node == end.deprecatedNode()) |
1143 break; | 1144 break; |
1144 node = next.get(); | 1145 node = next; |
1145 } | 1146 } |
1146 | 1147 |
1147 updateStartEnd(s, e); | 1148 updateStartEnd(s, e); |
1148 } | 1149 } |
1149 | 1150 |
1150 bool ApplyStyleCommand::nodeFullySelected(Node *node, const Position &start, con
st Position &end) const | 1151 bool ApplyStyleCommand::nodeFullySelected(Node *node, const Position &start, con
st Position &end) const |
1151 { | 1152 { |
1152 ASSERT(node); | 1153 ASSERT(node); |
1153 ASSERT(node->isElementNode()); | 1154 ASSERT(node->isElementNode()); |
1154 | 1155 |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1540 String textToMove = nextText->data(); | 1541 String textToMove = nextText->data(); |
1541 insertTextIntoNode(childText, childText->length(), textToMove); | 1542 insertTextIntoNode(childText, childText->length(), textToMove); |
1542 removeNode(next); | 1543 removeNode(next); |
1543 // don't move child node pointer. it may want to merge with more text no
des. | 1544 // don't move child node pointer. it may want to merge with more text no
des. |
1544 } | 1545 } |
1545 | 1546 |
1546 updateStartEnd(newStart, newEnd); | 1547 updateStartEnd(newStart, newEnd); |
1547 } | 1548 } |
1548 | 1549 |
1549 } | 1550 } |
OLD | NEW |