Skip to content

Commit 9227aa8

Browse files
author
Kwang Yul Seo
committed
Read tag names and attributes from the saved tokens where possible.
https://bugs.webkit.org/show_bug.cgi?id=92079 Reviewed by Adam Barth. Read tag names and attributes from the saved tokens, not from the DOM. Also added convenient methods such as hasLocalName, hasTagName, localName, isElementNode and isDocumentFragmentNode to HTMLStackItem class. No new tests, covered by existing tests. * html/parser/HTMLConstructionSite.cpp: (WebCore::HTMLNames::hasImpliedEndTag): (WebCore::HTMLNames::causesFosterParenting): (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion): (WebCore::HTMLConstructionSite::generateImpliedEndTags): (WebCore::HTMLConstructionSite::shouldFosterParent): * html/parser/HTMLConstructionSite.h: (WebCore::HTMLConstructionSite::currentStackItem): * html/parser/HTMLElementStack.cpp: (WebCore::HTMLNames::isNumberedHeaderElement): (WebCore::HTMLNames::isRootNode): (WebCore::HTMLNames::isScopeMarker): (WebCore::HTMLNames::isListItemScopeMarker): (WebCore::HTMLNames::isTableScopeMarker): (WebCore::HTMLNames::isTableBodyScopeMarker): (WebCore::HTMLNames::isTableRowScopeMarker): (WebCore::HTMLNames::isForeignContentScopeMarker): (WebCore::HTMLNames::isButtonScopeMarker): (WebCore::HTMLNames::isSelectScopeMarker): (WebCore::HTMLElementStack::ElementRecord::replaceElement): (WebCore::HTMLElementStack::popUntilNumberedHeaderElementPopped): (WebCore::HTMLElementStack::popUntilTableScopeMarker): (WebCore::HTMLElementStack::popUntilTableBodyScopeMarker): (WebCore::HTMLElementStack::popUntilTableRowScopeMarker): (WebCore::HTMLElementStack::isMathMLTextIntegrationPoint): (WebCore::HTMLElementStack::isHTMLIntegrationPoint): (WebCore::HTMLElementStack::popUntilForeignContentScopeMarker): (WebCore::HTMLElementStack::pushRootNode): (WebCore::HTMLElementStack::oneBelowTop): (WebCore::HTMLElementStack::topmost): (WebCore): (WebCore::inScopeCommon): (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope): (WebCore::HTMLElementStack::inScope): * html/parser/HTMLElementStack.h: (WebCore::HTMLElementStack::topStackItem): (HTMLElementStack): (WebCore::isInHTMLNamespace): * html/parser/HTMLStackItem.h: (WebCore::HTMLStackItem::isDocumentFragmentNode): (WebCore::HTMLStackItem::isElementNode): (HTMLStackItem): (WebCore::HTMLStackItem::hasLocalName): (WebCore::HTMLStackItem::hasTagName): (WebCore::HTMLStackItem::HTMLStackItem): * html/parser/HTMLTreeBuilder.cpp: (WebCore): (WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken): (WebCore::HTMLTreeBuilder::processFakeEndTag): (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag): (WebCore::HTMLTreeBuilder::processStartTagForInBody): (WebCore::HTMLTreeBuilder::processStartTag): (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement): (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): (WebCore::HTMLTreeBuilder::processEndTagForInTableBody): (WebCore::HTMLTreeBuilder::processEndTagForInCell): (WebCore::HTMLTreeBuilder::processEndTagForInBody): (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption): (WebCore::HTMLTreeBuilder::processTrEndTagForInRow): (WebCore::HTMLTreeBuilder::processEndTag): (WebCore::HTMLTreeBuilder::processCharacterBuffer): (WebCore::HTMLTreeBuilder::processEndOfFile): (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent): (WebCore::HTMLTreeBuilder::processTokenInForeignContent): * html/parser/HTMLTreeBuilder.h: Canonical link: https://commits.webkit.org/110017@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@123577 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 915553d commit 9227aa8

8 files changed

Lines changed: 302 additions & 200 deletions

File tree

Source/WebCore/ChangeLog

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,83 @@
1+
2012-07-24 Kwang Yul Seo <[email protected]>
2+
3+
Read tag names and attributes from the saved tokens where possible.
4+
https://bugs.webkit.org/show_bug.cgi?id=92079
5+
6+
Reviewed by Adam Barth.
7+
8+
Read tag names and attributes from the saved tokens, not from the DOM.
9+
Also added convenient methods such as hasLocalName, hasTagName, localName,
10+
isElementNode and isDocumentFragmentNode to HTMLStackItem class.
11+
12+
No new tests, covered by existing tests.
13+
14+
* html/parser/HTMLConstructionSite.cpp:
15+
(WebCore::HTMLNames::hasImpliedEndTag):
16+
(WebCore::HTMLNames::causesFosterParenting):
17+
(WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion):
18+
(WebCore::HTMLConstructionSite::generateImpliedEndTags):
19+
(WebCore::HTMLConstructionSite::shouldFosterParent):
20+
* html/parser/HTMLConstructionSite.h:
21+
(WebCore::HTMLConstructionSite::currentStackItem):
22+
* html/parser/HTMLElementStack.cpp:
23+
(WebCore::HTMLNames::isNumberedHeaderElement):
24+
(WebCore::HTMLNames::isRootNode):
25+
(WebCore::HTMLNames::isScopeMarker):
26+
(WebCore::HTMLNames::isListItemScopeMarker):
27+
(WebCore::HTMLNames::isTableScopeMarker):
28+
(WebCore::HTMLNames::isTableBodyScopeMarker):
29+
(WebCore::HTMLNames::isTableRowScopeMarker):
30+
(WebCore::HTMLNames::isForeignContentScopeMarker):
31+
(WebCore::HTMLNames::isButtonScopeMarker):
32+
(WebCore::HTMLNames::isSelectScopeMarker):
33+
(WebCore::HTMLElementStack::ElementRecord::replaceElement):
34+
(WebCore::HTMLElementStack::popUntilNumberedHeaderElementPopped):
35+
(WebCore::HTMLElementStack::popUntilTableScopeMarker):
36+
(WebCore::HTMLElementStack::popUntilTableBodyScopeMarker):
37+
(WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
38+
(WebCore::HTMLElementStack::isMathMLTextIntegrationPoint):
39+
(WebCore::HTMLElementStack::isHTMLIntegrationPoint):
40+
(WebCore::HTMLElementStack::popUntilForeignContentScopeMarker):
41+
(WebCore::HTMLElementStack::pushRootNode):
42+
(WebCore::HTMLElementStack::oneBelowTop):
43+
(WebCore::HTMLElementStack::topmost):
44+
(WebCore):
45+
(WebCore::inScopeCommon):
46+
(WebCore::HTMLElementStack::hasNumberedHeaderElementInScope):
47+
(WebCore::HTMLElementStack::inScope):
48+
* html/parser/HTMLElementStack.h:
49+
(WebCore::HTMLElementStack::topStackItem):
50+
(HTMLElementStack):
51+
(WebCore::isInHTMLNamespace):
52+
* html/parser/HTMLStackItem.h:
53+
(WebCore::HTMLStackItem::isDocumentFragmentNode):
54+
(WebCore::HTMLStackItem::isElementNode):
55+
(HTMLStackItem):
56+
(WebCore::HTMLStackItem::hasLocalName):
57+
(WebCore::HTMLStackItem::hasTagName):
58+
(WebCore::HTMLStackItem::HTMLStackItem):
59+
* html/parser/HTMLTreeBuilder.cpp:
60+
(WebCore):
61+
(WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken):
62+
(WebCore::HTMLTreeBuilder::processFakeEndTag):
63+
(WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
64+
(WebCore::HTMLTreeBuilder::processStartTagForInBody):
65+
(WebCore::HTMLTreeBuilder::processStartTag):
66+
(WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
67+
(WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement):
68+
(WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
69+
(WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
70+
(WebCore::HTMLTreeBuilder::processEndTagForInCell):
71+
(WebCore::HTMLTreeBuilder::processEndTagForInBody):
72+
(WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
73+
(WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
74+
(WebCore::HTMLTreeBuilder::processEndTag):
75+
(WebCore::HTMLTreeBuilder::processCharacterBuffer):
76+
(WebCore::HTMLTreeBuilder::processEndOfFile):
77+
(WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent):
78+
(WebCore::HTMLTreeBuilder::processTokenInForeignContent):
79+
* html/parser/HTMLTreeBuilder.h:
80+
181
2012-07-24 Hironori Bono <[email protected]>
282

383
Avoid moving child objects multiple times when vertical scrollbar are shown at the left side.

Source/WebCore/html/parser/HTMLConstructionSite.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,25 +60,25 @@ using namespace HTMLNames;
6060

6161
namespace {
6262

63-
bool hasImpliedEndTag(ContainerNode* node)
63+
bool hasImpliedEndTag(const HTMLStackItem* item)
6464
{
65-
return node->hasTagName(ddTag)
66-
|| node->hasTagName(dtTag)
67-
|| node->hasTagName(liTag)
68-
|| node->hasTagName(optionTag)
69-
|| node->hasTagName(optgroupTag)
70-
|| node->hasTagName(pTag)
71-
|| node->hasTagName(rpTag)
72-
|| node->hasTagName(rtTag);
65+
return item->hasTagName(ddTag)
66+
|| item->hasTagName(dtTag)
67+
|| item->hasTagName(liTag)
68+
|| item->hasTagName(optionTag)
69+
|| item->hasTagName(optgroupTag)
70+
|| item->hasTagName(pTag)
71+
|| item->hasTagName(rpTag)
72+
|| item->hasTagName(rtTag);
7373
}
7474

75-
bool causesFosterParenting(const QualifiedName& tagName)
75+
bool causesFosterParenting(const HTMLStackItem* item)
7676
{
77-
return tagName == tableTag
78-
|| tagName == tbodyTag
79-
|| tagName == tfootTag
80-
|| tagName == theadTag
81-
|| tagName == trTag;
77+
return item->hasTagName(tableTag)
78+
|| item->hasTagName(tbodyTag)
79+
|| item->hasTagName(tfootTag)
80+
|| item->hasTagName(theadTag)
81+
|| item->hasTagName(trTag);
8282
}
8383

8484
inline bool isAllWhitespace(const String& string)
@@ -465,13 +465,13 @@ void HTMLConstructionSite::reconstructTheActiveFormattingElements()
465465

466466
void HTMLConstructionSite::generateImpliedEndTagsWithExclusion(const AtomicString& tagName)
467467
{
468-
while (hasImpliedEndTag(currentNode()) && !currentNode()->hasLocalName(tagName))
468+
while (hasImpliedEndTag(currentStackItem()) && !currentStackItem()->hasLocalName(tagName))
469469
m_openElements.pop();
470470
}
471471

472472
void HTMLConstructionSite::generateImpliedEndTags()
473473
{
474-
while (hasImpliedEndTag(currentNode()))
474+
while (hasImpliedEndTag(currentStackItem()))
475475
m_openElements.pop();
476476
}
477477

@@ -495,8 +495,8 @@ void HTMLConstructionSite::findFosterSite(HTMLConstructionSiteTask& task)
495495
bool HTMLConstructionSite::shouldFosterParent() const
496496
{
497497
return m_redirectAttachToFosterParent
498-
&& currentNode()->isElementNode()
499-
&& causesFosterParenting(currentElement()->tagQName());
498+
&& currentStackItem()->isElementNode()
499+
&& causesFosterParenting(currentStackItem());
500500
}
501501

502502
void HTMLConstructionSite::fosterParent(PassRefPtr<Node> node)

Source/WebCore/html/parser/HTMLConstructionSite.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ class HTMLConstructionSite {
121121
HTMLElementStack::ElementRecord* currentElementRecord() const { return m_openElements.topRecord(); }
122122
Element* currentElement() const { return m_openElements.top(); }
123123
ContainerNode* currentNode() const { return m_openElements.topNode(); }
124+
HTMLStackItem* currentStackItem() const { return m_openElements.topStackItem(); }
124125
Element* oneBelowTop() const { return m_openElements.oneBelowTop(); }
125126

126127
HTMLElementStack* openElements() const { return &m_openElements; }

0 commit comments

Comments
 (0)