mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-02 20:20:00 +00:00
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:
parent
ce012c5510
commit
390e04a7df
@ -52,7 +52,6 @@ enum eAutoDetectResult {
|
||||
enum nsDTDMode {
|
||||
eDTDMode_unknown=0,
|
||||
eDTDMode_quirks, //pre 4.0 versions
|
||||
eDTDMode_transitional,
|
||||
eDTDMode_strict,
|
||||
eDTDMode_autodetect
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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++;
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +52,6 @@ enum eAutoDetectResult {
|
||||
enum nsDTDMode {
|
||||
eDTDMode_unknown=0,
|
||||
eDTDMode_quirks, //pre 4.0 versions
|
||||
eDTDMode_transitional,
|
||||
eDTDMode_strict,
|
||||
eDTDMode_autodetect
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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++;
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user