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 #if !defined(XMLFORMATTER_HPP)
00092 #define XMLFORMATTER_HPP
00093
00094 #include <util/XercesDefs.hpp>
00095
00096 class XMLFormatTarget;
00097 class XMLTranscoder;
00098
00108 class XMLFormatter
00109 {
00110 public:
00111
00112
00113
00114 enum EscapeFlags
00115 {
00116 NoEscapes
00117 , StdEscapes
00118 , AttrEscapes
00119 , CharEscapes
00120
00121
00122 , EscapeFlags_Count
00123 , DefaultEscape = 999
00124 };
00125
00126 enum UnRepFlags
00127 {
00128 UnRep_Fail
00129 , UnRep_CharRef
00130 , UnRep_Replace
00131
00132 , DefaultUnRep = 999
00133 };
00134
00135
00136
00137
00138
00139 XMLFormatter
00140 (
00141 const XMLCh* const outEncoding
00142 , XMLFormatTarget* const target
00143 , const EscapeFlags escapeFlags = NoEscapes
00144 , const UnRepFlags unrepFlags = UnRep_Fail
00145 );
00146
00147 XMLFormatter
00148 (
00149 const char* const outEncoding
00150 , XMLFormatTarget* const target
00151 , const EscapeFlags escapeFlags = NoEscapes
00152 , const UnRepFlags unrepFlags = UnRep_Fail
00153 );
00154
00155 ~XMLFormatter();
00156
00157
00158
00159
00160
00161 void formatBuf
00162 (
00163 const XMLCh* const toFormat
00164 , const unsigned int count
00165 , const EscapeFlags escapeFlags = DefaultEscape
00166 , const UnRepFlags unrepFlags = DefaultUnRep
00167 );
00168
00169 XMLFormatter& operator<<
00170 (
00171 const XMLCh* const toFormat
00172 );
00173
00174 XMLFormatter& operator<<
00175 (
00176 const XMLCh toFormat
00177 );
00178
00179
00180
00181
00182
00183 const XMLCh* getEncodingName() const;
00184
00185
00186
00187
00188
00189 void setEscapeFlags
00190 (
00191 const EscapeFlags newFlags
00192 );
00193
00194 void setUnRepFlags
00195 (
00196 const UnRepFlags newFlags
00197 );
00198
00199 XMLFormatter& operator<<
00200 (
00201 const EscapeFlags newFlags
00202 );
00203
00204 XMLFormatter& operator<<
00205 (
00206 const UnRepFlags newFlags
00207 );
00208
00209
00210 private :
00211
00212
00213
00214 XMLFormatter();
00215 XMLFormatter(const XMLFormatter&);
00216 void operator=(const XMLFormatter&);
00217
00218
00219
00220
00221
00222 enum Constants
00223 {
00224 kTmpBufSize = 16 * 1024
00225 };
00226
00227
00228
00229
00230
00231 const XMLByte* getAposRef(unsigned int & count);
00232 const XMLByte* getAmpRef(unsigned int & count);
00233 const XMLByte* getGTRef(unsigned int & count);
00234 const XMLByte* getLTRef(unsigned int & count);
00235 const XMLByte* getQuoteRef(unsigned int & count);
00236
00237 void specialFormat
00238 (
00239 const XMLCh* const toFormat
00240 , const unsigned int count
00241 , const EscapeFlags escapeFlags
00242 );
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281 EscapeFlags fEscapeFlags;
00282 XMLCh* fOutEncoding;
00283 XMLFormatTarget* fTarget;
00284 UnRepFlags fUnRepFlags;
00285 XMLTranscoder* fXCoder;
00286 XMLByte fTmpBuf[kTmpBufSize + 4];
00287
00288 XMLByte* fAposRef;
00289 unsigned int fAposLen;
00290 XMLByte* fAmpRef;
00291 unsigned int fAmpLen;
00292 XMLByte* fGTRef;
00293 unsigned int fGTLen;
00294 XMLByte* fLTRef;
00295 unsigned int fLTLen;
00296 XMLByte* fQuoteRef;
00297 unsigned int fQuoteLen;
00298 };
00299
00300
00301 class XMLFormatTarget
00302 {
00303 public:
00304
00305
00306
00307 virtual ~XMLFormatTarget() {}
00308
00309
00310
00311
00312
00313 virtual void writeChars
00314 (
00315 const XMLByte* const toWrite
00316 , const unsigned int count
00317 , XMLFormatter* const formatter
00318 ) = 0;
00319
00320
00321 protected :
00322
00323
00324
00325 XMLFormatTarget() {}
00326 XMLFormatTarget(const XMLFormatTarget&) {}
00327 void operator=(const XMLFormatTarget&) {}
00328 };
00329
00330
00331
00332
00333
00334 inline const XMLCh* XMLFormatter::getEncodingName() const
00335 {
00336 return fOutEncoding;
00337 }
00338
00339
00340
00341
00342
00343 inline void XMLFormatter::setEscapeFlags(const EscapeFlags newFlags)
00344 {
00345 fEscapeFlags = newFlags;
00346 }
00347
00348 inline void XMLFormatter::setUnRepFlags(const UnRepFlags newFlags)
00349 {
00350 fUnRepFlags = newFlags;
00351 }
00352
00353
00354 inline XMLFormatter& XMLFormatter::operator<<(const EscapeFlags newFlags)
00355 {
00356 fEscapeFlags = newFlags;
00357 return *this;
00358 }
00359
00360 inline XMLFormatter& XMLFormatter::operator<<(const UnRepFlags newFlags)
00361 {
00362 fUnRepFlags = newFlags;
00363 return *this;
00364 }
00365
00366
00367 #endif