Annotation of parser3/src/include/pa_charset.h, revision 1.10
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.10 ! paf 7: $Id: pa_charset.h,v 1.9 2002/01/15 13:18:43 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:
1.3 paf 29: # ifndef XMLCh
1.10 ! paf 30: typedef unsigned int XMLCh;
1.3 paf 31: # endif
32: # ifndef XMLByte
1.10 ! 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: */
44: class Charset : public Pooled {
45: public:
46:
1.2 paf 47: Charset(Pool& apool, const String& aname, const String *request_file_spec);
1.1 paf 48: Charset::~Charset();
49:
50: const String& name() const { return fname; }
51:
52: bool isUTF8() const { return fisUTF8; }
53:
54: static void transcode(Pool& pool,
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.2 paf 69: void loadDefinition(const String& request_file_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;
78: void transcodeToCharset(Pool& pool,
79: const Charset& dest_transcoder,
80: const void *source_body, size_t source_content_length,
81: const void *& dest_body, size_t& dest_content_length) const;
82:
1.4 paf 83: public:
84:
85: struct Tables {
86: XMLCh fromTable[0x100];
87: Charset_TransRec *toTable;
88: uint toTableSize;
89: };
90:
1.1 paf 91: private:
92:
1.2 paf 93: const String& fname;
1.1 paf 94: bool fisUTF8;
1.4 paf 95: Tables tables;
1.1 paf 96:
97: #ifdef XML
98:
99: private:
1.4 paf 100: void addEncoding(char *name_cstr);
1.1 paf 101: void initTranscoder(const String *source, const char *name_cstr);
1.9 paf 102:
1.1 paf 103: public:
1.3 paf 104: /// converts GdomeDOMString string to char *
105: const char *transcode_cstr(GdomeDOMString *s);
106: /// converts GdomeDOMString string to parser String
107: String& transcode(GdomeDOMString *s);
1.8 paf 108: /// converts xmlChar* null-terminated string to char *
109: const char *transcode_cstr(xmlChar *s);
110: /// converts xmlChar* null-terminated string to parser String
111: String& transcode(xmlChar *s);
1.3 paf 112: /// converts char * to GdomeDOMString
1.5 paf 113: GdomeDOMString_auto_ptr transcode_buf(const char *buf, size_t buf_size);
1.3 paf 114: /// converts parser String to GdomeDOMString
1.5 paf 115: GdomeDOMString_auto_ptr transcode(const String& s);
1.1 paf 116:
117: private:
118:
1.9 paf 119: xmlCharEncodingHandler *ftranscoder;
1.1 paf 120:
121: #endif
122:
1.5 paf 123: };
124:
125: /// Auto-object used to track GdomeDOMString usage
126: class GdomeDOMString_auto_ptr {
127: GdomeDOMString *fstring;
128: public:
1.6 paf 129: explicit GdomeDOMString_auto_ptr(gchar *astring) : fstring(gdome_str_mkref(astring)) {}
1.5 paf 130: explicit GdomeDOMString_auto_ptr(GdomeDOMString *astring) : fstring(astring) {
1.7 paf 131: // not ref-ing, owning
1.5 paf 132: }
133: ~GdomeDOMString_auto_ptr() {
134: gdome_str_unref(fstring);
135: }
136: GdomeDOMString* get() {
137: return fstring;
138: }
139: GdomeDOMString* operator->() {
140: return fstring;
141: }
142: GdomeDOMString& operator*() {
143: return *fstring;
144: }
145:
146: // copying
147: GdomeDOMString_auto_ptr(const GdomeDOMString_auto_ptr& src) : fstring(src.fstring) {
148: gdome_str_ref(fstring);
149: }
150: GdomeDOMString_auto_ptr& operator =(const GdomeDOMString_auto_ptr& src) {
151: if(this == &src)
152: return *this;
153:
154: gdome_str_unref(fstring);
155: fstring=src.fstring;
156: gdome_str_ref(fstring);
157:
158: return *this;
159: }
1.1 paf 160: };
161:
162: #endif
E-mail: