diff --git a/mozilla/parser/htmlparser/src/CParserContext.cpp b/mozilla/parser/htmlparser/src/CParserContext.cpp
index 4adf1cb316a..36f152108b6 100644
--- a/mozilla/parser/htmlparser/src/CParserContext.cpp
+++ b/mozilla/parser/htmlparser/src/CParserContext.cpp
@@ -1,4 +1,5 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 sw=2 et tw=80: */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
@@ -68,12 +69,10 @@ CParserContext::CParserContext(nsScanner* aScanner,
mKey=aKey;
mPrevContext=0;
mListener=aListener;
- NS_IF_ADDREF(mListener);
mDTDMode=eDTDMode_unknown;
mAutoDetectStatus=aStatus;
mTransferBuffer=0;
mDTD=aDTD;
- NS_IF_ADDREF(mDTD);
mTokenizer = 0;
mTransferBufferSize=eTransferBufferSize;
mStreamListenerState=eNone;
@@ -99,16 +98,13 @@ CParserContext::CParserContext(const CParserContext &aContext) : mMimeType() {
mKey=aContext.mKey;
mPrevContext=0;
mListener=aContext.mListener;
- NS_IF_ADDREF(mListener);
mDTDMode=aContext.mDTDMode;
mAutoDetectStatus=aContext.mAutoDetectStatus;
mTransferBuffer=aContext.mTransferBuffer;
mDTD=aContext.mDTD;
- NS_IF_ADDREF(mDTD);
mTokenizer = aContext.mTokenizer;
- NS_IF_ADDREF(mTokenizer);
mTransferBufferSize=eTransferBufferSize;
mStreamListenerState=aContext.mStreamListenerState;
@@ -122,27 +118,19 @@ CParserContext::CParserContext(const CParserContext &aContext) : mMimeType() {
/**
* Destructor for parser context
- * NOTE: DO NOT destroy the dtd here.
- * @update gess7/11/98
*/
-CParserContext::~CParserContext(){
-
+CParserContext::~CParserContext()
+{
MOZ_COUNT_DTOR(CParserContext);
if(mScanner) {
delete mScanner;
- mScanner=nsnull;
}
- if(mTransferBuffer)
+ if(mTransferBuffer) {
delete [] mTransferBuffer;
-
- NS_IF_RELEASE(mDTD);
- NS_IF_RELEASE(mListener);
- NS_IF_RELEASE(mTokenizer);
-
+ }
//Remember that it's ok to simply ingore the PrevContext.
-
}
@@ -172,7 +160,8 @@ void CParserContext::SetMimeType(const nsACString& aMimeType){
nsresult
CParserContext::GetTokenizer(PRInt32 aType,
nsIContentSink* aSink,
- nsITokenizer*& aTokenizer) {
+ nsITokenizer*& aTokenizer)
+{
nsresult result = NS_OK;
if(!mTokenizer) {
@@ -195,17 +184,21 @@ CParserContext::GetTokenizer(PRInt32 aType,
}
}
- result = NS_NewHTMLTokenizer(&mTokenizer,mDTDMode,mDocType,
- mParserCommand,theFlags);
+ mTokenizer = new nsHTMLTokenizer(mDTDMode, mDocType,
+ mParserCommand, theFlags);
+ if (!mTokenizer) {
+ return NS_ERROR_OUT_OF_MEMORY;
+ }
+
// Make sure the new tokenizer has all of the necessary information.
// XXX this might not be necessary.
- if (mTokenizer && mPrevContext) {
+ if (mPrevContext) {
mTokenizer->CopyState(mPrevContext->mTokenizer);
}
}
else if (aType == NS_IPARSER_FLAG_XML)
{
- result = CallQueryInterface(mDTD, &mTokenizer);
+ mTokenizer = do_QueryInterface(mDTD, &result);
}
}
diff --git a/mozilla/parser/htmlparser/src/CParserContext.h b/mozilla/parser/htmlparser/src/CParserContext.h
index f73531b7ce3..41d09736d3a 100644
--- a/mozilla/parser/htmlparser/src/CParserContext.h
+++ b/mozilla/parser/htmlparser/src/CParserContext.h
@@ -83,11 +83,11 @@ public:
nsCOMPtr mRequest; // provided by necko to differnciate different input streams
// why is mRequest strongly referenced? see bug 102376.
- nsIDTD* mDTD;
- nsIRequestObserver* mListener;
+ nsCOMPtr mDTD;
+ nsCOMPtr mListener;
char* mTransferBuffer;
void* mKey;
- nsITokenizer* mTokenizer;
+ nsCOMPtr mTokenizer;
CParserContext* mPrevContext;
nsScanner* mScanner;
@@ -105,8 +105,4 @@ public:
PRUint32 mTransferBufferSize;
};
-
-
#endif
-
-
diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp
index cab4c6e316f..a6c4c916966 100644
--- a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp
+++ b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp
@@ -59,74 +59,10 @@
And now for the main class -- nsHTMLTokenizer...
************************************************************************/
-static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
-static NS_DEFINE_IID(kITokenizerIID, NS_ITOKENIZER_IID);
-static NS_DEFINE_IID(kClassIID, NS_HTMLTOKENIZER_IID);
-
/**
- * This method gets called as part of our COM-like interfaces.
- * Its purpose is to create an interface to parser object
- * of some type.
- *
- * @param aIID id of object to discover
- * @param aInstancePtr ptr to newly discovered interface
- * @return NS_xxx result code
+ * Satisfy the nsISupports interface.
*/
-nsresult nsHTMLTokenizer::QueryInterface(const nsIID& aIID, void** aInstancePtr)
-{
- if (NULL == aInstancePtr) {
- return NS_ERROR_NULL_POINTER;
- }
-
- if(aIID.Equals(kISupportsIID)) { // Do IUnknown...
- *aInstancePtr = (nsISupports*)(this);
- }
- else if(aIID.Equals(kITokenizerIID)) { // Do ITokenizer base class...
- *aInstancePtr = (nsITokenizer*)(this);
- }
- else if(aIID.Equals(kClassIID)) { // Do this class...
- *aInstancePtr = (nsHTMLTokenizer*)(this);
- }
- else {
- *aInstancePtr=0;
- return NS_NOINTERFACE;
- }
- NS_ADDREF_THIS();
- return NS_OK;
-}
-
-/**
- * This method is defined in nsHTMLTokenizer.h. It is used to
- * cause the COM-like construction of an HTMLTokenizer.
- *
- * @param aInstancePtrResult** ptr to newly instantiated parser
- * @param aFlag Parser flags the tokenizer should be aware of
- * @param aDocType The doctype of the current document.
- * @param aCommand The current command (view-source, fragment, etc).
- * @return NS_xxx error result
- */
-
-nsresult NS_NewHTMLTokenizer(nsITokenizer** aInstancePtrResult,
- PRInt32 aFlag,
- eParserDocType aDocType,
- eParserCommands aCommand,
- PRInt32 aFlags)
-{
- NS_PRECONDITION(nsnull != aInstancePtrResult, "null ptr");
- if (nsnull == aInstancePtrResult) {
- return NS_ERROR_NULL_POINTER;
- }
- nsHTMLTokenizer* it = new nsHTMLTokenizer(aFlag,aDocType,aCommand,aFlags);
- if (nsnull == it) {
- return NS_ERROR_OUT_OF_MEMORY;
- }
- return it->QueryInterface(kClassIID, (void **) aInstancePtrResult);
-}
-
-
-NS_IMPL_ADDREF(nsHTMLTokenizer)
-NS_IMPL_RELEASE(nsHTMLTokenizer)
-
+NS_IMPL_ISUPPORTS1(nsHTMLTokenizer, nsITokenizer);
/**
* Default constructor
diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.h b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.h
index 41aaada7e03..1fd46558749 100644
--- a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.h
+++ b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.h
@@ -54,10 +54,6 @@
#include "nsHTMLTokens.h"
#include "nsDTDUtils.h"
-#define NS_HTMLTOKENIZER_IID \
- {0xe4238ddd, 0x9eb6, 0x11d2, \
- {0xba, 0xa5, 0x0, 0x10, 0x4b, 0x98, 0x3f, 0xd4 }}
-
/***************************************************************
Notes:
***************************************************************/
@@ -79,17 +75,17 @@ public:
protected:
- virtual nsresult ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner,PRBool& aFlushTokens);
- virtual nsresult ConsumeStartTag(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner,PRBool& aFlushTokens);
- virtual nsresult ConsumeEndTag(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
- virtual nsresult ConsumeAttributes(PRUnichar aChar, CToken* aToken, nsScanner& aScanner);
- virtual nsresult ConsumeEntity(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
- virtual nsresult ConsumeWhitespace(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
- virtual nsresult ConsumeComment(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
- virtual nsresult ConsumeNewline(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
- virtual nsresult ConsumeText(CToken*& aToken,nsScanner& aScanner);
- virtual nsresult ConsumeSpecialMarkup(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
- virtual nsresult ConsumeProcessingInstruction(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
+ nsresult ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner,PRBool& aFlushTokens);
+ nsresult ConsumeStartTag(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner,PRBool& aFlushTokens);
+ nsresult ConsumeEndTag(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
+ nsresult ConsumeAttributes(PRUnichar aChar, CToken* aToken, nsScanner& aScanner);
+ nsresult ConsumeEntity(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
+ nsresult ConsumeWhitespace(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
+ nsresult ConsumeComment(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
+ nsresult ConsumeNewline(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
+ nsresult ConsumeText(CToken*& aToken,nsScanner& aScanner);
+ nsresult ConsumeSpecialMarkup(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
+ nsresult ConsumeProcessingInstruction(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner);
nsresult ScanDocStructure(PRBool aIsFinalChunk);
@@ -105,10 +101,6 @@ protected:
PRUint32 mFlags;
};
-extern nsresult NS_NewHTMLTokenizer(nsITokenizer** aInstancePtrResult,
- PRInt32 aMode,eParserDocType aDocType,
- eParserCommands aCommand, PRInt32 aFlags);
-
#endif
diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp
index 00865dfed13..ee5a5e8daa0 100644
--- a/mozilla/parser/htmlparser/src/nsParser.cpp
+++ b/mozilla/parser/htmlparser/src/nsParser.cpp
@@ -1111,7 +1111,7 @@ FindSuitableDTD(CParserContext& aParserContext,
}
if(theBestDTD) {
- rv = theBestDTD->CreateNewInstance(&aParserContext.mDTD);
+ rv = theBestDTD->CreateNewInstance(getter_AddRefs(aParserContext.mDTD));
NS_ENSURE_SUCCESS(rv, rv);
*aReturn = PR_TRUE;
@@ -1174,7 +1174,9 @@ nsParser::WillBuildModel(nsString& aFilename)
return rv;
nsITokenizer* tokenizer;
- mParserContext->GetTokenizer(mParserContext->mDTD->GetType(), mSink, tokenizer);
+ rv = mParserContext->GetTokenizer(mParserContext->mDTD->GetType(), mSink, tokenizer);
+ NS_ENSURE_SUCCESS(rv, rv);
+
return mParserContext->mDTD->WillBuildModel(*mParserContext, tokenizer, mSink);
}
@@ -1981,18 +1983,18 @@ nsresult nsParser::ResumeParse(PRBool allowIteration, PRBool aIsFinalChunk, PRBo
* @param
* @return error code -- 0 if ok, non-zero if error.
*/
-nsresult nsParser::BuildModel() {
+nsresult nsParser::BuildModel()
+{
CParserContext* theRootContext = mParserContext;
nsITokenizer* theTokenizer = 0;
nsresult result = NS_OK;
if (mParserContext) {
PRInt32 type = mParserContext->mDTD ? mParserContext->mDTD->GetType() : NS_IPARSER_FLAG_HTML;
- mParserContext->GetTokenizer(type, mSink, theTokenizer);
+ result = mParserContext->GetTokenizer(type, mSink, theTokenizer);
}
- if (theTokenizer) {
-
+ if (NS_SUCCEEDED(result)) {
//Get the root DTD for use in model building...
while (theRootContext->mPrevContext) {
theRootContext = theRootContext->mPrevContext;
@@ -2007,38 +2009,16 @@ nsresult nsParser::BuildModel() {
MOZ_TIMER_STOP(mDTDTime);
}
}
- else{
+ else {
mInternalState = result = NS_ERROR_HTMLPARSER_BADTOKENIZER;
}
return result;
}
-
-/**
- *
- * @update gess1/22/99
- * @param
- * @return
- */
-nsresult nsParser::GetTokenizer(nsITokenizer*& aTokenizer) {
- nsresult result = NS_OK;
- aTokenizer = nsnull;
- if(mParserContext) {
- PRInt32 type = mParserContext->mDTD ? mParserContext->mDTD->GetType() : NS_IPARSER_FLAG_HTML;
- result = mParserContext->GetTokenizer(type, mSink, aTokenizer);
- }
- return result;
-}
-
/*******************************************************************
These methods are used to talk to the netlib system...
*******************************************************************/
-#ifdef rickgdebug
-#include
- fstream* gOutFile;
-#endif
-
/**
*
*
@@ -2071,10 +2051,6 @@ nsresult nsParser::OnStartRequest(nsIRequest *request, nsISupports* aContext) {
mParserContext->SetMimeType(contentType);
}
-#ifdef rickgdebug
- gOutFile= new fstream("c:/temp/out.file",ios::trunc);
-#endif
-
rv = NS_OK;
if (sParserDataListeners && mSink) {
@@ -2621,14 +2597,6 @@ nsresult nsParser::OnStopRequest(nsIRequest *request, nsISupports* aContext,
mObserver->OnStopRequest(request, aContext, status);
}
-#ifdef rickgdebug
- if(gOutFile){
- gOutFile->close();
- delete gOutFile;
- gOutFile = 0;
- }
-#endif
-
if (sParserDataListeners && mSink) {
nsISupports *ctx = mSink->GetTarget();
PRInt32 count = sParserDataListeners->Count();
@@ -2657,18 +2625,18 @@ nsresult nsParser::OnStopRequest(nsIRequest *request, nsISupports* aContext,
* @param
* @return TRUE if it's ok to proceed
*/
-PRBool nsParser::WillTokenize(PRBool aIsFinalChunk){
- nsITokenizer* theTokenizer=0;
- nsresult result = NS_OK;
- if (mParserContext) {
- PRInt32 type = mParserContext->mDTD ? mParserContext->mDTD->GetType() : NS_IPARSER_FLAG_HTML;
- mParserContext->GetTokenizer(type, mSink, theTokenizer);
+PRBool nsParser::WillTokenize(PRBool aIsFinalChunk)
+{
+ if (!mParserContext) {
+ return PR_TRUE;
}
- if (theTokenizer) {
- result = theTokenizer->WillTokenize(aIsFinalChunk,&mTokenAllocator);
- }
- return result;
+ nsITokenizer* theTokenizer;
+ PRInt32 type = mParserContext->mDTD ? mParserContext->mDTD->GetType() : NS_IPARSER_FLAG_HTML;
+ nsresult result = mParserContext->GetTokenizer(type, mSink, theTokenizer);
+ NS_ENSURE_SUCCESS(result, PR_FALSE);
+
+ return NS_SUCCEEDED(theTokenizer->WillTokenize(aIsFinalChunk,&mTokenAllocator));
}
@@ -2680,18 +2648,17 @@ PRBool nsParser::WillTokenize(PRBool aIsFinalChunk){
* @update gess 01/04/99
* @return error code -- 0 if ok, non-zero if error.
*/
-nsresult nsParser::Tokenize(PRBool aIsFinalChunk){
-
- nsITokenizer* theTokenizer = 0;
+nsresult nsParser::Tokenize(PRBool aIsFinalChunk)
+{
+ nsITokenizer* theTokenizer;
- nsresult result = NS_OK;
-
+ nsresult result = NS_ERROR_NOT_AVAILABLE;
if (mParserContext) {
PRInt32 type = mParserContext->mDTD ? mParserContext->mDTD->GetType() : NS_IPARSER_FLAG_HTML;
- mParserContext->GetTokenizer(type, mSink, theTokenizer);
+ result = mParserContext->GetTokenizer(type, mSink, theTokenizer);
}
- if (theTokenizer) {
+ if (NS_SUCCEEDED(result)) {
if (mFlags & NS_PARSER_FLAG_FLUSH_TOKENS) {
// For some reason tokens didn't get flushed ( probably
// the parser got blocked before all the tokens in the
@@ -2736,7 +2703,7 @@ nsresult nsParser::Tokenize(PRBool aIsFinalChunk){
MOZ_TIMER_STOP(mTokenizeTime);
}
}
- else{
+ else {
result = mInternalState = NS_ERROR_HTMLPARSER_BADTOKENIZER;
}
@@ -2752,20 +2719,19 @@ nsresult nsParser::Tokenize(PRBool aIsFinalChunk){
* @param
* @return TRUE if all went well
*/
-PRBool nsParser::DidTokenize(PRBool aIsFinalChunk){
- PRBool result=PR_TRUE;
-
- nsITokenizer* theTokenizer=0;
- nsresult rv = NS_OK;
- if (mParserContext) {
- PRInt32 type = mParserContext->mDTD ? mParserContext->mDTD->GetType() : NS_IPARSER_FLAG_HTML;
- mParserContext->GetTokenizer(type, mSink, theTokenizer);
+PRBool nsParser::DidTokenize(PRBool aIsFinalChunk)
+{
+ if (!mParserContext) {
+ return PR_TRUE;
}
- if (NS_SUCCEEDED(rv) && theTokenizer) {
- result = theTokenizer->DidTokenize(aIsFinalChunk);
- }
- return result;
+ nsITokenizer* theTokenizer;
+ PRInt32 type = mParserContext->mDTD ? mParserContext->mDTD->GetType() : NS_IPARSER_FLAG_HTML;
+ nsresult rv = mParserContext->GetTokenizer(type, mSink, theTokenizer);
+ NS_ENSURE_SUCCESS(rv, PR_FALSE);
+
+ rv = theTokenizer->DidTokenize(aIsFinalChunk);
+ return NS_SUCCEEDED(rv);
}
/**
@@ -2794,7 +2760,7 @@ nsParser::GetDTD(nsIDTD** aDTD)
{
if (mParserContext) {
*aDTD = mParserContext->mDTD;
- NS_IF_ADDREF(mParserContext->mDTD);
+ NS_IF_ADDREF(*aDTD);
}
return NS_OK;
diff --git a/mozilla/parser/htmlparser/src/nsParser.h b/mozilla/parser/htmlparser/src/nsParser.h
index bbcc936451c..f771393ceb0 100644
--- a/mozilla/parser/htmlparser/src/nsParser.h
+++ b/mozilla/parser/htmlparser/src/nsParser.h
@@ -313,14 +313,6 @@ class nsParser : public nsIParser,
CParserContext* PopContext();
CParserContext* PeekContext() {return mParserContext;}
- /**
- *
- * @update gess 1/22/99
- * @param
- * @return
- */
- nsresult GetTokenizer(nsITokenizer*& aTokenizer);
-
/**
* Get the channel associated with this parser
* @update harishd,gagan 07/17/01