diff --git a/mozilla/htmlparser/src/CNavDTD.cpp b/mozilla/htmlparser/src/CNavDTD.cpp index 88dc292738d..78b7115204d 100644 --- a/mozilla/htmlparser/src/CNavDTD.cpp +++ b/mozilla/htmlparser/src/CNavDTD.cpp @@ -1128,8 +1128,8 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode if(theService) { CParserContext* pc=mParser->PeekContext(); void* theDocID=(pc)? pc->mKey:0; - - result=theService->Notify(aTag,aNode,(PRUint32)theDocID, NS_ConvertToString(kHTMLTextContentType), mParser); + + result=theService->Notify(aTag,aNode,theDocID, NS_ConvertToString(kHTMLTextContentType), mParser); } } @@ -1334,12 +1334,12 @@ nsresult CNavDTD::HandleStartToken(CToken* aToken) { if(nsHTMLElement::IsSectionTag(theChildTag)){ switch(theChildTag){ - /*case eHTMLTag_html: + case eHTMLTag_html: if(mBodyContext->GetCount()>0) { result=OpenContainer(theNode,theChildTag,PR_FALSE); isTokenHandled=PR_TRUE; } - break;*/ + break; case eHTMLTag_body: if(mHasOpenBody) { result=OpenContainer(theNode,theChildTag,PR_FALSE); @@ -2561,7 +2561,7 @@ nsresult CNavDTD::OpenHTML(const nsIParserNode *aNode){ START_TIMER(); // Don't push more than one HTML tag into the stack... - //if(mBodyContext->GetCount()==0) + if(mBodyContext->GetCount()==0) mBodyContext->Push(aNode); return result; diff --git a/mozilla/htmlparser/src/COtherDTD.cpp b/mozilla/htmlparser/src/COtherDTD.cpp index b6c4b8f2fa5..0504c20f150 100644 --- a/mozilla/htmlparser/src/COtherDTD.cpp +++ b/mozilla/htmlparser/src/COtherDTD.cpp @@ -1204,7 +1204,7 @@ nsresult COtherDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNo CParserContext* pc=mParser->PeekContext(); void* theDocID=(pc)? pc->mKey:0; - result=theService->Notify(aTag,aNode,(PRUint32)theDocID, NS_ConvertToString(kHTMLTextContentType), mParser); + result=theService->Notify(aTag,aNode,theDocID, NS_ConvertToString(kHTMLTextContentType), mParser); } } diff --git a/mozilla/htmlparser/src/nsDTDUtils.cpp b/mozilla/htmlparser/src/nsDTDUtils.cpp index fdf03e1ee37..14372b763bc 100644 --- a/mozilla/htmlparser/src/nsDTDUtils.cpp +++ b/mozilla/htmlparser/src/nsDTDUtils.cpp @@ -899,8 +899,14 @@ public: registering tags. **************************************************************/ -nsObserverTopic::nsObserverTopic(const nsString& aTopic) : mTopic(aTopic){ - nsCRT::zero(mObservers,sizeof(mObservers)); +nsObserverTopic::nsObserverTopic(const nsString& aTopic) : mTopic(aTopic), + mKeys(0), + mValues(0) { + + nsCRT::zero(mObservers,sizeof(mObservers)); + mCharsetKey.AssignWithConversion("charset"); + mSourceKey.AssignWithConversion("charsetSource"); + mDTDKey.AssignWithConversion("X_COMMAND"); } nsObserverTopic::~nsObserverTopic() { @@ -951,7 +957,7 @@ void nsObserverTopic::RegisterObserverForTag(nsIElementObserver *anObserver,eHTM * @param aCharsetSource - * @return if SUCCESS return NS_OK else return ERROR code. */ -nsresult nsObserverTopic::Notify(eHTMLTags aTag,nsIParserNode& aNode,PRUint32 aUniqueID,nsIParser* aParser) { +nsresult nsObserverTopic::Notify(eHTMLTags aTag,nsIParserNode& aNode,void* aUniqueID,nsIParser* aParser) { nsresult result=NS_OK; nsDeque* theDeque=GetObserversForTag(aTag); @@ -964,44 +970,31 @@ nsresult nsObserverTopic::Notify(eHTMLTags aTag,nsIParserNode& aNode,PRUint32 aU PRInt32 theAttrCount =aNode.GetAttributeCount(); PRUint32 theDequeSize=theDeque->GetSize(); if(0=47) index=47; //XXX HACK HACK HACK!!!!! - //We really need to do a better job with attributes here. + mKeys.Push((PRUnichar*)mCharsetKey.GetUnicode()); + mValues.Push((PRUnichar*)theCharsetValue.GetUnicode()); + + + mKeys.Push((PRUnichar*)mSourceKey.GetUnicode()); + intValue.Append(PRInt32(theCharsetSource),10); + mValues.Push((PRUnichar*)intValue.GetUnicode()); + mKeys.Push((PRUnichar*)mDTDKey.GetUnicode()); + mValues.Push((PRUnichar*)mTopic.GetUnicode()); - if(index < 50) { - theKeys[index]=theCharsetKey.GetUnicode(); - theValues[index] = theCharsetValue.GetUnicode(); - index++; - } - if(index < 50) { - theKeys[index]=theSourceKey.GetUnicode(); - PRInt32 sourceInt = theCharsetSource; - intValue.AppendWithConversion(sourceInt,10); - theValues[index] = intValue.GetUnicode(); - index++; - } - nsAutoString theDTDKey; theDTDKey.AssignWithConversion("X_COMMAND"); - // nsAutoString theDTDValue(aCommand); - if(index < 50) { - theKeys[index]=theDTDKey.GetUnicode(); - theValues[index]=mTopic.GetUnicode(); - index++; - } nsAutoString theTagStr(nsHTMLTags::GetStringValue(aTag)); - nsObserverNotifier theNotifier(theTagStr.GetUnicode(),aUniqueID,index,theKeys,theValues); + nsObserverNotifier theNotifier(theTagStr.GetUnicode(),(nsISupports*)aUniqueID,&mKeys,&mValues); theDeque->FirstThat(theNotifier); result=theNotifier.mResult; }//if @@ -1145,7 +1138,7 @@ void CObserverService::UnregisterObservers(const nsString& aTopic) { */ nsresult CObserverService::Notify( eHTMLTags aTag, nsIParserNode& aNode, - PRUint32 aUniqueID, + void* aUniqueID, const nsString& aTopic, nsIParser* aParser) { nsresult result=NS_OK; diff --git a/mozilla/htmlparser/src/nsDTDUtils.h b/mozilla/htmlparser/src/nsDTDUtils.h index 20916d062fb..db599941107 100644 --- a/mozilla/htmlparser/src/nsDTDUtils.h +++ b/mozilla/htmlparser/src/nsDTDUtils.h @@ -301,9 +301,14 @@ public: PRBool Matches(const nsString& aTopic); void RegisterObserverForTag(nsIElementObserver *anObserver,eHTMLTags aTag); nsDeque* GetObserversForTag(eHTMLTags aTag); - nsresult Notify(eHTMLTags aTag,nsIParserNode& aNode,PRUint32 aUniqueID,nsIParser* aParser); + nsresult Notify(eHTMLTags aTag,nsIParserNode& aNode,void* aUniqueID,nsIParser* aParser); nsString mTopic; + nsDeque mKeys; + nsDeque mValues; + nsString mCharsetKey; + nsString mSourceKey; + nsString mDTDKey; nsDeque* mObservers[NS_HTML_TAG_MAX + 1]; }; @@ -322,7 +327,7 @@ public: nsDeque* GetObserversForTagInTopic(eHTMLTags aTag,const nsString& aTopic); nsresult Notify( eHTMLTags aTag, nsIParserNode& aNode, - PRUint32 aUniqueID, + void* aUniqueID, const nsString& aTopic, nsIParser* aParser); nsObserverTopic* GetTopic(const nsString& aTopic); @@ -339,9 +344,8 @@ protected: **************************************************************/ class nsObserverNotifier: public nsDequeFunctor{ public: - nsObserverNotifier(const PRUnichar* aTagName,PRUint32 aUniqueKey,PRUint32 aCount=0, - const PRUnichar** aKeys=nsnull,const PRUnichar** aValues=nsnull){ - mCount=aCount; + nsObserverNotifier(const PRUnichar* aTagName,nsISupports* aUniqueKey, + const nsDeque* aKeys=0,const nsDeque* aValues=0){ mKeys=aKeys; mValues=aValues; mUniqueKey=aUniqueKey; @@ -351,19 +355,18 @@ public: virtual void* operator()(void* anObject) { nsIElementObserver* theObserver= (nsIElementObserver*)anObject; if(theObserver) { - mResult = theObserver->Notify(mUniqueKey,mTagName,mCount,mKeys,mValues); + mResult = theObserver->Notify(mUniqueKey,mTagName,mKeys,mValues); } if(NS_OK==mResult) return 0; return anObject; } - const PRUnichar** mKeys; - const PRUnichar** mValues; - PRUint32 mCount; - PRUint32 mUniqueKey; - nsresult mResult; + const nsDeque* mKeys; + const nsDeque* mValues; const PRUnichar* mTagName; + nsISupports* mUniqueKey; + nsresult mResult; }; diff --git a/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp b/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp index 9d9e6990e84..652e867b622 100644 --- a/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp +++ b/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp @@ -128,6 +128,7 @@ nsHTMLContentSinkStream::nsHTMLContentSinkStream() mBufferSize = 0; mBufferLength = 0; mFlags = 0; + mHasOpenHtmlTag=PR_FALSE; } NS_IMETHODIMP @@ -512,14 +513,21 @@ nsHTMLContentSinkStream::OpenHTML(const nsIParserNode& aNode) eHTMLTags tag = (eHTMLTags)aNode.GetNodeType(); if (tag == eHTMLTag_html) { - // See bug 20246: the html tag doesn't have "html" in its text, - // so AddStartTag will do the wrong thing - Write(kLessThan); - - nsString temp; temp.AssignWithConversion(nsHTMLTags::GetStringValue(tag)); - nsAutoCString tagname(temp); - Write(tagname); - Write(kGreaterThan); + if(!mHasOpenHtmlTag) { + AddStartTag(aNode); + mHasOpenHtmlTag=PR_TRUE; + } + else { + PRInt32 ac=aNode.GetAttributeCount(); + if(ac>0) { + Write(kLessThan); + nsAutoString tagname; + tagname.AssignWithConversion(nsHTMLTags::GetStringValue(tag)); + Write(tagname); + WriteAttributes(aNode); + Write(kGreaterThan); + } + } } return NS_OK; } diff --git a/mozilla/htmlparser/src/nsHTMLContentSinkStream.h b/mozilla/htmlparser/src/nsHTMLContentSinkStream.h index b244ba595f6..9d8dbf28c99 100644 --- a/mozilla/htmlparser/src/nsHTMLContentSinkStream.h +++ b/mozilla/htmlparser/src/nsHTMLContentSinkStream.h @@ -191,6 +191,7 @@ protected: PRBool mDoFormat; PRBool mDoHeader; PRBool mBodyOnly; + PRBool mHasOpenHtmlTag; PRInt32 mMaxColumn; diff --git a/mozilla/htmlparser/src/nsIElementObserver.h b/mozilla/htmlparser/src/nsIElementObserver.h index 9c60756c0b2..b047970f60c 100644 --- a/mozilla/htmlparser/src/nsIElementObserver.h +++ b/mozilla/htmlparser/src/nsIElementObserver.h @@ -33,6 +33,7 @@ #include "nsISupports.h" #include "prtypes.h" #include "nsHTMLTokens.h" +#include "nsDeque.h" // {4672AA04-F6AE-11d2-B3B7-00805F8A6670} @@ -64,6 +65,9 @@ public: NS_IMETHOD Notify(PRUint32 aDocumentID, const PRUnichar* aTag, PRUint32 numOfAttributes, const PRUnichar* nameArray[], const PRUnichar* valueArray[]) = 0; + + NS_IMETHOD Notify(nsISupports* aDocumentID, const PRUnichar* aTag, + const nsDeque* aKeys, const nsDeque* aValues) = 0; }; diff --git a/mozilla/htmlparser/src/nsParser.cpp b/mozilla/htmlparser/src/nsParser.cpp index e68f2867e98..e203af7acba 100644 --- a/mozilla/htmlparser/src/nsParser.cpp +++ b/mozilla/htmlparser/src/nsParser.cpp @@ -997,7 +997,7 @@ aMimeType,PRBool aVerifyEnabled,PRBool aLastCall,eParseMode aMode){ NS_RELEASE(me); return NS_ERROR_OUT_OF_MEMORY; } - + NS_IF_RELEASE(theDTD); } else { mParserContext->mScanner->Append(aSourceBuffer); diff --git a/mozilla/htmlparser/src/nsViewSourceHTML.cpp b/mozilla/htmlparser/src/nsViewSourceHTML.cpp index d39081e4e2b..bd036e6da8d 100644 --- a/mozilla/htmlparser/src/nsViewSourceHTML.cpp +++ b/mozilla/htmlparser/src/nsViewSourceHTML.cpp @@ -902,7 +902,7 @@ NS_IMETHODIMP CViewSourceHTML::HandleToken(CToken* aToken,nsIParser* aParser) { void* theDocID=(pc)? pc->mKey:0; eHTMLTags theTag=(eHTMLTags)theToken->GetTypeID(); - result=theService->Notify(theTag,theContext.mTokenNode,(PRUint32)theDocID, NS_ConvertToString(kViewSourceCommand), mParser); + result=theService->Notify(theTag,theContext.mTokenNode,theDocID, NS_ConvertToString(kViewSourceCommand), mParser); } } theContext.mTokenNode.Init(0,0,gTokenRecycler); //now recycle. diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp index 88dc292738d..78b7115204d 100644 --- a/mozilla/parser/htmlparser/src/CNavDTD.cpp +++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp @@ -1128,8 +1128,8 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode if(theService) { CParserContext* pc=mParser->PeekContext(); void* theDocID=(pc)? pc->mKey:0; - - result=theService->Notify(aTag,aNode,(PRUint32)theDocID, NS_ConvertToString(kHTMLTextContentType), mParser); + + result=theService->Notify(aTag,aNode,theDocID, NS_ConvertToString(kHTMLTextContentType), mParser); } } @@ -1334,12 +1334,12 @@ nsresult CNavDTD::HandleStartToken(CToken* aToken) { if(nsHTMLElement::IsSectionTag(theChildTag)){ switch(theChildTag){ - /*case eHTMLTag_html: + case eHTMLTag_html: if(mBodyContext->GetCount()>0) { result=OpenContainer(theNode,theChildTag,PR_FALSE); isTokenHandled=PR_TRUE; } - break;*/ + break; case eHTMLTag_body: if(mHasOpenBody) { result=OpenContainer(theNode,theChildTag,PR_FALSE); @@ -2561,7 +2561,7 @@ nsresult CNavDTD::OpenHTML(const nsIParserNode *aNode){ START_TIMER(); // Don't push more than one HTML tag into the stack... - //if(mBodyContext->GetCount()==0) + if(mBodyContext->GetCount()==0) mBodyContext->Push(aNode); return result; diff --git a/mozilla/parser/htmlparser/src/COtherDTD.cpp b/mozilla/parser/htmlparser/src/COtherDTD.cpp index b6c4b8f2fa5..0504c20f150 100644 --- a/mozilla/parser/htmlparser/src/COtherDTD.cpp +++ b/mozilla/parser/htmlparser/src/COtherDTD.cpp @@ -1204,7 +1204,7 @@ nsresult COtherDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNo CParserContext* pc=mParser->PeekContext(); void* theDocID=(pc)? pc->mKey:0; - result=theService->Notify(aTag,aNode,(PRUint32)theDocID, NS_ConvertToString(kHTMLTextContentType), mParser); + result=theService->Notify(aTag,aNode,theDocID, NS_ConvertToString(kHTMLTextContentType), mParser); } } diff --git a/mozilla/parser/htmlparser/src/nsDTDUtils.cpp b/mozilla/parser/htmlparser/src/nsDTDUtils.cpp index fdf03e1ee37..14372b763bc 100644 --- a/mozilla/parser/htmlparser/src/nsDTDUtils.cpp +++ b/mozilla/parser/htmlparser/src/nsDTDUtils.cpp @@ -899,8 +899,14 @@ public: registering tags. **************************************************************/ -nsObserverTopic::nsObserverTopic(const nsString& aTopic) : mTopic(aTopic){ - nsCRT::zero(mObservers,sizeof(mObservers)); +nsObserverTopic::nsObserverTopic(const nsString& aTopic) : mTopic(aTopic), + mKeys(0), + mValues(0) { + + nsCRT::zero(mObservers,sizeof(mObservers)); + mCharsetKey.AssignWithConversion("charset"); + mSourceKey.AssignWithConversion("charsetSource"); + mDTDKey.AssignWithConversion("X_COMMAND"); } nsObserverTopic::~nsObserverTopic() { @@ -951,7 +957,7 @@ void nsObserverTopic::RegisterObserverForTag(nsIElementObserver *anObserver,eHTM * @param aCharsetSource - * @return if SUCCESS return NS_OK else return ERROR code. */ -nsresult nsObserverTopic::Notify(eHTMLTags aTag,nsIParserNode& aNode,PRUint32 aUniqueID,nsIParser* aParser) { +nsresult nsObserverTopic::Notify(eHTMLTags aTag,nsIParserNode& aNode,void* aUniqueID,nsIParser* aParser) { nsresult result=NS_OK; nsDeque* theDeque=GetObserversForTag(aTag); @@ -964,44 +970,31 @@ nsresult nsObserverTopic::Notify(eHTMLTags aTag,nsIParserNode& aNode,PRUint32 aU PRInt32 theAttrCount =aNode.GetAttributeCount(); PRUint32 theDequeSize=theDeque->GetSize(); if(0=47) index=47; //XXX HACK HACK HACK!!!!! - //We really need to do a better job with attributes here. + mKeys.Push((PRUnichar*)mCharsetKey.GetUnicode()); + mValues.Push((PRUnichar*)theCharsetValue.GetUnicode()); + + + mKeys.Push((PRUnichar*)mSourceKey.GetUnicode()); + intValue.Append(PRInt32(theCharsetSource),10); + mValues.Push((PRUnichar*)intValue.GetUnicode()); + mKeys.Push((PRUnichar*)mDTDKey.GetUnicode()); + mValues.Push((PRUnichar*)mTopic.GetUnicode()); - if(index < 50) { - theKeys[index]=theCharsetKey.GetUnicode(); - theValues[index] = theCharsetValue.GetUnicode(); - index++; - } - if(index < 50) { - theKeys[index]=theSourceKey.GetUnicode(); - PRInt32 sourceInt = theCharsetSource; - intValue.AppendWithConversion(sourceInt,10); - theValues[index] = intValue.GetUnicode(); - index++; - } - nsAutoString theDTDKey; theDTDKey.AssignWithConversion("X_COMMAND"); - // nsAutoString theDTDValue(aCommand); - if(index < 50) { - theKeys[index]=theDTDKey.GetUnicode(); - theValues[index]=mTopic.GetUnicode(); - index++; - } nsAutoString theTagStr(nsHTMLTags::GetStringValue(aTag)); - nsObserverNotifier theNotifier(theTagStr.GetUnicode(),aUniqueID,index,theKeys,theValues); + nsObserverNotifier theNotifier(theTagStr.GetUnicode(),(nsISupports*)aUniqueID,&mKeys,&mValues); theDeque->FirstThat(theNotifier); result=theNotifier.mResult; }//if @@ -1145,7 +1138,7 @@ void CObserverService::UnregisterObservers(const nsString& aTopic) { */ nsresult CObserverService::Notify( eHTMLTags aTag, nsIParserNode& aNode, - PRUint32 aUniqueID, + void* aUniqueID, const nsString& aTopic, nsIParser* aParser) { nsresult result=NS_OK; diff --git a/mozilla/parser/htmlparser/src/nsDTDUtils.h b/mozilla/parser/htmlparser/src/nsDTDUtils.h index 20916d062fb..db599941107 100644 --- a/mozilla/parser/htmlparser/src/nsDTDUtils.h +++ b/mozilla/parser/htmlparser/src/nsDTDUtils.h @@ -301,9 +301,14 @@ public: PRBool Matches(const nsString& aTopic); void RegisterObserverForTag(nsIElementObserver *anObserver,eHTMLTags aTag); nsDeque* GetObserversForTag(eHTMLTags aTag); - nsresult Notify(eHTMLTags aTag,nsIParserNode& aNode,PRUint32 aUniqueID,nsIParser* aParser); + nsresult Notify(eHTMLTags aTag,nsIParserNode& aNode,void* aUniqueID,nsIParser* aParser); nsString mTopic; + nsDeque mKeys; + nsDeque mValues; + nsString mCharsetKey; + nsString mSourceKey; + nsString mDTDKey; nsDeque* mObservers[NS_HTML_TAG_MAX + 1]; }; @@ -322,7 +327,7 @@ public: nsDeque* GetObserversForTagInTopic(eHTMLTags aTag,const nsString& aTopic); nsresult Notify( eHTMLTags aTag, nsIParserNode& aNode, - PRUint32 aUniqueID, + void* aUniqueID, const nsString& aTopic, nsIParser* aParser); nsObserverTopic* GetTopic(const nsString& aTopic); @@ -339,9 +344,8 @@ protected: **************************************************************/ class nsObserverNotifier: public nsDequeFunctor{ public: - nsObserverNotifier(const PRUnichar* aTagName,PRUint32 aUniqueKey,PRUint32 aCount=0, - const PRUnichar** aKeys=nsnull,const PRUnichar** aValues=nsnull){ - mCount=aCount; + nsObserverNotifier(const PRUnichar* aTagName,nsISupports* aUniqueKey, + const nsDeque* aKeys=0,const nsDeque* aValues=0){ mKeys=aKeys; mValues=aValues; mUniqueKey=aUniqueKey; @@ -351,19 +355,18 @@ public: virtual void* operator()(void* anObject) { nsIElementObserver* theObserver= (nsIElementObserver*)anObject; if(theObserver) { - mResult = theObserver->Notify(mUniqueKey,mTagName,mCount,mKeys,mValues); + mResult = theObserver->Notify(mUniqueKey,mTagName,mKeys,mValues); } if(NS_OK==mResult) return 0; return anObject; } - const PRUnichar** mKeys; - const PRUnichar** mValues; - PRUint32 mCount; - PRUint32 mUniqueKey; - nsresult mResult; + const nsDeque* mKeys; + const nsDeque* mValues; const PRUnichar* mTagName; + nsISupports* mUniqueKey; + nsresult mResult; }; diff --git a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp index 9d9e6990e84..652e867b622 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp @@ -128,6 +128,7 @@ nsHTMLContentSinkStream::nsHTMLContentSinkStream() mBufferSize = 0; mBufferLength = 0; mFlags = 0; + mHasOpenHtmlTag=PR_FALSE; } NS_IMETHODIMP @@ -512,14 +513,21 @@ nsHTMLContentSinkStream::OpenHTML(const nsIParserNode& aNode) eHTMLTags tag = (eHTMLTags)aNode.GetNodeType(); if (tag == eHTMLTag_html) { - // See bug 20246: the html tag doesn't have "html" in its text, - // so AddStartTag will do the wrong thing - Write(kLessThan); - - nsString temp; temp.AssignWithConversion(nsHTMLTags::GetStringValue(tag)); - nsAutoCString tagname(temp); - Write(tagname); - Write(kGreaterThan); + if(!mHasOpenHtmlTag) { + AddStartTag(aNode); + mHasOpenHtmlTag=PR_TRUE; + } + else { + PRInt32 ac=aNode.GetAttributeCount(); + if(ac>0) { + Write(kLessThan); + nsAutoString tagname; + tagname.AssignWithConversion(nsHTMLTags::GetStringValue(tag)); + Write(tagname); + WriteAttributes(aNode); + Write(kGreaterThan); + } + } } return NS_OK; } diff --git a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.h b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.h index b244ba595f6..9d8dbf28c99 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.h +++ b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.h @@ -191,6 +191,7 @@ protected: PRBool mDoFormat; PRBool mDoHeader; PRBool mBodyOnly; + PRBool mHasOpenHtmlTag; PRInt32 mMaxColumn; diff --git a/mozilla/parser/htmlparser/src/nsIElementObserver.h b/mozilla/parser/htmlparser/src/nsIElementObserver.h index 9c60756c0b2..b047970f60c 100644 --- a/mozilla/parser/htmlparser/src/nsIElementObserver.h +++ b/mozilla/parser/htmlparser/src/nsIElementObserver.h @@ -33,6 +33,7 @@ #include "nsISupports.h" #include "prtypes.h" #include "nsHTMLTokens.h" +#include "nsDeque.h" // {4672AA04-F6AE-11d2-B3B7-00805F8A6670} @@ -64,6 +65,9 @@ public: NS_IMETHOD Notify(PRUint32 aDocumentID, const PRUnichar* aTag, PRUint32 numOfAttributes, const PRUnichar* nameArray[], const PRUnichar* valueArray[]) = 0; + + NS_IMETHOD Notify(nsISupports* aDocumentID, const PRUnichar* aTag, + const nsDeque* aKeys, const nsDeque* aValues) = 0; }; diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp index e68f2867e98..e203af7acba 100644 --- a/mozilla/parser/htmlparser/src/nsParser.cpp +++ b/mozilla/parser/htmlparser/src/nsParser.cpp @@ -997,7 +997,7 @@ aMimeType,PRBool aVerifyEnabled,PRBool aLastCall,eParseMode aMode){ NS_RELEASE(me); return NS_ERROR_OUT_OF_MEMORY; } - + NS_IF_RELEASE(theDTD); } else { mParserContext->mScanner->Append(aSourceBuffer); diff --git a/mozilla/parser/htmlparser/src/nsViewSourceHTML.cpp b/mozilla/parser/htmlparser/src/nsViewSourceHTML.cpp index d39081e4e2b..bd036e6da8d 100644 --- a/mozilla/parser/htmlparser/src/nsViewSourceHTML.cpp +++ b/mozilla/parser/htmlparser/src/nsViewSourceHTML.cpp @@ -902,7 +902,7 @@ NS_IMETHODIMP CViewSourceHTML::HandleToken(CToken* aToken,nsIParser* aParser) { void* theDocID=(pc)? pc->mKey:0; eHTMLTags theTag=(eHTMLTags)theToken->GetTypeID(); - result=theService->Notify(theTag,theContext.mTokenNode,(PRUint32)theDocID, NS_ConvertToString(kViewSourceCommand), mParser); + result=theService->Notify(theTag,theContext.mTokenNode,theDocID, NS_ConvertToString(kViewSourceCommand), mParser); } } theContext.mTokenNode.Init(0,0,gTokenRecycler); //now recycle.