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