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
00112 #if !defined(XMLFORMATTER_HPP)
00113 #define XMLFORMATTER_HPP
00114
00115 #include <xercesc/util/XercesDefs.hpp>
00116
00117 XERCES_CPP_NAMESPACE_BEGIN
00118
00119 class XMLFormatTarget;
00120 class XMLTranscoder;
00121
00131 class XMLFormatter
00132 {
00133 public:
00134
00135
00136
00214 enum EscapeFlags
00215 {
00216 NoEscapes
00217 , StdEscapes
00218 , AttrEscapes
00219 , CharEscapes
00220
00221
00222 , EscapeFlags_Count
00223 , DefaultEscape = 999
00224 };
00225
00242 enum UnRepFlags
00243 {
00244 UnRep_Fail
00245 , UnRep_CharRef
00246 , UnRep_Replace
00247
00248 , DefaultUnRep = 999
00249 };
00251
00252
00253
00254
00255
00264 XMLFormatter
00265 (
00266 const XMLCh* const outEncoding
00267 , XMLFormatTarget* const target
00268 , const EscapeFlags escapeFlags = NoEscapes
00269 , const UnRepFlags unrepFlags = UnRep_Fail
00270 );
00271
00272 XMLFormatter
00273 (
00274 const char* const outEncoding
00275 , XMLFormatTarget* const target
00276 , const EscapeFlags escapeFlags = NoEscapes
00277 , const UnRepFlags unrepFlags = UnRep_Fail
00278 );
00279
00280 ~XMLFormatter();
00282
00283
00284
00285
00286
00296 void formatBuf
00297 (
00298 const XMLCh* const toFormat
00299 , const unsigned int count
00300 , const EscapeFlags escapeFlags = DefaultEscape
00301 , const UnRepFlags unrepFlags = DefaultUnRep
00302 );
00303
00307 XMLFormatter& operator<<
00308 (
00309 const XMLCh* const toFormat
00310 );
00311
00312 XMLFormatter& operator<<
00313 (
00314 const XMLCh toFormat
00315 );
00316
00317 void writeBOM(const XMLByte* const toFormat
00318 , const unsigned int count);
00319
00321
00322
00323
00324
00331 const XMLCh* getEncodingName() const;
00332
00336 inline const XMLTranscoder* getTranscoder() const;
00338
00339
00340
00341
00347 void setEscapeFlags
00348 (
00349 const EscapeFlags newFlags
00350 );
00351
00355 void setUnRepFlags
00356 (
00357 const UnRepFlags newFlags
00358 );
00359
00364 XMLFormatter& operator<<
00365 (
00366 const EscapeFlags newFlags
00367 );
00368
00373 XMLFormatter& operator<<
00374 (
00375 const UnRepFlags newFlags
00376 );
00378
00379
00380 private :
00381
00382
00383
00384 XMLFormatter();
00385 XMLFormatter(const XMLFormatter&);
00386 void operator=(const XMLFormatter&);
00387
00388
00389
00390
00391
00392 enum Constants
00393 {
00394 kTmpBufSize = 16 * 1024
00395 };
00396
00397
00398
00399
00400
00401 const XMLByte* getAposRef(unsigned int & count);
00402 const XMLByte* getAmpRef(unsigned int & count);
00403 const XMLByte* getGTRef(unsigned int & count);
00404 const XMLByte* getLTRef(unsigned int & count);
00405 const XMLByte* getQuoteRef(unsigned int & count);
00406
00407 void specialFormat
00408 (
00409 const XMLCh* const toFormat
00410 , const unsigned int count
00411 , const EscapeFlags escapeFlags
00412 );
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451 EscapeFlags fEscapeFlags;
00452 XMLCh* fOutEncoding;
00453 XMLFormatTarget* fTarget;
00454 UnRepFlags fUnRepFlags;
00455 XMLTranscoder* fXCoder;
00456 XMLByte fTmpBuf[kTmpBufSize + 4];
00457
00458 XMLByte* fAposRef;
00459 unsigned int fAposLen;
00460 XMLByte* fAmpRef;
00461 unsigned int fAmpLen;
00462 XMLByte* fGTRef;
00463 unsigned int fGTLen;
00464 XMLByte* fLTRef;
00465 unsigned int fLTLen;
00466 XMLByte* fQuoteRef;
00467 unsigned int fQuoteLen;
00468 };
00469
00470
00471 class XMLFormatTarget
00472 {
00473 public:
00474
00475
00476
00477 virtual ~XMLFormatTarget() {}
00478
00479
00480
00481
00482
00483 virtual void writeChars
00484 (
00485 const XMLByte* const toWrite
00486 , const unsigned int count
00487 , XMLFormatter* const formatter
00488 ) = 0;
00489
00490 virtual void flush() {};
00491
00492
00493 protected :
00494
00495
00496
00497 XMLFormatTarget() {}
00498 XMLFormatTarget(const XMLFormatTarget&) {}
00499 void operator=(const XMLFormatTarget&) {}
00500 };
00501
00502
00503
00504
00505
00506 inline const XMLCh* XMLFormatter::getEncodingName() const
00507 {
00508 return fOutEncoding;
00509 }
00510
00511 inline const XMLTranscoder* XMLFormatter::getTranscoder() const
00512 {
00513 return fXCoder;
00514 }
00515
00516
00517
00518
00519 inline void XMLFormatter::setEscapeFlags(const EscapeFlags newFlags)
00520 {
00521 fEscapeFlags = newFlags;
00522 }
00523
00524 inline void XMLFormatter::setUnRepFlags(const UnRepFlags newFlags)
00525 {
00526 fUnRepFlags = newFlags;
00527 }
00528
00529
00530 inline XMLFormatter& XMLFormatter::operator<<(const EscapeFlags newFlags)
00531 {
00532 fEscapeFlags = newFlags;
00533 return *this;
00534 }
00535
00536 inline XMLFormatter& XMLFormatter::operator<<(const UnRepFlags newFlags)
00537 {
00538 fUnRepFlags = newFlags;
00539 return *this;
00540 }
00541
00542 XERCES_CPP_NAMESPACE_END
00543
00544 #endif