added support for NOBR and fixed MAP and AREA behavior

This commit is contained in:
rickg 1998-05-30 03:14:55 +00:00
Родитель 36781f71f4
Коммит 79823f0388
8 изменённых файлов: 54 добавлений и 32 удалений

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

@ -163,7 +163,7 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
PRBool result=PR_FALSE;
//tagset1 has 64 members...
//tagset1 has 65 members...
static char gTagSet1[]={
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_address, eHTMLTag_applet,
eHTMLTag_bold, eHTMLTag_basefont, eHTMLTag_bdo, eHTMLTag_big,
@ -176,7 +176,7 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
eHTMLTag_input, eHTMLTag_isindex,
eHTMLTag_kbd, eHTMLTag_label,
eHTMLTag_map, eHTMLTag_menu, eHTMLTag_newline, //JUST ADDED!
eHTMLTag_map, eHTMLTag_menu, eHTMLTag_newline, eHTMLTag_nobr,
eHTMLTag_noframes, eHTMLTag_noscript,
eHTMLTag_object, eHTMLTag_ol, eHTMLTag_paragraph, eHTMLTag_pre,
eHTMLTag_quotation, eHTMLTag_strike, eHTMLTag_samp, eHTMLTag_script,
@ -188,7 +188,7 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
eHTMLTag_whitespace, //JUST ADDED!
0};
//tagset2 has 43 members...
//tagset2 has 44 members...
static char gTagSet2[]={
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_applet, eHTMLTag_bold,
eHTMLTag_basefont, eHTMLTag_bdo, eHTMLTag_big, eHTMLTag_br,
@ -196,7 +196,7 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
eHTMLTag_em, eHTMLTag_font, eHTMLTag_hr, eHTMLTag_italic,
eHTMLTag_iframe, eHTMLTag_img, eHTMLTag_input, eHTMLTag_kbd,
eHTMLTag_label, eHTMLTag_map, eHTMLTag_newline, //JUST ADDED!
eHTMLTag_label, eHTMLTag_map, eHTMLTag_newline, eHTMLTag_nobr,
eHTMLTag_object, eHTMLTag_paragraph,
eHTMLTag_quotation, eHTMLTag_strike, eHTMLTag_samp, eHTMLTag_script,
eHTMLTag_select, eHTMLTag_small, eHTMLTag_span, eHTMLTag_strong,
@ -424,6 +424,9 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
// XXX kipp was here
result=PRBool(!strchr(gHeadingTags,aChild)); break;
case eHTMLTag_nobr:
result=PR_TRUE; break;
case eHTMLTag_noframes:
if(eHTMLTag_body==aChild)
result=PR_TRUE;
@ -439,7 +442,8 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
result=PRBool(0!=strchr(gTagSet2,aChild)); break;
case eHTMLTag_option:
result=PR_TRUE; break; //for now, allow select to contain anything...
//for now, allow an option to contain anything but another option...
result=PRBool(eHTMLTag_option!=aChild); break;
case eHTMLTag_paragraph:
if(eHTMLTag_paragraph==aChild)
@ -630,7 +634,7 @@ PRBool CNavDTD::CanOmit(PRInt32 aParent,PRInt32 aChild) const {
switch((eHTMLTags)aParent) {
case eHTMLTag_tr: case eHTMLTag_table:
case eHTMLTag_thead: case eHTMLTag_tfoot:
case eHTMLTag_tbody: case eHTMLTag_col:
case eHTMLTag_tbody:
result=PR_TRUE;
default:
break;

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

@ -934,16 +934,24 @@ PRInt32 nsHTMLParser::HandleStartToken(CToken* aToken) {
result=HandleScriptToken(st); break;
case eHTMLTag_map:
// Put map into the head section
result=OpenHead(attrNode);
if(kNoError==result)
result=OpenContainer(attrNode);
break;
case eHTMLTag_head:
break; //ignore head tags...
case eHTMLTag_base:
result=OpenHead(attrNode);
if(kNoError==result) {
result=AddLeaf(attrNode);
if(kNoError==result)
result=CloseHead(attrNode);
}
break;
case eHTMLTag_nobr:
result=PR_TRUE;
case eHTMLTag_map:
result=PR_TRUE;
default:
result=HandleDefaultStartToken(aToken,tokenTagType,attrNode);
break;
@ -992,8 +1000,6 @@ PRInt32 nsHTMLParser::HandleEndToken(CToken* aToken) {
case eHTMLTag_map:
result=CloseContainer(theNode);
if(kNoError==result)
result=CloseHead(theNode);
break;
case eHTMLTag_form:

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

@ -156,7 +156,7 @@ HTMLTagEntry gHTMLTagTable[] =
{"MATH", eHTMLTag_math},
{"MENU", eHTMLTag_menu}, {"META", eHTMLTag_meta},
{"NEWLINE", eHTMLTag_newline},
{"NEWLINE", eHTMLTag_newline}, {"NOBR", eHTMLTag_nobr},
{"NOEMBED", eHTMLTag_noembed}, {"NOFRAMES", eHTMLTag_noframes},
{"NOLAYER", eHTMLTag_nolayer}, {"NOSCRIPT", eHTMLTag_noscript},

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

@ -73,6 +73,7 @@ enum eHTMLTags
eHTMLTag_label, eHTMLTag_layer, eHTMLTag_legend, eHTMLTag_listitem,
eHTMLTag_link, eHTMLTag_listing, eHTMLTag_map, eHTMLTag_marquee,
eHTMLTag_math, eHTMLTag_menu, eHTMLTag_meta, eHTMLTag_newline,
eHTMLTag_nobr,
eHTMLTag_noembed, eHTMLTag_noframes, eHTMLTag_nolayer, eHTMLTag_noscript, //74
eHTMLTag_note, eHTMLTag_object, eHTMLTag_ol,
eHTMLTag_option, eHTMLTag_paragraph, eHTMLTag_param, eHTMLTag_plaintext,

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

@ -163,7 +163,7 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
PRBool result=PR_FALSE;
//tagset1 has 64 members...
//tagset1 has 65 members...
static char gTagSet1[]={
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_address, eHTMLTag_applet,
eHTMLTag_bold, eHTMLTag_basefont, eHTMLTag_bdo, eHTMLTag_big,
@ -176,7 +176,7 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
eHTMLTag_input, eHTMLTag_isindex,
eHTMLTag_kbd, eHTMLTag_label,
eHTMLTag_map, eHTMLTag_menu, eHTMLTag_newline, //JUST ADDED!
eHTMLTag_map, eHTMLTag_menu, eHTMLTag_newline, eHTMLTag_nobr,
eHTMLTag_noframes, eHTMLTag_noscript,
eHTMLTag_object, eHTMLTag_ol, eHTMLTag_paragraph, eHTMLTag_pre,
eHTMLTag_quotation, eHTMLTag_strike, eHTMLTag_samp, eHTMLTag_script,
@ -188,7 +188,7 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
eHTMLTag_whitespace, //JUST ADDED!
0};
//tagset2 has 43 members...
//tagset2 has 44 members...
static char gTagSet2[]={
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_applet, eHTMLTag_bold,
eHTMLTag_basefont, eHTMLTag_bdo, eHTMLTag_big, eHTMLTag_br,
@ -196,7 +196,7 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
eHTMLTag_em, eHTMLTag_font, eHTMLTag_hr, eHTMLTag_italic,
eHTMLTag_iframe, eHTMLTag_img, eHTMLTag_input, eHTMLTag_kbd,
eHTMLTag_label, eHTMLTag_map, eHTMLTag_newline, //JUST ADDED!
eHTMLTag_label, eHTMLTag_map, eHTMLTag_newline, eHTMLTag_nobr,
eHTMLTag_object, eHTMLTag_paragraph,
eHTMLTag_quotation, eHTMLTag_strike, eHTMLTag_samp, eHTMLTag_script,
eHTMLTag_select, eHTMLTag_small, eHTMLTag_span, eHTMLTag_strong,
@ -424,6 +424,9 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
// XXX kipp was here
result=PRBool(!strchr(gHeadingTags,aChild)); break;
case eHTMLTag_nobr:
result=PR_TRUE; break;
case eHTMLTag_noframes:
if(eHTMLTag_body==aChild)
result=PR_TRUE;
@ -439,7 +442,8 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const {
result=PRBool(0!=strchr(gTagSet2,aChild)); break;
case eHTMLTag_option:
result=PR_TRUE; break; //for now, allow select to contain anything...
//for now, allow an option to contain anything but another option...
result=PRBool(eHTMLTag_option!=aChild); break;
case eHTMLTag_paragraph:
if(eHTMLTag_paragraph==aChild)
@ -630,7 +634,7 @@ PRBool CNavDTD::CanOmit(PRInt32 aParent,PRInt32 aChild) const {
switch((eHTMLTags)aParent) {
case eHTMLTag_tr: case eHTMLTag_table:
case eHTMLTag_thead: case eHTMLTag_tfoot:
case eHTMLTag_tbody: case eHTMLTag_col:
case eHTMLTag_tbody:
result=PR_TRUE;
default:
break;

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

@ -934,16 +934,24 @@ PRInt32 nsHTMLParser::HandleStartToken(CToken* aToken) {
result=HandleScriptToken(st); break;
case eHTMLTag_map:
// Put map into the head section
result=OpenHead(attrNode);
if(kNoError==result)
result=OpenContainer(attrNode);
break;
case eHTMLTag_head:
break; //ignore head tags...
case eHTMLTag_base:
result=OpenHead(attrNode);
if(kNoError==result) {
result=AddLeaf(attrNode);
if(kNoError==result)
result=CloseHead(attrNode);
}
break;
case eHTMLTag_nobr:
result=PR_TRUE;
case eHTMLTag_map:
result=PR_TRUE;
default:
result=HandleDefaultStartToken(aToken,tokenTagType,attrNode);
break;
@ -992,8 +1000,6 @@ PRInt32 nsHTMLParser::HandleEndToken(CToken* aToken) {
case eHTMLTag_map:
result=CloseContainer(theNode);
if(kNoError==result)
result=CloseHead(theNode);
break;
case eHTMLTag_form:

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

@ -156,7 +156,7 @@ HTMLTagEntry gHTMLTagTable[] =
{"MATH", eHTMLTag_math},
{"MENU", eHTMLTag_menu}, {"META", eHTMLTag_meta},
{"NEWLINE", eHTMLTag_newline},
{"NEWLINE", eHTMLTag_newline}, {"NOBR", eHTMLTag_nobr},
{"NOEMBED", eHTMLTag_noembed}, {"NOFRAMES", eHTMLTag_noframes},
{"NOLAYER", eHTMLTag_nolayer}, {"NOSCRIPT", eHTMLTag_noscript},

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

@ -73,6 +73,7 @@ enum eHTMLTags
eHTMLTag_label, eHTMLTag_layer, eHTMLTag_legend, eHTMLTag_listitem,
eHTMLTag_link, eHTMLTag_listing, eHTMLTag_map, eHTMLTag_marquee,
eHTMLTag_math, eHTMLTag_menu, eHTMLTag_meta, eHTMLTag_newline,
eHTMLTag_nobr,
eHTMLTag_noembed, eHTMLTag_noframes, eHTMLTag_nolayer, eHTMLTag_noscript, //74
eHTMLTag_note, eHTMLTag_object, eHTMLTag_ol,
eHTMLTag_option, eHTMLTag_paragraph, eHTMLTag_param, eHTMLTag_plaintext,