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