Annotation of parser3/src/include/pa_charset.h, revision 1.2
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.2 ! paf 7: $Id: pa_charset.h,v 1.1 2001/12/15 21:51: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:
23: // defines
24:
25: #ifdef XML
26: # include <util/XercesDefs.hpp>
27: # include <util/TransService.hpp>
28: # define Charset_TransRec XMLTransService::TransRec
29: #else
30: # ifndef XMLCh
31: # define XMLCh unsigned int
32: # endif
33: # ifndef XMLByte
34: # define XMLByte unsigned char
35: # endif
36:
37: struct Charset_TransRec {
38: XMLCh intCh;
39: XMLByte extCh;
40: };
41: #endif
42:
43: /** charset holds name & transcode tables
44: registers Xerces transcoders
45: */
46: class Charset : public Pooled {
47: public:
48:
1.2 ! paf 49: Charset(Pool& apool, const String& aname, const String *request_file_spec);
1.1 paf 50: Charset::~Charset();
51:
52: const String& name() const { return fname; }
53:
54: bool isUTF8() const { return fisUTF8; }
55:
56: static void transcode(Pool& pool,
57: const Charset& source_transcoder, const void *source_body, size_t source_content_length,
58: const Charset& dest_transcoder, const void *& dest_body, size_t& dest_content_length
59: );
60:
61: public:
62:
63: unsigned char pcre_tables[tables_length];
64:
65: private:
66:
1.2 ! paf 67: void loadDefinition(const String& request_file_spec);
1.1 paf 68: void sort_ToTable();
69:
70: XMLByte xlatOneTo(const XMLCh toXlat) const;
71: void transcodeToUTF8(Pool& pool,
72: const void *source_body, size_t source_content_length,
73: const void *& dest_body, size_t& dest_content_length) const;
74: void transcodeFromUTF8(Pool& pool,
75: const void *source_body, size_t source_content_length,
76: const void *& dest_body, size_t& dest_content_length) const;
77: void transcodeToCharset(Pool& pool,
78: const Charset& dest_transcoder,
79: const void *source_body, size_t source_content_length,
80: const void *& dest_body, size_t& dest_content_length) const;
81:
82: private:
83:
1.2 ! paf 84: const String& fname;
1.1 paf 85: bool fisUTF8;
86: XMLCh fromTable[0x100];
87: Charset_TransRec *toTable;
88: uint toTableSize;
89:
90: #ifdef XML
91:
92: private:
93: void addEncoding(const char *name_cstr);
94: void initTranscoder(const String *source, const char *name_cstr);
95:
96: public:
97: /// converts Xalan string to char *
98: const char *transcode_cstr(const XalanDOMString& s);
99: /// converts Xalan string to parser String
100: String& transcode(const XalanDOMString& s);
101: /// converts char * to Xalan string
102: std::auto_ptr<XalanDOMString> transcode_buf(const char *buf, size_t buf_size);
103: /// converts parser String to Xalan string
104: std::auto_ptr<XalanDOMString> transcode(const String& s);
105:
106: private:
107:
108: XMLTranscoder *transcoder;
109:
110: #endif
111:
112: };
113:
114: #endif
E-mail: