OLD | NEW |
1 /** | 1 /** |
2 * Copyright (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 2 * Copyright (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. | 3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 // We are also a reset counter and the previous rese
t was on a sibling renderer | 316 // We are also a reset counter and the previous rese
t was on a sibling renderer |
317 // hence we are the next sibling of that counter if
that reset is not a root or | 317 // hence we are the next sibling of that counter if
that reset is not a root or |
318 // we are a root node if that reset is a root. | 318 // we are a root node if that reset is a root. |
319 parent = currentCounter->parent(); | 319 parent = currentCounter->parent(); |
320 previousSibling = parent ? currentCounter : 0; | 320 previousSibling = parent ? currentCounter : 0; |
321 return parent; | 321 return parent; |
322 } | 322 } |
323 // We are not a reset node or the previous reset must be
on an ancestor of our owner renderer | 323 // We are not a reset node or the previous reset must be
on an ancestor of our owner renderer |
324 // hence we must be a child of that reset counter. | 324 // hence we must be a child of that reset counter. |
325 parent = currentCounter; | 325 parent = currentCounter; |
326 ASSERT(previousSibling->parent() == currentCounter); | 326 // In some cases renders can be reparented (ex. nodes in
side a table but not in a column or row). |
| 327 // In these cases the identified previousSibling will be
invalid as its parent is different from |
| 328 // our identified parent. |
| 329 if (previousSibling->parent() != currentCounter) |
| 330 previousSibling = 0; |
327 return true; | 331 return true; |
328 } | 332 } |
329 // CurrentCounter, the counter at the EndSearchRenderer, is
not reset. | 333 // CurrentCounter, the counter at the EndSearchRenderer, is
not reset. |
330 if (!isReset || !areRenderersElementsSiblings(currentRendere
r, counterOwner)) { | 334 if (!isReset || !areRenderersElementsSiblings(currentRendere
r, counterOwner)) { |
331 // If the node we are placing is not reset or we have fo
und a counter that is attached | 335 // If the node we are placing is not reset or we have fo
und a counter that is attached |
332 // to an ancestor of the placed counter's owner renderer
we know we are a sibling of that node. | 336 // to an ancestor of the placed counter's owner renderer
we know we are a sibling of that node. |
333 ASSERT(currentCounter->parent() == previousSibling->pare
nt()); | 337 ASSERT(currentCounter->parent() == previousSibling->pare
nt()); |
334 parent = currentCounter->parent(); | 338 parent = currentCounter->parent(); |
335 return true; | 339 return true; |
336 } | 340 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 Element* stayWithin = parentElement(object); | 436 Element* stayWithin = parentElement(object); |
433 bool skipDescendants; | 437 bool skipDescendants; |
434 for (RenderObject* currentRenderer = nextInPreOrder(object, stayWithin); cur
rentRenderer; currentRenderer = nextInPreOrder(currentRenderer, stayWithin, skip
Descendants)) { | 438 for (RenderObject* currentRenderer = nextInPreOrder(object, stayWithin); cur
rentRenderer; currentRenderer = nextInPreOrder(currentRenderer, stayWithin, skip
Descendants)) { |
435 skipDescendants = false; | 439 skipDescendants = false; |
436 if (!currentRenderer->m_hasCounterNodeMap) | 440 if (!currentRenderer->m_hasCounterNodeMap) |
437 continue; | 441 continue; |
438 CounterNode* currentCounter = maps.get(currentRenderer)->get(identifier.
impl()).get(); | 442 CounterNode* currentCounter = maps.get(currentRenderer)->get(identifier.
impl()).get(); |
439 if (!currentCounter) | 443 if (!currentCounter) |
440 continue; | 444 continue; |
441 skipDescendants = true; | 445 skipDescendants = true; |
442 if (currentCounter->parent()) { | 446 if (currentCounter->parent()) |
443 ASSERT(newNode->firstChild()); | |
444 continue; | 447 continue; |
445 } | |
446 if (stayWithin == parentElement(currentRenderer) && currentCounter->hasR
esetType()) | 448 if (stayWithin == parentElement(currentRenderer) && currentCounter->hasR
esetType()) |
447 break; | 449 break; |
448 newNode->insertAfter(currentCounter, newNode->lastChild(), identifier); | 450 newNode->insertAfter(currentCounter, newNode->lastChild(), identifier); |
449 } | 451 } |
450 return newNode.get(); | 452 return newNode.get(); |
451 } | 453 } |
452 | 454 |
453 RenderCounter::RenderCounter(Document* node, const CounterContent& counter) | 455 RenderCounter::RenderCounter(Document* node, const CounterContent& counter) |
454 : RenderText(node, StringImpl::empty()) | 456 : RenderText(node, StringImpl::empty()) |
455 , m_counter(counter) | 457 , m_counter(counter) |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 fprintf(stderr, " "); | 705 fprintf(stderr, " "); |
704 fprintf(stderr, "%p N:%p P:%p PS:%p NS:%p C:%p\n", | 706 fprintf(stderr, "%p N:%p P:%p PS:%p NS:%p C:%p\n", |
705 current, current->node(), current->parent(), current->previousSiblin
g(), | 707 current, current->node(), current->parent(), current->previousSiblin
g(), |
706 current->nextSibling(), current->m_hasCounterNodeMap? | 708 current->nextSibling(), current->m_hasCounterNodeMap? |
707 counterName ? WebCore::counterMaps().get(current)->get(identifier.im
pl()).get() : (WebCore::CounterNode*)1 : (WebCore::CounterNode*)0); | 709 counterName ? WebCore::counterMaps().get(current)->get(identifier.im
pl()).get() : (WebCore::CounterNode*)1 : (WebCore::CounterNode*)0); |
708 } | 710 } |
709 fflush(stderr); | 711 fflush(stderr); |
710 } | 712 } |
711 | 713 |
712 #endif // NDEBUG | 714 #endif // NDEBUG |
OLD | NEW |