|
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 |
|