added parse-system debugging hooks

This commit is contained in:
rickg 1998-04-25 23:10:51 +00:00
Родитель 808f265fa1
Коммит 2af9fb2e9f
6 изменённых файлов: 136 добавлений и 40 удалений

Просмотреть файл

@ -27,7 +27,8 @@
#include "COtherDTD.h"
#include "CNavDelegate.h"
#include "CNavDTD.h"
#include "prenv.h" //this is here for debug reasons...
#include <direct.h> //this is here for debug reasons...
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kClassIID, NS_IHTML_PARSER_IID);
@ -38,6 +39,7 @@ static const char* kNullTokenizer = "Error: Unable to construct tokenizer";
static const char* kNullToken = "Error: Null token given";
static const char* kInvalidTagStackPos = "Error: invalid tag stack position";
static char* gVerificationOutputDir=0;
/**
* This method is defined in nsIParser. It is used to
@ -97,6 +99,7 @@ nsHTMLParser::nsHTMLParser() {
mDTD=0;
mTokenHandlerCount=0;
InitializeDefaultTokenHandlers();
gVerificationOutputDir = PR_GetEnv("VERIFY_PARSER");
}
@ -321,19 +324,35 @@ nsIContentSink* nsHTMLParser::SetContentSink(nsIContentSink* aSink) {
* @return TRUE if we know how to handle it, else false
*/
PRBool VerifyContextVector(eHTMLTags tags[],PRInt32 count,nsIDTD* aDTD) {
PRBool result=PR_FALSE;
if(aDTD){
PRInt32 theArray[50];
for(int i=0;i<count;i++){
theArray[i]=tags[i];
PRBool result=PR_TRUE;
if(0!=gVerificationOutputDir) {
if(aDTD){
PRInt32 theArray[50];
char path[_MAX_PATH+1];
strcpy(path,gVerificationOutputDir);
for(int i=0;i<count;i++){
theArray[i]=tags[i];
#ifdef NS_WIN32
strcat(path,"/");
const char* name=GetTagName(tags[i]);
strcat(path,name);
mkdir(path);
#endif
}
//ok, now see if we understand this vector
result=aDTD->VerifyContextVector(theArray,count);
}
if(PR_FALSE==result){
//add debugging code here to record the fact that we just encountered
//a context vector we don't know how to handle.
}
//ok, now see if we understand this vector
result=aDTD->VerifyContextVector(theArray,count);
}
if(PR_FALSE==result){
//add debugging code here to record the fact that we just encountered
//a context vector we don't know how to handle.
}
return result;
}
@ -425,7 +444,14 @@ PRBool nsHTMLParser::IterateTokens() {
* @return PR_TRUE if parse succeeded, PR_FALSE otherwise.
*/
PRBool nsHTMLParser::Parse(nsIURL* aURL){
return Parse(aURL,eParseMode_navigator);
eParseMode theMode=eParseMode_navigator;
char* theModeStr= PR_GetEnv("PARSE_MODE");
if(theModeStr)
if(0!=strnicmp("nav",theModeStr,3))
theMode=eParseMode_other;
return Parse(aURL,theMode);
}
/**

Просмотреть файл

@ -108,6 +108,7 @@ struct HTMLTagEntry
// the binary search code above will break!
HTMLTagEntry gHTMLTagTable[] =
{
{"!!UNKNOWN", eHTMLTag_unknown},
{"!DOCTYPE", eHTMLTag_doctype}, {"A", eHTMLTag_a},
{"ACRONYM", eHTMLTag_acronym}, {"ADDRESS", eHTMLTag_address},
{"APPLET", eHTMLTag_applet}, {"AREA", eHTMLTag_area},
@ -139,7 +140,7 @@ HTMLTagEntry gHTMLTagTable[] =
{"H5", eHTMLTag_h5}, {"H6", eHTMLTag_h6},
{"HEAD", eHTMLTag_head}, {"HEADER", eHTMLTag_header},
{"HR", eHTMLTag_hr}, {"HTML", eHTMLTag_html},
{"I", eHTMLTag_italic}, {"IFRAME", eHTMLTag_iframe},
{"ILAYER", eHTMLTag_ilayer}, {"IMG", eHTMLTag_img},
{"INPUT", eHTMLTag_input}, {"INS", eHTMLTag_ins},
@ -152,12 +153,14 @@ HTMLTagEntry gHTMLTagTable[] =
{"LINK", eHTMLTag_link}, {"LISTING", eHTMLTag_listing},
{"MAP", eHTMLTag_map}, {"MARQUEE", eHTMLTag_marquee},
{"MATH", eHTMLTag_math},
{"MENU", eHTMLTag_menu}, {"META", eHTMLTag_meta},
{"NEWLINE", eHTMLTag_newline},
{"NOEMBED", eHTMLTag_noembed}, {"NOFRAMES", eHTMLTag_noframes},
{"NOLAYER", eHTMLTag_nolayer}, {"NOSCRIPT", eHTMLTag_noscript},
{"NOTE", eHTMLTag_note},
{"OBJECT", eHTMLTag_object}, {"OL", eHTMLTag_ol},
{"OPTION", eHTMLTag_option},
@ -182,12 +185,13 @@ HTMLTagEntry gHTMLTagTable[] =
{"TEXT", eHTMLTag_text},
{"TEXTAREA", eHTMLTag_textarea},
{"TEXTAREA", eHTMLTag_textarea},
{"TFOOT", eHTMLTag_tfoot}, {"TH", eHTMLTag_th},
{"THEAD", eHTMLTag_thead}, {"TITLE", eHTMLTag_title},
{"TR", eHTMLTag_tr}, {"TT", eHTMLTag_tt},
{"U", eHTMLTag_u}, {"UL", eHTMLTag_ul},
{"USERDEF", eHTMLTag_userdefined},
{"VAR", eHTMLTag_var}, {"WBR", eHTMLTag_wbr},
{"WS", eHTMLTag_whitespace},
@ -1275,6 +1279,23 @@ eHTMLTags DetermineHTMLTagType(const nsString& aString)
}
/**
*
* @update gess4/25/98
* @param
* @return
*/
const char* GetTagName(eHTMLTags aTag) {
const char* result=0;
PRInt32 cnt=sizeof(gHTMLTagTable)/sizeof(HTMLTagEntry);
for(int i=0;i<cnt;i++){
if(aTag==gHTMLTagTable[i].fTagID)
return gHTMLTagTable[i].fName;
}
return result;
}
/**-------------------------------------------------------
* This method iterates the attribute-table to ensure that is
* is proper sort order. This method only needs to be

Просмотреть файл

@ -83,13 +83,13 @@ enum eHTMLTags
eHTMLTag_table, eHTMLTag_tbody, eHTMLTag_td,
eHTMLTag_text, //used for plain text; this is not really a tag.
eHTMLTag_textarea,
eHTMLTag_tfoot,
eHTMLTag_thead, eHTMLTag_th, eHTMLTag_tr, eHTMLTag_textarea,
eHTMLTag_title, eHTMLTag_tt, eHTMLTag_monofont, eHTMLTag_u,
eHTMLTag_ul, eHTMLTag_var, eHTMLTag_wbr, eHTMLTag_whitespace,
eHTMLTag_xmp,
eHTMLTag_userdefined
eHTMLTag_th, eHTMLTag_thead, eHTMLTag_title, eHTMLTag_tr,
eHTMLTag_tt, eHTMLTag_monofont, eHTMLTag_u, eHTMLTag_ul,
eHTMLTag_var, eHTMLTag_wbr, eHTMLTag_whitespace,
eHTMLTag_xmp, eHTMLTag_userdefined
};
//*** This enum is used to define the known universe of HTML attributes.
@ -113,6 +113,7 @@ PRInt32 ConsumeAttributeText(PRUnichar aChar,nsString& aString,CScanner&
PRInt32 FindEntityIndex(const char* aBuffer,PRInt32 aBufLen=-1);
eHTMLTags DetermineHTMLTagType(const nsString& aString);
eHTMLTokenTypes DetermineTokenType(const nsString& aString);
const char* GetTagName(eHTMLTags aTag);
/** -----------------------------------------------------

Просмотреть файл

@ -27,7 +27,8 @@
#include "COtherDTD.h"
#include "CNavDelegate.h"
#include "CNavDTD.h"
#include "prenv.h" //this is here for debug reasons...
#include <direct.h> //this is here for debug reasons...
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kClassIID, NS_IHTML_PARSER_IID);
@ -38,6 +39,7 @@ static const char* kNullTokenizer = "Error: Unable to construct tokenizer";
static const char* kNullToken = "Error: Null token given";
static const char* kInvalidTagStackPos = "Error: invalid tag stack position";
static char* gVerificationOutputDir=0;
/**
* This method is defined in nsIParser. It is used to
@ -97,6 +99,7 @@ nsHTMLParser::nsHTMLParser() {
mDTD=0;
mTokenHandlerCount=0;
InitializeDefaultTokenHandlers();
gVerificationOutputDir = PR_GetEnv("VERIFY_PARSER");
}
@ -321,19 +324,35 @@ nsIContentSink* nsHTMLParser::SetContentSink(nsIContentSink* aSink) {
* @return TRUE if we know how to handle it, else false
*/
PRBool VerifyContextVector(eHTMLTags tags[],PRInt32 count,nsIDTD* aDTD) {
PRBool result=PR_FALSE;
if(aDTD){
PRInt32 theArray[50];
for(int i=0;i<count;i++){
theArray[i]=tags[i];
PRBool result=PR_TRUE;
if(0!=gVerificationOutputDir) {
if(aDTD){
PRInt32 theArray[50];
char path[_MAX_PATH+1];
strcpy(path,gVerificationOutputDir);
for(int i=0;i<count;i++){
theArray[i]=tags[i];
#ifdef NS_WIN32
strcat(path,"/");
const char* name=GetTagName(tags[i]);
strcat(path,name);
mkdir(path);
#endif
}
//ok, now see if we understand this vector
result=aDTD->VerifyContextVector(theArray,count);
}
if(PR_FALSE==result){
//add debugging code here to record the fact that we just encountered
//a context vector we don't know how to handle.
}
//ok, now see if we understand this vector
result=aDTD->VerifyContextVector(theArray,count);
}
if(PR_FALSE==result){
//add debugging code here to record the fact that we just encountered
//a context vector we don't know how to handle.
}
return result;
}
@ -425,7 +444,14 @@ PRBool nsHTMLParser::IterateTokens() {
* @return PR_TRUE if parse succeeded, PR_FALSE otherwise.
*/
PRBool nsHTMLParser::Parse(nsIURL* aURL){
return Parse(aURL,eParseMode_navigator);
eParseMode theMode=eParseMode_navigator;
char* theModeStr= PR_GetEnv("PARSE_MODE");
if(theModeStr)
if(0!=strnicmp("nav",theModeStr,3))
theMode=eParseMode_other;
return Parse(aURL,theMode);
}
/**

Просмотреть файл

@ -108,6 +108,7 @@ struct HTMLTagEntry
// the binary search code above will break!
HTMLTagEntry gHTMLTagTable[] =
{
{"!!UNKNOWN", eHTMLTag_unknown},
{"!DOCTYPE", eHTMLTag_doctype}, {"A", eHTMLTag_a},
{"ACRONYM", eHTMLTag_acronym}, {"ADDRESS", eHTMLTag_address},
{"APPLET", eHTMLTag_applet}, {"AREA", eHTMLTag_area},
@ -139,7 +140,7 @@ HTMLTagEntry gHTMLTagTable[] =
{"H5", eHTMLTag_h5}, {"H6", eHTMLTag_h6},
{"HEAD", eHTMLTag_head}, {"HEADER", eHTMLTag_header},
{"HR", eHTMLTag_hr}, {"HTML", eHTMLTag_html},
{"I", eHTMLTag_italic}, {"IFRAME", eHTMLTag_iframe},
{"ILAYER", eHTMLTag_ilayer}, {"IMG", eHTMLTag_img},
{"INPUT", eHTMLTag_input}, {"INS", eHTMLTag_ins},
@ -152,12 +153,14 @@ HTMLTagEntry gHTMLTagTable[] =
{"LINK", eHTMLTag_link}, {"LISTING", eHTMLTag_listing},
{"MAP", eHTMLTag_map}, {"MARQUEE", eHTMLTag_marquee},
{"MATH", eHTMLTag_math},
{"MENU", eHTMLTag_menu}, {"META", eHTMLTag_meta},
{"NEWLINE", eHTMLTag_newline},
{"NOEMBED", eHTMLTag_noembed}, {"NOFRAMES", eHTMLTag_noframes},
{"NOLAYER", eHTMLTag_nolayer}, {"NOSCRIPT", eHTMLTag_noscript},
{"NOTE", eHTMLTag_note},
{"OBJECT", eHTMLTag_object}, {"OL", eHTMLTag_ol},
{"OPTION", eHTMLTag_option},
@ -182,12 +185,13 @@ HTMLTagEntry gHTMLTagTable[] =
{"TEXT", eHTMLTag_text},
{"TEXTAREA", eHTMLTag_textarea},
{"TEXTAREA", eHTMLTag_textarea},
{"TFOOT", eHTMLTag_tfoot}, {"TH", eHTMLTag_th},
{"THEAD", eHTMLTag_thead}, {"TITLE", eHTMLTag_title},
{"TR", eHTMLTag_tr}, {"TT", eHTMLTag_tt},
{"U", eHTMLTag_u}, {"UL", eHTMLTag_ul},
{"USERDEF", eHTMLTag_userdefined},
{"VAR", eHTMLTag_var}, {"WBR", eHTMLTag_wbr},
{"WS", eHTMLTag_whitespace},
@ -1275,6 +1279,23 @@ eHTMLTags DetermineHTMLTagType(const nsString& aString)
}
/**
*
* @update gess4/25/98
* @param
* @return
*/
const char* GetTagName(eHTMLTags aTag) {
const char* result=0;
PRInt32 cnt=sizeof(gHTMLTagTable)/sizeof(HTMLTagEntry);
for(int i=0;i<cnt;i++){
if(aTag==gHTMLTagTable[i].fTagID)
return gHTMLTagTable[i].fName;
}
return result;
}
/**-------------------------------------------------------
* This method iterates the attribute-table to ensure that is
* is proper sort order. This method only needs to be

Просмотреть файл

@ -83,13 +83,13 @@ enum eHTMLTags
eHTMLTag_table, eHTMLTag_tbody, eHTMLTag_td,
eHTMLTag_text, //used for plain text; this is not really a tag.
eHTMLTag_textarea,
eHTMLTag_tfoot,
eHTMLTag_thead, eHTMLTag_th, eHTMLTag_tr, eHTMLTag_textarea,
eHTMLTag_title, eHTMLTag_tt, eHTMLTag_monofont, eHTMLTag_u,
eHTMLTag_ul, eHTMLTag_var, eHTMLTag_wbr, eHTMLTag_whitespace,
eHTMLTag_xmp,
eHTMLTag_userdefined
eHTMLTag_th, eHTMLTag_thead, eHTMLTag_title, eHTMLTag_tr,
eHTMLTag_tt, eHTMLTag_monofont, eHTMLTag_u, eHTMLTag_ul,
eHTMLTag_var, eHTMLTag_wbr, eHTMLTag_whitespace,
eHTMLTag_xmp, eHTMLTag_userdefined
};
//*** This enum is used to define the known universe of HTML attributes.
@ -113,6 +113,7 @@ PRInt32 ConsumeAttributeText(PRUnichar aChar,nsString& aString,CScanner&
PRInt32 FindEntityIndex(const char* aBuffer,PRInt32 aBufLen=-1);
eHTMLTags DetermineHTMLTagType(const nsString& aString);
eHTMLTokenTypes DetermineTokenType(const nsString& aString);
const char* GetTagName(eHTMLTags aTag);
/** -----------------------------------------------------