Make forward-compatible the DOCTYPE handling for determining whether to be in quirks mode or strict mode: properly parse the DOCTYPE declaration and use a list of known public identifiers that should trigger quirks. Remove some remnants of modes that no longer exist. b=55264 r=harishd sr=vidur

This commit is contained in:
dbaron%fas.harvard.edu 2001-09-08 18:37:19 +00:00
parent ce012c5510
commit 390e04a7df
24 changed files with 826 additions and 1328 deletions

View File

@ -52,7 +52,6 @@ enum eAutoDetectResult {
enum nsDTDMode {
eDTDMode_unknown=0,
eDTDMode_quirks, //pre 4.0 versions
eDTDMode_transitional,
eDTDMode_strict,
eDTDMode_autodetect
};

View File

@ -73,10 +73,10 @@ enum eCRCQuality {
enum eParserDocType {
ePlainText = 0,
eXMLText,
eXHTMLText,
eHTML3Text,
eHTML4Text
eXML,
eHTML_Quirks,
eHTML3_Quirks, // separate, for editor output, since HTML pre-4.0 lacks tbody
eHTML_Strict
};
@ -385,15 +385,12 @@ const PRUnichar kNullCh = '\0';
#define NS_IPARSER_FLAG_UNKNOWN_MODE 0x00000000
#define NS_IPARSER_FLAG_QUIRKS_MODE 0x00000002
#define NS_IPARSER_FLAG_STRICT_MODE 0x00000004
#define NS_IPARSER_FLAG_TRANSITIONAL_MODE 0x00000008
#define NS_IPARSER_FLAG_AUTO_DETECT_MODE 0x00000010
#define NS_IPARSER_FLAG_VIEW_NORMAL 0x00000020
#define NS_IPARSER_FLAG_VIEW_SOURCE 0x00000040
#define NS_IPARSER_FLAG_VIEW_ERRORS 0x00000080
#define NS_IPARSER_FLAG_PLAIN_TEXT 0x00000100
#define NS_IPARSER_FLAG_XML_TEXT 0x00000200
#define NS_IPARSER_FLAG_XHTML_TEXT 0x00000400
#define NS_IPARSER_FLAG_HTML3_TEXT 0x00000800
#define NS_IPARSER_FLAG_HTML4_TEXT 0x00001000
#define NS_IPARSER_FLAG_XML 0x00000200
#define NS_IPARSER_FLAG_HTML 0x00000400
#endif

View File

@ -67,8 +67,6 @@ static NS_DEFINE_CID(kFormProcessorCID, NS_FORMPROCESSOR_CID);
static const char* kNullToken = "Error: Null token given";
static const char* kInvalidTagStackPos = "Error: invalid tag stack position";
static char* kVerificationDir = "c:/temp";
#ifdef ENABLE_CRC
static char gShowCRC;
@ -161,8 +159,8 @@ CNavDTD::CNavDTD() : nsIDTD(),
mOpenMapCount(0),
mParser(0),
mTokenizer(0),
mDocType(eHTML3Text),
mDTDMode(eDTDMode_quirks),
mDocType(eHTML3_Quirks), // why not eHTML_Quirks?
mParserCommand(eViewNormal),
mSkipTarget(eHTMLTag_unknown),
mDTDState(NS_OK),
@ -339,7 +337,6 @@ eAutoDetectResult CNavDTD::CanParse(CParserContext& aParserContext,nsString& aBu
if(!theBufHasXML) {
switch(aParserContext.mDTDMode) {
case eDTDMode_strict:
case eDTDMode_transitional:
result=eValidDetect;
break;
default:
@ -2298,7 +2295,6 @@ nsresult CNavDTD::HandleDocTypeDeclToken(CToken* aToken){
*************************************************************/
nsDTDMode theMode=mDTDMode;
switch(mDTDMode) {
case eDTDMode_transitional:
case eDTDMode_strict:
theMode=eDTDMode_strict;
break;
@ -3870,7 +3866,7 @@ nsresult CNavDTD::CreateContextStackFor(eHTMLTags aChildTag){
theTag=(eHTMLTags)mScratch[--theLen];
#ifdef ALLOW_TR_AS_CHILD_OF_TABLE
if((eHTML3Text==mDocType) && (eHTMLTag_tbody==theTag)) {
if((eHTML3_Quirks==mDocType) && (eHTMLTag_tbody==theTag)) {
//the prev. condition prevents us from emitting tbody in html3.2 docs; fix bug 30378
continue;
}

View File

@ -141,7 +141,7 @@ COtherDTD::COtherDTD() : nsIDTD() {
mComputedCRC32=0;
mExpectedCRC32=0;
mDTDState=NS_OK;
mDocType=eHTML4Text;
mDocType=eHTML_Strict;
mHadFrameset=PR_FALSE;
mHadBody=PR_FALSE;
mHasOpenScript=PR_FALSE;
@ -264,7 +264,6 @@ eAutoDetectResult COtherDTD::CanParse(CParserContext& aParserContext,nsString& a
else if(PR_TRUE==aParserContext.mMimeType.EqualsWithConversion(kHTMLTextContentType)) {
switch(aParserContext.mDTDMode) {
case eDTDMode_strict:
case eDTDMode_transitional:
result=ePrimaryDetect;
break;
default:
@ -282,7 +281,6 @@ eAutoDetectResult COtherDTD::CanParse(CParserContext& aParserContext,nsString& a
if(!theBufHasXML) {
switch(aParserContext.mDTDMode) {
case eDTDMode_strict:
case eDTDMode_transitional:
result=ePrimaryDetect;
break;
default:
@ -326,7 +324,7 @@ nsresult COtherDTD::WillBuildModel( const CParserContext& aParserContext,nsICon
MOZ_TIMER_DEBUGLOG(("Stop: Parse Time: COtherDTD::WillBuildModel(), this=%p\n", this));
mDocType=aParserContext.mDocType;
mBodyContext->mFlags.mTransitional=PRBool(aParserContext.mDTDMode==eDTDMode_transitional);
mBodyContext->mFlags.mTransitional=PR_FALSE;
if(aSink && (!mSink)) {
result=aSink->QueryInterface(kIHTMLContentSinkIID, (void **)&mSink);

View File

@ -133,19 +133,12 @@ void CParserContext::SetMimeType(const nsString& aMimeType){
mDocType=ePlainText;
if(mMimeType.EqualsWithConversion(kHTMLTextContentType))
mDocType=eHTML4Text;
else if(mMimeType.EqualsWithConversion(kXMLTextContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kXMLApplicationContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kXHTMLApplicationContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kXULTextContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kRDFTextContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kXIFTextContentType))
mDocType=eXMLText;
mDocType=eHTML_Strict;
else if (mMimeType.EqualsWithConversion(kXMLTextContentType) ||
mMimeType.EqualsWithConversion(kXMLApplicationContentType) ||
mMimeType.EqualsWithConversion(kXHTMLApplicationContentType) ||
mMimeType.EqualsWithConversion(kXULTextContentType) ||
mMimeType.EqualsWithConversion(kRDFTextContentType) ||
mMimeType.EqualsWithConversion(kXIFTextContentType))
mDocType=eXML;
}

View File

@ -55,7 +55,7 @@ static NS_DEFINE_CID(kCParserCID, NS_PARSER_CID);
const int gTabSize=2;
static const NS_NAMED_LITERAL_STRING(gMozDirty, "_moz_dirty");
#define gMozDirty NS_LITERAL_STRING("_moz_dirty")
/**
* This method gets called as part of our COM-like interfaces.
@ -412,7 +412,7 @@ void nsHTMLContentSinkStream::WriteAttributes(const nsIParserNode& aNode)
//
// Filter out special case of _moz_dirty
// Not needed if we're filtering out all _moz* tags.
//if (key.Equals(gMozDirty))
//if (key == gMozDirty)
// continue;
//
@ -587,7 +587,7 @@ PRBool nsHTMLContentSinkStream::IsDirty(const nsIParserNode& aNode)
for(int i=0; i < theCount; i++)
{
const nsAReadableString& key = (nsString&)aNode.GetKeyAt(i);
if (key.Equals(gMozDirty))
if (key == gMozDirty)
return PR_TRUE;
}
}

View File

@ -123,9 +123,6 @@ NS_IMPL_RELEASE(nsHTMLTokenizer)
if (aParseMode==eDTDMode_strict) {
mFlags = NS_IPARSER_FLAG_STRICT_MODE;
}
else if (aParseMode==eDTDMode_transitional) {
mFlags = NS_IPARSER_FLAG_TRANSITIONAL_MODE;
}
else if (aParseMode==eDTDMode_quirks) {
mFlags = NS_IPARSER_FLAG_QUIRKS_MODE;
}
@ -139,17 +136,13 @@ NS_IMPL_RELEASE(nsHTMLTokenizer)
if (aDocType==ePlainText) {
mFlags |= NS_IPARSER_FLAG_PLAIN_TEXT;
}
else if (aDocType==eXMLText) {
mFlags |= NS_IPARSER_FLAG_XML_TEXT;
else if (aDocType==eXML) {
mFlags |= NS_IPARSER_FLAG_XML;
}
else if (aDocType==eXHTMLText) {
mFlags |= NS_IPARSER_FLAG_XHTML_TEXT;
}
else if (aDocType==eHTML3Text) {
mFlags |= NS_IPARSER_FLAG_HTML3_TEXT;
}
else if (aDocType==eHTML4Text) {
mFlags |= NS_IPARSER_FLAG_HTML4_TEXT;
else if (aDocType==eHTML_Quirks ||
aDocType==eHTML3_Quirks ||
aDocType==eHTML_Strict) {
mFlags |= NS_IPARSER_FLAG_HTML;
}
mFlags |= (aCommand==eViewSource)? NS_IPARSER_FLAG_VIEW_SOURCE:NS_IPARSER_FLAG_VIEW_NORMAL;
@ -541,7 +534,7 @@ nsresult nsHTMLTokenizer::ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner&
result=aScanner.Peek(theNextChar, 1);
if(NS_OK==result) {
// xml allow non ASCII tag name, consume as end tag. need to make xml view source work
PRBool isXML=(mFlags & (NS_IPARSER_FLAG_XML_TEXT | NS_IPARSER_FLAG_XHTML_TEXT));
PRBool isXML=(mFlags & NS_IPARSER_FLAG_XML);
if(nsCRT::IsAsciiAlpha(theNextChar)||(kGreaterThan==theNextChar)||
(isXML && (! nsCRT::IsAscii(theNextChar)))) {
result=ConsumeEndTag(aChar,aToken,aScanner);
@ -621,7 +614,7 @@ nsresult nsHTMLTokenizer::ConsumeAttributes(PRUnichar aChar,CStartToken* aToken,
// support XML like syntax to fix bugs like 44186
if(!key.IsEmpty() && kForwardSlash==key.First() && text.IsEmpty()) {
aToken->SetEmpty(PR_TRUE);
isUsableAttr = !(mFlags & (NS_IPARSER_FLAG_STRICT_MODE|NS_IPARSER_FLAG_TRANSITIONAL_MODE));
isUsableAttr = !(mFlags & NS_IPARSER_FLAG_STRICT_MODE);
}
if(isUsableAttr) {
theAttrCount++;

View File

@ -55,7 +55,7 @@
CLASS_EXPORT_HTMLPARS nsHTMLTokenizer : public nsITokenizer {
public:
nsHTMLTokenizer( PRInt32 aParseMode=eDTDMode_quirks,
eParserDocType aDocType=eHTML3Text,
eParserDocType aDocType=eHTML3_Quirks,
eParserCommands aCommand=eViewNormal);
virtual ~nsHTMLTokenizer();

View File

@ -211,7 +211,7 @@ nsresult CStartToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aFlag
//NOTE: We don't Consume the tag attributes here, nor do we eat the ">"
nsresult result=NS_OK;
if(aFlag & (NS_IPARSER_FLAG_HTML3_TEXT | NS_IPARSER_FLAG_HTML4_TEXT)) {
if (aFlag & NS_IPARSER_FLAG_HTML) {
nsAutoString theSubstr;
result=aScanner.GetIdentifier(theSubstr,PR_TRUE);
mTypeID = (PRInt32)nsHTMLTags::LookupTag(theSubstr);
@ -339,7 +339,7 @@ nsresult CEndToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aFlag)
nsresult result=NS_OK;
nsAutoString buffer;
PRInt32 offset;
if(aFlag & (NS_IPARSER_FLAG_HTML3_TEXT | NS_IPARSER_FLAG_HTML4_TEXT)) {
if (aFlag & NS_IPARSER_FLAG_HTML) {
nsAutoString theSubstr;
result=aScanner.ReadUntil(theSubstr,kGreaterThan,PR_FALSE);
if (NS_FAILED(result)) {
@ -657,7 +657,6 @@ nsresult CTextToken::ConsumeUntil(PRUnichar aChar,PRBool aIgnoreComments,nsScann
if (found && theTermStrPos != endPos) {
if(!(aFlag & NS_IPARSER_FLAG_STRICT_MODE) &&
!(aFlag & NS_IPARSER_FLAG_TRANSITIONAL_MODE) &&
!theLastIteration && !aIgnoreComments) {
nsReadingIterator<PRUnichar> endComment(ltOffset);
endComment.advance(5);
@ -1008,7 +1007,7 @@ CCommentToken::CCommentToken(const nsAReadableString& aName) : CHTMLToken(eHTMLT
/*
* This method consumes a comment using the (CORRECT) comment parsing
* algorithm supplied by W3C.
* algorithm according to ISO 8879 (SGML).
*
* @update gess 01/04/99
* @param

File diff suppressed because it is too large Load Diff

View File

@ -338,7 +338,7 @@ CViewSourceHTML::CViewSourceHTML() : mFilename(), mTags(), mErrors() {
mSink=0;
mLineNumber=0;
mTokenizer=0;
mDocType=eHTML3Text;
mDocType=eHTML3_Quirks; // why?
mValidator=0;
mHasOpenRoot=PR_FALSE;
mHasOpenBody=PR_FALSE;

View File

@ -184,10 +184,9 @@ eAutoDetectResult CWellFormedDTD::CanParse(CParserContext& aParserContext,nsStri
result=ePrimaryDetect;
}
else {
if(-1<aBuffer.Find("<?xml ")) {
if(0==aParserContext.mMimeType.Length()) {
aParserContext.SetMimeType( NS_ConvertASCIItoUCS2(kXMLTextContentType) );
}
if (0 == aParserContext.mMimeType.Length() &&
kNotFound != aBuffer.Find("<?xml ")) {
aParserContext.SetMimeType(NS_ConvertASCIItoUCS2(kXMLTextContentType));
result=eValidDetect;
}
}

View File

@ -52,7 +52,6 @@ enum eAutoDetectResult {
enum nsDTDMode {
eDTDMode_unknown=0,
eDTDMode_quirks, //pre 4.0 versions
eDTDMode_transitional,
eDTDMode_strict,
eDTDMode_autodetect
};

View File

@ -73,10 +73,10 @@ enum eCRCQuality {
enum eParserDocType {
ePlainText = 0,
eXMLText,
eXHTMLText,
eHTML3Text,
eHTML4Text
eXML,
eHTML_Quirks,
eHTML3_Quirks, // separate, for editor output, since HTML pre-4.0 lacks tbody
eHTML_Strict
};
@ -385,15 +385,12 @@ const PRUnichar kNullCh = '\0';
#define NS_IPARSER_FLAG_UNKNOWN_MODE 0x00000000
#define NS_IPARSER_FLAG_QUIRKS_MODE 0x00000002
#define NS_IPARSER_FLAG_STRICT_MODE 0x00000004
#define NS_IPARSER_FLAG_TRANSITIONAL_MODE 0x00000008
#define NS_IPARSER_FLAG_AUTO_DETECT_MODE 0x00000010
#define NS_IPARSER_FLAG_VIEW_NORMAL 0x00000020
#define NS_IPARSER_FLAG_VIEW_SOURCE 0x00000040
#define NS_IPARSER_FLAG_VIEW_ERRORS 0x00000080
#define NS_IPARSER_FLAG_PLAIN_TEXT 0x00000100
#define NS_IPARSER_FLAG_XML_TEXT 0x00000200
#define NS_IPARSER_FLAG_XHTML_TEXT 0x00000400
#define NS_IPARSER_FLAG_HTML3_TEXT 0x00000800
#define NS_IPARSER_FLAG_HTML4_TEXT 0x00001000
#define NS_IPARSER_FLAG_XML 0x00000200
#define NS_IPARSER_FLAG_HTML 0x00000400
#endif

View File

@ -67,8 +67,6 @@ static NS_DEFINE_CID(kFormProcessorCID, NS_FORMPROCESSOR_CID);
static const char* kNullToken = "Error: Null token given";
static const char* kInvalidTagStackPos = "Error: invalid tag stack position";
static char* kVerificationDir = "c:/temp";
#ifdef ENABLE_CRC
static char gShowCRC;
@ -161,8 +159,8 @@ CNavDTD::CNavDTD() : nsIDTD(),
mOpenMapCount(0),
mParser(0),
mTokenizer(0),
mDocType(eHTML3Text),
mDTDMode(eDTDMode_quirks),
mDocType(eHTML3_Quirks), // why not eHTML_Quirks?
mParserCommand(eViewNormal),
mSkipTarget(eHTMLTag_unknown),
mDTDState(NS_OK),
@ -339,7 +337,6 @@ eAutoDetectResult CNavDTD::CanParse(CParserContext& aParserContext,nsString& aBu
if(!theBufHasXML) {
switch(aParserContext.mDTDMode) {
case eDTDMode_strict:
case eDTDMode_transitional:
result=eValidDetect;
break;
default:
@ -2298,7 +2295,6 @@ nsresult CNavDTD::HandleDocTypeDeclToken(CToken* aToken){
*************************************************************/
nsDTDMode theMode=mDTDMode;
switch(mDTDMode) {
case eDTDMode_transitional:
case eDTDMode_strict:
theMode=eDTDMode_strict;
break;
@ -3870,7 +3866,7 @@ nsresult CNavDTD::CreateContextStackFor(eHTMLTags aChildTag){
theTag=(eHTMLTags)mScratch[--theLen];
#ifdef ALLOW_TR_AS_CHILD_OF_TABLE
if((eHTML3Text==mDocType) && (eHTMLTag_tbody==theTag)) {
if((eHTML3_Quirks==mDocType) && (eHTMLTag_tbody==theTag)) {
//the prev. condition prevents us from emitting tbody in html3.2 docs; fix bug 30378
continue;
}

View File

@ -141,7 +141,7 @@ COtherDTD::COtherDTD() : nsIDTD() {
mComputedCRC32=0;
mExpectedCRC32=0;
mDTDState=NS_OK;
mDocType=eHTML4Text;
mDocType=eHTML_Strict;
mHadFrameset=PR_FALSE;
mHadBody=PR_FALSE;
mHasOpenScript=PR_FALSE;
@ -264,7 +264,6 @@ eAutoDetectResult COtherDTD::CanParse(CParserContext& aParserContext,nsString& a
else if(PR_TRUE==aParserContext.mMimeType.EqualsWithConversion(kHTMLTextContentType)) {
switch(aParserContext.mDTDMode) {
case eDTDMode_strict:
case eDTDMode_transitional:
result=ePrimaryDetect;
break;
default:
@ -282,7 +281,6 @@ eAutoDetectResult COtherDTD::CanParse(CParserContext& aParserContext,nsString& a
if(!theBufHasXML) {
switch(aParserContext.mDTDMode) {
case eDTDMode_strict:
case eDTDMode_transitional:
result=ePrimaryDetect;
break;
default:
@ -326,7 +324,7 @@ nsresult COtherDTD::WillBuildModel( const CParserContext& aParserContext,nsICon
MOZ_TIMER_DEBUGLOG(("Stop: Parse Time: COtherDTD::WillBuildModel(), this=%p\n", this));
mDocType=aParserContext.mDocType;
mBodyContext->mFlags.mTransitional=PRBool(aParserContext.mDTDMode==eDTDMode_transitional);
mBodyContext->mFlags.mTransitional=PR_FALSE;
if(aSink && (!mSink)) {
result=aSink->QueryInterface(kIHTMLContentSinkIID, (void **)&mSink);

View File

@ -133,19 +133,12 @@ void CParserContext::SetMimeType(const nsString& aMimeType){
mDocType=ePlainText;
if(mMimeType.EqualsWithConversion(kHTMLTextContentType))
mDocType=eHTML4Text;
else if(mMimeType.EqualsWithConversion(kXMLTextContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kXMLApplicationContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kXHTMLApplicationContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kXULTextContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kRDFTextContentType))
mDocType=eXMLText;
else if(mMimeType.EqualsWithConversion(kXIFTextContentType))
mDocType=eXMLText;
mDocType=eHTML_Strict;
else if (mMimeType.EqualsWithConversion(kXMLTextContentType) ||
mMimeType.EqualsWithConversion(kXMLApplicationContentType) ||
mMimeType.EqualsWithConversion(kXHTMLApplicationContentType) ||
mMimeType.EqualsWithConversion(kXULTextContentType) ||
mMimeType.EqualsWithConversion(kRDFTextContentType) ||
mMimeType.EqualsWithConversion(kXIFTextContentType))
mDocType=eXML;
}

View File

@ -55,7 +55,7 @@ static NS_DEFINE_CID(kCParserCID, NS_PARSER_CID);
const int gTabSize=2;
static const NS_NAMED_LITERAL_STRING(gMozDirty, "_moz_dirty");
#define gMozDirty NS_LITERAL_STRING("_moz_dirty")
/**
* This method gets called as part of our COM-like interfaces.
@ -412,7 +412,7 @@ void nsHTMLContentSinkStream::WriteAttributes(const nsIParserNode& aNode)
//
// Filter out special case of _moz_dirty
// Not needed if we're filtering out all _moz* tags.
//if (key.Equals(gMozDirty))
//if (key == gMozDirty)
// continue;
//
@ -587,7 +587,7 @@ PRBool nsHTMLContentSinkStream::IsDirty(const nsIParserNode& aNode)
for(int i=0; i < theCount; i++)
{
const nsAReadableString& key = (nsString&)aNode.GetKeyAt(i);
if (key.Equals(gMozDirty))
if (key == gMozDirty)
return PR_TRUE;
}
}

View File

@ -123,9 +123,6 @@ NS_IMPL_RELEASE(nsHTMLTokenizer)
if (aParseMode==eDTDMode_strict) {
mFlags = NS_IPARSER_FLAG_STRICT_MODE;
}
else if (aParseMode==eDTDMode_transitional) {
mFlags = NS_IPARSER_FLAG_TRANSITIONAL_MODE;
}
else if (aParseMode==eDTDMode_quirks) {
mFlags = NS_IPARSER_FLAG_QUIRKS_MODE;
}
@ -139,17 +136,13 @@ NS_IMPL_RELEASE(nsHTMLTokenizer)
if (aDocType==ePlainText) {
mFlags |= NS_IPARSER_FLAG_PLAIN_TEXT;
}
else if (aDocType==eXMLText) {
mFlags |= NS_IPARSER_FLAG_XML_TEXT;
else if (aDocType==eXML) {
mFlags |= NS_IPARSER_FLAG_XML;
}
else if (aDocType==eXHTMLText) {
mFlags |= NS_IPARSER_FLAG_XHTML_TEXT;
}
else if (aDocType==eHTML3Text) {
mFlags |= NS_IPARSER_FLAG_HTML3_TEXT;
}
else if (aDocType==eHTML4Text) {
mFlags |= NS_IPARSER_FLAG_HTML4_TEXT;
else if (aDocType==eHTML_Quirks ||
aDocType==eHTML3_Quirks ||
aDocType==eHTML_Strict) {
mFlags |= NS_IPARSER_FLAG_HTML;
}
mFlags |= (aCommand==eViewSource)? NS_IPARSER_FLAG_VIEW_SOURCE:NS_IPARSER_FLAG_VIEW_NORMAL;
@ -541,7 +534,7 @@ nsresult nsHTMLTokenizer::ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner&
result=aScanner.Peek(theNextChar, 1);
if(NS_OK==result) {
// xml allow non ASCII tag name, consume as end tag. need to make xml view source work
PRBool isXML=(mFlags & (NS_IPARSER_FLAG_XML_TEXT | NS_IPARSER_FLAG_XHTML_TEXT));
PRBool isXML=(mFlags & NS_IPARSER_FLAG_XML);
if(nsCRT::IsAsciiAlpha(theNextChar)||(kGreaterThan==theNextChar)||
(isXML && (! nsCRT::IsAscii(theNextChar)))) {
result=ConsumeEndTag(aChar,aToken,aScanner);
@ -621,7 +614,7 @@ nsresult nsHTMLTokenizer::ConsumeAttributes(PRUnichar aChar,CStartToken* aToken,
// support XML like syntax to fix bugs like 44186
if(!key.IsEmpty() && kForwardSlash==key.First() && text.IsEmpty()) {
aToken->SetEmpty(PR_TRUE);
isUsableAttr = !(mFlags & (NS_IPARSER_FLAG_STRICT_MODE|NS_IPARSER_FLAG_TRANSITIONAL_MODE));
isUsableAttr = !(mFlags & NS_IPARSER_FLAG_STRICT_MODE);
}
if(isUsableAttr) {
theAttrCount++;

View File

@ -55,7 +55,7 @@
CLASS_EXPORT_HTMLPARS nsHTMLTokenizer : public nsITokenizer {
public:
nsHTMLTokenizer( PRInt32 aParseMode=eDTDMode_quirks,
eParserDocType aDocType=eHTML3Text,
eParserDocType aDocType=eHTML3_Quirks,
eParserCommands aCommand=eViewNormal);
virtual ~nsHTMLTokenizer();

View File

@ -211,7 +211,7 @@ nsresult CStartToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aFlag
//NOTE: We don't Consume the tag attributes here, nor do we eat the ">"
nsresult result=NS_OK;
if(aFlag & (NS_IPARSER_FLAG_HTML3_TEXT | NS_IPARSER_FLAG_HTML4_TEXT)) {
if (aFlag & NS_IPARSER_FLAG_HTML) {
nsAutoString theSubstr;
result=aScanner.GetIdentifier(theSubstr,PR_TRUE);
mTypeID = (PRInt32)nsHTMLTags::LookupTag(theSubstr);
@ -339,7 +339,7 @@ nsresult CEndToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aFlag)
nsresult result=NS_OK;
nsAutoString buffer;
PRInt32 offset;
if(aFlag & (NS_IPARSER_FLAG_HTML3_TEXT | NS_IPARSER_FLAG_HTML4_TEXT)) {
if (aFlag & NS_IPARSER_FLAG_HTML) {
nsAutoString theSubstr;
result=aScanner.ReadUntil(theSubstr,kGreaterThan,PR_FALSE);
if (NS_FAILED(result)) {
@ -657,7 +657,6 @@ nsresult CTextToken::ConsumeUntil(PRUnichar aChar,PRBool aIgnoreComments,nsScann
if (found && theTermStrPos != endPos) {
if(!(aFlag & NS_IPARSER_FLAG_STRICT_MODE) &&
!(aFlag & NS_IPARSER_FLAG_TRANSITIONAL_MODE) &&
!theLastIteration && !aIgnoreComments) {
nsReadingIterator<PRUnichar> endComment(ltOffset);
endComment.advance(5);
@ -1008,7 +1007,7 @@ CCommentToken::CCommentToken(const nsAReadableString& aName) : CHTMLToken(eHTMLT
/*
* This method consumes a comment using the (CORRECT) comment parsing
* algorithm supplied by W3C.
* algorithm according to ISO 8879 (SGML).
*
* @update gess 01/04/99
* @param

File diff suppressed because it is too large Load Diff

View File

@ -338,7 +338,7 @@ CViewSourceHTML::CViewSourceHTML() : mFilename(), mTags(), mErrors() {
mSink=0;
mLineNumber=0;
mTokenizer=0;
mDocType=eHTML3Text;
mDocType=eHTML3_Quirks; // why?
mValidator=0;
mHasOpenRoot=PR_FALSE;
mHasOpenBody=PR_FALSE;

View File

@ -184,10 +184,9 @@ eAutoDetectResult CWellFormedDTD::CanParse(CParserContext& aParserContext,nsStri
result=ePrimaryDetect;
}
else {
if(-1<aBuffer.Find("<?xml ")) {
if(0==aParserContext.mMimeType.Length()) {
aParserContext.SetMimeType( NS_ConvertASCIItoUCS2(kXMLTextContentType) );
}
if (0 == aParserContext.mMimeType.Length() &&
kNotFound != aBuffer.Find("<?xml ")) {
aParserContext.SetMimeType(NS_ConvertASCIItoUCS2(kXMLTextContentType));
result=eValidDetect;
}
}