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