Diff for /parser3/src/main/pa_charset.C between versions 1.60 and 1.66

version 1.60, 2008/07/15 12:53:10 version 1.66, 2008/08/15 16:54:01
Line 86  static void element2case(unsigned char f Line 86  static void element2case(unsigned char f
   
 // methods  // methods
   
 extern "C" unsigned char pcre_default_tables[]; // pcre/chartables.c  
 Charset::Charset(Request_charsets* charsets, const String::Body ANAME, const String* afile_spec):   Charset::Charset(Request_charsets* charsets, const String::Body ANAME, const String* afile_spec): 
         FNAME(ANAME),          FNAME(ANAME),
         FNAME_CSTR(ANAME.cstrm()) {          FNAME_CSTR(ANAME.cstrm()) {
Line 100  Charset::Charset(Request_charsets* chars Line 99  Charset::Charset(Request_charsets* chars
         } else {          } else {
                 fisUTF8=true;                  fisUTF8=true;
                 // grab default onces [for UTF-8 so to be able to make a-z =>A-Z                  // grab default onces [for UTF-8 so to be able to make a-z =>A-Z
                 memcpy(pcre_tables, pcre_default_tables, sizeof(pcre_tables));                  memcpy(pcre_tables, _pcre_default_tables, sizeof(pcre_tables));
         }          }
   
 #ifdef XML  #ifdef XML
Line 434  of ocetes consumed. Line 433  of ocetes consumed.
   
 static bool is_escaped(char c){  static bool is_escaped(char c){
         return          return
                 !(c<=127                  !(
                 && (                          (c<=127)
                         ((c>='0') && (c<='9'))                          && (
                         || ((c>='A') && (c<='Z'))                                  ((c>='0') && (c<='9'))
                         || ((c>='a') && (c<='z'))                                  || ((c>='A') && (c<='Z'))
                         || strchr("*@-_+./", c)!=0                                  || ((c>='a') && (c<='z'))
                 ));                                  || strchr("*@-_+./", c)!=0
                           )
                   );
 }  }
   
 // read one utf8 character, return number of bytes needed for store it  // read one utf8 character, return number of bytes needed for store it
 static unsigned int readChar(const XMLByte*& srcPtr, const XMLByte*& srcEnd, XMLByte& firstByte, XMLCh& UTF8Char){  static unsigned int readChar(const XMLByte*& srcPtr, const XMLByte* srcEnd, XMLByte& firstByte, XMLCh& UTF8Char){
         if(!srcPtr || !*srcPtr || srcPtr>=srcEnd)          if(!srcPtr || !*srcPtr || srcPtr>=srcEnd)
                 return 0;                  return 0;
   
Line 478  static unsigned int readChar(const XMLBy Line 479  static unsigned int readChar(const XMLBy
         return trailingBytes+1;          return trailingBytes+1;
 }  }
   
   static unsigned int skipChar(const XMLByte*& srcPtr, const XMLByte* srcEnd){
           if(!srcPtr || !*srcPtr || srcPtr>=srcEnd)
                   return 0;
   
           unsigned int trailingBytes=gUTFBytes[*srcPtr]+1;
           srcPtr+=trailingBytes;
   
           return trailingBytes;
   }
   
 // read char, return number of bytes needed for store it as UTF8  // read char, return number of bytes needed for store it as UTF8
 static unsigned int readChar(const XMLByte*& srcPtr, const XMLByte*& srcEnd, XMLByte& firstByte, XMLCh& UTF8Char, const Charset::Tables& tables){  static unsigned int readChar(const XMLByte*& srcPtr, const XMLByte* srcEnd, XMLByte& firstByte, XMLCh& UTF8Char, const Charset::Tables& tables){
         if(!srcPtr || !*srcPtr || srcPtr>=srcEnd)          if(!srcPtr || !*srcPtr || srcPtr>=srcEnd)
                 return 0;                  return 0;
   
Line 623  String::C Charset::escape(const String:: Line 634  String::C Charset::escape(const String::
         return String::C((char*)dest_body, dest_length);          return String::C((char*)dest_body, dest_length);
 }  }
                   
   String::Body Charset::escape(const String::Body src, const Charset& source_charset) {
           const char *src_ptr=src.cstr();
           size_t src_size=strlen(src_ptr);
   
           String::C dest=Charset::escape(String::C(src_ptr, src_size),
                   source_charset);
   
           return String::Body(dest.str, dest.length);
   }
   
   String& Charset::escape(const String& src, const Charset& source_charset) {
           if(!src.length())
                   return *new String("", 0, false);
   
           return *new String(escape((String::Body)src, source_charset), String::L_CLEAN);
   }
   
 const String::C Charset::transcodeToUTF8(const String::C src) const {  const String::C Charset::transcodeToUTF8(const String::C src) const {
         size_t src_length=src.length;          size_t src_length=src.length;
Line 1106  static void transcode_pair(const String: Line 1133  static void transcode_pair(const String:
                 *info->source_transcoder,                   *info->source_transcoder, 
                 *info->dest_transcoder);                  *info->dest_transcoder);
 }  }
   
 void Charset::transcode(HashStringString& src,  void Charset::transcode(HashStringString& src,
         const Charset& source_transcoder,           const Charset& source_transcoder, 
         const Charset& dest_transcoder) {          const Charset& dest_transcoder) {
         Transcode_pair_info info={&source_transcoder, &dest_transcoder};          Transcode_pair_info info={&source_transcoder, &dest_transcoder};
         src.for_each_ref<Transcode_pair_info*>(transcode_pair, &info);          src.for_each_ref<Transcode_pair_info*>(transcode_pair, &info);
 }  }
   
   size_t getUTF8BytePos(const XMLByte* srcBegin, const XMLByte* srcEnd, size_t charPos){
           const XMLByte* ptr=srcBegin;
           while(charPos-- && skipChar(ptr, srcEnd));
   
           return ptr-srcBegin;
   }
   
   size_t getUTF8CharPos(const XMLByte* srcBegin, const XMLByte* srcEnd, size_t bytePos){
           size_t charPos=0;
           const XMLByte* ptr=srcBegin;
           const XMLByte* ptrEnd=srcBegin+bytePos;
           while(skipChar(ptr, srcEnd)){
                   if(ptr>ptrEnd)
                           return charPos;
                   charPos++;
           }
   
           // scan till end but position in bytes still too low
           throw Exception(0,
                                           0,
                                           "Error convertion byte pos to char pos");
   }
   
   size_t lengthUTF8(const XMLByte* srcBegin, const XMLByte* srcEnd){
           size_t size=0;
           while(skipChar(srcBegin, srcEnd))
                   size++;
   
           return size;
   }

Removed from v.1.60  
changed lines
  Added in v.1.66


E-mail: