00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 #ifndef TRANSSERVICE_HPP
00149 #define TRANSSERVICE_HPP
00150
00151 #include <xercesc/util/XMemory.hpp>
00152 #include <xercesc/util/PlatformUtils.hpp>
00153 #include <xercesc/framework/XMLRecognizer.hpp>
00154 #include <xercesc/util/RefHashTableOf.hpp>
00155 #include <xercesc/util/RefVectorOf.hpp>
00156
00157 XERCES_CPP_NAMESPACE_BEGIN
00158
00159
00160
00161 class XMLLCPTranscoder;
00162 class XMLTranscoder;
00163 class ENameMap;
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 class XMLTransService : public XMemory
00178 {
00179 public :
00180
00181
00182
00183 enum Codes
00184 {
00185 Ok
00186 , UnsupportedEncoding
00187 , InternalFailure
00188 , SupportFilesNotFound
00189 };
00190
00191 struct TransRec
00192 {
00193 XMLCh intCh;
00194 XMLByte extCh;
00195 };
00196
00197
00198
00199
00200
00201 virtual ~XMLTransService();
00202
00203
00204
00205
00206
00207 XMLTranscoder* makeNewTranscoderFor
00208 (
00209 const XMLCh* const encodingName
00210 , XMLTransService::Codes& resValue
00211 , const unsigned int blockSize
00212 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00213 );
00214
00215 XMLTranscoder* makeNewTranscoderFor
00216 (
00217 const char* const encodingName
00218 , XMLTransService::Codes& resValue
00219 , const unsigned int blockSize
00220 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00221 );
00222
00223 XMLTranscoder* makeNewTranscoderFor
00224 (
00225 XMLRecognizer::Encodings encodingEnum
00226 , XMLTransService::Codes& resValue
00227 , const unsigned int blockSize
00228 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00229 );
00230
00231
00232
00233
00234
00235 virtual int compareIString
00236 (
00237 const XMLCh* const comp1
00238 , const XMLCh* const comp2
00239 ) = 0;
00240
00241 virtual int compareNIString
00242 (
00243 const XMLCh* const comp1
00244 , const XMLCh* const comp2
00245 , const unsigned int maxChars
00246 ) = 0;
00247
00248 virtual const XMLCh* getId() const = 0;
00249
00250 virtual bool isSpace(const XMLCh toCheck) const = 0;
00251
00252 virtual XMLLCPTranscoder* makeNewLCPTranscoder() = 0;
00253
00254 virtual bool supportsSrcOfs() const = 0;
00255
00256 virtual void upperCase(XMLCh* const toUpperCase) const = 0;
00257 virtual void lowerCase(XMLCh* const toLowerCase) const = 0;
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268 static void addEncoding(const XMLCh* const encoding, ENameMap* const ownMapping);
00269
00270
00271 protected :
00272
00273
00274
00275 XMLTransService();
00276
00277
00278
00279
00280
00281 virtual XMLTranscoder* makeNewXMLTranscoder
00282 (
00283 const XMLCh* const encodingName
00284 , XMLTransService::Codes& resValue
00285 , const unsigned int blockSize
00286 , MemoryManager* const manager
00287 ) = 0;
00288
00289
00290
00291
00292 friend class XMLPlatformUtils;
00293 virtual void initTransService();
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306 static RefHashTableOf<ENameMap>* gMappings;
00307 static RefVectorOf<ENameMap>* gMappingsRecognizer;
00308
00309 private :
00310
00311
00312
00313 XMLTransService(const XMLTransService&);
00314 XMLTransService& operator=(const XMLTransService&);
00315
00316
00317
00318
00319
00320 void strictIANAEncoding(const bool newState);
00321 bool isStrictIANAEncoding();
00322 static void reinitMappings();
00323 static void reinitMappingsRecognizer();
00324
00325 };
00326
00327
00328
00345 class XMLTranscoder : public XMemory
00346 {
00347 public :
00348
00356 enum UnRepOpts
00357 {
00358 UnRep_Throw
00359 , UnRep_RepChar
00360 };
00361
00362
00365
00370 virtual ~XMLTranscoder();
00372
00373
00374
00377
00397 virtual unsigned int transcodeFrom
00398 (
00399 const XMLByte* const srcData
00400 , const unsigned int srcCount
00401 , XMLCh* const toFill
00402 , const unsigned int maxChars
00403 , unsigned int& bytesEaten
00404 , unsigned char* const charSizes
00405 ) = 0;
00406
00420 virtual unsigned int transcodeTo
00421 (
00422 const XMLCh* const srcData
00423 , const unsigned int srcCount
00424 , XMLByte* const toFill
00425 , const unsigned int maxBytes
00426 , unsigned int& charsEaten
00427 , const UnRepOpts options
00428 ) = 0;
00429
00435 virtual bool canTranscodeTo
00436 (
00437 const unsigned int toCheck
00438 ) const = 0;
00439
00441
00444
00449 unsigned int getBlockSize() const;
00450
00456 const XMLCh* getEncodingName() const;
00458
00461
00469 MemoryManager* getMemoryManager() const;
00470
00472
00473 protected :
00474
00475
00476
00477 XMLTranscoder
00478 (
00479 const XMLCh* const encodingName
00480 , const unsigned int blockSize
00481 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00482 );
00483
00484
00485
00486
00487
00488 void checkBlockSize(const unsigned int toCheck);
00489
00490
00491 private :
00492
00493
00494
00495 XMLTranscoder(const XMLTranscoder&);
00496 XMLTranscoder& operator=(const XMLTranscoder&);
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508 unsigned int fBlockSize;
00509 XMLCh* fEncodingName;
00510 MemoryManager* fMemoryManager;
00511 };
00512
00513
00514
00515
00516
00517
00518
00519
00520 class XMLLCPTranscoder : public XMemory
00521 {
00522 public :
00523
00524
00525
00526 virtual ~XMLLCPTranscoder();
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539 virtual unsigned int calcRequiredSize(const char* const srcText) = 0;
00540
00541 virtual unsigned int calcRequiredSize(const XMLCh* const srcText) = 0;
00542
00543 virtual char* transcode(const XMLCh* const toTranscode) = 0;
00544 virtual char* transcode(const XMLCh* const toTranscode,
00545 MemoryManager* const manager) = 0;
00546
00547 virtual XMLCh* transcode(const char* const toTranscode) = 0;
00548 virtual XMLCh* transcode(const char* const toTranscode,
00549 MemoryManager* const manager) = 0;
00550
00551 virtual bool transcode
00552 (
00553 const char* const toTranscode
00554 , XMLCh* const toFill
00555 , const unsigned int maxChars
00556 ) = 0;
00557
00558 virtual bool transcode
00559 (
00560 const XMLCh* const toTranscode
00561 , char* const toFill
00562 , const unsigned int maxBytes
00563 ) = 0;
00564
00565
00566 protected :
00567
00568
00569
00570 XMLLCPTranscoder();
00571
00572
00573 private :
00574
00575
00576
00577 XMLLCPTranscoder(const XMLLCPTranscoder&);
00578 XMLLCPTranscoder& operator=(const XMLLCPTranscoder&);
00579 };
00580
00581
00582
00583
00584
00585 inline MemoryManager* XMLTranscoder::getMemoryManager() const
00586 {
00587 return fMemoryManager;
00588 }
00589
00590
00591
00592
00593 inline unsigned int XMLTranscoder::getBlockSize() const
00594 {
00595 return fBlockSize;
00596 }
00597
00598 inline const XMLCh* XMLTranscoder::getEncodingName() const
00599 {
00600 return fEncodingName;
00601 }
00602
00603 XERCES_CPP_NAMESPACE_END
00604
00605 #endif