#include "AVService.h" #include "AVDisplayServer.h" //Disable iconv temporarily. //#include "iconv.h" // #include const char *AVService::pathSeparator() { #ifdef WIN32 return "\\"; #else return "/"; #endif } void AVService::notify(const char *msg) { dsvr->showNotify(msg); } //Disable iconv temporarily. const char *AVService::toUTF8(const char *encoding, const char *src) { return 0; } /* const char *AVService::toUTF8(const char *encoding, const char *src) { char *out = NULL; size_t inbytesleft = strlen(src) + 1; size_t outbytesleft = 1024; iconv_t cd; memset(internal, 0, 1024); out = internal; cd = iconv_open("UTF-8", encoding); iconv (cd, &src, &inbytesleft, &out, &outbytesleft); iconv_close(cd); return internal; } */ // //Disable iconv temporarily. const char *AVService::fromUTF8(const char *encoding, const char *src) { return 0; } /* const char *AVService::fromUTF8(const char *encoding, const char *src) { char *out = NULL; size_t inbytesleft = strlen(src) + 1; size_t outbytesleft = 1024; iconv_t cd; memset(internal, 0, 1024); out = internal; cd = iconv_open(encoding, "UTF-8"); iconv (cd, &src, &inbytesleft, &out, &outbytesleft); iconv_close(cd); return internal; } */ // const char *AVService::UTF16ToUTF8(unsigned short *s, int l) { char *b = internal; for (int i=0; i(s[i]); } else if (s[i] < 0x800) { *b++=(0xc0 | s[i]>>6); *b++=(0x80 | s[i] & 0x3f); } else if (s[i] < 0xd800 || s[i] > 0xdbff) { *b++ = (0xe0 | s[i]>>12); *b++ = (0x80 | s[i]>>6 & 0x3f); *b++ = (0x80 | s[i] & 0x3f); } else { unsigned int offset= 0x10000 - (0xd800 << 10) - 0xdc00; unsigned int codepoint=(s[i] << 10) + s[i+1]+offset; i++; *b++=(0xf0 | codepoint>>18); *b++=(0x80 | codepoint>>12 & 0x3f); *b++=(0x80 | codepoint>>6 & 0x3f); *b++=(0x80 | codepoint & 0x3F); } } *b=0; return internal; } enum { bit7=0x80, bit6=0x40, bit5=0x20, bit4=0x10, bit3=8, bit2=4, bit1=2, bit0=1 }; int AVService::UTF8ToUTF16(const char *src, unsigned short **rcvr) { char *s1=(char*)src; int len=0; char a, b, c; while (*s1) { a=*s1++; if ((a & (bit7|bit6|bit5))==(bit7|bit6)) { // 0x000080-0x0007ff b=*s1++; u_internal[len] = ((a & (bit4|bit3|bit2)) >> 2) * 0x100; u_internal[len] += (((a & (bit1|bit0)) << 6) | (b & (bit5|bit4|bit3|bit2|bit1|bit0))); } else if ((a & (bit7|bit6|bit5|bit4))==(bit7|bit6|bit5)) // 0x000800-0x00ffff { b=*s1++; c=*s1++; u_internal[len] = (((a & (bit3|bit2|bit1|bit0)) << 4) | ((b & (bit5|bit4|bit3|bit2)) >> 2)) * 0x100; u_internal[len] += (((b & (bit1|bit0)) << 6) | (c & (bit5|bit4|bit3|bit2|bit1|bit0))); } else { u_internal[len] =(0); u_internal[len] +=(a); } len++; } *rcvr = u_internal; return len; }