--- parser3/src/main/pa_charset.C 2003/03/18 15:14:18 1.33.2.19.2.1 +++ parser3/src/main/pa_charset.C 2003/03/21 14:49:00 1.33.2.19.2.5 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan(http://paf.design.ru) */ -static const char* IDENT_CHARSET_C="$Date: 2003/03/18 15:14:18 $"; +static const char* IDENT_CHARSET_C="$Date: 2003/03/21 14:49:00 $"; #include "pa_charset.h" #include "pa_charsets.h" @@ -68,16 +68,16 @@ static void element2case(unsigned char f // methods extern "C" unsigned char pcre_default_tables[]; // pcre/chartables.c -Charset::Charset(const String& aname, const String& afile_spec): +Charset::Charset(const String& aname, const String* afile_spec): fname(aname), - fname_cstr(aname->cstr()) { + fname_cstr(aname.cstrm()) { for(char *c=fname_cstr; *c; c++) - *c = toupper(*c); + *c = toupper(*c); if(afile_spec) { fisUTF8=false; - load_definition(afile_spec); + load_definition(*afile_spec); #ifdef XML addEncoding(fname_cstr); #endif @@ -117,8 +117,7 @@ void Charset::load_definition(const Stri tables.toTableSize++; // loading text - Pool pool_for_load_only; - char *data=file_read_text(pool_for_load_only, *UTF8_charset, afile_spec); + char *data=file_read_text(UTF8_charset, afile_spec); // ignore header getrow(&data); @@ -148,7 +147,7 @@ void Charset::load_definition(const Stri // charset if(tables.toTableSize>MAX_CHARSET_UNI_CODES) throw Exception("parser.runtime", - afile_spec, + &afile_spec, "charset must contain not more then %d unicode values", MAX_CHARSET_UNI_CODES); XMLCh unicode=(XMLCh)to_wchar_code(cell); @@ -220,22 +219,23 @@ void Charset::transcode( switch((source_charset.isUTF8()?0x10:0x00)|(dest_charset.isUTF8()?0x01:0x00)) { default: // 0x00 - source_charset.transcodeToCharset(pool, dest_charset, + source_charset.transcodeToCharset(dest_charset, source_body, source_content_length, dest_body, dest_content_length); break; case 0x01: - source_charset.transcodeToUTF8(pool, + source_charset.transcodeToUTF8( source_body, source_content_length, dest_body, dest_content_length); break; case 0x10: - dest_charset.transcodeFromUTF8(pool, + dest_charset.transcodeFromUTF8( source_body, source_content_length, dest_body, dest_content_length); break; case 0x11: - dest_body=pool.copy((char*)source_body, dest_content_length=source_content_length); + dest_body=source_body; + dest_content_length=source_content_length; break; } } @@ -408,7 +408,7 @@ static int transcodeFromUTF8( default: throw Exception(0, - Exception::undefined_source, + 0, "transcodeFromUTF8 error: wrong trailingBytes value(%d)", trailingBytes); } tmpVal-=gUTFOffsets[trailingBytes]; @@ -423,7 +423,7 @@ static int transcodeFromUTF8( outPtr+=sprintf((char *)outPtr, "&#%d;", tmpVal); // &#decimal; } else throw Exception(0, - Exception::undefined_source, + 0, "transcodeFromUTF8 error: too big tmpVal(0x%08X)", tmpVal); } @@ -486,7 +486,8 @@ void Charset::transcodeToCharset( const void* source_body, size_t source_content_length, const void *& adest_body, size_t& adest_content_length) const { if(&dest_charset==this) { - adest_body=pool.copy((char*)source_body, adest_content_length=source_content_length); + adest_body=source_body; + adest_content_length=source_content_length; } else { size_t dest_content_length=source_content_length; unsigned char *dest_body=new unsigned char[dest_content_length]; @@ -568,18 +569,18 @@ const char* Charset::transcode_cstrxmlCh char *out=new char[outlen]; int error; - if(xmlCharEncodingOutputFunc output=transcoder(Exception::undefined_source).output) { + if(xmlCharEncodingOutputFunc output=transcoder(0).output) { error=output( (unsigned char*)out, &outlen, (const unsigned char*)s, &inlen, - transcoder(Exception::undefined_source).outputInfo); + transcoder(0).outputInfo); } else { memcpy(out, s, outlen=inlen); error=0; } if(error<0) - throw Exception(Exception::undefined_type, - Exception::undefined_source, + throw Exception(0, + 0, "transcode_cstr failed (%d)", error); out[outlen/*surely would be less then on input*/]=0; @@ -592,12 +593,12 @@ const String& Charset::transcodexmlChar* ) { const String& result(new String()); result->APPEND_CLEAN( - transcode_cstr(pool, s), 0/*auto-size*/, + transcode_cstr(s), 0/*auto-size*/, origin->origin().file, origin->origin().line); return result; } const char* Charset::transcode_cstrGdomeDOMString* s) { - return s?transcode_cstr(pool, BAD_CAST s->str):""; + return s?transcode_cstr(BAD_CAST s->str):""; } const String& Charset::transcodeGdomeDOMString* s #ifndef NO_STRING_ORIGIN @@ -605,7 +606,7 @@ const String& Charset::transcodeGdomeDOM #endif ) { const String& result(new String()); - result->APPEND_CLEAN(transcode_cstr(pool, s), 0/*auto-size*/, origin->origin().file, origin->origin().line); + result->APPEND_CLEAN(transcode_cstr(s), 0/*auto-size*/, origin->origin().file, origin->origin().line); return result; } @@ -615,13 +616,13 @@ void* Charset::transcode_buf2mchar(trans unsigned char* out; int outlen; int error; - if(xmlCharEncodingInputFunc input=transcoder(Exception::undefined_source).input) { + if(xmlCharEncodingInputFunc input=transcoder(0).input) { outlen=buf_size*6/*max*/; out=(unsigned char*)malloc_func(outlen+1); error=input( out, &outlen, (const unsigned char *)buf, (int *)&buf_size, - transcoder(Exception::undefined_source).inputInfo); + transcoder(0).inputInfo); } else { outlen=buf_size; out=(unsigned char*)malloc_func(outlen+1); @@ -630,8 +631,8 @@ void* Charset::transcode_buf2mchar(trans } if(error<0) - throw Exception(Exception::undefined_type, - Exception::undefined_source, + throw Exception(0, + 0, "transcode_buf failed (%d)", error); out[outlen/*surely would be less then on input*/]=0; @@ -651,7 +652,7 @@ GdomeDOMString_auto_ptr Charset::transco return GdomeDOMString_auto_ptr(transcode_buf2gchar(buf, buf_size)); } GdomeDOMString_auto_ptr Charset::transcode(const String& s) { - const char* cstr=s->cstr(String::UL_UNSPECIFIED); + const char* cstr=s->cstr(String::L_UNSPECIFIED); return transcode_buf2dom(cstr, strlen(cstr)); }