diff --git a/mozilla/htmlparser/src/CNavDTD.cpp b/mozilla/htmlparser/src/CNavDTD.cpp
index a3a482d79f0..3143746ed36 100644
--- a/mozilla/htmlparser/src/CNavDTD.cpp
+++ b/mozilla/htmlparser/src/CNavDTD.cpp
@@ -701,7 +701,7 @@ nsresult CNavDTD::HandleToken(CToken* aToken,nsIParser* aParser){
static eHTMLTags passThru[]= {
eHTMLTag_html,eHTMLTag_comment,eHTMLTag_newline,
eHTMLTag_whitespace,eHTMLTag_script,eHTMLTag_noscript,
- eHTMLTag_userdefined};
+ eHTMLTag_nolayer,eHTMLTag_markupDecl,eHTMLTag_userdefined};
if(!FindTagInSet(theTag,passThru,sizeof(passThru)/sizeof(eHTMLTag_unknown))){
if(!gHTMLElements[eHTMLTag_html].SectionContains(theTag,PR_FALSE)) {
if((!mHadBody) && (!mHadFrameset)){
@@ -1186,19 +1186,23 @@ nsresult CNavDTD::HandleOmittedTag(CToken* aToken,eHTMLTags aChildTag,eHTMLTags
isNotWhiteSpace = mSaveBadTokens = PR_TRUE;
}
if(mSaveBadTokens) {
+ aToken->mRecycle=PR_FALSE;
mBodyContext->SaveToken(aToken,theBCIndex);
// If the token is attributed then save those attributes too.
if(attrCount > 0) {
nsCParserNode* theAttrNode = (nsCParserNode*)&aNode;
while(attrCount > 0){
- mBodyContext->SaveToken(theAttrNode->PopAttributeToken(),theBCIndex);
+ CToken* theAttrToken=theAttrNode->PopAttributeToken();
+ if(theAttrToken) {
+ mBodyContext->SaveToken(theAttrToken,theBCIndex);
+ theAttrToken->mRecycle=PR_FALSE;
+ }
attrCount--;
}
}
if(!IsContainer(aChildTag) && isNotWhiteSpace) {
mSaveBadTokens = PR_FALSE;
}
- result=NS_ERROR_HTMLPARSER_MISPLACED;
}
}
@@ -1297,8 +1301,9 @@ nsresult CNavDTD::HandleStartToken(CToken* aToken) {
default:
{
- if(theHeadIsParent)
+ if(theHeadIsParent) {
result=AddHeadLeaf(*theNode);
+ }
else result=HandleDefaultStartToken(aToken,theChildTag,*theNode);
}
break;
@@ -1553,7 +1558,7 @@ nsresult CNavDTD::HandleSavedTokensAbove(eHTMLTags aTag)
}
theBadTokenCount--;
}
- result=NavDispatchTokenHandler(theToken,this);
+ result=HandleToken(theToken,mParser);
}
}
theBadTokenCount--;
diff --git a/mozilla/htmlparser/src/nsDTDUtils.cpp b/mozilla/htmlparser/src/nsDTDUtils.cpp
index 5fc888becf7..b421383f8d7 100644
--- a/mozilla/htmlparser/src/nsDTDUtils.cpp
+++ b/mozilla/htmlparser/src/nsDTDUtils.cpp
@@ -200,6 +200,18 @@ nsDTDContext::nsDTDContext() : mStack(), mSkipped(0), mStyles(0) {
* @update gess9/10/98
*/
nsDTDContext::~nsDTDContext() {
+ PRInt32 theSize=mSkipped.GetSize();
+ if(theSize>0) {
+ CTokenDeallocator theDeallocator;
+ for(PRInt32 i=0;iGetSize()>0) theDeque->ForEach(theDeallocator);
+ delete theDeque;
+ theDeque=nsnull;
+ }
+ }
+ }
}
/**
@@ -440,6 +452,7 @@ CTokenRecycler::~CTokenRecycler() {
}
}
+
class CTokenFinder: public nsDequeFunctor{
public:
CTokenFinder(CToken* aToken) {mToken=aToken;}
diff --git a/mozilla/htmlparser/src/nsElementTable.cpp b/mozilla/htmlparser/src/nsElementTable.cpp
index 91eb74f5ba5..10548dc4cb0 100644
--- a/mozilla/htmlparser/src/nsElementTable.cpp
+++ b/mozilla/htmlparser/src/nsElementTable.cpp
@@ -1186,7 +1186,7 @@ nsHTMLElement gHTMLElements[] = {
/*special props, prop-range*/ 0, kNoPropRange,
/*special parents,kids,skip*/ 0,0,eHTMLTag_unknown},
- { /*tag*/ eHTMLTag_mdo, // Markup Declaration Open, i.e., " Markup Declaration Open.
return;
}
@@ -966,7 +966,7 @@ void nsHTMLContentSinkStream::AddEndTag(const nsIParserNode& aNode)
{
tagName = "--";
}
- else if(tag == eHTMLTag_mdo)
+ else if(tag == eHTMLTag_markupDecl)
{
// mod => Markup Declaration Open, i.e., "CreateTokenOfType(eToken_comment,eHTMLTag_comment);
else
- aToken = theRecycler->CreateTokenOfType(eToken_doctypeDecl,eHTMLTag_unknown);
+ aToken = theRecycler->CreateTokenOfType(eToken_doctypeDecl,eHTMLTag_markupDecl);
if(aToken) {
result=aToken->Consume(aChar,aScanner);
diff --git a/mozilla/htmlparser/src/nsXIFDTD.cpp b/mozilla/htmlparser/src/nsXIFDTD.cpp
index cf3f6d1f9f8..ced6481210c 100644
--- a/mozilla/htmlparser/src/nsXIFDTD.cpp
+++ b/mozilla/htmlparser/src/nsXIFDTD.cpp
@@ -85,7 +85,7 @@ nsXIFTagEntry gXIFTagTable[] =
{"leaf", eXIFTag_leaf},
{"link", eXIFTag_link},
- {"markup_declaration", eXIFTag_mdo},
+ {"markup_declaration", eXIFTag_markupDecl},
{"section", eXIFTag_section},
{"section_body", eXIFTag_section_body},
@@ -716,7 +716,7 @@ nsresult nsXIFDTD::HandleStartToken(CToken* aToken) {
AddCSSDeclaration(node);
break;
- case eXIFTag_mdo:
+ case eXIFTag_markupDecl:
mSink->OpenContainer(node);
break;
@@ -780,7 +780,7 @@ nsresult nsXIFDTD::HandleEndToken(CToken* aToken) {
EndCSSDeclarationList(node);
break;
- case eXIFTag_mdo:
+ case eXIFTag_markupDecl:
mSink->CloseContainer(node);
default:
diff --git a/mozilla/htmlparser/src/nsXIFDTD.h b/mozilla/htmlparser/src/nsXIFDTD.h
index f13129b21d9..8a381b7f84f 100644
--- a/mozilla/htmlparser/src/nsXIFDTD.h
+++ b/mozilla/htmlparser/src/nsXIFDTD.h
@@ -83,9 +83,9 @@ enum eXIFTags
eXIFTag_url,
eXIFTag_xml,
- eXIFTag_mdo = eHTMLTag_mdo,
- eXIFTag_newline = eHTMLTag_newline,
- eXIFTag_text = eHTMLTag_text,
+ eXIFTag_markupDecl = eHTMLTag_markupDecl,
+ eXIFTag_newline = eHTMLTag_newline,
+ eXIFTag_text = eHTMLTag_text,
eXIFTag_whitespace = eHTMLTag_whitespace,
eXIFTag_userdefined
diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp
index a3a482d79f0..3143746ed36 100644
--- a/mozilla/parser/htmlparser/src/CNavDTD.cpp
+++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp
@@ -701,7 +701,7 @@ nsresult CNavDTD::HandleToken(CToken* aToken,nsIParser* aParser){
static eHTMLTags passThru[]= {
eHTMLTag_html,eHTMLTag_comment,eHTMLTag_newline,
eHTMLTag_whitespace,eHTMLTag_script,eHTMLTag_noscript,
- eHTMLTag_userdefined};
+ eHTMLTag_nolayer,eHTMLTag_markupDecl,eHTMLTag_userdefined};
if(!FindTagInSet(theTag,passThru,sizeof(passThru)/sizeof(eHTMLTag_unknown))){
if(!gHTMLElements[eHTMLTag_html].SectionContains(theTag,PR_FALSE)) {
if((!mHadBody) && (!mHadFrameset)){
@@ -1186,19 +1186,23 @@ nsresult CNavDTD::HandleOmittedTag(CToken* aToken,eHTMLTags aChildTag,eHTMLTags
isNotWhiteSpace = mSaveBadTokens = PR_TRUE;
}
if(mSaveBadTokens) {
+ aToken->mRecycle=PR_FALSE;
mBodyContext->SaveToken(aToken,theBCIndex);
// If the token is attributed then save those attributes too.
if(attrCount > 0) {
nsCParserNode* theAttrNode = (nsCParserNode*)&aNode;
while(attrCount > 0){
- mBodyContext->SaveToken(theAttrNode->PopAttributeToken(),theBCIndex);
+ CToken* theAttrToken=theAttrNode->PopAttributeToken();
+ if(theAttrToken) {
+ mBodyContext->SaveToken(theAttrToken,theBCIndex);
+ theAttrToken->mRecycle=PR_FALSE;
+ }
attrCount--;
}
}
if(!IsContainer(aChildTag) && isNotWhiteSpace) {
mSaveBadTokens = PR_FALSE;
}
- result=NS_ERROR_HTMLPARSER_MISPLACED;
}
}
@@ -1297,8 +1301,9 @@ nsresult CNavDTD::HandleStartToken(CToken* aToken) {
default:
{
- if(theHeadIsParent)
+ if(theHeadIsParent) {
result=AddHeadLeaf(*theNode);
+ }
else result=HandleDefaultStartToken(aToken,theChildTag,*theNode);
}
break;
@@ -1553,7 +1558,7 @@ nsresult CNavDTD::HandleSavedTokensAbove(eHTMLTags aTag)
}
theBadTokenCount--;
}
- result=NavDispatchTokenHandler(theToken,this);
+ result=HandleToken(theToken,mParser);
}
}
theBadTokenCount--;
diff --git a/mozilla/parser/htmlparser/src/nsDTDUtils.cpp b/mozilla/parser/htmlparser/src/nsDTDUtils.cpp
index 5fc888becf7..b421383f8d7 100644
--- a/mozilla/parser/htmlparser/src/nsDTDUtils.cpp
+++ b/mozilla/parser/htmlparser/src/nsDTDUtils.cpp
@@ -200,6 +200,18 @@ nsDTDContext::nsDTDContext() : mStack(), mSkipped(0), mStyles(0) {
* @update gess9/10/98
*/
nsDTDContext::~nsDTDContext() {
+ PRInt32 theSize=mSkipped.GetSize();
+ if(theSize>0) {
+ CTokenDeallocator theDeallocator;
+ for(PRInt32 i=0;iGetSize()>0) theDeque->ForEach(theDeallocator);
+ delete theDeque;
+ theDeque=nsnull;
+ }
+ }
+ }
}
/**
@@ -440,6 +452,7 @@ CTokenRecycler::~CTokenRecycler() {
}
}
+
class CTokenFinder: public nsDequeFunctor{
public:
CTokenFinder(CToken* aToken) {mToken=aToken;}
diff --git a/mozilla/parser/htmlparser/src/nsElementTable.cpp b/mozilla/parser/htmlparser/src/nsElementTable.cpp
index 91eb74f5ba5..10548dc4cb0 100644
--- a/mozilla/parser/htmlparser/src/nsElementTable.cpp
+++ b/mozilla/parser/htmlparser/src/nsElementTable.cpp
@@ -1186,7 +1186,7 @@ nsHTMLElement gHTMLElements[] = {
/*special props, prop-range*/ 0, kNoPropRange,
/*special parents,kids,skip*/ 0,0,eHTMLTag_unknown},
- { /*tag*/ eHTMLTag_mdo, // Markup Declaration Open, i.e., " Markup Declaration Open.
return;
}
@@ -966,7 +966,7 @@ void nsHTMLContentSinkStream::AddEndTag(const nsIParserNode& aNode)
{
tagName = "--";
}
- else if(tag == eHTMLTag_mdo)
+ else if(tag == eHTMLTag_markupDecl)
{
// mod => Markup Declaration Open, i.e., "CreateTokenOfType(eToken_comment,eHTMLTag_comment);
else
- aToken = theRecycler->CreateTokenOfType(eToken_doctypeDecl,eHTMLTag_unknown);
+ aToken = theRecycler->CreateTokenOfType(eToken_doctypeDecl,eHTMLTag_markupDecl);
if(aToken) {
result=aToken->Consume(aChar,aScanner);
diff --git a/mozilla/parser/htmlparser/src/nsXIFDTD.cpp b/mozilla/parser/htmlparser/src/nsXIFDTD.cpp
index cf3f6d1f9f8..ced6481210c 100644
--- a/mozilla/parser/htmlparser/src/nsXIFDTD.cpp
+++ b/mozilla/parser/htmlparser/src/nsXIFDTD.cpp
@@ -85,7 +85,7 @@ nsXIFTagEntry gXIFTagTable[] =
{"leaf", eXIFTag_leaf},
{"link", eXIFTag_link},
- {"markup_declaration", eXIFTag_mdo},
+ {"markup_declaration", eXIFTag_markupDecl},
{"section", eXIFTag_section},
{"section_body", eXIFTag_section_body},
@@ -716,7 +716,7 @@ nsresult nsXIFDTD::HandleStartToken(CToken* aToken) {
AddCSSDeclaration(node);
break;
- case eXIFTag_mdo:
+ case eXIFTag_markupDecl:
mSink->OpenContainer(node);
break;
@@ -780,7 +780,7 @@ nsresult nsXIFDTD::HandleEndToken(CToken* aToken) {
EndCSSDeclarationList(node);
break;
- case eXIFTag_mdo:
+ case eXIFTag_markupDecl:
mSink->CloseContainer(node);
default:
diff --git a/mozilla/parser/htmlparser/src/nsXIFDTD.h b/mozilla/parser/htmlparser/src/nsXIFDTD.h
index f13129b21d9..8a381b7f84f 100644
--- a/mozilla/parser/htmlparser/src/nsXIFDTD.h
+++ b/mozilla/parser/htmlparser/src/nsXIFDTD.h
@@ -83,9 +83,9 @@ enum eXIFTags
eXIFTag_url,
eXIFTag_xml,
- eXIFTag_mdo = eHTMLTag_mdo,
- eXIFTag_newline = eHTMLTag_newline,
- eXIFTag_text = eHTMLTag_text,
+ eXIFTag_markupDecl = eHTMLTag_markupDecl,
+ eXIFTag_newline = eHTMLTag_newline,
+ eXIFTag_text = eHTMLTag_text,
eXIFTag_whitespace = eHTMLTag_whitespace,
eXIFTag_userdefined