diff --git a/mozilla/htmlparser/src/CNavDTD.cpp b/mozilla/htmlparser/src/CNavDTD.cpp index 3d8929884a5..225daa642b3 100644 --- a/mozilla/htmlparser/src/CNavDTD.cpp +++ b/mozilla/htmlparser/src/CNavDTD.cpp @@ -954,6 +954,8 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode nsAutoString theCharset; theValue.Mid(theCharset, charsetValueStart, charsetValueEnd - charsetValueStart); theScanner->SetDocumentCharset(theCharset, kCharsetFromMetaTag); + // XXX this should be delete after META charset really work + nsParser::gHackMetaCharset = theCharset; } //if } //if } diff --git a/mozilla/htmlparser/src/nsParser.cpp b/mozilla/htmlparser/src/nsParser.cpp index c0d95d0c591..78b7e2fbefa 100644 --- a/mozilla/htmlparser/src/nsParser.cpp +++ b/mozilla/htmlparser/src/nsParser.cpp @@ -125,6 +125,9 @@ public: static CSharedParserObjects* gSharedParserObjects=0; +nsString nsParser::gHackMetaCharset = ""; +nsString nsParser::gHackMetaCharsetURL = ""; + //---------------------------------------- /** @@ -545,6 +548,7 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif charsetSource = kCharsetFromDocTypeDefault; + nsresult result=kBadURL; mDTDVerification=aVerifyEnabled; if(aURL) { @@ -552,6 +556,18 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif nsresult rv = aURL->GetSpec(&spec); if (rv != NS_OK) return rv; nsAutoString theName(spec); + + // XXX begin of meta tag charset hack + + if(theName.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals(""))) + { + charset = nsParser::gHackMetaCharset; + charsetSource = kCharsetFromMetaTag; + } + nsParser::gHackMetaCharsetURL = theName; + nsParser::gHackMetaCharset = ""; + // XXX end of meta tag charset hack + CParserContext* pc=new CParserContext(new nsScanner(theName,PR_FALSE, charset, charsetSource),aURL,aListener); if(pc) { pc->mMultipart=PR_TRUE; @@ -594,6 +610,17 @@ nsresult nsParser::Parse(fstream& aStream,PRBool aVerifyEnabled){ //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(""))) + { + charset = nsParser::gHackMetaCharset; + charsetSource = kCharsetFromMetaTag; + } + nsParser::gHackMetaCharsetURL = theUnknownFilename; + nsParser::gHackMetaCharset = ""; + // XXX end of meta tag charset hack + CParserContext* pc=new CParserContext(new nsScanner(theUnknownFilename,aStream, charset, charsetSource,PR_FALSE),&aStream,0); if(pc) { PushContext(*pc); @@ -645,6 +672,18 @@ nsresult nsParser::Parse(nsString& aSourceBuffer,void* aKey,const nsString& aCon // XXX We should really put if doc == html for the following line charset = "ISO-8859-1"; charsetSource = kCharsetFromDocTypeDefault; + + // XXX begin of meta tag charset hack + nsAutoString theFakeURL("fromString"); + if(theFakeURL.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals(""))) + { + charset = nsParser::gHackMetaCharset; + charsetSource = 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! diff --git a/mozilla/htmlparser/src/nsParser.h b/mozilla/htmlparser/src/nsParser.h index c2e0eac61d5..8c78adfd7f6 100644 --- a/mozilla/htmlparser/src/nsParser.h +++ b/mozilla/htmlparser/src/nsParser.h @@ -225,6 +225,12 @@ friend class CTokenHandler; */ virtual nsITokenizer* GetTokenizer(void); + /* + * The following two should be removed once our Meta Charset work complete + */ + static nsString gHackMetaCharset; + static nsString gHackMetaCharsetURL; + protected: /** diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp index 3d8929884a5..225daa642b3 100644 --- a/mozilla/parser/htmlparser/src/CNavDTD.cpp +++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp @@ -954,6 +954,8 @@ nsresult CNavDTD::WillHandleStartTag(CToken* aToken,eHTMLTags aTag,nsCParserNode nsAutoString theCharset; theValue.Mid(theCharset, charsetValueStart, charsetValueEnd - charsetValueStart); theScanner->SetDocumentCharset(theCharset, kCharsetFromMetaTag); + // XXX this should be delete after META charset really work + nsParser::gHackMetaCharset = theCharset; } //if } //if } diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp index c0d95d0c591..78b7e2fbefa 100644 --- a/mozilla/parser/htmlparser/src/nsParser.cpp +++ b/mozilla/parser/htmlparser/src/nsParser.cpp @@ -125,6 +125,9 @@ public: static CSharedParserObjects* gSharedParserObjects=0; +nsString nsParser::gHackMetaCharset = ""; +nsString nsParser::gHackMetaCharsetURL = ""; + //---------------------------------------- /** @@ -545,6 +548,7 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif charsetSource = kCharsetFromDocTypeDefault; + nsresult result=kBadURL; mDTDVerification=aVerifyEnabled; if(aURL) { @@ -552,6 +556,18 @@ nsresult nsParser::Parse(nsIURL* aURL,nsIStreamObserver* aListener,PRBool aVerif nsresult rv = aURL->GetSpec(&spec); if (rv != NS_OK) return rv; nsAutoString theName(spec); + + // XXX begin of meta tag charset hack + + if(theName.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals(""))) + { + charset = nsParser::gHackMetaCharset; + charsetSource = kCharsetFromMetaTag; + } + nsParser::gHackMetaCharsetURL = theName; + nsParser::gHackMetaCharset = ""; + // XXX end of meta tag charset hack + CParserContext* pc=new CParserContext(new nsScanner(theName,PR_FALSE, charset, charsetSource),aURL,aListener); if(pc) { pc->mMultipart=PR_TRUE; @@ -594,6 +610,17 @@ nsresult nsParser::Parse(fstream& aStream,PRBool aVerifyEnabled){ //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(""))) + { + charset = nsParser::gHackMetaCharset; + charsetSource = kCharsetFromMetaTag; + } + nsParser::gHackMetaCharsetURL = theUnknownFilename; + nsParser::gHackMetaCharset = ""; + // XXX end of meta tag charset hack + CParserContext* pc=new CParserContext(new nsScanner(theUnknownFilename,aStream, charset, charsetSource,PR_FALSE),&aStream,0); if(pc) { PushContext(*pc); @@ -645,6 +672,18 @@ nsresult nsParser::Parse(nsString& aSourceBuffer,void* aKey,const nsString& aCon // XXX We should really put if doc == html for the following line charset = "ISO-8859-1"; charsetSource = kCharsetFromDocTypeDefault; + + // XXX begin of meta tag charset hack + nsAutoString theFakeURL("fromString"); + if(theFakeURL.Equals(nsParser::gHackMetaCharsetURL) && (! nsParser::gHackMetaCharset.Equals(""))) + { + charset = nsParser::gHackMetaCharset; + charsetSource = 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! diff --git a/mozilla/parser/htmlparser/src/nsParser.h b/mozilla/parser/htmlparser/src/nsParser.h index c2e0eac61d5..8c78adfd7f6 100644 --- a/mozilla/parser/htmlparser/src/nsParser.h +++ b/mozilla/parser/htmlparser/src/nsParser.h @@ -225,6 +225,12 @@ friend class CTokenHandler; */ virtual nsITokenizer* GetTokenizer(void); + /* + * The following two should be removed once our Meta Charset work complete + */ + static nsString gHackMetaCharset; + static nsString gHackMetaCharsetURL; + protected: /**