Annotation of parser3/src/include/pa_charset.h, revision 1.20.2.7
1.1 paf 1: /** @file
2: Parser: Charset connection decl.
3:
1.20 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.7! paf 11: static const char* IDENT_CHARSET_H="$Date: 2003/01/28 15:16:49 $";
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.3 paf 29: # ifndef XMLCh
1.10 paf 30: typedef unsigned int XMLCh;
1.3 paf 31: # endif
32: # ifndef XMLByte
1.11 paf 33: typedef unsigned char XMLByte;
1.3 paf 34: # endif
35:
1.10 paf 36: struct Charset_TransRec {
37: XMLCh intCh;
38: XMLByte extCh;
39: };
1.1 paf 40:
41: /** charset holds name & transcode tables
1.20.2.3 paf 42: registers libxml transcoders
1.1 paf 43: */
1.20.2.3 paf 44: class Charset: public PA_Object {
1.20.2.5 paf 45: Pool pool_for_load;
1.1 paf 46: public:
47:
1.20.2.5 paf 48: Charset(ConstStringPtr aname, ConstStringPtr afile_spec);
1.20.2.6 paf 49: override ~Charset();
1.1 paf 50:
1.20.2.2 paf 51: ConstStringPtr name() const { return fname; }
1.1 paf 52:
53: bool isUTF8() const { return fisUTF8; }
54:
1.20.2.2 paf 55: static void transcode(Pool& pool,
1.1 paf 56: const Charset& source_transcoder, const void *source_body, size_t source_content_length,
57: const Charset& dest_transcoder, const void *& dest_body, size_t& dest_content_length
58: );
59:
1.9 paf 60: #ifdef XML
61: xmlCharEncodingHandler *transcoder(const String *source);
62: #endif
63:
1.1 paf 64: public:
65:
66: unsigned char pcre_tables[tables_length];
67:
68: private:
69:
1.20.2.5 paf 70: void load_definition(ConstStringPtr afile_spec);
1.1 paf 71: void sort_ToTable();
72:
73: void transcodeToUTF8(Pool& pool,
74: const void *source_body, size_t source_content_length,
75: const void *& dest_body, size_t& dest_content_length) const;
76: void transcodeFromUTF8(Pool& pool,
77: const void *source_body, size_t source_content_length,
78: const void *& dest_body, size_t& dest_content_length) const;
1.15 paf 79:
1.1 paf 80: void transcodeToCharset(Pool& pool,
81: const Charset& dest_transcoder,
82: const void *source_body, size_t source_content_length,
83: const void *& dest_body, size_t& dest_content_length) const;
84:
1.4 paf 85: public:
86:
87: struct Tables {
88: XMLCh fromTable[0x100];
89: Charset_TransRec *toTable;
90: uint toTableSize;
91: };
92:
1.1 paf 93: private:
94:
1.20.2.2 paf 95: ConstStringPtr fname;
96: CharPtr fname_cstr;
1.1 paf 97: bool fisUTF8;
1.4 paf 98: Tables tables;
1.1 paf 99:
100: #ifdef XML
101:
102: private:
1.4 paf 103: void addEncoding(char *name_cstr);
1.1 paf 104: void initTranscoder(const String *source, const char *name_cstr);
1.9 paf 105:
1.1 paf 106: public:
1.3 paf 107: /// converts GdomeDOMString string to char *
108: const char *transcode_cstr(GdomeDOMString *s);
109: /// converts GdomeDOMString string to parser String
1.19 paf 110: String& transcode(GdomeDOMString *s
111: #ifndef NO_STRING_ORIGIN
112: , const String *origin
113: #endif
114: );
1.8 paf 115: /// converts xmlChar* null-terminated string to char *
116: const char *transcode_cstr(xmlChar *s);
117: /// converts xmlChar* null-terminated string to parser String
1.19 paf 118: String& transcode(xmlChar *s
119: #ifndef NO_STRING_ORIGIN
120: , const String *origin
121: #endif
122: );
1.16 paf 123: /** converts sized char * to xmlChar*
124: @returns xmlChar * which caller should free
125: */
126: xmlChar *transcode_buf2xchar(const char *buf, size_t buf_size);
1.3 paf 127: /// converts char * to GdomeDOMString
1.16 paf 128: GdomeDOMString_auto_ptr transcode_buf2dom(const char *buf, size_t buf_size);
1.3 paf 129: /// converts parser String to GdomeDOMString
1.5 paf 130: GdomeDOMString_auto_ptr transcode(const String& s);
1.1 paf 131:
132: private:
133:
1.9 paf 134: xmlCharEncodingHandler *ftranscoder;
1.1 paf 135:
136: #endif
137:
1.5 paf 138: };
1.20.2.3 paf 139:
140: DECLARE_OBJECT_PTR(Charset)
1.20.2.4 paf 141:
142: extern CharsetPtr UTF8_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 {
147: GdomeDOMString *fstring;
148: public:
1.6 paf 149: explicit GdomeDOMString_auto_ptr(gchar *astring) : fstring(gdome_str_mkref(astring)) {}
1.5 paf 150: explicit GdomeDOMString_auto_ptr(GdomeDOMString *astring) : fstring(astring) {
1.7 paf 151: // not ref-ing, owning
1.5 paf 152: }
153: ~GdomeDOMString_auto_ptr() {
154: gdome_str_unref(fstring);
155: }
156: GdomeDOMString* get() {
157: return fstring;
158: }
159: GdomeDOMString* operator->() {
160: return fstring;
161: }
162: GdomeDOMString& operator*() {
163: return *fstring;
164: }
165:
166: // copying
167: GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
168: gdome_str_ref(fstring);
169: }
170: GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
171: if(this == &src)
172: return *this;
173:
174: gdome_str_unref(fstring);
175: fstring=src.fstring;
176: gdome_str_ref(fstring);
177:
178: return *this;
179: }
1.1 paf 180: };
1.12 paf 181: #endif
1.1 paf 182:
183: #endif
E-mail: