--- parser3/src/main/pa_charset.C 2004/09/06 15:15:45 1.50 +++ parser3/src/main/pa_charset.C 2005/12/16 10:15:12 1.54 @@ -1,11 +1,11 @@ /** @file Parser: Charset connection implementation. - Copyright(c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com) + Copyright(c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan(http://paf.design.ru) */ -static const char * const IDENT_CHARSET_C="$Date: 2004/09/06 15:15:45 $"; +static const char * const IDENT_CHARSET_C="$Date: 2005/12/16 10:15:12 $"; #include "pa_charset.h" #include "pa_charsets.h" @@ -38,7 +38,7 @@ inline void prepare_case_tables(unsigned unsigned char *lcc_table=tables+lcc_offset; unsigned char *fcc_table=tables+fcc_offset; for(int i=0; i<0x100; i++) - lcc_table[i]=fcc_table[i]=i; + lcc_table[i]=fcc_table[i]=(unsigned char)i; } inline void cstr2ctypes(unsigned char *tables, const unsigned char *cstr, unsigned char bit) { @@ -134,18 +134,18 @@ void Charset::load_definition(Request_ch continue; // char white-space digit hex-digit letter word lowercase unicode1 unicode2 - unsigned int c=0; + unsigned char c=0; char *cell; for(int column=0; (cell=lsplit(&row, '\t')); column++) { switch(column) { - case 0: c=to_wchar_code(cell); break; + case 0: c=(unsigned char)to_wchar_code(cell); break; // pcre_tables case 1: element2ctypes(c, to_bool(cell), pcre_tables, ctype_space, cbit_space); break; case 2: element2ctypes(c, to_bool(cell), pcre_tables, ctype_digit, cbit_digit); break; case 3: element2ctypes(c, to_bool(cell), pcre_tables, ctype_xdigit); break; case 4: element2ctypes(c, to_bool(cell), pcre_tables, ctype_letter); break; case 5: element2ctypes(c, to_bool(cell), pcre_tables, ctype_word, cbit_word); break; - case 6: element2case(c, to_wchar_code(cell), pcre_tables); break; + case 6: element2case(c, (unsigned char)to_wchar_code(cell), pcre_tables); break; case 7: case 8: // charset @@ -726,12 +726,12 @@ xmlCharEncodingHandler& Charset::transco return *ftranscoder; } -String::C Charset::transcode_cstr(xmlChar* s) { +String::C Charset::transcode_cstr(const xmlChar* s) { if(!s) return String::C("", 0); int inlen=strlen((const char*)s); - int outlen=inlen; // max + int outlen=inlen*6/*strlen("ÿ")*/; // max #ifndef NDEBUG int saved_outlen=outlen; #endif @@ -758,15 +758,7 @@ String::C Charset::transcode_cstr(xmlCha assert(outlen<=saved_outlen); out[outlen]=0; return String::C(out, outlen); } -const String& Charset::transcode(xmlChar* s) { - String::C cstr=transcode_cstr(s); - return *new String(cstr.str, cstr.length, true); -} -String::C Charset::transcode_cstr(GdomeDOMString* s) { - return s?transcode_cstr(BAD_CAST s->str) - :String::C("", 0); -} -const String& Charset::transcode(GdomeDOMString* s) { +const String& Charset::transcode(const xmlChar* s) { String::C cstr=transcode_cstr(s); return *new String(cstr.str, cstr.length, true); } @@ -780,7 +772,7 @@ xmlChar* Charset::transcode_buf2xchar(co int saved_outlen; #endif if(xmlCharEncodingInputFunc input=transcoder(FNAME).input) { - outlen=buf_size*6/*max*/; + outlen=buf_size*6/*max UTF8 bytes per char*/; #ifndef NDEBUG saved_outlen=outlen; #endif @@ -810,18 +802,15 @@ xmlChar* Charset::transcode_buf2xchar(co assert(outlen<=saved_outlen); out[outlen]=0; return out; } -GdomeDOMString_auto_ptr Charset::transcode_buf2dom(const char* buf, size_t buf_size) { - return GdomeDOMString_auto_ptr(transcode_buf2xchar(buf, buf_size)); -} -GdomeDOMString_auto_ptr Charset::transcode(const String& s) { +xmlChar* Charset::transcode(const String& s) { const char* cstr=s.cstr(String::L_UNSPECIFIED); - return transcode_buf2dom(cstr, strlen(cstr)); + return transcode_buf2xchar(cstr, strlen(cstr)); } -GdomeDOMString_auto_ptr Charset::transcode(const String::Body s) { +xmlChar* Charset::transcode(const String::Body s) { const char* cstr=s.cstr(); - return transcode_buf2dom(cstr, s.length()); + return transcode_buf2xchar(cstr, s.length()); } #endif