Re: Scope, implied end tags, another scope check (detailed review of parsing algorithm)

On Jul 5, 2007, at 10:52, Ian Hickson wrote:

> On Thu, 5 Jul 2007, Henri Sivonen wrote:
>>
>> For some elements the spec says:
>>> If the stack of open elements has an element in scope with the  
>>> same tag name
>>> as that of the token, then generate implied end tags.
>>>
>>> Now, if the current node is not an element with the same tag name  
>>> as that of
>>> the token, then this is a parse error.
>>>
>>> If the stack of open elements has an element in scope with the  
>>> same tag name
>>> as that of the token, then pop elements from this stack until an  
>>> element
>>> with that tag name has been popped from the stack.
>>
>> I can't figure out you one might get the stack in such a state  
>> that the
>> "generate implied end tags" step changed the situation so that the
>> second "If the stack of open elements has an element in scope"  
>> found a
>> different node than the first "If the stack of open elements has an
>> element in scope".
>>
>> Am I right? If yes, it would make sense to write this is a way that
>> doesn't suggest that implementors search the stack twice.
>
> Do you have any proposals for how to phrase it?

Let /node/ be the last element in scope with the same tag name as  
that of the token or null if there isn't such element in scope.

If /node/ is not null, generate implied end tags.

Now, if the current node is not an element with the same tag name as  
that of the token, then this is a parse error.

If /node/ is not null, then pop elements from the stack up to and  
including /node/.

-- 
Henri Sivonen
hsivonen@iki.fi
http://hsivonen.iki.fi/

Received on Thursday, 5 July 2007 08:13:09 UTC