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 #ifndef TRANSSERVICE_HPP
00106 #define TRANSSERVICE_HPP
00107
00108 #include <util/XercesDefs.hpp>
00109
00110
00111
00112 class XMLPlatformUtils;
00113 class XMLLCPTranscoder;
00114 class XMLTranscoder;
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128 class XMLTransService
00129 {
00130 public :
00131
00132
00133
00134 enum Codes
00135 {
00136 Ok
00137 , UnsupportedEncoding
00138 , InternalFailure
00139 , SupportFilesNotFound
00140 };
00141
00142 struct TransRec
00143 {
00144 XMLCh intCh;
00145 XMLByte extCh;
00146 };
00147
00148
00149
00150
00151
00152 virtual ~XMLTransService();
00153
00154
00155
00156
00157
00158 XMLTranscoder* makeNewTranscoderFor
00159 (
00160 const XMLCh* const encodingName
00161 , XMLTransService::Codes& resValue
00162 , const unsigned int blockSize
00163 );
00164
00165 XMLTranscoder* makeNewTranscoderFor
00166 (
00167 const char* const encodingName
00168 , XMLTransService::Codes& resValue
00169 , const unsigned int blockSize
00170 );
00171
00172
00173
00174
00175
00176 virtual int compareIString
00177 (
00178 const XMLCh* const comp1
00179 , const XMLCh* const comp2
00180 ) = 0;
00181
00182 virtual int compareNIString
00183 (
00184 const XMLCh* const comp1
00185 , const XMLCh* const comp2
00186 , const unsigned int maxChars
00187 ) = 0;
00188
00189 virtual const XMLCh* getId() const = 0;
00190
00191 virtual bool isSpace(const XMLCh toCheck) const = 0;
00192
00193 virtual XMLLCPTranscoder* makeNewLCPTranscoder() = 0;
00194
00195 virtual bool supportsSrcOfs() const = 0;
00196
00197 virtual void upperCase(XMLCh* const toUpperCase) const = 0;
00198
00199
00200 protected :
00201
00202
00203
00204 XMLTransService();
00205
00206
00207
00208
00209
00210 virtual XMLTranscoder* makeNewXMLTranscoder
00211 (
00212 const XMLCh* const encodingName
00213 , XMLTransService::Codes& resValue
00214 , const unsigned int blockSize
00215 ) = 0;
00216
00217
00218 private :
00219
00220
00221
00222 XMLTransService(const XMLTransService&);
00223 void operator=(const XMLTransService&);
00224
00225
00226
00227
00228
00229 friend class XMLPlatformUtils;
00230 void initTransService();
00231 };
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242 class XMLTranscoder
00243 {
00244 public :
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 enum UnRepOpts
00256 {
00257 UnRep_Throw
00258 , UnRep_RepChar
00259 };
00260
00261
00262
00263
00264
00265 virtual ~XMLTranscoder();
00266
00267
00268
00269
00270
00271 virtual unsigned int transcodeFrom
00272 (
00273 const XMLByte* const srcData
00274 , const unsigned int srcCount
00275 , XMLCh* const toFill
00276 , const unsigned int maxChars
00277 , unsigned int& bytesEaten
00278 , unsigned char* const charSizes
00279 ) = 0;
00280
00281 virtual unsigned int transcodeTo
00282 (
00283 const XMLCh* const srcData
00284 , const unsigned int srcCount
00285 , XMLByte* const toFill
00286 , const unsigned int maxBytes
00287 , unsigned int& charsEaten
00288 , const UnRepOpts options
00289 ) = 0;
00290
00291 virtual bool canTranscodeTo
00292 (
00293 const unsigned int toCheck
00294 ) const = 0;
00295
00296
00297
00298
00299
00300 unsigned int getBlockSize() const;
00301
00302 const XMLCh* getEncodingName() const;
00303
00304
00305 protected :
00306
00307
00308
00309 XMLTranscoder
00310 (
00311 const XMLCh* const encodingName
00312 , const unsigned int blockSize
00313 );
00314
00315
00316
00317
00318
00319 void checkBlockSize(const unsigned int toCheck);
00320
00321
00322 private :
00323
00324
00325
00326 XMLTranscoder(const XMLTranscoder&);
00327 void operator=(const XMLTranscoder&);
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343 unsigned int fBlockSize;
00344 XMLCh* fEncodingName;
00345 };
00346
00347
00348
00349
00350
00351
00352
00353
00354 class XMLLCPTranscoder
00355 {
00356 public :
00357
00358
00359
00360 virtual ~XMLLCPTranscoder();
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373 virtual unsigned int calcRequiredSize(const char* const srcText) = 0;
00374
00375 virtual unsigned int calcRequiredSize(const XMLCh* const srcText) = 0;
00376
00377 virtual char* transcode(const XMLCh* const toTranscode) = 0;
00378
00379 virtual XMLCh* transcode(const char* const toTranscode) = 0;
00380
00381 virtual bool transcode
00382 (
00383 const char* const toTranscode
00384 , XMLCh* const toFill
00385 , const unsigned int maxChars
00386 ) = 0;
00387
00388 virtual bool transcode
00389 (
00390 const XMLCh* const toTranscode
00391 , char* const toFill
00392 , const unsigned int maxBytes
00393 ) = 0;
00394
00395
00396 protected :
00397
00398
00399
00400 XMLLCPTranscoder();
00401
00402
00403 private :
00404
00405
00406
00407 XMLLCPTranscoder(const XMLLCPTranscoder&);
00408 void operator=(const XMLLCPTranscoder&);
00409 };
00410
00411
00412
00413
00414
00415 inline unsigned int XMLTranscoder::getBlockSize() const
00416 {
00417 return fBlockSize;
00418 }
00419
00420 inline const XMLCh* XMLTranscoder::getEncodingName() const
00421 {
00422 return fEncodingName;
00423 }
00424
00425 #endif