#ifndef TextEncoding_H
#define TextEncoding_H
#include "DeprecatedString.h"
namespace WebCore {
#if PLATFORM(MAC)
typedef CFStringEncoding TextEncodingID;
const TextEncodingID InvalidEncoding = kCFStringEncodingInvalidId;
const TextEncodingID InvalidEncoding2 = 0xfffffffeU;
const TextEncodingID UTF8Encoding = kCFStringEncodingUTF8;
const TextEncodingID UTF16Encoding = kCFStringEncodingUnicode;
const TextEncodingID Latin1Encoding = kCFStringEncodingISOLatin1;
const TextEncodingID ASCIIEncoding = kCFStringEncodingASCII;
const TextEncodingID WinLatin1Encoding = kCFStringEncodingWindowsLatin1;
#else
enum TextEncodingID {
InvalidEncoding2 = -2,
InvalidEncoding = -1,
UTF8Encoding,
UTF16Encoding,
Latin1Encoding,
ASCIIEncoding,
WinLatin1Encoding
};
#endif
enum TextEncodingFlags {
NoEncodingFlags = 0,
VisualOrdering = 1,
BigEndian = 2,
LittleEndian = 4,
IsJapanese = 8,
BackslashIsYen = 16
};
class TextEncoding {
public:
enum {
EightBitOnly = true
};
explicit TextEncoding(TextEncodingID encodingID, TextEncodingFlags flags = NoEncodingFlags)
: m_encodingID(encodingID)
, m_flags(flags)
{
}
explicit TextEncoding(const char*, bool eightBitOnly = false);
TextEncoding effectiveEncoding() const;
bool isValid() const { return m_encodingID != InvalidEncoding; }
const char* name() const;
bool usesVisualOrdering() const { return m_flags & VisualOrdering; }
bool isJapanese() const { return m_flags & IsJapanese; }
UChar backslashAsCurrencySymbol() const;
DeprecatedCString fromUnicode(const DeprecatedString&, bool allowEntities = false) const;
DeprecatedString toUnicode(const char*, int length) const;
TextEncodingID encodingID() const { return m_encodingID; }
TextEncodingFlags flags() const { return m_flags; }
private:
TextEncodingID m_encodingID;
TextEncodingFlags m_flags;
};
inline bool operator==(const TextEncoding& a, const TextEncoding& b)
{
return a.encodingID() == b.encodingID() && a.flags() == b.flags();
}
inline bool operator!=(const TextEncoding& a, const TextEncoding& b)
{
return a.encodingID() != b.encodingID() || a.flags() != b.flags();
}
}
#endif // TextEncoding_H