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

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

E-mail: