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 |