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