00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef TRANSSERVICE_HPP
00023 #define TRANSSERVICE_HPP
00024
00025 #include <xercesc/util/XMemory.hpp>
00026 #include <xercesc/util/PlatformUtils.hpp>
00027 #include <xercesc/framework/XMLRecognizer.hpp>
00028 #include <xercesc/util/RefHashTableOf.hpp>
00029 #include <xercesc/util/RefVectorOf.hpp>
00030
00031 XERCES_CPP_NAMESPACE_BEGIN
00032
00033
00034
00035 class XMLLCPTranscoder;
00036 class XMLTranscoder;
00037 class ENameMap;
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 class XMLTransService : public XMemory
00052 {
00053 public :
00054
00055
00056
00057 enum Codes
00058 {
00059 Ok
00060 , UnsupportedEncoding
00061 , InternalFailure
00062 , SupportFilesNotFound
00063 };
00064
00065 struct TransRec
00066 {
00067 XMLCh intCh;
00068 XMLByte extCh;
00069 };
00070
00071
00072
00073
00074
00075 virtual ~XMLTransService();
00076
00077
00078
00079
00080
00081 XMLTranscoder* makeNewTranscoderFor
00082 (
00083 const XMLCh* const encodingName
00084 , XMLTransService::Codes& resValue
00085 , const unsigned int blockSize
00086 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00087 );
00088
00089 XMLTranscoder* makeNewTranscoderFor
00090 (
00091 const char* const encodingName
00092 , XMLTransService::Codes& resValue
00093 , const unsigned int blockSize
00094 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00095 );
00096
00097 XMLTranscoder* makeNewTranscoderFor
00098 (
00099 XMLRecognizer::Encodings encodingEnum
00100 , XMLTransService::Codes& resValue
00101 , const unsigned int blockSize
00102 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00103 );
00104
00105
00106
00107
00108
00109 virtual int compareIString
00110 (
00111 const XMLCh* const comp1
00112 , const XMLCh* const comp2
00113 ) = 0;
00114
00115 virtual int compareNIString
00116 (
00117 const XMLCh* const comp1
00118 , const XMLCh* const comp2
00119 , const unsigned int maxChars
00120 ) = 0;
00121
00122 virtual const XMLCh* getId() const = 0;
00123
00124 virtual bool isSpace(const XMLCh toCheck) const = 0;
00125
00126 virtual XMLLCPTranscoder* makeNewLCPTranscoder() = 0;
00127
00128 virtual bool supportsSrcOfs() const = 0;
00129
00130 virtual void upperCase(XMLCh* const toUpperCase) const = 0;
00131 virtual void lowerCase(XMLCh* const toLowerCase) const = 0;
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 static void addEncoding(const XMLCh* const encoding, ENameMap* const ownMapping);
00143
00144
00145 protected :
00146
00147
00148
00149 XMLTransService();
00150
00151
00152
00153
00154
00155 #ifdef OS390
00156 friend class Uniconv390TransService;
00157 #endif
00158 virtual XMLTranscoder* makeNewXMLTranscoder
00159 (
00160 const XMLCh* const encodingName
00161 , XMLTransService::Codes& resValue
00162 , const unsigned int blockSize
00163 , MemoryManager* const manager
00164 ) = 0;
00165
00166
00167
00168
00169 friend class XMLPlatformUtils;
00170 virtual void initTransService();
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183 static RefHashTableOf<ENameMap>* gMappings;
00184 static RefVectorOf<ENameMap>* gMappingsRecognizer;
00185
00186 private :
00187
00188
00189
00190 XMLTransService(const XMLTransService&);
00191 XMLTransService& operator=(const XMLTransService&);
00192
00193
00194
00195
00196
00197 void strictIANAEncoding(const bool newState);
00198 bool isStrictIANAEncoding();
00199 static void reinitMappings();
00200 static void reinitMappingsRecognizer();
00201
00202 };
00203
00204
00205
00222 class XMLTranscoder : public XMemory
00223 {
00224 public :
00225
00233 enum UnRepOpts
00234 {
00235 UnRep_Throw
00236 , UnRep_RepChar
00237 };
00238
00239
00242
00247 virtual ~XMLTranscoder();
00249
00250
00251
00254
00274 virtual unsigned int transcodeFrom
00275 (
00276 const XMLByte* const srcData
00277 , const unsigned int srcCount
00278 , XMLCh* const toFill
00279 , const unsigned int maxChars
00280 , unsigned int& bytesEaten
00281 , unsigned char* const charSizes
00282 ) = 0;
00283
00297 virtual unsigned int transcodeTo
00298 (
00299 const XMLCh* const srcData
00300 , const unsigned int srcCount
00301 , XMLByte* const toFill
00302 , const unsigned int maxBytes
00303 , unsigned int& charsEaten
00304 , const UnRepOpts options
00305 ) = 0;
00306
00312 virtual bool canTranscodeTo
00313 (
00314 const unsigned int toCheck
00315 ) const = 0;
00316
00318
00321
00326 unsigned int getBlockSize() const;
00327
00333 const XMLCh* getEncodingName() const;
00335
00338
00346 MemoryManager* getMemoryManager() const;
00347
00349
00350 protected :
00351
00352
00353
00354 XMLTranscoder
00355 (
00356 const XMLCh* const encodingName
00357 , const unsigned int blockSize
00358 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00359 );
00360
00361
00362
00363
00364
00365
00366
00367
00368 void checkBlockSize(const unsigned int toCheck);
00369
00370
00371 private :
00372
00373
00374
00375 XMLTranscoder(const XMLTranscoder&);
00376 XMLTranscoder& operator=(const XMLTranscoder&);
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388 unsigned int fBlockSize;
00389 XMLCh* fEncodingName;
00390 MemoryManager* fMemoryManager;
00391 };
00392
00393
00394
00395
00396
00397
00398
00399
00400 class XMLLCPTranscoder : public XMemory
00401 {
00402 public :
00403
00404
00405
00406 virtual ~XMLLCPTranscoder();
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419 virtual unsigned int calcRequiredSize(const char* const srcText
00420 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager) = 0;
00421
00422 virtual unsigned int calcRequiredSize(const XMLCh* const srcText
00423 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager) = 0;
00424
00425 virtual char* transcode(const XMLCh* const toTranscode) = 0;
00426 virtual char* transcode(const XMLCh* const toTranscode,
00427 MemoryManager* const manager) = 0;
00428
00429 virtual XMLCh* transcode(const char* const toTranscode) = 0;
00430 virtual XMLCh* transcode(const char* const toTranscode,
00431 MemoryManager* const manager) = 0;
00432
00433 virtual bool transcode
00434 (
00435 const char* const toTranscode
00436 , XMLCh* const toFill
00437 , const unsigned int maxChars
00438 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00439 ) = 0;
00440
00441 virtual bool transcode
00442 (
00443 const XMLCh* const toTranscode
00444 , char* const toFill
00445 , const unsigned int maxBytes
00446 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00447 ) = 0;
00448
00449
00450 protected :
00451
00452
00453
00454 XMLLCPTranscoder();
00455
00456
00457 private :
00458
00459
00460
00461 XMLLCPTranscoder(const XMLLCPTranscoder&);
00462 XMLLCPTranscoder& operator=(const XMLLCPTranscoder&);
00463 };
00464
00465
00466
00467
00468
00469 inline MemoryManager* XMLTranscoder::getMemoryManager() const
00470 {
00471 return fMemoryManager;
00472 }
00473
00474
00475
00476
00477 inline unsigned int XMLTranscoder::getBlockSize() const
00478 {
00479 return fBlockSize;
00480 }
00481
00482 inline const XMLCh* XMLTranscoder::getEncodingName() const
00483 {
00484 return fEncodingName;
00485 }
00486
00487 XERCES_CPP_NAMESPACE_END
00488
00489 #endif