Annotation of parser3/src/include/pa_charset.h, revision 1.20.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.13! paf 11: static const char* IDENT_CHARSET_H="$Date: 2003/02/19 16:19:00 $";
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.1 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
59: );
60:
1.9 paf 61: #ifdef XML
62: xmlCharEncodingHandler *transcoder(const String *source);
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,
75: const void *source_body, size_t source_content_length,
76: const void *& dest_body, size_t& dest_content_length) const;
77: void transcodeFromUTF8(Pool& pool,
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,
83: const void *source_body, size_t source_content_length,
84: const void *& dest_body, size_t& dest_content_length) const;
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.4 paf 104: void addEncoding(char *name_cstr);
1.20.2.10 paf 105: void initTranscoder(const String *source, const char* name_cstr);
1.9 paf 106:
1.1 paf 107: public:
1.3 paf 108: /// converts GdomeDOMString string to char *
1.20.2.10 paf 109: const char* transcode_cstr(GdomeDOMString *s);
1.3 paf 110: /// converts GdomeDOMString string to parser String
1.19 paf 111: String& transcode(GdomeDOMString *s
112: #ifndef NO_STRING_ORIGIN
113: , const String *origin
114: #endif
115: );
1.8 paf 116: /// converts xmlChar* null-terminated string to char *
1.20.2.10 paf 117: const char* transcode_cstr(xmlChar *s);
1.8 paf 118: /// converts xmlChar* null-terminated string to parser String
1.19 paf 119: String& transcode(xmlChar *s
120: #ifndef NO_STRING_ORIGIN
121: , const String *origin
122: #endif
123: );
1.16 paf 124: /** converts sized char * to xmlChar*
125: @returns xmlChar * which caller should free
126: */
1.20.2.11 paf 127: xmlChar *transcode_buf2xchar(Pool& pool, const char* buf, size_t buf_size);
1.3 paf 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.5 paf 131: GdomeDOMString_auto_ptr transcode(const String& s);
1.1 paf 132:
133: private:
134:
1.9 paf 135: xmlCharEncodingHandler *ftranscoder;
1.1 paf 136:
137: #endif
138:
1.5 paf 139: };
1.20.2.8 paf 140: DECLARE_OBJECT_PTR(Charset);
1.5 paf 141:
1.12 paf 142: #ifdef XML
1.5 paf 143: /// Auto-object used to track GdomeDOMString usage
144: class GdomeDOMString_auto_ptr {
145: GdomeDOMString *fstring;
146: public:
1.6 paf 147: explicit GdomeDOMString_auto_ptr(gchar *astring) : fstring(gdome_str_mkref(astring)) {}
1.5 paf 148: explicit GdomeDOMString_auto_ptr(GdomeDOMString *astring) : fstring(astring) {
1.7 paf 149: // not ref-ing, owning
1.5 paf 150: }
151: ~GdomeDOMString_auto_ptr() {
152: gdome_str_unref(fstring);
153: }
154: GdomeDOMString* get() {
155: return fstring;
156: }
157: GdomeDOMString* operator->() {
158: return fstring;
159: }
160: GdomeDOMString& operator*() {
161: return *fstring;
162: }
163:
164: // copying
165: GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
166: gdome_str_ref(fstring);
167: }
168: GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
169: if(this == &src)
170: return *this;
171:
172: gdome_str_unref(fstring);
173: fstring=src.fstring;
174: gdome_str_ref(fstring);
175:
176: return *this;
177: }
1.1 paf 178: };
1.12 paf 179: #endif
1.1 paf 180:
181: #endif
E-mail: