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 #ifndef TRANSSERVICE_HPP
00121 #define TRANSSERVICE_HPP
00122
00123 #include <xercesc/util/XercesDefs.hpp>
00124
00125
00126
00127 class XMLPlatformUtils;
00128 class XMLLCPTranscoder;
00129 class XMLTranscoder;
00130 class ENameMap;
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144 class XMLTransService
00145 {
00146 public :
00147
00148
00149
00150 enum Codes
00151 {
00152 Ok
00153 , UnsupportedEncoding
00154 , InternalFailure
00155 , SupportFilesNotFound
00156 };
00157
00158 struct TransRec
00159 {
00160 XMLCh intCh;
00161 XMLByte extCh;
00162 };
00163
00164
00165
00166
00167
00168 virtual ~XMLTransService();
00169
00170
00171
00172
00173
00174 XMLTranscoder* makeNewTranscoderFor
00175 (
00176 const XMLCh* const encodingName
00177 , XMLTransService::Codes& resValue
00178 , const unsigned int blockSize
00179 );
00180
00181 XMLTranscoder* makeNewTranscoderFor
00182 (
00183 const char* const encodingName
00184 , XMLTransService::Codes& resValue
00185 , const unsigned int blockSize
00186 );
00187
00188
00189
00190
00191
00192 virtual int compareIString
00193 (
00194 const XMLCh* const comp1
00195 , const XMLCh* const comp2
00196 ) = 0;
00197
00198 virtual int compareNIString
00199 (
00200 const XMLCh* const comp1
00201 , const XMLCh* const comp2
00202 , const unsigned int maxChars
00203 ) = 0;
00204
00205 virtual const XMLCh* getId() const = 0;
00206
00207 virtual bool isSpace(const XMLCh toCheck) const = 0;
00208
00209 virtual XMLLCPTranscoder* makeNewLCPTranscoder() = 0;
00210
00211 virtual bool supportsSrcOfs() const = 0;
00212
00213 virtual void upperCase(XMLCh* const toUpperCase) const = 0;
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224 static void addEncoding(const XMLCh* const encoding, ENameMap* const ownMapping);
00225
00226
00227 protected :
00228
00229
00230
00231 XMLTransService();
00232
00233
00234
00235
00236
00237 virtual XMLTranscoder* makeNewXMLTranscoder
00238 (
00239 const XMLCh* const encodingName
00240 , XMLTransService::Codes& resValue
00241 , const unsigned int blockSize
00242 ) = 0;
00243
00244
00245 private :
00246
00247
00248
00249 XMLTransService(const XMLTransService&);
00250 void operator=(const XMLTransService&);
00251
00252
00253
00254
00255
00256 friend class XMLPlatformUtils;
00257 void initTransService();
00258 };
00259
00260
00261
00269
00278 class XMLTranscoder
00279 {
00280 public :
00281
00289 enum UnRepOpts
00290 {
00291 UnRep_Throw
00292 , UnRep_RepChar
00293 };
00294
00295
00298
00303 virtual ~XMLTranscoder();
00305
00306
00307
00310
00328
00329
00330 virtual unsigned int transcodeFrom
00331 (
00332 const XMLByte* const srcData
00333 , const unsigned int srcCount
00334 , XMLCh* const toFill
00335 , const unsigned int maxChars
00336 , unsigned int& bytesEaten
00337 , unsigned char* const charSizes
00338 ) = 0;
00339
00352
00353 virtual unsigned int transcodeTo
00354 (
00355 const XMLCh* const srcData
00356 , const unsigned int srcCount
00357 , XMLByte* const toFill
00358 , const unsigned int maxBytes
00359 , unsigned int& charsEaten
00360 , const UnRepOpts options
00361 ) = 0;
00362
00367
00368 virtual bool canTranscodeTo
00369 (
00370 const unsigned int toCheck
00371 ) const = 0;
00372
00374
00377
00386 unsigned int getBlockSize() const;
00387
00393 const XMLCh* getEncodingName() const;
00395
00396 protected :
00397
00398
00399
00400 XMLTranscoder
00401 (
00402 const XMLCh* const encodingName
00403 , const unsigned int blockSize
00404 );
00405
00406
00407
00408
00409
00410 void checkBlockSize(const unsigned int toCheck);
00411
00412
00413 private :
00414
00415
00416
00417 XMLTranscoder(const XMLTranscoder&);
00418 void operator=(const XMLTranscoder&);
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434 unsigned int fBlockSize;
00435 XMLCh* fEncodingName;
00436 };
00437
00438
00439
00440
00441
00442
00443
00444
00445 class XMLLCPTranscoder
00446 {
00447 public :
00448
00449
00450
00451 virtual ~XMLLCPTranscoder();
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464 virtual unsigned int calcRequiredSize(const char* const srcText) = 0;
00465
00466 virtual unsigned int calcRequiredSize(const XMLCh* const srcText) = 0;
00467
00468 virtual char* transcode(const XMLCh* const toTranscode) = 0;
00469
00470 virtual XMLCh* transcode(const char* const toTranscode) = 0;
00471
00472 virtual bool transcode
00473 (
00474 const char* const toTranscode
00475 , XMLCh* const toFill
00476 , const unsigned int maxChars
00477 ) = 0;
00478
00479 virtual bool transcode
00480 (
00481 const XMLCh* const toTranscode
00482 , char* const toFill
00483 , const unsigned int maxBytes
00484 ) = 0;
00485
00486
00487 protected :
00488
00489
00490
00491 XMLLCPTranscoder();
00492
00493
00494 private :
00495
00496
00497
00498 XMLLCPTranscoder(const XMLLCPTranscoder&);
00499 void operator=(const XMLLCPTranscoder&);
00500 };
00501
00502
00503
00504
00505
00506 inline unsigned int XMLTranscoder::getBlockSize() const
00507 {
00508 return fBlockSize;
00509 }
00510
00511 inline const XMLCh* XMLTranscoder::getEncodingName() const
00512 {
00513 return fEncodingName;
00514 }
00515
00516 #endif