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

1.1       paf         1: /** @file
                      2:        Parser: Charset connection decl.
                      3: 
                      4:        Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
                      5:        Author: Alexander Petrosyan <paf@design.ru> (http://paf.design.ru)
                      6: 
1.6     ! paf         7:        $Id: pa_charset.h,v 1.5 2002/01/10 15:41:49 paf Exp $
1.1       paf         8: */
                      9: 
                     10: #ifndef PA_CHARSET_H
                     11: #define PA_CHARSET_H
                     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: 
                     29: #ifdef XML
1.3       paf        30: /*#    include <util/XercesDefs.hpp>
1.1       paf        31: #      include <util/TransService.hpp>
                     32: #      define Charset_TransRec XMLTransService::TransRec
1.3       paf        33: */
                     34: 
                     35: #      ifndef XMLCh 
                     36: #              define XMLCh unsigned int
                     37: #      endif
                     38: #      ifndef XMLByte
                     39: #              define XMLByte unsigned char
                     40: #      endif
                     41: 
                     42:        struct Charset_TransRec {
                     43:                XMLCh intCh;
                     44:                XMLByte extCh;
                     45:        };
                     46: 
1.1       paf        47: #else
                     48: #      ifndef XMLCh 
                     49: #              define XMLCh unsigned int
                     50: #      endif
                     51: #      ifndef XMLByte
                     52: #              define XMLByte unsigned char
                     53: #      endif
                     54: 
                     55:        struct Charset_TransRec {
                     56:                XMLCh intCh;
                     57:                XMLByte extCh;
                     58:        };
                     59: #endif
                     60: 
                     61: /**    charset holds name & transcode tables 
                     62:        registers Xerces transcoders
                     63: */
                     64: class Charset : public Pooled {
                     65: public:
                     66: 
1.2       paf        67:        Charset(Pool& apool, const String& aname, const String *request_file_spec);
1.1       paf        68:        Charset::~Charset();
                     69:        
                     70:        const String& name() const { return fname; }
                     71: 
                     72:        bool isUTF8() const { return fisUTF8; }
                     73: 
                     74:        static void transcode(Pool& pool,
                     75:                const Charset& source_transcoder, const void *source_body, size_t source_content_length,
                     76:                const Charset& dest_transcoder, const void *& dest_body, size_t& dest_content_length
                     77:        );
                     78: 
                     79: public:
                     80: 
                     81:        unsigned char pcre_tables[tables_length];
                     82: 
                     83: private:
                     84: 
1.2       paf        85:        void loadDefinition(const String& request_file_spec);
1.1       paf        86:        void sort_ToTable();
                     87: 
                     88:        void transcodeToUTF8(Pool& pool,
                     89:                                                                         const void *source_body, size_t source_content_length,
                     90:                                                                         const void *& dest_body, size_t& dest_content_length) const;
                     91:        void transcodeFromUTF8(Pool& pool,
                     92:                                                                           const void *source_body, size_t source_content_length,
                     93:                                                                           const void *& dest_body, size_t& dest_content_length) const;
                     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);
                    118: 
                    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
                    123:        String& transcode(GdomeDOMString *s);
                    124:        /// converts char * to GdomeDOMString
1.5       paf       125:        GdomeDOMString_auto_ptr transcode_buf(const char *buf, size_t buf_size);
1.3       paf       126:        /// converts parser String to GdomeDOMString
1.5       paf       127:        GdomeDOMString_auto_ptr transcode(const String& s);
1.1       paf       128: 
                    129: private:
                    130: 
1.3       paf       131:        xmlCharEncodingHandler *transcoder;
1.1       paf       132: 
                    133: #endif
                    134: 
1.5       paf       135: };
                    136: 
                    137: /// Auto-object used to track GdomeDOMString usage
                    138: class GdomeDOMString_auto_ptr {
                    139:        GdomeDOMString *fstring;
                    140: public:
1.6     ! paf       141:        explicit GdomeDOMString_auto_ptr(gchar *astring) : fstring(gdome_str_mkref(astring)) {}
1.5       paf       142:        explicit GdomeDOMString_auto_ptr(GdomeDOMString *astring) : fstring(astring) {
                    143:                gdome_str_ref(fstring);
                    144:        }
                    145:        ~GdomeDOMString_auto_ptr() {
                    146:                gdome_str_unref(fstring);
                    147:        }
                    148:        GdomeDOMString* get() {
                    149:                return fstring;
                    150:        }
                    151:        GdomeDOMString* operator->() {
                    152:                return fstring;
                    153:        }
                    154:        GdomeDOMString& operator*() {
                    155:                return *fstring;
                    156:        }
                    157: 
                    158:        // copying
                    159:        GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
                    160:                gdome_str_ref(fstring);
                    161:        }
                    162:        GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
                    163:                if(this == &src)
                    164:                        return *this;
                    165: 
                    166:                gdome_str_unref(fstring);
                    167:                fstring=src.fstring;
                    168:                gdome_str_ref(fstring);
                    169: 
                    170:                return *this;
                    171:        }
1.1       paf       172: };
                    173: 
                    174: #endif

E-mail: