| 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 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 | 302 |
| 303 // FIXME: Deploy this in all of the places where enclosingBlockFlow/enclosingBlo
ckFlowOrTableElement are used. | 303 // FIXME: Deploy this in all of the places where enclosingBlockFlow/enclosingBlo
ckFlowOrTableElement are used. |
| 304 // FIXME: Pass a position to this function. The enclosing block of [table, x] f
or example, should be the | 304 // FIXME: Pass a position to this function. The enclosing block of [table, x] f
or example, should be the |
| 305 // block that contains the table and not the table, and this function should be
the only one responsible for | 305 // block that contains the table and not the table, and this function should be
the only one responsible for |
| 306 // knowing about these kinds of special cases. | 306 // knowing about these kinds of special cases. |
| 307 Node* enclosingBlock(Node* node) | 307 Node* enclosingBlock(Node* node) |
| 308 { | 308 { |
| 309 return static_cast<Element*>(enclosingNodeOfType(Position(node, 0), isBlock)
); | 309 return static_cast<Element*>(enclosingNodeOfType(Position(node, 0), isBlock)
); |
| 310 } | 310 } |
| 311 | 311 |
| 312 // Internally editing uses "invalid" positions for historical reasons. For |
| 313 // example, in <div><img /></div>, Editing might use (img, 1) for the position |
| 314 // after <img>, but we have to convert that to (div, 1) before handing the |
| 315 // position to a Range object. Ideally all internal positions should |
| 316 // be "range compliant" for simplicity. |
| 312 Position rangeCompliantEquivalent(const Position& pos) | 317 Position rangeCompliantEquivalent(const Position& pos) |
| 313 { | 318 { |
| 314 if (pos.isNull()) | 319 if (pos.isNull()) |
| 315 return Position(); | 320 return Position(); |
| 316 | 321 |
| 317 Node *node = pos.node(); | 322 Node* node = pos.node(); |
| 318 | 323 |
| 319 if (pos.offset() <= 0) { | 324 if (pos.offset() <= 0) { |
| 320 if (node->parentNode() && (editingIgnoresContent(node) || isTableElement
(node))) | 325 if (node->parentNode() && (editingIgnoresContent(node) || isTableElement
(node))) |
| 321 return positionBeforeNode(node); | 326 return positionBeforeNode(node); |
| 322 return Position(node, 0); | 327 return Position(node, 0); |
| 323 } | 328 } |
| 324 | 329 |
| 325 if (node->offsetInCharacters()) | 330 if (node->offsetInCharacters()) |
| 326 return Position(node, min(node->maxCharacterOffset(), pos.offset())); | 331 return Position(node, min(node->maxCharacterOffset(), pos.offset())); |
| 327 | 332 |
| 328 int maxCompliantOffset = node->childNodeCount(); | 333 int maxCompliantOffset = node->childNodeCount(); |
| 329 if (pos.offset() > maxCompliantOffset) { | 334 if (pos.offset() > maxCompliantOffset) { |
| 330 if (node->parentNode()) | 335 if (node->parentNode()) |
| 331 return positionAfterNode(node); | 336 return positionAfterNode(node); |
| 332 | 337 |
| 333 // there is no other option at this point than to | 338 // there is no other option at this point than to |
| 334 // use the highest allowed position in the node | 339 // use the highest allowed position in the node |
| 335 return Position(node, maxCompliantOffset); | 340 return Position(node, maxCompliantOffset); |
| 336 } | 341 } |
| 337 | 342 |
| 338 // Editing should never generate positions like this. | 343 // Editing should never generate positions like this. |
| 339 if ((pos.offset() < maxCompliantOffset) && editingIgnoresContent(node)) { | 344 if ((pos.offset() < maxCompliantOffset) && editingIgnoresContent(node)) { |
| 340 ASSERT_NOT_REACHED(); | 345 ASSERT_NOT_REACHED(); |
| 341 return node->parentNode() ? positionBeforeNode(node) : Position(node, 0)
; | 346 return node->parentNode() ? positionBeforeNode(node) : Position(node, 0)
; |
| 342 } | 347 } |
| (...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 996 ASSERT(node->parentNode()); | 1001 ASSERT(node->parentNode()); |
| 997 updatedSelection.setExtent(Position(node->parentNode(), node->nodeIndex(
))); | 1002 updatedSelection.setExtent(Position(node->parentNode(), node->nodeIndex(
))); |
| 998 } | 1003 } |
| 999 | 1004 |
| 1000 return updatedSelection; | 1005 return updatedSelection; |
| 1001 } | 1006 } |
| 1002 | 1007 |
| 1003 } // namespace WebCore | 1008 } // namespace WebCore |
| 1004 | 1009 |
| 1005 | 1010 |
| OLD | NEW |