You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2001/01/16 03:45:12 UTC

cvs commit: xml-xalan/c/src/XalanSourceTree FormatterToSourceTree.cpp FormatterToSourceTree.hpp XalanSourceTreeInit.cpp

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();
   }