зеркало из https://github.com/mozilla/pjs.git
P should not be allowed to contain TABLE in standards mode. Patch by Mats Palmgren <mats.palmgren@bredband.net>. r=harishd sr=dbaron b=91927
This commit is contained in:
Родитель
c8439cda76
Коммит
754be58a6f
|
@ -913,7 +913,7 @@ nsresult CNavDTD::HandleToken(CToken* aToken,nsIParser* aParser){
|
|||
eHTMLTags theParentTag=mBodyContext->Last();
|
||||
theTag=(eHTMLTags)theToken->GetTypeID();
|
||||
if((FindTagInSet(theTag,gLegalElements,sizeof(gLegalElements)/sizeof(theTag))) ||
|
||||
(gHTMLElements[theParentTag].CanContain(theTag)) && (theTag!=eHTMLTag_comment)) { // Added comment -> bug 40855
|
||||
(gHTMLElements[theParentTag].CanContain(theTag,mDTDMode)) && (theTag!=eHTMLTag_comment)) { // Added comment -> bug 40855
|
||||
|
||||
mFlags &= ~NS_DTD_FLAG_MISPLACED_CONTENT; // reset the state since all the misplaced tokens are about to get handled.
|
||||
|
||||
|
@ -1890,7 +1890,7 @@ PRBool HasCloseablePeerAboveRoot(const TagList& aRootTagList,nsDTDContext& aCont
|
|||
* @return PR_TRUE if autoclosure should occur
|
||||
*/
|
||||
static
|
||||
eHTMLTags FindAutoCloseTargetForEndTag(eHTMLTags aCurrentTag,nsDTDContext& aContext) {
|
||||
eHTMLTags FindAutoCloseTargetForEndTag(eHTMLTags aCurrentTag,nsDTDContext& aContext,nsDTDMode aMode) {
|
||||
int theTopIndex=aContext.GetCount();
|
||||
eHTMLTags thePrevTag=aContext.Last();
|
||||
|
||||
|
@ -1949,7 +1949,7 @@ eHTMLTags FindAutoCloseTargetForEndTag(eHTMLTags aCurrentTag,nsDTDContext& aCont
|
|||
else{
|
||||
//Ok, a much more sensible approach for non-block closers; use the tag group to determine closure:
|
||||
//For example: %phrasal closes %phrasal, %fontstyle and %special
|
||||
return gHTMLElements[aCurrentTag].GetCloseTargetForEndTag(aContext,theChildIndex);
|
||||
return gHTMLElements[aCurrentTag].GetCloseTargetForEndTag(aContext,theChildIndex,aMode);
|
||||
}
|
||||
}//if
|
||||
} //if
|
||||
|
@ -2086,7 +2086,7 @@ nsresult CNavDTD::HandleEndToken(CToken* aToken) {
|
|||
return result;
|
||||
}
|
||||
if(result==NS_OK) {
|
||||
eHTMLTags theTarget=FindAutoCloseTargetForEndTag(theChildTag,*mBodyContext);
|
||||
eHTMLTags theTarget=FindAutoCloseTargetForEndTag(theChildTag,*mBodyContext,mDTDMode);
|
||||
if(eHTMLTag_unknown!=theTarget) {
|
||||
if (nsHTMLElement::IsResidualStyleTag(theChildTag)) {
|
||||
result=OpenTransientStyles(theChildTag);
|
||||
|
@ -2533,7 +2533,7 @@ CNavDTD::CollectSkippedContent(PRInt32 aTag, nsAString& aContent, PRInt32 &aLine
|
|||
*/
|
||||
PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const
|
||||
{
|
||||
PRBool result=gHTMLElements[aParent].CanContain((eHTMLTags)aChild);
|
||||
PRBool result=gHTMLElements[aParent].CanContain((eHTMLTags)aChild,mDTDMode);
|
||||
|
||||
#ifdef ALLOW_TR_AS_CHILD_OF_TABLE
|
||||
if(!result) {
|
||||
|
@ -2741,7 +2741,7 @@ PRBool CNavDTD::CanOmit(eHTMLTags aParent,eHTMLTags aChild,PRBool& aParentContai
|
|||
|
||||
if(-1==aParentContains) {
|
||||
//we need to compute parent containment here, since it wasn't given...
|
||||
if(!gHTMLElements[aParent].CanContain(aChild)){
|
||||
if(!gHTMLElements[aParent].CanContain(aChild,mDTDMode)){
|
||||
return PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -2958,7 +2958,7 @@ nsresult CNavDTD::OpenTransientStyles(eHTMLTags aChildTag){
|
|||
nsCParserNode* theNode=(nsCParserNode*)theEntry->mNode;
|
||||
if(1==theNode->mUseCount) {
|
||||
eHTMLTags theNodeTag=(eHTMLTags)theNode->GetNodeType();
|
||||
if(gHTMLElements[theNodeTag].CanContain(aChildTag)) {
|
||||
if(gHTMLElements[theNodeTag].CanContain(aChildTag,mDTDMode)) {
|
||||
theEntry->mParent = theStack; //we do this too, because this entry differs from the new one we're pushing...
|
||||
if(gHTMLElements[mBodyContext->Last()].IsMemberOf(kHeading)) {
|
||||
// Bug 77352
|
||||
|
|
|
@ -70,7 +70,8 @@ DECL_TAG_LIST(gInDL,{eHTMLTag_dl COMMA eHTMLTag_body})
|
|||
DECL_TAG_LIST(gInFrameset,{eHTMLTag_frameset})
|
||||
DECL_TAG_LIST(gInNoframes,{eHTMLTag_noframes})
|
||||
//Removed ADDRESS to solve 24885
|
||||
DECL_TAG_LIST(gInP,{eHTMLTag_span COMMA eHTMLTag_table}) // added table for bug 43678, removed FORM bug 94269
|
||||
// gInP: nsHTMLElement::CanContain() also allows table in Quirks mode for bug 43678, removed FORM bug 94269
|
||||
DECL_TAG_LIST(gInP,{eHTMLTag_span})
|
||||
DECL_TAG_LIST(gOptgroupParents,{eHTMLTag_select COMMA eHTMLTag_optgroup})
|
||||
DECL_TAG_LIST(gBodyParents,{eHTMLTag_html COMMA eHTMLTag_noframes})
|
||||
DECL_TAG_LIST(gColParents,{eHTMLTag_table COMMA eHTMLTag_colgroup})
|
||||
|
@ -1729,10 +1730,10 @@ PRBool nsHTMLElement::IsSectionTag(eHTMLTags aTag){
|
|||
* @param
|
||||
* @return
|
||||
*/
|
||||
PRBool nsHTMLElement::CanContain(eHTMLTags aParent,eHTMLTags aChild){
|
||||
PRBool nsHTMLElement::CanContain(eHTMLTags aParent,eHTMLTags aChild,nsDTDMode aMode){
|
||||
PRBool result=PR_FALSE;
|
||||
if((aParent>=eHTMLTag_unknown) & (aParent<=eHTMLTag_userdefined)){
|
||||
result=gHTMLElements[aParent].CanContain(aChild);
|
||||
result=gHTMLElements[aParent].CanContain(aChild,aMode);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -2071,7 +2072,7 @@ PRBool nsHTMLElement::CanAutoCloseTag(nsDTDContext& aContext,eHTMLTags aChildTag
|
|||
* @param
|
||||
* @return
|
||||
*/
|
||||
eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex) const{
|
||||
eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex,nsDTDMode aMode) const{
|
||||
eHTMLTags result=eHTMLTag_unknown;
|
||||
|
||||
int theCount=aContext.GetCount();
|
||||
|
@ -2143,7 +2144,7 @@ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32
|
|||
while((--theIndex>=anIndex) && (eHTMLTag_unknown==result)){
|
||||
eHTMLTags theTag=aContext.TagAt(theIndex);
|
||||
if(theTag!=mTagID) {
|
||||
if(!CanContain(theTag)) {
|
||||
if(!CanContain(theTag,aMode)) {
|
||||
break; //it's not something I can close
|
||||
}
|
||||
}
|
||||
|
@ -2159,7 +2160,7 @@ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32
|
|||
while((--theIndex>=anIndex) && (eHTMLTag_unknown==result)){
|
||||
eHTMLTags theTag=aContext.TagAt(theIndex);
|
||||
if(theTag!=mTagID) {
|
||||
if(!CanContain(theTag)) {
|
||||
if(!CanContain(theTag,aMode)) {
|
||||
break; //it's not something I can close
|
||||
}
|
||||
}
|
||||
|
@ -2184,7 +2185,7 @@ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32
|
|||
if(theTag == mTagID) {
|
||||
return theTag; // we found our target.
|
||||
}
|
||||
else if (!CanContain(theTag) ||
|
||||
else if (!CanContain(theTag,aMode) ||
|
||||
(theRootTags && FindTagInSet(theTag,theRootTags->mTags,theRootTags->mCount))) {
|
||||
// If you cannot contain this tag then
|
||||
// you cannot close it either. It looks like
|
||||
|
@ -2229,7 +2230,7 @@ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32
|
|||
* @param
|
||||
* @return
|
||||
*/
|
||||
PRBool nsHTMLElement::CanContain(eHTMLTags aChild) const{
|
||||
PRBool nsHTMLElement::CanContain(eHTMLTags aChild,nsDTDMode aMode) const{
|
||||
|
||||
|
||||
if(IsContainer(mTagID)){
|
||||
|
@ -2292,6 +2293,10 @@ PRBool nsHTMLElement::CanContain(eHTMLTags aChild) const{
|
|||
}
|
||||
}
|
||||
|
||||
// Allow <p> to contain <table> only in Quirks mode, bug 43678 and bug 91927
|
||||
if (aChild == eHTMLTag_table && mTagID == eHTMLTag_p && aMode == eDTDMode_quirks) {
|
||||
return PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return PR_FALSE;
|
||||
|
|
|
@ -200,7 +200,7 @@ struct nsHTMLElement {
|
|||
const TagList* GetEndRootTags(void) const {return mEndRootNodes;}
|
||||
const TagList* GetAutoCloseStartTags(void) const {return mAutocloseStart;}
|
||||
const TagList* GetAutoCloseEndTags(void) const {return mAutocloseEnd;}
|
||||
eHTMLTags GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex) const;
|
||||
eHTMLTags GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex,nsDTDMode aMode) const;
|
||||
|
||||
const TagList* GetSpecialChildren(void) const {return mSpecialKids;}
|
||||
const TagList* GetSpecialParents(void) const {return mSpecialParents;}
|
||||
|
@ -210,7 +210,7 @@ struct nsHTMLElement {
|
|||
PRBool CanContainType(PRInt32 aType) const;
|
||||
|
||||
eHTMLTags GetTag(void) const {return mTagID;}
|
||||
PRBool CanContain(eHTMLTags aChild) const;
|
||||
PRBool CanContain(eHTMLTags aChild,nsDTDMode aMode) const;
|
||||
PRBool CanExclude(eHTMLTags aChild) const;
|
||||
PRBool CanOmitStartTag(eHTMLTags aChild) const;
|
||||
PRBool CanOmitEndTag(void) const;
|
||||
|
@ -224,7 +224,7 @@ struct nsHTMLElement {
|
|||
|
||||
PRBool CanBeContained(eHTMLTags aParentTag,nsDTDContext &aContext); //default version
|
||||
|
||||
static PRBool CanContain(eHTMLTags aParent,eHTMLTags aChild);
|
||||
static PRBool CanContain(eHTMLTags aParent,eHTMLTags aChild,nsDTDMode aMode);
|
||||
static PRBool IsContainer(eHTMLTags aTag) ;
|
||||
static PRBool IsResidualStyleTag(eHTMLTags aTag) ;
|
||||
static PRBool IsTextTag(eHTMLTags aTag);
|
||||
|
|
|
@ -913,7 +913,7 @@ nsresult CNavDTD::HandleToken(CToken* aToken,nsIParser* aParser){
|
|||
eHTMLTags theParentTag=mBodyContext->Last();
|
||||
theTag=(eHTMLTags)theToken->GetTypeID();
|
||||
if((FindTagInSet(theTag,gLegalElements,sizeof(gLegalElements)/sizeof(theTag))) ||
|
||||
(gHTMLElements[theParentTag].CanContain(theTag)) && (theTag!=eHTMLTag_comment)) { // Added comment -> bug 40855
|
||||
(gHTMLElements[theParentTag].CanContain(theTag,mDTDMode)) && (theTag!=eHTMLTag_comment)) { // Added comment -> bug 40855
|
||||
|
||||
mFlags &= ~NS_DTD_FLAG_MISPLACED_CONTENT; // reset the state since all the misplaced tokens are about to get handled.
|
||||
|
||||
|
@ -1890,7 +1890,7 @@ PRBool HasCloseablePeerAboveRoot(const TagList& aRootTagList,nsDTDContext& aCont
|
|||
* @return PR_TRUE if autoclosure should occur
|
||||
*/
|
||||
static
|
||||
eHTMLTags FindAutoCloseTargetForEndTag(eHTMLTags aCurrentTag,nsDTDContext& aContext) {
|
||||
eHTMLTags FindAutoCloseTargetForEndTag(eHTMLTags aCurrentTag,nsDTDContext& aContext,nsDTDMode aMode) {
|
||||
int theTopIndex=aContext.GetCount();
|
||||
eHTMLTags thePrevTag=aContext.Last();
|
||||
|
||||
|
@ -1949,7 +1949,7 @@ eHTMLTags FindAutoCloseTargetForEndTag(eHTMLTags aCurrentTag,nsDTDContext& aCont
|
|||
else{
|
||||
//Ok, a much more sensible approach for non-block closers; use the tag group to determine closure:
|
||||
//For example: %phrasal closes %phrasal, %fontstyle and %special
|
||||
return gHTMLElements[aCurrentTag].GetCloseTargetForEndTag(aContext,theChildIndex);
|
||||
return gHTMLElements[aCurrentTag].GetCloseTargetForEndTag(aContext,theChildIndex,aMode);
|
||||
}
|
||||
}//if
|
||||
} //if
|
||||
|
@ -2086,7 +2086,7 @@ nsresult CNavDTD::HandleEndToken(CToken* aToken) {
|
|||
return result;
|
||||
}
|
||||
if(result==NS_OK) {
|
||||
eHTMLTags theTarget=FindAutoCloseTargetForEndTag(theChildTag,*mBodyContext);
|
||||
eHTMLTags theTarget=FindAutoCloseTargetForEndTag(theChildTag,*mBodyContext,mDTDMode);
|
||||
if(eHTMLTag_unknown!=theTarget) {
|
||||
if (nsHTMLElement::IsResidualStyleTag(theChildTag)) {
|
||||
result=OpenTransientStyles(theChildTag);
|
||||
|
@ -2533,7 +2533,7 @@ CNavDTD::CollectSkippedContent(PRInt32 aTag, nsAString& aContent, PRInt32 &aLine
|
|||
*/
|
||||
PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) const
|
||||
{
|
||||
PRBool result=gHTMLElements[aParent].CanContain((eHTMLTags)aChild);
|
||||
PRBool result=gHTMLElements[aParent].CanContain((eHTMLTags)aChild,mDTDMode);
|
||||
|
||||
#ifdef ALLOW_TR_AS_CHILD_OF_TABLE
|
||||
if(!result) {
|
||||
|
@ -2741,7 +2741,7 @@ PRBool CNavDTD::CanOmit(eHTMLTags aParent,eHTMLTags aChild,PRBool& aParentContai
|
|||
|
||||
if(-1==aParentContains) {
|
||||
//we need to compute parent containment here, since it wasn't given...
|
||||
if(!gHTMLElements[aParent].CanContain(aChild)){
|
||||
if(!gHTMLElements[aParent].CanContain(aChild,mDTDMode)){
|
||||
return PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -2958,7 +2958,7 @@ nsresult CNavDTD::OpenTransientStyles(eHTMLTags aChildTag){
|
|||
nsCParserNode* theNode=(nsCParserNode*)theEntry->mNode;
|
||||
if(1==theNode->mUseCount) {
|
||||
eHTMLTags theNodeTag=(eHTMLTags)theNode->GetNodeType();
|
||||
if(gHTMLElements[theNodeTag].CanContain(aChildTag)) {
|
||||
if(gHTMLElements[theNodeTag].CanContain(aChildTag,mDTDMode)) {
|
||||
theEntry->mParent = theStack; //we do this too, because this entry differs from the new one we're pushing...
|
||||
if(gHTMLElements[mBodyContext->Last()].IsMemberOf(kHeading)) {
|
||||
// Bug 77352
|
||||
|
|
|
@ -70,7 +70,8 @@ DECL_TAG_LIST(gInDL,{eHTMLTag_dl COMMA eHTMLTag_body})
|
|||
DECL_TAG_LIST(gInFrameset,{eHTMLTag_frameset})
|
||||
DECL_TAG_LIST(gInNoframes,{eHTMLTag_noframes})
|
||||
//Removed ADDRESS to solve 24885
|
||||
DECL_TAG_LIST(gInP,{eHTMLTag_span COMMA eHTMLTag_table}) // added table for bug 43678, removed FORM bug 94269
|
||||
// gInP: nsHTMLElement::CanContain() also allows table in Quirks mode for bug 43678, removed FORM bug 94269
|
||||
DECL_TAG_LIST(gInP,{eHTMLTag_span})
|
||||
DECL_TAG_LIST(gOptgroupParents,{eHTMLTag_select COMMA eHTMLTag_optgroup})
|
||||
DECL_TAG_LIST(gBodyParents,{eHTMLTag_html COMMA eHTMLTag_noframes})
|
||||
DECL_TAG_LIST(gColParents,{eHTMLTag_table COMMA eHTMLTag_colgroup})
|
||||
|
@ -1729,10 +1730,10 @@ PRBool nsHTMLElement::IsSectionTag(eHTMLTags aTag){
|
|||
* @param
|
||||
* @return
|
||||
*/
|
||||
PRBool nsHTMLElement::CanContain(eHTMLTags aParent,eHTMLTags aChild){
|
||||
PRBool nsHTMLElement::CanContain(eHTMLTags aParent,eHTMLTags aChild,nsDTDMode aMode){
|
||||
PRBool result=PR_FALSE;
|
||||
if((aParent>=eHTMLTag_unknown) & (aParent<=eHTMLTag_userdefined)){
|
||||
result=gHTMLElements[aParent].CanContain(aChild);
|
||||
result=gHTMLElements[aParent].CanContain(aChild,aMode);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -2071,7 +2072,7 @@ PRBool nsHTMLElement::CanAutoCloseTag(nsDTDContext& aContext,eHTMLTags aChildTag
|
|||
* @param
|
||||
* @return
|
||||
*/
|
||||
eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex) const{
|
||||
eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex,nsDTDMode aMode) const{
|
||||
eHTMLTags result=eHTMLTag_unknown;
|
||||
|
||||
int theCount=aContext.GetCount();
|
||||
|
@ -2143,7 +2144,7 @@ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32
|
|||
while((--theIndex>=anIndex) && (eHTMLTag_unknown==result)){
|
||||
eHTMLTags theTag=aContext.TagAt(theIndex);
|
||||
if(theTag!=mTagID) {
|
||||
if(!CanContain(theTag)) {
|
||||
if(!CanContain(theTag,aMode)) {
|
||||
break; //it's not something I can close
|
||||
}
|
||||
}
|
||||
|
@ -2159,7 +2160,7 @@ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32
|
|||
while((--theIndex>=anIndex) && (eHTMLTag_unknown==result)){
|
||||
eHTMLTags theTag=aContext.TagAt(theIndex);
|
||||
if(theTag!=mTagID) {
|
||||
if(!CanContain(theTag)) {
|
||||
if(!CanContain(theTag,aMode)) {
|
||||
break; //it's not something I can close
|
||||
}
|
||||
}
|
||||
|
@ -2184,7 +2185,7 @@ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32
|
|||
if(theTag == mTagID) {
|
||||
return theTag; // we found our target.
|
||||
}
|
||||
else if (!CanContain(theTag) ||
|
||||
else if (!CanContain(theTag,aMode) ||
|
||||
(theRootTags && FindTagInSet(theTag,theRootTags->mTags,theRootTags->mCount))) {
|
||||
// If you cannot contain this tag then
|
||||
// you cannot close it either. It looks like
|
||||
|
@ -2229,7 +2230,7 @@ eHTMLTags nsHTMLElement::GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32
|
|||
* @param
|
||||
* @return
|
||||
*/
|
||||
PRBool nsHTMLElement::CanContain(eHTMLTags aChild) const{
|
||||
PRBool nsHTMLElement::CanContain(eHTMLTags aChild,nsDTDMode aMode) const{
|
||||
|
||||
|
||||
if(IsContainer(mTagID)){
|
||||
|
@ -2292,6 +2293,10 @@ PRBool nsHTMLElement::CanContain(eHTMLTags aChild) const{
|
|||
}
|
||||
}
|
||||
|
||||
// Allow <p> to contain <table> only in Quirks mode, bug 43678 and bug 91927
|
||||
if (aChild == eHTMLTag_table && mTagID == eHTMLTag_p && aMode == eDTDMode_quirks) {
|
||||
return PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return PR_FALSE;
|
||||
|
|
|
@ -200,7 +200,7 @@ struct nsHTMLElement {
|
|||
const TagList* GetEndRootTags(void) const {return mEndRootNodes;}
|
||||
const TagList* GetAutoCloseStartTags(void) const {return mAutocloseStart;}
|
||||
const TagList* GetAutoCloseEndTags(void) const {return mAutocloseEnd;}
|
||||
eHTMLTags GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex) const;
|
||||
eHTMLTags GetCloseTargetForEndTag(nsDTDContext& aContext,PRInt32 anIndex,nsDTDMode aMode) const;
|
||||
|
||||
const TagList* GetSpecialChildren(void) const {return mSpecialKids;}
|
||||
const TagList* GetSpecialParents(void) const {return mSpecialParents;}
|
||||
|
@ -210,7 +210,7 @@ struct nsHTMLElement {
|
|||
PRBool CanContainType(PRInt32 aType) const;
|
||||
|
||||
eHTMLTags GetTag(void) const {return mTagID;}
|
||||
PRBool CanContain(eHTMLTags aChild) const;
|
||||
PRBool CanContain(eHTMLTags aChild,nsDTDMode aMode) const;
|
||||
PRBool CanExclude(eHTMLTags aChild) const;
|
||||
PRBool CanOmitStartTag(eHTMLTags aChild) const;
|
||||
PRBool CanOmitEndTag(void) const;
|
||||
|
@ -224,7 +224,7 @@ struct nsHTMLElement {
|
|||
|
||||
PRBool CanBeContained(eHTMLTags aParentTag,nsDTDContext &aContext); //default version
|
||||
|
||||
static PRBool CanContain(eHTMLTags aParent,eHTMLTags aChild);
|
||||
static PRBool CanContain(eHTMLTags aParent,eHTMLTags aChild,nsDTDMode aMode);
|
||||
static PRBool IsContainer(eHTMLTags aTag) ;
|
||||
static PRBool IsResidualStyleTag(eHTMLTags aTag) ;
|
||||
static PRBool IsTextTag(eHTMLTags aTag);
|
||||
|
|
Загрузка…
Ссылка в новой задаче