Diff for /parser3/src/main/pa_charset.C between versions 1.33.2.17 and 1.33.2.19.2.1

version 1.33.2.17, 2003/03/07 14:56:59 version 1.33.2.19.2.1, 2003/03/18 15:14:18
Line 68  static void element2case(unsigned char f Line 68  static void element2case(unsigned char f
 // methods  // methods
   
 extern "C" unsigned char pcre_default_tables[]; // pcre/chartables.c  extern "C" unsigned char pcre_default_tables[]; // pcre/chartables.c
 Charset::Charset(StringPtr aname, StringPtr afile_spec):   Charset::Charset(const String& aname, const String& afile_spec): 
         fname(aname),          fname(aname),
         fname_cstr(aname->cstr()) {          fname_cstr(aname->cstr()) {
   
Line 99  Charset::~Charset() { Line 99  Charset::~Charset() {
 #endif  #endif
 }  }
   
 void Charset::load_definition(StringPtr afile_spec) {  void Charset::load_definition(const String& afile_spec) {
         // pcre_tables          // pcre_tables
         // lowcase, flipcase, bits digit+word+whitespace, masks          // lowcase, flipcase, bits digit+word+whitespace, masks
   
Line 208  static XMLByte xlatOneTo(const XMLCh toX Line 208  static XMLByte xlatOneTo(const XMLCh toX
     return not_found;      return not_found;
 }  }
   
 void Charset::transcode(Pool& pool,  void Charset::transcode(
         const Charset& source_charset, const void* source_body, size_t source_content_length,          const Charset& source_charset, const void* source_body, size_t source_content_length,
         const Charset& dest_charset, const void *& dest_body, size_t& dest_content_length          const Charset& dest_charset, const void *& dest_body, size_t& dest_content_length
         ) {          ) {
Line 235  void Charset::transcode(Pool& pool, Line 235  void Charset::transcode(Pool& pool,
                                 dest_body, dest_content_length);                                  dest_body, dest_content_length);
                         break;                          break;
                 case 0x11:                  case 0x11:
                         dest_body=source_body;                          dest_body=pool.copy((char*)source_body, dest_content_length=source_content_length);
                         dest_content_length=source_content_length;  
                         break;                          break;
         }          }
 }  }
Line 446  of ocetes consumed. Line 445  of ocetes consumed.
 }  }
   
 /// @todo not so memory-hungry with prescan  /// @todo not so memory-hungry with prescan
 void Charset::transcodeToUTF8(Pool& pool,  void Charset::transcodeToUTF8(
                                                                  const void* source_body, size_t source_content_length,                                                                   const void* source_body, size_t source_content_length,
                                                                  const void *& adest_body, size_t& dest_content_length) const {                                                                   const void *& adest_body, size_t& dest_content_length) const {
         dest_content_length=source_content_length*6/*so that surly enough, max utf8 seq len=6*/;          dest_content_length=source_content_length*6/*so that surly enough, max utf8 seq len=6*/;
         XMLByte *dest_body=new(pool) XMLByte[dest_content_length];          XMLByte *dest_body=new XMLByte[dest_content_length];
   
         if(::transcodeToUTF8(          if(::transcodeToUTF8(
                 (XMLByte *)source_body, source_content_length,                  (XMLByte *)source_body, source_content_length,
Line 463  void Charset::transcodeToUTF8(Pool& pool Line 462  void Charset::transcodeToUTF8(Pool& pool
         // return          // return
         adest_body=dest_body;          adest_body=dest_body;
 }  }
 void Charset::transcodeFromUTF8(Pool& pool,  void Charset::transcodeFromUTF8(
                                                                    const void* source_body, size_t source_content_length,                                                                     const void* source_body, size_t source_content_length,
                                                                    const void *& adest_body, size_t& dest_content_length) const {                                                                     const void *& adest_body, size_t& dest_content_length) const {
         dest_content_length=source_content_length*6/*so that surly enough, "ÿ" has max ratio */;          dest_content_length=source_content_length*6/*so that surly enough, "ÿ" has max ratio */;
         XMLByte *dest_body=new(pool) XMLByte[dest_content_length];          XMLByte *dest_body=new XMLByte[dest_content_length];
   
         if(::transcodeFromUTF8(          if(::transcodeFromUTF8(
                 (XMLByte *)source_body, source_content_length,                  (XMLByte *)source_body, source_content_length,
Line 482  void Charset::transcodeFromUTF8(Pool& po Line 481  void Charset::transcodeFromUTF8(Pool& po
 }  }
   
 /// transcode using both charsets  /// transcode using both charsets
 void Charset::transcodeToCharset(Pool& pool,  void Charset::transcodeToCharset(
                                                                            const Charset& dest_charset,                                                                             const Charset& dest_charset,
                                                                            const void* source_body, size_t source_content_length,                                                                             const void* source_body, size_t source_content_length,
                                                                            const void *& adest_body, size_t& adest_content_length) const {                                                                             const void *& adest_body, size_t& adest_content_length) const {
         if(&dest_charset==this) {          if(&dest_charset==this) {
                 adest_body=source_body;                  adest_body=pool.copy((char*)source_body, adest_content_length=source_content_length);
                 adest_content_length=source_content_length;  
         } else {          } else {
                 size_t dest_content_length=source_content_length;                  size_t dest_content_length=source_content_length;
                 unsigned char *dest_body=new(pool) unsigned char[dest_content_length];                  unsigned char *dest_body=new unsigned char[dest_content_length];
   
                 const XMLByte* srcPtr=(XMLByte *)source_body;                  const XMLByte* srcPtr=(XMLByte *)source_body;
                 const XMLByte* srcEnd=(XMLByte *)source_body+source_content_length;                  const XMLByte* srcEnd=(XMLByte *)source_body+source_content_length;
Line 539  static int         xml256CharEncodingOut Line 537  static int         xml256CharEncodingOut
   
 void Charset::addEncoding(char *name_cstr) {  void Charset::addEncoding(char *name_cstr) {
         xmlCharEncodingHandler* handler=new xmlCharEncodingHandler;          xmlCharEncodingHandler* handler=new xmlCharEncodingHandler;
         fcreated_handler=xmlCharEncodingHandlerPtr(fcreated_handler);          fcreated_handler=xmlCharEncodingHandlerPtr(handler);
   
         handler->name=name_cstr;          handler->name=name_cstr;
         handler->input=xml256CharEncodingInputFunc; handler->inputInfo=&tables;          handler->input=xml256CharEncodingInputFunc; handler->inputInfo=&tables;
Line 548  void Charset::addEncoding(char *name_cst Line 546  void Charset::addEncoding(char *name_cst
         xmlRegisterCharEncodingHandler(handler);          xmlRegisterCharEncodingHandler(handler);
 }  }
   
 void Charset::initTranscoder(StringPtr source, const char* name_cstr) {  void Charset::initTranscoder(const String* source, const char* name_cstr) {
         ftranscoder=xmlFindCharEncodingHandler(name_cstr);          ftranscoder=xmlFindCharEncodingHandler(name_cstr);
         transcoder(source); // check right way          transcoder(source); // check right way
 }  }
   
 xmlCharEncodingHandler& Charset::transcoder(StringPtr source) {  xmlCharEncodingHandler& Charset::transcoder(const String* source) {
         if(!ftranscoder)          if(!ftranscoder)
                 throw Exception("parser.runtime",                  throw Exception("parser.runtime",
                         source,                          source,
Line 561  xmlCharEncodingHandler& Charset::transco Line 559  xmlCharEncodingHandler& Charset::transco
         return *ftranscoder;          return *ftranscoder;
 }  }
   
 const char* Charset::transcode_cstr(Pool& pool, xmlChar* s) {  const char* Charset::transcode_cstrxmlChar* s) {
         if(!s)          if(!s)
                 return "";                  return "";
   
         int inlen=strlen((const char* )s);          int inlen=strlen((const char* )s);
         int outlen=inlen+1; // max          int outlen=inlen+1; // max
         char *out=new(pool) char[outlen];          char *out=new char[outlen];
                   
         int error;          int error;
         if(xmlCharEncodingOutputFunc output=transcoder(Exception::undefined_source).output) {          if(xmlCharEncodingOutputFunc output=transcoder(Exception::undefined_source).output) {
Line 587  const char* Charset::transcode_cstr(Pool Line 585  const char* Charset::transcode_cstr(Pool
         out[outlen/*surely would be less then on input*/]=0;          out[outlen/*surely would be less then on input*/]=0;
         return out;          return out;
 }  }
 StringPtr Charset::transcode(Pool& pool, xmlChar* s  const String& Charset::transcodexmlChar* s
 #ifndef NO_STRING_ORIGIN  #ifndef NO_STRING_ORIGIN
                 , StringPtr origin                  , const String& origin
 #endif  #endif
                                                    ) {                                                      ) { 
         StringPtr result(new String());          const String& result(new String());
         result->APPEND_CLEAN(          result->APPEND_CLEAN(
                 transcode_cstr(pool, s), 0/*auto-size*/,                   transcode_cstr(pool, s), 0/*auto-size*/, 
                 origin->origin().file, origin->origin().line);                  origin->origin().file, origin->origin().line);
         return result;           return result; 
 }  }
 const char* Charset::transcode_cstr(Pool& pool, GdomeDOMString* s) {   const char* Charset::transcode_cstrGdomeDOMString* s) { 
         return s?transcode_cstr(pool, BAD_CAST s->str):"";          return s?transcode_cstr(pool, BAD_CAST s->str):"";
 }  }
 StringPtr Charset::transcode(Pool& pool, GdomeDOMString* s  const String& Charset::transcodeGdomeDOMString* s
 #ifndef NO_STRING_ORIGIN  #ifndef NO_STRING_ORIGIN
                 , StringPtr origin                  , const String& origin
 #endif  #endif
                                                    ) {                                                      ) { 
         StringPtr result(new String());          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(pool, s), 0/*auto-size*/, origin->origin().file, origin->origin().line);
         return result;           return result; 
 }  }
Line 652  gchar* Charset::transcode_buf2gchar(cons Line 650  gchar* Charset::transcode_buf2gchar(cons
 GdomeDOMString_auto_ptr Charset::transcode_buf2dom(const char* buf, size_t buf_size) {   GdomeDOMString_auto_ptr Charset::transcode_buf2dom(const char* buf, size_t buf_size) { 
         return GdomeDOMString_auto_ptr(transcode_buf2gchar(buf, buf_size));          return GdomeDOMString_auto_ptr(transcode_buf2gchar(buf, buf_size));
 }  }
 GdomeDOMString_auto_ptr Charset::transcode(StringPtr s) {   GdomeDOMString_auto_ptr Charset::transcode(const String& s) { 
         CharPtr cstr=s->cstr(String::UL_UNSPECIFIED);          const char* cstr=s->cstr(String::UL_UNSPECIFIED);
   
         return transcode_buf2dom(cstr, strlen(cstr));           return transcode_buf2dom(cstr, strlen(cstr)); 
 }  }

Removed from v.1.33.2.17  
changed lines
  Added in v.1.33.2.19.2.1


E-mail: