small improvement to strictDTD to allow auto-opening of Tbody

This commit is contained in:
rickg%netscape.com 2000-05-07 04:55:36 +00:00
parent 9122f17e5d
commit 127758985b
4 changed files with 44 additions and 8 deletions

View file

@ -9,7 +9,7 @@
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing * implied. See the License for the specific language governing
* rights and limitations under the License. * rights and limitations under the License.
* *
* The Original Code is mozilla.org code. * The Original Code is mozilla.org code.
* *
* The Initial Developer of the Original Code is Netscape * The Initial Developer of the Original Code is Netscape
@ -704,7 +704,7 @@ nsresult COtherDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNo
mLineNumber++; mLineNumber++;
break; break;
default: default:
break; break;
} }
CObserverService* theService=mParser->GetObserverService(); CObserverService* theService=mParser->GetObserverService();
@ -765,13 +765,13 @@ nsresult COtherDTD::HandleStartToken(CToken* aToken) {
switch(theChildTag) { switch(theChildTag) {
case eHTMLTag_html: case eHTMLTag_html:
if(!HasOpenContainer(theChildTag)) { if(!HasOpenContainer(theChildTag)) {
mSink->OpenHTML(*theNode); mSink->OpenHTML(*theNode);
mBodyContext->Push(theNode,0); mBodyContext->Push(theNode,0);
} }
theTagWasHandled=PR_TRUE; theTagWasHandled=PR_TRUE;
break; break;
default: default:
CElement* theElement=gElementTable->mElements[theParent]; CElement* theElement=gElementTable->mElements[theParent];
if(theElement) { if(theElement) {

View file

@ -699,6 +699,24 @@ public:
} }
break; break;
case eHTMLTag_tr:
case eHTMLTag_th:
if(aContext->mTableStates && (!aContext->mTableStates->mHasTBody)) {
nsCParserNode* theNode=new nsCParserNode();
CToken* theToken=new CStartToken(eHTMLTag_tbody);
theNode->Init(theToken,0,0); //this will likely leak...
result=HandleStartToken(theNode,eHTMLTag_tbody,aContext,aSink);
if(NS_SUCCEEDED(result)) {
CElement *theElement=GetElement(eHTMLTag_tbody);
if(theElement) {
result=theElement->HandleStartToken(aNode,aTag,aContext,aSink);
}
}
}
break;
default: default:
break; break;
} }

View file

@ -9,7 +9,7 @@
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing * implied. See the License for the specific language governing
* rights and limitations under the License. * rights and limitations under the License.
* *
* The Original Code is mozilla.org code. * The Original Code is mozilla.org code.
* *
* The Initial Developer of the Original Code is Netscape * The Initial Developer of the Original Code is Netscape
@ -704,7 +704,7 @@ nsresult COtherDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNo
mLineNumber++; mLineNumber++;
break; break;
default: default:
break; break;
} }
CObserverService* theService=mParser->GetObserverService(); CObserverService* theService=mParser->GetObserverService();
@ -765,13 +765,13 @@ nsresult COtherDTD::HandleStartToken(CToken* aToken) {
switch(theChildTag) { switch(theChildTag) {
case eHTMLTag_html: case eHTMLTag_html:
if(!HasOpenContainer(theChildTag)) { if(!HasOpenContainer(theChildTag)) {
mSink->OpenHTML(*theNode); mSink->OpenHTML(*theNode);
mBodyContext->Push(theNode,0); mBodyContext->Push(theNode,0);
} }
theTagWasHandled=PR_TRUE; theTagWasHandled=PR_TRUE;
break; break;
default: default:
CElement* theElement=gElementTable->mElements[theParent]; CElement* theElement=gElementTable->mElements[theParent];
if(theElement) { if(theElement) {

View file

@ -699,6 +699,24 @@ public:
} }
break; break;
case eHTMLTag_tr:
case eHTMLTag_th:
if(aContext->mTableStates && (!aContext->mTableStates->mHasTBody)) {
nsCParserNode* theNode=new nsCParserNode();
CToken* theToken=new CStartToken(eHTMLTag_tbody);
theNode->Init(theToken,0,0); //this will likely leak...
result=HandleStartToken(theNode,eHTMLTag_tbody,aContext,aSink);
if(NS_SUCCEEDED(result)) {
CElement *theElement=GetElement(eHTMLTag_tbody);
if(theElement) {
result=theElement->HandleStartToken(aNode,aTag,aContext,aSink);
}
}
}
break;
default: default:
break; break;
} }