Annotation of parser3/src/include/pa_charset.h, revision 1.20.2.14
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.14! paf 11: static const char* IDENT_CHARSET_H="$Date: 2003/03/06 08:21:09 $";
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.20.2.14! 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
1.1 paf 59: );
60:
1.9 paf 61: #ifdef XML
1.20.2.14! paf 62: xmlCharEncodingHandler& transcoder(StringPtr source);
1.9 paf 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,
1.20.2.14! paf 75: const void* source_body, size_t source_content_length,
! 76: const void* & dest_body, size_t& dest_content_length) const;
1.1 paf 77: void transcodeFromUTF8(Pool& pool,
1.20.2.14! paf 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,
1.20.2.14! paf 83: const void* source_body, size_t source_content_length,
! 84: const void*& dest_body, size_t& dest_content_length) const;
1.1 paf 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.20.2.14! paf 104: void addEncoding(char* name_cstr);
! 105: void initTranscoder(StringPtr source, const char* name_cstr);
1.9 paf 106:
1.1 paf 107: public:
1.20.2.14! paf 108: /// converts GdomeDOMString string to char*
! 109: const char* transcode_cstr(GdomeDOMString* s);
1.3 paf 110: /// converts GdomeDOMString string to parser String
1.20.2.14! paf 111: StringPtr transcode(GdomeDOMString* s
1.19 paf 112: #ifndef NO_STRING_ORIGIN
1.20.2.14! paf 113: , StringPtr origin
1.19 paf 114: #endif
115: );
1.20.2.14! paf 116: /// converts xmlChar* null-terminated string to char*
! 117: CharPtr transcode_cstr(xmlChar* s);
1.8 paf 118: /// converts xmlChar* null-terminated string to parser String
1.20.2.14! paf 119: StringPtr transcode(xmlChar* s
1.19 paf 120: #ifndef NO_STRING_ORIGIN
1.20.2.14! paf 121: , StringPtr origin
1.19 paf 122: #endif
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);
! 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.20.2.14! paf 131: GdomeDOMString_auto_ptr transcode(StringPtr s);
1.1 paf 132:
133: private:
134:
1.20.2.14! paf 135: typedef smart_ptr<xmlCharEncodingHandler> xmlCharEncodingHandlerPtr;
! 136: xmlCharEncodingHandlerPtr fcreated_handler;
! 137: xmlCharEncodingHandler* ftranscoder;
1.1 paf 138:
139: #endif
140:
1.5 paf 141: };
1.20.2.8 paf 142: DECLARE_OBJECT_PTR(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 {
1.20.2.14! paf 147: GdomeDOMString* fstring;
1.5 paf 148: public:
1.20.2.14! paf 149: /// frees astring afterwards!!!
! 150: explicit GdomeDOMString_auto_ptr(gchar* astring) : fstring(gdome_str_mkref_own(astring)) {}
! 151: explicit GdomeDOMString_auto_ptr(GdomeDOMString* astring) : fstring(astring) {
1.7 paf 152: // not ref-ing, owning
1.5 paf 153: }
154: ~GdomeDOMString_auto_ptr() {
155: gdome_str_unref(fstring);
156: }
157: GdomeDOMString* get() {
158: return fstring;
159: }
160: GdomeDOMString* operator->() {
161: return fstring;
162: }
163: GdomeDOMString& operator*() {
1.20.2.14! paf 164: return* fstring;
1.5 paf 165: }
166:
167: // copying
168: GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
169: gdome_str_ref(fstring);
170: }
171: GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
172: if(this == &src)
1.20.2.14! paf 173: return* this;
1.5 paf 174:
175: gdome_str_unref(fstring);
176: fstring=src.fstring;
177: gdome_str_ref(fstring);
178:
1.20.2.14! paf 179: return* this;
1.5 paf 180: }
1.1 paf 181: };
1.12 paf 182: #endif
1.1 paf 183:
184: #endif
E-mail: