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. |
11 * 2. Redistributions in binary form must reproduce the above copyright | 11 * 2. Redistributions in binary form must reproduce the above copyright |
12 * notice, this list of conditions and the following disclaimer in the | 12 * notice, this list of conditions and the following disclaimer in the |
13 * documentation and/or other materials provided with the distribution. | 13 * documentation and/or other materials provided with the distribution. |
14 * | 14 * |
15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY | 15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY |
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR | 18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR |
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
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/TextCodec.h" | 31 #include "wtf/text/TextCodec.h" |
32 #include "wtf/text/TextEncodingRegistry.h" | 32 #include "wtf/text/TextEncodingRegistry.h" |
33 #include <unicode/unorm.h> | 33 #include <unicode/unorm.h> |
34 #include "wtf/OwnPtr.h" | 34 #include "wtf/OwnPtr.h" |
35 #include "wtf/StdLibExtras.h" | 35 #include "wtf/StdLibExtras.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 } | 118 } |
119 | 119 |
120 return newTextCodec(*this)->encode(source, length, handling); | 120 return newTextCodec(*this)->encode(source, length, handling); |
121 } | 121 } |
122 | 122 |
123 const char* TextEncoding::domName() const | 123 const char* TextEncoding::domName() const |
124 { | 124 { |
125 if (noExtendedTextEncodingNameUsed()) | 125 if (noExtendedTextEncodingNameUsed()) |
126 return m_name; | 126 return m_name; |
127 | 127 |
128 // We treat EUC-KR as windows-949 (its superset), but need to expose | 128 // We treat EUC-KR as windows-949 (its superset), but need to expose |
129 // the name 'EUC-KR' because the name 'windows-949' is not recognized by | 129 // the name 'EUC-KR' because the name 'windows-949' is not recognized by |
130 // most Korean web servers even though they do use the encoding | 130 // most Korean web servers even though they do use the encoding |
131 // 'windows-949' with the name 'EUC-KR'. | 131 // 'windows-949' with the name 'EUC-KR'. |
132 // FIXME: This is not thread-safe. At the moment, this function is | 132 // FIXME: This is not thread-safe. At the moment, this function is |
133 // only accessed in a single thread, but eventually has to be made | 133 // only accessed in a single thread, but eventually has to be made |
134 // thread-safe along with usesVisualOrdering(). | 134 // thread-safe along with usesVisualOrdering(). |
135 static const char* const a = atomicCanonicalTextEncodingName("windows-949"); | 135 static const char* const a = atomicCanonicalTextEncodingName("windows-949"); |
136 if (m_name == a) | 136 if (m_name == a) |
137 return "EUC-KR"; | 137 return "EUC-KR"; |
138 return m_name; | 138 return m_name; |
139 } | 139 } |
140 | 140 |
141 bool TextEncoding::usesVisualOrdering() const | 141 bool TextEncoding::usesVisualOrdering() const |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 if (noExtendedTextEncodingNameUsed()) | 175 if (noExtendedTextEncodingNameUsed()) |
176 return false; | 176 return false; |
177 | 177 |
178 return *this == UTF7Encoding(); | 178 return *this == UTF7Encoding(); |
179 } | 179 } |
180 | 180 |
181 const TextEncoding& TextEncoding::closestByteBasedEquivalent() const | 181 const TextEncoding& TextEncoding::closestByteBasedEquivalent() const |
182 { | 182 { |
183 if (isNonByteBasedEncoding()) | 183 if (isNonByteBasedEncoding()) |
184 return UTF8Encoding(); | 184 return UTF8Encoding(); |
185 return *this; | 185 return *this; |
186 } | 186 } |
187 | 187 |
188 // HTML5 specifies that UTF-8 be used in form submission when a form is | 188 // HTML5 specifies that UTF-8 be used in form submission when a form is |
189 // is a part of a document in UTF-16 probably because UTF-16 is not a | 189 // is a part of a document in UTF-16 probably because UTF-16 is not a |
190 // byte-based encoding and can contain 0x00. By extension, the same | 190 // byte-based encoding and can contain 0x00. By extension, the same |
191 // should be done for UTF-32. In case of UTF-7, it is a byte-based encoding, | 191 // should be done for UTF-32. In case of UTF-7, it is a byte-based encoding, |
192 // but it's fraught with problems and we'd rather steer clear of it. | 192 // but it's fraught with problems and we'd rather steer clear of it. |
193 const TextEncoding& TextEncoding::encodingForFormSubmission() const | 193 const TextEncoding& TextEncoding::encodingForFormSubmission() const |
194 { | 194 { |
195 if (isNonByteBasedEncoding() || isUTF7Encoding()) | 195 if (isNonByteBasedEncoding() || isUTF7Encoding()) |
196 return UTF8Encoding(); | 196 return UTF8Encoding(); |
197 return *this; | 197 return *this; |
198 } | 198 } |
199 | 199 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 return globalUTF8Encoding; | 240 return globalUTF8Encoding; |
241 } | 241 } |
242 | 242 |
243 const TextEncoding& WindowsLatin1Encoding() | 243 const TextEncoding& WindowsLatin1Encoding() |
244 { | 244 { |
245 static TextEncoding globalWindowsLatin1Encoding("WinLatin1"); | 245 static TextEncoding globalWindowsLatin1Encoding("WinLatin1"); |
246 return globalWindowsLatin1Encoding; | 246 return globalWindowsLatin1Encoding; |
247 } | 247 } |
248 | 248 |
249 } // namespace WTF | 249 } // namespace WTF |
OLD | NEW |