From 60ebe042b1d0987d75d8bf27f49816e887c72392 Mon Sep 17 00:00:00 2001 From: rickg Date: Fri, 19 Jun 1998 01:00:27 +0000 Subject: [PATCH] more bug fixes; changed nsHTMLParser to nsParser. --- content/html/document/src/nsHTMLDocument.cpp | 2 +- htmlparser/robot/nsDebugRobot.cpp | 2 +- htmlparser/src/CNavDTD.cpp | 92 +++++++------- htmlparser/src/CNavDTD.h | 4 +- htmlparser/src/COtherDTD.cpp | 88 ++++++------- htmlparser/src/COtherDTD.h | 4 +- htmlparser/src/Makefile | 2 +- htmlparser/src/SelfTest.cpp | 4 +- htmlparser/src/makefile.win | 4 +- htmlparser/src/nsHTMLTokens.cpp | 73 +++-------- htmlparser/src/nsHTMLTokens.h | 44 +++---- htmlparser/src/nsIParser.h | 3 +- htmlparser/src/nsIParserDebug.h | 4 +- .../src/{nsHTMLParser.cpp => nsParser.cpp} | 106 +++++++++------- htmlparser/src/{nsHTMLParser.h => nsParser.h} | 22 ++-- htmlparser/src/nsParserDebug.cpp | 117 +++++++++--------- htmlparser/src/nsParserNode.cpp | 3 +- htmlparser/src/nsParserNode.h | 2 +- htmlparser/src/nsParserTypes.h | 1 + htmlparser/src/nsToken.cpp | 14 +-- htmlparser/src/nsToken.h | 13 +- layout/html/document/src/nsHTMLDocument.cpp | 2 +- parser/htmlparser/robot/nsDebugRobot.cpp | 2 +- parser/htmlparser/src/CNavDTD.cpp | 92 +++++++------- parser/htmlparser/src/CNavDTD.h | 4 +- parser/htmlparser/src/COtherDTD.cpp | 88 ++++++------- parser/htmlparser/src/COtherDTD.h | 4 +- parser/htmlparser/src/Makefile | 2 +- parser/htmlparser/src/SelfTest.cpp | 4 +- parser/htmlparser/src/makefile.win | 4 +- parser/htmlparser/src/nsHTMLTokens.cpp | 73 +++-------- parser/htmlparser/src/nsHTMLTokens.h | 44 +++---- parser/htmlparser/src/nsIParser.h | 3 +- parser/htmlparser/src/nsIParserDebug.h | 4 +- .../src/{nsHTMLParser.cpp => nsParser.cpp} | 106 +++++++++------- .../src/{nsHTMLParser.h => nsParser.h} | 22 ++-- parser/htmlparser/src/nsParserDebug.cpp | 117 +++++++++--------- parser/htmlparser/src/nsParserNode.cpp | 3 +- parser/htmlparser/src/nsParserNode.h | 2 +- parser/htmlparser/src/nsParserTypes.h | 1 + parser/htmlparser/src/nsToken.cpp | 14 +-- parser/htmlparser/src/nsToken.h | 13 +- 42 files changed, 592 insertions(+), 616 deletions(-) rename htmlparser/src/{nsHTMLParser.cpp => nsParser.cpp} (87%) rename htmlparser/src/{nsHTMLParser.h => nsParser.h} (97%) rename parser/htmlparser/src/{nsHTMLParser.cpp => nsParser.cpp} (87%) rename parser/htmlparser/src/{nsHTMLParser.h => nsParser.h} (97%) diff --git a/content/html/document/src/nsHTMLDocument.cpp b/content/html/document/src/nsHTMLDocument.cpp index 9e2b7e3c9f59..c71103efd2b3 100644 --- a/content/html/document/src/nsHTMLDocument.cpp +++ b/content/html/document/src/nsHTMLDocument.cpp @@ -111,7 +111,7 @@ nsHTMLDocument::LoadURL(nsIURL* aURL, nsIStreamListener* aListener, } nsIParser* parser; - nsresult rv = NS_NewHTMLParser(&parser); + nsresult rv = NS_NewParser(&parser); if (NS_OK == rv) { nsIHTMLContentSink* sink; rv = NS_NewHTMLContentSink(&sink, this, aURL); diff --git a/htmlparser/robot/nsDebugRobot.cpp b/htmlparser/robot/nsDebugRobot.cpp index 41ad5071a5a6..233aa7b052c6 100644 --- a/htmlparser/robot/nsDebugRobot.cpp +++ b/htmlparser/robot/nsDebugRobot.cpp @@ -208,7 +208,7 @@ extern "C" NS_EXPORT int DebugRobot( delete urlName; nsIParser* parser; - rv = NS_NewHTMLParser(&parser); + rv = NS_NewParser(&parser); if (NS_OK != rv) { printf("can't make parser\n"); NS_RELEASE(pIParserDebug); diff --git a/htmlparser/src/CNavDTD.cpp b/htmlparser/src/CNavDTD.cpp index 4547755d1fbf..1a9338765d90 100644 --- a/htmlparser/src/CNavDTD.cpp +++ b/htmlparser/src/CNavDTD.cpp @@ -29,16 +29,16 @@ * * ...add comments here about transient style stack. * - */ + */ #include "nsIParserDebug.h" #include "CNavDTD.h" #include "nsHTMLTokens.h" #include "nsCRT.h" -#include "nsParserTypes.h" -#include "nsHTMLParser.h" +#include "nsParser.h" #include "nsHTMLContentSink.h" #include "nsScanner.h" +#include "nsParserTypes.h" #include "prenv.h" //this is here for debug reasons... #include "prtypes.h" //this is here for debug reasons... @@ -122,7 +122,7 @@ nsresult CNavDTD::QueryInterface(const nsIID& aIID, void** aInstancePtr) /** * This method is defined in nsIParser. It is used to - * cause the COM-like construction of an nsHTMLParser. + * cause the COM-like construction of an nsParser. * * @update gess 4/8/98 * @param nsIParser** ptr to newly instantiated parser @@ -395,7 +395,7 @@ PRInt32 CNavDTD::HandleStartToken(CToken* aToken) { NS_PRECONDITION(0!=aToken,kNullToken); CStartToken* st= (CStartToken*)(aToken); - eHTMLTags tokenTagType=st->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)st->GetTypeID(); //Begin by gathering up attributes... nsCParserNode attrNode((CHTMLToken*)aToken); @@ -511,7 +511,8 @@ PRInt32 CNavDTD::HandleEndToken(CToken* aToken) { PRInt32 result=kNoError; CEndToken* et = (CEndToken*)(aToken); - eHTMLTags tokenTagType=et->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)et->GetTypeID(); + // Here's the hacky part: // Because we're trying to be backward compatible with Nav4/5, @@ -581,7 +582,7 @@ PRInt32 CNavDTD::HandleEntityToken(CToken* aToken) { CEntityToken* et = (CEntityToken*)(aToken); PRInt32 result=kNoError; - eHTMLTags tokenTagType=et->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)et->GetTypeID(); if(PR_FALSE==CanOmit(GetTopNode(),tokenTagType)) { nsCParserNode aNode((CHTMLToken*)aToken); @@ -762,7 +763,7 @@ CTokenHandler* CNavDTD::AddTokenHandler(CTokenHandler* aHandler) { * @return */ void CNavDTD::SetParser(nsIParser* aParser) { - mParser=(nsHTMLParser*)aParser; + mParser=(nsParser*)aParser; } /** @@ -1675,7 +1676,7 @@ PRInt32 CNavDTD::OpenTransientStyles(eHTMLTags aTag){ case eHTMLTag_secret_h5style: case eHTMLTag_secret_h6style: break; default: - token.SetHTMLTag(theTag); //open the html container... + token.SetTypeID(theTag); //open the html container... result=OpenContainer(theNode,PR_FALSE); mLeafBits[mContextStackPos-1]=PR_TRUE; } //switch @@ -1809,7 +1810,7 @@ PRInt32 CNavDTD::OpenBody(const nsIParserNode& aNode){ CHTMLToken token(gEmpty); nsCParserNode htmlNode(&token); - token.SetHTMLTag(eHTMLTag_html); //open the html container... + token.SetTypeID(eHTMLTag_html); //open the html container... result=OpenHTML(htmlNode); } } @@ -2056,7 +2057,7 @@ PRInt32 CNavDTD::CloseContainersTo(PRInt32 anIndex,eHTMLTags aTag,PRBool aUpdate if((anIndex=0)) { while(mContextStackPos>anIndex) { eHTMLTags theTag=mContextStack[mContextStackPos-1]; - aToken.SetHTMLTag(theTag); + aToken.SetTypeID(theTag); result=CloseContainer(theNode,aTag,aUpdateStyles); } } @@ -2117,7 +2118,7 @@ PRInt32 CNavDTD::CloseTopmostContainer(){ CEndToken aToken(gEmpty); eHTMLTags theTag=(eHTMLTags)mContextStack[mContextStackPos-1]; - aToken.SetHTMLTag(theTag); + aToken.SetTypeID(theTag); nsCParserNode theNode(&aToken); return CloseContainer(theNode,theTag,PR_TRUE); } @@ -2287,39 +2288,40 @@ PRInt32 CNavDTD::UpdateStyleStackForOpenTag(eHTMLTags aTag,eHTMLTags anActualTag PRInt32 CNavDTD::UpdateStyleStackForCloseTag(eHTMLTags aTag,eHTMLTags anActualTag){ PRInt32 result=0; - switch (aTag) { + if(mStyleStackPos>0) { + switch (aTag) { - case eHTMLTag_a: - case eHTMLTag_bold: - case eHTMLTag_big: - case eHTMLTag_blink: - case eHTMLTag_cite: - case eHTMLTag_em: - case eHTMLTag_font: - case eHTMLTag_italic: - case eHTMLTag_kbd: - case eHTMLTag_small: - case eHTMLTag_spell: - case eHTMLTag_strike: - case eHTMLTag_strong: - case eHTMLTag_sub: - case eHTMLTag_sup: - case eHTMLTag_tt: - case eHTMLTag_u: - case eHTMLTag_var: - if(aTag==anActualTag) - mStyleStack[--mStyleStackPos]=eHTMLTag_unknown; - break; + case eHTMLTag_a: + case eHTMLTag_bold: + case eHTMLTag_big: + case eHTMLTag_blink: + case eHTMLTag_cite: + case eHTMLTag_em: + case eHTMLTag_font: + case eHTMLTag_italic: + case eHTMLTag_kbd: + case eHTMLTag_small: + case eHTMLTag_spell: + case eHTMLTag_strike: + case eHTMLTag_strong: + case eHTMLTag_sub: + case eHTMLTag_sup: + case eHTMLTag_tt: + case eHTMLTag_u: + case eHTMLTag_var: + if(aTag==anActualTag) + mStyleStack[--mStyleStackPos]=eHTMLTag_unknown; + break; - case eHTMLTag_h1: case eHTMLTag_h2: - case eHTMLTag_h3: case eHTMLTag_h4: - case eHTMLTag_h5: case eHTMLTag_h6: - break; - - default: - break; - } + case eHTMLTag_h1: case eHTMLTag_h2: + case eHTMLTag_h3: case eHTMLTag_h4: + case eHTMLTag_h5: case eHTMLTag_h6: + break; + default: + break; + }//switch + }//if return result; } //update... @@ -2720,6 +2722,12 @@ void CNavDTD::WillInterruptParse(void){ return; } + +/************************************************************************ + Here's a bunch of stuff JEvering put into the parser to do debugging. + ************************************************************************/ + + void CNavDTD::SetURLRef(char * aURLRef){ if (mURLRef) { PL_strfree(mURLRef); diff --git a/htmlparser/src/CNavDTD.h b/htmlparser/src/CNavDTD.h index cdaa93d9dd9c..410485673c44 100644 --- a/htmlparser/src/CNavDTD.h +++ b/htmlparser/src/CNavDTD.h @@ -40,7 +40,7 @@ {0xaa, 0xda, 0x00, 0x80, 0x5f, 0x8a, 0x3e, 0x14}} -class nsHTMLParser; +class nsParser; class nsIHTMLContentSink; class nsIParserDebug; @@ -681,7 +681,7 @@ protected: PRBool CanContainFormElement(eHTMLTags aParent,eHTMLTags aChild) const; - nsHTMLParser* mParser; + nsParser* mParser; nsIHTMLContentSink* mSink; CTokenHandler* mTokenHandlers[eToken_last]; diff --git a/htmlparser/src/COtherDTD.cpp b/htmlparser/src/COtherDTD.cpp index 3a2306268b53..f11600a3a3e7 100644 --- a/htmlparser/src/COtherDTD.cpp +++ b/htmlparser/src/COtherDTD.cpp @@ -35,10 +35,10 @@ #include "COtherDTD.h" #include "nsHTMLTokens.h" #include "nsCRT.h" -#include "nsParserTypes.h" -#include "nsHTMLParser.h" +#include "nsParser.h" #include "nsHTMLContentSink.h" #include "nsScanner.h" +#include "nsParserTypes.h" #include "prenv.h" //this is here for debug reasons... #include "prtypes.h" @@ -125,7 +125,7 @@ nsresult COtherDTD::QueryInterface(const nsIID& aIID, void** aInstancePtr) /** * This method is defined in nsIParser. It is used to - * cause the COM-like construction of an nsHTMLParser. + * cause the COM-like construction of an nsParser. * * @update gess 4/8/98 * @param nsIParser** ptr to newly instantiated parser @@ -397,7 +397,7 @@ PRInt32 COtherDTD::HandleStartToken(CToken* aToken) { NS_PRECONDITION(0!=aToken,kNullToken); CStartToken* st= (CStartToken*)(aToken); - eHTMLTags tokenTagType=st->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)st->GetTypeID(); //Begin by gathering up attributes... nsCParserNode attrNode((CHTMLToken*)aToken); @@ -513,7 +513,7 @@ PRInt32 COtherDTD::HandleEndToken(CToken* aToken) { PRInt32 result=kNoError; CEndToken* et = (CEndToken*)(aToken); - eHTMLTags tokenTagType=et->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)et->GetTypeID(); // Here's the hacky part: // Because we're trying to be backward compatible with Nav4/5, @@ -583,7 +583,7 @@ PRInt32 COtherDTD::HandleEntityToken(CToken* aToken) { CEntityToken* et = (CEntityToken*)(aToken); PRInt32 result=kNoError; - eHTMLTags tokenTagType=et->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)et->GetTypeID(); if(PR_FALSE==CanOmit(GetTopNode(),tokenTagType)) { nsCParserNode aNode((CHTMLToken*)aToken); @@ -764,7 +764,7 @@ CTokenHandler* COtherDTD::AddTokenHandler(CTokenHandler* aHandler) { * @return */ void COtherDTD::SetParser(nsIParser* aParser) { - mParser=(nsHTMLParser*)aParser; + mParser=(nsParser*)aParser; } /** @@ -1677,7 +1677,7 @@ PRInt32 COtherDTD::OpenTransientStyles(eHTMLTags aTag){ case eHTMLTag_secret_h5style: case eHTMLTag_secret_h6style: break; default: - token.SetHTMLTag(theTag); //open the html container... + token.SetTypeID(theTag); //open the html container... result=OpenContainer(theNode,PR_FALSE); mLeafBits[mContextStackPos-1]=PR_TRUE; } //switch @@ -1811,7 +1811,7 @@ PRInt32 COtherDTD::OpenBody(const nsIParserNode& aNode){ CHTMLToken token(gEmpty); nsCParserNode htmlNode(&token); - token.SetHTMLTag(eHTMLTag_html); //open the html container... + token.SetTypeID(eHTMLTag_html); //open the html container... result=OpenHTML(htmlNode); } } @@ -2058,7 +2058,7 @@ PRInt32 COtherDTD::CloseContainersTo(PRInt32 anIndex,eHTMLTags aTag,PRBool aUpda if((anIndex=0)) { while(mContextStackPos>anIndex) { eHTMLTags theTag=mContextStack[mContextStackPos-1]; - aToken.SetHTMLTag(theTag); + aToken.SetTypeID(theTag); result=CloseContainer(theNode,aTag,aUpdateStyles); } } @@ -2119,7 +2119,7 @@ PRInt32 COtherDTD::CloseTopmostContainer(){ CEndToken aToken(gEmpty); eHTMLTags theTag=(eHTMLTags)mContextStack[mContextStackPos-1]; - aToken.SetHTMLTag(theTag); + aToken.SetTypeID(theTag); nsCParserNode theNode(&aToken); return CloseContainer(theNode,theTag,PR_TRUE); } @@ -2289,43 +2289,43 @@ PRInt32 COtherDTD::UpdateStyleStackForOpenTag(eHTMLTags aTag,eHTMLTags anActualT PRInt32 COtherDTD::UpdateStyleStackForCloseTag(eHTMLTags aTag,eHTMLTags anActualTag){ PRInt32 result=0; - switch (aTag) { + if(mStyleStackPos>0) { + switch (aTag) { - case eHTMLTag_a: - case eHTMLTag_bold: - case eHTMLTag_big: - case eHTMLTag_blink: - case eHTMLTag_cite: - case eHTMLTag_em: - case eHTMLTag_font: - case eHTMLTag_italic: - case eHTMLTag_kbd: - case eHTMLTag_small: - case eHTMLTag_spell: - case eHTMLTag_strike: - case eHTMLTag_strong: - case eHTMLTag_sub: - case eHTMLTag_sup: - case eHTMLTag_tt: - case eHTMLTag_u: - case eHTMLTag_var: - if(aTag==anActualTag) - mStyleStack[--mStyleStackPos]=eHTMLTag_unknown; - break; + case eHTMLTag_a: + case eHTMLTag_bold: + case eHTMLTag_big: + case eHTMLTag_blink: + case eHTMLTag_cite: + case eHTMLTag_em: + case eHTMLTag_font: + case eHTMLTag_italic: + case eHTMLTag_kbd: + case eHTMLTag_small: + case eHTMLTag_spell: + case eHTMLTag_strike: + case eHTMLTag_strong: + case eHTMLTag_sub: + case eHTMLTag_sup: + case eHTMLTag_tt: + case eHTMLTag_u: + case eHTMLTag_var: + if(aTag==anActualTag) + mStyleStack[--mStyleStackPos]=eHTMLTag_unknown; + break; - case eHTMLTag_h1: case eHTMLTag_h2: - case eHTMLTag_h3: case eHTMLTag_h4: - case eHTMLTag_h5: case eHTMLTag_h6: - break; - - default: - break; - } + case eHTMLTag_h1: case eHTMLTag_h2: + case eHTMLTag_h3: case eHTMLTag_h4: + case eHTMLTag_h5: case eHTMLTag_h6: + break; + default: + break; + }//switch + }//if return result; } //update... - /******************************************************************* These methods used to be hidden in the tokenizer-delegate. That file merged with the DTD, since the separation wasn't really @@ -2722,6 +2722,10 @@ void COtherDTD::WillInterruptParse(void){ return; } +/************************************************************************ + Here's a bunch of stuff JEvering put into the parser to do debugging. + ************************************************************************/ + void COtherDTD::SetURLRef(char * aURLRef){ if (mURLRef) { PL_strfree(mURLRef); diff --git a/htmlparser/src/COtherDTD.h b/htmlparser/src/COtherDTD.h index 7a74866cf130..1cd27f7cd463 100644 --- a/htmlparser/src/COtherDTD.h +++ b/htmlparser/src/COtherDTD.h @@ -39,7 +39,7 @@ {0x80, 0x22, 0x00, 0x60, 0x8, 0x14, 0x98, 0x89}} -class nsIParser; +class nsParser; class nsIHTMLContentSink; class nsIParserDebug; @@ -682,7 +682,7 @@ protected: PRBool CanContainFormElement(eHTMLTags aParent,eHTMLTags aChild) const; - nsHTMLParser* mParser; + nsParser* mParser; nsIHTMLContentSink* mSink; CTokenHandler* mTokenHandlers[eToken_last]; diff --git a/htmlparser/src/Makefile b/htmlparser/src/Makefile index 243a5c4aa988..b145aa09f0af 100644 --- a/htmlparser/src/Makefile +++ b/htmlparser/src/Makefile @@ -30,7 +30,7 @@ CPPSRCS = \ nsTokenHandler.cpp \ CNavDTD.cpp \ COtherDTD.cpp \ - nsHTMLParser.cpp \ + nsParser.cpp \ nsHTMLTokens.cpp \ prstrm.cpp \ $(NULL) diff --git a/htmlparser/src/SelfTest.cpp b/htmlparser/src/SelfTest.cpp index 630ebea78090..31186bc37606 100644 --- a/htmlparser/src/SelfTest.cpp +++ b/htmlparser/src/SelfTest.cpp @@ -99,8 +99,8 @@ void parseFile (const char* aFilename,int size) strcat(filename,".tokens"); { nsIParser* parser; - nsresult rv = NS_NewHTMLParser(&parser); - nsresult r=NS_NewHTMLParser(&parser); + nsresult rv = NS_NewParser(&parser); + nsresult r=NS_NewParser(&parser); CHTMLContentSink theSink; parser->setContentSink(&theSink); parser->parse(aFilename); diff --git a/htmlparser/src/makefile.win b/htmlparser/src/makefile.win index 940db9e04f24..74f7172436ab 100644 --- a/htmlparser/src/makefile.win +++ b/htmlparser/src/makefile.win @@ -28,7 +28,7 @@ CPPSRCS=nsHTMLContentSink.cpp \ nsToken.cpp nsTokenHandler.cpp \ CNavDTD.cpp \ COtherDTD.cpp \ - nsHTMLParser.cpp prstrm.cpp + nsParser.cpp prstrm.cpp EXPORTS=nshtmlpars.h nsIContentSink.h nsIHTMLContentSink.h \ nsHTMLTokens.h nsIParserNode.h nsIParser.h nsToken.h \ @@ -37,7 +37,7 @@ EXPORTS=nshtmlpars.h nsIContentSink.h nsIHTMLContentSink.h \ CPP_OBJS=.\$(OBJDIR)\nsHTMLContentSink.obj \ .\$(OBJDIR)\CNavDTD.obj \ .\$(OBJDIR)\COtherDTD.obj \ - .\$(OBJDIR)\nsHTMLParser.obj \ + .\$(OBJDIR)\nsParser.obj \ .\$(OBJDIR)\nsHTMLTokens.obj .\$(OBJDIR)\nsParserNode.obj \ .\$(OBJDIR)\nsScanner.obj .\$(OBJDIR)\nsToken.obj \ .\$(OBJDIR)\nsTokenHandler.obj .\$(OBJDIR)\nsParserDebug.obj \ diff --git a/htmlparser/src/nsHTMLTokens.cpp b/htmlparser/src/nsHTMLTokens.cpp index 1f696300416f..288c798e8bd9 100644 --- a/htmlparser/src/nsHTMLTokens.cpp +++ b/htmlparser/src/nsHTMLTokens.cpp @@ -261,7 +261,7 @@ HTMLAttrEntry gHTMLAttributeTable[] = * @return */ CHTMLToken::CHTMLToken(const nsString& aName) : CToken(aName) { - mTagType=eHTMLTag_unknown; + mTypeID=eHTMLTag_unknown; } /* @@ -272,31 +272,9 @@ CHTMLToken::CHTMLToken(const nsString& aName) : CToken(aName) { * @return */ CHTMLToken::CHTMLToken(eHTMLTags aTag) : CToken(GetTagName(aTag)) { - mTagType=aTag; + mTypeID=aTag; } -/* - * - * - * @update gess 3/25/98 - * @param - * @return - */ -eHTMLTags CHTMLToken::GetHTMLTag() { - return mTagType; -} - -/* - * - * - * @update gess 3/25/98 - * @param - * @return - */ -void CHTMLToken::SetHTMLTag(eHTMLTags aTagType) { - mTagType=aTagType; - return; -} /* * default constructor @@ -327,10 +305,10 @@ CStartToken::CStartToken(eHTMLTags aTag) : CHTMLToken(aTag) { * @param * @return */ -eHTMLTags CStartToken::GetHTMLTag(){ - if(eHTMLTag_unknown==mTagType) - mTagType=DetermineHTMLTagType(mTextValue); - return mTagType; +PRInt32 CStartToken::GetTypeID(){ + if(eHTMLTag_unknown==mTypeID) + mTypeID=DetermineHTMLTagType(mTextValue); + return mTypeID; } /* @@ -439,7 +417,7 @@ void CStartToken::DebugDumpSource(ostream& out) { * @return */ CEndToken::CEndToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_end; + mTypeID=eHTMLTag_unknown; } /* @@ -475,10 +453,10 @@ PRInt32 CEndToken::Consume(PRUnichar aChar, CScanner& aScanner) { * @param * @return eHTMLTag id of this endtag */ -eHTMLTags CEndToken::GetHTMLTag(){ - if(eHTMLTag_unknown==mTagType) - mTagType=DetermineHTMLTagType(mTextValue); - return mTagType; +PRInt32 CEndToken::GetTypeID(){ + if(eHTMLTag_unknown==mTypeID) + mTypeID=DetermineHTMLTagType(mTextValue); + return mTypeID; } /* @@ -525,8 +503,7 @@ void CEndToken::DebugDumpSource(ostream& out) { * @return */ CTextToken::CTextToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_text; - mTagType=eHTMLTag_text; + mTypeID=eHTMLTag_text; } /* @@ -574,8 +551,7 @@ PRInt32 CTextToken::Consume(PRUnichar aChar, CScanner& aScanner) { * @return */ CCommentToken::CCommentToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_comment; - mTagType=eHTMLTag_comment; + mTypeID=eHTMLTag_comment; } /* @@ -647,8 +623,7 @@ PRInt32 CCommentToken::GetTokenType(void) { * @return */ CNewlineToken::CNewlineToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_newline; - mTagType=eHTMLTag_newline; + mTypeID=eHTMLTag_newline; } /* @@ -730,7 +705,6 @@ PRInt32 CNewlineToken::Consume(PRUnichar aChar, CScanner& aScanner) { CAttributeToken::CAttributeToken(const nsString& aName) : CHTMLToken(aName), mTextKey() { mLastAttribute=PR_FALSE; - mOrdinalValue=eToken_attribute; } /* @@ -767,7 +741,7 @@ void CAttributeToken::DebugDumpToken(ostream& out) { out << "[" << GetClassName() << "] " << *cp << "="; delete cp; char* cp2=mTextValue.ToNewCString(); - out << *cp2 << ": " << mOrdinalValue << endl; + out << *cp2 << ": " << mTypeID << endl; } @@ -915,8 +889,7 @@ void CAttributeToken::DebugDumpSource(ostream& out) { * @return */ CWhitespaceToken::CWhitespaceToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_whitespace; - mTagType=eHTMLTag_whitespace; + mTypeID=eHTMLTag_whitespace; } /* @@ -969,8 +942,7 @@ PRInt32 CWhitespaceToken::Consume(PRUnichar aChar, CScanner& aScanner) { * @return */ CEntityToken::CEntityToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_entity; - mTagType=eHTMLTag_entity; + mTypeID=eHTMLTag_entity; #ifdef VERBOSE_DEBUG if(!VerifyEntityTable()) { cout<<"Entity table is invalid!" << endl; @@ -1255,7 +1227,6 @@ PRInt32 CStyleToken::GetTokenType(void) { */ CSkippedContentToken::CSkippedContentToken(const nsString& aName) : CAttributeToken(aName) { mTextKey = "$skipped-content";/* XXX need a better answer! */ - mOrdinalValue=eToken_skippedcontent; } /* @@ -1334,16 +1305,6 @@ public: }; -/*------------------------------------------------------- - * - * @update gess4/6/98 - * @param - * @return - */ -eHTMLTokenTypes DetermineTokenType(const nsString& aString){ - return eToken_unknown; -} - /* * This method accepts a string (and optionally, its length) * and determines the eHTMLTag (id) value. diff --git a/htmlparser/src/nsHTMLTokens.h b/htmlparser/src/nsHTMLTokens.h index c64043046833..dadac171edcb 100644 --- a/htmlparser/src/nsHTMLTokens.h +++ b/htmlparser/src/nsHTMLTokens.h @@ -35,7 +35,6 @@ #include "nsToken.h" #include - class CScanner; enum eHTMLTokenTypes { @@ -47,6 +46,7 @@ enum eHTMLTokenTypes { eToken_last //make sure this stays the last token... }; + //*** This enum is used to define the known universe of HTML tags. //*** The use of this table doesn't preclude of from using non-standard //*** tags. It simply makes normal tag handling more efficient. @@ -123,7 +123,6 @@ PRInt32 ConsumeQuotedString(PRUnichar aChar,nsString& aString,CScanner& PRInt32 ConsumeAttributeText(PRUnichar aChar,nsString& aString,CScanner& aScanner); PRInt32 FindEntityIndex(const char* aBuffer,PRInt32 aBufLen=-1); eHTMLTags DetermineHTMLTagType(const nsString& aString); -eHTMLTokenTypes DetermineTokenType(const nsString& aString); const char* GetTagName(PRInt32 aTag); @@ -137,10 +136,7 @@ class CHTMLToken : public CToken { public: CHTMLToken(eHTMLTags aTag); CHTMLToken(const nsString& aString); - virtual eHTMLTags GetHTMLTag(); - void SetHTMLTag(eHTMLTags aTagType); protected: - eHTMLTags mTagType; }; @@ -156,7 +152,7 @@ class CStartToken: public CHTMLToken { CStartToken(eHTMLTags aTag); CStartToken(const nsString& aString); virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual eHTMLTags GetHTMLTag(); + virtual PRInt32 GetTypeID(void); virtual const char* GetClassName(void); virtual PRInt32 GetTokenType(void); void SetAttributed(PRBool aValue); @@ -180,7 +176,7 @@ class CEndToken: public CHTMLToken { public: CEndToken(const nsString& aString); virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual eHTMLTags GetHTMLTag(); + virtual PRInt32 GetTypeID(void); virtual const char* GetClassName(void); virtual PRInt32 GetTokenType(void); virtual void DebugDumpSource(ostream& out); @@ -198,9 +194,9 @@ class CEndToken: public CHTMLToken { class CCommentToken: public CHTMLToken { public: CCommentToken(const nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); char mLeadingChar; }; @@ -215,16 +211,16 @@ class CCommentToken: public CHTMLToken { class CEntityToken : public CHTMLToken { public: CEntityToken(const nsString& aString); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); PRInt32 TranslateToUnicodeStr(nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); static PRInt32 ConsumeEntity(PRUnichar aChar,nsString& aString,CScanner& aScanner); static PRInt32 TranslateToUnicodeStr(PRInt32 aValue,nsString& aString); static PRInt32 FindEntityIndex(const char* aBuffer,PRInt32 aBufLen=-1); static PRBool VerifyEntityTable(void); static PRInt32 ReduceEntities(nsString& aString); - virtual void DebugDumpSource(ostream& out); + virtual void DebugDumpSource(ostream& out); private: static PRInt32 mEntityTokenCount; @@ -241,7 +237,7 @@ class CEntityToken : public CHTMLToken { class CWhitespaceToken: public CHTMLToken { public: CWhitespaceToken(const nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); virtual const char* GetClassName(void); virtual PRInt32 GetTokenType(void); }; @@ -273,9 +269,9 @@ class CTextToken: public CHTMLToken { class CAttributeToken: public CHTMLToken { public: CAttributeToken(const nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); virtual nsString& GetKey(void) {return mTextKey;} virtual void DebugDumpToken(ostream& out); virtual void DebugDumpSource(ostream& out); @@ -315,8 +311,8 @@ class CScriptToken: public CHTMLToken { public: CScriptToken(const nsString& aString); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); protected: }; @@ -331,7 +327,7 @@ class CScriptToken: public CHTMLToken { */ class CStyleToken: public CHTMLToken { public: - CStyleToken(const nsString& aString); + CStyleToken(const nsString& aString); virtual const char* GetClassName(void); virtual PRInt32 GetTokenType(void); protected: @@ -347,9 +343,9 @@ class CStyleToken: public CHTMLToken { class CSkippedContentToken: public CAttributeToken { public: CSkippedContentToken(const nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); protected: }; diff --git a/htmlparser/src/nsIParser.h b/htmlparser/src/nsIParser.h index a4ffd45bc271..05b4d20c9839 100644 --- a/htmlparser/src/nsIParser.h +++ b/htmlparser/src/nsIParser.h @@ -48,6 +48,7 @@ class nsIParser : public nsISupports { virtual nsIContentSink* SetContentSink(nsIContentSink* aContentSink)=0; virtual void SetDTD(nsIDTD* aDTD)=0; + virtual nsIDTD* GetDTD(void)=0; /** * Cause the tokenizer to consume the next token, and @@ -80,6 +81,6 @@ class nsIParser : public nsISupports { }; -extern NS_HTMLPARS nsresult NS_NewHTMLParser(nsIParser** aInstancePtrResult); +extern NS_HTMLPARS nsresult NS_NewParser(nsIParser** aInstancePtrResult); #endif diff --git a/htmlparser/src/nsIParserDebug.h b/htmlparser/src/nsIParserDebug.h index a1e45204291d..51981627764f 100644 --- a/htmlparser/src/nsIParserDebug.h +++ b/htmlparser/src/nsIParserDebug.h @@ -36,7 +36,7 @@ class nsIDTD; -class nsHTMLParser; +class nsParser; class nsIParserDebug : public nsISupports { @@ -46,7 +46,7 @@ public: virtual void SetRecordStatistics(PRBool bval) = 0; - virtual PRBool Verify(nsIDTD * aDTD, nsHTMLParser * aParser, int ContextStackPos, eHTMLTags aContextStack[], char * aURLRef) = 0; + virtual PRBool Verify(nsIDTD * aDTD, nsParser * aParser, int ContextStackPos, eHTMLTags aContextStack[], char * aURLRef) = 0; virtual void DumpVectorRecord(void) = 0; diff --git a/htmlparser/src/nsHTMLParser.cpp b/htmlparser/src/nsParser.cpp similarity index 87% rename from htmlparser/src/nsHTMLParser.cpp rename to htmlparser/src/nsParser.cpp index ca5f59e879ec..2434e364dbe5 100644 --- a/htmlparser/src/nsHTMLParser.cpp +++ b/htmlparser/src/nsParser.cpp @@ -18,7 +18,7 @@ //#define __INCREMENTAL 1 -#include "nsHTMLParser.h" +#include "nsParser.h" #include "nsIContentSink.h" #include "nsString.h" #include "nsCRT.h" @@ -40,7 +40,7 @@ */ static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kClassIID, NS_IHTML_PARSER_IID); +static NS_DEFINE_IID(kClassIID, NS_PARSER_IID); static NS_DEFINE_IID(kIParserIID, NS_IPARSER_IID); static const char* kNullURL = "Error: Null URL given"; @@ -49,7 +49,7 @@ static const char* kNullTokenizer = "Error: Unable to construct tokenizer"; static const int gTransferBufferSize=4096; //size of the buffer used in moving data from iistream -//#define DEBUG_SAVE_SOURCE_DOC 1 +#define DEBUG_SAVE_SOURCE_DOC 1 #ifdef DEBUG_SAVE_SOURCE_DOC fstream* gTempStream=0; #endif @@ -57,15 +57,15 @@ fstream* gTempStream=0; /** * This method is defined in nsIParser. It is used to - * cause the COM-like construction of an nsHTMLParser. + * cause the COM-like construction of an nsParser. * * @update gess 3/25/98 * @param nsIParser** ptr to newly instantiated parser * @return NS_xxx error result */ -NS_HTMLPARS nsresult NS_NewHTMLParser(nsIParser** aInstancePtrResult) +NS_HTMLPARS nsresult NS_NewParser(nsIParser** aInstancePtrResult) { - nsHTMLParser *it = new nsHTMLParser(); + nsParser *it = new nsParser(); if (it == 0) { return NS_ERROR_OUT_OF_MEMORY; @@ -91,7 +91,7 @@ CTokenDeallocator gTokenKiller; * @param * @return */ -nsHTMLParser::nsHTMLParser() : mTokenDeque(gTokenKiller) { +nsParser::nsParser() : mTokenDeque(gTokenKiller) { NS_INIT_REFCNT(); mParserFilter = nsnull; mListener = nsnull; @@ -111,7 +111,7 @@ nsHTMLParser::nsHTMLParser() : mTokenDeque(gTokenKiller) { * @param * @return */ -nsHTMLParser::~nsHTMLParser() { +nsParser::~nsParser() { NS_IF_RELEASE(mListener); if(mTransferBuffer) delete [] mTransferBuffer; @@ -121,7 +121,7 @@ nsHTMLParser::~nsHTMLParser() { delete mCurrentPos; mCurrentPos=0; if(mDTD) - NS_RELEASE(mDTD); + NS_RELEASE(mDTD); mDTD=0; if(mScanner) delete mScanner; @@ -129,9 +129,9 @@ nsHTMLParser::~nsHTMLParser() { } -NS_IMPL_ADDREF(nsHTMLParser) -NS_IMPL_RELEASE(nsHTMLParser) -//NS_IMPL_ISUPPORTS(nsHTMLParser,NS_IHTML_PARSER_IID) +NS_IMPL_ADDREF(nsParser) +NS_IMPL_RELEASE(nsParser) +//NS_IMPL_ISUPPORTS(nsParser,NS_IHTML_PARSER_IID) /** @@ -144,7 +144,7 @@ NS_IMPL_RELEASE(nsHTMLParser) * @param aInstancePtr ptr to newly discovered interface * @return NS_xxx result code */ -nsresult nsHTMLParser::QueryInterface(const nsIID& aIID, void** aInstancePtr) +nsresult nsParser::QueryInterface(const nsIID& aIID, void** aInstancePtr) { if (NULL == aInstancePtr) { return NS_ERROR_NULL_POINTER; @@ -157,7 +157,7 @@ nsresult nsHTMLParser::QueryInterface(const nsIID& aIID, void** aInstancePtr) *aInstancePtr = (nsIParser*)(this); } else if(aIID.Equals(kClassIID)) { //do this class... - *aInstancePtr = (nsHTMLParser*)(this); + *aInstancePtr = (nsParser*)(this); } else { *aInstancePtr=0; @@ -167,7 +167,14 @@ nsresult nsHTMLParser::QueryInterface(const nsIID& aIID, void** aInstancePtr) return NS_OK; } -nsIParserFilter * nsHTMLParser::SetParserFilter(nsIParserFilter * aFilter) + +/** + * + * @update gess6/18/98 + * @param + * @return + */ +nsIParserFilter * nsParser::SetParserFilter(nsIParserFilter * aFilter) { nsIParserFilter* old=mParserFilter; if(old) @@ -187,7 +194,7 @@ nsIParserFilter * nsHTMLParser::SetParserFilter(nsIParserFilter * aFilter) * @param nsIContentSink interface for node receiver * @return */ -nsIContentSink* nsHTMLParser::SetContentSink(nsIContentSink* aSink) { +nsIContentSink* nsParser::SetContentSink(nsIContentSink* aSink) { NS_PRECONDITION(0!=aSink,"sink cannot be null!"); nsIContentSink* old=mSink; if(old) @@ -207,11 +214,17 @@ nsIContentSink* nsHTMLParser::SetContentSink(nsIContentSink* aSink) { * @param * @return */ -void nsHTMLParser::SetDTD(nsIDTD* aDTD) { +void nsParser::SetDTD(nsIDTD* aDTD) { mDTD=aDTD; } -nsIDTD * nsHTMLParser::GetDTD(void) { +/** + * Retrieve the DTD from the parser. + * @update gess6/18/98 + * @param + * @return + */ +nsIDTD * nsParser::GetDTD(void) { return mDTD; } @@ -222,7 +235,7 @@ nsIDTD * nsHTMLParser::GetDTD(void) { * @param * @return */ -CScanner* nsHTMLParser::GetScanner(void){ +CScanner* nsParser::GetScanner(void){ return mScanner; } @@ -234,15 +247,15 @@ CScanner* nsHTMLParser::GetScanner(void){ * @param * @return PR_TRUE if parse succeeded, PR_FALSE otherwise. */ -PRInt32 nsHTMLParser::IterateTokens() { +PRInt32 nsParser::IterateTokens() { nsDequeIterator e=mTokenDeque.End(); nsDequeIterator theMarkPos(e); + mMajorIteration++; if(!mCurrentPos) mCurrentPos=new nsDequeIterator(mTokenDeque.Begin()); PRInt32 result=kNoError; - while((kNoError==result) && ((*mCurrentPosGetCurrent(); @@ -285,7 +298,7 @@ eParseMode DetermineParseMode() { * @param * @return */ -nsIDTD* NewDTD(eParseMode aMode) { +nsIDTD* CreateDTD(eParseMode aMode) { nsIDTD* aDTD=0; switch(aMode) { case eParseMode_navigator: @@ -307,7 +320,7 @@ nsIDTD* NewDTD(eParseMode aMode) { * @param * @return */ -PRInt32 nsHTMLParser::WillBuildModel(void) { +PRInt32 nsParser::WillBuildModel(void) { mMajorIteration=-1; mMinorIteration=-1; @@ -332,7 +345,7 @@ PRInt32 nsHTMLParser::WillBuildModel(void) { * @param * @return */ -PRInt32 nsHTMLParser::DidBuildModel(PRInt32 anErrorCode) { +PRInt32 nsParser::DidBuildModel(PRInt32 anErrorCode) { //One last thing...close any open containers. PRInt32 result=anErrorCode; if(mDTD) { @@ -358,7 +371,7 @@ PRInt32 nsHTMLParser::DidBuildModel(PRInt32 anErrorCode) { * @param aFilename is the name of the disk file to use for testing. * @return error code (kNoError means ok) */ -PRInt32 nsHTMLParser::ParseFileIncrementally(const char* aFilename){ +PRInt32 nsParser::ParseFileIncrementally(const char* aFilename){ PRInt32 result=kBadFilename; fstream* theFileStream; nsString theBuffer; @@ -412,7 +425,7 @@ PRInt32 nsHTMLParser::ParseFileIncrementally(const char* aFilename){ * @param aFilename -- const char* containing file to be parsed. * @return PR_TRUE if parse succeeded, PR_FALSE otherwise. */ -PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental, nsIParserDebug * aDebug){ +PRBool nsParser::Parse(const char* aFilename,PRBool aIncremental, nsIParserDebug * aDebug){ NS_PRECONDITION(0!=aFilename,kNullFilename); PRInt32 status=kBadFilename; mIncremental=aIncremental; @@ -420,7 +433,7 @@ PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental, nsIParserD if(aFilename) { mParseMode=DetermineParseMode(); - mDTD=(0==mDTD) ? NewDTD(mParseMode) : mDTD; + mDTD=(0==mDTD) ? CreateDTD(mParseMode) : mDTD; if(mDTD) { mDTD->SetParser(this); mDTD->SetContentSink(mSink); @@ -457,7 +470,7 @@ PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental, nsIParserD * @param aFilename -- const char* containing file to be parsed. * @return PR_TRUE if parse succeeded, PR_FALSE otherwise. */ -PRInt32 nsHTMLParser::Parse(nsIURL* aURL, +PRInt32 nsParser::Parse(nsIURL* aURL, nsIStreamListener* aListener, PRBool aIncremental, nsIParserDebug * aDebug) { @@ -480,7 +493,7 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL, if(aURL) { mParseMode=DetermineParseMode(); - mDTD=(0==mDTD) ? NewDTD(mParseMode) : mDTD; + mDTD=(0==mDTD) ? CreateDTD(mParseMode) : mDTD; if(mDTD) { mDTD->SetParser(this); mDTD->SetContentSink(mSink); @@ -506,6 +519,7 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL, return status; } + /** * Call this method if all you want to do is parse 1 string full of HTML text. * @@ -514,7 +528,7 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL, * @param appendTokens tells us whether we should insert tokens inline, or append them. * @return TRUE if all went well -- FALSE otherwise */ -PRInt32 nsHTMLParser::Parse(nsString& aSourceBuffer,PRBool appendTokens){ +PRInt32 nsParser::Parse(nsString& aSourceBuffer,PRBool appendTokens){ PRInt32 result=kNoError; WillBuildModel(); @@ -535,7 +549,7 @@ PRInt32 nsHTMLParser::Parse(nsString& aSourceBuffer,PRBool appendTokens){ * @param * @return PR_TRUE if parsing concluded successfully. */ -PRInt32 nsHTMLParser::ResumeParse() { +PRInt32 nsParser::ResumeParse() { PRInt32 result=kNoError; mDTD->WillResumeParse(); @@ -558,7 +572,7 @@ PRInt32 nsHTMLParser::ResumeParse() { * @param aCount is the # of attributes you're expecting * @return error code (should be 0) */ -PRInt32 nsHTMLParser::CollectAttributes(nsCParserNode& aNode,PRInt32 aCount){ +PRInt32 nsParser::CollectAttributes(nsCParserNode& aNode,PRInt32 aCount){ nsDequeIterator end=mTokenDeque.End(); int attr=0; @@ -585,7 +599,7 @@ PRInt32 nsHTMLParser::CollectAttributes(nsCParserNode& aNode,PRInt32 aCount){ * @param * @return */ -PRInt32 nsHTMLParser::CollectSkippedContent(nsCParserNode& aNode){ +PRInt32 nsParser::CollectSkippedContent(nsCParserNode& aNode){ eHTMLTokenTypes subtype=eToken_attribute; nsDequeIterator end=mTokenDeque.End(); PRInt32 count=0; @@ -609,7 +623,7 @@ PRInt32 nsHTMLParser::CollectSkippedContent(nsCParserNode& aNode){ * @param * @return */ -nsresult nsHTMLParser::GetBindInfo(void){ +nsresult nsParser::GetBindInfo(void){ nsresult result=0; return result; } @@ -622,7 +636,7 @@ nsresult nsHTMLParser::GetBindInfo(void){ * @return */ nsresult -nsHTMLParser::OnProgress(PRInt32 aProgress, PRInt32 aProgressMax, +nsParser::OnProgress(PRInt32 aProgress, PRInt32 aProgressMax, const nsString& aMsg) { nsresult result=0; @@ -639,7 +653,7 @@ nsHTMLParser::OnProgress(PRInt32 aProgress, PRInt32 aProgressMax, * @param * @return */ -nsresult nsHTMLParser::OnStartBinding(const char *aContentType){ +nsresult nsParser::OnStartBinding(const char *aContentType){ if (nsnull != mListener) { mListener->OnStartBinding(aContentType); } @@ -658,7 +672,7 @@ nsresult nsHTMLParser::OnStartBinding(const char *aContentType){ * @param length is the number of bytes waiting input * @return error code (usually 0) */ -nsresult nsHTMLParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length){ +nsresult nsParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length){ if (nsnull != mListener) { mListener->OnDataAvailable(pIStream, length); } @@ -696,7 +710,7 @@ nsresult nsHTMLParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length) * @param * @return */ -nsresult nsHTMLParser::OnStopBinding(PRInt32 status, const nsString& aMsg){ +nsresult nsParser::OnStopBinding(PRInt32 status, const nsString& aMsg){ nsresult result=DidBuildModel(status); if (nsnull != mListener) { mListener->OnStopBinding(status, aMsg); @@ -717,7 +731,7 @@ nsresult nsHTMLParser::OnStopBinding(PRInt32 status, const nsString& aMsg){ * @param anError -- ref to error code * @return new token or null */ -PRInt32 nsHTMLParser::ConsumeToken(CToken*& aToken) { +PRInt32 nsParser::ConsumeToken(CToken*& aToken) { PRInt32 result=mDTD->ConsumeToken(aToken); return result; } @@ -732,7 +746,7 @@ PRInt32 nsHTMLParser::ConsumeToken(CToken*& aToken) { * @param * @return TRUE if it's ok to proceed */ -PRBool nsHTMLParser::WillTokenize(PRBool aIncremental){ +PRBool nsParser::WillTokenize(PRBool aIncremental){ PRBool result=PR_TRUE; return result; } @@ -742,13 +756,15 @@ PRBool nsHTMLParser::WillTokenize(PRBool aIncremental){ * @update gess 3/25/98 * @return TRUE if it's ok to proceed */ -PRInt32 nsHTMLParser::Tokenize(nsString& aSourceBuffer,PRBool appendTokens){ +PRInt32 nsParser::Tokenize(nsString& aSourceBuffer,PRBool appendTokens){ CToken* theToken=0; PRInt32 result=kNoError; + PRInt32 debugCounter=0; //this can be removed. It's only for debugging... WillTokenize(PR_TRUE); while(kNoError==result) { + debugCounter++; result=ConsumeToken(theToken); if(theToken && (kNoError==result)) { @@ -772,7 +788,7 @@ PRInt32 nsHTMLParser::Tokenize(nsString& aSourceBuffer,PRBool appendTokens){ * @update gess 3/25/98 * @return error code */ -PRInt32 nsHTMLParser::Tokenize(void) { +PRInt32 nsParser::Tokenize(void) { CToken* theToken=0; PRInt32 result=kNoError; PRBool done=(0==mMajorIteration) ? (!WillTokenize(PR_TRUE)) : PR_FALSE; @@ -811,7 +827,7 @@ PRInt32 nsHTMLParser::Tokenize(void) { * @param * @return TRUE if all went well */ -PRBool nsHTMLParser::DidTokenize(PRBool aIncremental) { +PRBool nsParser::DidTokenize(PRBool aIncremental) { PRBool result=PR_TRUE; #ifdef VERBOSE_DEBUG @@ -830,7 +846,7 @@ PRBool nsHTMLParser::DidTokenize(PRBool aIncremental) { * @param * @return */ -void nsHTMLParser::DebugDumpTokens(ostream& out) { +void nsParser::DebugDumpTokens(ostream& out) { nsDequeIterator b=mTokenDeque.Begin(); nsDequeIterator e=mTokenDeque.End(); @@ -851,7 +867,7 @@ void nsHTMLParser::DebugDumpTokens(ostream& out) { * @param * @return */ -void nsHTMLParser::DebugDumpSource(ostream& out) { +void nsParser::DebugDumpSource(ostream& out) { nsDequeIterator b=mTokenDeque.Begin(); nsDequeIterator e=mTokenDeque.End(); diff --git a/htmlparser/src/nsHTMLParser.h b/htmlparser/src/nsParser.h similarity index 97% rename from htmlparser/src/nsHTMLParser.h rename to htmlparser/src/nsParser.h index d8638dd3b324..346f6d969955 100644 --- a/htmlparser/src/nsHTMLParser.h +++ b/htmlparser/src/nsParser.h @@ -52,8 +52,8 @@ * */ -#ifndef NS_HTMLPARSER__ -#define NS_HTMLPARSER__ +#ifndef NS_PARSER__ +#define NS_PARSER__ #include "nsIParser.h" #include "nsDeque.h" @@ -63,7 +63,7 @@ #include "nsIStreamListener.h" -#define NS_IHTML_PARSER_IID \ +#define NS_PARSER_IID \ {0x2ce606b0, 0xbee6, 0x11d1, \ {0xaa, 0xd9, 0x00, 0x80, 0x5f, 0x8a, 0x3e, 0x14}} @@ -77,7 +77,7 @@ class nsIParserFilter; class nsIParserDebug; -class nsHTMLParser : public nsIParser, public nsIStreamListener { +class nsParser : public nsIParser, public nsIStreamListener { public: friend class CTokenHandler; @@ -89,14 +89,14 @@ friend class CTokenHandler; * default constructor * @update gess5/11/98 */ - nsHTMLParser(); + nsParser(); /** * Destructor * @update gess5/11/98 */ - ~nsHTMLParser(); + ~nsParser(); /** * Select given content sink into parser for parser output @@ -105,12 +105,12 @@ friend class CTokenHandler; * @return old sink, or NULL */ virtual nsIContentSink* SetContentSink(nsIContentSink* aSink); - - virtual nsIParserFilter* SetParserFilter(nsIParserFilter* aFilter); - virtual void SetDTD(nsIDTD* aDTD); + virtual nsIParserFilter* SetParserFilter(nsIParserFilter* aFilter); - virtual nsIDTD * GetDTD(void); + virtual void SetDTD(nsIDTD* aDTD); + + virtual nsIDTD* GetDTD(void); /** * @@ -297,7 +297,7 @@ protected: //********************************************* nsIStreamListener* mListener; - nsIContentSink* mSink; + nsIContentSink* mSink; nsIParserFilter* mParserFilter; nsDequeIterator* mCurrentPos; diff --git a/htmlparser/src/nsParserDebug.cpp b/htmlparser/src/nsParserDebug.cpp index e998807e3092..dfa20caa14ea 100644 --- a/htmlparser/src/nsParserDebug.cpp +++ b/htmlparser/src/nsParserDebug.cpp @@ -27,7 +27,7 @@ #include "CNavDTD.h" #include "nsHTMLTokens.h" -#include "nsHTMLParser.h" +#include "nsParser.h" #include "nsIParserDebug.h" #include "nsCRT.h" #include "prenv.h" //this is here for debug reasons... @@ -66,7 +66,7 @@ public: void SetVerificationDirectory(char * verify_dir); void SetRecordStatistics(PRBool bval); - PRBool Verify(nsIDTD * aDTD, nsHTMLParser * aParser, int ContextStackPos, eHTMLTags aContextStack[], char * aURLRef); + PRBool Verify(nsIDTD * aDTD, nsParser * aParser, int ContextStackPos, eHTMLTags aContextStack[], char * aURLRef); void DumpVectorRecord(void); // global table for storing vector statistics and the size @@ -87,7 +87,7 @@ static NS_DEFINE_IID(kIDebugParserIID, NS_IPARSERDEBUG_IID); /** * This method is defined in nsIParser. It is used to - * cause the COM-like construction of an nsHTMLParser. + * cause the COM-like construction of an nsParser. * * @update jevering 3/25/98 * @param nsIParser** ptr to newly instantiated parser @@ -376,71 +376,72 @@ void CParserDebug::MakeVectorString(char * vector_string, VectorInfo * pInfo) void CParserDebug::DumpVectorRecord(void) { // do we have a table? - if (mVectorCount) { + if (mVectorCount) { - // hopefully, they wont exceed 1K. - char vector_string[1024]; - char path[1024]; + // hopefully, they wont exceed 1K. + char vector_string[1024]; + char path[1024]; - path[0] = '\0'; + path[0] = '\0'; - // put in the verification directory.. else the root - if (mVerificationDir) - strcpy(path,mVerificationDir); + // put in the verification directory.. else the root + if (mVerificationDir) + strcpy(path,mVerificationDir); - strcat(path,CONTEXT_VECTOR_STAT); + strcat(path,CONTEXT_VECTOR_STAT); - // open the stat file creaming any existing stat file - PRFileDesc * statisticFile = PR_Open(path,PR_CREATE_FILE|PR_RDWR,0); + // open the stat file creaming any existing stat file + PRFileDesc * statisticFile = PR_Open(path,PR_CREATE_FILE|PR_RDWR,0); if (statisticFile) { - PRInt32 i; - PRofstream ps; - ps.attach(statisticFile); - - // oh what the heck, sort it again - if (mVectorCount) { - qsort((void*)mVectorInfoArray,(size_t)mVectorCount,sizeof(VectorInfo*),compare); - } + PRInt32 i; + PRofstream ps; + ps.attach(statisticFile); - // cute little header - sprintf(vector_string,"Context vector occurance results. Processed %d unique vectors.\r\n\r\n", mVectorCount); - ps << vector_string; - - ps << "Invalid context vector summary (see " CONTEXT_VECTOR_STAT ") for mapping.\r\n"; - ps << VECTOR_TABLE_HEADER; - - // dump out the bad vectors encountered - for (i = 0; i < mVectorCount; i++) { - if (!mVectorInfoArray[i]->good_vector) { - MakeVectorString(vector_string, mVectorInfoArray[i]); - ps << vector_string; - } - } - - ps << "\r\n\r\nValid context vector summary\r\n"; - ps << VECTOR_TABLE_HEADER; - - // take a big vector table dump (good vectors) - for (i = 0; i < mVectorCount; i++) { - if (mVectorInfoArray[i]->good_vector) { - MakeVectorString(vector_string, mVectorInfoArray[i]); - ps << vector_string; - } - // free em up. they mean nothing to me now (I'm such a user) - - if (mVectorInfoArray[i]->vector) - PR_Free(mVectorInfoArray[i]->vector); - PR_Free(mVectorInfoArray[i]); - } + // oh what the heck, sort it again + if (mVectorCount) { + qsort((void*)mVectorInfoArray,(size_t)mVectorCount,sizeof(VectorInfo*),compare); } - // ok, we are done with the table, free it up as well - PR_Free(mVectorInfoArray); - mVectorInfoArray = 0; - mVectorCount = 0; + // cute little header + sprintf(vector_string,"Context vector occurance results. Processed %d unique vectors.\r\n\r\n", mVectorCount); + ps << vector_string; + + ps << "Invalid context vector summary (see " CONTEXT_VECTOR_STAT ") for mapping.\r\n"; + ps << VECTOR_TABLE_HEADER; + + // dump out the bad vectors encountered + for (i = 0; i < mVectorCount; i++) { + if (!mVectorInfoArray[i]->good_vector) { + MakeVectorString(vector_string, mVectorInfoArray[i]); + ps << vector_string; + } + } + + ps << "\r\n\r\nValid context vector summary\r\n"; + ps << VECTOR_TABLE_HEADER; + + // take a big vector table dump (good vectors) + for (i = 0; i < mVectorCount; i++) { + if (mVectorInfoArray[i]->good_vector) { + MakeVectorString(vector_string, mVectorInfoArray[i]); + ps << vector_string; + } + // free em up. they mean nothing to me now (I'm such a user) + + if (mVectorInfoArray[i]->vector) + PR_Free(mVectorInfoArray[i]->vector); + PR_Free(mVectorInfoArray[i]); + } //for PR_Close(statisticFile); - } + }//if + + // ok, we are done with the table, free it up as well + PR_Free(mVectorInfoArray); + mVectorInfoArray = 0; + mVectorCount = 0; + + } //if } @@ -455,7 +456,7 @@ void CParserDebug::DumpVectorRecord(void) * @return TRUE if we know how to handle it, else false */ -PRBool CParserDebug::Verify(nsIDTD * aDTD, nsHTMLParser * aParser, int aContextStackPos, eHTMLTags aContextStack[], char * aURLRef) +PRBool CParserDebug::Verify(nsIDTD * aDTD, nsParser * aParser, int aContextStackPos, eHTMLTags aContextStack[], char * aURLRef) { PRBool result=PR_TRUE; diff --git a/htmlparser/src/nsParserNode.cpp b/htmlparser/src/nsParserNode.cpp index 7542e9cf4e75..f251d59d78b2 100644 --- a/htmlparser/src/nsParserNode.cpp +++ b/htmlparser/src/nsParserNode.cpp @@ -18,7 +18,6 @@ #include "nsParserNode.h" -#include "nsHTMLParser.h" #include "string.h" @@ -138,7 +137,7 @@ const nsString& nsCParserNode::GetSkippedContent() const { * @return int value that represents tag type */ PRInt32 nsCParserNode::GetNodeType(void) const{ - return mToken->GetHTMLTag(); + return mToken->GetTypeID(); } diff --git a/htmlparser/src/nsParserNode.h b/htmlparser/src/nsParserNode.h index d2d3e2857b3e..83181d524103 100644 --- a/htmlparser/src/nsParserNode.h +++ b/htmlparser/src/nsParserNode.h @@ -40,7 +40,7 @@ #include "nsHTMLTokens.h" #include "nsString.h" -class nsHTMLParser; +//class nsParser; class nsCParserNode : public nsIParserNode { diff --git a/htmlparser/src/nsParserTypes.h b/htmlparser/src/nsParserTypes.h index 716632dcd3d5..97cb9f616243 100644 --- a/htmlparser/src/nsParserTypes.h +++ b/htmlparser/src/nsParserTypes.h @@ -41,6 +41,7 @@ enum eParseMode { eParseMode_autodetect }; + const PRInt32 kEOF = 1000000L; const PRInt32 kUnknownError = -1000; const PRInt32 kCantPropagate = -6; diff --git a/htmlparser/src/nsToken.cpp b/htmlparser/src/nsToken.cpp index a8ba53a6171a..b18feb71c3a2 100644 --- a/htmlparser/src/nsToken.cpp +++ b/htmlparser/src/nsToken.cpp @@ -26,7 +26,7 @@ * @param nsString--name of token */ CToken::CToken(const nsString& aName) : mTextValue(aName) { - mOrdinalValue=0; + mTypeID=0; mAttrCount=0; } @@ -37,7 +37,7 @@ CToken::CToken(const nsString& aName) : mTextValue(aName) { * @param aName--char* containing name of token */ CToken::CToken(const char* aName) : mTextValue(aName) { - mOrdinalValue=0; + mTypeID=0; mAttrCount=0; } @@ -87,7 +87,7 @@ void CToken::DebugDumpToken(ostream& anOutputStream) { for(i=0;iGetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)st->GetTypeID(); //Begin by gathering up attributes... nsCParserNode attrNode((CHTMLToken*)aToken); @@ -511,7 +511,8 @@ PRInt32 CNavDTD::HandleEndToken(CToken* aToken) { PRInt32 result=kNoError; CEndToken* et = (CEndToken*)(aToken); - eHTMLTags tokenTagType=et->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)et->GetTypeID(); + // Here's the hacky part: // Because we're trying to be backward compatible with Nav4/5, @@ -581,7 +582,7 @@ PRInt32 CNavDTD::HandleEntityToken(CToken* aToken) { CEntityToken* et = (CEntityToken*)(aToken); PRInt32 result=kNoError; - eHTMLTags tokenTagType=et->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)et->GetTypeID(); if(PR_FALSE==CanOmit(GetTopNode(),tokenTagType)) { nsCParserNode aNode((CHTMLToken*)aToken); @@ -762,7 +763,7 @@ CTokenHandler* CNavDTD::AddTokenHandler(CTokenHandler* aHandler) { * @return */ void CNavDTD::SetParser(nsIParser* aParser) { - mParser=(nsHTMLParser*)aParser; + mParser=(nsParser*)aParser; } /** @@ -1675,7 +1676,7 @@ PRInt32 CNavDTD::OpenTransientStyles(eHTMLTags aTag){ case eHTMLTag_secret_h5style: case eHTMLTag_secret_h6style: break; default: - token.SetHTMLTag(theTag); //open the html container... + token.SetTypeID(theTag); //open the html container... result=OpenContainer(theNode,PR_FALSE); mLeafBits[mContextStackPos-1]=PR_TRUE; } //switch @@ -1809,7 +1810,7 @@ PRInt32 CNavDTD::OpenBody(const nsIParserNode& aNode){ CHTMLToken token(gEmpty); nsCParserNode htmlNode(&token); - token.SetHTMLTag(eHTMLTag_html); //open the html container... + token.SetTypeID(eHTMLTag_html); //open the html container... result=OpenHTML(htmlNode); } } @@ -2056,7 +2057,7 @@ PRInt32 CNavDTD::CloseContainersTo(PRInt32 anIndex,eHTMLTags aTag,PRBool aUpdate if((anIndex=0)) { while(mContextStackPos>anIndex) { eHTMLTags theTag=mContextStack[mContextStackPos-1]; - aToken.SetHTMLTag(theTag); + aToken.SetTypeID(theTag); result=CloseContainer(theNode,aTag,aUpdateStyles); } } @@ -2117,7 +2118,7 @@ PRInt32 CNavDTD::CloseTopmostContainer(){ CEndToken aToken(gEmpty); eHTMLTags theTag=(eHTMLTags)mContextStack[mContextStackPos-1]; - aToken.SetHTMLTag(theTag); + aToken.SetTypeID(theTag); nsCParserNode theNode(&aToken); return CloseContainer(theNode,theTag,PR_TRUE); } @@ -2287,39 +2288,40 @@ PRInt32 CNavDTD::UpdateStyleStackForOpenTag(eHTMLTags aTag,eHTMLTags anActualTag PRInt32 CNavDTD::UpdateStyleStackForCloseTag(eHTMLTags aTag,eHTMLTags anActualTag){ PRInt32 result=0; - switch (aTag) { + if(mStyleStackPos>0) { + switch (aTag) { - case eHTMLTag_a: - case eHTMLTag_bold: - case eHTMLTag_big: - case eHTMLTag_blink: - case eHTMLTag_cite: - case eHTMLTag_em: - case eHTMLTag_font: - case eHTMLTag_italic: - case eHTMLTag_kbd: - case eHTMLTag_small: - case eHTMLTag_spell: - case eHTMLTag_strike: - case eHTMLTag_strong: - case eHTMLTag_sub: - case eHTMLTag_sup: - case eHTMLTag_tt: - case eHTMLTag_u: - case eHTMLTag_var: - if(aTag==anActualTag) - mStyleStack[--mStyleStackPos]=eHTMLTag_unknown; - break; + case eHTMLTag_a: + case eHTMLTag_bold: + case eHTMLTag_big: + case eHTMLTag_blink: + case eHTMLTag_cite: + case eHTMLTag_em: + case eHTMLTag_font: + case eHTMLTag_italic: + case eHTMLTag_kbd: + case eHTMLTag_small: + case eHTMLTag_spell: + case eHTMLTag_strike: + case eHTMLTag_strong: + case eHTMLTag_sub: + case eHTMLTag_sup: + case eHTMLTag_tt: + case eHTMLTag_u: + case eHTMLTag_var: + if(aTag==anActualTag) + mStyleStack[--mStyleStackPos]=eHTMLTag_unknown; + break; - case eHTMLTag_h1: case eHTMLTag_h2: - case eHTMLTag_h3: case eHTMLTag_h4: - case eHTMLTag_h5: case eHTMLTag_h6: - break; - - default: - break; - } + case eHTMLTag_h1: case eHTMLTag_h2: + case eHTMLTag_h3: case eHTMLTag_h4: + case eHTMLTag_h5: case eHTMLTag_h6: + break; + default: + break; + }//switch + }//if return result; } //update... @@ -2720,6 +2722,12 @@ void CNavDTD::WillInterruptParse(void){ return; } + +/************************************************************************ + Here's a bunch of stuff JEvering put into the parser to do debugging. + ************************************************************************/ + + void CNavDTD::SetURLRef(char * aURLRef){ if (mURLRef) { PL_strfree(mURLRef); diff --git a/parser/htmlparser/src/CNavDTD.h b/parser/htmlparser/src/CNavDTD.h index cdaa93d9dd9c..410485673c44 100644 --- a/parser/htmlparser/src/CNavDTD.h +++ b/parser/htmlparser/src/CNavDTD.h @@ -40,7 +40,7 @@ {0xaa, 0xda, 0x00, 0x80, 0x5f, 0x8a, 0x3e, 0x14}} -class nsHTMLParser; +class nsParser; class nsIHTMLContentSink; class nsIParserDebug; @@ -681,7 +681,7 @@ protected: PRBool CanContainFormElement(eHTMLTags aParent,eHTMLTags aChild) const; - nsHTMLParser* mParser; + nsParser* mParser; nsIHTMLContentSink* mSink; CTokenHandler* mTokenHandlers[eToken_last]; diff --git a/parser/htmlparser/src/COtherDTD.cpp b/parser/htmlparser/src/COtherDTD.cpp index 3a2306268b53..f11600a3a3e7 100644 --- a/parser/htmlparser/src/COtherDTD.cpp +++ b/parser/htmlparser/src/COtherDTD.cpp @@ -35,10 +35,10 @@ #include "COtherDTD.h" #include "nsHTMLTokens.h" #include "nsCRT.h" -#include "nsParserTypes.h" -#include "nsHTMLParser.h" +#include "nsParser.h" #include "nsHTMLContentSink.h" #include "nsScanner.h" +#include "nsParserTypes.h" #include "prenv.h" //this is here for debug reasons... #include "prtypes.h" @@ -125,7 +125,7 @@ nsresult COtherDTD::QueryInterface(const nsIID& aIID, void** aInstancePtr) /** * This method is defined in nsIParser. It is used to - * cause the COM-like construction of an nsHTMLParser. + * cause the COM-like construction of an nsParser. * * @update gess 4/8/98 * @param nsIParser** ptr to newly instantiated parser @@ -397,7 +397,7 @@ PRInt32 COtherDTD::HandleStartToken(CToken* aToken) { NS_PRECONDITION(0!=aToken,kNullToken); CStartToken* st= (CStartToken*)(aToken); - eHTMLTags tokenTagType=st->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)st->GetTypeID(); //Begin by gathering up attributes... nsCParserNode attrNode((CHTMLToken*)aToken); @@ -513,7 +513,7 @@ PRInt32 COtherDTD::HandleEndToken(CToken* aToken) { PRInt32 result=kNoError; CEndToken* et = (CEndToken*)(aToken); - eHTMLTags tokenTagType=et->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)et->GetTypeID(); // Here's the hacky part: // Because we're trying to be backward compatible with Nav4/5, @@ -583,7 +583,7 @@ PRInt32 COtherDTD::HandleEntityToken(CToken* aToken) { CEntityToken* et = (CEntityToken*)(aToken); PRInt32 result=kNoError; - eHTMLTags tokenTagType=et->GetHTMLTag(); + eHTMLTags tokenTagType=(eHTMLTags)et->GetTypeID(); if(PR_FALSE==CanOmit(GetTopNode(),tokenTagType)) { nsCParserNode aNode((CHTMLToken*)aToken); @@ -764,7 +764,7 @@ CTokenHandler* COtherDTD::AddTokenHandler(CTokenHandler* aHandler) { * @return */ void COtherDTD::SetParser(nsIParser* aParser) { - mParser=(nsHTMLParser*)aParser; + mParser=(nsParser*)aParser; } /** @@ -1677,7 +1677,7 @@ PRInt32 COtherDTD::OpenTransientStyles(eHTMLTags aTag){ case eHTMLTag_secret_h5style: case eHTMLTag_secret_h6style: break; default: - token.SetHTMLTag(theTag); //open the html container... + token.SetTypeID(theTag); //open the html container... result=OpenContainer(theNode,PR_FALSE); mLeafBits[mContextStackPos-1]=PR_TRUE; } //switch @@ -1811,7 +1811,7 @@ PRInt32 COtherDTD::OpenBody(const nsIParserNode& aNode){ CHTMLToken token(gEmpty); nsCParserNode htmlNode(&token); - token.SetHTMLTag(eHTMLTag_html); //open the html container... + token.SetTypeID(eHTMLTag_html); //open the html container... result=OpenHTML(htmlNode); } } @@ -2058,7 +2058,7 @@ PRInt32 COtherDTD::CloseContainersTo(PRInt32 anIndex,eHTMLTags aTag,PRBool aUpda if((anIndex=0)) { while(mContextStackPos>anIndex) { eHTMLTags theTag=mContextStack[mContextStackPos-1]; - aToken.SetHTMLTag(theTag); + aToken.SetTypeID(theTag); result=CloseContainer(theNode,aTag,aUpdateStyles); } } @@ -2119,7 +2119,7 @@ PRInt32 COtherDTD::CloseTopmostContainer(){ CEndToken aToken(gEmpty); eHTMLTags theTag=(eHTMLTags)mContextStack[mContextStackPos-1]; - aToken.SetHTMLTag(theTag); + aToken.SetTypeID(theTag); nsCParserNode theNode(&aToken); return CloseContainer(theNode,theTag,PR_TRUE); } @@ -2289,43 +2289,43 @@ PRInt32 COtherDTD::UpdateStyleStackForOpenTag(eHTMLTags aTag,eHTMLTags anActualT PRInt32 COtherDTD::UpdateStyleStackForCloseTag(eHTMLTags aTag,eHTMLTags anActualTag){ PRInt32 result=0; - switch (aTag) { + if(mStyleStackPos>0) { + switch (aTag) { - case eHTMLTag_a: - case eHTMLTag_bold: - case eHTMLTag_big: - case eHTMLTag_blink: - case eHTMLTag_cite: - case eHTMLTag_em: - case eHTMLTag_font: - case eHTMLTag_italic: - case eHTMLTag_kbd: - case eHTMLTag_small: - case eHTMLTag_spell: - case eHTMLTag_strike: - case eHTMLTag_strong: - case eHTMLTag_sub: - case eHTMLTag_sup: - case eHTMLTag_tt: - case eHTMLTag_u: - case eHTMLTag_var: - if(aTag==anActualTag) - mStyleStack[--mStyleStackPos]=eHTMLTag_unknown; - break; + case eHTMLTag_a: + case eHTMLTag_bold: + case eHTMLTag_big: + case eHTMLTag_blink: + case eHTMLTag_cite: + case eHTMLTag_em: + case eHTMLTag_font: + case eHTMLTag_italic: + case eHTMLTag_kbd: + case eHTMLTag_small: + case eHTMLTag_spell: + case eHTMLTag_strike: + case eHTMLTag_strong: + case eHTMLTag_sub: + case eHTMLTag_sup: + case eHTMLTag_tt: + case eHTMLTag_u: + case eHTMLTag_var: + if(aTag==anActualTag) + mStyleStack[--mStyleStackPos]=eHTMLTag_unknown; + break; - case eHTMLTag_h1: case eHTMLTag_h2: - case eHTMLTag_h3: case eHTMLTag_h4: - case eHTMLTag_h5: case eHTMLTag_h6: - break; - - default: - break; - } + case eHTMLTag_h1: case eHTMLTag_h2: + case eHTMLTag_h3: case eHTMLTag_h4: + case eHTMLTag_h5: case eHTMLTag_h6: + break; + default: + break; + }//switch + }//if return result; } //update... - /******************************************************************* These methods used to be hidden in the tokenizer-delegate. That file merged with the DTD, since the separation wasn't really @@ -2722,6 +2722,10 @@ void COtherDTD::WillInterruptParse(void){ return; } +/************************************************************************ + Here's a bunch of stuff JEvering put into the parser to do debugging. + ************************************************************************/ + void COtherDTD::SetURLRef(char * aURLRef){ if (mURLRef) { PL_strfree(mURLRef); diff --git a/parser/htmlparser/src/COtherDTD.h b/parser/htmlparser/src/COtherDTD.h index 7a74866cf130..1cd27f7cd463 100644 --- a/parser/htmlparser/src/COtherDTD.h +++ b/parser/htmlparser/src/COtherDTD.h @@ -39,7 +39,7 @@ {0x80, 0x22, 0x00, 0x60, 0x8, 0x14, 0x98, 0x89}} -class nsIParser; +class nsParser; class nsIHTMLContentSink; class nsIParserDebug; @@ -682,7 +682,7 @@ protected: PRBool CanContainFormElement(eHTMLTags aParent,eHTMLTags aChild) const; - nsHTMLParser* mParser; + nsParser* mParser; nsIHTMLContentSink* mSink; CTokenHandler* mTokenHandlers[eToken_last]; diff --git a/parser/htmlparser/src/Makefile b/parser/htmlparser/src/Makefile index 243a5c4aa988..b145aa09f0af 100644 --- a/parser/htmlparser/src/Makefile +++ b/parser/htmlparser/src/Makefile @@ -30,7 +30,7 @@ CPPSRCS = \ nsTokenHandler.cpp \ CNavDTD.cpp \ COtherDTD.cpp \ - nsHTMLParser.cpp \ + nsParser.cpp \ nsHTMLTokens.cpp \ prstrm.cpp \ $(NULL) diff --git a/parser/htmlparser/src/SelfTest.cpp b/parser/htmlparser/src/SelfTest.cpp index 630ebea78090..31186bc37606 100644 --- a/parser/htmlparser/src/SelfTest.cpp +++ b/parser/htmlparser/src/SelfTest.cpp @@ -99,8 +99,8 @@ void parseFile (const char* aFilename,int size) strcat(filename,".tokens"); { nsIParser* parser; - nsresult rv = NS_NewHTMLParser(&parser); - nsresult r=NS_NewHTMLParser(&parser); + nsresult rv = NS_NewParser(&parser); + nsresult r=NS_NewParser(&parser); CHTMLContentSink theSink; parser->setContentSink(&theSink); parser->parse(aFilename); diff --git a/parser/htmlparser/src/makefile.win b/parser/htmlparser/src/makefile.win index 940db9e04f24..74f7172436ab 100644 --- a/parser/htmlparser/src/makefile.win +++ b/parser/htmlparser/src/makefile.win @@ -28,7 +28,7 @@ CPPSRCS=nsHTMLContentSink.cpp \ nsToken.cpp nsTokenHandler.cpp \ CNavDTD.cpp \ COtherDTD.cpp \ - nsHTMLParser.cpp prstrm.cpp + nsParser.cpp prstrm.cpp EXPORTS=nshtmlpars.h nsIContentSink.h nsIHTMLContentSink.h \ nsHTMLTokens.h nsIParserNode.h nsIParser.h nsToken.h \ @@ -37,7 +37,7 @@ EXPORTS=nshtmlpars.h nsIContentSink.h nsIHTMLContentSink.h \ CPP_OBJS=.\$(OBJDIR)\nsHTMLContentSink.obj \ .\$(OBJDIR)\CNavDTD.obj \ .\$(OBJDIR)\COtherDTD.obj \ - .\$(OBJDIR)\nsHTMLParser.obj \ + .\$(OBJDIR)\nsParser.obj \ .\$(OBJDIR)\nsHTMLTokens.obj .\$(OBJDIR)\nsParserNode.obj \ .\$(OBJDIR)\nsScanner.obj .\$(OBJDIR)\nsToken.obj \ .\$(OBJDIR)\nsTokenHandler.obj .\$(OBJDIR)\nsParserDebug.obj \ diff --git a/parser/htmlparser/src/nsHTMLTokens.cpp b/parser/htmlparser/src/nsHTMLTokens.cpp index 1f696300416f..288c798e8bd9 100644 --- a/parser/htmlparser/src/nsHTMLTokens.cpp +++ b/parser/htmlparser/src/nsHTMLTokens.cpp @@ -261,7 +261,7 @@ HTMLAttrEntry gHTMLAttributeTable[] = * @return */ CHTMLToken::CHTMLToken(const nsString& aName) : CToken(aName) { - mTagType=eHTMLTag_unknown; + mTypeID=eHTMLTag_unknown; } /* @@ -272,31 +272,9 @@ CHTMLToken::CHTMLToken(const nsString& aName) : CToken(aName) { * @return */ CHTMLToken::CHTMLToken(eHTMLTags aTag) : CToken(GetTagName(aTag)) { - mTagType=aTag; + mTypeID=aTag; } -/* - * - * - * @update gess 3/25/98 - * @param - * @return - */ -eHTMLTags CHTMLToken::GetHTMLTag() { - return mTagType; -} - -/* - * - * - * @update gess 3/25/98 - * @param - * @return - */ -void CHTMLToken::SetHTMLTag(eHTMLTags aTagType) { - mTagType=aTagType; - return; -} /* * default constructor @@ -327,10 +305,10 @@ CStartToken::CStartToken(eHTMLTags aTag) : CHTMLToken(aTag) { * @param * @return */ -eHTMLTags CStartToken::GetHTMLTag(){ - if(eHTMLTag_unknown==mTagType) - mTagType=DetermineHTMLTagType(mTextValue); - return mTagType; +PRInt32 CStartToken::GetTypeID(){ + if(eHTMLTag_unknown==mTypeID) + mTypeID=DetermineHTMLTagType(mTextValue); + return mTypeID; } /* @@ -439,7 +417,7 @@ void CStartToken::DebugDumpSource(ostream& out) { * @return */ CEndToken::CEndToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_end; + mTypeID=eHTMLTag_unknown; } /* @@ -475,10 +453,10 @@ PRInt32 CEndToken::Consume(PRUnichar aChar, CScanner& aScanner) { * @param * @return eHTMLTag id of this endtag */ -eHTMLTags CEndToken::GetHTMLTag(){ - if(eHTMLTag_unknown==mTagType) - mTagType=DetermineHTMLTagType(mTextValue); - return mTagType; +PRInt32 CEndToken::GetTypeID(){ + if(eHTMLTag_unknown==mTypeID) + mTypeID=DetermineHTMLTagType(mTextValue); + return mTypeID; } /* @@ -525,8 +503,7 @@ void CEndToken::DebugDumpSource(ostream& out) { * @return */ CTextToken::CTextToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_text; - mTagType=eHTMLTag_text; + mTypeID=eHTMLTag_text; } /* @@ -574,8 +551,7 @@ PRInt32 CTextToken::Consume(PRUnichar aChar, CScanner& aScanner) { * @return */ CCommentToken::CCommentToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_comment; - mTagType=eHTMLTag_comment; + mTypeID=eHTMLTag_comment; } /* @@ -647,8 +623,7 @@ PRInt32 CCommentToken::GetTokenType(void) { * @return */ CNewlineToken::CNewlineToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_newline; - mTagType=eHTMLTag_newline; + mTypeID=eHTMLTag_newline; } /* @@ -730,7 +705,6 @@ PRInt32 CNewlineToken::Consume(PRUnichar aChar, CScanner& aScanner) { CAttributeToken::CAttributeToken(const nsString& aName) : CHTMLToken(aName), mTextKey() { mLastAttribute=PR_FALSE; - mOrdinalValue=eToken_attribute; } /* @@ -767,7 +741,7 @@ void CAttributeToken::DebugDumpToken(ostream& out) { out << "[" << GetClassName() << "] " << *cp << "="; delete cp; char* cp2=mTextValue.ToNewCString(); - out << *cp2 << ": " << mOrdinalValue << endl; + out << *cp2 << ": " << mTypeID << endl; } @@ -915,8 +889,7 @@ void CAttributeToken::DebugDumpSource(ostream& out) { * @return */ CWhitespaceToken::CWhitespaceToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_whitespace; - mTagType=eHTMLTag_whitespace; + mTypeID=eHTMLTag_whitespace; } /* @@ -969,8 +942,7 @@ PRInt32 CWhitespaceToken::Consume(PRUnichar aChar, CScanner& aScanner) { * @return */ CEntityToken::CEntityToken(const nsString& aName) : CHTMLToken(aName) { - mOrdinalValue=eToken_entity; - mTagType=eHTMLTag_entity; + mTypeID=eHTMLTag_entity; #ifdef VERBOSE_DEBUG if(!VerifyEntityTable()) { cout<<"Entity table is invalid!" << endl; @@ -1255,7 +1227,6 @@ PRInt32 CStyleToken::GetTokenType(void) { */ CSkippedContentToken::CSkippedContentToken(const nsString& aName) : CAttributeToken(aName) { mTextKey = "$skipped-content";/* XXX need a better answer! */ - mOrdinalValue=eToken_skippedcontent; } /* @@ -1334,16 +1305,6 @@ public: }; -/*------------------------------------------------------- - * - * @update gess4/6/98 - * @param - * @return - */ -eHTMLTokenTypes DetermineTokenType(const nsString& aString){ - return eToken_unknown; -} - /* * This method accepts a string (and optionally, its length) * and determines the eHTMLTag (id) value. diff --git a/parser/htmlparser/src/nsHTMLTokens.h b/parser/htmlparser/src/nsHTMLTokens.h index c64043046833..dadac171edcb 100644 --- a/parser/htmlparser/src/nsHTMLTokens.h +++ b/parser/htmlparser/src/nsHTMLTokens.h @@ -35,7 +35,6 @@ #include "nsToken.h" #include - class CScanner; enum eHTMLTokenTypes { @@ -47,6 +46,7 @@ enum eHTMLTokenTypes { eToken_last //make sure this stays the last token... }; + //*** This enum is used to define the known universe of HTML tags. //*** The use of this table doesn't preclude of from using non-standard //*** tags. It simply makes normal tag handling more efficient. @@ -123,7 +123,6 @@ PRInt32 ConsumeQuotedString(PRUnichar aChar,nsString& aString,CScanner& PRInt32 ConsumeAttributeText(PRUnichar aChar,nsString& aString,CScanner& aScanner); PRInt32 FindEntityIndex(const char* aBuffer,PRInt32 aBufLen=-1); eHTMLTags DetermineHTMLTagType(const nsString& aString); -eHTMLTokenTypes DetermineTokenType(const nsString& aString); const char* GetTagName(PRInt32 aTag); @@ -137,10 +136,7 @@ class CHTMLToken : public CToken { public: CHTMLToken(eHTMLTags aTag); CHTMLToken(const nsString& aString); - virtual eHTMLTags GetHTMLTag(); - void SetHTMLTag(eHTMLTags aTagType); protected: - eHTMLTags mTagType; }; @@ -156,7 +152,7 @@ class CStartToken: public CHTMLToken { CStartToken(eHTMLTags aTag); CStartToken(const nsString& aString); virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual eHTMLTags GetHTMLTag(); + virtual PRInt32 GetTypeID(void); virtual const char* GetClassName(void); virtual PRInt32 GetTokenType(void); void SetAttributed(PRBool aValue); @@ -180,7 +176,7 @@ class CEndToken: public CHTMLToken { public: CEndToken(const nsString& aString); virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual eHTMLTags GetHTMLTag(); + virtual PRInt32 GetTypeID(void); virtual const char* GetClassName(void); virtual PRInt32 GetTokenType(void); virtual void DebugDumpSource(ostream& out); @@ -198,9 +194,9 @@ class CEndToken: public CHTMLToken { class CCommentToken: public CHTMLToken { public: CCommentToken(const nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); char mLeadingChar; }; @@ -215,16 +211,16 @@ class CCommentToken: public CHTMLToken { class CEntityToken : public CHTMLToken { public: CEntityToken(const nsString& aString); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); PRInt32 TranslateToUnicodeStr(nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); static PRInt32 ConsumeEntity(PRUnichar aChar,nsString& aString,CScanner& aScanner); static PRInt32 TranslateToUnicodeStr(PRInt32 aValue,nsString& aString); static PRInt32 FindEntityIndex(const char* aBuffer,PRInt32 aBufLen=-1); static PRBool VerifyEntityTable(void); static PRInt32 ReduceEntities(nsString& aString); - virtual void DebugDumpSource(ostream& out); + virtual void DebugDumpSource(ostream& out); private: static PRInt32 mEntityTokenCount; @@ -241,7 +237,7 @@ class CEntityToken : public CHTMLToken { class CWhitespaceToken: public CHTMLToken { public: CWhitespaceToken(const nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); virtual const char* GetClassName(void); virtual PRInt32 GetTokenType(void); }; @@ -273,9 +269,9 @@ class CTextToken: public CHTMLToken { class CAttributeToken: public CHTMLToken { public: CAttributeToken(const nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); virtual nsString& GetKey(void) {return mTextKey;} virtual void DebugDumpToken(ostream& out); virtual void DebugDumpSource(ostream& out); @@ -315,8 +311,8 @@ class CScriptToken: public CHTMLToken { public: CScriptToken(const nsString& aString); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); protected: }; @@ -331,7 +327,7 @@ class CScriptToken: public CHTMLToken { */ class CStyleToken: public CHTMLToken { public: - CStyleToken(const nsString& aString); + CStyleToken(const nsString& aString); virtual const char* GetClassName(void); virtual PRInt32 GetTokenType(void); protected: @@ -347,9 +343,9 @@ class CStyleToken: public CHTMLToken { class CSkippedContentToken: public CAttributeToken { public: CSkippedContentToken(const nsString& aString); - virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); - virtual const char* GetClassName(void); - virtual PRInt32 GetTokenType(void); + virtual PRInt32 Consume(PRUnichar aChar,CScanner& aScanner); + virtual const char* GetClassName(void); + virtual PRInt32 GetTokenType(void); protected: }; diff --git a/parser/htmlparser/src/nsIParser.h b/parser/htmlparser/src/nsIParser.h index a4ffd45bc271..05b4d20c9839 100644 --- a/parser/htmlparser/src/nsIParser.h +++ b/parser/htmlparser/src/nsIParser.h @@ -48,6 +48,7 @@ class nsIParser : public nsISupports { virtual nsIContentSink* SetContentSink(nsIContentSink* aContentSink)=0; virtual void SetDTD(nsIDTD* aDTD)=0; + virtual nsIDTD* GetDTD(void)=0; /** * Cause the tokenizer to consume the next token, and @@ -80,6 +81,6 @@ class nsIParser : public nsISupports { }; -extern NS_HTMLPARS nsresult NS_NewHTMLParser(nsIParser** aInstancePtrResult); +extern NS_HTMLPARS nsresult NS_NewParser(nsIParser** aInstancePtrResult); #endif diff --git a/parser/htmlparser/src/nsIParserDebug.h b/parser/htmlparser/src/nsIParserDebug.h index a1e45204291d..51981627764f 100644 --- a/parser/htmlparser/src/nsIParserDebug.h +++ b/parser/htmlparser/src/nsIParserDebug.h @@ -36,7 +36,7 @@ class nsIDTD; -class nsHTMLParser; +class nsParser; class nsIParserDebug : public nsISupports { @@ -46,7 +46,7 @@ public: virtual void SetRecordStatistics(PRBool bval) = 0; - virtual PRBool Verify(nsIDTD * aDTD, nsHTMLParser * aParser, int ContextStackPos, eHTMLTags aContextStack[], char * aURLRef) = 0; + virtual PRBool Verify(nsIDTD * aDTD, nsParser * aParser, int ContextStackPos, eHTMLTags aContextStack[], char * aURLRef) = 0; virtual void DumpVectorRecord(void) = 0; diff --git a/parser/htmlparser/src/nsHTMLParser.cpp b/parser/htmlparser/src/nsParser.cpp similarity index 87% rename from parser/htmlparser/src/nsHTMLParser.cpp rename to parser/htmlparser/src/nsParser.cpp index ca5f59e879ec..2434e364dbe5 100644 --- a/parser/htmlparser/src/nsHTMLParser.cpp +++ b/parser/htmlparser/src/nsParser.cpp @@ -18,7 +18,7 @@ //#define __INCREMENTAL 1 -#include "nsHTMLParser.h" +#include "nsParser.h" #include "nsIContentSink.h" #include "nsString.h" #include "nsCRT.h" @@ -40,7 +40,7 @@ */ static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kClassIID, NS_IHTML_PARSER_IID); +static NS_DEFINE_IID(kClassIID, NS_PARSER_IID); static NS_DEFINE_IID(kIParserIID, NS_IPARSER_IID); static const char* kNullURL = "Error: Null URL given"; @@ -49,7 +49,7 @@ static const char* kNullTokenizer = "Error: Unable to construct tokenizer"; static const int gTransferBufferSize=4096; //size of the buffer used in moving data from iistream -//#define DEBUG_SAVE_SOURCE_DOC 1 +#define DEBUG_SAVE_SOURCE_DOC 1 #ifdef DEBUG_SAVE_SOURCE_DOC fstream* gTempStream=0; #endif @@ -57,15 +57,15 @@ fstream* gTempStream=0; /** * This method is defined in nsIParser. It is used to - * cause the COM-like construction of an nsHTMLParser. + * cause the COM-like construction of an nsParser. * * @update gess 3/25/98 * @param nsIParser** ptr to newly instantiated parser * @return NS_xxx error result */ -NS_HTMLPARS nsresult NS_NewHTMLParser(nsIParser** aInstancePtrResult) +NS_HTMLPARS nsresult NS_NewParser(nsIParser** aInstancePtrResult) { - nsHTMLParser *it = new nsHTMLParser(); + nsParser *it = new nsParser(); if (it == 0) { return NS_ERROR_OUT_OF_MEMORY; @@ -91,7 +91,7 @@ CTokenDeallocator gTokenKiller; * @param * @return */ -nsHTMLParser::nsHTMLParser() : mTokenDeque(gTokenKiller) { +nsParser::nsParser() : mTokenDeque(gTokenKiller) { NS_INIT_REFCNT(); mParserFilter = nsnull; mListener = nsnull; @@ -111,7 +111,7 @@ nsHTMLParser::nsHTMLParser() : mTokenDeque(gTokenKiller) { * @param * @return */ -nsHTMLParser::~nsHTMLParser() { +nsParser::~nsParser() { NS_IF_RELEASE(mListener); if(mTransferBuffer) delete [] mTransferBuffer; @@ -121,7 +121,7 @@ nsHTMLParser::~nsHTMLParser() { delete mCurrentPos; mCurrentPos=0; if(mDTD) - NS_RELEASE(mDTD); + NS_RELEASE(mDTD); mDTD=0; if(mScanner) delete mScanner; @@ -129,9 +129,9 @@ nsHTMLParser::~nsHTMLParser() { } -NS_IMPL_ADDREF(nsHTMLParser) -NS_IMPL_RELEASE(nsHTMLParser) -//NS_IMPL_ISUPPORTS(nsHTMLParser,NS_IHTML_PARSER_IID) +NS_IMPL_ADDREF(nsParser) +NS_IMPL_RELEASE(nsParser) +//NS_IMPL_ISUPPORTS(nsParser,NS_IHTML_PARSER_IID) /** @@ -144,7 +144,7 @@ NS_IMPL_RELEASE(nsHTMLParser) * @param aInstancePtr ptr to newly discovered interface * @return NS_xxx result code */ -nsresult nsHTMLParser::QueryInterface(const nsIID& aIID, void** aInstancePtr) +nsresult nsParser::QueryInterface(const nsIID& aIID, void** aInstancePtr) { if (NULL == aInstancePtr) { return NS_ERROR_NULL_POINTER; @@ -157,7 +157,7 @@ nsresult nsHTMLParser::QueryInterface(const nsIID& aIID, void** aInstancePtr) *aInstancePtr = (nsIParser*)(this); } else if(aIID.Equals(kClassIID)) { //do this class... - *aInstancePtr = (nsHTMLParser*)(this); + *aInstancePtr = (nsParser*)(this); } else { *aInstancePtr=0; @@ -167,7 +167,14 @@ nsresult nsHTMLParser::QueryInterface(const nsIID& aIID, void** aInstancePtr) return NS_OK; } -nsIParserFilter * nsHTMLParser::SetParserFilter(nsIParserFilter * aFilter) + +/** + * + * @update gess6/18/98 + * @param + * @return + */ +nsIParserFilter * nsParser::SetParserFilter(nsIParserFilter * aFilter) { nsIParserFilter* old=mParserFilter; if(old) @@ -187,7 +194,7 @@ nsIParserFilter * nsHTMLParser::SetParserFilter(nsIParserFilter * aFilter) * @param nsIContentSink interface for node receiver * @return */ -nsIContentSink* nsHTMLParser::SetContentSink(nsIContentSink* aSink) { +nsIContentSink* nsParser::SetContentSink(nsIContentSink* aSink) { NS_PRECONDITION(0!=aSink,"sink cannot be null!"); nsIContentSink* old=mSink; if(old) @@ -207,11 +214,17 @@ nsIContentSink* nsHTMLParser::SetContentSink(nsIContentSink* aSink) { * @param * @return */ -void nsHTMLParser::SetDTD(nsIDTD* aDTD) { +void nsParser::SetDTD(nsIDTD* aDTD) { mDTD=aDTD; } -nsIDTD * nsHTMLParser::GetDTD(void) { +/** + * Retrieve the DTD from the parser. + * @update gess6/18/98 + * @param + * @return + */ +nsIDTD * nsParser::GetDTD(void) { return mDTD; } @@ -222,7 +235,7 @@ nsIDTD * nsHTMLParser::GetDTD(void) { * @param * @return */ -CScanner* nsHTMLParser::GetScanner(void){ +CScanner* nsParser::GetScanner(void){ return mScanner; } @@ -234,15 +247,15 @@ CScanner* nsHTMLParser::GetScanner(void){ * @param * @return PR_TRUE if parse succeeded, PR_FALSE otherwise. */ -PRInt32 nsHTMLParser::IterateTokens() { +PRInt32 nsParser::IterateTokens() { nsDequeIterator e=mTokenDeque.End(); nsDequeIterator theMarkPos(e); + mMajorIteration++; if(!mCurrentPos) mCurrentPos=new nsDequeIterator(mTokenDeque.Begin()); PRInt32 result=kNoError; - while((kNoError==result) && ((*mCurrentPosGetCurrent(); @@ -285,7 +298,7 @@ eParseMode DetermineParseMode() { * @param * @return */ -nsIDTD* NewDTD(eParseMode aMode) { +nsIDTD* CreateDTD(eParseMode aMode) { nsIDTD* aDTD=0; switch(aMode) { case eParseMode_navigator: @@ -307,7 +320,7 @@ nsIDTD* NewDTD(eParseMode aMode) { * @param * @return */ -PRInt32 nsHTMLParser::WillBuildModel(void) { +PRInt32 nsParser::WillBuildModel(void) { mMajorIteration=-1; mMinorIteration=-1; @@ -332,7 +345,7 @@ PRInt32 nsHTMLParser::WillBuildModel(void) { * @param * @return */ -PRInt32 nsHTMLParser::DidBuildModel(PRInt32 anErrorCode) { +PRInt32 nsParser::DidBuildModel(PRInt32 anErrorCode) { //One last thing...close any open containers. PRInt32 result=anErrorCode; if(mDTD) { @@ -358,7 +371,7 @@ PRInt32 nsHTMLParser::DidBuildModel(PRInt32 anErrorCode) { * @param aFilename is the name of the disk file to use for testing. * @return error code (kNoError means ok) */ -PRInt32 nsHTMLParser::ParseFileIncrementally(const char* aFilename){ +PRInt32 nsParser::ParseFileIncrementally(const char* aFilename){ PRInt32 result=kBadFilename; fstream* theFileStream; nsString theBuffer; @@ -412,7 +425,7 @@ PRInt32 nsHTMLParser::ParseFileIncrementally(const char* aFilename){ * @param aFilename -- const char* containing file to be parsed. * @return PR_TRUE if parse succeeded, PR_FALSE otherwise. */ -PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental, nsIParserDebug * aDebug){ +PRBool nsParser::Parse(const char* aFilename,PRBool aIncremental, nsIParserDebug * aDebug){ NS_PRECONDITION(0!=aFilename,kNullFilename); PRInt32 status=kBadFilename; mIncremental=aIncremental; @@ -420,7 +433,7 @@ PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental, nsIParserD if(aFilename) { mParseMode=DetermineParseMode(); - mDTD=(0==mDTD) ? NewDTD(mParseMode) : mDTD; + mDTD=(0==mDTD) ? CreateDTD(mParseMode) : mDTD; if(mDTD) { mDTD->SetParser(this); mDTD->SetContentSink(mSink); @@ -457,7 +470,7 @@ PRBool nsHTMLParser::Parse(const char* aFilename,PRBool aIncremental, nsIParserD * @param aFilename -- const char* containing file to be parsed. * @return PR_TRUE if parse succeeded, PR_FALSE otherwise. */ -PRInt32 nsHTMLParser::Parse(nsIURL* aURL, +PRInt32 nsParser::Parse(nsIURL* aURL, nsIStreamListener* aListener, PRBool aIncremental, nsIParserDebug * aDebug) { @@ -480,7 +493,7 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL, if(aURL) { mParseMode=DetermineParseMode(); - mDTD=(0==mDTD) ? NewDTD(mParseMode) : mDTD; + mDTD=(0==mDTD) ? CreateDTD(mParseMode) : mDTD; if(mDTD) { mDTD->SetParser(this); mDTD->SetContentSink(mSink); @@ -506,6 +519,7 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL, return status; } + /** * Call this method if all you want to do is parse 1 string full of HTML text. * @@ -514,7 +528,7 @@ PRInt32 nsHTMLParser::Parse(nsIURL* aURL, * @param appendTokens tells us whether we should insert tokens inline, or append them. * @return TRUE if all went well -- FALSE otherwise */ -PRInt32 nsHTMLParser::Parse(nsString& aSourceBuffer,PRBool appendTokens){ +PRInt32 nsParser::Parse(nsString& aSourceBuffer,PRBool appendTokens){ PRInt32 result=kNoError; WillBuildModel(); @@ -535,7 +549,7 @@ PRInt32 nsHTMLParser::Parse(nsString& aSourceBuffer,PRBool appendTokens){ * @param * @return PR_TRUE if parsing concluded successfully. */ -PRInt32 nsHTMLParser::ResumeParse() { +PRInt32 nsParser::ResumeParse() { PRInt32 result=kNoError; mDTD->WillResumeParse(); @@ -558,7 +572,7 @@ PRInt32 nsHTMLParser::ResumeParse() { * @param aCount is the # of attributes you're expecting * @return error code (should be 0) */ -PRInt32 nsHTMLParser::CollectAttributes(nsCParserNode& aNode,PRInt32 aCount){ +PRInt32 nsParser::CollectAttributes(nsCParserNode& aNode,PRInt32 aCount){ nsDequeIterator end=mTokenDeque.End(); int attr=0; @@ -585,7 +599,7 @@ PRInt32 nsHTMLParser::CollectAttributes(nsCParserNode& aNode,PRInt32 aCount){ * @param * @return */ -PRInt32 nsHTMLParser::CollectSkippedContent(nsCParserNode& aNode){ +PRInt32 nsParser::CollectSkippedContent(nsCParserNode& aNode){ eHTMLTokenTypes subtype=eToken_attribute; nsDequeIterator end=mTokenDeque.End(); PRInt32 count=0; @@ -609,7 +623,7 @@ PRInt32 nsHTMLParser::CollectSkippedContent(nsCParserNode& aNode){ * @param * @return */ -nsresult nsHTMLParser::GetBindInfo(void){ +nsresult nsParser::GetBindInfo(void){ nsresult result=0; return result; } @@ -622,7 +636,7 @@ nsresult nsHTMLParser::GetBindInfo(void){ * @return */ nsresult -nsHTMLParser::OnProgress(PRInt32 aProgress, PRInt32 aProgressMax, +nsParser::OnProgress(PRInt32 aProgress, PRInt32 aProgressMax, const nsString& aMsg) { nsresult result=0; @@ -639,7 +653,7 @@ nsHTMLParser::OnProgress(PRInt32 aProgress, PRInt32 aProgressMax, * @param * @return */ -nsresult nsHTMLParser::OnStartBinding(const char *aContentType){ +nsresult nsParser::OnStartBinding(const char *aContentType){ if (nsnull != mListener) { mListener->OnStartBinding(aContentType); } @@ -658,7 +672,7 @@ nsresult nsHTMLParser::OnStartBinding(const char *aContentType){ * @param length is the number of bytes waiting input * @return error code (usually 0) */ -nsresult nsHTMLParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length){ +nsresult nsParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length){ if (nsnull != mListener) { mListener->OnDataAvailable(pIStream, length); } @@ -696,7 +710,7 @@ nsresult nsHTMLParser::OnDataAvailable(nsIInputStream *pIStream, PRInt32 length) * @param * @return */ -nsresult nsHTMLParser::OnStopBinding(PRInt32 status, const nsString& aMsg){ +nsresult nsParser::OnStopBinding(PRInt32 status, const nsString& aMsg){ nsresult result=DidBuildModel(status); if (nsnull != mListener) { mListener->OnStopBinding(status, aMsg); @@ -717,7 +731,7 @@ nsresult nsHTMLParser::OnStopBinding(PRInt32 status, const nsString& aMsg){ * @param anError -- ref to error code * @return new token or null */ -PRInt32 nsHTMLParser::ConsumeToken(CToken*& aToken) { +PRInt32 nsParser::ConsumeToken(CToken*& aToken) { PRInt32 result=mDTD->ConsumeToken(aToken); return result; } @@ -732,7 +746,7 @@ PRInt32 nsHTMLParser::ConsumeToken(CToken*& aToken) { * @param * @return TRUE if it's ok to proceed */ -PRBool nsHTMLParser::WillTokenize(PRBool aIncremental){ +PRBool nsParser::WillTokenize(PRBool aIncremental){ PRBool result=PR_TRUE; return result; } @@ -742,13 +756,15 @@ PRBool nsHTMLParser::WillTokenize(PRBool aIncremental){ * @update gess 3/25/98 * @return TRUE if it's ok to proceed */ -PRInt32 nsHTMLParser::Tokenize(nsString& aSourceBuffer,PRBool appendTokens){ +PRInt32 nsParser::Tokenize(nsString& aSourceBuffer,PRBool appendTokens){ CToken* theToken=0; PRInt32 result=kNoError; + PRInt32 debugCounter=0; //this can be removed. It's only for debugging... WillTokenize(PR_TRUE); while(kNoError==result) { + debugCounter++; result=ConsumeToken(theToken); if(theToken && (kNoError==result)) { @@ -772,7 +788,7 @@ PRInt32 nsHTMLParser::Tokenize(nsString& aSourceBuffer,PRBool appendTokens){ * @update gess 3/25/98 * @return error code */ -PRInt32 nsHTMLParser::Tokenize(void) { +PRInt32 nsParser::Tokenize(void) { CToken* theToken=0; PRInt32 result=kNoError; PRBool done=(0==mMajorIteration) ? (!WillTokenize(PR_TRUE)) : PR_FALSE; @@ -811,7 +827,7 @@ PRInt32 nsHTMLParser::Tokenize(void) { * @param * @return TRUE if all went well */ -PRBool nsHTMLParser::DidTokenize(PRBool aIncremental) { +PRBool nsParser::DidTokenize(PRBool aIncremental) { PRBool result=PR_TRUE; #ifdef VERBOSE_DEBUG @@ -830,7 +846,7 @@ PRBool nsHTMLParser::DidTokenize(PRBool aIncremental) { * @param * @return */ -void nsHTMLParser::DebugDumpTokens(ostream& out) { +void nsParser::DebugDumpTokens(ostream& out) { nsDequeIterator b=mTokenDeque.Begin(); nsDequeIterator e=mTokenDeque.End(); @@ -851,7 +867,7 @@ void nsHTMLParser::DebugDumpTokens(ostream& out) { * @param * @return */ -void nsHTMLParser::DebugDumpSource(ostream& out) { +void nsParser::DebugDumpSource(ostream& out) { nsDequeIterator b=mTokenDeque.Begin(); nsDequeIterator e=mTokenDeque.End(); diff --git a/parser/htmlparser/src/nsHTMLParser.h b/parser/htmlparser/src/nsParser.h similarity index 97% rename from parser/htmlparser/src/nsHTMLParser.h rename to parser/htmlparser/src/nsParser.h index d8638dd3b324..346f6d969955 100644 --- a/parser/htmlparser/src/nsHTMLParser.h +++ b/parser/htmlparser/src/nsParser.h @@ -52,8 +52,8 @@ * */ -#ifndef NS_HTMLPARSER__ -#define NS_HTMLPARSER__ +#ifndef NS_PARSER__ +#define NS_PARSER__ #include "nsIParser.h" #include "nsDeque.h" @@ -63,7 +63,7 @@ #include "nsIStreamListener.h" -#define NS_IHTML_PARSER_IID \ +#define NS_PARSER_IID \ {0x2ce606b0, 0xbee6, 0x11d1, \ {0xaa, 0xd9, 0x00, 0x80, 0x5f, 0x8a, 0x3e, 0x14}} @@ -77,7 +77,7 @@ class nsIParserFilter; class nsIParserDebug; -class nsHTMLParser : public nsIParser, public nsIStreamListener { +class nsParser : public nsIParser, public nsIStreamListener { public: friend class CTokenHandler; @@ -89,14 +89,14 @@ friend class CTokenHandler; * default constructor * @update gess5/11/98 */ - nsHTMLParser(); + nsParser(); /** * Destructor * @update gess5/11/98 */ - ~nsHTMLParser(); + ~nsParser(); /** * Select given content sink into parser for parser output @@ -105,12 +105,12 @@ friend class CTokenHandler; * @return old sink, or NULL */ virtual nsIContentSink* SetContentSink(nsIContentSink* aSink); - - virtual nsIParserFilter* SetParserFilter(nsIParserFilter* aFilter); - virtual void SetDTD(nsIDTD* aDTD); + virtual nsIParserFilter* SetParserFilter(nsIParserFilter* aFilter); - virtual nsIDTD * GetDTD(void); + virtual void SetDTD(nsIDTD* aDTD); + + virtual nsIDTD* GetDTD(void); /** * @@ -297,7 +297,7 @@ protected: //********************************************* nsIStreamListener* mListener; - nsIContentSink* mSink; + nsIContentSink* mSink; nsIParserFilter* mParserFilter; nsDequeIterator* mCurrentPos; diff --git a/parser/htmlparser/src/nsParserDebug.cpp b/parser/htmlparser/src/nsParserDebug.cpp index e998807e3092..dfa20caa14ea 100644 --- a/parser/htmlparser/src/nsParserDebug.cpp +++ b/parser/htmlparser/src/nsParserDebug.cpp @@ -27,7 +27,7 @@ #include "CNavDTD.h" #include "nsHTMLTokens.h" -#include "nsHTMLParser.h" +#include "nsParser.h" #include "nsIParserDebug.h" #include "nsCRT.h" #include "prenv.h" //this is here for debug reasons... @@ -66,7 +66,7 @@ public: void SetVerificationDirectory(char * verify_dir); void SetRecordStatistics(PRBool bval); - PRBool Verify(nsIDTD * aDTD, nsHTMLParser * aParser, int ContextStackPos, eHTMLTags aContextStack[], char * aURLRef); + PRBool Verify(nsIDTD * aDTD, nsParser * aParser, int ContextStackPos, eHTMLTags aContextStack[], char * aURLRef); void DumpVectorRecord(void); // global table for storing vector statistics and the size @@ -87,7 +87,7 @@ static NS_DEFINE_IID(kIDebugParserIID, NS_IPARSERDEBUG_IID); /** * This method is defined in nsIParser. It is used to - * cause the COM-like construction of an nsHTMLParser. + * cause the COM-like construction of an nsParser. * * @update jevering 3/25/98 * @param nsIParser** ptr to newly instantiated parser @@ -376,71 +376,72 @@ void CParserDebug::MakeVectorString(char * vector_string, VectorInfo * pInfo) void CParserDebug::DumpVectorRecord(void) { // do we have a table? - if (mVectorCount) { + if (mVectorCount) { - // hopefully, they wont exceed 1K. - char vector_string[1024]; - char path[1024]; + // hopefully, they wont exceed 1K. + char vector_string[1024]; + char path[1024]; - path[0] = '\0'; + path[0] = '\0'; - // put in the verification directory.. else the root - if (mVerificationDir) - strcpy(path,mVerificationDir); + // put in the verification directory.. else the root + if (mVerificationDir) + strcpy(path,mVerificationDir); - strcat(path,CONTEXT_VECTOR_STAT); + strcat(path,CONTEXT_VECTOR_STAT); - // open the stat file creaming any existing stat file - PRFileDesc * statisticFile = PR_Open(path,PR_CREATE_FILE|PR_RDWR,0); + // open the stat file creaming any existing stat file + PRFileDesc * statisticFile = PR_Open(path,PR_CREATE_FILE|PR_RDWR,0); if (statisticFile) { - PRInt32 i; - PRofstream ps; - ps.attach(statisticFile); - - // oh what the heck, sort it again - if (mVectorCount) { - qsort((void*)mVectorInfoArray,(size_t)mVectorCount,sizeof(VectorInfo*),compare); - } + PRInt32 i; + PRofstream ps; + ps.attach(statisticFile); - // cute little header - sprintf(vector_string,"Context vector occurance results. Processed %d unique vectors.\r\n\r\n", mVectorCount); - ps << vector_string; - - ps << "Invalid context vector summary (see " CONTEXT_VECTOR_STAT ") for mapping.\r\n"; - ps << VECTOR_TABLE_HEADER; - - // dump out the bad vectors encountered - for (i = 0; i < mVectorCount; i++) { - if (!mVectorInfoArray[i]->good_vector) { - MakeVectorString(vector_string, mVectorInfoArray[i]); - ps << vector_string; - } - } - - ps << "\r\n\r\nValid context vector summary\r\n"; - ps << VECTOR_TABLE_HEADER; - - // take a big vector table dump (good vectors) - for (i = 0; i < mVectorCount; i++) { - if (mVectorInfoArray[i]->good_vector) { - MakeVectorString(vector_string, mVectorInfoArray[i]); - ps << vector_string; - } - // free em up. they mean nothing to me now (I'm such a user) - - if (mVectorInfoArray[i]->vector) - PR_Free(mVectorInfoArray[i]->vector); - PR_Free(mVectorInfoArray[i]); - } + // oh what the heck, sort it again + if (mVectorCount) { + qsort((void*)mVectorInfoArray,(size_t)mVectorCount,sizeof(VectorInfo*),compare); } - // ok, we are done with the table, free it up as well - PR_Free(mVectorInfoArray); - mVectorInfoArray = 0; - mVectorCount = 0; + // cute little header + sprintf(vector_string,"Context vector occurance results. Processed %d unique vectors.\r\n\r\n", mVectorCount); + ps << vector_string; + + ps << "Invalid context vector summary (see " CONTEXT_VECTOR_STAT ") for mapping.\r\n"; + ps << VECTOR_TABLE_HEADER; + + // dump out the bad vectors encountered + for (i = 0; i < mVectorCount; i++) { + if (!mVectorInfoArray[i]->good_vector) { + MakeVectorString(vector_string, mVectorInfoArray[i]); + ps << vector_string; + } + } + + ps << "\r\n\r\nValid context vector summary\r\n"; + ps << VECTOR_TABLE_HEADER; + + // take a big vector table dump (good vectors) + for (i = 0; i < mVectorCount; i++) { + if (mVectorInfoArray[i]->good_vector) { + MakeVectorString(vector_string, mVectorInfoArray[i]); + ps << vector_string; + } + // free em up. they mean nothing to me now (I'm such a user) + + if (mVectorInfoArray[i]->vector) + PR_Free(mVectorInfoArray[i]->vector); + PR_Free(mVectorInfoArray[i]); + } //for PR_Close(statisticFile); - } + }//if + + // ok, we are done with the table, free it up as well + PR_Free(mVectorInfoArray); + mVectorInfoArray = 0; + mVectorCount = 0; + + } //if } @@ -455,7 +456,7 @@ void CParserDebug::DumpVectorRecord(void) * @return TRUE if we know how to handle it, else false */ -PRBool CParserDebug::Verify(nsIDTD * aDTD, nsHTMLParser * aParser, int aContextStackPos, eHTMLTags aContextStack[], char * aURLRef) +PRBool CParserDebug::Verify(nsIDTD * aDTD, nsParser * aParser, int aContextStackPos, eHTMLTags aContextStack[], char * aURLRef) { PRBool result=PR_TRUE; diff --git a/parser/htmlparser/src/nsParserNode.cpp b/parser/htmlparser/src/nsParserNode.cpp index 7542e9cf4e75..f251d59d78b2 100644 --- a/parser/htmlparser/src/nsParserNode.cpp +++ b/parser/htmlparser/src/nsParserNode.cpp @@ -18,7 +18,6 @@ #include "nsParserNode.h" -#include "nsHTMLParser.h" #include "string.h" @@ -138,7 +137,7 @@ const nsString& nsCParserNode::GetSkippedContent() const { * @return int value that represents tag type */ PRInt32 nsCParserNode::GetNodeType(void) const{ - return mToken->GetHTMLTag(); + return mToken->GetTypeID(); } diff --git a/parser/htmlparser/src/nsParserNode.h b/parser/htmlparser/src/nsParserNode.h index d2d3e2857b3e..83181d524103 100644 --- a/parser/htmlparser/src/nsParserNode.h +++ b/parser/htmlparser/src/nsParserNode.h @@ -40,7 +40,7 @@ #include "nsHTMLTokens.h" #include "nsString.h" -class nsHTMLParser; +//class nsParser; class nsCParserNode : public nsIParserNode { diff --git a/parser/htmlparser/src/nsParserTypes.h b/parser/htmlparser/src/nsParserTypes.h index 716632dcd3d5..97cb9f616243 100644 --- a/parser/htmlparser/src/nsParserTypes.h +++ b/parser/htmlparser/src/nsParserTypes.h @@ -41,6 +41,7 @@ enum eParseMode { eParseMode_autodetect }; + const PRInt32 kEOF = 1000000L; const PRInt32 kUnknownError = -1000; const PRInt32 kCantPropagate = -6; diff --git a/parser/htmlparser/src/nsToken.cpp b/parser/htmlparser/src/nsToken.cpp index a8ba53a6171a..b18feb71c3a2 100644 --- a/parser/htmlparser/src/nsToken.cpp +++ b/parser/htmlparser/src/nsToken.cpp @@ -26,7 +26,7 @@ * @param nsString--name of token */ CToken::CToken(const nsString& aName) : mTextValue(aName) { - mOrdinalValue=0; + mTypeID=0; mAttrCount=0; } @@ -37,7 +37,7 @@ CToken::CToken(const nsString& aName) : mTextValue(aName) { * @param aName--char* containing name of token */ CToken::CToken(const char* aName) : mTextValue(aName) { - mOrdinalValue=0; + mTypeID=0; mAttrCount=0; } @@ -87,7 +87,7 @@ void CToken::DebugDumpToken(ostream& anOutputStream) { for(i=0;i