mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
Bug 569528 - Make <p> not close implicitly across a <button> on stack. rs=jonas, a=blocking2.0-final.
--HG-- extra : rebase_source : cb0b77f12787278883c3c1ef8d3d0906c86a327a
This commit is contained in:
parent
9490daf18d
commit
a5d88062d8
@ -539,7 +539,7 @@ public final class ElementName
|
||||
public static final ElementName APPLET = new ElementName("applet", "applet", TreeBuilder.MARQUEE_OR_APPLET, false, true, false);
|
||||
public static final ElementName ARCCOT = new ElementName("arccot", "arccot", TreeBuilder.OTHER, false, false, false);
|
||||
public static final ElementName APPROX = new ElementName("approx", "approx", TreeBuilder.OTHER, false, false, false);
|
||||
public static final ElementName BUTTON = new ElementName("button", "button", TreeBuilder.BUTTON, false, false, false);
|
||||
public static final ElementName BUTTON = new ElementName("button", "button", TreeBuilder.BUTTON, true, false, false);
|
||||
public static final ElementName CIRCLE = new ElementName("circle", "circle", TreeBuilder.OTHER, false, false, false);
|
||||
public static final ElementName CENTER = new ElementName("center", "center", TreeBuilder.DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU, true, false, false);
|
||||
public static final ElementName CURSOR = new ElementName("cursor", "cursor", TreeBuilder.OTHER, false, false, false);
|
||||
|
@ -3432,7 +3432,7 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
removeFromStack(eltPos);
|
||||
break endtagloop;
|
||||
case P:
|
||||
eltPos = findLastInScope("p");
|
||||
eltPos = findLastInButtonScope("p");
|
||||
if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
|
||||
err("No \u201Cp\u201D element in scope but a \u201Cp\u201D end tag seen.");
|
||||
// XXX inline this case
|
||||
@ -3905,6 +3905,17 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
return TreeBuilder.NOT_FOUND_ON_STACK;
|
||||
}
|
||||
|
||||
private int findLastInButtonScope(@Local String name) {
|
||||
for (int i = currentPtr; i > 0; i--) {
|
||||
if (stack[i].name == name) {
|
||||
return i;
|
||||
} else if (stack[i].scoping || stack[i].name == "button") {
|
||||
return TreeBuilder.NOT_FOUND_ON_STACK;
|
||||
}
|
||||
}
|
||||
return TreeBuilder.NOT_FOUND_ON_STACK;
|
||||
}
|
||||
|
||||
private int findLastInScope(@Local String name) {
|
||||
for (int i = currentPtr; i > 0; i--) {
|
||||
if (stack[i].name == name) {
|
||||
@ -4177,7 +4188,7 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
*
|
||||
*/
|
||||
private void implicitlyCloseP() throws SAXException {
|
||||
int eltPos = findLastInScope("p");
|
||||
int eltPos = findLastInButtonScope("p");
|
||||
if (eltPos == TreeBuilder.NOT_FOUND_ON_STACK) {
|
||||
return;
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ HTML5_ATOM(select, "select")
|
||||
HTML5_ATOM(optgroup, "optgroup")
|
||||
HTML5_ATOM(table, "table")
|
||||
HTML5_ATOM(frameset, "frameset")
|
||||
HTML5_ATOM(button, "button")
|
||||
HTML5_ATOM(ul, "ul")
|
||||
HTML5_ATOM(ol, "ol")
|
||||
HTML5_ATOM(html, "html")
|
||||
@ -835,7 +836,6 @@ HTML5_ATOM(arccos, "arccos")
|
||||
HTML5_ATOM(applet, "applet")
|
||||
HTML5_ATOM(arccot, "arccot")
|
||||
HTML5_ATOM(approx, "approx")
|
||||
HTML5_ATOM(button, "button")
|
||||
HTML5_ATOM(circle, "circle")
|
||||
HTML5_ATOM(center, "center")
|
||||
HTML5_ATOM(canvas, "canvas")
|
||||
|
@ -331,7 +331,7 @@ nsHtml5ElementName::initializeStatics()
|
||||
ELT_APPLET = new nsHtml5ElementName(nsHtml5Atoms::applet, nsHtml5Atoms::applet, NS_HTML5TREE_BUILDER_MARQUEE_OR_APPLET, PR_FALSE, PR_TRUE, PR_FALSE);
|
||||
ELT_ARCCOT = new nsHtml5ElementName(nsHtml5Atoms::arccot, nsHtml5Atoms::arccot, NS_HTML5TREE_BUILDER_OTHER, PR_FALSE, PR_FALSE, PR_FALSE);
|
||||
ELT_APPROX = new nsHtml5ElementName(nsHtml5Atoms::approx, nsHtml5Atoms::approx, NS_HTML5TREE_BUILDER_OTHER, PR_FALSE, PR_FALSE, PR_FALSE);
|
||||
ELT_BUTTON = new nsHtml5ElementName(nsHtml5Atoms::button, nsHtml5Atoms::button, NS_HTML5TREE_BUILDER_BUTTON, PR_FALSE, PR_FALSE, PR_FALSE);
|
||||
ELT_BUTTON = new nsHtml5ElementName(nsHtml5Atoms::button, nsHtml5Atoms::button, NS_HTML5TREE_BUILDER_BUTTON, PR_TRUE, PR_FALSE, PR_FALSE);
|
||||
ELT_CIRCLE = new nsHtml5ElementName(nsHtml5Atoms::circle, nsHtml5Atoms::circle, NS_HTML5TREE_BUILDER_OTHER, PR_FALSE, PR_FALSE, PR_FALSE);
|
||||
ELT_CENTER = new nsHtml5ElementName(nsHtml5Atoms::center, nsHtml5Atoms::center, NS_HTML5TREE_BUILDER_DIV_OR_BLOCKQUOTE_OR_CENTER_OR_MENU, PR_TRUE, PR_FALSE, PR_FALSE);
|
||||
ELT_CURSOR = new nsHtml5ElementName(nsHtml5Atoms::cursor, nsHtml5Atoms::cursor, NS_HTML5TREE_BUILDER_OTHER, PR_FALSE, PR_FALSE, PR_FALSE);
|
||||
|
@ -2305,7 +2305,7 @@ nsHtml5TreeBuilder::endTag(nsHtml5ElementName* elementName)
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_P: {
|
||||
eltPos = findLastInScope(nsHtml5Atoms::p);
|
||||
eltPos = findLastInButtonScope(nsHtml5Atoms::p);
|
||||
if (eltPos == NS_HTML5TREE_BUILDER_NOT_FOUND_ON_STACK) {
|
||||
|
||||
if (inForeign) {
|
||||
@ -2736,6 +2736,19 @@ nsHtml5TreeBuilder::findLastInTableScope(nsIAtom* name)
|
||||
return NS_HTML5TREE_BUILDER_NOT_FOUND_ON_STACK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsHtml5TreeBuilder::findLastInButtonScope(nsIAtom* name)
|
||||
{
|
||||
for (PRInt32 i = currentPtr; i > 0; i--) {
|
||||
if (stack[i]->name == name) {
|
||||
return i;
|
||||
} else if (stack[i]->scoping || stack[i]->name == nsHtml5Atoms::button) {
|
||||
return NS_HTML5TREE_BUILDER_NOT_FOUND_ON_STACK;
|
||||
}
|
||||
}
|
||||
return NS_HTML5TREE_BUILDER_NOT_FOUND_ON_STACK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsHtml5TreeBuilder::findLastInScope(nsIAtom* name)
|
||||
{
|
||||
@ -3006,7 +3019,7 @@ nsHtml5TreeBuilder::resetTheInsertionMode()
|
||||
void
|
||||
nsHtml5TreeBuilder::implicitlyCloseP()
|
||||
{
|
||||
PRInt32 eltPos = findLastInScope(nsHtml5Atoms::p);
|
||||
PRInt32 eltPos = findLastInButtonScope(nsHtml5Atoms::p);
|
||||
if (eltPos == NS_HTML5TREE_BUILDER_NOT_FOUND_ON_STACK) {
|
||||
return;
|
||||
}
|
||||
|
@ -114,6 +114,7 @@ class nsHtml5TreeBuilder : public nsAHtml5TreeBuilderState
|
||||
PRInt32 findLastInTableScopeOrRootTbodyTheadTfoot();
|
||||
PRInt32 findLast(nsIAtom* name);
|
||||
PRInt32 findLastInTableScope(nsIAtom* name);
|
||||
PRInt32 findLastInButtonScope(nsIAtom* name);
|
||||
PRInt32 findLastInScope(nsIAtom* name);
|
||||
PRInt32 findLastInListScope(nsIAtom* name);
|
||||
PRInt32 findLastInScopeHn();
|
||||
|
Loading…
Reference in New Issue
Block a user