From 783aed388886f2f3a5acaac762ef3277e670e1ce Mon Sep 17 00:00:00 2001 From: "rickg%netscape.com" Date: Wed, 17 May 2000 00:51:26 +0000 Subject: [PATCH] one more tweak to entity redction code git-svn-id: svn://10.0.0.236/trunk@70220 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/document/src/nsHTMLContentSink.cpp | 126 +----------------- .../html/document/src/nsHTMLContentSink.cpp | 126 +----------------- 2 files changed, 14 insertions(+), 238 deletions(-) diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp index b265086ecea..2140dc25c01 100644 --- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp @@ -498,123 +498,6 @@ HTMLContentSink::SinkTraceNode(PRUint32 aBit, } #endif -#if 0 -void -HTMLContentSink::ReduceEntities(nsString& aString) -{ - if (mParser) { - nsCOMPtr dtd; - - nsresult rv = mParser->GetDTD(getter_AddRefs(dtd)); - - if (NS_SUCCEEDED(rv)) { - - // Reduce any entities - // XXX Note: as coded today, this will only convert well formed - // entities. This may not be compatible enough. - // XXX there is a table in navigator that translates some numeric entities - // should we be doing that? If so then it needs to live in two places (bad) - // so we should add a translate numeric entity method from the parser... - char cbuf[100]; - PRInt32 i = 0; - while ((PRUint32)i < aString.Length()) { - // If we have the start of an entity (and it's not at the end of - // our string) then translate the entity into it's unicode value. - if ((aString.CharAt(i++) == '&') && ((PRUint32)i < aString.Length())) { - PRInt32 start = i - 1; - PRUnichar e = aString.CharAt(i); - if (e == '#') { - // Convert a numeric character reference - i++; - char* cp = cbuf; - char* limit = cp + sizeof(cbuf) - 1; - PRBool ok = PR_FALSE; - PRInt32 slen = aString.Length(); - while ((i < slen) && (cp < limit)) { - e = aString.CharAt(i); - if (e == ';') { - i++; - ok = PR_TRUE; - break; - } - if ((e >= '0') && (e <= '9')) { - *cp++ = char(e); - i++; - continue; - } - break; - } - if (!ok || (cp == cbuf)) { - continue; - } - *cp = '\0'; - if (cp - cbuf > 5) { - continue; - } - PRInt32 ch = PRInt32( ::atoi(cbuf) ); - if (ch > 65535) { - continue; - } - - // Remove entity from string and replace it with the integer - // value. - aString.Cut(start, i - start); - aString.Insert(PRUnichar(ch), start); - i = start + 1; - } - else if (((e >= 'A') && (e <= 'Z')) || ((e >= 'a') && (e <= 'z'))) { - // Convert a named entity - i++; - char* cp = cbuf; - char* limit = cp + sizeof(cbuf) - 1; - *cp++ = char(e); - PRBool ok = PR_FALSE; - PRInt32 slen = aString.Length(); - while ((i < slen) && (cp < limit)) { - e = aString.CharAt(i); - if (e == ';') { - i++; - ok = PR_TRUE; - break; - } - if (((e >= '0') && (e <= '9')) || - ((e >= 'A') && (e <= 'Z')) || - ((e >= 'a') && (e <= 'z'))) { - *cp++ = char(e); - i++; - continue; - } - break; - } - if (!ok || (cp == cbuf)) { - continue; - } - *cp = '\0'; - PRInt32 ch; - nsAutoString str; str.AssignWithConversion(cbuf); - dtd->ConvertEntityToUnicode(str, &ch); - - if (ch < 0) { - continue; - } - - // Remove entity from string and replace it with the integer - // value. - aString.Cut(start, i - start); - aString.Insert(PRUnichar(ch), start); - i = start + 1; - } - else if (e == '{') { - // Convert a script entity - // XXX write me! - } - } - } - } - } -} - -#else void HTMLContentSink::ReduceEntities(nsString& aString) { if (mParser) { @@ -696,14 +579,19 @@ void HTMLContentSink::ReduceEntities(nsString& aString) { } //while if(0 dtd; - - nsresult rv = mParser->GetDTD(getter_AddRefs(dtd)); - - if (NS_SUCCEEDED(rv)) { - - // Reduce any entities - // XXX Note: as coded today, this will only convert well formed - // entities. This may not be compatible enough. - // XXX there is a table in navigator that translates some numeric entities - // should we be doing that? If so then it needs to live in two places (bad) - // so we should add a translate numeric entity method from the parser... - char cbuf[100]; - PRInt32 i = 0; - while ((PRUint32)i < aString.Length()) { - // If we have the start of an entity (and it's not at the end of - // our string) then translate the entity into it's unicode value. - if ((aString.CharAt(i++) == '&') && ((PRUint32)i < aString.Length())) { - PRInt32 start = i - 1; - PRUnichar e = aString.CharAt(i); - if (e == '#') { - // Convert a numeric character reference - i++; - char* cp = cbuf; - char* limit = cp + sizeof(cbuf) - 1; - PRBool ok = PR_FALSE; - PRInt32 slen = aString.Length(); - while ((i < slen) && (cp < limit)) { - e = aString.CharAt(i); - if (e == ';') { - i++; - ok = PR_TRUE; - break; - } - if ((e >= '0') && (e <= '9')) { - *cp++ = char(e); - i++; - continue; - } - break; - } - if (!ok || (cp == cbuf)) { - continue; - } - *cp = '\0'; - if (cp - cbuf > 5) { - continue; - } - PRInt32 ch = PRInt32( ::atoi(cbuf) ); - if (ch > 65535) { - continue; - } - - // Remove entity from string and replace it with the integer - // value. - aString.Cut(start, i - start); - aString.Insert(PRUnichar(ch), start); - i = start + 1; - } - else if (((e >= 'A') && (e <= 'Z')) || ((e >= 'a') && (e <= 'z'))) { - // Convert a named entity - i++; - char* cp = cbuf; - char* limit = cp + sizeof(cbuf) - 1; - *cp++ = char(e); - PRBool ok = PR_FALSE; - PRInt32 slen = aString.Length(); - while ((i < slen) && (cp < limit)) { - e = aString.CharAt(i); - if (e == ';') { - i++; - ok = PR_TRUE; - break; - } - if (((e >= '0') && (e <= '9')) || - ((e >= 'A') && (e <= 'Z')) || - ((e >= 'a') && (e <= 'z'))) { - *cp++ = char(e); - i++; - continue; - } - break; - } - if (!ok || (cp == cbuf)) { - continue; - } - *cp = '\0'; - PRInt32 ch; - nsAutoString str; str.AssignWithConversion(cbuf); - dtd->ConvertEntityToUnicode(str, &ch); - - if (ch < 0) { - continue; - } - - // Remove entity from string and replace it with the integer - // value. - aString.Cut(start, i - start); - aString.Insert(PRUnichar(ch), start); - i = start + 1; - } - else if (e == '{') { - // Convert a script entity - // XXX write me! - } - } - } - } - } -} - -#else void HTMLContentSink::ReduceEntities(nsString& aString) { if (mParser) { @@ -696,14 +579,19 @@ void HTMLContentSink::ReduceEntities(nsString& aString) { } //while if(0