Blame src/eclipsehelp.cpp

Packit 1c1d7e
/******************************************************************************
Packit 1c1d7e
 *
Packit 1c1d7e
 * Copyright (C) 1997-2015 by 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
 */
Packit 1c1d7e
#include "eclipsehelp.h"
Packit 1c1d7e
#include "util.h"
Packit 1c1d7e
#include "config.h"
Packit 1c1d7e
#include "message.h"
Packit 1c1d7e
#include "doxygen.h"
Packit 1c1d7e
#include <qfile.h>
Packit 1c1d7e
Packit 1c1d7e
EclipseHelp::EclipseHelp() : m_depth(0), m_endtag(FALSE), m_openTags(0), m_tocfile(0) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
EclipseHelp::~EclipseHelp() 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void EclipseHelp::indent()
Packit 1c1d7e
{
Packit 1c1d7e
  int i;
Packit 1c1d7e
  for (i=0; i
Packit 1c1d7e
  {
Packit 1c1d7e
    m_tocstream << "  ";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void EclipseHelp::closedTag()
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_endtag) 
Packit 1c1d7e
  {
Packit 1c1d7e
    m_tocstream << "/>" << endl;
Packit 1c1d7e
    m_endtag = FALSE;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void EclipseHelp::openedTag()
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_endtag) 
Packit 1c1d7e
  {
Packit 1c1d7e
    m_tocstream << ">" << endl;
Packit 1c1d7e
    m_endtag = FALSE;
Packit 1c1d7e
    ++m_openTags;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
 * \brief Initialize the Eclipse generator
Packit 1c1d7e
 *
Packit 1c1d7e
 * This method opens the XML TOC file and writes headers of the files.
Packit 1c1d7e
 * \sa finalize()
Packit 1c1d7e
 */
Packit 1c1d7e
void EclipseHelp::initialize() 
Packit 1c1d7e
{
Packit 1c1d7e
  // -- read path prefix from the configuration
Packit 1c1d7e
  //m_pathprefix = Config_getString(ECLIPSE_PATHPREFIX);
Packit 1c1d7e
  //if (m_pathprefix.isEmpty()) m_pathprefix = "html/";
Packit 1c1d7e
Packit 1c1d7e
  // -- open the contents file 
Packit 1c1d7e
  QCString name = Config_getString(HTML_OUTPUT) + "/toc.xml";
Packit 1c1d7e
  m_tocfile = new QFile(name);
Packit 1c1d7e
  if (!m_tocfile->open(IO_WriteOnly)) 
Packit 1c1d7e
  {
Packit 1c1d7e
    err("Could not open file %s for writing\n", name.data());
Packit 1c1d7e
    exit(1);
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  // -- initialize its text stream
Packit 1c1d7e
  m_tocstream.setDevice(m_tocfile);
Packit 1c1d7e
  //m_tocstream.setEncoding(FTextStream::UnicodeUTF8);
Packit 1c1d7e
Packit 1c1d7e
  // -- write the opening tag
Packit 1c1d7e
  QCString title = Config_getString(PROJECT_NAME);
Packit 1c1d7e
  if (title.isEmpty())
Packit 1c1d7e
  {
Packit 1c1d7e
    title = "Doxygen generated documentation";
Packit 1c1d7e
  }
Packit 1c1d7e
  m_tocstream << "
Packit 1c1d7e
              << "\" topic=\"" << convertToXML(m_pathprefix) 
Packit 1c1d7e
              << "index" << Doxygen::htmlFileExtension << "\">" << endl;
Packit 1c1d7e
  ++ m_depth;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
 * \brief Finish generation of the Eclipse specific help files
Packit 1c1d7e
 *
Packit 1c1d7e
 * This method writes footers of the files and closes them.
Packit 1c1d7e
 * \sa initialize()
Packit 1c1d7e
 */
Packit 1c1d7e
void EclipseHelp::finalize() 
Packit 1c1d7e
{
Packit 1c1d7e
  closedTag(); // -- close previous tag
Packit 1c1d7e
Packit 1c1d7e
  // -- write ending tag 
Packit 1c1d7e
  --m_depth;
Packit 1c1d7e
  m_tocstream << "</toc>" << endl;
Packit 1c1d7e
Packit 1c1d7e
  // -- close the content file
Packit 1c1d7e
  m_tocstream.unsetDevice();
Packit 1c1d7e
  m_tocfile->close();
Packit 1c1d7e
  delete m_tocfile; m_tocfile = 0;
Packit 1c1d7e
Packit 1c1d7e
  QCString name = Config_getString(HTML_OUTPUT) + "/plugin.xml";
Packit 1c1d7e
  QFile pluginFile(name);
Packit 1c1d7e
  if (pluginFile.open(IO_WriteOnly))
Packit 1c1d7e
  {
Packit 1c1d7e
    QString docId = Config_getString(ECLIPSE_DOC_ID);
Packit 1c1d7e
    FTextStream t(&pluginFile);
Packit 1c1d7e
    t << "
Packit 1c1d7e
    t << "        version=\"1.0.0\" provider-name=\"Doxygen\">" << endl;
Packit 1c1d7e
    t << "  <extension point=\"org.eclipse.help.toc\">" << endl;
Packit 1c1d7e
    t << "    <toc file=\"toc.xml\" primary=\"true\" />" << endl;
Packit 1c1d7e
    t << "  </extension>" << endl;
Packit 1c1d7e
    t << "</plugin>" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
 * \brief Increase the level of content hierarchy
Packit 1c1d7e
 */
Packit 1c1d7e
void EclipseHelp::incContentsDepth() 
Packit 1c1d7e
{
Packit 1c1d7e
  openedTag();
Packit 1c1d7e
  ++m_depth;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
 * \brief Decrease the level of content hierarchy
Packit 1c1d7e
 *
Packit 1c1d7e
 * It closes currently opened topic tag.
Packit 1c1d7e
 */
Packit 1c1d7e
void EclipseHelp::decContentsDepth() 
Packit 1c1d7e
{
Packit 1c1d7e
  // -- end of the opened topic
Packit 1c1d7e
  closedTag();
Packit 1c1d7e
  --m_depth;
Packit 1c1d7e
Packit 1c1d7e
  if (m_openTags==m_depth)
Packit 1c1d7e
  {
Packit 1c1d7e
    --m_openTags;
Packit 1c1d7e
    indent();
Packit 1c1d7e
    m_tocstream << "</topic>" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
 * \brief Add an item to the content
Packit 1c1d7e
 *
Packit 1c1d7e
 * @param isDir Flag whether the argument \a file is a directory or a file entry
Packit 1c1d7e
 * @param name Name of the item
Packit 1c1d7e
 * @param ref URL of the item
Packit 1c1d7e
 * @param file Name of a file which the item is defined in (without extension)
Packit 1c1d7e
 * @param anchor Name of an anchor of the item.
Packit 1c1d7e
 * @param separateIndex not used.
Packit 1c1d7e
 * @param addToNavIndex not used.
Packit 1c1d7e
 * @param def not used.
Packit 1c1d7e
 */
Packit 1c1d7e
void EclipseHelp::addContentsItem(
Packit 1c1d7e
    bool /* isDir */,
Packit 1c1d7e
    const char *name,
Packit 1c1d7e
    const char * /* ref */,
Packit 1c1d7e
    const char *file,
Packit 1c1d7e
    const char *anchor,
Packit 1c1d7e
    bool /* separateIndex */,
Packit 1c1d7e
    bool /* addToNavIndex */,
Packit 1c1d7e
    Definition * /*def*/) 
Packit 1c1d7e
{
Packit 1c1d7e
  // -- write the topic tag 
Packit 1c1d7e
  closedTag();
Packit 1c1d7e
  if (file) 
Packit 1c1d7e
  { 
Packit 1c1d7e
    switch (file[0]) // check for special markers (user defined URLs)
Packit 1c1d7e
    {
Packit 1c1d7e
      case '^':
Packit 1c1d7e
        // URL not supported by eclipse toc.xml
Packit 1c1d7e
	break;
Packit 1c1d7e
Packit 1c1d7e
      case '!':
Packit 1c1d7e
        indent();
Packit 1c1d7e
        m_tocstream << "
Packit 1c1d7e
        m_tocstream << " href=\"" << convertToXML(m_pathprefix) << &file[1] << "\"";
Packit 1c1d7e
        m_endtag = TRUE;
Packit 1c1d7e
	break;
Packit 1c1d7e
Packit 1c1d7e
      default:
Packit 1c1d7e
        indent();
Packit 1c1d7e
        m_tocstream << "
Packit 1c1d7e
        m_tocstream << " href=\"" << convertToXML(m_pathprefix) 
Packit 1c1d7e
                    << file << Doxygen::htmlFileExtension;
Packit 1c1d7e
        if (anchor)
Packit 1c1d7e
        {
Packit 1c1d7e
          m_tocstream << "#" << anchor;
Packit 1c1d7e
        }
Packit 1c1d7e
        m_tocstream << "\"";
Packit 1c1d7e
        m_endtag = TRUE;
Packit 1c1d7e
	break;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    indent();
Packit 1c1d7e
    m_tocstream << "
Packit 1c1d7e
    m_endtag = TRUE;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void EclipseHelp::addIndexItem(
Packit 1c1d7e
    Definition * /* context */,
Packit 1c1d7e
    MemberDef * /* md */,
Packit 1c1d7e
    const char * /* sectionAnchor */,
Packit 1c1d7e
    const char * /* title */)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void EclipseHelp::addIndexFile(const char * /* name */) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void EclipseHelp::addImageFile(const char * /* name */) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void EclipseHelp::addStyleSheetFile(const char * /* name */) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e