diff -r 000000000000 -r 42188c7ea2d9 Orb/Doxygen/src/qhpxmlwriter.cpp --- /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 + */ + +#include "qhpxmlwriter.h" +#include "util.h" + +#include + +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 << ""; +} +