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
00113
00114 #if !defined(XMLFORMATTER_HPP)
00115 #define XMLFORMATTER_HPP
00116
00117 #include <xercesc/util/PlatformUtils.hpp>
00118
00119 XERCES_CPP_NAMESPACE_BEGIN
00120
00121 class XMLFormatTarget;
00122 class XMLTranscoder;
00123
00133 class XMLFormatter : public XMemory
00134 {
00135 public:
00136
00137
00138
00216 enum EscapeFlags
00217 {
00218 NoEscapes
00219 , StdEscapes
00220 , AttrEscapes
00221 , CharEscapes
00222
00223
00224 , EscapeFlags_Count
00225 , DefaultEscape = 999
00226 };
00227
00244 enum UnRepFlags
00245 {
00246 UnRep_Fail
00247 , UnRep_CharRef
00248 , UnRep_Replace
00249
00250 , DefaultUnRep = 999
00251 };
00253
00254
00255
00256
00257
00269 XMLFormatter
00270 (
00271 const XMLCh* const outEncoding
00272 , const XMLCh* const docVersion
00273 , XMLFormatTarget* const target
00274 , const EscapeFlags escapeFlags = NoEscapes
00275 , const UnRepFlags unrepFlags = UnRep_Fail
00276 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00277 );
00278
00279 XMLFormatter
00280 (
00281 const char* const outEncoding
00282 , const char* const docVersion
00283 , XMLFormatTarget* const target
00284 , const EscapeFlags escapeFlags = NoEscapes
00285 , const UnRepFlags unrepFlags = UnRep_Fail
00286 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00287 );
00288
00289 XMLFormatter
00290 (
00291 const XMLCh* const outEncoding
00292 , XMLFormatTarget* const target
00293 , const EscapeFlags escapeFlags = NoEscapes
00294 , const UnRepFlags unrepFlags = UnRep_Fail
00295 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00296 );
00297
00298 XMLFormatter
00299 (
00300 const char* const outEncoding
00301 , XMLFormatTarget* const target
00302 , const EscapeFlags escapeFlags = NoEscapes
00303 , const UnRepFlags unrepFlags = UnRep_Fail
00304 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00305 );
00306
00307 ~XMLFormatter();
00309
00310
00311
00312
00313
00323 void formatBuf
00324 (
00325 const XMLCh* const toFormat
00326 , const unsigned int count
00327 , const EscapeFlags escapeFlags = DefaultEscape
00328 , const UnRepFlags unrepFlags = DefaultUnRep
00329 );
00330
00334 XMLFormatter& operator<<
00335 (
00336 const XMLCh* const toFormat
00337 );
00338
00339 XMLFormatter& operator<<
00340 (
00341 const XMLCh toFormat
00342 );
00343
00344 void writeBOM(const XMLByte* const toFormat
00345 , const unsigned int count);
00346
00348
00349
00350
00351
00358 const XMLCh* getEncodingName() const;
00359
00363 inline const XMLTranscoder* getTranscoder() const;
00364
00366
00367
00368
00369
00375 void setEscapeFlags
00376 (
00377 const EscapeFlags newFlags
00378 );
00379
00383 void setUnRepFlags
00384 (
00385 const UnRepFlags newFlags
00386 );
00387
00392 XMLFormatter& operator<<
00393 (
00394 const EscapeFlags newFlags
00395 );
00396
00401 XMLFormatter& operator<<
00402 (
00403 const UnRepFlags newFlags
00404 );
00406
00407
00408 private :
00409
00410
00411
00412 XMLFormatter();
00413 XMLFormatter(const XMLFormatter&);
00414 XMLFormatter& operator=(const XMLFormatter&);
00415
00416
00417
00418
00419
00420 enum Constants
00421 {
00422 kTmpBufSize = 16 * 1024
00423 };
00424
00425
00426
00427
00428
00429 const XMLByte* getCharRef(unsigned int & count,
00430 XMLByte* &ref,
00431 const XMLCh * stdRef);
00432
00433 void writeCharRef(const XMLCh &toWrite);
00434 void writeCharRef(unsigned long toWrite);
00435
00436 bool inEscapeList(const XMLFormatter::EscapeFlags escStyle
00437 , const XMLCh toCheck);
00438
00439
00440 unsigned int handleUnEscapedChars(const XMLCh * srcPtr,
00441 const unsigned int count,
00442 const UnRepFlags unrepFlags);
00443
00444 void specialFormat
00445 (
00446 const XMLCh* const toFormat
00447 , const unsigned int count
00448 , const EscapeFlags escapeFlags
00449 );
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493 EscapeFlags fEscapeFlags;
00494 XMLCh* fOutEncoding;
00495 XMLFormatTarget* fTarget;
00496 UnRepFlags fUnRepFlags;
00497 XMLTranscoder* fXCoder;
00498 XMLByte fTmpBuf[kTmpBufSize + 4];
00499 XMLByte* fAposRef;
00500 unsigned int fAposLen;
00501 XMLByte* fAmpRef;
00502 unsigned int fAmpLen;
00503 XMLByte* fGTRef;
00504 unsigned int fGTLen;
00505 XMLByte* fLTRef;
00506 unsigned int fLTLen;
00507 XMLByte* fQuoteRef;
00508 unsigned int fQuoteLen;
00509 bool fIsXML11;
00510 MemoryManager* fMemoryManager;
00511 };
00512
00513
00514 class XMLFormatTarget : public XMemory
00515 {
00516 public:
00517
00518
00519
00520 virtual ~XMLFormatTarget() {}
00521
00522
00523
00524
00525
00526 virtual void writeChars
00527 (
00528 const XMLByte* const toWrite
00529 , const unsigned int count
00530 , XMLFormatter* const formatter
00531 ) = 0;
00532
00533 virtual void flush() {};
00534
00535
00536 protected :
00537
00538
00539
00540 XMLFormatTarget() {};
00541
00542 private:
00543
00544
00545
00546 XMLFormatTarget(const XMLFormatTarget&);
00547 XMLFormatTarget& operator=(const XMLFormatTarget&);
00548 };
00549
00550
00551
00552
00553
00554 inline const XMLCh* XMLFormatter::getEncodingName() const
00555 {
00556 return fOutEncoding;
00557 }
00558
00559 inline const XMLTranscoder* XMLFormatter::getTranscoder() const
00560 {
00561 return fXCoder;
00562 }
00563
00564
00565
00566
00567 inline void XMLFormatter::setEscapeFlags(const EscapeFlags newFlags)
00568 {
00569 fEscapeFlags = newFlags;
00570 }
00571
00572 inline void XMLFormatter::setUnRepFlags(const UnRepFlags newFlags)
00573 {
00574 fUnRepFlags = newFlags;
00575 }
00576
00577
00578 inline XMLFormatter& XMLFormatter::operator<<(const EscapeFlags newFlags)
00579 {
00580 fEscapeFlags = newFlags;
00581 return *this;
00582 }
00583
00584 inline XMLFormatter& XMLFormatter::operator<<(const UnRepFlags newFlags)
00585 {
00586 fUnRepFlags = newFlags;
00587 return *this;
00588 }
00589
00590 XERCES_CPP_NAMESPACE_END
00591
00592 #endif