more bug fixes; changed nsHTMLParser to nsParser.

This commit is contained in:
rickg 1998-06-19 01:00:27 +00:00
parent 3456471e4f
commit 60ebe042b1
42 changed files with 592 additions and 616 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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<mContextStackPos) && (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);

View File

@ -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];

View File

@ -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<mContextStackPos) && (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);

View File

@ -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];

View File

@ -30,7 +30,7 @@ CPPSRCS = \
nsTokenHandler.cpp \
CNavDTD.cpp \
COtherDTD.cpp \
nsHTMLParser.cpp \
nsParser.cpp \
nsHTMLTokens.cpp \
prstrm.cpp \
$(NULL)

View File

@ -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);

View File

@ -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 \

View File

@ -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.

View File

@ -35,7 +35,6 @@
#include "nsToken.h"
#include <iostream.h>
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:
};

View File

@ -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

View File

@ -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;

View File

@ -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) && ((*mCurrentPos<e))){
mMinorIteration++;
CToken* theToken=(CToken*)mCurrentPos->GetCurrent();
@ -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();

View File

@ -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;

View File

@ -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;

View File

@ -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();
}

View File

@ -40,7 +40,7 @@
#include "nsHTMLTokens.h"
#include "nsString.h"
class nsHTMLParser;
//class nsParser;
class nsCParserNode : public nsIParserNode {

View File

@ -41,6 +41,7 @@ enum eParseMode {
eParseMode_autodetect
};
const PRInt32 kEOF = 1000000L;
const PRInt32 kUnknownError = -1000;
const PRInt32 kCantPropagate = -6;

View File

@ -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<mTextValue.Length();i++){
anOutputStream << char(mTextValue[i]);
}
anOutputStream << ": " << mOrdinalValue << endl;
anOutputStream << ": " << mTypeID << endl;
}
/**
@ -129,8 +129,8 @@ nsString& CToken::GetText(void) {
* @update gess 3/25/98
* @param value -- new ordinal value for this token
*/
void CToken::SetOrdinal(PRInt16 value) {
mOrdinalValue=value;
void CToken::SetTypeID(PRInt32 aTypeID) {
mTypeID=aTypeID;
}
/**
@ -140,8 +140,8 @@ void CToken::SetOrdinal(PRInt16 value) {
* @update gess 3/25/98
* @return int containing ordinal value
*/
PRInt16 CToken::GetOrdinal(void) {
return mOrdinalValue;
PRInt32 CToken::GetTypeID(void) {
return mTypeID;
}
/**

View File

@ -99,14 +99,14 @@ class CToken {
* @update gess5/11/98
* @param value is the new ord value for this token
*/
virtual void SetOrdinal(PRInt16 value);
virtual void SetTypeID(PRInt32 aValue);
/**
* Getter which retrieves the current ordinal value for this token
* @update gess5/11/98
* @return current ordinal value
*/
virtual PRInt16 GetOrdinal(void);
virtual PRInt32 GetTypeID(void);
/**
* Sets the # of attributes found for this token.
@ -168,9 +168,10 @@ class CToken {
virtual void SelfTest(void);
protected:
PRInt16 mOrdinalValue;
PRInt16 mAttrCount;
nsString mTextValue;
PRInt32 mTypeID;
PRInt16 mAttrCount;
PRInt16 mUnused;
nsString mTextValue;
};

View File

@ -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);

View File

@ -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);

View File

@ -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<mContextStackPos) && (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);

View File

@ -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];

View File

@ -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<mContextStackPos) && (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);

View File

@ -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];

View File

@ -30,7 +30,7 @@ CPPSRCS = \
nsTokenHandler.cpp \
CNavDTD.cpp \
COtherDTD.cpp \
nsHTMLParser.cpp \
nsParser.cpp \
nsHTMLTokens.cpp \
prstrm.cpp \
$(NULL)

View File

@ -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);

View File

@ -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 \

View File

@ -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.

View File

@ -35,7 +35,6 @@
#include "nsToken.h"
#include <iostream.h>
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:
};

View File

@ -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

View File

@ -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;

View File

@ -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) && ((*mCurrentPos<e))){
mMinorIteration++;
CToken* theToken=(CToken*)mCurrentPos->GetCurrent();
@ -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();

View File

@ -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;

View File

@ -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;

View File

@ -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();
}

View File

@ -40,7 +40,7 @@
#include "nsHTMLTokens.h"
#include "nsString.h"
class nsHTMLParser;
//class nsParser;
class nsCParserNode : public nsIParserNode {

View File

@ -41,6 +41,7 @@ enum eParseMode {
eParseMode_autodetect
};
const PRInt32 kEOF = 1000000L;
const PRInt32 kUnknownError = -1000;
const PRInt32 kCantPropagate = -6;

View File

@ -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<mTextValue.Length();i++){
anOutputStream << char(mTextValue[i]);
}
anOutputStream << ": " << mOrdinalValue << endl;
anOutputStream << ": " << mTypeID << endl;
}
/**
@ -129,8 +129,8 @@ nsString& CToken::GetText(void) {
* @update gess 3/25/98
* @param value -- new ordinal value for this token
*/
void CToken::SetOrdinal(PRInt16 value) {
mOrdinalValue=value;
void CToken::SetTypeID(PRInt32 aTypeID) {
mTypeID=aTypeID;
}
/**
@ -140,8 +140,8 @@ void CToken::SetOrdinal(PRInt16 value) {
* @update gess 3/25/98
* @return int containing ordinal value
*/
PRInt16 CToken::GetOrdinal(void) {
return mOrdinalValue;
PRInt32 CToken::GetTypeID(void) {
return mTypeID;
}
/**

View File

@ -99,14 +99,14 @@ class CToken {
* @update gess5/11/98
* @param value is the new ord value for this token
*/
virtual void SetOrdinal(PRInt16 value);
virtual void SetTypeID(PRInt32 aValue);
/**
* Getter which retrieves the current ordinal value for this token
* @update gess5/11/98
* @return current ordinal value
*/
virtual PRInt16 GetOrdinal(void);
virtual PRInt32 GetTypeID(void);
/**
* Sets the # of attributes found for this token.
@ -168,9 +168,10 @@ class CToken {
virtual void SelfTest(void);
protected:
PRInt16 mOrdinalValue;
PRInt16 mAttrCount;
nsString mTextValue;
PRInt32 mTypeID;
PRInt16 mAttrCount;
PRInt16 mUnused;
nsString mTextValue;
};