Reviewed by Darin.
[WebKit-https.git] / WebCore / platform / TextEncoding.cpp
1 /*
2  * Copyright (C) 2004, 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #include "config.h"
27 #include "TextEncoding.h"
28
29 #include "CharsetNames.h"
30 #include <kxmlcore/Assertions.h>
31 #include <kxmlcore/HashSet.h>
32 #include "StreamingTextDecoder.h"
33
34 namespace WebCore {
35
36 const UniChar replacementCharacter = 0xFFFD;
37 const UniChar BOM = 0xFEFF;
38
39 static const int ConversionBufferSize = 16384;
40
41 TextEncoding::TextEncoding(const char* name, bool eightBitOnly)
42 {
43     m_encodingID = textEncodingIDFromCharsetName(name, &m_flags);
44     if (eightBitOnly && m_encodingID == UTF16Encoding)
45         m_encodingID = UTF8Encoding;
46 }
47
48 const char* TextEncoding::name() const
49 {
50     return charsetNameFromTextEncodingID(m_encodingID);
51 }
52
53 inline TextEncodingID effectiveEncoding(TextEncodingID encoding)
54 {
55     if (encoding == Latin1Encoding || encoding == ASCIIEncoding)
56         return WinLatin1Encoding;
57     return encoding;
58 }
59
60 QChar TextEncoding::backslashAsCurrencySymbol() const
61 {
62     if (m_flags & BackslashIsYen)
63         return 0x00A5; // yen sign
64  
65     return '\\';
66 }
67
68 QString TextEncoding::toUnicode(const char *chs, int len) const
69 {
70     return StreamingTextDecoder(*this).toUnicode(chs, len, true);
71 }
72
73 QString TextEncoding::toUnicode(const ByteArray &qba, int len) const
74 {
75     return StreamingTextDecoder(*this).toUnicode(qba, len, true);
76 }
77
78 } // namespace WebCore