35 #include <unicode/unistr.h>
51 scsuConv = ucnv_open(
"SCSU", &err);
53 utf8Conv = ucnv_open(
"UTF-8", &err);
68 unsigned short SCSUUTF8::start[] = {0x0000,0x0080,0x0100,0x0300,0x2000,0x2080,0x2100,0x3000};
69 unsigned short SCSUUTF8::slide[] = {0x0080,0x00C0,0x0400,0x0600,0x0900,0x3040,0x30A0,0xFF00};
71 0x0000, 0x0080, 0x0100, 0x0180, 0x0200, 0x0280, 0x0300, 0x0380,
72 0x0400, 0x0480, 0x0500, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780,
73 0x0800, 0x0880, 0x0900, 0x0980, 0x0A00, 0x0A80, 0x0B00, 0x0B80,
74 0x0C00, 0x0C80, 0x0D00, 0x0D80, 0x0E00, 0x0E80, 0x0F00, 0x0F80,
75 0x1000, 0x1080, 0x1100, 0x1180, 0x1200, 0x1280, 0x1300, 0x1380,
76 0x1400, 0x1480, 0x1500, 0x1580, 0x1600, 0x1680, 0x1700, 0x1780,
77 0x1800, 0x1880, 0x1900, 0x1980, 0x1A00, 0x1A80, 0x1B00, 0x1B80,
78 0x1C00, 0x1C80, 0x1D00, 0x1D80, 0x1E00, 0x1E80, 0x1F00, 0x1F80,
79 0x2000, 0x2080, 0x2100, 0x2180, 0x2200, 0x2280, 0x2300, 0x2380,
80 0x2400, 0x2480, 0x2500, 0x2580, 0x2600, 0x2680, 0x2700, 0x2780,
81 0x2800, 0x2880, 0x2900, 0x2980, 0x2A00, 0x2A80, 0x2B00, 0x2B80,
82 0x2C00, 0x2C80, 0x2D00, 0x2D80, 0x2E00, 0x2E80, 0x2F00, 0x2F80,
83 0x3000, 0x3080, 0x3100, 0x3180, 0x3200, 0x3280, 0x3300, 0x3800,
84 0xE000, 0xE080, 0xE100, 0xE180, 0xE200, 0xE280, 0xE300, 0xE380,
85 0xE400, 0xE480, 0xE500, 0xE580, 0xE600, 0xE680, 0xE700, 0xE780,
86 0xE800, 0xE880, 0xE900, 0xE980, 0xEA00, 0xEA80, 0xEB00, 0xEB80,
87 0xEC00, 0xEC80, 0xED00, 0xED80, 0xEE00, 0xEE80, 0xEF00, 0xEF80,
88 0xF000, 0xF080, 0xF100, 0xF180, 0xF200, 0xF280, 0xF300, 0xF380,
89 0xF400, 0xF480, 0xF500, 0xF580, 0xF600, 0xF680, 0xF700, 0xF780,
90 0xF800, 0xF880, 0xF900, 0xF980, 0xFA00, 0xFA80, 0xFB00, 0xFB80,
91 0xFC00, 0xFC80, 0xFD00, 0xFD80, 0xFE00, 0xFE80, 0xFF00, 0xFF80,
92 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
93 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
94 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
95 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
96 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
97 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
98 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
99 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
100 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
101 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
102 0x0000, 0x00C0, 0x0250, 0x0370, 0x0530, 0x3040, 0x30A0, 0xFF60,
108 if (uchar >= 0xd800 && uchar <= 0xdbff) {
112 if (uchar >= 0xdc00 && uchar <= 0xdfff) {
113 uchar = uchar + 0x2400 +
d * 0x400;
121 else if (uchar < 0x800) {
122 utf8Buf += (0xc0 | (uchar>>6));
123 utf8Buf += (0x80 | (uchar & 0x3f));
125 else if (uchar < 0x10000) {
126 utf8Buf += (0xe0 | (uchar>>12));
127 utf8Buf += (0x80 | (uchar>>6 & 0x3f));
128 utf8Buf += (0x80 | (uchar & 0x3f));
130 else if (uchar < 0x200000) {
131 utf8Buf += (0xf0 | (uchar>>18));
132 utf8Buf += (0x80 | (uchar>>12 & 0x3f));
133 utf8Buf += (0x80 | (uchar>>6 & 0x3f));
134 utf8Buf += (0x80 | (uchar & 0x3f));
142 if ((
unsigned long)key < 2)
148 icu::UnicodeString utf16Text(text.
getRawData(), text.
length(), scsuConv, err);
150 int32_t len = utf16Text.extract(text.
getRawData(), text.
size(), utf8Conv, err);
151 if (len > (int32_t)text.
size()+1) {
159 const char* scsuString = text.
c_str();
161 for (
int i = 0; i < len;) {
170 else if (
c >= 0x20 &&
c <= 0x7F)
174 else if (
c == 0x0 ||
c == 0x9 ||
c == 0xA ||
c == 0xC ||
c == 0xD)
178 else if (
c >= 0x1 &&
c <= 0x8)
184 d - 0x80 +
slide[
c - 0x1], &utf8Buf);
186 else if (
c >= 0x10 &&
c <= 0x17)
190 else if (
c >= 0x18 &&
c <= 0x1F)
223 if (c <= 0xDF || c >= 0xF3)
236 else if (
c >= 0xE0 &&
c <= 0xE7)
241 else if (
c >= 0xE8 &&
c <= 0xEF)
256 0x10000 + (((
c & 0x1F) << 8 |
d) << 7);
#define SWORD_NAMESPACE_START
static unsigned short start[8]
static unsigned short slide[8]
static unsigned short win[256]
unsigned long length() const
const char * c_str() const
unsigned long size() const
virtual char processText(SWBuf &text, const SWKey *key=0, const SWModule *module=0)
#define SWORD_NAMESPACE_END
int UTF8Output(unsigned long, SWBuf *utf8Buf)
void setSize(unsigned long len)