00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #if !defined(XERCESC_INCLUDE_GUARD_XMLFORMATTER_HPP)
00023 #define XERCESC_INCLUDE_GUARD_XMLFORMATTER_HPP
00024
00025 #include <xercesc/util/PlatformUtils.hpp>
00026
00027 XERCES_CPP_NAMESPACE_BEGIN
00028
00029 class XMLFormatTarget;
00030 class XMLTranscoder;
00031
00041 class XMLPARSER_EXPORT XMLFormatter : public XMemory
00042 {
00043 public:
00044
00045
00046
00124 enum EscapeFlags
00125 {
00126 NoEscapes
00127 , StdEscapes
00128 , AttrEscapes
00129 , CharEscapes
00130
00131
00132 , EscapeFlags_Count
00133 , DefaultEscape = 999
00134 };
00135
00152 enum UnRepFlags
00153 {
00154 UnRep_Fail
00155 , UnRep_CharRef
00156 , UnRep_Replace
00157
00158 , DefaultUnRep = 999
00159 };
00161
00162
00163
00164
00165
00177 XMLFormatter
00178 (
00179 const XMLCh* const outEncoding
00180 , const XMLCh* const docVersion
00181 , XMLFormatTarget* const target
00182 , const EscapeFlags escapeFlags = NoEscapes
00183 , const UnRepFlags unrepFlags = UnRep_Fail
00184 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00185 );
00186
00187 XMLFormatter
00188 (
00189 const char* const outEncoding
00190 , const char* const docVersion
00191 , XMLFormatTarget* const target
00192 , const EscapeFlags escapeFlags = NoEscapes
00193 , const UnRepFlags unrepFlags = UnRep_Fail
00194 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00195 );
00196
00197 XMLFormatter
00198 (
00199 const XMLCh* const outEncoding
00200 , XMLFormatTarget* const target
00201 , const EscapeFlags escapeFlags = NoEscapes
00202 , const UnRepFlags unrepFlags = UnRep_Fail
00203 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00204 );
00205
00206 XMLFormatter
00207 (
00208 const char* const outEncoding
00209 , XMLFormatTarget* const target
00210 , const EscapeFlags escapeFlags = NoEscapes
00211 , const UnRepFlags unrepFlags = UnRep_Fail
00212 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
00213 );
00214
00215 ~XMLFormatter();
00217
00218
00219
00220
00221
00231 void formatBuf
00232 (
00233 const XMLCh* const toFormat
00234 , const XMLSize_t count
00235 , const EscapeFlags escapeFlags = DefaultEscape
00236 , const UnRepFlags unrepFlags = DefaultUnRep
00237 );
00238
00242 XMLFormatter& operator<<
00243 (
00244 const XMLCh* const toFormat
00245 );
00246
00247 XMLFormatter& operator<<
00248 (
00249 const XMLCh toFormat
00250 );
00251
00252 void writeBOM(const XMLByte* const toFormat
00253 , const XMLSize_t count);
00254
00256
00257
00258
00259
00266 const XMLCh* getEncodingName() const;
00267
00271 inline const XMLTranscoder* getTranscoder() const;
00272
00276 inline XMLTranscoder* getTranscoder();
00277
00279
00280
00281
00282
00288 void setEscapeFlags
00289 (
00290 const EscapeFlags newFlags
00291 );
00292
00296 void setUnRepFlags
00297 (
00298 const UnRepFlags newFlags
00299 );
00300
00305 XMLFormatter& operator<<
00306 (
00307 const EscapeFlags newFlags
00308 );
00309
00314 XMLFormatter& operator<<
00315 (
00316 const UnRepFlags newFlags
00317 );
00319
00320
00321
00322
00328 EscapeFlags getEscapeFlags() const;
00329
00333 UnRepFlags getUnRepFlags() const;
00335
00336 private :
00337
00338
00339
00340 XMLFormatter();
00341 XMLFormatter(const XMLFormatter&);
00342 XMLFormatter& operator=(const XMLFormatter&);
00343
00344
00345
00346
00347
00348 enum Constants
00349 {
00350 kTmpBufSize = 16 * 1024
00351 };
00352
00353
00354
00355
00356
00357 const XMLByte* getCharRef(XMLSize_t &count,
00358 XMLByte* &ref,
00359 const XMLCh * stdRef);
00360
00361 void writeCharRef(const XMLCh &toWrite);
00362 void writeCharRef(XMLSize_t toWrite);
00363
00364 bool inEscapeList(const XMLFormatter::EscapeFlags escStyle
00365 , const XMLCh toCheck);
00366
00367
00368 XMLSize_t handleUnEscapedChars(const XMLCh * srcPtr,
00369 const XMLSize_t count,
00370 const UnRepFlags unrepFlags);
00371
00372 void specialFormat
00373 (
00374 const XMLCh* const toFormat
00375 , const XMLSize_t count
00376 , const EscapeFlags escapeFlags
00377 );
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
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 EscapeFlags fEscapeFlags;
00422 XMLCh* fOutEncoding;
00423 XMLFormatTarget* fTarget;
00424 UnRepFlags fUnRepFlags;
00425 XMLTranscoder* fXCoder;
00426 XMLByte fTmpBuf[kTmpBufSize + 4];
00427 XMLByte* fAposRef;
00428 XMLSize_t fAposLen;
00429 XMLByte* fAmpRef;
00430 XMLSize_t fAmpLen;
00431 XMLByte* fGTRef;
00432 XMLSize_t fGTLen;
00433 XMLByte* fLTRef;
00434 XMLSize_t fLTLen;
00435 XMLByte* fQuoteRef;
00436 XMLSize_t fQuoteLen;
00437 bool fIsXML11;
00438 MemoryManager* fMemoryManager;
00439 };
00440
00441
00442 class XMLPARSER_EXPORT XMLFormatTarget : public XMemory
00443 {
00444 public:
00445
00446
00447
00448 virtual ~XMLFormatTarget() {}
00449
00450
00451
00452
00453
00454 virtual void writeChars
00455 (
00456 const XMLByte* const toWrite
00457 , const XMLSize_t count
00458 , XMLFormatter* const formatter
00459 ) = 0;
00460
00461 virtual void flush() {};
00462
00463
00464 protected :
00465
00466
00467
00468 XMLFormatTarget() {};
00469
00470 private:
00471
00472
00473
00474 XMLFormatTarget(const XMLFormatTarget&);
00475 XMLFormatTarget& operator=(const XMLFormatTarget&);
00476 };
00477
00478
00479
00480
00481
00482 inline const XMLCh* XMLFormatter::getEncodingName() const
00483 {
00484 return fOutEncoding;
00485 }
00486
00487 inline const XMLTranscoder* XMLFormatter::getTranscoder() const
00488 {
00489 return fXCoder;
00490 }
00491
00492 inline XMLTranscoder* XMLFormatter::getTranscoder()
00493 {
00494 return fXCoder;
00495 }
00496
00497
00498
00499
00500 inline void XMLFormatter::setEscapeFlags(const EscapeFlags newFlags)
00501 {
00502 fEscapeFlags = newFlags;
00503 }
00504
00505 inline void XMLFormatter::setUnRepFlags(const UnRepFlags newFlags)
00506 {
00507 fUnRepFlags = newFlags;
00508 }
00509
00510
00511 inline XMLFormatter& XMLFormatter::operator<<(const EscapeFlags newFlags)
00512 {
00513 fEscapeFlags = newFlags;
00514 return *this;
00515 }
00516
00517 inline XMLFormatter& XMLFormatter::operator<<(const UnRepFlags newFlags)
00518 {
00519 fUnRepFlags = newFlags;
00520 return *this;
00521 }
00522
00523
00524
00525
00526 inline XMLFormatter::EscapeFlags XMLFormatter::getEscapeFlags() const
00527 {
00528 return fEscapeFlags;
00529 }
00530
00531 inline XMLFormatter::UnRepFlags XMLFormatter::getUnRepFlags() const
00532 {
00533 return fUnRepFlags;
00534 }
00535
00536 XERCES_CPP_NAMESPACE_END
00537
00538 #endif