http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Readme
Charter
Release Info

Installation
Download
Build Instructions

FAQs
Samples
API Docs

DOM C++ Binding
Programming
Migration Guide

Feedback
Bug-Reporting
PDF Document

Source Repository
User Mail Archive
Devel Mail Archive

API Docs for SAX and DOM
 

XMLFormatter.hpp

Go to the documentation of this file.
00001 /*
00002  * Copyright 1999-2000,2004 The Apache Software Foundation.
00003  * 
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  * 
00008  *      http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 /*
00018  * $Id: XMLFormatter.hpp 202337 2005-06-29 08:35:12Z amassari $
00019  */
00020 
00021 #if !defined(XMLFORMATTER_HPP)
00022 #define XMLFORMATTER_HPP
00023 
00024 #include <xercesc/util/PlatformUtils.hpp>
00025 
00026 XERCES_CPP_NAMESPACE_BEGIN
00027 
00028 class XMLFormatTarget;
00029 class XMLTranscoder;
00030 
00040 class  XMLFormatter : public XMemory
00041 {
00042 public:
00043     // -----------------------------------------------------------------------
00044     //  Class types
00045     // -----------------------------------------------------------------------
00123     enum EscapeFlags
00124     {
00125         NoEscapes
00126         , StdEscapes
00127         , AttrEscapes
00128         , CharEscapes
00129 
00130         // Special values, don't use directly
00131         , EscapeFlags_Count
00132         , DefaultEscape     = 999
00133     };
00134 
00151     enum UnRepFlags
00152     {
00153         UnRep_Fail
00154         , UnRep_CharRef
00155         , UnRep_Replace
00156 
00157         , DefaultUnRep      = 999
00158     };
00160 
00161 
00162     // -----------------------------------------------------------------------
00163     //  Constructors and Destructor
00164     // -----------------------------------------------------------------------
00176     XMLFormatter
00177     (
00178         const   XMLCh* const            outEncoding
00179         , const XMLCh* const            docVersion
00180         ,       XMLFormatTarget* const  target
00181         , const EscapeFlags             escapeFlags = NoEscapes
00182         , const UnRepFlags              unrepFlags = UnRep_Fail
00183         ,       MemoryManager* const    manager = XMLPlatformUtils::fgMemoryManager
00184     );
00185 
00186     XMLFormatter
00187     (
00188         const   char* const             outEncoding
00189         , const char* const             docVersion
00190         ,       XMLFormatTarget* const  target
00191         , const EscapeFlags             escapeFlags = NoEscapes
00192         , const UnRepFlags              unrepFlags = UnRep_Fail
00193         ,       MemoryManager* const    manager = XMLPlatformUtils::fgMemoryManager
00194     );
00195 
00196     XMLFormatter
00197     (
00198         const   XMLCh* const            outEncoding
00199         ,       XMLFormatTarget* const  target
00200         , const EscapeFlags             escapeFlags = NoEscapes
00201         , const UnRepFlags              unrepFlags = UnRep_Fail
00202         ,       MemoryManager* const    manager = XMLPlatformUtils::fgMemoryManager
00203     );
00204 
00205     XMLFormatter
00206     (
00207         const   char* const             outEncoding
00208         ,       XMLFormatTarget* const  target
00209         , const EscapeFlags             escapeFlags = NoEscapes
00210         , const UnRepFlags              unrepFlags = UnRep_Fail
00211         ,       MemoryManager* const    manager = XMLPlatformUtils::fgMemoryManager
00212     );
00213     
00214     ~XMLFormatter();
00216 
00217 
00218     // -----------------------------------------------------------------------
00219     //  Formatting methods
00220     // -----------------------------------------------------------------------
00230     void formatBuf
00231     (
00232         const   XMLCh* const    toFormat
00233         , const unsigned int    count
00234         , const EscapeFlags     escapeFlags = DefaultEscape
00235         , const UnRepFlags      unrepFlags = DefaultUnRep
00236     );
00237 
00241     XMLFormatter& operator<<
00242     (
00243         const   XMLCh* const    toFormat
00244     );
00245 
00246     XMLFormatter& operator<<
00247     (
00248         const   XMLCh           toFormat
00249     );
00250 
00251     void writeBOM(const XMLByte* const toFormat
00252                 , const unsigned int   count);
00253 
00255 
00256     // -----------------------------------------------------------------------
00257     //  Getter methods
00258     // -----------------------------------------------------------------------
00265     const XMLCh* getEncodingName() const;
00266 
00270     inline const XMLTranscoder*   getTranscoder() const;
00271 
00273 
00274     // -----------------------------------------------------------------------
00275     //  Setter methods
00276     // -----------------------------------------------------------------------
00282     void setEscapeFlags
00283     (
00284         const   EscapeFlags     newFlags
00285     );
00286 
00290     void setUnRepFlags
00291     (
00292         const   UnRepFlags      newFlags
00293     );
00294 
00299     XMLFormatter& operator<<
00300     (
00301         const   EscapeFlags     newFlags
00302     );
00303 
00308     XMLFormatter& operator<<
00309     (
00310         const   UnRepFlags      newFlags
00311     );
00313 
00314 
00315     // -----------------------------------------------------------------------
00316     //  Getter methods
00317     // -----------------------------------------------------------------------
00323     EscapeFlags getEscapeFlags() const;
00324 
00328     UnRepFlags getUnRepFlags() const;
00330 
00331 private :
00332     // -----------------------------------------------------------------------
00333     //  Unimplemented constructors and operators
00334     // -----------------------------------------------------------------------
00335     XMLFormatter();
00336     XMLFormatter(const XMLFormatter&);
00337     XMLFormatter& operator=(const XMLFormatter&);
00338 
00339 
00340     // -----------------------------------------------------------------------
00341     //  Private class constants
00342     // -----------------------------------------------------------------------
00343     enum Constants
00344     {
00345         kTmpBufSize     = 16 * 1024
00346     };
00347 
00348 
00349     // -----------------------------------------------------------------------
00350     //  Private helper methods
00351     // -----------------------------------------------------------------------
00352     const XMLByte* getCharRef(unsigned int & count, 
00353                               XMLByte*      &ref, 
00354                               const XMLCh *  stdRef);  
00355  
00356     void writeCharRef(const XMLCh &toWrite);
00357     void writeCharRef(unsigned long toWrite);
00358 
00359     bool inEscapeList(const XMLFormatter::EscapeFlags escStyle
00360                     , const XMLCh                     toCheck);
00361                               
00362 
00363     unsigned int handleUnEscapedChars(const XMLCh *                  srcPtr, 
00364                                       const unsigned int             count, 
00365                                       const UnRepFlags               unrepFlags);
00366 
00367     void specialFormat
00368     (
00369         const   XMLCh* const    toFormat
00370         , const unsigned int    count
00371         , const EscapeFlags     escapeFlags
00372     );
00373 
00374 
00375     // -----------------------------------------------------------------------
00376     //  Private, non-virtual methods
00377     //
00378     //  fEscapeFlags
00379     //      The escape flags we were told to use in formatting. These are
00380     //      defaults set in the ctor, which can be overridden on a particular
00381     //      call.
00382     //
00383     //  fOutEncoding
00384     //      This the name of the output encoding. Saved mainly for meaningful
00385     //      error messages.
00386     //
00387     //  fTarget
00388     //      This is the target object for the formatting operation.
00389     //
00390     //  fUnRepFlags
00391     //      The unrepresentable flags that indicate how to react when a
00392     //      character cannot be represented in the target encoding.
00393     //
00394     //  fXCoder
00395     //      This the transcoder that we will use. It is created using the
00396     //      encoding name we were told to use.
00397     //
00398     //  fTmpBuf
00399     //      An output buffer that we use to transcode chars into before we
00400     //      send them off to be output.
00401     //
00402     //  fAposRef
00403     //  fAmpRef
00404     //  fGTRef
00405     //  fLTRef
00406     //  fQuoteRef
00407     //      These are character refs for the standard char refs, in the
00408     //      output encoding. They are faulted in as required, by transcoding
00409     //      them from fixed Unicode versions.
00410     //
00411     //  fIsXML11
00412     //      for performance reason, we do not store the actual version string
00413     //      and do the string comparison again and again.
00414     //
00415     // -----------------------------------------------------------------------
00416     EscapeFlags                 fEscapeFlags;
00417     XMLCh*                      fOutEncoding;
00418     XMLFormatTarget*            fTarget;
00419     UnRepFlags                  fUnRepFlags;
00420     XMLTranscoder*              fXCoder;
00421     XMLByte                     fTmpBuf[kTmpBufSize + 4];
00422     XMLByte*                    fAposRef;
00423     unsigned int                fAposLen;
00424     XMLByte*                    fAmpRef;
00425     unsigned int                fAmpLen;
00426     XMLByte*                    fGTRef;
00427     unsigned int                fGTLen;
00428     XMLByte*                    fLTRef;
00429     unsigned int                fLTLen;
00430     XMLByte*                    fQuoteRef;
00431     unsigned int                fQuoteLen;
00432     bool                        fIsXML11;
00433     MemoryManager*              fMemoryManager;
00434 };
00435 
00436 
00437 class  XMLFormatTarget : public XMemory
00438 {
00439 public:
00440     // -----------------------------------------------------------------------
00441     //  Constructors and Destructor
00442     // -----------------------------------------------------------------------
00443     virtual ~XMLFormatTarget() {}
00444 
00445 
00446     // -----------------------------------------------------------------------
00447     //  Virtual interface
00448     // -----------------------------------------------------------------------
00449     virtual void writeChars
00450     (
00451           const XMLByte* const      toWrite
00452         , const unsigned int        count
00453         ,       XMLFormatter* const formatter
00454     ) = 0;
00455 
00456     virtual void flush() {};
00457 
00458 
00459 protected :
00460     // -----------------------------------------------------------------------
00461     //  Hidden constructors and operators
00462     // -----------------------------------------------------------------------
00463     XMLFormatTarget() {};
00464 
00465 private:
00466     // -----------------------------------------------------------------------
00467     //  Unimplemented constructors and operators
00468     // -----------------------------------------------------------------------
00469     XMLFormatTarget(const XMLFormatTarget&);
00470     XMLFormatTarget& operator=(const XMLFormatTarget&);
00471 };
00472 
00473 
00474 // ---------------------------------------------------------------------------
00475 //  XMLFormatter: Getter methods
00476 // ---------------------------------------------------------------------------
00477 inline const XMLCh* XMLFormatter::getEncodingName() const
00478 {
00479     return fOutEncoding;
00480 }
00481 
00482 inline const XMLTranscoder* XMLFormatter::getTranscoder() const
00483 {
00484     return fXCoder;
00485 }
00486 
00487 // ---------------------------------------------------------------------------
00488 //  XMLFormatter: Setter methods
00489 // ---------------------------------------------------------------------------
00490 inline void XMLFormatter::setEscapeFlags(const EscapeFlags newFlags)
00491 {
00492     fEscapeFlags = newFlags;
00493 }
00494 
00495 inline void XMLFormatter::setUnRepFlags(const UnRepFlags newFlags)
00496 {
00497     fUnRepFlags = newFlags;
00498 }
00499 
00500 
00501 inline XMLFormatter& XMLFormatter::operator<<(const EscapeFlags newFlags)
00502 {
00503     fEscapeFlags = newFlags;
00504     return *this;
00505 }
00506 
00507 inline XMLFormatter& XMLFormatter::operator<<(const UnRepFlags newFlags)
00508 {
00509     fUnRepFlags = newFlags;
00510     return *this;
00511 }
00512 
00513 // ---------------------------------------------------------------------------
00514 //  XMLFormatter: Getter methods
00515 // ---------------------------------------------------------------------------
00516 inline XMLFormatter::EscapeFlags XMLFormatter::getEscapeFlags() const
00517 {
00518     return fEscapeFlags;
00519 }
00520 
00521 inline XMLFormatter::UnRepFlags XMLFormatter::getUnRepFlags() const
00522 {
00523     return fUnRepFlags;
00524 }
00525 
00526 XERCES_CPP_NAMESPACE_END
00527 
00528 #endif


Copyright © 1994-2004 The Apache Software Foundation. All Rights Reserved.