diff --git a/htmlparser/src/nsHTMLParser.cpp b/htmlparser/src/nsHTMLParser.cpp index 675f17c9244..3b969e28e6c 100644 --- a/htmlparser/src/nsHTMLParser.cpp +++ b/htmlparser/src/nsHTMLParser.cpp @@ -70,7 +70,7 @@ NS_HTMLPARS nsresult NS_NewHTMLParser(nsIParser** aInstancePtrResult) return NS_ERROR_OUT_OF_MEMORY; } - return it->QueryInterface(kClassIID, (void **) aInstancePtrResult); + return it->QueryInterface(kIParserIID, (void **) aInstancePtrResult); } @@ -150,6 +150,7 @@ void nsHTMLParser::InitializeDefaultTokenHandlers() { */ nsHTMLParser::nsHTMLParser() { NS_INIT_REFCNT(); + mListener = nsnull; mTransferBuffer=0; mSink=0; mContextStackPos=0; @@ -180,6 +181,7 @@ nsHTMLParser::~nsHTMLParser() { PL_strfree(gURLRef); gURLRef = 0; } + NS_IF_RELEASE(mListener); if(mTransferBuffer) delete [] mTransferBuffer; mTransferBuffer=0; @@ -647,7 +649,9 @@ PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental){ * @param aFilename -- const char* containing file to be parsed. * @return PR_TRUE if parse succeeded, PR_FALSE otherwise. */ -PRInt32 nsHTMLParser::Parse(nsIURL* aURL,PRBool aIncremental ){ +PRInt32 nsHTMLParser::Parse(nsIURL* aURL, + nsIStreamListener* aListener, + PRBool aIncremental) { NS_PRECONDITION(0!=aURL,kNullURL); PRInt32 status=kBadURL; @@ -655,6 +659,10 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL,PRBool aIncremental ){ if(rickGDebug) return Parse("c:/temp/temp.html",PR_TRUE); + NS_IF_RELEASE(mListener); + mListener = aListener; + NS_IF_ADDREF(aListener); + mIncremental=aIncremental; mParseMode=DetermineParseMode(); @@ -687,7 +695,7 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL,PRBool aIncremental ){ status=ResumeParse(); DidBuildModel(status); } - }//if + } } return status; } @@ -1619,8 +1627,14 @@ nsresult nsHTMLParser::GetBindInfo(void){ * @param * @return */ -nsresult nsHTMLParser::OnProgress(PRInt32 Progress, PRInt32 ProgressMax, const char *msg){ +nsresult +nsHTMLParser::OnProgress(PRInt32 aProgress, PRInt32 aProgressMax, + const char *aMsg) +{ nsresult result=0; + if (nsnull != mListener) { + mListener->OnProgress(aProgress, aProgressMax, aMsg); + } return result; } @@ -1632,6 +1646,9 @@ nsresult nsHTMLParser::OnProgress(PRInt32 Progress, PRInt32 ProgressMax, const c * @return */ nsresult nsHTMLParser::OnStartBinding(void){ + if (nsnull != mListener) { + mListener->OnStartBinding(); + } nsresult result=WillBuildModel(); if(!mTransferBuffer) { mTransferBuffer=new char[gTransferBufferSize+1]; @@ -1648,6 +1665,9 @@ nsresult nsHTMLParser::OnStartBinding(void){ * @return error code (usually 0) */ nsresult nsHTMLParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length){ + if (nsnull != mListener) { + mListener->OnDataAvailable(pIStream, length); + } int len=0; int offset=0; @@ -1691,6 +1711,9 @@ nsresult nsHTMLParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length) * @return */ nsresult nsHTMLParser::OnStopBinding(PRInt32 status, const char *msg){ + if (nsnull != mListener) { + mListener->OnStopBinding(status, msg); + } nsresult result=DidBuildModel(status); return result; } diff --git a/htmlparser/src/nsHTMLParser.h b/htmlparser/src/nsHTMLParser.h index 776670bb378..2d63b9a9728 100644 --- a/htmlparser/src/nsHTMLParser.h +++ b/htmlparser/src/nsHTMLParser.h @@ -111,10 +111,12 @@ friend class CTokenHandler; * Cause parser to parse input from given URL in given mode * @update gess5/11/98 * @param aURL is a descriptor for source document - * @param aMode is the desired parser mode (Nav, other, etc.) + * @param aListener is a listener to forward notifications to * @return TRUE if all went well -- FALSE otherwise */ - virtual PRInt32 Parse(nsIURL* aURL,PRBool aIncremental=PR_TRUE); + virtual PRInt32 Parse(nsIURL* aURL, + nsIStreamListener* aListener, + PRBool aIncremental=PR_TRUE); /** * Cause parser to parse input from given file in given mode @@ -503,6 +505,7 @@ protected: // And now, some data members... //********************************************* + nsIStreamListener* mListener; nsIHTMLContentSink* mSink; CTokenizer* mTokenizer; diff --git a/htmlparser/src/nsIParser.h b/htmlparser/src/nsIParser.h index 804f6f61dd1..b810d5e9dcb 100644 --- a/htmlparser/src/nsIParser.h +++ b/htmlparser/src/nsIParser.h @@ -15,16 +15,6 @@ * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ - - -/** - * MODULE NOTES: - * @update gess 4/1/98 - * - * This file declarse the parser interface. - * - */ - #ifndef NS_IPARSER___ #define NS_IPARSER___ @@ -40,6 +30,7 @@ class nsIContentSink; +class nsIStreamListener; class nsString; /** @@ -49,23 +40,25 @@ class nsString; * @update gess 3/25/98 */ class nsIParser : public nsISupports { - public: virtual nsIContentSink* SetContentSink(nsIContentSink* aContentSink)=0; - virtual PRInt32 Parse(nsIURL* aURL,PRBool aIncremental=PR_TRUE)=0; + virtual PRInt32 Parse(nsIURL* aURL, + nsIStreamListener* aListener, + PRBool aIncremental=PR_TRUE) = 0; + virtual PRInt32 Parse(const char* aFilename,PRBool aIncremental)=0; + virtual PRInt32 Parse(nsString& anHTMLString,PRBool appendTokens)=0; virtual PRInt32 ResumeParse(void)=0; + virtual PRInt32 GetStack(PRInt32* aStackPtr)=0; + virtual PRBool HasOpenContainer(PRInt32 aContainer) const=0; }; extern NS_HTMLPARS nsresult NS_NewHTMLParser(nsIParser** aInstancePtrResult); #endif - - - diff --git a/parser/htmlparser/src/nsHTMLParser.cpp b/parser/htmlparser/src/nsHTMLParser.cpp index 675f17c9244..3b969e28e6c 100644 --- a/parser/htmlparser/src/nsHTMLParser.cpp +++ b/parser/htmlparser/src/nsHTMLParser.cpp @@ -70,7 +70,7 @@ NS_HTMLPARS nsresult NS_NewHTMLParser(nsIParser** aInstancePtrResult) return NS_ERROR_OUT_OF_MEMORY; } - return it->QueryInterface(kClassIID, (void **) aInstancePtrResult); + return it->QueryInterface(kIParserIID, (void **) aInstancePtrResult); } @@ -150,6 +150,7 @@ void nsHTMLParser::InitializeDefaultTokenHandlers() { */ nsHTMLParser::nsHTMLParser() { NS_INIT_REFCNT(); + mListener = nsnull; mTransferBuffer=0; mSink=0; mContextStackPos=0; @@ -180,6 +181,7 @@ nsHTMLParser::~nsHTMLParser() { PL_strfree(gURLRef); gURLRef = 0; } + NS_IF_RELEASE(mListener); if(mTransferBuffer) delete [] mTransferBuffer; mTransferBuffer=0; @@ -647,7 +649,9 @@ PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental){ * @param aFilename -- const char* containing file to be parsed. * @return PR_TRUE if parse succeeded, PR_FALSE otherwise. */ -PRInt32 nsHTMLParser::Parse(nsIURL* aURL,PRBool aIncremental ){ +PRInt32 nsHTMLParser::Parse(nsIURL* aURL, + nsIStreamListener* aListener, + PRBool aIncremental) { NS_PRECONDITION(0!=aURL,kNullURL); PRInt32 status=kBadURL; @@ -655,6 +659,10 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL,PRBool aIncremental ){ if(rickGDebug) return Parse("c:/temp/temp.html",PR_TRUE); + NS_IF_RELEASE(mListener); + mListener = aListener; + NS_IF_ADDREF(aListener); + mIncremental=aIncremental; mParseMode=DetermineParseMode(); @@ -687,7 +695,7 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL,PRBool aIncremental ){ status=ResumeParse(); DidBuildModel(status); } - }//if + } } return status; } @@ -1619,8 +1627,14 @@ nsresult nsHTMLParser::GetBindInfo(void){ * @param * @return */ -nsresult nsHTMLParser::OnProgress(PRInt32 Progress, PRInt32 ProgressMax, const char *msg){ +nsresult +nsHTMLParser::OnProgress(PRInt32 aProgress, PRInt32 aProgressMax, + const char *aMsg) +{ nsresult result=0; + if (nsnull != mListener) { + mListener->OnProgress(aProgress, aProgressMax, aMsg); + } return result; } @@ -1632,6 +1646,9 @@ nsresult nsHTMLParser::OnProgress(PRInt32 Progress, PRInt32 ProgressMax, const c * @return */ nsresult nsHTMLParser::OnStartBinding(void){ + if (nsnull != mListener) { + mListener->OnStartBinding(); + } nsresult result=WillBuildModel(); if(!mTransferBuffer) { mTransferBuffer=new char[gTransferBufferSize+1]; @@ -1648,6 +1665,9 @@ nsresult nsHTMLParser::OnStartBinding(void){ * @return error code (usually 0) */ nsresult nsHTMLParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length){ + if (nsnull != mListener) { + mListener->OnDataAvailable(pIStream, length); + } int len=0; int offset=0; @@ -1691,6 +1711,9 @@ nsresult nsHTMLParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length) * @return */ nsresult nsHTMLParser::OnStopBinding(PRInt32 status, const char *msg){ + if (nsnull != mListener) { + mListener->OnStopBinding(status, msg); + } nsresult result=DidBuildModel(status); return result; } diff --git a/parser/htmlparser/src/nsHTMLParser.h b/parser/htmlparser/src/nsHTMLParser.h index 776670bb378..2d63b9a9728 100644 --- a/parser/htmlparser/src/nsHTMLParser.h +++ b/parser/htmlparser/src/nsHTMLParser.h @@ -111,10 +111,12 @@ friend class CTokenHandler; * Cause parser to parse input from given URL in given mode * @update gess5/11/98 * @param aURL is a descriptor for source document - * @param aMode is the desired parser mode (Nav, other, etc.) + * @param aListener is a listener to forward notifications to * @return TRUE if all went well -- FALSE otherwise */ - virtual PRInt32 Parse(nsIURL* aURL,PRBool aIncremental=PR_TRUE); + virtual PRInt32 Parse(nsIURL* aURL, + nsIStreamListener* aListener, + PRBool aIncremental=PR_TRUE); /** * Cause parser to parse input from given file in given mode @@ -503,6 +505,7 @@ protected: // And now, some data members... //********************************************* + nsIStreamListener* mListener; nsIHTMLContentSink* mSink; CTokenizer* mTokenizer; diff --git a/parser/htmlparser/src/nsIParser.h b/parser/htmlparser/src/nsIParser.h index 804f6f61dd1..b810d5e9dcb 100644 --- a/parser/htmlparser/src/nsIParser.h +++ b/parser/htmlparser/src/nsIParser.h @@ -15,16 +15,6 @@ * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ - - -/** - * MODULE NOTES: - * @update gess 4/1/98 - * - * This file declarse the parser interface. - * - */ - #ifndef NS_IPARSER___ #define NS_IPARSER___ @@ -40,6 +30,7 @@ class nsIContentSink; +class nsIStreamListener; class nsString; /** @@ -49,23 +40,25 @@ class nsString; * @update gess 3/25/98 */ class nsIParser : public nsISupports { - public: virtual nsIContentSink* SetContentSink(nsIContentSink* aContentSink)=0; - virtual PRInt32 Parse(nsIURL* aURL,PRBool aIncremental=PR_TRUE)=0; + virtual PRInt32 Parse(nsIURL* aURL, + nsIStreamListener* aListener, + PRBool aIncremental=PR_TRUE) = 0; + virtual PRInt32 Parse(const char* aFilename,PRBool aIncremental)=0; + virtual PRInt32 Parse(nsString& anHTMLString,PRBool appendTokens)=0; virtual PRInt32 ResumeParse(void)=0; + virtual PRInt32 GetStack(PRInt32* aStackPtr)=0; + virtual PRBool HasOpenContainer(PRInt32 aContainer) const=0; }; extern NS_HTMLPARS nsresult NS_NewHTMLParser(nsIParser** aInstancePtrResult); #endif - - -