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

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

E-mail: