Annotation of parser3/src/include/pa_charset.h, revision 1.20.2.18
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! paf 11: static const char* IDENT_CHARSET_H="$Date: 2003/03/07 14:56:59 $";
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*
1.20.2.17 paf 115: const char* transcode_cstr(Pool& pool, GdomeDOMString* s);
1.3 paf 116: /// converts GdomeDOMString string to parser String
1.20.2.17 paf 117: StringPtr transcode(Pool& pool, 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*
1.20.2.17 paf 123: const char* transcode_cstr(Pool& pool, xmlChar* s);
1.8 paf 124: /// converts xmlChar* null-terminated string to parser String
1.20.2.17 paf 125: StringPtr transcode(Pool& pool, 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.16 paf 130:
1.20.2.14 paf 131: /** converts sized char* to xmlChar*
132: @returns xmlChar* WHICH CALLER SHOULD FREE
1.16 paf 133: */
1.20.2.14 paf 134: xmlChar* transcode_buf2xchar(const char* buf, size_t buf_size);
1.20.2.16 paf 135: /** converts sized char* to gchar*
136: @returns gchar* WHICH CALLER SHOULD FREE
137: */
138: gchar* transcode_buf2gchar(const char* buf, size_t buf_size);
1.20.2.14 paf 139: /// converts char* to GdomeDOMString
1.20.2.10 paf 140: GdomeDOMString_auto_ptr transcode_buf2dom(const char* buf, size_t buf_size);
1.3 paf 141: /// converts parser String to GdomeDOMString
1.20.2.14 paf 142: GdomeDOMString_auto_ptr transcode(StringPtr s);
1.20.2.16 paf 143:
144: private:
145:
146: typedef void* (*transcode_buf_malloc_func)(size_t size);
147: void* transcode_buf2mchar(transcode_buf_malloc_func malloc_func,
148: const char* buf, size_t buf_size);
1.1 paf 149:
150: private:
151:
1.20.2.14 paf 152: typedef smart_ptr<xmlCharEncodingHandler> xmlCharEncodingHandlerPtr;
153: xmlCharEncodingHandlerPtr fcreated_handler;
154: xmlCharEncodingHandler* ftranscoder;
1.1 paf 155:
156: #endif
157:
1.5 paf 158: };
1.20.2.8 paf 159: DECLARE_OBJECT_PTR(Charset);
1.5 paf 160:
1.12 paf 161: #ifdef XML
1.5 paf 162: /// Auto-object used to track GdomeDOMString usage
163: class GdomeDOMString_auto_ptr {
1.20.2.14 paf 164: GdomeDOMString* fstring;
1.5 paf 165: public:
1.20.2.14 paf 166: /// frees astring afterwards!!!
167: explicit GdomeDOMString_auto_ptr(gchar* astring) : fstring(gdome_str_mkref_own(astring)) {}
1.20.2.18! paf 168: explicit GdomeDOMString_auto_ptr(GdomeDOMString* astring=0) : fstring(astring) {
1.7 paf 169: // not ref-ing, owning
1.5 paf 170: }
171: ~GdomeDOMString_auto_ptr() {
1.20.2.18! paf 172: if(fstring)
! 173: gdome_str_unref(fstring);
1.5 paf 174: }
175: GdomeDOMString* get() {
176: return fstring;
177: }
178: GdomeDOMString* operator->() {
179: return fstring;
180: }
181: GdomeDOMString& operator*() {
1.20.2.14 paf 182: return* fstring;
1.5 paf 183: }
184:
185: // copying
186: GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
187: gdome_str_ref(fstring);
188: }
189: GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
190: if(this == &src)
1.20.2.14 paf 191: return* this;
1.5 paf 192:
1.20.2.18! paf 193: if(fstring)
! 194: gdome_str_unref(fstring);
1.5 paf 195: fstring=src.fstring;
1.20.2.18! paf 196: if(fstring)
! 197: gdome_str_ref(fstring);
1.5 paf 198:
1.20.2.14 paf 199: return* this;
1.5 paf 200: }
1.1 paf 201: };
1.12 paf 202: #endif
1.1 paf 203:
204: #endif
E-mail: