| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com> | 3 * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com> |
| 4 * Copyright (C) 2007-2009 Torch Mobile, Inc. | 4 * Copyright (C) 2007-2009 Torch Mobile, Inc. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 26 */ | 26 */ |
| 27 | 27 |
| 28 #include "config.h" | 28 #include "config.h" |
| 29 #include "wtf/text/TextEncoding.h" | 29 #include "wtf/text/TextEncoding.h" |
| 30 | 30 |
| 31 #include "wtf/text/TextEncodingRegistry.h" | 31 #include "wtf/text/TextEncodingRegistry.h" |
| 32 #include <unicode/unorm.h> | 32 #include <unicode/unorm.h> |
| 33 #include "wtf/OwnPtr.h" | 33 #include "wtf/OwnPtr.h" |
| 34 #include "wtf/StdLibExtras.h" | 34 #include "wtf/StdLibExtras.h" |
| 35 #include "wtf/Threading.h" |
| 35 #include "wtf/text/CString.h" | 36 #include "wtf/text/CString.h" |
| 36 #include "wtf/text/WTFString.h" | 37 #include "wtf/text/WTFString.h" |
| 37 | 38 |
| 38 namespace WTF { | 39 namespace WTF { |
| 39 | 40 |
| 40 static const TextEncoding& UTF7Encoding() | 41 static const TextEncoding& UTF7Encoding() |
| 41 { | 42 { |
| 42 static TextEncoding globalUTF7Encoding("UTF-7"); | 43 AtomicallyInitializedStatic(TextEncoding, globalUTF7Encoding = *new TextEnco
ding("UTF-7")); |
| 43 return globalUTF7Encoding; | 44 return globalUTF7Encoding; |
| 44 } | 45 } |
| 45 | 46 |
| 46 TextEncoding::TextEncoding(const char* name) | 47 TextEncoding::TextEncoding(const char* name) |
| 47 : m_name(atomicCanonicalTextEncodingName(name)) | 48 : m_name(atomicCanonicalTextEncodingName(name)) |
| 48 { | 49 { |
| 49 // Aliases are valid, but not "replacement" itself. | 50 // Aliases are valid, but not "replacement" itself. |
| 50 if (m_name && isReplacementEncoding(name)) | 51 if (m_name && isReplacementEncoding(name)) |
| 51 m_name = 0; | 52 m_name = 0; |
| 52 } | 53 } |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 // but it's fraught with problems and we'd rather steer clear of it. | 168 // but it's fraught with problems and we'd rather steer clear of it. |
| 168 const TextEncoding& TextEncoding::encodingForFormSubmission() const | 169 const TextEncoding& TextEncoding::encodingForFormSubmission() const |
| 169 { | 170 { |
| 170 if (isNonByteBasedEncoding() || isUTF7Encoding()) | 171 if (isNonByteBasedEncoding() || isUTF7Encoding()) |
| 171 return UTF8Encoding(); | 172 return UTF8Encoding(); |
| 172 return *this; | 173 return *this; |
| 173 } | 174 } |
| 174 | 175 |
| 175 const TextEncoding& ASCIIEncoding() | 176 const TextEncoding& ASCIIEncoding() |
| 176 { | 177 { |
| 177 static TextEncoding globalASCIIEncoding("ASCII"); | 178 AtomicallyInitializedStatic(TextEncoding, globalASCIIEncoding = *new TextEnc
oding("ASCII")); |
| 178 return globalASCIIEncoding; | 179 return globalASCIIEncoding; |
| 179 } | 180 } |
| 180 | 181 |
| 181 const TextEncoding& Latin1Encoding() | 182 const TextEncoding& Latin1Encoding() |
| 182 { | 183 { |
| 183 static TextEncoding globalLatin1Encoding("latin1"); | 184 AtomicallyInitializedStatic(TextEncoding, globalLatin1Encoding = *new TextEn
coding("latin1")); |
| 184 return globalLatin1Encoding; | 185 return globalLatin1Encoding; |
| 185 } | 186 } |
| 186 | 187 |
| 187 const TextEncoding& UTF16BigEndianEncoding() | 188 const TextEncoding& UTF16BigEndianEncoding() |
| 188 { | 189 { |
| 189 static TextEncoding globalUTF16BigEndianEncoding("UTF-16BE"); | 190 AtomicallyInitializedStatic(TextEncoding, globalUTF16BigEndianEncoding = *ne
w TextEncoding("UTF-16BE")); |
| 190 return globalUTF16BigEndianEncoding; | 191 return globalUTF16BigEndianEncoding; |
| 191 } | 192 } |
| 192 | 193 |
| 193 const TextEncoding& UTF16LittleEndianEncoding() | 194 const TextEncoding& UTF16LittleEndianEncoding() |
| 194 { | 195 { |
| 195 static TextEncoding globalUTF16LittleEndianEncoding("UTF-16LE"); | 196 AtomicallyInitializedStatic(TextEncoding, globalUTF16LittleEndianEncoding =
*new TextEncoding("UTF-16LE")); |
| 196 return globalUTF16LittleEndianEncoding; | 197 return globalUTF16LittleEndianEncoding; |
| 197 } | 198 } |
| 198 | 199 |
| 199 const TextEncoding& UTF32BigEndianEncoding() | 200 const TextEncoding& UTF32BigEndianEncoding() |
| 200 { | 201 { |
| 201 static TextEncoding globalUTF32BigEndianEncoding("UTF-32BE"); | 202 AtomicallyInitializedStatic(TextEncoding, globalUTF32BigEndianEncoding = *ne
w TextEncoding("UTF-32BE")); |
| 202 return globalUTF32BigEndianEncoding; | 203 return globalUTF32BigEndianEncoding; |
| 203 } | 204 } |
| 204 | 205 |
| 205 const TextEncoding& UTF32LittleEndianEncoding() | 206 const TextEncoding& UTF32LittleEndianEncoding() |
| 206 { | 207 { |
| 207 static TextEncoding globalUTF32LittleEndianEncoding("UTF-32LE"); | 208 AtomicallyInitializedStatic(TextEncoding, globalUTF32LittleEndianEncoding =
*new TextEncoding("UTF-32LE")); |
| 208 return globalUTF32LittleEndianEncoding; | 209 return globalUTF32LittleEndianEncoding; |
| 209 } | 210 } |
| 210 | 211 |
| 211 const TextEncoding& UTF8Encoding() | 212 const TextEncoding& UTF8Encoding() |
| 212 { | 213 { |
| 213 static TextEncoding globalUTF8Encoding("UTF-8"); | 214 AtomicallyInitializedStatic(TextEncoding, globalUTF8Encoding = *new TextEnco
ding("UTF-8")); |
| 214 ASSERT(globalUTF8Encoding.isValid()); | 215 ASSERT(globalUTF8Encoding.isValid()); |
| 215 return globalUTF8Encoding; | 216 return globalUTF8Encoding; |
| 216 } | 217 } |
| 217 | 218 |
| 218 const TextEncoding& WindowsLatin1Encoding() | 219 const TextEncoding& WindowsLatin1Encoding() |
| 219 { | 220 { |
| 220 static TextEncoding globalWindowsLatin1Encoding("WinLatin1"); | 221 AtomicallyInitializedStatic(TextEncoding, globalWindowsLatin1Encoding = *new
TextEncoding("WinLatin1")); |
| 221 return globalWindowsLatin1Encoding; | 222 return globalWindowsLatin1Encoding; |
| 222 } | 223 } |
| 223 | 224 |
| 224 } // namespace WTF | 225 } // namespace WTF |
| OLD | NEW |