Use new generated tags table/search routines
This commit is contained in:
@@ -94,166 +94,6 @@ static StrToUnicodeStruct gStrToUnicodeTable[] =
|
||||
{"yuml", 0x00ff}
|
||||
};
|
||||
|
||||
|
||||
struct HTMLTagEntry {
|
||||
char mName[12];
|
||||
eHTMLTags mTagID;
|
||||
PRInt16 mUnused;
|
||||
};
|
||||
|
||||
// KEEP THIS LIST SORTED!
|
||||
// NOTE: This table is sorted in ascii collating order. If you
|
||||
// add a new entry, make sure you put it in the right spot otherwise
|
||||
// the binary search code above will break!
|
||||
HTMLTagEntry gHTMLTagTable[] =
|
||||
{
|
||||
{"!!UNKNOWN", eHTMLTag_unknown,0},
|
||||
{"!DOCTYPE", eHTMLTag_doctype,0}, {"A", eHTMLTag_a,0},
|
||||
{"ACRONYM", eHTMLTag_acronym,0}, {"ADDRESS", eHTMLTag_address,0},
|
||||
{"APPLET", eHTMLTag_applet,0}, {"AREA", eHTMLTag_area,0},
|
||||
|
||||
{"B", eHTMLTag_bold,0}, {"BASE", eHTMLTag_base,0},
|
||||
{"BASEFONT", eHTMLTag_basefont,0}, {"BDO", eHTMLTag_bdo,0},
|
||||
{"BIG", eHTMLTag_big,0}, {"BLINK", eHTMLTag_blink,0},
|
||||
{"BLOCKQUOTE", eHTMLTag_blockquote,0}, {"BODY", eHTMLTag_body,0},
|
||||
{"BR", eHTMLTag_br,0}, {"BUTTON", eHTMLTag_button,0},
|
||||
|
||||
{"CAPTION", eHTMLTag_caption,0}, {"CENTER", eHTMLTag_center,0},
|
||||
{"CERTIFICATE", eHTMLTag_certificate,0},
|
||||
{"CITE", eHTMLTag_cite,0}, {"CODE", eHTMLTag_code,0},
|
||||
{"COL", eHTMLTag_col,0}, {"COLGROUP", eHTMLTag_colgroup,0},
|
||||
{"COMMENT", eHTMLTag_comment,0},
|
||||
|
||||
{"DD", eHTMLTag_dd,0}, {"DEL", eHTMLTag_del,0},
|
||||
{"DFN", eHTMLTag_dfn,0}, {"DIR", eHTMLTag_dir,0},
|
||||
{"DIV", eHTMLTag_div,0}, {"DL", eHTMLTag_dl,0},
|
||||
{"DT", eHTMLTag_dt,0},
|
||||
|
||||
{"EM", eHTMLTag_em,0}, {"EMBED", eHTMLTag_embed,0},
|
||||
{"ENTITY", eHTMLTag_entity,0}, //a pseudo tag
|
||||
|
||||
{"FIELDSET", eHTMLTag_fieldset,0}, {"FONT", eHTMLTag_font,0},
|
||||
{"FOOTER", eHTMLTag_footer,0}, {"FORM", eHTMLTag_form,0},
|
||||
{"FRAME", eHTMLTag_frame,0}, {"FRAMESET", eHTMLTag_frameset,0},
|
||||
|
||||
{"H1", eHTMLTag_h1,0}, {"H2", eHTMLTag_h2,0},
|
||||
{"H3", eHTMLTag_h3,0}, {"H4", eHTMLTag_h4,0},
|
||||
{"H5", eHTMLTag_h5,0}, {"H6", eHTMLTag_h6,0},
|
||||
{"HEAD", eHTMLTag_head,0}, {"HEADER", eHTMLTag_header,0},
|
||||
{"HR", eHTMLTag_hr,0}, {"HTML", eHTMLTag_html,0},
|
||||
|
||||
{"I", eHTMLTag_italic,0}, {"IFRAME", eHTMLTag_iframe,0},
|
||||
{"ILAYER", eHTMLTag_ilayer,0}, {"IMG", eHTMLTag_img,0},
|
||||
{"INPUT", eHTMLTag_input,0}, {"INS", eHTMLTag_ins,0},
|
||||
{"ISINDEX", eHTMLTag_isindex,0},
|
||||
|
||||
{"KBD", eHTMLTag_kbd,0}, {"KEYGEN", eHTMLTag_keygen,0},
|
||||
|
||||
{"LABEL", eHTMLTag_label,0}, {"LAYER", eHTMLTag_layer,0},
|
||||
{"LEGEND", eHTMLTag_legend,0}, {"LI", eHTMLTag_listitem,0},
|
||||
{"LINK", eHTMLTag_link,0}, {"LISTING", eHTMLTag_listing,0},
|
||||
|
||||
{"MAP", eHTMLTag_map,0}, {"MARQUEE", eHTMLTag_marquee,0},
|
||||
{"MATH", eHTMLTag_math,0},
|
||||
{"MENU", eHTMLTag_menu,0}, {"META", eHTMLTag_meta,0},
|
||||
|
||||
{"NEWLINE", eHTMLTag_newline,0}, {"NOBR", eHTMLTag_nobr,0},
|
||||
|
||||
{"NOEMBED", eHTMLTag_noembed,0}, {"NOFRAMES", eHTMLTag_noframes,0},
|
||||
{"NOLAYER", eHTMLTag_nolayer,0}, {"NOSCRIPT", eHTMLTag_noscript,0},
|
||||
{"NOTE", eHTMLTag_note,0},
|
||||
|
||||
{"OBJECT", eHTMLTag_object,0}, {"OL", eHTMLTag_ol,0},
|
||||
{"OPTION", eHTMLTag_option,0},
|
||||
|
||||
{"P", eHTMLTag_paragraph,0}, {"PARAM", eHTMLTag_param,0},
|
||||
{"PLAINTEXT", eHTMLTag_plaintext,0},
|
||||
|
||||
{"PRE", eHTMLTag_pre,0},
|
||||
|
||||
{"Q", eHTMLTag_quotation,0},
|
||||
|
||||
{"S", eHTMLTag_s,0}, {"SAMP", eHTMLTag_samp,0},
|
||||
{"SCRIPT", eHTMLTag_script,0}, {"SELECT", eHTMLTag_select,0},
|
||||
{"SERVER", eHTMLTag_server,0}, {"SMALL", eHTMLTag_small,0},
|
||||
{"SPACER", eHTMLTag_spacer,0},
|
||||
{"SPAN", eHTMLTag_span,0}, {"SPELL", eHTMLTag_spell,0},
|
||||
{"STRIKE", eHTMLTag_strike,0},
|
||||
{"STRONG", eHTMLTag_strong,0}, {"STYLE", eHTMLTag_style,0},
|
||||
{"SUB", eHTMLTag_sub,0}, {"SUP", eHTMLTag_sup,0},
|
||||
|
||||
{"TABLE", eHTMLTag_table,0}, {"TBODY", eHTMLTag_tbody,0},
|
||||
{"TD", eHTMLTag_td,0},
|
||||
|
||||
{"TEXT", eHTMLTag_text,0},
|
||||
|
||||
{"TEXTAREA", eHTMLTag_textarea,0},
|
||||
{"TFOOT", eHTMLTag_tfoot,0}, {"TH", eHTMLTag_th,0},
|
||||
{"THEAD", eHTMLTag_thead,0}, {"TITLE", eHTMLTag_title,0},
|
||||
{"TR", eHTMLTag_tr,0}, {"TT", eHTMLTag_tt,0},
|
||||
|
||||
{"U", eHTMLTag_u,0}, {"UL", eHTMLTag_ul,0},
|
||||
{"VAR", eHTMLTag_var,0}, {"WBR", eHTMLTag_wbr,0},
|
||||
{"WS", eHTMLTag_whitespace,0},
|
||||
|
||||
{"X-USERDEF", eHTMLTag_userdefined,0}, //make sure this is always last!
|
||||
|
||||
};
|
||||
|
||||
struct HTMLAttrEntry
|
||||
{
|
||||
char mName[11];
|
||||
eHTMLAttributes mAttrID;
|
||||
};
|
||||
|
||||
HTMLAttrEntry gHTMLAttributeTable[] =
|
||||
{
|
||||
{"ABBREV", eHTMLAttr_abbrev}, {"ABOVE", eHTMLAttr_above},
|
||||
{"ALT", eHTMLAttr_alt}, {"ARRAY", eHTMLAttr_array},
|
||||
{"AU", eHTMLAttr_author},
|
||||
|
||||
{"BACKGROUND",eHTMLAttr_background}, {"BANNER", eHTMLAttr_banner},
|
||||
{"BELOW", eHTMLAttr_below}, {"BGSOUND", eHTMLAttr_bgsound},
|
||||
{"BOX", eHTMLAttr_box}, {"BT", eHTMLAttr_bt},
|
||||
|
||||
{"CLASS", eHTMLAttr_class}, {"COMMENT", eHTMLAttr_comment},
|
||||
{"CREDIT", eHTMLAttr_credit},
|
||||
|
||||
{"DIR", eHTMLAttr_dir},
|
||||
|
||||
{"FIG", eHTMLAttr_figure}, {"FIGURE", eHTMLAttr_figure},
|
||||
{"FOOTNOTE", eHTMLAttr_footnote},
|
||||
|
||||
{"HEIGHT", eHTMLAttr_height},
|
||||
|
||||
{"ID", eHTMLAttr_id},
|
||||
|
||||
{"LANG", eHTMLAttr_lang},
|
||||
|
||||
{"MATH", eHTMLAttr_math},
|
||||
|
||||
{"NAME", eHTMLAttr_name}, {"NEXTID", eHTMLAttr_nextid},
|
||||
{"NOBR", eHTMLAttr_nobreak},
|
||||
|
||||
{"NOTE", eHTMLAttr_note},
|
||||
|
||||
{"OPTION", eHTMLAttr_option}, {"OVERLAY", eHTMLAttr_overlay},
|
||||
|
||||
{"PERSON", eHTMLAttr_person}, {"PUBLIC", eHTMLAttr_public},
|
||||
|
||||
{"RANGE", eHTMLAttr_range}, {"ROOT", eHTMLAttr_root},
|
||||
|
||||
{"SGML", eHTMLAttr_sgml}, {"SQRT", eHTMLAttr_sqrt},
|
||||
{"SRC", eHTMLAttr_src}, {"STYLE", eHTMLAttr_style},
|
||||
|
||||
{"TEXT", eHTMLAttr_text}, {"TITLE", eHTMLAttr_title},
|
||||
|
||||
{"WBR", eHTMLAttr_wordbreak}, {"WIDTH", eHTMLAttr_width},
|
||||
|
||||
{"XMP", eHTMLAttr_xmp}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* default constructor
|
||||
*
|
||||
@@ -309,8 +149,13 @@ CStartToken::CStartToken(eHTMLTags aTag) : CHTMLToken(aTag) {
|
||||
* @return
|
||||
*/
|
||||
PRInt32 CStartToken::GetTypeID(){
|
||||
if(eHTMLTag_unknown==mTypeID)
|
||||
mTypeID=DetermineHTMLTagType(mTextValue);
|
||||
if(eHTMLTag_unknown==mTypeID) {
|
||||
nsAutoString tmp(mTextValue);
|
||||
tmp.ToUpperCase();
|
||||
char cbuf[20];
|
||||
tmp.ToCString(cbuf, sizeof(cbuf));
|
||||
mTypeID = NS_TagToEnum(cbuf);
|
||||
}
|
||||
return mTypeID;
|
||||
}
|
||||
|
||||
@@ -479,8 +324,13 @@ PRInt32 CEndToken::Consume(PRUnichar aChar, CScanner& aScanner) {
|
||||
* @return eHTMLTag id of this endtag
|
||||
*/
|
||||
PRInt32 CEndToken::GetTypeID(){
|
||||
if(eHTMLTag_unknown==mTypeID)
|
||||
mTypeID=DetermineHTMLTagType(mTextValue);
|
||||
if(eHTMLTag_unknown==mTypeID) {
|
||||
nsAutoString tmp(mTextValue);
|
||||
tmp.ToUpperCase();
|
||||
char cbuf[20];
|
||||
tmp.ToCString(cbuf, sizeof(cbuf));
|
||||
mTypeID = NS_TagToEnum(cbuf);
|
||||
}
|
||||
return mTypeID;
|
||||
}
|
||||
|
||||
@@ -1335,7 +1185,7 @@ PRInt32 CSkippedContentToken::Consume(PRUnichar aChar,CScanner& aScanner) {
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* This method iterates the tagtable to ensure that is
|
||||
* is proper sort order. This method only needs to be
|
||||
@@ -1362,37 +1212,7 @@ public:
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* This method accepts a string (and optionally, its length)
|
||||
* and determines the eHTMLTag (id) value.
|
||||
*
|
||||
* @update gess 3/25/98
|
||||
* @param aString -- string to be convered to id
|
||||
* @return valid id, or user_defined.
|
||||
*/
|
||||
eHTMLTags DetermineHTMLTagType(const nsString& aString)
|
||||
{
|
||||
PRInt32 result=-1;
|
||||
PRInt32 cnt=sizeof(gHTMLTagTable)/sizeof(HTMLTagEntry);
|
||||
PRInt32 low=0;
|
||||
PRInt32 high=cnt-1;
|
||||
PRInt32 middle=kNotFound;
|
||||
|
||||
while(low<=high){
|
||||
middle=(PRInt32)(low+high)/2;
|
||||
result=aString.Compare(gHTMLTagTable[middle].mName, PR_TRUE);
|
||||
if (result==0)
|
||||
return gHTMLTagTable[middle].mTagID;
|
||||
if (result<0)
|
||||
high=middle-1;
|
||||
else low=middle+1;
|
||||
}
|
||||
return eHTMLTag_userdefined;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -1401,24 +1221,15 @@ eHTMLTags DetermineHTMLTagType(const nsString& aString)
|
||||
* @return
|
||||
*/
|
||||
const char* GetTagName(PRInt32 aTag) {
|
||||
const char* result=0;
|
||||
PRInt32 cnt=sizeof(gHTMLTagTable)/sizeof(HTMLTagEntry);
|
||||
PRInt32 low=0;
|
||||
PRInt32 high=cnt-1;
|
||||
PRInt32 middle=kNotFound;
|
||||
|
||||
while(low<=high) {
|
||||
middle=(PRInt32)(low+high)/2;
|
||||
if(aTag==gHTMLTagTable[middle].mTagID)
|
||||
return gHTMLTagTable[middle].mName;
|
||||
if(aTag<gHTMLTagTable[middle].mTagID)
|
||||
high=middle-1;
|
||||
else low=middle+1;
|
||||
const char* result = NS_EnumToTag((nsHTMLTag) aTag);
|
||||
if (0 == result) {
|
||||
result = gUserdefined;
|
||||
}
|
||||
return gUserdefined;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* This method iterates the attribute-table to ensure that is
|
||||
* is proper sort order. This method only needs to be
|
||||
@@ -1458,3 +1269,4 @@ CTagTableVerifier gTableVerifier;
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user