| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
| 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 917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 928 RenderObject& renderer = root->closestLeafChildForPoint(pointInLine, isE
ditablePosition(p))->renderer(); | 928 RenderObject& renderer = root->closestLeafChildForPoint(pointInLine, isE
ditablePosition(p))->renderer(); |
| 929 Node* node = renderer.node(); | 929 Node* node = renderer.node(); |
| 930 if (node && editingIgnoresContent(node)) | 930 if (node && editingIgnoresContent(node)) |
| 931 return VisiblePosition(positionInParentBeforeNode(*node)); | 931 return VisiblePosition(positionInParentBeforeNode(*node)); |
| 932 return VisiblePosition(renderer.positionForPoint(pointInLine)); | 932 return VisiblePosition(renderer.positionForPoint(pointInLine)); |
| 933 } | 933 } |
| 934 | 934 |
| 935 // Could not find a previous line. This means we must already be on the firs
t line. | 935 // Could not find a previous line. This means we must already be on the firs
t line. |
| 936 // Move to the start of the content in this block, which effectively moves u
s | 936 // Move to the start of the content in this block, which effectively moves u
s |
| 937 // to the start of the line we're on. | 937 // to the start of the line we're on. |
| 938 Element* rootElement = node->hasEditableStyle(editableType) ? node->rootEdit
ableElement(editableType) : node->document().documentElement(); | 938 ContainerNode* rootContainer = &node->document(); |
| 939 if (!rootElement) | 939 if (node->hasEditableStyle(editableType)) |
| 940 rootContainer = node->rootEditableElement(editableType); |
| 941 if (!rootContainer) |
| 940 return VisiblePosition(); | 942 return VisiblePosition(); |
| 941 return VisiblePosition(firstPositionInNode(rootElement), DOWNSTREAM); | 943 return VisiblePosition(firstPositionInNode(rootContainer), DOWNSTREAM); |
| 942 } | 944 } |
| 943 | 945 |
| 944 VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int lin
eDirectionPoint, EditableType editableType) | 946 VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int lin
eDirectionPoint, EditableType editableType) |
| 945 { | 947 { |
| 946 Position p = visiblePosition.deepEquivalent(); | 948 Position p = visiblePosition.deepEquivalent(); |
| 947 Node* node = p.deprecatedNode(); | 949 Node* node = p.deprecatedNode(); |
| 948 | 950 |
| 949 if (!node) | 951 if (!node) |
| 950 return VisiblePosition(); | 952 return VisiblePosition(); |
| 951 | 953 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 986 RenderObject& renderer = root->closestLeafChildForPoint(pointInLine, isE
ditablePosition(p))->renderer(); | 988 RenderObject& renderer = root->closestLeafChildForPoint(pointInLine, isE
ditablePosition(p))->renderer(); |
| 987 Node* node = renderer.node(); | 989 Node* node = renderer.node(); |
| 988 if (node && editingIgnoresContent(node)) | 990 if (node && editingIgnoresContent(node)) |
| 989 return VisiblePosition(positionInParentBeforeNode(*node)); | 991 return VisiblePosition(positionInParentBeforeNode(*node)); |
| 990 return VisiblePosition(renderer.positionForPoint(pointInLine)); | 992 return VisiblePosition(renderer.positionForPoint(pointInLine)); |
| 991 } | 993 } |
| 992 | 994 |
| 993 // Could not find a next line. This means we must already be on the last lin
e. | 995 // Could not find a next line. This means we must already be on the last lin
e. |
| 994 // Move to the end of the content in this block, which effectively moves us | 996 // Move to the end of the content in this block, which effectively moves us |
| 995 // to the end of the line we're on. | 997 // to the end of the line we're on. |
| 996 Element* rootElement = node->hasEditableStyle(editableType) ? node->rootEdit
ableElement(editableType) : node->document().documentElement(); | 998 ContainerNode* rootContainer = &node->document(); |
| 997 if (!rootElement) | 999 if (node->hasEditableStyle(editableType)) |
| 1000 rootContainer = node->rootEditableElement(editableType); |
| 1001 if (!rootContainer) |
| 998 return VisiblePosition(); | 1002 return VisiblePosition(); |
| 999 return VisiblePosition(lastPositionInNode(rootElement), DOWNSTREAM); | 1003 return VisiblePosition(lastPositionInNode(rootContainer), DOWNSTREAM); |
| 1000 } | 1004 } |
| 1001 | 1005 |
| 1002 // --------- | 1006 // --------- |
| 1003 | 1007 |
| 1004 static unsigned startSentenceBoundary(const UChar* characters, unsigned length,
unsigned, BoundarySearchContextAvailability, bool&) | 1008 static unsigned startSentenceBoundary(const UChar* characters, unsigned length,
unsigned, BoundarySearchContextAvailability, bool&) |
| 1005 { | 1009 { |
| 1006 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); | 1010 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); |
| 1007 // FIXME: The following function can return -1; we don't handle that. | 1011 // FIXME: The following function can return -1; we don't handle that. |
| 1008 return iterator->preceding(length); | 1012 return iterator->preceding(length); |
| 1009 } | 1013 } |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1277 | 1281 |
| 1278 bool isEndOfBlock(const VisiblePosition &pos) | 1282 bool isEndOfBlock(const VisiblePosition &pos) |
| 1279 { | 1283 { |
| 1280 return pos.isNotNull() && pos == endOfBlock(pos, CanCrossEditingBoundary); | 1284 return pos.isNotNull() && pos == endOfBlock(pos, CanCrossEditingBoundary); |
| 1281 } | 1285 } |
| 1282 | 1286 |
| 1283 // --------- | 1287 // --------- |
| 1284 | 1288 |
| 1285 VisiblePosition startOfDocument(const Node* node) | 1289 VisiblePosition startOfDocument(const Node* node) |
| 1286 { | 1290 { |
| 1287 if (!node || !node->document().documentElement()) | 1291 if (!node) |
| 1288 return VisiblePosition(); | 1292 return VisiblePosition(); |
| 1289 | 1293 |
| 1290 return VisiblePosition(firstPositionInNode(node->document().documentElement(
)), DOWNSTREAM); | 1294 return VisiblePosition(firstPositionInNode(&node->document()), DOWNSTREAM); |
| 1291 } | 1295 } |
| 1292 | 1296 |
| 1293 VisiblePosition startOfDocument(const VisiblePosition &c) | 1297 VisiblePosition startOfDocument(const VisiblePosition &c) |
| 1294 { | 1298 { |
| 1295 return startOfDocument(c.deepEquivalent().deprecatedNode()); | 1299 return startOfDocument(c.deepEquivalent().deprecatedNode()); |
| 1296 } | 1300 } |
| 1297 | 1301 |
| 1298 VisiblePosition endOfDocument(const Node* node) | 1302 VisiblePosition endOfDocument(const Node* node) |
| 1299 { | 1303 { |
| 1300 if (!node || !node->document().documentElement()) | 1304 if (!node) |
| 1301 return VisiblePosition(); | 1305 return VisiblePosition(); |
| 1302 | 1306 |
| 1303 Element* doc = node->document().documentElement(); | 1307 return VisiblePosition(lastPositionInNode(&node->document()), DOWNSTREAM); |
| 1304 return VisiblePosition(lastPositionInNode(doc), DOWNSTREAM); | |
| 1305 } | 1308 } |
| 1306 | 1309 |
| 1307 VisiblePosition endOfDocument(const VisiblePosition &c) | 1310 VisiblePosition endOfDocument(const VisiblePosition &c) |
| 1308 { | 1311 { |
| 1309 return endOfDocument(c.deepEquivalent().deprecatedNode()); | 1312 return endOfDocument(c.deepEquivalent().deprecatedNode()); |
| 1310 } | 1313 } |
| 1311 | 1314 |
| 1312 bool isStartOfDocument(const VisiblePosition &p) | 1315 bool isStartOfDocument(const VisiblePosition &p) |
| 1313 { | 1316 { |
| 1314 return p.isNotNull() && p.previous(CanCrossEditingBoundary).isNull(); | 1317 return p.isNotNull() && p.previous(CanCrossEditingBoundary).isNull(); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1370 int caretOffset; | 1373 int caretOffset; |
| 1371 position.position().getInlineBoxAndOffset(position.affinity(), inlineBox, ca
retOffset); | 1374 position.position().getInlineBoxAndOffset(position.affinity(), inlineBox, ca
retOffset); |
| 1372 | 1375 |
| 1373 if (inlineBox) | 1376 if (inlineBox) |
| 1374 renderer = &inlineBox->renderer(); | 1377 renderer = &inlineBox->renderer(); |
| 1375 | 1378 |
| 1376 return renderer->localCaretRect(inlineBox, caretOffset); | 1379 return renderer->localCaretRect(inlineBox, caretOffset); |
| 1377 } | 1380 } |
| 1378 | 1381 |
| 1379 } | 1382 } |
| OLD | NEW |