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