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

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.15! paf        11: static const char* IDENT_CHARSET_H="$Date: 2003/03/06 12:02:04 $";
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.20.2.12  paf        29: #define MAX_CHARSET_UNI_CODES 500
                     30: 
1.3       paf        31: #      ifndef XMLCh 
1.10      paf        32:                typedef unsigned int XMLCh;
1.3       paf        33: #      endif
                     34: #      ifndef XMLByte
1.11      paf        35:                typedef unsigned char XMLByte;
1.3       paf        36: #      endif
1.20.2.15! paf        37: 
        !            38: // forwards
        !            39: 
        !            40: class GdomeDOMString_auto_ptr;
        !            41: 
        !            42: // helpers
1.3       paf        43: 
1.10      paf        44: struct Charset_TransRec {
                     45:        XMLCh intCh;
                     46:        XMLByte extCh;
                     47: };
1.1       paf        48: 
                     49: /**    charset holds name & transcode tables 
1.20.2.3  paf        50:        registers libxml transcoders
1.1       paf        51: */
1.20.2.3  paf        52: class Charset: public PA_Object {
1.1       paf        53: public:
                     54: 
1.20.2.9  paf        55:        Charset(StringPtr aname, StringPtr afile_spec);
1.20.2.6  paf        56:        override ~Charset();
1.1       paf        57:        
1.20.2.9  paf        58:        StringPtr name() const { return fname; }
1.1       paf        59: 
                     60:        bool isUTF8() const { return fisUTF8; }
                     61: 
1.20.2.2  paf        62:        static void transcode(Pool& pool, 
1.20.2.14  paf        63:                const Charset& source_transcoder, const void* source_body, size_t source_content_length,
                     64:                const Charset& dest_transcoder, const void* & dest_body, size_t& dest_content_length
1.1       paf        65:        );
                     66: 
1.9       paf        67: #ifdef XML
1.20.2.14  paf        68:        xmlCharEncodingHandler& transcoder(StringPtr source);
1.9       paf        69: #endif
                     70: 
1.1       paf        71: public:
                     72: 
                     73:        unsigned char pcre_tables[tables_length];
                     74: 
                     75: private:
                     76: 
1.20.2.9  paf        77:        void load_definition(StringPtr afile_spec);
1.1       paf        78:        void sort_ToTable();
                     79: 
                     80:        void transcodeToUTF8(Pool& pool,
1.20.2.14  paf        81:                                                                         const void* source_body, size_t source_content_length,
                     82:                                                                         const void* & dest_body, size_t& dest_content_length) const;
1.1       paf        83:        void transcodeFromUTF8(Pool& pool,
1.20.2.14  paf        84:                                                                           const void* source_body, size_t source_content_length,
                     85:                                                                           const void* & dest_body, size_t& dest_content_length) const;
1.15      paf        86: 
1.1       paf        87:        void transcodeToCharset(Pool& pool,
                     88:                                                                                   const Charset& dest_transcoder,
1.20.2.14  paf        89:                                                                                   const void* source_body, size_t source_content_length,
                     90:                                                                                   const void*& dest_body, size_t& dest_content_length) const;
1.1       paf        91: 
1.4       paf        92: public:
                     93: 
                     94:        struct Tables {
                     95:                XMLCh fromTable[0x100];
1.20.2.12  paf        96:                Charset_TransRec toTable[MAX_CHARSET_UNI_CODES];
1.4       paf        97:                uint toTableSize;
                     98:        };
                     99: 
1.1       paf       100: private:
                    101: 
1.20.2.9  paf       102:        StringPtr fname;
1.20.2.2  paf       103:        CharPtr fname_cstr;
1.1       paf       104:        bool fisUTF8;
1.4       paf       105:        Tables tables;
1.1       paf       106: 
                    107: #ifdef XML
                    108: 
                    109: private:
1.20.2.14  paf       110:        void addEncoding(char* name_cstr);
                    111:        void initTranscoder(StringPtr source, const char* name_cstr);
1.9       paf       112:        
1.1       paf       113: public:
1.20.2.14  paf       114:        /// converts GdomeDOMString string to char* 
                    115:        const char* transcode_cstr(GdomeDOMString* s);
1.3       paf       116:        /// converts GdomeDOMString string to parser String
1.20.2.14  paf       117:        StringPtr transcode(GdomeDOMString* s
1.19      paf       118: #ifndef NO_STRING_ORIGIN
1.20.2.14  paf       119:                , StringPtr origin
1.19      paf       120: #endif
                    121:                );
1.20.2.14  paf       122:        /// converts xmlChar* null-terminated string to char* 
                    123:        CharPtr transcode_cstr(xmlChar* s);
1.8       paf       124:        /// converts xmlChar* null-terminated string to parser String
1.20.2.14  paf       125:        StringPtr transcode(xmlChar* s
1.19      paf       126: #ifndef NO_STRING_ORIGIN
1.20.2.14  paf       127:                , StringPtr origin
1.19      paf       128: #endif
                    129:                );
1.20.2.14  paf       130:        /** converts sized char*  to xmlChar*
                    131:                @returns xmlChar*  WHICH CALLER SHOULD FREE
1.16      paf       132:        */
1.20.2.14  paf       133:        xmlChar* transcode_buf2xchar(const char* buf, size_t buf_size);
                    134:        /// converts char*  to GdomeDOMString
1.20.2.10  paf       135:        GdomeDOMString_auto_ptr transcode_buf2dom(const char* buf, size_t buf_size);
1.3       paf       136:        /// converts parser String to GdomeDOMString
1.20.2.14  paf       137:        GdomeDOMString_auto_ptr transcode(StringPtr s);
1.1       paf       138: 
                    139: private:
                    140: 
1.20.2.14  paf       141:        typedef smart_ptr<xmlCharEncodingHandler> xmlCharEncodingHandlerPtr;
                    142:        xmlCharEncodingHandlerPtr fcreated_handler;
                    143:        xmlCharEncodingHandler* ftranscoder;
1.1       paf       144: 
                    145: #endif
                    146: 
1.5       paf       147: };
1.20.2.8  paf       148: DECLARE_OBJECT_PTR(Charset);
1.5       paf       149: 
1.12      paf       150: #ifdef XML
1.5       paf       151: /// Auto-object used to track GdomeDOMString usage
                    152: class GdomeDOMString_auto_ptr {
1.20.2.14  paf       153:        GdomeDOMString* fstring;
1.5       paf       154: public:
1.20.2.14  paf       155:        /// frees astring afterwards!!!
                    156:        explicit GdomeDOMString_auto_ptr(gchar* astring) : fstring(gdome_str_mkref_own(astring)) {}
                    157:        explicit GdomeDOMString_auto_ptr(GdomeDOMString* astring) : fstring(astring) {
1.7       paf       158:                // not ref-ing, owning
1.5       paf       159:        }
                    160:        ~GdomeDOMString_auto_ptr() {
                    161:                gdome_str_unref(fstring);
                    162:        }
                    163:        GdomeDOMString* get() {
                    164:                return fstring;
                    165:        }
                    166:        GdomeDOMString* operator->() {
                    167:                return fstring;
                    168:        }
                    169:        GdomeDOMString& operator*() {
1.20.2.14  paf       170:                return* fstring;
1.5       paf       171:        }
                    172: 
                    173:        // copying
                    174:        GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
                    175:                gdome_str_ref(fstring);
                    176:        }
                    177:        GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
                    178:                if(this == &src)
1.20.2.14  paf       179:                        return* this;
1.5       paf       180: 
                    181:                gdome_str_unref(fstring);
                    182:                fstring=src.fstring;
                    183:                gdome_str_ref(fstring);
                    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: