From f01a6e9f3e26d57d956881cab1fb0564f3023dc3 Mon Sep 17 00:00:00 2001 From: "harishd%netscape.com" Date: Tue, 7 Aug 2001 19:05:21 +0000 Subject: [PATCH] 83119 - Added support for visibility in GetComputedStyle(). r=heikki,sr=jst. 84000 - Preserve NOFRAMES content - patch submitted by scoda@alias.it. r=me, sr=jst. 65467 - DT is an inline element. r=heikki, sr=jst. 88992 - OBJECT should be able to close unclosed block level elements within it. r=heikki, sr=vidur 84491 - IFRAME should be treated similar to NOFRAMES. r=pollmann, sr=vidur 92530 - FORM should behave as a container if the parent is TD or TH. r=heikki,sr=vidur 88243 - For percentage attribute value do not assume that '%' will always be the last character. r=heikki,sr=vidur. --- .../html/content/src/nsGenericHTMLElement.cpp | 4 +- content/html/style/src/nsComputedDOMStyle.cpp | 42 ++++++++++++++++--- htmlparser/src/CNavDTD.cpp | 13 ++++-- htmlparser/src/nsElementTable.cpp | 26 ++++++------ htmlparser/src/nsHTMLTokenizer.cpp | 17 +++++--- layout/style/nsComputedDOMStyle.cpp | 42 ++++++++++++++++--- parser/htmlparser/src/CNavDTD.cpp | 13 ++++-- parser/htmlparser/src/nsElementTable.cpp | 26 ++++++------ parser/htmlparser/src/nsHTMLTokenizer.cpp | 17 +++++--- 9 files changed, 146 insertions(+), 54 deletions(-) diff --git a/content/html/content/src/nsGenericHTMLElement.cpp b/content/html/content/src/nsGenericHTMLElement.cpp index 64206e2617b..0f28bd61bd5 100644 --- a/content/html/content/src/nsGenericHTMLElement.cpp +++ b/content/html/content/src/nsGenericHTMLElement.cpp @@ -2390,7 +2390,7 @@ nsGenericHTMLElement::ParseValueOrPercent(const nsAReadableString& aString, PRInt32 ec, val = tmp.ToInteger(&ec); if (NS_OK == ec) { if (val < 0) val = 0; - if (tmp.Length() && tmp.Last() == '%') {/* XXX not 100% compatible with ebina's code */ + if (tmp.Length() && tmp.RFindChar('%') >= 0) {/* XXX not 100% compatible with ebina's code */ if (val > 100) val = 100; aResult.SetPercentValue(float(val)/100.0f); } else { @@ -2428,7 +2428,7 @@ nsGenericHTMLElement::ParseValueOrPercentOrProportional(const nsAReadableString& } if (NS_OK == ec) { if (val < 0) val = 0; - if (tmp.Length() && tmp.Last() == '%') {/* XXX not 100% compatible with ebina's code */ + if (tmp.Length() && tmp.RFindChar('%') >= 0) {/* XXX not 100% compatible with ebina's code */ if (val > 100) val = 100; aResult.SetPercentValue(float(val)/100.0f); } else if (tmp.Length() && tmp.Last() == '*') { diff --git a/content/html/style/src/nsComputedDOMStyle.cpp b/content/html/style/src/nsComputedDOMStyle.cpp index 72fe5491182..aec9e2de1ae 100644 --- a/content/html/style/src/nsComputedDOMStyle.cpp +++ b/content/html/style/src/nsComputedDOMStyle.cpp @@ -176,6 +176,9 @@ private: nsresult GetTextAlign(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue); nsresult GetTextDecoration(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue); + // Display properties + nsresult GetVisibility(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue); + nsresult GetBehavior(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue); nsROCSSPrimitiveValue* GetROCSSPrimitiveValue(); @@ -500,16 +503,21 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAReadableString& aPropertyName, case eCSSProperty_outline_color: rv = GetOutlineColor(frame, *getter_AddRefs(val)); break; - // Text properties + // Text properties case eCSSProperty_text_align: rv = GetTextAlign(frame, *getter_AddRefs(val)); break; - case eCSSProperty_text_decoration: - rv = GetTextDecoration(frame, *getter_AddRefs(val)); break; - // List properties - case eCSSProperty_list_style_image: + case eCSSProperty_text_decoration: + rv = GetTextDecoration(frame, *getter_AddRefs(val)); break; + + // List properties + case eCSSProperty_list_style_image: rv = GetListStyleImage(frame, *getter_AddRefs(val)); break; + // Display properties + case eCSSProperty_visibility: + rv = GetVisibility(frame, *getter_AddRefs(val)); break; + // Z-Index property case eCSSProperty_z_index: rv = GetZIndex(frame, *getter_AddRefs(val)); break; @@ -1377,6 +1385,30 @@ nsComputedDOMStyle::GetTextDecoration(nsIFrame *aFrame, (void **)&aValue); } +nsresult +nsComputedDOMStyle::GetVisibility(nsIFrame *aFrame, + nsIDOMCSSPrimitiveValue*& aValue) +{ + nsROCSSPrimitiveValue* val=GetROCSSPrimitiveValue(); + NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY); + + const nsStyleVisibility* visibility=nsnull; + GetStyleData(eStyleStruct_Visibility,(const nsStyleStruct*&)visibility,aFrame); + + if(visibility) { + const nsCString& value= + nsCSSProps::SearchKeywordTable(visibility->mVisible, + nsCSSProps::kVisibilityKTable); + val->SetString(value); + } + else { + val->SetString(""); + } + + return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue), + (void **)&aValue); +} + #if 0 NS_IMETHODIMP nsComputedDOMStyle::GetCaptionSide(nsAWritableString& aCaptionSide) diff --git a/htmlparser/src/CNavDTD.cpp b/htmlparser/src/CNavDTD.cpp index e19d1353bcb..fa5ac45e7e6 100644 --- a/htmlparser/src/CNavDTD.cpp +++ b/htmlparser/src/CNavDTD.cpp @@ -3149,12 +3149,15 @@ nsresult CNavDTD::CloseBody(const nsIParserNode *aNode){ */ nsresult CNavDTD::OpenForm(const nsIParserNode *aNode){ static eHTMLTags gTableElements[]={eHTMLTag_table,eHTMLTag_tbody,eHTMLTag_tr, - eHTMLTag_td,eHTMLTag_th,eHTMLTag_col, - eHTMLTag_tfoot,eHTMLTag_thead,eHTMLTag_colgroup}; + eHTMLTag_tfoot,eHTMLTag_thead, + eHTMLTag_col,eHTMLTag_colgroup}; nsresult result=NS_OK; if(!(mFlags & NS_PARSER_FLAG_HAS_OPEN_FORM)) { // discard nested forms - bug 72639 - - if(!FindTagInSet(mBodyContext->Last(),gTableElements,sizeof(gTableElements)/sizeof(eHTMLTag_unknown))) { + + // Check if the parent is a table, tbody, thead, tfoot, tr, col or + // colgroup. If so, treat form as a leaf content. [ Ex. bug 92530 ] + if(!FindTagInSet(mBodyContext->Last(),gTableElements, + sizeof(gTableElements)/sizeof(eHTMLTag_unknown))) { mFlags |= NS_PARSER_FLAG_IS_FORM_CONTAINER; } @@ -3413,6 +3416,7 @@ CNavDTD::OpenContainer(const nsCParserNode *aNode,eHTMLTags aTag,PRBool aClosedB } break; + case eHTMLTag_iframe: // Bug 84491 case eHTMLTag_noframes: done=PR_FALSE; if(mFlags & NS_PARSER_FLAG_FRAMES_ENABLED) { @@ -3491,6 +3495,7 @@ CNavDTD::CloseContainer(const nsCParserNode *aNode,eHTMLTags aTarget,PRBool aClo result=CloseFrameset(aNode); break; + case eHTMLTag_iframe: case eHTMLTag_noscript: case eHTMLTag_noframes: // switch from alternate content state to regular state diff --git a/htmlparser/src/nsElementTable.cpp b/htmlparser/src/nsElementTable.cpp index 6f536b854cf..3798cdff883 100644 --- a/htmlparser/src/nsElementTable.cpp +++ b/htmlparser/src/nsElementTable.cpp @@ -492,7 +492,7 @@ void InitializeElementTable(void) { /*req-parent excl-parent*/ eHTMLTag_unknown,eHTMLTag_unknown, /*rootnodes,endrootnodes*/ &gRootTags, &gRootTags, /*autoclose starttags and endtags*/ &gDTCloseTags,0,0,0, - /*parent,incl,exclgroups*/ kDLChild, kFlowEntity-kHeading, kNone, + /*parent,incl,exclgroups*/ kDLChild|kInlineEntity, kFlowEntity-kHeading, kNone, // dt's parent group is inline - bug 65467 /*special props, prop-range*/ (kNoPropagate|kMustCloseSelf),kDefaultPropRange, /*special parents,kids,skip*/ &gInDL,0,eHTMLTag_unknown); @@ -883,7 +883,7 @@ void InitializeElementTable(void) { /*rootnodes,endrootnodes*/ &gRootTags,&gRootTags, /*autoclose starttags and endtags*/ 0,0,0,0, /*parent,incl,exclgroups*/ (kHeadMisc|kSpecial), (kFlowEntity|kInlineEntity|kSelf), kNone, - /*special props, prop-range*/ 0,kDefaultPropRange, + /*special props, prop-range*/ kNoStyleLeaksOut,kDefaultPropRange, /*special parents,kids,skip*/ 0,&gContainsParam,eHTMLTag_unknown); Initialize( @@ -1592,16 +1592,18 @@ PRBool nsHTMLElement::IsBlockCloser(eHTMLTags aTag){ gHTMLElements[aTag].IsBlockEntity() || (kHeading==gHTMLElements[aTag].mParentBits)); if(!result) { - // NOBR is a block closure - Ref. Bug# 24462 - // DIR is a block closure -- Ref. Bug# 25845 - // TD is a block closure - Ref. Bug# 27490 - // TR is a block closure - Ref. Bug# 26488 + // NOBR is a block closure - Ref. Bug# 24462 + // DIR is a block closure - Ref. Bug# 25845 + // TD is a block closure - Ref. Bug# 27490 + // TR is a block closure - Ref. Bug# 26488 + // OBJECT is a block closure - Ref. Bug# 88992 - static eHTMLTags gClosers[]={ eHTMLTag_table,eHTMLTag_tbody,eHTMLTag_caption, - //eHTMLTag_dd,eHTMLTag_dt, TESTING!!!! DONT SHIP THIS! WHY ARE THESE HERE? - eHTMLTag_td,eHTMLTag_th,eHTMLTag_tr, - /* eHTMLTag_tfoot, eHTMLTag_thead,*/ - eHTMLTag_nobr,eHTMLTag_optgroup,eHTMLTag_ol,eHTMLTag_ul,eHTMLTag_dir}; + static eHTMLTags gClosers[]={ eHTMLTag_table,eHTMLTag_tbody, + eHTMLTag_td,eHTMLTag_th, + eHTMLTag_tr,eHTMLTag_caption, + eHTMLTag_object,eHTMLTag_ol, + eHTMLTag_ul,eHTMLTag_optgroup, + eHTMLTag_nobr,eHTMLTag_dir}; result=FindTagInSet(aTag,gClosers,sizeof(gClosers)/sizeof(eHTMLTag_body)); } @@ -2065,7 +2067,7 @@ PRBool nsHTMLElement::CanAutoCloseTag(nsDTDContext& aContext,eHTMLTags aChildTag * * @update gess 10.17.2000 * @param - * @return + * @return */ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex) const{ eHTMLTags result=eHTMLTag_unknown; diff --git a/htmlparser/src/nsHTMLTokenizer.cpp b/htmlparser/src/nsHTMLTokenizer.cpp index 1ce4fd18b99..fb7ca79d8e1 100644 --- a/htmlparser/src/nsHTMLTokenizer.cpp +++ b/htmlparser/src/nsHTMLTokenizer.cpp @@ -743,7 +743,12 @@ nsresult nsHTMLTokenizer::ConsumeStartTag(PRUnichar aChar,CToken*& aToken,nsScan //XXX - Find a better soution to record content //Added _plaintext to fix bug 46054. - if((eHTMLTag_textarea==theTag || eHTMLTag_xmp==theTag || eHTMLTag_plaintext==theTag || eHTMLTag_noscript==theTag) && !mRecordTrailingContent) { + if((theTag == eHTMLTag_textarea || + theTag == eHTMLTag_xmp || + theTag == eHTMLTag_plaintext || + theTag == eHTMLTag_noscript || + theTag == eHTMLTag_noframes) && + !mRecordTrailingContent) { mRecordTrailingContent=PR_TRUE; } @@ -813,10 +818,12 @@ nsresult nsHTMLTokenizer::ConsumeEndTag(PRUnichar aChar,CToken*& aToken,nsScanne if(NS_SUCCEEDED(result)) { eHTMLTags theTag=(eHTMLTags)aToken->GetTypeID(); - if(((theTag==eHTMLTag_textarea) || - (theTag==eHTMLTag_xmp) || - (theTag==eHTMLTag_plaintext) || - (theTag==eHTMLTag_noscript)) && mRecordTrailingContent) { + if((theTag == eHTMLTag_textarea || + theTag == eHTMLTag_xmp || + theTag == eHTMLTag_plaintext || + theTag == eHTMLTag_noscript || + theTag == eHTMLTag_noframes) && + mRecordTrailingContent) { mRecordTrailingContent=PR_FALSE; } } diff --git a/layout/style/nsComputedDOMStyle.cpp b/layout/style/nsComputedDOMStyle.cpp index 72fe5491182..aec9e2de1ae 100644 --- a/layout/style/nsComputedDOMStyle.cpp +++ b/layout/style/nsComputedDOMStyle.cpp @@ -176,6 +176,9 @@ private: nsresult GetTextAlign(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue); nsresult GetTextDecoration(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue); + // Display properties + nsresult GetVisibility(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue); + nsresult GetBehavior(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue); nsROCSSPrimitiveValue* GetROCSSPrimitiveValue(); @@ -500,16 +503,21 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAReadableString& aPropertyName, case eCSSProperty_outline_color: rv = GetOutlineColor(frame, *getter_AddRefs(val)); break; - // Text properties + // Text properties case eCSSProperty_text_align: rv = GetTextAlign(frame, *getter_AddRefs(val)); break; - case eCSSProperty_text_decoration: - rv = GetTextDecoration(frame, *getter_AddRefs(val)); break; - // List properties - case eCSSProperty_list_style_image: + case eCSSProperty_text_decoration: + rv = GetTextDecoration(frame, *getter_AddRefs(val)); break; + + // List properties + case eCSSProperty_list_style_image: rv = GetListStyleImage(frame, *getter_AddRefs(val)); break; + // Display properties + case eCSSProperty_visibility: + rv = GetVisibility(frame, *getter_AddRefs(val)); break; + // Z-Index property case eCSSProperty_z_index: rv = GetZIndex(frame, *getter_AddRefs(val)); break; @@ -1377,6 +1385,30 @@ nsComputedDOMStyle::GetTextDecoration(nsIFrame *aFrame, (void **)&aValue); } +nsresult +nsComputedDOMStyle::GetVisibility(nsIFrame *aFrame, + nsIDOMCSSPrimitiveValue*& aValue) +{ + nsROCSSPrimitiveValue* val=GetROCSSPrimitiveValue(); + NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY); + + const nsStyleVisibility* visibility=nsnull; + GetStyleData(eStyleStruct_Visibility,(const nsStyleStruct*&)visibility,aFrame); + + if(visibility) { + const nsCString& value= + nsCSSProps::SearchKeywordTable(visibility->mVisible, + nsCSSProps::kVisibilityKTable); + val->SetString(value); + } + else { + val->SetString(""); + } + + return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue), + (void **)&aValue); +} + #if 0 NS_IMETHODIMP nsComputedDOMStyle::GetCaptionSide(nsAWritableString& aCaptionSide) diff --git a/parser/htmlparser/src/CNavDTD.cpp b/parser/htmlparser/src/CNavDTD.cpp index e19d1353bcb..fa5ac45e7e6 100644 --- a/parser/htmlparser/src/CNavDTD.cpp +++ b/parser/htmlparser/src/CNavDTD.cpp @@ -3149,12 +3149,15 @@ nsresult CNavDTD::CloseBody(const nsIParserNode *aNode){ */ nsresult CNavDTD::OpenForm(const nsIParserNode *aNode){ static eHTMLTags gTableElements[]={eHTMLTag_table,eHTMLTag_tbody,eHTMLTag_tr, - eHTMLTag_td,eHTMLTag_th,eHTMLTag_col, - eHTMLTag_tfoot,eHTMLTag_thead,eHTMLTag_colgroup}; + eHTMLTag_tfoot,eHTMLTag_thead, + eHTMLTag_col,eHTMLTag_colgroup}; nsresult result=NS_OK; if(!(mFlags & NS_PARSER_FLAG_HAS_OPEN_FORM)) { // discard nested forms - bug 72639 - - if(!FindTagInSet(mBodyContext->Last(),gTableElements,sizeof(gTableElements)/sizeof(eHTMLTag_unknown))) { + + // Check if the parent is a table, tbody, thead, tfoot, tr, col or + // colgroup. If so, treat form as a leaf content. [ Ex. bug 92530 ] + if(!FindTagInSet(mBodyContext->Last(),gTableElements, + sizeof(gTableElements)/sizeof(eHTMLTag_unknown))) { mFlags |= NS_PARSER_FLAG_IS_FORM_CONTAINER; } @@ -3413,6 +3416,7 @@ CNavDTD::OpenContainer(const nsCParserNode *aNode,eHTMLTags aTag,PRBool aClosedB } break; + case eHTMLTag_iframe: // Bug 84491 case eHTMLTag_noframes: done=PR_FALSE; if(mFlags & NS_PARSER_FLAG_FRAMES_ENABLED) { @@ -3491,6 +3495,7 @@ CNavDTD::CloseContainer(const nsCParserNode *aNode,eHTMLTags aTarget,PRBool aClo result=CloseFrameset(aNode); break; + case eHTMLTag_iframe: case eHTMLTag_noscript: case eHTMLTag_noframes: // switch from alternate content state to regular state diff --git a/parser/htmlparser/src/nsElementTable.cpp b/parser/htmlparser/src/nsElementTable.cpp index 6f536b854cf..3798cdff883 100644 --- a/parser/htmlparser/src/nsElementTable.cpp +++ b/parser/htmlparser/src/nsElementTable.cpp @@ -492,7 +492,7 @@ void InitializeElementTable(void) { /*req-parent excl-parent*/ eHTMLTag_unknown,eHTMLTag_unknown, /*rootnodes,endrootnodes*/ &gRootTags, &gRootTags, /*autoclose starttags and endtags*/ &gDTCloseTags,0,0,0, - /*parent,incl,exclgroups*/ kDLChild, kFlowEntity-kHeading, kNone, + /*parent,incl,exclgroups*/ kDLChild|kInlineEntity, kFlowEntity-kHeading, kNone, // dt's parent group is inline - bug 65467 /*special props, prop-range*/ (kNoPropagate|kMustCloseSelf),kDefaultPropRange, /*special parents,kids,skip*/ &gInDL,0,eHTMLTag_unknown); @@ -883,7 +883,7 @@ void InitializeElementTable(void) { /*rootnodes,endrootnodes*/ &gRootTags,&gRootTags, /*autoclose starttags and endtags*/ 0,0,0,0, /*parent,incl,exclgroups*/ (kHeadMisc|kSpecial), (kFlowEntity|kInlineEntity|kSelf), kNone, - /*special props, prop-range*/ 0,kDefaultPropRange, + /*special props, prop-range*/ kNoStyleLeaksOut,kDefaultPropRange, /*special parents,kids,skip*/ 0,&gContainsParam,eHTMLTag_unknown); Initialize( @@ -1592,16 +1592,18 @@ PRBool nsHTMLElement::IsBlockCloser(eHTMLTags aTag){ gHTMLElements[aTag].IsBlockEntity() || (kHeading==gHTMLElements[aTag].mParentBits)); if(!result) { - // NOBR is a block closure - Ref. Bug# 24462 - // DIR is a block closure -- Ref. Bug# 25845 - // TD is a block closure - Ref. Bug# 27490 - // TR is a block closure - Ref. Bug# 26488 + // NOBR is a block closure - Ref. Bug# 24462 + // DIR is a block closure - Ref. Bug# 25845 + // TD is a block closure - Ref. Bug# 27490 + // TR is a block closure - Ref. Bug# 26488 + // OBJECT is a block closure - Ref. Bug# 88992 - static eHTMLTags gClosers[]={ eHTMLTag_table,eHTMLTag_tbody,eHTMLTag_caption, - //eHTMLTag_dd,eHTMLTag_dt, TESTING!!!! DONT SHIP THIS! WHY ARE THESE HERE? - eHTMLTag_td,eHTMLTag_th,eHTMLTag_tr, - /* eHTMLTag_tfoot, eHTMLTag_thead,*/ - eHTMLTag_nobr,eHTMLTag_optgroup,eHTMLTag_ol,eHTMLTag_ul,eHTMLTag_dir}; + static eHTMLTags gClosers[]={ eHTMLTag_table,eHTMLTag_tbody, + eHTMLTag_td,eHTMLTag_th, + eHTMLTag_tr,eHTMLTag_caption, + eHTMLTag_object,eHTMLTag_ol, + eHTMLTag_ul,eHTMLTag_optgroup, + eHTMLTag_nobr,eHTMLTag_dir}; result=FindTagInSet(aTag,gClosers,sizeof(gClosers)/sizeof(eHTMLTag_body)); } @@ -2065,7 +2067,7 @@ PRBool nsHTMLElement::CanAutoCloseTag(nsDTDContext& aContext,eHTMLTags aChildTag * * @update gess 10.17.2000 * @param - * @return + * @return */ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex) const{ eHTMLTags result=eHTMLTag_unknown; diff --git a/parser/htmlparser/src/nsHTMLTokenizer.cpp b/parser/htmlparser/src/nsHTMLTokenizer.cpp index 1ce4fd18b99..fb7ca79d8e1 100644 --- a/parser/htmlparser/src/nsHTMLTokenizer.cpp +++ b/parser/htmlparser/src/nsHTMLTokenizer.cpp @@ -743,7 +743,12 @@ nsresult nsHTMLTokenizer::ConsumeStartTag(PRUnichar aChar,CToken*& aToken,nsScan //XXX - Find a better soution to record content //Added _plaintext to fix bug 46054. - if((eHTMLTag_textarea==theTag || eHTMLTag_xmp==theTag || eHTMLTag_plaintext==theTag || eHTMLTag_noscript==theTag) && !mRecordTrailingContent) { + if((theTag == eHTMLTag_textarea || + theTag == eHTMLTag_xmp || + theTag == eHTMLTag_plaintext || + theTag == eHTMLTag_noscript || + theTag == eHTMLTag_noframes) && + !mRecordTrailingContent) { mRecordTrailingContent=PR_TRUE; } @@ -813,10 +818,12 @@ nsresult nsHTMLTokenizer::ConsumeEndTag(PRUnichar aChar,CToken*& aToken,nsScanne if(NS_SUCCEEDED(result)) { eHTMLTags theTag=(eHTMLTags)aToken->GetTypeID(); - if(((theTag==eHTMLTag_textarea) || - (theTag==eHTMLTag_xmp) || - (theTag==eHTMLTag_plaintext) || - (theTag==eHTMLTag_noscript)) && mRecordTrailingContent) { + if((theTag == eHTMLTag_textarea || + theTag == eHTMLTag_xmp || + theTag == eHTMLTag_plaintext || + theTag == eHTMLTag_noscript || + theTag == eHTMLTag_noframes) && + mRecordTrailingContent) { mRecordTrailingContent=PR_FALSE; } }