Annotation of parser3/src/include/pa_charset.h, revision 1.3
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.3 ! paf 7: $Id: pa_charset.h,v 1.2 2001/12/26 08:46:12 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:
79: public:
80:
81: unsigned char pcre_tables[tables_length];
82:
83: private:
84:
1.2 paf 85: void loadDefinition(const String& request_file_spec);
1.1 paf 86: void sort_ToTable();
87:
88: XMLByte xlatOneTo(const XMLCh toXlat) const;
89: void transcodeToUTF8(Pool& pool,
90: const void *source_body, size_t source_content_length,
91: const void *& dest_body, size_t& dest_content_length) const;
92: void transcodeFromUTF8(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 transcodeToCharset(Pool& pool,
96: const Charset& dest_transcoder,
97: const void *source_body, size_t source_content_length,
98: const void *& dest_body, size_t& dest_content_length) const;
99:
100: private:
101:
1.2 paf 102: const String& fname;
1.1 paf 103: bool fisUTF8;
104: XMLCh fromTable[0x100];
105: Charset_TransRec *toTable;
106: uint toTableSize;
107:
108: #ifdef XML
109:
110: private:
111: void addEncoding(const char *name_cstr);
112: void initTranscoder(const String *source, const char *name_cstr);
113:
114: public:
1.3 ! paf 115: /// converts GdomeDOMString string to char *
! 116: const char *transcode_cstr(GdomeDOMString *s);
! 117: /// converts GdomeDOMString string to parser String
! 118: String& transcode(GdomeDOMString *s);
! 119: /// converts char * to GdomeDOMString
! 120: GdomeDOMString *transcode_buf(const char *buf, size_t buf_size);
! 121: /// converts parser String to GdomeDOMString
! 122: GdomeDOMString *transcode(const String& s);
1.1 paf 123:
124: private:
125:
1.3 ! paf 126: xmlCharEncodingHandler *transcoder;
1.1 paf 127:
128: #endif
129:
130: };
131:
132: #endif
E-mail: