Skip to content
Snippets Groups Projects
Commit e770e70b authored by George Nachman's avatar George Nachman
Browse files

WIP untested code to add GBK support

parent e80f90d6
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -32,6 +32,10 @@ NS_INLINE BOOL iscp949(unsigned char c) {
return (c >= 0x81 && c <= 0xfe);
}
 
NS_INLINE BOOL isgbk(unsigned char c) {
return (c >= 0x81 && c <= 0xfe);
}
NS_INLINE BOOL isEUCCNEncoding(NSStringEncoding stringEncoding) {
return (stringEncoding == (0x80000000 | kCFStringEncodingMacChineseSimp) ||
stringEncoding == (0x80000000 | kCFStringEncodingDOSChineseSimplif) ||
Loading
Loading
@@ -68,6 +72,10 @@ NS_INLINE BOOL isCP949Encoding(NSStringEncoding stringEncoding) {
return (stringEncoding == (0x80000000 | kCFStringEncodingDOSKorean));
}
 
NS_INLINE BOOL isGBKEncoding(NSStringEncoding stringEncoding) {
return (stringEncoding == (0x80000000 | kCFStringEncodingGBK_95));
}
NS_INLINE BOOL isAsciiString(unsigned char *code) {
return *code >= 0x20 && *code <= 0x7f;
}
Loading
Loading
@@ -87,6 +95,8 @@ NS_INLINE BOOL isString(unsigned char *code, NSStringEncoding encoding) {
return iseuckr(*code);
} else if (isCP949Encoding(encoding)) {
return iscp949(*code);
} else if (isGBKEncoding(encoding)) {
return isgbk(*code);
} else if (*code >= 0x20) {
return YES;
}
Loading
Loading
Loading
Loading
@@ -234,6 +234,30 @@ static void DecodeCP949Bytes(unsigned char *datap,
}
}
 
static void DecodeGBKBytes(unsigned char *datap,
int datalen,
int *rmlen,
VT100Token *token) {
unsigned char *p = datap;
int len = datalen;
while (len > 0) {
if (iscp949(*p) && len > 1) {
p += 2;
len -= 2;
} else {
break;
}
}
if (len == datalen) {
*rmlen = 0;
token->type = VT100_WAIT;
} else {
*rmlen = datalen - len;
token->type = VT100_STRING;
}
}
static void DecodeOtherBytes(unsigned char *datap,
int datalen,
int *rmlen,
Loading
Loading
@@ -339,6 +363,8 @@ void ParseString(unsigned char *datap,
} else if (isCP949Encoding(encoding)) {
// korean
DecodeCP949Bytes(datap, datalen, rmlen, result);
} else if (isGBKEncoding(encoding)) {
DecodeGBKBytes(datap, datalen, rmlen, result);
} else {
DecodeOtherBytes(datap, datalen, rmlen, result);
}
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment