dbertoni    01/01/15 18:45:12

  Modified:    c/src/XalanSourceTree FormatterToSourceTree.cpp
                        FormatterToSourceTree.hpp XalanSourceTreeInit.cpp
  Log:
  Added code to output PI for raw text nodes.
  
  Revision  Changes    Path
  1.2       +131 -17   xml-xalan/c/src/XalanSourceTree/FormatterToSourceTree.cpp
  
  Index: FormatterToSourceTree.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/FormatterToSourceTree.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FormatterToSourceTree.cpp 2001/01/08 18:10:43     1.1
  +++ FormatterToSourceTree.cpp 2001/01/16 02:45:12     1.2
  @@ -68,6 +68,7 @@
   
   
   #include <XalanDOM/XalanDOMException.hpp>
  +#include <XalanDOM/XalanDocumentFragment.hpp>
   
   
   
  @@ -75,6 +76,10 @@
   
   
   
  +#include <XMLSupport/FormatterToDOM.hpp>
  +
  +
  +
   #include "XalanSourceTreeComment.hpp"
   #include "XalanSourceTreeDocument.hpp"
   #include "XalanSourceTreeElement.hpp"
  @@ -86,11 +91,28 @@
   FormatterToSourceTree::FormatterToSourceTree(XalanSourceTreeDocument*        
theDocument) :
        FormatterListener(OUTPUT_METHOD_DOM),
        m_document(theDocument),
  +     m_documentFragment(0),
  +     m_currentElement(0),
  +     m_elementStack(),
  +     m_textBuffer()
  +{
  +     assert(m_document != 0);
  +}
  +
  +
  +
  +FormatterToSourceTree::FormatterToSourceTree(
  +                     XalanSourceTreeDocument*        theDocument,
  +                     XalanDocumentFragment*          theDocumentFragment) :
  +     FormatterListener(OUTPUT_METHOD_DOM),
  +     m_document(theDocument),
  +     m_documentFragment(theDocumentFragment),
        m_currentElement(0),
        m_elementStack(),
        m_textBuffer()
   {
        assert(m_document != 0);
  +     assert(m_documentFragment != 0);
   }
   
   
  @@ -133,13 +155,17 @@
        XalanSourceTreeElement* const   theNewElement =
                m_document->createElementNode(name, attrs, m_currentElement);
   
  -     if (m_currentElement == 0)
  +     if (m_currentElement != 0)
        {
  -             m_document->appendChildNode(theNewElement);
  +             m_currentElement->appendChildNode(theNewElement);
  +     }
  +     else if(m_documentFragment != 0)
  +     {
  +             m_documentFragment->appendChild(theNewElement);
        }
        else
        {
  -             m_currentElement->appendChildNode(theNewElement);
  +             m_document->appendChildNode(theNewElement);
        }
   
        m_elementStack.push_back(theNewElement);
  @@ -178,8 +204,12 @@
                        const XMLCh* const      chars,
                        const unsigned int      length)
   {
  -     if (m_currentElement == 0)
  +     if (m_documentFragment != 0)
        {
  +             doCharacters(chars, length);
  +     }
  +     else if (m_currentElement == 0)
  +     {
                if (isXMLWhitespace(chars) == false)
                {
                        throw 
XalanDOMException(XalanDOMException::HIERARCHY_REQUEST_ERR);
  @@ -188,7 +218,6 @@
        else
        {
                append(m_textBuffer, chars, length);
  -             
m_currentElement->appendChildNode(m_document->createTextNode(chars, length, 
m_currentElement));
        }
   }
   
  @@ -203,6 +232,8 @@
   
        processAccumulatedText();
   
  +     doProcessingInstruction(c_wstr(s_xsltNextIsRawString), 
c_wstr(s_formatterToDOMString));
  +
        characters(chars, length);
   }
   
  @@ -220,12 +251,31 @@
                        const XMLCh* const      chars,
                        const unsigned int      length)
   {
  +     assert(m_document != 0);
  +
        // Ignore any whitespace reported before the document element has been 
parsed.
        if (m_elementStack.empty() == false)
        {
  +             assert(m_documentFragment != 0 || 
m_document->getDocumentElement() != 0);
  +
  +             processAccumulatedText();
  +
  +             XalanSourceTreeText* const      theNewTextNode =
  +                     m_document->createTextIWSNode(chars, length, 
m_currentElement);
  +
  +             if (m_currentElement != 0)
  +             {
  +                     m_currentElement->appendChildNode(theNewTextNode);
  +             }
  +     }
  +     else if(m_documentFragment != 0)
  +     {
                processAccumulatedText();
  +
  +             XalanSourceTreeText* const      theNewTextNode =
  +                     m_document->createTextIWSNode(chars, length, 
m_currentElement);
   
  -             
m_currentElement->appendChildNode(m_document->createTextIWSNode(chars, length, 
m_currentElement));
  +             m_documentFragment->appendChild(theNewTextNode);
        }
   }
   
  @@ -236,18 +286,11 @@
                        const XMLCh* const      target,
                        const XMLCh* const      data)
   {
  -     if (m_currentElement == 0)
  -     {
  -             assert(m_document != 0);
  +     assert(m_document != 0);
   
  -             
m_document->appendChildNode(m_document->createProcessingInstructionNode(target, 
data));
  -     }
  -     else
  -     {
  -             processAccumulatedText();
  +     processAccumulatedText();
   
  -             
m_currentElement->appendChildNode(m_document->createProcessingInstructionNode(target,
 data, m_currentElement));
  -     }
  +     doProcessingInstruction(target, data);
   }
   
   
  @@ -273,6 +316,10 @@
        {
                m_currentElement->appendChildNode(theNewComment);
        }
  +     else if(m_documentFragment != 0)
  +     {
  +             m_documentFragment->appendChild(theNewComment);
  +     }
        else
        {
                m_document->appendChildNode(theNewComment);
  @@ -308,5 +355,72 @@
                        const XMLCh*    chars,
                        unsigned int    length)
   {
  -     m_currentElement->appendChildNode(m_document->createTextNode(chars, 
length, m_currentElement));
  +     if (m_currentElement != 0)
  +     {
  +             
m_currentElement->appendChildNode(m_document->createTextNode(chars, length, 
m_currentElement));
  +     }
  +     else if(m_documentFragment != 0)
  +     {
  +             
m_documentFragment->appendChild(m_document->createTextNode(chars, length, 
m_currentElement));
  +     }
  +     else
  +     {
  +             throw 
XalanDOMException(XalanDOMException::HIERARCHY_REQUEST_ERR);
  +     }
  +}
  +
  +
  +
  +void
  +FormatterToSourceTree::doProcessingInstruction(
  +                     const XMLCh*    target,
  +                     const XMLCh*    data)
  +{
  +     XalanSourceTreeProcessingInstruction* const             theNewPI =
  +             m_document->createProcessingInstructionNode(target, data);
  +
  +     if (m_currentElement != 0)
  +     {
  +             
m_currentElement->appendChildNode(m_document->createProcessingInstructionNode(target,
 data, m_currentElement));
  +     }
  +     else if(m_documentFragment != 0)
  +     {
  +             m_documentFragment->appendChild(theNewPI);
  +     }
  +     else
  +     {
  +             m_document->appendChildNode(theNewPI);
  +     }
  +}
  +
  +
  +
  +static XalanDOMString        s_xsltNextIsRawString;
  +
  +static XalanDOMString        s_formatterToDOMString;
  +
  +
  +
  +const XalanDOMString&        FormatterToSourceTree::s_xsltNextIsRawString = 
::s_xsltNextIsRawString;
  +
  +const XalanDOMString&        FormatterToSourceTree::s_formatterToDOMString = 
::s_formatterToDOMString;
  +
  +
  +
  +void
  +FormatterToSourceTree::initialize()
  +{
  +     ::s_xsltNextIsRawString = XALAN_STATIC_UCODE_STRING("xslt-next-is-raw");
  +
  +     ::s_formatterToDOMString = 
XALAN_STATIC_UCODE_STRING("formatter-to-dom");
  +}
  +
  +
  +
  +void
  +FormatterToSourceTree::terminate()
  +{
  +     clear(::s_xsltNextIsRawString);
  +
  +     clear(::s_formatterToDOMString);
   }
  
  
  
  1.2       +68 -2     xml-xalan/c/src/XalanSourceTree/FormatterToSourceTree.hpp
  
  Index: FormatterToSourceTree.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XalanSourceTree/FormatterToSourceTree.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FormatterToSourceTree.hpp 2001/01/08 18:10:43     1.1
  +++ FormatterToSourceTree.hpp 2001/01/16 02:45:12     1.2
  @@ -78,6 +78,7 @@
   
   
   class XalanDocument;
  +class XalanDocumentFragment;
   class XalanElement;
   class XalanNode;
   class XalanSourceTreeDocument;
  @@ -94,14 +95,37 @@
   public:
   
        /**
  +      * Perform static initialization.  See class XalanSourceTreeInit.
  +      */
  +     static void
  +     initialize();
  +
  +     /**
  +      * Perform static shut down.  See class XalanSourceTreeInit.
  +      */
  +     static void
  +     terminate();
  +
  +
  +     /**
         * Construct a FormatterToSourceTree instance.  it will add the nodes 
         * to the document.
         *
  -      * @param doc  document for nodes
  -      * @param elem current element for nodes
  +      * @param theDocument The document for nodes
         */
        FormatterToSourceTree(XalanSourceTreeDocument*  theDocument);
   
  +     /**
  +      * Construct a FormatterToSourceTree instance.  it will add the nodes 
  +      * to the document fragment.
  +      *
  +      * @param theDocument The document for nodes
  +      * @param theDocumentFragment The document fragment for nodes
  +      */
  +     FormatterToSourceTree(
  +                     XalanSourceTreeDocument*        theDocument,
  +                     XalanDocumentFragment*          theDocumentFragment);
  +
        virtual
        ~FormatterToSourceTree();
   
  @@ -165,6 +189,36 @@
                return m_document;
        }
   
  +     void
  +     setDocument(XalanSourceTreeDocument*    theDocument)
  +     {
  +             m_document = theDocument;
  +     }
  +
  +     XalanDocumentFragment*
  +     getDocumentFragment() const
  +     {
  +             return m_documentFragment;
  +     }
  +
  +     void
  +     setDocumentFragment(XalanDocumentFragment*      theDocumentFragment)
  +     {
  +             m_documentFragment = theDocumentFragment;
  +     }
  +
  +     XalanSourceTreeElement*
  +     getCurrentElement() const
  +     {
  +             return m_currentElement;
  +     }
  +
  +     void
  +     setCurrentElement(XalanSourceTreeElement*       theElement)
  +     {
  +             m_currentElement = theElement;
  +     }
  +
   private:
   
        // Some utility functions...
  @@ -176,9 +230,17 @@
                        const XMLCh*    chars,
                        unsigned int    length);
   
  +     void
  +     doProcessingInstruction(
  +                     const XMLCh*    target,
  +                     const XMLCh*    data);
  +
  +
        // Data members...
        XalanSourceTreeDocument*                                                
m_document;
   
  +     XalanDocumentFragment*                                                  
m_documentFragment;
  +
        XalanSourceTreeElement*                                                 
m_currentElement;
   
   #if defined(XALAN_NO_NAMESPACES)
  @@ -190,6 +252,10 @@
        ElementStackType                                                        
        m_elementStack;
   
        XalanDOMString                                                          
        m_textBuffer;
  +
  +     static const XalanDOMString&                                    
s_xsltNextIsRawString;
  +
  +     static const XalanDOMString&                                    
s_formatterToDOMString;
   };
   
   
  
  
  
  1.2       +5 -0      xml-xalan/c/src/XalanSourceTree/XalanSourceTreeInit.cpp
  
  Index: XalanSourceTreeInit.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XalanSourceTree/XalanSourceTreeInit.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanSourceTreeInit.cpp   2000/12/15 23:24:12     1.1
  +++ XalanSourceTreeInit.cpp   2001/01/16 02:45:12     1.2
  @@ -59,6 +59,7 @@
   
   
   
  +#include "FormatterToSourceTree.hpp"
   #include "XalanSourceTreeDocument.hpp"
   #include "XalanSourceTreeText.hpp"
   
  @@ -98,6 +99,8 @@
   void
   XalanSourceTreeInit::initialize()
   {
  +     FormatterToSourceTree::initialize();
  +
        XalanSourceTreeDocument::initialize();
   
        XalanSourceTreeText::initialize();
  @@ -111,4 +114,6 @@
        XalanSourceTreeText::terminate();
   
        XalanSourceTreeDocument::terminate();
  +
  +     FormatterToSourceTree::terminate();
   }
  
  
  

Reply via email to