Annotation of parser3/src/include/pa_charset.h, revision 1.20.2.18.2.9

1.1       paf         1: /** @file
                      2:        Parser: Charset connection decl.
                      3: 
1.20.2.10  paf         4:        Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
1.14      paf         5:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1       paf         6: */
                      7: 
                      8: #ifndef PA_CHARSET_H
                      9: #define PA_CHARSET_H
1.17      paf        10: 
1.20.2.18.2.9! (paf       11:: static const char* IDENT_CHARSET_H="$Date: 2003/04/08 16:11:53 $";
1.20.2.18.2.1  (paf       12:: 
1.1       paf        13: 
                     14: #include "pa_exception.h"
                     15: #include "pa_common.h"
                     16: 
                     17: // hiding into namespace so to avoid stupid conflict
                     18: namespace PCRE {
                     19: #include "pcre.h"
                     20: #      include "internal.h"
                     21: };
                     22: 
1.3       paf        23: #ifdef XML
                     24: #include "libxml/encoding.h"
                     25: #endif
                     26: 
1.1       paf        27: // defines
1.20.2.18.2.6  (paf       28:: 
                     29:: #define MAX_CHARSETS 10
1.1       paf        30: 
1.20.2.12  paf        31: #define MAX_CHARSET_UNI_CODES 500
                     32: 
1.3       paf        33: #      ifndef XMLCh 
1.10      paf        34:                typedef unsigned int XMLCh;
1.3       paf        35: #      endif
                     36: #      ifndef XMLByte
1.11      paf        37:                typedef unsigned char XMLByte;
1.3       paf        38: #      endif
1.20.2.15  paf        39: 
                     40: // forwards
                     41: 
                     42: class GdomeDOMString_auto_ptr;
                     43: 
                     44: // helpers
1.3       paf        45: 
1.10      paf        46: struct Charset_TransRec {
                     47:        XMLCh intCh;
                     48:        XMLByte extCh;
                     49: };
1.1       paf        50: 
                     51: /**    charset holds name & transcode tables 
1.20.2.3  paf        52:        registers libxml transcoders
1.1       paf        53: */
1.20.2.3  paf        54: class Charset: public PA_Object {
1.1       paf        55: public:
                     56: 
1.20.2.18.2.8  (paf       57::       Charset(Request_charsets* charsets, const StringBody ANAME, const String* afile_spec);
1.1       paf        58:        
1.20.2.18.2.8  (paf       59::       const StringBody NAME() const { return FNAME; }
1.1       paf        60: 
                     61:        bool isUTF8() const { return fisUTF8; }
                     62: 
1.20.2.18.2.7  (paf       63::       static String::C transcode(const String::C src,
                     64::               const Charset& source_transcoder, 
                     65::               const Charset& dest_transcoder
1.1       paf        66:        );
                     67: 
1.9       paf        68: #ifdef XML
1.20.2.18.2.8  (paf       69::       xmlCharEncodingHandler& transcoder(const StringBody NAME);
1.9       paf        70: #endif
                     71: 
1.1       paf        72: public:
                     73: 
                     74:        unsigned char pcre_tables[tables_length];
                     75: 
                     76: private:
                     77: 
1.20.2.18.2.8  (paf       78::       void load_definition(Request_charsets& charsets, const String& afile_spec);
1.1       paf        79:        void sort_ToTable();
                     80: 
1.20.2.18.2.7  (paf       81::       const String::C transcodeToUTF8(const String::C src) const;
                     82::       const String::C transcodeFromUTF8(const String::C src) const;
1.20.2.18.2.1  (paf       83::       
1.20.2.18.2.7  (paf       84::       const String::C transcodeToCharset(const String::C src,
                     85::               const Charset& dest_transcoder) const;
1.1       paf        86: 
1.4       paf        87: public:
                     88: 
                     89:        struct Tables {
                     90:                XMLCh fromTable[0x100];
1.20.2.12  paf        91:                Charset_TransRec toTable[MAX_CHARSET_UNI_CODES];
1.4       paf        92:                uint toTableSize;
                     93:        };
                     94: 
1.1       paf        95: private:
                     96: 
1.20.2.18.2.8  (paf       97::       const StringBody FNAME;
                     98::       char* FNAME_CSTR;
1.1       paf        99:        bool fisUTF8;
1.4       paf       100:        Tables tables;
1.1       paf       101: 
                    102: #ifdef XML
                    103: 
                    104: private:
1.20.2.14  paf       105:        void addEncoding(char* name_cstr);
1.20.2.18.2.8  (paf      106::       void initTranscoder(const StringBody name, const char* name_cstr);
1.9       paf       107:        
1.1       paf       108: public:
1.20.2.14  paf       109:        /// converts GdomeDOMString string to char* 
1.20.2.18.2.9! (paf      110::       String::C transcode_cstr(GdomeDOMString* s);
1.3       paf       111:        /// converts GdomeDOMString string to parser String
1.20.2.18.2.3  (paf      112::       const String& transcode(GdomeDOMString* s);
1.20.2.14  paf       113:        /// converts xmlChar* null-terminated string to char* 
1.20.2.18.2.9! (paf      114::       String::C transcode_cstr(xmlChar* s);
1.8       paf       115:        /// converts xmlChar* null-terminated string to parser String
1.20.2.18.2.3  (paf      116::       const String& transcode(xmlChar* s);
1.20.2.16  paf       117: 
1.20.2.14  paf       118:        /** converts sized char*  to xmlChar*
                    119:                @returns xmlChar*  WHICH CALLER SHOULD FREE
1.16      paf       120:        */
1.20.2.14  paf       121:        xmlChar* transcode_buf2xchar(const char* buf, size_t buf_size);
1.20.2.16  paf       122:        /** converts sized char*  to gchar*
                    123:                @returns gchar*  WHICH CALLER SHOULD FREE
                    124:        */
                    125:        gchar* transcode_buf2gchar(const char* buf, size_t buf_size);
1.20.2.14  paf       126:        /// converts char*  to GdomeDOMString
1.20.2.10  paf       127:        GdomeDOMString_auto_ptr transcode_buf2dom(const char* buf, size_t buf_size);
1.3       paf       128:        /// converts parser String to GdomeDOMString
1.20.2.18.2.1  (paf      129::       GdomeDOMString_auto_ptr transcode(const String& s);
1.20.2.18.2.4  (paf      130::       /// converts parser StringBody to GdomeDOMString
                    131::       GdomeDOMString_auto_ptr transcode(const StringBody s);
1.20.2.16  paf       132: 
                    133: private:
                    134: 
                    135:        typedef void* (*transcode_buf_malloc_func)(size_t size);
                    136:        void* transcode_buf2mchar(transcode_buf_malloc_func malloc_func, 
                    137:                const char* buf, size_t buf_size);
1.1       paf       138: 
                    139: private:
                    140: 
1.20.2.14  paf       141:        xmlCharEncodingHandler* ftranscoder;
1.1       paf       142: 
                    143: #endif
                    144: 
1.5       paf       145: };
                    146: 
1.12      paf       147: #ifdef XML
1.5       paf       148: /// Auto-object used to track GdomeDOMString usage
                    149: class GdomeDOMString_auto_ptr {
1.20.2.14  paf       150:        GdomeDOMString* fstring;
1.5       paf       151: public:
1.20.2.14  paf       152:        /// frees astring afterwards!!!
                    153:        explicit GdomeDOMString_auto_ptr(gchar* astring) : fstring(gdome_str_mkref_own(astring)) {}
1.20.2.18  paf       154:        explicit GdomeDOMString_auto_ptr(GdomeDOMString* astring=0) : fstring(astring) {
1.7       paf       155:                // not ref-ing, owning
1.5       paf       156:        }
                    157:        ~GdomeDOMString_auto_ptr() {
1.20.2.18  paf       158:                if(fstring)
                    159:                        gdome_str_unref(fstring);
1.5       paf       160:        }
                    161:        GdomeDOMString* get() {
                    162:                return fstring;
                    163:        }
                    164:        GdomeDOMString* operator->() {
                    165:                return fstring;
                    166:        }
                    167:        GdomeDOMString& operator*() {
1.20.2.14  paf       168:                return* fstring;
1.5       paf       169:        }
                    170: 
                    171:        // copying
                    172:        GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
                    173:                gdome_str_ref(fstring);
                    174:        }
                    175:        GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
                    176:                if(this == &src)
1.20.2.14  paf       177:                        return* this;
1.5       paf       178: 
1.20.2.18  paf       179:                if(fstring)
                    180:                        gdome_str_unref(fstring);
1.5       paf       181:                fstring=src.fstring;
1.20.2.18  paf       182:                if(fstring)
                    183:                        gdome_str_ref(fstring);
1.5       paf       184: 
1.20.2.14  paf       185:                return* this;
1.5       paf       186:        }
1.1       paf       187: };
1.12      paf       188: #endif
1.1       paf       189: 
                    190: #endif

E-mail: