Annotation of parser3/src/include/pa_charset.h, revision 1.9
1.1 paf 1: /** @file
2: Parser: Charset connection decl.
3:
4: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
5: Author: Alexander Petrosyan <paf@design.ru> (http://paf.design.ru)
6:
1.9 ! paf 7: $Id: pa_charset.h,v 1.8 2002/01/14 17:48:56 paf Exp $
1.1 paf 8: */
9:
10: #ifndef PA_CHARSET_H
11: #define PA_CHARSET_H
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:
29: #ifdef XML
1.3 paf 30: /*# include <util/XercesDefs.hpp>
1.1 paf 31: # include <util/TransService.hpp>
32: # define Charset_TransRec XMLTransService::TransRec
1.3 paf 33: */
34:
35: # ifndef XMLCh
36: # define XMLCh unsigned int
37: # endif
38: # ifndef XMLByte
39: # define XMLByte unsigned char
40: # endif
41:
42: struct Charset_TransRec {
43: XMLCh intCh;
44: XMLByte extCh;
45: };
46:
1.1 paf 47: #else
48: # ifndef XMLCh
49: # define XMLCh unsigned int
50: # endif
51: # ifndef XMLByte
52: # define XMLByte unsigned char
53: # endif
54:
55: struct Charset_TransRec {
56: XMLCh intCh;
57: XMLByte extCh;
58: };
59: #endif
60:
61: /** charset holds name & transcode tables
62: registers Xerces transcoders
63: */
64: class Charset : public Pooled {
65: public:
66:
1.2 paf 67: Charset(Pool& apool, const String& aname, const String *request_file_spec);
1.1 paf 68: Charset::~Charset();
69:
70: const String& name() const { return fname; }
71:
72: bool isUTF8() const { return fisUTF8; }
73:
74: static void transcode(Pool& pool,
75: const Charset& source_transcoder, const void *source_body, size_t source_content_length,
76: const Charset& dest_transcoder, const void *& dest_body, size_t& dest_content_length
77: );
78:
1.9 ! paf 79: #ifdef XML
! 80: xmlCharEncodingHandler *transcoder(const String *source);
! 81: #endif
! 82:
1.1 paf 83: public:
84:
85: unsigned char pcre_tables[tables_length];
86:
87: private:
88:
1.2 paf 89: void loadDefinition(const String& request_file_spec);
1.1 paf 90: void sort_ToTable();
91:
92: void transcodeToUTF8(Pool& pool,
93: const void *source_body, size_t source_content_length,
94: const void *& dest_body, size_t& dest_content_length) const;
95: void transcodeFromUTF8(Pool& pool,
96: const void *source_body, size_t source_content_length,
97: const void *& dest_body, size_t& dest_content_length) const;
98: void transcodeToCharset(Pool& pool,
99: const Charset& dest_transcoder,
100: const void *source_body, size_t source_content_length,
101: const void *& dest_body, size_t& dest_content_length) const;
102:
1.4 paf 103: public:
104:
105: struct Tables {
106: XMLCh fromTable[0x100];
107: Charset_TransRec *toTable;
108: uint toTableSize;
109: };
110:
1.1 paf 111: private:
112:
1.2 paf 113: const String& fname;
1.1 paf 114: bool fisUTF8;
1.4 paf 115: Tables tables;
1.1 paf 116:
117: #ifdef XML
118:
119: private:
1.4 paf 120: void addEncoding(char *name_cstr);
1.1 paf 121: void initTranscoder(const String *source, const char *name_cstr);
1.9 ! paf 122:
1.1 paf 123: public:
1.3 paf 124: /// converts GdomeDOMString string to char *
125: const char *transcode_cstr(GdomeDOMString *s);
126: /// converts GdomeDOMString string to parser String
127: String& transcode(GdomeDOMString *s);
1.8 paf 128: /// converts xmlChar* null-terminated string to char *
129: const char *transcode_cstr(xmlChar *s);
130: /// converts xmlChar* null-terminated string to parser String
131: String& transcode(xmlChar *s);
1.3 paf 132: /// converts char * to GdomeDOMString
1.5 paf 133: GdomeDOMString_auto_ptr transcode_buf(const char *buf, size_t buf_size);
1.3 paf 134: /// converts parser String to GdomeDOMString
1.5 paf 135: GdomeDOMString_auto_ptr transcode(const String& s);
1.1 paf 136:
137: private:
138:
1.9 ! paf 139: xmlCharEncodingHandler *ftranscoder;
1.1 paf 140:
141: #endif
142:
1.5 paf 143: };
144:
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: };
181:
182: #endif
E-mail: