summaryrefslogtreecommitdiffstats
path: root/src/eclipsehelp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/eclipsehelp.cpp')
-rw-r--r--src/eclipsehelp.cpp200
1 files changed, 200 insertions, 0 deletions
diff --git a/src/eclipsehelp.cpp b/src/eclipsehelp.cpp
new file mode 100644
index 0000000..1887089
--- /dev/null
+++ b/src/eclipsehelp.cpp
@@ -0,0 +1,200 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2009 by 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.
+ *
+ */
+#include "eclipsehelp.h"
+#include "util.h"
+#include "config.h"
+#include "message.h"
+#include "doxygen.h"
+
+EclipseHelp::EclipseHelp() : m_depth(0), m_endtag(FALSE), m_tocfile(0)
+{
+}
+
+EclipseHelp::~EclipseHelp()
+{
+}
+
+void EclipseHelp::indent()
+{
+ int i;
+ for (i=0; i<m_depth; i++)
+ {
+ m_tocstream << " ";
+ }
+}
+
+void EclipseHelp::closedTag()
+{
+ if (m_endtag)
+ {
+ m_tocstream << "/>" << endl;
+ m_endtag = FALSE;
+ }
+}
+
+void EclipseHelp::openedTag()
+{
+ if (m_endtag)
+ {
+ m_tocstream << ">" << endl;
+ m_endtag = FALSE;
+ }
+}
+
+/*!
+ * \brief Initialize the Eclipse generator
+ *
+ * This method opens the XML TOC file and writes headers of the files.
+ * \sa finalize()
+ */
+void EclipseHelp::initialize()
+{
+ // -- read path prefix from the configuration
+ //m_pathprefix = Config_getString("ECLIPSE_PATHPREFIX");
+ //if (m_pathprefix.isEmpty()) m_pathprefix = "html/";
+
+ // -- open the contents file
+ QCString name = Config_getString("HTML_OUTPUT") + "/toc.xml";
+ m_tocfile = new QFile(name);
+ if (!m_tocfile->open(IO_WriteOnly))
+ {
+ err("Could not open file %s for writing\n", name.data());
+ exit(1);
+ }
+
+ // -- initialize its text stream
+ m_tocstream.setDevice(m_tocfile);
+ m_tocstream.setEncoding(QTextStream::UnicodeUTF8);
+
+ // -- write the opening tag
+ QCString title = Config_getString("PROJECT_NAME");
+ if (title.isEmpty())
+ {
+ title = "Doxygen generated documentation";
+ }
+ m_tocstream << "<toc label=\"" << convertToXML(title) << "\">" << endl;
+ ++ m_depth;
+}
+
+/*!
+ * \brief Finish generation of the Eclipse specific help files
+ *
+ * This method writes footers of the files and closes them.
+ * \sa initialize()
+ */
+void EclipseHelp::finalize()
+{
+ closedTag(); // -- close previous tag
+
+ // -- write ending tag
+ --m_depth;
+ m_tocstream << "</toc>" << endl;
+
+ // -- close the content file
+ m_tocstream.unsetDevice();
+ m_tocfile->close();
+ delete m_tocfile; m_tocfile = 0;
+
+ QCString name = Config_getString("HTML_OUTPUT") + "/plugin.xml";
+ QFile pluginFile(name);
+ if (pluginFile.open(IO_WriteOnly))
+ {
+ QString docId = Config_getString("ECLIPSE_DOC_ID");
+ QTextStream t(&pluginFile);
+ t << "<plugin name=\"" << docId << "\" id=\"" << docId << "\"" << endl;
+ t << " version=\"1.0.0\" provider-name=\"Doxygen\">" << endl;
+ t << " <extension point=\"org.eclipse.help.toc\">" << endl;
+ t << " <toc file=\"toc.xml\" primary=\"true\" />" << endl;
+ t << " </extension>" << endl;
+ t << "</plugin>" << endl;
+ }
+}
+
+/*!
+ * \brief Increase the level of content hierarchy
+ */
+void EclipseHelp::incContentsDepth()
+{
+ openedTag();
+ ++m_depth;
+}
+
+/*!
+ * \brief Decrease the level of content hierarchy
+ *
+ * It closes currently opened topic tag.
+ */
+void EclipseHelp::decContentsDepth()
+{
+ // -- end of the opened topic
+ closedTag();
+ --m_depth;
+ indent();
+ m_tocstream << "</topic>" << endl;
+}
+
+/*!
+ * \brief Add an item to the content
+ *
+ * @param isDir Flag whether the argument \a file is a directory or a file entry
+ * @param name Name of the item
+ * @param ref URL of the item
+ * @param file Name of a file which the item is defined in (without extension)
+ * @param anchor Name of an anchor of the item.
+ */
+void EclipseHelp::addContentsItem(
+ bool isDir,
+ const char *name,
+ const char * /* ref */,
+ const char *file,
+ const char *anchor)
+{
+ // -- write the topic tag
+ closedTag();
+ indent();
+ m_tocstream << "<topic label=\"" << convertToXML(name) << "\"";
+ if (!isDir && file)
+ { // -- Eclipse help cannot handle directories
+ m_tocstream << " href=\"" << convertToXML(m_pathprefix)
+ << file << Doxygen::htmlFileExtension;
+ if (anchor)
+ {
+ m_tocstream << "#" << anchor;
+ }
+ m_tocstream << "\"";
+ }
+ m_endtag = TRUE;
+}
+
+void EclipseHelp::addIndexItem(
+ Definition * /* context */,
+ MemberDef * /* md */,
+ const char * /* anchor */,
+ const char * /* word */)
+{
+}
+
+void EclipseHelp::addIndexFile(const char * /* name */)
+{
+}
+
+void EclipseHelp::addImageFile(const char * /* name */)
+{
+}
+
+void EclipseHelp::addStyleSheetFile(const char * /* name */)
+{
+}
+