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