2007-07-06 Jungshik Shin <jungshik.shin@gmail.com>
[WebKit-https.git] / WebCore / platform / TextEncoding.cpp
index d4897bb..d440b9d 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (C) 2004, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved.
  * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com>
  *
  * Redistribution and use in source and binary forms, with or without
  * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com>
  *
  * Redistribution and use in source and binary forms, with or without
 
 #include "CString.h"
 #include "PlatformString.h"
 
 #include "CString.h"
 #include "PlatformString.h"
-#include "StreamingTextDecoder.h"
+#include "TextCodec.h"
 #include "TextDecoder.h"
 #include "TextEncodingRegistry.h"
 #include "TextDecoder.h"
 #include "TextEncodingRegistry.h"
+#if USE(ICU_UNICODE)
 #include <unicode/unorm.h>
 #include <unicode/unorm.h>
+#elif USE(QT4_UNICODE)
+#include <QString>
+#endif
 #include <wtf/HashSet.h>
 #include <wtf/OwnPtr.h>
 
 #include <wtf/HashSet.h>
 #include <wtf/OwnPtr.h>
 
@@ -71,6 +75,7 @@ CString TextEncoding::encode(const UChar* characters, size_t length, bool allowE
     if (!length)
         return "";
 
     if (!length)
         return "";
 
+#if USE(ICU_UNICODE)
     // FIXME: What's the right place to do normalization?
     // It's a little strange to do it inside the encode function.
     // Perhaps normalization should be an explicit step done before calling encode.
     // FIXME: What's the right place to do normalization?
     // It's a little strange to do it inside the encode function.
     // Perhaps normalization should be an explicit step done before calling encode.
@@ -95,18 +100,28 @@ CString TextEncoding::encode(const UChar* characters, size_t length, bool allowE
         source = normalizedCharacters.data();
         sourceLength = normalizedLength;
     }
         source = normalizedCharacters.data();
         sourceLength = normalizedLength;
     }
-
     return newTextCodec(*this)->encode(source, sourceLength, allowEntities);
     return newTextCodec(*this)->encode(source, sourceLength, allowEntities);
+#elif USE(QT4_UNICODE)
+    QString str(reinterpret_cast<const QChar*>(characters), length);
+    str = str.normalized(QString::NormalizationForm_C);
+    return newTextCodec(*this)->encode(str.utf16(), str.length(), allowEntities);
+#endif
 }
 
 bool TextEncoding::usesVisualOrdering() const
 {
 }
 
 bool TextEncoding::usesVisualOrdering() const
 {
+    if (noExtendedTextEncodingNameUsed())
+        return false;
+
     static const char* const a = atomicCanonicalTextEncodingName("ISO-8859-8");
     return m_name == a;
 }
 
 bool TextEncoding::isJapanese() const
 {
     static const char* const a = atomicCanonicalTextEncodingName("ISO-8859-8");
     return m_name == a;
 }
 
 bool TextEncoding::isJapanese() const
 {
+    if (noExtendedTextEncodingNameUsed())
+        return false;
+
     static HashSet<const char*> set;
     if (set.isEmpty()) {
         addEncodingName(set, "x-mac-japanese");
     static HashSet<const char*> set;
     if (set.isEmpty()) {
         addEncodingName(set, "x-mac-japanese");
@@ -129,6 +144,9 @@ bool TextEncoding::isJapanese() const
 
 UChar TextEncoding::backslashAsCurrencySymbol() const
 {
 
 UChar TextEncoding::backslashAsCurrencySymbol() const
 {
+    if (noExtendedTextEncodingNameUsed())
+        return '\\';
+
     // The text encodings below treat backslash as a currency symbol.
     // See http://blogs.msdn.com/michkap/archive/2005/09/17/469941.aspx for more information.
     static const char* const a = atomicCanonicalTextEncodingName("Shift_JIS_X0213-2000");
     // The text encodings below treat backslash as a currency symbol.
     // See http://blogs.msdn.com/michkap/archive/2005/09/17/469941.aspx for more information.
     static const char* const a = atomicCanonicalTextEncodingName("Shift_JIS_X0213-2000");
@@ -167,6 +185,19 @@ const TextEncoding& UTF16LittleEndianEncoding()
     return globalUTF16LittleEndianEncoding;
 }
 
     return globalUTF16LittleEndianEncoding;
 }
 
+const TextEncoding& UTF32BigEndianEncoding()
+{
+    static TextEncoding globalUTF32BigEndianEncoding("UTF-32BE");
+    return globalUTF32BigEndianEncoding;
+}
+
+const TextEncoding& UTF32LittleEndianEncoding()
+{
+    static TextEncoding globalUTF32LittleEndianEncoding("UTF-32LE");
+    return globalUTF32LittleEndianEncoding;
+}
+
+
 const TextEncoding& UTF8Encoding()
 {
     static TextEncoding globalUTF8Encoding("UTF-8");
 const TextEncoding& UTF8Encoding()
 {
     static TextEncoding globalUTF8Encoding("UTF-8");