diff --git a/mozilla/htmlparser/src/CNavDelegate.cpp b/mozilla/htmlparser/src/CNavDelegate.cpp index 1110aefb8e5..6bdd5784c48 100644 --- a/mozilla/htmlparser/src/CNavDelegate.cpp +++ b/mozilla/htmlparser/src/CNavDelegate.cpp @@ -237,7 +237,7 @@ PRInt32 CNavDelegate::ConsumeEntity(PRUnichar aChar,CScanner& aScanner,CToken*& } else if(kHashsign==ch) { aToken = new CEntityToken(nsAutoString("")); - result=aToken->Consume(ch,aScanner); + result=aToken->Consume(0,aScanner); } else { //oops, we're actually looking at plain text... diff --git a/mozilla/htmlparser/src/nsHTMLTokens.cpp b/mozilla/htmlparser/src/nsHTMLTokens.cpp index 06dce74820b..920230fa7e9 100644 --- a/mozilla/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/htmlparser/src/nsHTMLTokens.cpp @@ -939,8 +939,8 @@ CEntityToken::CEntityToken(const nsString& aName) : CHTMLToken(aName) { * @return error result */ PRInt32 CEntityToken::Consume(PRUnichar aChar, CScanner& aScanner) { - - mTextValue=aChar; + if(aChar) + mTextValue=aChar; PRInt32 result=ConsumeEntity(aChar,mTextValue,aScanner); return result; }; @@ -1013,17 +1013,27 @@ PRInt32 CEntityToken::ConsumeEntity(PRUnichar aChar,nsString& aString,CScanner& * @return */ PRInt32 CEntityToken::TranslateToUnicodeStr(nsString& aString) { - char* cp = mTextValue.ToNewCString(); - PRInt32 index=FindEntityIndex(cp); - if(kNotFound!=index) { - PRUnichar ch=gStrToUnicodeTable[index].fValue; - aString=ch; - } else { -#ifdef GESS_MACHINE - index=TranslateExtendedEntity(cp,aString); -#endif + PRInt32 index=0; + if(aString.IsDigit(mTextValue[0])) { + PRInt32 err=0; + index=mTextValue.ToInteger(&err); + if(0==err) + aString.Append(PRUnichar(index)); + } + else { + char* cp = mTextValue.ToNewCString(); + index=FindEntityIndex(cp); + if(kNotFound!=index) { + PRUnichar ch=gStrToUnicodeTable[index].fValue; + aString=ch; + } + else { +#ifdef GESS_MACHINE + index=TranslateExtendedEntity(cp,aString); +#endif + } + delete cp; } - delete cp; return index; } diff --git a/mozilla/parser/htmlparser/src/CNavDelegate.cpp b/mozilla/parser/htmlparser/src/CNavDelegate.cpp index 1110aefb8e5..6bdd5784c48 100644 --- a/mozilla/parser/htmlparser/src/CNavDelegate.cpp +++ b/mozilla/parser/htmlparser/src/CNavDelegate.cpp @@ -237,7 +237,7 @@ PRInt32 CNavDelegate::ConsumeEntity(PRUnichar aChar,CScanner& aScanner,CToken*& } else if(kHashsign==ch) { aToken = new CEntityToken(nsAutoString("")); - result=aToken->Consume(ch,aScanner); + result=aToken->Consume(0,aScanner); } else { //oops, we're actually looking at plain text... diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp index 06dce74820b..920230fa7e9 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp @@ -939,8 +939,8 @@ CEntityToken::CEntityToken(const nsString& aName) : CHTMLToken(aName) { * @return error result */ PRInt32 CEntityToken::Consume(PRUnichar aChar, CScanner& aScanner) { - - mTextValue=aChar; + if(aChar) + mTextValue=aChar; PRInt32 result=ConsumeEntity(aChar,mTextValue,aScanner); return result; }; @@ -1013,17 +1013,27 @@ PRInt32 CEntityToken::ConsumeEntity(PRUnichar aChar,nsString& aString,CScanner& * @return */ PRInt32 CEntityToken::TranslateToUnicodeStr(nsString& aString) { - char* cp = mTextValue.ToNewCString(); - PRInt32 index=FindEntityIndex(cp); - if(kNotFound!=index) { - PRUnichar ch=gStrToUnicodeTable[index].fValue; - aString=ch; - } else { -#ifdef GESS_MACHINE - index=TranslateExtendedEntity(cp,aString); -#endif + PRInt32 index=0; + if(aString.IsDigit(mTextValue[0])) { + PRInt32 err=0; + index=mTextValue.ToInteger(&err); + if(0==err) + aString.Append(PRUnichar(index)); + } + else { + char* cp = mTextValue.ToNewCString(); + index=FindEntityIndex(cp); + if(kNotFound!=index) { + PRUnichar ch=gStrToUnicodeTable[index].fValue; + aString=ch; + } + else { +#ifdef GESS_MACHINE + index=TranslateExtendedEntity(cp,aString); +#endif + } + delete cp; } - delete cp; return index; }