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

1.1       paf         1: /** @file
                      2:        Parser: Charset connection decl.
                      3: 
1.20      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.22    ! paf        11: static const char* IDENT_CHARSET_H="$Date: 2003/03/21 09:43:48 $";
1.1       paf        12: 
                     13: #include "pa_pool.h"
                     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
                     28: 
1.3       paf        29: #      ifndef XMLCh 
1.10      paf        30:                typedef unsigned int XMLCh;
1.3       paf        31: #      endif
                     32: #      ifndef XMLByte
1.11      paf        33:                typedef unsigned char XMLByte;
1.3       paf        34: #      endif
                     35: 
1.10      paf        36: struct Charset_TransRec {
                     37:        XMLCh intCh;
                     38:        XMLByte extCh;
                     39: };
1.1       paf        40: 
                     41: /**    charset holds name & transcode tables 
                     42:        registers Xerces transcoders
                     43: */
                     44: class Charset : public Pooled {
                     45: public:
                     46: 
1.2       paf        47:        Charset(Pool& apool, const String& aname, const String *request_file_spec);
1.1       paf        48:        Charset::~Charset();
                     49:        
                     50:        const String& name() const { return fname; }
                     51: 
                     52:        bool isUTF8() const { return fisUTF8; }
                     53: 
                     54:        static void transcode(Pool& pool,
                     55:                const Charset& source_transcoder, const void *source_body, size_t source_content_length,
                     56:                const Charset& dest_transcoder, const void *& dest_body, size_t& dest_content_length
                     57:        );
1.21      paf        58: 
                     59:        static String& transcode(Pool& pool, 
                     60:                const Charset& source_transcoder, 
                     61:                const Charset& dest_transcoder, 
                     62:                const String& src);
                     63: 
                     64:        static void transcode(Pool& pool, 
                     65:                const Charset& source_transcoder, 
                     66:                const Charset& dest_transcoder, 
                     67:                Array& src);
                     68: 
                     69:        static void transcode(Pool& pool, 
                     70:                const Charset& source_transcoder, 
                     71:                const Charset& dest_transcoder, 
                     72:                Hash& src);
1.1       paf        73: 
1.9       paf        74: #ifdef XML
                     75:        xmlCharEncodingHandler *transcoder(const String *source);
                     76: #endif
                     77: 
1.1       paf        78: public:
                     79: 
                     80:        unsigned char pcre_tables[tables_length];
                     81: 
                     82: private:
                     83: 
1.2       paf        84:        void loadDefinition(const String& request_file_spec);
1.1       paf        85:        void sort_ToTable();
                     86: 
                     87:        void transcodeToUTF8(Pool& pool,
                     88:                                                                         const void *source_body, size_t source_content_length,
                     89:                                                                         const void *& dest_body, size_t& dest_content_length) const;
                     90:        void transcodeFromUTF8(Pool& pool,
                     91:                                                                           const void *source_body, size_t source_content_length,
                     92:                                                                           const void *& dest_body, size_t& dest_content_length) const;
1.15      paf        93: 
1.1       paf        94:        void transcodeToCharset(Pool& pool,
                     95:                                                                                   const Charset& dest_transcoder,
                     96:                                                                                   const void *source_body, size_t source_content_length,
                     97:                                                                                   const void *& dest_body, size_t& dest_content_length) const;
                     98: 
1.4       paf        99: public:
                    100: 
                    101:        struct Tables {
                    102:                XMLCh fromTable[0x100];
                    103:                Charset_TransRec *toTable;
                    104:                uint toTableSize;
                    105:        };
                    106: 
1.1       paf       107: private:
                    108: 
1.2       paf       109:        const String& fname;
1.1       paf       110:        bool fisUTF8;
1.4       paf       111:        Tables tables;
1.1       paf       112: 
                    113: #ifdef XML
                    114: 
                    115: private:
1.4       paf       116:        void addEncoding(char *name_cstr);
1.1       paf       117:        void initTranscoder(const String *source, const char *name_cstr);
1.9       paf       118:        
1.1       paf       119: public:
1.3       paf       120:        /// converts GdomeDOMString string to char *
                    121:        const char *transcode_cstr(GdomeDOMString *s);
                    122:        /// converts GdomeDOMString string to parser String
1.19      paf       123:        String& transcode(GdomeDOMString *s
                    124: #ifndef NO_STRING_ORIGIN
                    125:                , const String *origin
                    126: #endif
                    127:                );
1.8       paf       128:        /// converts xmlChar* null-terminated string to char *
                    129:        const char *transcode_cstr(xmlChar *s);
                    130:        /// converts xmlChar* null-terminated string to parser String
1.19      paf       131:        String& transcode(xmlChar *s
                    132: #ifndef NO_STRING_ORIGIN
                    133:                , const String *origin
                    134: #endif
                    135:                );
1.16      paf       136:        /** converts sized char * to xmlChar*
                    137:                @returns xmlChar * which caller should free
                    138:        */
                    139:        xmlChar *transcode_buf2xchar(const char *buf, size_t buf_size);
1.3       paf       140:        /// converts char * to GdomeDOMString
1.16      paf       141:        GdomeDOMString_auto_ptr transcode_buf2dom(const char *buf, size_t buf_size);
1.3       paf       142:        /// converts parser String to GdomeDOMString
1.5       paf       143:        GdomeDOMString_auto_ptr transcode(const String& s);
1.1       paf       144: 
                    145: private:
                    146: 
1.9       paf       147:        xmlCharEncodingHandler *ftranscoder;
1.1       paf       148: 
                    149: #endif
                    150: 
1.5       paf       151: };
                    152: 
1.12      paf       153: #ifdef XML
1.5       paf       154: /// Auto-object used to track GdomeDOMString usage
                    155: class GdomeDOMString_auto_ptr {
                    156:        GdomeDOMString *fstring;
                    157: public:
1.6       paf       158:        explicit GdomeDOMString_auto_ptr(gchar *astring) : fstring(gdome_str_mkref(astring)) {}
1.5       paf       159:        explicit GdomeDOMString_auto_ptr(GdomeDOMString *astring) : fstring(astring) {
1.7       paf       160:                // not ref-ing, owning
1.5       paf       161:        }
                    162:        ~GdomeDOMString_auto_ptr() {
                    163:                gdome_str_unref(fstring);
                    164:        }
1.22    ! paf       165: /*     GdomeDOMString* get() {
        !           166:                return fstring;
        !           167:        }*/
        !           168:        GdomeDOMString* use() {
        !           169:                if(fstring)
        !           170:                        gdome_str_ref(fstring);
1.5       paf       171:                return fstring;
                    172:        }
                    173:        GdomeDOMString* operator->() {
                    174:                return fstring;
                    175:        }
1.22    ! paf       176: /*     GdomeDOMString& operator*() {
1.5       paf       177:                return *fstring;
1.22    ! paf       178:        }*/
1.5       paf       179: 
                    180:        // copying
                    181:        GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
                    182:                gdome_str_ref(fstring);
                    183:        }
                    184:        GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
                    185:                if(this == &src)
                    186:                        return *this;
                    187: 
1.22    ! paf       188:                if(fstring)
        !           189:                        gdome_str_unref(fstring);
1.5       paf       190:                fstring=src.fstring;
1.22    ! paf       191:                if(fstring)
        !           192:                        gdome_str_ref(fstring);
1.5       paf       193: 
                    194:                return *this;
                    195:        }
1.1       paf       196: };
1.12      paf       197: #endif
1.1       paf       198: 
                    199: #endif

E-mail: