CodingSystemKit.cxx revision 7c478bd95313f5f23a4c958a745db2134aa03244
// Copyright (c) 1997 James Clark
// See the file COPYING for copying permission.
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __GNUG__
#pragma implementation
#endif
#include "splib.h"
#include "CodingSystemKit.h"
#include "TranslateCodingSystem.h"
#ifdef SP_MULTI_BYTE
#include "UTF8CodingSystem.h"
#include "Fixed2CodingSystem.h"
#include "UnicodeCodingSystem.h"
#include "XMLCodingSystem.h"
#include "EUCJPCodingSystem.h"
#include "SJISCodingSystem.h"
#include "Big5CodingSystem.h"
#ifdef WIN32
#include "Win32CodingSystem.h"
#endif
#endif /* SP_MULTI_BYTE */
#include "IdentityCodingSystem.h"
#include "Owner.h"
#include <ctype.h>
#ifdef SP_NAMESPACE
namespace SP_NAMESPACE {
#endif
#ifdef SP_MULTI_BYTE
#endif
class CodingSystemKitImpl : public CodingSystemKit {
public:
CodingSystemKit *copy() const;
Char replacementChar() const;
const CodingSystem *
identityCodingSystem() const;
const InputCodingSystem *
identityInputCodingSystem() const;
const InputCodingSystem *
makeInputCodingSystem(const StringC &,
const CharsetInfo &,
const char *&) const;
const CodingSystem *
enum CodingSystemId {
utf8,
sjis,
big5,
ansi,
oem,
xml,
};
struct Entry {
const char *name;
};
const CharsetInfo &charset,
const char *key);
const char *key);
private:
const CodingSystem *
makeCodingSystem(CodingSystemId) const;
#ifdef SP_MULTI_BYTE
#ifdef WIN32
#endif
#endif /* SP_MULTI_BYTE */
static const Entry bctfTable_[];
enum { nEncodingsRequireUnicode = 8 };
static const Entry encodingTable_[];
};
};
#ifdef SP_MULTI_BYTE
};
};
};
};
};
};
};
};
};
};
};
};
};
};
#endif /* SP_MULTI_BYTE */
{ "IDENTITY", identity },
#ifdef SP_MULTI_BYTE
{ "FIXED-2", fixed2 },
{ "UTF-8", utf8 },
{ "EUC", eucBctf },
{ "SJIS", sjisBctf },
{ "BIG5", big5Bctf },
#endif /* SP_MULTI_BYTE */
{ 0, identity },
};
#ifdef SP_MULTI_BYTE
{ "UTF-8", utf8 },
{ "UCS-2", fixed2 },
{ "ISO-10646-UCS-2", fixed2 },
{ "UNICODE", unicode },
// We don't really support UTF-16, but treating it
// as Unicode should work for the most part.
{ "UTF-16", unicode },
{ "WINDOWS", ansi },
{ "MS-DOS", oem },
{ "WUNICODE", maybeUnicode },
{ "XML", xml },
// nEncodingsRequireUnicode = 8
{ "IS8859-1", iso8859_1 },
{ "ISO-8859-1", iso8859_1 },
{ "IS8859-2", iso8859_2 },
{ "ISO-8859-2", iso8859_2 },
{ "IS8859-3", iso8859_3 },
{ "ISO-8859-3", iso8859_3 },
{ "IS8859-4", iso8859_4 },
{ "ISO-8859-4", iso8859_4 },
{ "IS8859-5", iso8859_5 },
{ "ISO-8859-5", iso8859_5 },
{ "IS8859-6", iso8859_6 },
{ "ISO-8859-6", iso8859_6 },
{ "IS8859-7", iso8859_7 },
{ "ISO-8859-7", iso8859_7 },
{ "IS8859-8", iso8859_8 },
{ "ISO-8859-8", iso8859_8 },
{ "IS8859-9", iso8859_9 },
{ "ISO-8859-9", iso8859_9 },
{ "EUC-JP", eucjp },
{ "EUC-CN", euccn },
{ "GB2312", euccn },
{ "EUC-KR", euckr },
{ "SJIS", sjis },
{ "SHIFT_JIS", sjis },
{ "BIG5", big5 },
#endif /* SP_MULTI_BYTE */
{ 0, identity },
};
#ifdef SP_MULTI_BYTE
,
#ifdef WIN32
#endif
xmlCodingSystem_(this),
iso8859_1CodingSystem_(&identityCodingSystem_, iso8859_1Desc, &systemCharset_, 0x100, unicodeReplaceChar),
iso8859_2CodingSystem_(&identityCodingSystem_, iso8859_2Desc, &systemCharset_, 0x100, unicodeReplaceChar),
iso8859_3CodingSystem_(&identityCodingSystem_, iso8859_3Desc, &systemCharset_, 0x100, unicodeReplaceChar),
iso8859_4CodingSystem_(&identityCodingSystem_, iso8859_4Desc, &systemCharset_, 0x100, unicodeReplaceChar),
iso8859_5CodingSystem_(&identityCodingSystem_, iso8859_5Desc, &systemCharset_, 0x100, unicodeReplaceChar),
iso8859_6CodingSystem_(&identityCodingSystem_, iso8859_6Desc, &systemCharset_, 0x100, unicodeReplaceChar),
iso8859_7CodingSystem_(&identityCodingSystem_, iso8859_7Desc, &systemCharset_, 0x100, unicodeReplaceChar),
iso8859_8CodingSystem_(&identityCodingSystem_, iso8859_8Desc, &systemCharset_, 0x100, unicodeReplaceChar),
iso8859_9CodingSystem_(&identityCodingSystem_, iso8859_9Desc, &systemCharset_, 0x100, unicodeReplaceChar),
#endif /* SP_MULTI_BYTE */
{
p++) {
if (iter) {
}
}
}
}
}
{
return new CodingSystemKitImpl(systemCharsetDesc_);
}
{
if (isBctf)
return bctfTable_;
#ifdef SP_MULTI_BYTE
else if (systemCharsetDesc_ != iso10646Desc)
return encodingTable_ + nEncodingsRequireUnicode;
#endif
else
return encodingTable_;
}
const InputCodingSystem *
const CharsetInfo &charset,
const char *&key) const
{
return makeCodingSystem(p->id);
}
return 0;
}
const CharsetInfo &charset,
const char *key)
{
if (key[i] == '\0')
return 0;
return 0;
}
}
const CodingSystem *
CodingSystemKitImpl::makeCodingSystem(const char *s,
const
{
return makeCodingSystem(p->id);
return 0;
}
CodingSystemKitImpl::match(const char *s,
const char *key)
{
if (*s == '\0')
return 1;
}
return 0;
}
const CodingSystem *
{
switch (id) {
case identity:
return &identityCodingSystem_;
#ifdef SP_MULTI_BYTE
case fixed2:
return &fixed2CodingSystem_;
case utf8:
return &utf8CodingSystem_;
case unicode:
return &unicodeCodingSystem_;
case eucBctf:
return &eucBctf_;
case sjisBctf:
return &sjisBctf_;
case big5Bctf:
return &big5Bctf_;
case eucjp:
return &eucjpCodingSystem_;
case euccn:
return &euccnCodingSystem_;
case euckr:
return &euckrCodingSystem_;
case sjis:
return &sjisCodingSystem_;
case big5:
return &big5CodingSystem_;
case iso8859_1:
if (systemCharsetDesc_ == iso10646Desc)
return &identityCodingSystem_;
else
return &iso8859_1CodingSystem_;
case iso8859_2:
return &iso8859_2CodingSystem_;
case iso8859_3:
return &iso8859_3CodingSystem_;
case iso8859_4:
return &iso8859_4CodingSystem_;
case iso8859_5:
return &iso8859_5CodingSystem_;
case iso8859_6:
return &iso8859_6CodingSystem_;
case iso8859_7:
return &iso8859_7CodingSystem_;
case iso8859_8:
return &iso8859_8CodingSystem_;
case iso8859_9:
return &iso8859_9CodingSystem_;
case xml:
return &xmlCodingSystem_;
#ifdef WIN32
case ansi:
return &ansiCodingSystem_;
case oem:
return &oemCodingSystem_;
case maybeUnicode:
return &maybeUnicodeCodingSystem_;
#endif /* WIN32 */
#endif /* SP_MULTI_BYTE */
default:
break;
}
return 0;
}
const InputCodingSystem *
{
return &identityCodingSystem_;
}
const CodingSystem *
CodingSystemKitImpl::identityCodingSystem() const
{
return &identityCodingSystem_;
}
{
// FIXME should vary with systemCharset
#ifdef SP_MULTI_BYTE
return unicodeReplaceChar;
#else
return 0;
#endif
}
{
#ifdef SP_MULTI_BYTE
return new CodingSystemKitImpl(jis2Desc);
#endif
return new CodingSystemKitImpl(iso10646Desc);
}
{
}
#ifdef SP_NAMESPACE
}
#endif