| OLD | NEW |
| 1 /** | 1 /** |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * Copyright (C) 2003, 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. |
| 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) | 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 return firstNode; | 119 return firstNode; |
| 120 } | 120 } |
| 121 | 121 |
| 122 // Returns the next list item with respect to the DOM order. | 122 // Returns the next list item with respect to the DOM order. |
| 123 static RenderListItem* nextListItem(const Node* listNode, const RenderListItem*
item = 0) | 123 static RenderListItem* nextListItem(const Node* listNode, const RenderListItem*
item = 0) |
| 124 { | 124 { |
| 125 if (!listNode) | 125 if (!listNode) |
| 126 return 0; | 126 return 0; |
| 127 | 127 |
| 128 const Node* current = item ? item->node() : listNode; | 128 const Node* current = item ? item->node() : listNode; |
| 129 current = ElementTraversal::nextIncludingPseudo(current, listNode); | 129 ASSERT(current); |
| 130 current = ElementTraversal::nextIncludingPseudo(*current, listNode); |
| 130 | 131 |
| 131 while (current) { | 132 while (current) { |
| 132 if (isList(current)) { | 133 if (isList(current)) { |
| 133 // We've found a nested, independent list: nothing to do here. | 134 // We've found a nested, independent list: nothing to do here. |
| 134 current = ElementTraversal::nextIncludingPseudoSkippingChildren(curr
ent, listNode); | 135 current = ElementTraversal::nextIncludingPseudoSkippingChildren(*cur
rent, listNode); |
| 135 continue; | 136 continue; |
| 136 } | 137 } |
| 137 | 138 |
| 138 RenderObject* renderer = current->renderer(); | 139 RenderObject* renderer = current->renderer(); |
| 139 if (renderer && renderer->isListItem()) | 140 if (renderer && renderer->isListItem()) |
| 140 return toRenderListItem(renderer); | 141 return toRenderListItem(renderer); |
| 141 | 142 |
| 142 // FIXME: Can this be optimized to skip the children of the elements wit
hout a renderer? | 143 // FIXME: Can this be optimized to skip the children of the elements wit
hout a renderer? |
| 143 current = ElementTraversal::nextIncludingPseudo(current, listNode); | 144 current = ElementTraversal::nextIncludingPseudo(*current, listNode); |
| 144 } | 145 } |
| 145 | 146 |
| 146 return 0; | 147 return 0; |
| 147 } | 148 } |
| 148 | 149 |
| 149 // Returns the previous list item with respect to the DOM order. | 150 // Returns the previous list item with respect to the DOM order. |
| 150 static RenderListItem* previousListItem(const Node* listNode, const RenderListIt
em* item) | 151 static RenderListItem* previousListItem(const Node* listNode, const RenderListIt
em* item) |
| 151 { | 152 { |
| 152 Node* current = item->node(); | 153 Node* current = item->node(); |
| 153 ASSERT(current); | 154 ASSERT(current); |
| 154 for (current = ElementTraversal::previousIncludingPseudo(*current, listNode)
; current; current = ElementTraversal::previousIncludingPseudo(*current, listNod
e)) { | 155 for (current = ElementTraversal::previousIncludingPseudo(*current, listNode)
; current; current = ElementTraversal::previousIncludingPseudo(*current, listNod
e)) { |
| 155 RenderObject* renderer = current->renderer(); | 156 RenderObject* renderer = current->renderer(); |
| 156 if (!renderer || (renderer && !renderer->isListItem())) | 157 if (!renderer || (renderer && !renderer->isListItem())) |
| 157 continue; | 158 continue; |
| 158 Node* otherList = enclosingList(toRenderListItem(renderer)); | 159 Node* otherList = enclosingList(toRenderListItem(renderer)); |
| 159 // This item is part of our current list, so it's what we're looking for
. | 160 // This item is part of our current list, so it's what we're looking for
. |
| 160 if (listNode == otherList) | 161 if (listNode == otherList) |
| 161 return toRenderListItem(renderer); | 162 return toRenderListItem(renderer); |
| 162 // We found ourself inside another list; lets skip the rest of it. | 163 // We found ourself inside another list; lets skip the rest of it. |
| 163 // Use nextIncludingPseudo() here because the other list itself may actu
ally | 164 // Use nextIncludingPseudo() here because the other list itself may actu
ally |
| 164 // be a list item itself. We need to examine it, so we do this to counte
ract | 165 // be a list item itself. We need to examine it, so we do this to counte
ract |
| 165 // the previousIncludingPseudo() that will be done by the loop. | 166 // the previousIncludingPseudo() that will be done by the loop. |
| 166 if (otherList) | 167 if (otherList) |
| 167 current = ElementTraversal::nextIncludingPseudo(otherList); | 168 current = ElementTraversal::nextIncludingPseudo(*otherList); |
| 168 } | 169 } |
| 169 return 0; | 170 return 0; |
| 170 } | 171 } |
| 171 | 172 |
| 172 void RenderListItem::updateItemValuesForOrderedList(const HTMLOListElement* list
Node) | 173 void RenderListItem::updateItemValuesForOrderedList(const HTMLOListElement* list
Node) |
| 173 { | 174 { |
| 174 ASSERT(listNode); | 175 ASSERT(listNode); |
| 175 | 176 |
| 176 for (RenderListItem* listItem = nextListItem(listNode); listItem; listItem =
nextListItem(listNode, listItem)) | 177 for (RenderListItem* listItem = nextListItem(listNode); listItem; listItem =
nextListItem(listNode, listItem)) |
| 177 listItem->updateValue(); | 178 listItem->updateValue(); |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 // assume that all the following ones have too. | 517 // assume that all the following ones have too. |
| 517 // This gives us the opportunity to stop here and avoid | 518 // This gives us the opportunity to stop here and avoid |
| 518 // marking the same nodes again. | 519 // marking the same nodes again. |
| 519 break; | 520 break; |
| 520 } | 521 } |
| 521 item->updateValue(); | 522 item->updateValue(); |
| 522 } | 523 } |
| 523 } | 524 } |
| 524 | 525 |
| 525 } // namespace WebCore | 526 } // namespace WebCore |
| OLD | NEW |