зеркало из https://github.com/mozilla/gecko-dev.git
remove meta charset hack. Add access function to nsParser to get the current charset and source. Add additional information to the nsIElementObserver
This commit is contained in:
Родитель
70913e88d2
Коммит
6d74b60ba2
|
@ -1196,18 +1196,35 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode
|
|||
PRInt32 index = 0;
|
||||
const PRUnichar* theKeys[50] = {0,0,0,0,0}; // XXX - should be dynamic
|
||||
const PRUnichar* theValues[50]= {0,0,0,0,0}; // XXX - should be dynamic
|
||||
for(index=0; index<theAttrCount && theAttrCount < 50; index++) {
|
||||
for(index=0; index<theAttrCount && index < 50; index++) {
|
||||
theKeys[index] = aNode.GetKeyAt(index).GetUnicode();
|
||||
theValues[index] = aNode.GetValueAt(index).GetUnicode();
|
||||
}
|
||||
|
||||
nsAutoString theCharsetKey("charset");
|
||||
theKeys[index]=theCharsetKey.GetUnicode();
|
||||
theValues[index] = nsParser::gHackMetaCharsetURL.GetUnicode();
|
||||
nsAutoString charsetValue;
|
||||
nsCharsetSource charsetSource;
|
||||
mParser->GetDocumentCharset(charsetValue, charsetSource);
|
||||
// Add pseudo attribute in the end
|
||||
if(index < 50) {
|
||||
nsAutoString theCharsetKey("charset");
|
||||
theKeys[index]=theCharsetKey.GetUnicode();
|
||||
theValues[index] = charsetValue.GetUnicode();
|
||||
index++;
|
||||
}
|
||||
|
||||
if(index < 50) {
|
||||
nsAutoString theCharsetKey("charsetSource");
|
||||
theKeys[index]=theCharsetKey.GetUnicode();
|
||||
PRInt32 sourceInt = charsetSource;
|
||||
nsAutoString intValue;
|
||||
intValue.Append(sourceInt,10);
|
||||
theValues[index] = intValue.GetUnicode();
|
||||
index++;
|
||||
}
|
||||
|
||||
CParserContext* pc=mParser->PeekContext();
|
||||
void* theDocID=(pc) ? pc-> mKey : 0;
|
||||
nsObserverNotifier theNotifier(aTag,theAttrCount,theKeys,theValues,(PRUint32)theDocID);
|
||||
nsObserverNotifier theNotifier(aTag,index,theKeys,theValues,(PRUint32)theDocID);
|
||||
theDeque->FirstThat(theNotifier);
|
||||
result=theNotifier.mResult;
|
||||
|
||||
|
@ -1216,23 +1233,21 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode
|
|||
}
|
||||
|
||||
|
||||
//**********************************************************
|
||||
//XXX Hack until I get the node observer API in place...
|
||||
|
||||
if(eHTMLTag_meta==aTag) {
|
||||
PRInt32 theCount=aNode.GetAttributeCount();
|
||||
if(1<theCount){
|
||||
|
||||
//<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
const nsString& theKey=aNode.GetKeyAt(0);
|
||||
if(theKey.EqualsIgnoreCase("HTTP-EQUIV")) {
|
||||
const nsString& theKey2=aNode.GetKeyAt(1);
|
||||
if(theKey2.EqualsIgnoreCase("CONTENT")) {
|
||||
nsScanner* theScanner=mParser->GetScanner();
|
||||
if(theScanner) {
|
||||
const nsString& theValue=aNode.GetValueAt(1);
|
||||
PRInt32 charsetValueStart = theValue.RFind("charset=", PR_TRUE ) ;
|
||||
if(kNotFound != charsetValueStart) {
|
||||
if(eHTMLTag_meta==aTag) {
|
||||
PRInt32 theCount=aNode.GetAttributeCount();
|
||||
if(1<theCount){
|
||||
|
||||
const nsString& theKey=aNode.GetKeyAt(0);
|
||||
#if 0
|
||||
//<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
if(theKey.EqualsIgnoreCase("HTTP-EQUIV")) {
|
||||
const nsString& theKey2=aNode.GetKeyAt(1);
|
||||
if(theKey2.EqualsIgnoreCase("CONTENT")) {
|
||||
nsScanner* theScanner=mParser->GetScanner();
|
||||
if(theScanner) {
|
||||
const nsString& theValue=aNode.GetValueAt(1);
|
||||
PRInt32 charsetValueStart = theValue.RFind("charset=", PR_TRUE ) ;
|
||||
if(kNotFound != charsetValueStart) {
|
||||
charsetValueStart += 8; // 8 = "charset=".length
|
||||
PRInt32 charsetValueEnd = theValue.FindCharInSet("\'\";", charsetValueStart );
|
||||
if(kNotFound == charsetValueEnd )
|
||||
|
@ -1247,29 +1262,27 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode
|
|||
}
|
||||
} //if
|
||||
|
||||
else if(theKey.EqualsIgnoreCase("NAME")) {
|
||||
const nsString& theValue1=aNode.GetValueAt(0);
|
||||
if(theValue1.EqualsIgnoreCase("\"CRC\"")) {
|
||||
const nsString& theKey2=aNode.GetKeyAt(1);
|
||||
if(theKey2.EqualsIgnoreCase("CONTENT")) {
|
||||
const nsString& theValue2=aNode.GetValueAt(1);
|
||||
PRInt32 err=0;
|
||||
mExpectedCRC32=theValue2.ToInteger(&err);
|
||||
} //if
|
||||
} //if
|
||||
} //else
|
||||
else
|
||||
#endif
|
||||
if(theKey.EqualsIgnoreCase("NAME")) {
|
||||
const nsString& theValue1=aNode.GetValueAt(0);
|
||||
if(theValue1.EqualsIgnoreCase("\"CRC\"")) {
|
||||
const nsString& theKey2=aNode.GetKeyAt(1);
|
||||
if(theKey2.EqualsIgnoreCase("CONTENT")) {
|
||||
const nsString& theValue2=aNode.GetValueAt(1);
|
||||
PRInt32 err=0;
|
||||
mExpectedCRC32=theValue2.ToInteger(&err);
|
||||
} //if
|
||||
} //if
|
||||
} //else
|
||||
|
||||
} //if
|
||||
}//if
|
||||
|
||||
//XXX Hack until I get the node observer API in place...
|
||||
//**********************************************************
|
||||
} //if
|
||||
}//if
|
||||
|
||||
if(NS_OK==result) {
|
||||
result=gHTMLElements[aTag].HasSpecialProperty(kDiscardTag) ? 1 : NS_OK;
|
||||
}
|
||||
|
||||
|
||||
PRBool isHeadChild=gHTMLElements[eHTMLTag_head].IsChildOfHead(aTag);
|
||||
|
||||
//this code is here to make sure the head is closed before we deal
|
||||
|
|
|
@ -121,8 +121,8 @@ public:
|
|||
|
||||
//static CSharedParserObjects* gSharedParserObjects=0;
|
||||
|
||||
nsString nsParser::gHackMetaCharset = "";
|
||||
nsString nsParser::gHackMetaCharsetURL = "";
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
/**********************************************************************************
|
||||
This class is used as an interface between an external agent (like the DOM) and
|
||||
|
@ -161,9 +161,6 @@ public:
|
|||
nsDeque mTags; //will hold a deque of prunichars...
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
|
||||
CSharedParserObjects& GetSharedObjects() {
|
||||
static CSharedParserObjects gSharedParserObjects;
|
||||
return gSharedParserObjects;
|
||||
|
@ -624,31 +621,6 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif
|
|||
if (rv != NS_OK) return rv;
|
||||
nsAutoString theName(spec);
|
||||
|
||||
// XXX temp hack to make parser use UTF-8 as default charset for XML, RDF, XUL
|
||||
// XXX This should be removed once we have the SetDefaultCharset in the nsIParser interface
|
||||
nsString last4;
|
||||
theName.Right(last4, 4);
|
||||
if(last4.EqualsIgnoreCase(".xul") || last4.EqualsIgnoreCase(".xml") || last4.EqualsIgnoreCase(".rdf") )
|
||||
{
|
||||
if(kCharsetFromDocTypeDefault >= mCharsetSource) {
|
||||
mCharset = "UTF-8";
|
||||
mCharsetSource = kCharsetFromDocTypeDefault;
|
||||
}
|
||||
}
|
||||
|
||||
// XXX begin of meta tag charset hack
|
||||
|
||||
if(theName.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
|
||||
{
|
||||
if(kCharsetFromMetaTag > mCharsetSource) {
|
||||
mCharset = nsParser::gHackMetaCharset;
|
||||
mCharsetSource = kCharsetFromMetaTag;
|
||||
}
|
||||
}
|
||||
nsParser::gHackMetaCharsetURL = theName;
|
||||
nsParser::gHackMetaCharset = "";
|
||||
// XXX end of meta tag charset hack
|
||||
|
||||
CParserContext* pc=new CParserContext(new nsScanner(theName,PR_FALSE, mCharset, mCharsetSource),aKey,aListener);
|
||||
if(pc) {
|
||||
pc->mMultipart=PR_TRUE;
|
||||
|
@ -675,20 +647,7 @@ nsresult nsParser::Parse(nsIInputStream& aStream,PRBool aVerifyEnabled, void* aK
|
|||
//ok, time to create our tokenizer and begin the process
|
||||
nsAutoString theUnknownFilename("unknown");
|
||||
|
||||
// XXX begin of meta tag charset hack
|
||||
if(theUnknownFilename.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
|
||||
{
|
||||
|
||||
if(kCharsetFromMetaTag > mCharsetSource) {
|
||||
mCharset = nsParser::gHackMetaCharset;
|
||||
mCharsetSource = kCharsetFromMetaTag;
|
||||
}
|
||||
}
|
||||
nsParser::gHackMetaCharsetURL = theUnknownFilename;
|
||||
nsParser::gHackMetaCharset = "";
|
||||
// XXX end of meta tag charset hack
|
||||
|
||||
nsInputStream input(&aStream);
|
||||
nsInputStream input(&aStream);
|
||||
CParserContext* pc=new CParserContext(new nsScanner(theUnknownFilename, input, mCharset, mCharsetSource,PR_FALSE),aKey,0);
|
||||
if(pc) {
|
||||
PushContext(*pc);
|
||||
|
@ -724,27 +683,6 @@ nsresult nsParser::Parse(nsString& aSourceBuffer,void* aKey,const nsString& aCon
|
|||
}
|
||||
#endif
|
||||
|
||||
if(aContentType.EqualsIgnoreCase("text/xul") || aContentType.EqualsIgnoreCase("text/xml") || aContentType.EqualsIgnoreCase("text/rdf") )
|
||||
{
|
||||
if(kCharsetFromDocTypeDefault >= mCharsetSource) {
|
||||
mCharset = "UTF-8";
|
||||
mCharsetSource = kCharsetFromDocTypeDefault;
|
||||
}
|
||||
}
|
||||
|
||||
// XXX begin of meta tag charset hack
|
||||
nsAutoString theFakeURL("fromString");
|
||||
if(theFakeURL.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
|
||||
{
|
||||
if(kCharsetFromMetaTag > mCharsetSource) {
|
||||
mCharset = nsParser::gHackMetaCharset;
|
||||
mCharsetSource = kCharsetFromMetaTag;
|
||||
}
|
||||
}
|
||||
nsParser::gHackMetaCharsetURL = theFakeURL;
|
||||
nsParser::gHackMetaCharset = "";
|
||||
// XXX end of meta tag charset hack
|
||||
|
||||
//NOTE: Make sure that updates to this method don't cause
|
||||
// bug #2361 to break again!
|
||||
|
||||
|
|
|
@ -137,6 +137,12 @@ friend class CTokenHandler;
|
|||
*/
|
||||
virtual void SetDocumentCharset(nsString& aCharset, nsCharsetSource aSource);
|
||||
|
||||
void GetDocumentCharset(nsString& oCharset, nsCharsetSource& oSource)
|
||||
{
|
||||
oCharset = mCharset;
|
||||
oSource = mCharsetSource;
|
||||
}
|
||||
|
||||
|
||||
virtual nsIParserFilter* SetParserFilter(nsIParserFilter* aFilter);
|
||||
|
||||
|
@ -258,12 +264,6 @@ friend class CTokenHandler;
|
|||
*/
|
||||
virtual nsresult CreateTagStack(nsITagStack** aTagStack);
|
||||
|
||||
/*
|
||||
* The following two should be removed once our Meta Charset work complete
|
||||
*/
|
||||
static nsString gHackMetaCharset;
|
||||
static nsString gHackMetaCharsetURL;
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
|
|
|
@ -1196,18 +1196,35 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode
|
|||
PRInt32 index = 0;
|
||||
const PRUnichar* theKeys[50] = {0,0,0,0,0}; // XXX - should be dynamic
|
||||
const PRUnichar* theValues[50]= {0,0,0,0,0}; // XXX - should be dynamic
|
||||
for(index=0; index<theAttrCount && theAttrCount < 50; index++) {
|
||||
for(index=0; index<theAttrCount && index < 50; index++) {
|
||||
theKeys[index] = aNode.GetKeyAt(index).GetUnicode();
|
||||
theValues[index] = aNode.GetValueAt(index).GetUnicode();
|
||||
}
|
||||
|
||||
nsAutoString theCharsetKey("charset");
|
||||
theKeys[index]=theCharsetKey.GetUnicode();
|
||||
theValues[index] = nsParser::gHackMetaCharsetURL.GetUnicode();
|
||||
nsAutoString charsetValue;
|
||||
nsCharsetSource charsetSource;
|
||||
mParser->GetDocumentCharset(charsetValue, charsetSource);
|
||||
// Add pseudo attribute in the end
|
||||
if(index < 50) {
|
||||
nsAutoString theCharsetKey("charset");
|
||||
theKeys[index]=theCharsetKey.GetUnicode();
|
||||
theValues[index] = charsetValue.GetUnicode();
|
||||
index++;
|
||||
}
|
||||
|
||||
if(index < 50) {
|
||||
nsAutoString theCharsetKey("charsetSource");
|
||||
theKeys[index]=theCharsetKey.GetUnicode();
|
||||
PRInt32 sourceInt = charsetSource;
|
||||
nsAutoString intValue;
|
||||
intValue.Append(sourceInt,10);
|
||||
theValues[index] = intValue.GetUnicode();
|
||||
index++;
|
||||
}
|
||||
|
||||
CParserContext* pc=mParser->PeekContext();
|
||||
void* theDocID=(pc) ? pc-> mKey : 0;
|
||||
nsObserverNotifier theNotifier(aTag,theAttrCount,theKeys,theValues,(PRUint32)theDocID);
|
||||
nsObserverNotifier theNotifier(aTag,index,theKeys,theValues,(PRUint32)theDocID);
|
||||
theDeque->FirstThat(theNotifier);
|
||||
result=theNotifier.mResult;
|
||||
|
||||
|
@ -1216,23 +1233,21 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode
|
|||
}
|
||||
|
||||
|
||||
//**********************************************************
|
||||
//XXX Hack until I get the node observer API in place...
|
||||
|
||||
if(eHTMLTag_meta==aTag) {
|
||||
PRInt32 theCount=aNode.GetAttributeCount();
|
||||
if(1<theCount){
|
||||
|
||||
//<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
const nsString& theKey=aNode.GetKeyAt(0);
|
||||
if(theKey.EqualsIgnoreCase("HTTP-EQUIV")) {
|
||||
const nsString& theKey2=aNode.GetKeyAt(1);
|
||||
if(theKey2.EqualsIgnoreCase("CONTENT")) {
|
||||
nsScanner* theScanner=mParser->GetScanner();
|
||||
if(theScanner) {
|
||||
const nsString& theValue=aNode.GetValueAt(1);
|
||||
PRInt32 charsetValueStart = theValue.RFind("charset=", PR_TRUE ) ;
|
||||
if(kNotFound != charsetValueStart) {
|
||||
if(eHTMLTag_meta==aTag) {
|
||||
PRInt32 theCount=aNode.GetAttributeCount();
|
||||
if(1<theCount){
|
||||
|
||||
const nsString& theKey=aNode.GetKeyAt(0);
|
||||
#if 0
|
||||
//<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
if(theKey.EqualsIgnoreCase("HTTP-EQUIV")) {
|
||||
const nsString& theKey2=aNode.GetKeyAt(1);
|
||||
if(theKey2.EqualsIgnoreCase("CONTENT")) {
|
||||
nsScanner* theScanner=mParser->GetScanner();
|
||||
if(theScanner) {
|
||||
const nsString& theValue=aNode.GetValueAt(1);
|
||||
PRInt32 charsetValueStart = theValue.RFind("charset=", PR_TRUE ) ;
|
||||
if(kNotFound != charsetValueStart) {
|
||||
charsetValueStart += 8; // 8 = "charset=".length
|
||||
PRInt32 charsetValueEnd = theValue.FindCharInSet("\'\";", charsetValueStart );
|
||||
if(kNotFound == charsetValueEnd )
|
||||
|
@ -1247,29 +1262,27 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode
|
|||
}
|
||||
} //if
|
||||
|
||||
else if(theKey.EqualsIgnoreCase("NAME")) {
|
||||
const nsString& theValue1=aNode.GetValueAt(0);
|
||||
if(theValue1.EqualsIgnoreCase("\"CRC\"")) {
|
||||
const nsString& theKey2=aNode.GetKeyAt(1);
|
||||
if(theKey2.EqualsIgnoreCase("CONTENT")) {
|
||||
const nsString& theValue2=aNode.GetValueAt(1);
|
||||
PRInt32 err=0;
|
||||
mExpectedCRC32=theValue2.ToInteger(&err);
|
||||
} //if
|
||||
} //if
|
||||
} //else
|
||||
else
|
||||
#endif
|
||||
if(theKey.EqualsIgnoreCase("NAME")) {
|
||||
const nsString& theValue1=aNode.GetValueAt(0);
|
||||
if(theValue1.EqualsIgnoreCase("\"CRC\"")) {
|
||||
const nsString& theKey2=aNode.GetKeyAt(1);
|
||||
if(theKey2.EqualsIgnoreCase("CONTENT")) {
|
||||
const nsString& theValue2=aNode.GetValueAt(1);
|
||||
PRInt32 err=0;
|
||||
mExpectedCRC32=theValue2.ToInteger(&err);
|
||||
} //if
|
||||
} //if
|
||||
} //else
|
||||
|
||||
} //if
|
||||
}//if
|
||||
|
||||
//XXX Hack until I get the node observer API in place...
|
||||
//**********************************************************
|
||||
} //if
|
||||
}//if
|
||||
|
||||
if(NS_OK==result) {
|
||||
result=gHTMLElements[aTag].HasSpecialProperty(kDiscardTag) ? 1 : NS_OK;
|
||||
}
|
||||
|
||||
|
||||
PRBool isHeadChild=gHTMLElements[eHTMLTag_head].IsChildOfHead(aTag);
|
||||
|
||||
//this code is here to make sure the head is closed before we deal
|
||||
|
|
|
@ -121,8 +121,8 @@ public:
|
|||
|
||||
//static CSharedParserObjects* gSharedParserObjects=0;
|
||||
|
||||
nsString nsParser::gHackMetaCharset = "";
|
||||
nsString nsParser::gHackMetaCharsetURL = "";
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
/**********************************************************************************
|
||||
This class is used as an interface between an external agent (like the DOM) and
|
||||
|
@ -161,9 +161,6 @@ public:
|
|||
nsDeque mTags; //will hold a deque of prunichars...
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
|
||||
CSharedParserObjects& GetSharedObjects() {
|
||||
static CSharedParserObjects gSharedParserObjects;
|
||||
return gSharedParserObjects;
|
||||
|
@ -624,31 +621,6 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif
|
|||
if (rv != NS_OK) return rv;
|
||||
nsAutoString theName(spec);
|
||||
|
||||
// XXX temp hack to make parser use UTF-8 as default charset for XML, RDF, XUL
|
||||
// XXX This should be removed once we have the SetDefaultCharset in the nsIParser interface
|
||||
nsString last4;
|
||||
theName.Right(last4, 4);
|
||||
if(last4.EqualsIgnoreCase(".xul") || last4.EqualsIgnoreCase(".xml") || last4.EqualsIgnoreCase(".rdf") )
|
||||
{
|
||||
if(kCharsetFromDocTypeDefault >= mCharsetSource) {
|
||||
mCharset = "UTF-8";
|
||||
mCharsetSource = kCharsetFromDocTypeDefault;
|
||||
}
|
||||
}
|
||||
|
||||
// XXX begin of meta tag charset hack
|
||||
|
||||
if(theName.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
|
||||
{
|
||||
if(kCharsetFromMetaTag > mCharsetSource) {
|
||||
mCharset = nsParser::gHackMetaCharset;
|
||||
mCharsetSource = kCharsetFromMetaTag;
|
||||
}
|
||||
}
|
||||
nsParser::gHackMetaCharsetURL = theName;
|
||||
nsParser::gHackMetaCharset = "";
|
||||
// XXX end of meta tag charset hack
|
||||
|
||||
CParserContext* pc=new CParserContext(new nsScanner(theName,PR_FALSE, mCharset, mCharsetSource),aKey,aListener);
|
||||
if(pc) {
|
||||
pc->mMultipart=PR_TRUE;
|
||||
|
@ -675,20 +647,7 @@ nsresult nsParser::Parse(nsIInputStream& aStream,PRBool aVerifyEnabled, void* aK
|
|||
//ok, time to create our tokenizer and begin the process
|
||||
nsAutoString theUnknownFilename("unknown");
|
||||
|
||||
// XXX begin of meta tag charset hack
|
||||
if(theUnknownFilename.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
|
||||
{
|
||||
|
||||
if(kCharsetFromMetaTag > mCharsetSource) {
|
||||
mCharset = nsParser::gHackMetaCharset;
|
||||
mCharsetSource = kCharsetFromMetaTag;
|
||||
}
|
||||
}
|
||||
nsParser::gHackMetaCharsetURL = theUnknownFilename;
|
||||
nsParser::gHackMetaCharset = "";
|
||||
// XXX end of meta tag charset hack
|
||||
|
||||
nsInputStream input(&aStream);
|
||||
nsInputStream input(&aStream);
|
||||
CParserContext* pc=new CParserContext(new nsScanner(theUnknownFilename, input, mCharset, mCharsetSource,PR_FALSE),aKey,0);
|
||||
if(pc) {
|
||||
PushContext(*pc);
|
||||
|
@ -724,27 +683,6 @@ nsresult nsParser::Parse(nsString& aSourceBuffer,void* aKey,const nsString& aCon
|
|||
}
|
||||
#endif
|
||||
|
||||
if(aContentType.EqualsIgnoreCase("text/xul") || aContentType.EqualsIgnoreCase("text/xml") || aContentType.EqualsIgnoreCase("text/rdf") )
|
||||
{
|
||||
if(kCharsetFromDocTypeDefault >= mCharsetSource) {
|
||||
mCharset = "UTF-8";
|
||||
mCharsetSource = kCharsetFromDocTypeDefault;
|
||||
}
|
||||
}
|
||||
|
||||
// XXX begin of meta tag charset hack
|
||||
nsAutoString theFakeURL("fromString");
|
||||
if(theFakeURL.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals("")))
|
||||
{
|
||||
if(kCharsetFromMetaTag > mCharsetSource) {
|
||||
mCharset = nsParser::gHackMetaCharset;
|
||||
mCharsetSource = kCharsetFromMetaTag;
|
||||
}
|
||||
}
|
||||
nsParser::gHackMetaCharsetURL = theFakeURL;
|
||||
nsParser::gHackMetaCharset = "";
|
||||
// XXX end of meta tag charset hack
|
||||
|
||||
//NOTE: Make sure that updates to this method don't cause
|
||||
// bug #2361 to break again!
|
||||
|
||||
|
|
|
@ -137,6 +137,12 @@ friend class CTokenHandler;
|
|||
*/
|
||||
virtual void SetDocumentCharset(nsString& aCharset, nsCharsetSource aSource);
|
||||
|
||||
void GetDocumentCharset(nsString& oCharset, nsCharsetSource& oSource)
|
||||
{
|
||||
oCharset = mCharset;
|
||||
oSource = mCharsetSource;
|
||||
}
|
||||
|
||||
|
||||
virtual nsIParserFilter* SetParserFilter(nsIParserFilter* aFilter);
|
||||
|
||||
|
@ -258,12 +264,6 @@ friend class CTokenHandler;
|
|||
*/
|
||||
virtual nsresult CreateTagStack(nsITagStack** aTagStack);
|
||||
|
||||
/*
|
||||
* The following two should be removed once our Meta Charset work complete
|
||||
*/
|
||||
static nsString gHackMetaCharset;
|
||||
static nsString gHackMetaCharsetURL;
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче