| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 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 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 if (!m_anchorNode->offsetInCharacters() | 224 if (!m_anchorNode->offsetInCharacters() |
| 225 && (m_anchorType == PositionIsAfterAnchor || m_anchorType == PositionIsA
fterChildren || static_cast<unsigned>(m_offset) == m_anchorNode->countChildren()
) | 225 && (m_anchorType == PositionIsAfterAnchor || m_anchorType == PositionIsA
fterChildren || static_cast<unsigned>(m_offset) == m_anchorNode->countChildren()
) |
| 226 && (editingIgnoresContent(m_anchorNode.get()) || isRenderedHTMLTableElem
ent(m_anchorNode.get())) | 226 && (editingIgnoresContent(m_anchorNode.get()) || isRenderedHTMLTableElem
ent(m_anchorNode.get())) |
| 227 && containerNode()) { | 227 && containerNode()) { |
| 228 return positionInParentAfterNode(*m_anchorNode); | 228 return positionInParentAfterNode(*m_anchorNode); |
| 229 } | 229 } |
| 230 | 230 |
| 231 return Position(containerNode(), computeOffsetInContainerNode(), PositionIsO
ffsetInAnchor); | 231 return Position(containerNode(), computeOffsetInContainerNode(), PositionIsO
ffsetInAnchor); |
| 232 } | 232 } |
| 233 | 233 |
| 234 Position Position::toOffsetInAnchor() const |
| 235 { |
| 236 if (isNull()) |
| 237 return Position(); |
| 238 |
| 239 return Position(containerNode(), computeOffsetInContainerNode(), Position::P
ositionIsOffsetInAnchor); |
| 240 } |
| 241 |
| 234 Node* Position::computeNodeBeforePosition() const | 242 Node* Position::computeNodeBeforePosition() const |
| 235 { | 243 { |
| 236 if (!m_anchorNode) | 244 if (!m_anchorNode) |
| 237 return 0; | 245 return 0; |
| 238 switch (anchorType()) { | 246 switch (anchorType()) { |
| 239 case PositionIsBeforeChildren: | 247 case PositionIsBeforeChildren: |
| 240 return 0; | 248 return 0; |
| 241 case PositionIsAfterChildren: | 249 case PositionIsAfterChildren: |
| 242 return m_anchorNode->lastChild(); | 250 return m_anchorNode->lastChild(); |
| 243 case PositionIsOffsetInAnchor: | 251 case PositionIsOffsetInAnchor: |
| (...skipping 21 matching lines...) Expand all Loading... |
| 265 return NodeTraversal::childAt(*m_anchorNode, m_offset); | 273 return NodeTraversal::childAt(*m_anchorNode, m_offset); |
| 266 case PositionIsBeforeAnchor: | 274 case PositionIsBeforeAnchor: |
| 267 return m_anchorNode.get(); | 275 return m_anchorNode.get(); |
| 268 case PositionIsAfterAnchor: | 276 case PositionIsAfterAnchor: |
| 269 return m_anchorNode->nextSibling(); | 277 return m_anchorNode->nextSibling(); |
| 270 } | 278 } |
| 271 ASSERT_NOT_REACHED(); | 279 ASSERT_NOT_REACHED(); |
| 272 return 0; | 280 return 0; |
| 273 } | 281 } |
| 274 | 282 |
| 283 // An implementation of |Range::firstNode()|. |
| 284 Node* Position::nodeAsRangeFirstNode() const |
| 285 { |
| 286 ASSERT(m_anchorType == PositionIsOffsetInAnchor); |
| 287 if (!m_anchorNode) |
| 288 return nullptr; |
| 289 if (m_anchorNode->offsetInCharacters()) |
| 290 return m_anchorNode.get(); |
| 291 if (Node* child = NodeTraversal::childAt(*m_anchorNode, m_offset)) |
| 292 return child; |
| 293 if (!m_offset) |
| 294 return m_anchorNode.get(); |
| 295 return NodeTraversal::nextSkippingChildren(*m_anchorNode); |
| 296 } |
| 297 |
| 298 // An implementation of |Range::pastLastNode()|. |
| 299 Node* Position::nodeAsRangePastLastNode() const |
| 300 { |
| 301 ASSERT(m_anchorType == PositionIsOffsetInAnchor); |
| 302 if (!m_anchorNode) |
| 303 return nullptr; |
| 304 if (m_anchorNode->offsetInCharacters()) |
| 305 return NodeTraversal::nextSkippingChildren(*m_anchorNode); |
| 306 if (Node* child = NodeTraversal::childAt(*m_anchorNode, m_offset)) |
| 307 return child; |
| 308 return NodeTraversal::nextSkippingChildren(*m_anchorNode); |
| 309 } |
| 310 |
| 275 Position::AnchorType Position::anchorTypeForLegacyEditingPosition(Node* anchorNo
de, int offset) | 311 Position::AnchorType Position::anchorTypeForLegacyEditingPosition(Node* anchorNo
de, int offset) |
| 276 { | 312 { |
| 277 if (anchorNode && editingIgnoresContent(anchorNode)) { | 313 if (anchorNode && editingIgnoresContent(anchorNode)) { |
| 278 if (offset == 0) | 314 if (offset == 0) |
| 279 return Position::PositionIsBeforeAnchor; | 315 return Position::PositionIsBeforeAnchor; |
| 280 return Position::PositionIsAfterAnchor; | 316 return Position::PositionIsAfterAnchor; |
| 281 } | 317 } |
| 282 return Position::PositionIsOffsetInAnchor; | 318 return Position::PositionIsOffsetInAnchor; |
| 283 } | 319 } |
| 284 | 320 |
| (...skipping 1028 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1313 pos.showTreeForThis(); | 1349 pos.showTreeForThis(); |
| 1314 } | 1350 } |
| 1315 | 1351 |
| 1316 void showTree(const blink::Position* pos) | 1352 void showTree(const blink::Position* pos) |
| 1317 { | 1353 { |
| 1318 if (pos) | 1354 if (pos) |
| 1319 pos->showTreeForThis(); | 1355 pos->showTreeForThis(); |
| 1320 } | 1356 } |
| 1321 | 1357 |
| 1322 #endif | 1358 #endif |
| OLD | NEW |