Orb/Doxygen/src/qhpxmlwriter.cpp
changeset 0 42188c7ea2d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Orb/Doxygen/src/qhpxmlwriter.cpp	Thu Jan 21 17:29:01 2010 +0000
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2008 by Sebastian Pipping.
+ * Copyright (C) 2008 Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby 
+ * granted. No representations are made about the suitability of this software 
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ * Sebastian Pipping <sebastian@pipping.org>
+ */
+
+#include "qhpxmlwriter.h"
+#include "util.h"
+
+#include <qfile.h>
+
+QhpXmlWriter::QhpXmlWriter() 
+    : m_out(&m_backend), m_indentLevel(0), 
+      m_curLineIndented(false), m_compress(false)
+{
+}
+
+QhpXmlWriter::~QhpXmlWriter()
+{
+}
+
+void QhpXmlWriter::setIndentLevel(int level)
+{
+  m_indentLevel = level;
+}
+
+void QhpXmlWriter::setCompressionEnabled(bool enabled)
+{
+  m_compress = enabled;
+}
+
+void QhpXmlWriter::insert(QhpXmlWriter const & source)
+{
+  m_out << source.m_backend.data();
+}
+
+void QhpXmlWriter::dumpTo(QFile & file)
+{
+  file.writeBlock(m_backend.data(), m_backend.length());
+}
+
+void QhpXmlWriter::open(char const * elementName,
+    char const * const * attributes)
+{
+  indent();
+  openPure(elementName, attributes);
+  newLine();
+  m_indentLevel++;
+}
+
+void QhpXmlWriter::openClose(char const * elementName,
+    char const * const * attributes)
+{
+  indent();
+  openClosePure(elementName, attributes);
+  newLine();
+}
+
+void QhpXmlWriter::openCloseContent(char const * elementName,
+    char const * content)
+{
+  indent();
+  openPure(elementName);
+  m_out << convertToXML(content);
+  closePure(elementName);
+  newLine();
+}
+
+void QhpXmlWriter::close(char const * elementName)
+{
+  m_indentLevel--;
+  indent();
+  closePure(elementName);
+  newLine();
+}
+
+void QhpXmlWriter::indent()
+{
+  if (m_curLineIndented)
+  {
+    return;
+  }
+  for (int i = 0; i < m_indentLevel; i++) 
+  {
+    m_out << "  ";
+  }
+  m_curLineIndented = true;
+}
+
+void QhpXmlWriter::newLine()
+{
+  if (!m_compress)
+  {
+    m_out << "\n";
+    m_curLineIndented = false;
+  }
+}
+
+void QhpXmlWriter::openPureHelper(char const * elementName,
+                                  char const * const * attributes, bool close)
+{
+  m_out << "<" << elementName;
+  if (attributes)
+  {
+    for (char const * const * walker = attributes;
+        walker[0]; walker += 2)
+    {
+      char const * const key = walker[0];
+      char const * const value = walker[1];
+      if (!value)
+      {
+        continue;  
+      }
+      m_out << " " << key << "=\"" << convertToXML(value) << "\"";
+    }
+  }
+
+  if (close)
+  {
+    m_out << " /";
+  }
+  m_out << ">";
+}
+
+void QhpXmlWriter::openPure(char const * elementName,
+                            char const * const * attributes)
+{
+  openPureHelper(elementName, attributes, false);
+}
+
+void QhpXmlWriter::openClosePure(char const * elementName,
+                                 char const * const * attributes)
+{
+  openPureHelper(elementName, attributes, true);
+}
+
+void QhpXmlWriter::closePure(char const * elementName)
+{
+  m_out << "</" << elementName << ">";
+}
+