Annotation of parser3/src/include/pa_charset.h, revision 1.1
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:
! 7: $Id: pa_charset.h,v 1.5 2001/12/14 12:53:47 paf Exp $
! 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:
! 49: Charset(Pool& apool, const String& request_name, const String *file_spec);
! 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:
! 67: void loadDefinition(const String& file_spec);
! 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:
! 84: String fname;
! 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: