Skip to content

Commit

Permalink
Fix adoption agency algorithm (closes #129)
Browse files Browse the repository at this point in the history
  • Loading branch information
inikulin committed Aug 1, 2016
1 parent 1116935 commit 332f607
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions lib/parser/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -909,30 +909,36 @@ function aaInnerLoop(p, furthestBlock, formattingElement) {
lastElement = furthestBlock,
nextElement = p.openElements.getCommonAncestor(furthestBlock);

for (var i = 0; i < AA_INNER_LOOP_ITER; i++) {
for (var i = 0; ; i++) {
element = nextElement;

//NOTE: store next element for the next loop iteration (it may be deleted from the stack by step 9.5)
nextElement = p.openElements.getCommonAncestor(element);

var elementEntry = p.activeFormattingElements.getElementEntry(element);
if (element === formattingElement)
break;

var elementEntry = p.activeFormattingElements.getElementEntry(element),
counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER,
shouldRemoveFromOpenElements = !elementEntry || counterOverflow;

if (shouldRemoveFromOpenElements) {
if (counterOverflow)
p.activeFormattingElements.removeEntry(elementEntry);

if (!elementEntry) {
p.openElements.remove(element);
continue;
}

if (element === formattingElement)
break;

element = aaRecreateElementFromEntry(p, elementEntry);
else {
element = aaRecreateElementFromEntry(p, elementEntry);

if (lastElement === furthestBlock)
p.activeFormattingElements.bookmark = elementEntry;
if (lastElement === furthestBlock)
p.activeFormattingElements.bookmark = elementEntry;

p.treeAdapter.detachNode(lastElement);
p.treeAdapter.appendChild(element, lastElement);
lastElement = element;
p.treeAdapter.detachNode(lastElement);
p.treeAdapter.appendChild(element, lastElement);
lastElement = element;
}
}

return lastElement;
Expand Down

0 comments on commit 332f607

Please sign in to comment.