Blame src/qhpxmlwriter.cpp

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