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 #if !defined(XMLFORMATTER_HPP)
00101 #define XMLFORMATTER_HPP
00102
00103 #include <xercesc/util/XercesDefs.hpp>
00104
00105 class XMLFormatTarget;
00106 class XMLTranscoder;
00107
00117 class XMLFormatter
00118 {
00119 public:
00120
00121
00122
00125
00200 enum EscapeFlags
00201 {
00202 NoEscapes
00203 , StdEscapes
00204 , AttrEscapes
00205 , CharEscapes
00206
00207
00208 , EscapeFlags_Count
00209 , DefaultEscape = 999
00210 };
00211
00228 enum UnRepFlags
00229 {
00230 UnRep_Fail
00231 , UnRep_CharRef
00232 , UnRep_Replace
00233
00234 , DefaultUnRep = 999
00235 };
00237
00238
00239
00240
00241
00244
00250 XMLFormatter
00251 (
00252 const XMLCh* const outEncoding
00253 , XMLFormatTarget* const target
00254 , const EscapeFlags escapeFlags = NoEscapes
00255 , const UnRepFlags unrepFlags = UnRep_Fail
00256 );
00257
00258 XMLFormatter
00259 (
00260 const char* const outEncoding
00261 , XMLFormatTarget* const target
00262 , const EscapeFlags escapeFlags = NoEscapes
00263 , const UnRepFlags unrepFlags = UnRep_Fail
00264 );
00265
00266 ~XMLFormatter();
00268
00269
00270
00271
00272
00275
00282 void formatBuf
00283 (
00284 const XMLCh* const toFormat
00285 , const unsigned int count
00286 , const EscapeFlags escapeFlags = DefaultEscape
00287 , const UnRepFlags unrepFlags = DefaultUnRep
00288 );
00289
00293 XMLFormatter& operator<<
00294 (
00295 const XMLCh* const toFormat
00296 );
00297
00298 XMLFormatter& operator<<
00299 (
00300 const XMLCh toFormat
00301 );
00303
00304
00305
00306
00309
00312
00313 const XMLCh* getEncodingName() const;
00314
00318 inline const XMLTranscoder* getTranscoder() const;
00320
00321
00322
00323
00326
00329 void setEscapeFlags
00330 (
00331 const EscapeFlags newFlags
00332 );
00333
00337 void setUnRepFlags
00338 (
00339 const UnRepFlags newFlags
00340 );
00341
00346 XMLFormatter& operator<<
00347 (
00348 const EscapeFlags newFlags
00349 );
00350
00355 XMLFormatter& operator<<
00356 (
00357 const UnRepFlags newFlags
00358 );
00360
00361
00362 private :
00363
00364
00365
00366 XMLFormatter();
00367 XMLFormatter(const XMLFormatter&);
00368 void operator=(const XMLFormatter&);
00369
00370
00371
00372
00373
00374 enum Constants
00375 {
00376 kTmpBufSize = 16 * 1024
00377 };
00378
00379
00380
00381
00382
00383 const XMLByte* getAposRef(unsigned int & count);
00384 const XMLByte* getAmpRef(unsigned int & count);
00385 const XMLByte* getGTRef(unsigned int & count);
00386 const XMLByte* getLTRef(unsigned int & count);
00387 const XMLByte* getQuoteRef(unsigned int & count);
00388
00389 void specialFormat
00390 (
00391 const XMLCh* const toFormat
00392 , const unsigned int count
00393 , const EscapeFlags escapeFlags
00394 );
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433 EscapeFlags fEscapeFlags;
00434 XMLCh* fOutEncoding;
00435 XMLFormatTarget* fTarget;
00436 UnRepFlags fUnRepFlags;
00437 XMLTranscoder* fXCoder;
00438 XMLByte fTmpBuf[kTmpBufSize + 4];
00439
00440 XMLByte* fAposRef;
00441 unsigned int fAposLen;
00442 XMLByte* fAmpRef;
00443 unsigned int fAmpLen;
00444 XMLByte* fGTRef;
00445 unsigned int fGTLen;
00446 XMLByte* fLTRef;
00447 unsigned int fLTLen;
00448 XMLByte* fQuoteRef;
00449 unsigned int fQuoteLen;
00450 };
00451
00452
00453 class XMLFormatTarget
00454 {
00455 public:
00456
00457
00458
00459 virtual ~XMLFormatTarget() {}
00460
00461
00462
00463
00464
00465 virtual void writeChars
00466 (
00467 const XMLByte* const toWrite
00468 , const unsigned int count
00469 , XMLFormatter* const formatter
00470 ) = 0;
00471
00472
00473 protected :
00474
00475
00476
00477 XMLFormatTarget() {}
00478 XMLFormatTarget(const XMLFormatTarget&) {}
00479 void operator=(const XMLFormatTarget&) {}
00480 };
00481
00482
00483
00484
00485
00486 inline const XMLCh* XMLFormatter::getEncodingName() const
00487 {
00488 return fOutEncoding;
00489 }
00490
00491 inline const XMLTranscoder* XMLFormatter::getTranscoder() const
00492 {
00493 return fXCoder;
00494 }
00495
00496
00497
00498
00499 inline void XMLFormatter::setEscapeFlags(const EscapeFlags newFlags)
00500 {
00501 fEscapeFlags = newFlags;
00502 }
00503
00504 inline void XMLFormatter::setUnRepFlags(const UnRepFlags newFlags)
00505 {
00506 fUnRepFlags = newFlags;
00507 }
00508
00509
00510 inline XMLFormatter& XMLFormatter::operator<<(const EscapeFlags newFlags)
00511 {
00512 fEscapeFlags = newFlags;
00513 return *this;
00514 }
00515
00516 inline XMLFormatter& XMLFormatter::operator<<(const UnRepFlags newFlags)
00517 {
00518 fUnRepFlags = newFlags;
00519 return *this;
00520 }
00521
00522
00523 #endif