summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL4
-rw-r--r--README4
-rwxr-xr-xconfigure4
-rw-r--r--doc/config.doc24
-rw-r--r--doc/index.doc33
-rw-r--r--doc/searching.doc29
-rw-r--r--qtools/Doxyfile113
-rw-r--r--src/commentcnv.l11
-rw-r--r--src/config.l17
-rw-r--r--src/config.xml17
-rw-r--r--src/configoptions.cpp23
-rw-r--r--src/docparser.h1
-rw-r--r--src/doxygen.cpp6
-rw-r--r--src/doxygen.css31
-rw-r--r--src/doxygen_css.h31
-rw-r--r--src/eclipsehelp.cpp200
-rw-r--r--src/eclipsehelp.h78
-rw-r--r--src/htmldocvisitor.cpp52
-rw-r--r--src/index.cpp10
-rw-r--r--src/libdoxygen.pro.in2
-rw-r--r--src/pagedef.cpp3
-rw-r--r--src/util.cpp15
-rw-r--r--src/util.h1
-rw-r--r--winbuild/Doxygen.vcproj8
24 files changed, 598 insertions, 119 deletions
diff --git a/INSTALL b/INSTALL
index 768418a..9fbcad8 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.6.1-20091222
+DOXYGEN Version 1.6.2
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (22 December 2009)
+Dimitri van Heesch (30 December 2009)
diff --git a/README b/README
index 83b07c5..48a9d13 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.6.1_20091222
+DOXYGEN Version 1.6.2
Please read INSTALL for compilation instructions.
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (22 December 2009)
+Dimitri van Heesch (dimitri@stack.nl) (30 December 2009)
diff --git a/configure b/configure
index 17d2848..779e7ac 100755
--- a/configure
+++ b/configure
@@ -17,10 +17,10 @@
doxygen_version_major=1
doxygen_version_minor=6
-doxygen_version_revision=1
+doxygen_version_revision=2
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=20091222
+doxygen_version_mmn=NO
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
diff --git a/doc/config.doc b/doc/config.doc
index b657883..455ac61 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -91,6 +91,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_dot_transparent DOT_TRANSPARENT
\refitem cfg_dotfile_dirs DOTFILE_DIRS
\refitem cfg_doxyfile_encoding DOXYFILE_ENCODING
+\refitem cfg_eclipse_doc_id ECLIPSE_DOC_ID
\refitem cfg_enable_preprocessing ENABLE_PREPROCESSING
\refitem cfg_enabled_sections ENABLED_SECTIONS
\refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE
@@ -123,6 +124,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_generate_chi GENERATE_CHI
\refitem cfg_generate_deprecatedlist GENERATE_DEPRECIATEDLIST
\refitem cfg_generate_docset GENERATE_DOCSET
+\refitem cfg_generate_eclipsehelp GENERATE_ECLIPSEHELP
\refitem cfg_generate_html GENERATE_HTML
\refitem cfg_generate_htmlhelp GENERATE_HTMLHELP
\refitem cfg_generate_latex GENERATE_LATEX
@@ -1455,6 +1457,28 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
If non-empty doxygen will try to run qhelpgenerator on the generated
.qhp file.
+\anchor cfg_generate_eclipsehelp
+<dt>\c GENERATE_ECLIPSEHELP <dd>
+ \addindex GENERATE_ECLIPSEHELP
+ If the \c GENERATE_ECLIPSEHELP tag is set to \c YES, additional index files
+ will be generated, which together with the HTML files, form an Eclipse help
+ plugin.
+
+ To install this plugin and make it available under the help contents
+ menu in Eclipse, the contents of the directory containing the HTML and XML
+ files needs to be copied into the plugins directory of eclipse. The name of
+ the directory within the plugins directory should be the same as
+ the \ref cfg_eclipse_doc_id "ECLIPSE_DOC_ID" value.
+
+ After copying Eclipse needs to be restarted before the help appears.
+
+\anchor cfg_eclipse_doc_id
+<dt>\c ECLIPSE_DOC_ID <dd>
+ \addindex ECLIPSE_DOC_ID
+ A unique identifier for the eclipse help plugin. When installing the plugin
+ the directory name containing the HTML and XML files should also have
+ this name. Each documentation set should have its own identifier.
+
\anchor cfg_searchengine
<dt>\c SEARCHENGINE <dd>
\addindex SEARCHENGINE
diff --git a/doc/index.doc b/doc/index.doc
index 7996f78..8633331 100644
--- a/doc/index.doc
+++ b/doc/index.doc
@@ -153,18 +153,31 @@ that use doxygen.
\latexonly
list of projects that use doxygen (see {\tt http://www.doxygen.org/projects.html}).
\endlatexonly
-If you know other projects, let me know and I'll add them.
+If you know other projects, let <a href="mailto:dimitri@stack.nl?subject=New%20project%20using%20Doxygen">me</a>
+know and I'll add them.
+
+<h2>Commercial Support</h2>
+
+I'm currently investigating the possibilities of providing
+commercial support for doxygen. The forms of support I'm thinking of
+are:
+<ul>
+<li>implementing features,
+<li>fixing bugs,
+<li>providing priority help in answering questions.
+</ul>
+To get a better understanding of the feasibility,
+please let <a href="mailto:dimitri@stack.nl?subject=Doxygen%20Commercial%20Support">me</a> know if you
+have a need for this type (or another type)
+of doxygen related commercial support.
<h2>Future work</h2>
-Although doxygen is used successfully by a lot of people already,
-there is always room for improvement. Therefore, I have compiled a
-\htmlonly
-<a href="http://www.doxygen.org/todo.html">todo/wish list</a>
-\endhtmlonly
-\latexonly
-todo/wish list (see {\tt http://www.doxygen.org/todo.html})
-\endlatexonly
-of possible and/or requested enhancements.
+Although doxygen is successfully used by large number of companies and
+open source projects already, there is always room for improvement.
+<p>
+You can submit enhancement requests in
+<a href="https://bugzilla.gnome.org/buglist.cgi?product=doxygen&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=enhancement">the bug tracker</a>.
+Make sure the severity of the bug report is set to "enhancement".
<h2>Acknowledgements</h2>
\addindex acknowledgements
diff --git a/doc/searching.doc b/doc/searching.doc
index 62f8971..03cd2b7 100644
--- a/doc/searching.doc
+++ b/doc/searching.doc
@@ -25,7 +25,7 @@ HTML browsers by default have no search capabilities that work across multiple
pages, so either doxygen or external tools need to help to facilitate
this feature.
-Doxygen has 5 different ways to add searching to the HTML output, each of which
+Doxygen has 6 different ways to add searching to the HTML output, each of which
has its own advantages and disadvantages:
<h2>1. Client side searching</h2>
@@ -128,4 +128,31 @@ has its own advantages and disadvantages:
each user, or distributing the Qt help assistant along with
the documentation, which is complicated by the fact that it is not
available as a separate package at this moment.
+
+<h2>6. Eclipse Help Plugin</h2>
+ If you use eclipse, you can embed the documentation generated by
+ doxygen as a help plugin. It will then appear as a topic in the help
+ browser that can be started from "Help contents" in the Help menu.
+ Eclipse will generate a search index for the documentation when you
+ first search for an keyword.
+
+ To enable the help plugin set
+ \ref cfg_generate_eclipsehelp "GENERATE_ECLIPSE_HELP" to \c YES,
+ and define a unique identifier for your project via
+ \ref cfg_eclipse_doc_id "ECLIPSE_DOC_ID", i.e:
+\verbatim
+ GENERATE_ECLIPSE_HELP = YES
+ ECLIPSE_DOC_ID = com.yourcompany.yourproject
+\endverbatim
+ then create the \c com.yourcompany.yourproject directory (so with
+ the same name as the value of \c ECLIPSE_DOC_ID) in the
+ \c plugin directory of eclipse and after doxygen completes copy
+ to contents of the help output directory to
+ the \c com.yourcompany.yourproject directory.
+ Then restart eclipse to make let it find the new plugin.
+
+ The eclipse help plugin provides similar functionality as the
+ Qt compressed help or CHM output, but it does require that Eclipse is
+ installed and running.
+
*/
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index cc8e7bb..5311996 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -1,22 +1,22 @@
-# Doxyfile 1.5.9
+# Doxyfile 1.6.1
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
-PROJECT_NAME = Doxygen
-PROJECT_NUMBER =
+PROJECT_NAME = Qtools
+PROJECT_NUMBER =
OUTPUT_DIRECTORY = ../qtools_docs
CREATE_SUBDIRS = YES
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
-ABBREVIATE_BRIEF =
+ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = $(PWD)/
-STRIP_FROM_INC_PATH =
+STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
QT_AUTOBRIEF = NO
@@ -24,12 +24,12 @@ MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
-ALIASES =
+ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
-EXTENSION_MAPPING =
+EXTENSION_MAPPING =
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
@@ -55,22 +55,25 @@ INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
+FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS =
+ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
SHOW_FILES = YES
SHOW_NAMESPACES = YES
-FILE_VERSION_FILTER =
-LAYOUT_FILE =
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
@@ -80,7 +83,7 @@ WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text "
-WARN_LOGFILE =
+WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
@@ -90,16 +93,16 @@ FILE_PATTERNS = *.h \
*.cpp \
*.doc
RECURSIVE = NO
-EXCLUDE =
+EXCLUDE =
EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS =
-EXCLUDE_SYMBOLS =
-EXAMPLE_PATH =
-EXAMPLE_PATTERNS =
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
-FILTER_PATTERNS =
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
@@ -122,31 +125,34 @@ IGNORE_PREFIX = Q
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
-HTML_OUTPUT =
+HTML_OUTPUT =
HTML_FILE_EXTENSION = .html
-HTML_HEADER =
-HTML_FOOTER =
-HTML_STYLESHEET =
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_TIMESTAMP = NO
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
GENERATE_DOCSET = YES
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
GENERATE_HTMLHELP = NO
-CHM_FILE =
-HHC_LOCATION =
+CHM_FILE =
+HHC_LOCATION =
GENERATE_CHI = NO
-CHM_INDEX_ENCODING =
+CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
GENERATE_QHP = YES
-QCH_FILE =
+QCH_FILE =
QHP_NAMESPACE = com.qtools
QHP_VIRTUAL_FOLDER = doc
-QHP_CUST_FILTER_NAME =
-QHP_CUST_FILTER_ATTRS =
-QHP_SECT_FILTER_ATTRS =
-QHG_LOCATION =
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
+GENERATE_ECLIPSEHELP = YES
+ECLIPSE_DOC_ID = org.doxygen.qtools
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
@@ -154,17 +160,18 @@ USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
FORMULA_FONTSIZE = 10
SEARCHENGINE = YES
+SERVER_BASED_SEARCH = NO
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = YES
-LATEX_OUTPUT =
+LATEX_OUTPUT =
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
+EXTRA_PACKAGES =
+LATEX_HEADER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
@@ -174,16 +181,16 @@ LATEX_SOURCE_CODE = YES
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
-RTF_OUTPUT =
+RTF_OUTPUT =
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
-MAN_OUTPUT =
+MAN_OUTPUT =
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
@@ -191,8 +198,8 @@ MAN_LINKS = NO
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
-XML_SCHEMA =
-XML_DTD =
+XML_SCHEMA =
+XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
@@ -204,37 +211,37 @@ GENERATE_AUTOGEN_DEF = NO
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX =
+PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
+# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration::additions related to external references
#---------------------------------------------------------------------------
-TAGFILES =
+TAGFILES =
GENERATE_TAGFILE = ../qtools_docs/qtools.tag
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
+# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
-MSCGEN_PATH =
+MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
DOT_FONTNAME = FreeSans
DOT_FONTSIZE = 10
-DOT_FONTPATH =
+DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
@@ -247,8 +254,8 @@ CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
-DOT_PATH =
-DOTFILE_DIRS =
+DOT_PATH =
+DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = YES
diff --git a/src/commentcnv.l b/src/commentcnv.l
index c18605d..f482d52 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -370,8 +370,8 @@ void replaceComment(int offset);
BEGIN(CComment);
}
}
-<CComment>[ \t]+"{@code" {
- copyToOutput(" @code",6);
+<CComment>"{@code"/[ \t\n] {
+ copyToOutput("@code",5);
g_lastCommentContext = YY_START;
g_javaBlock=1;
g_blockName=&yytext[1];
@@ -426,6 +426,7 @@ void replaceComment(int offset);
else
{
g_javaBlock++;
+ copyToOutput(yytext,yyleng);
}
}
<VerbatimCode>"}" {
@@ -441,6 +442,10 @@ void replaceComment(int offset);
copyToOutput(" @endcode ",10);
BEGIN(g_lastCommentContext);
}
+ else
+ {
+ copyToOutput(yytext,yyleng);
+ }
}
}
<VerbatimCode>[\\@]("enddot"|"endcode"|"endmsc") { /* end of verbatim block */
@@ -492,7 +497,7 @@ void replaceComment(int offset);
copyToOutput(yytext,yyleng);
}
-<CComment>[^\\!@*\n]* { /* anything that is not a '*' or command */
+<CComment>[^\\!@*\n{]* { /* anything that is not a '*' or command */
copyToOutput(yytext,yyleng);
}
<CComment>"*"+[^*/\\@\n]* { /* stars without slashes */
diff --git a/src/config.l b/src/config.l
index 62e3d7c..c1a4726 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1361,26 +1361,17 @@ void Config::check()
// check QHP creation requirements
if (Config_getBool("GENERATE_QHP"))
{
- bool qhp=TRUE;
- if (!Config_getBool("GENERATE_HTML"))
- {
- config_err("Error: GENERATE_QHP=YES requires GENERATE_HTML=YES. Disabling QHP output.\n");
- qhp=FALSE;
- }
-
if (Config_getString("QHP_NAMESPACE").isEmpty())
{
- config_err("Error: GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Disabling QHP output.\n");
- qhp=FALSE;
+ config_err("Error: GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n");
+ Config_getString("QHP_NAMESPACE")="org.doxygen.doc";
}
if (Config_getString("QHP_VIRTUAL_FOLDER").isEmpty())
{
- config_err("Error: GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Disabling QHP output.\n");
- qhp=FALSE;
+ config_err("Error: GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n");
+ Config_getString("QHP_VIRTUAL_FOLDER")="doc";
}
-
- Config_getBool("GENERATE_QHP")=qhp;
}
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") && Config_getBool("INLINE_INFO"))
diff --git a/src/config.xml b/src/config.xml
index e4c7cba..62b3438 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -861,7 +861,7 @@ The path specified is relative to the HTML output folder.
The QHP_NAMESPACE tag specifies the namespace to use when generating
Qt Help Project output. For more information please see
http://doc.trolltech.com/qthelpproject.html#namespace
-' defval='' depends='GENERATE_QHP'/>
+' defval='org.doxygen.Project' depends='GENERATE_QHP'/>
<option type='string' id='QHP_VIRTUAL_FOLDER' format='string' docs='
The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
Qt Help Project output. For more information please see
@@ -887,6 +887,21 @@ be used to specify the location of Qt&apos;s qhelpgenerator.
If non-empty doxygen will try to run qhelpgenerator on the generated
.qhp file.
' defval='' depends='GENERATE_QHP'/>
+ <option type='bool' id='GENERATE_ECLIPSEHELP' docs='
+If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+will be generated, which together with the HTML files, form an Eclipse help
+plugin. To install this plugin and make it available under the help contents
+menu in Eclipse, the contents of the directory containing the HTML and XML
+files needs to be copied into the plugins directory of eclipse. The name of
+the directory within the plugins directory should be the same as
+the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+the help appears.
+' defval='0' depends='GENERATE_HTML'/>
+ <option type='string' id='ECLIPSE_DOC_ID' docs='
+A unique identifier for the eclipse help plugin. When installing the plugin
+the directory name containing the HTML and XML files should also have
+this name.
+' defval='org.doxygen.Project' depends='GENERATE_ECLIPSEHELP'/>
<option type='bool' id='DISABLE_INDEX' docs='
The DISABLE_INDEX tag can be used to turn on/off the condensed index at
top of each HTML page. The value NO (the default) enables the index and
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index 6ec5151..3233bef 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -1253,6 +1253,7 @@ void addConfigOptions(Config *cfg)
"Qt Help Project output. For more information please see\n"
"http://doc.trolltech.com/qthelpproject.html#namespace"
);
+ cs->setDefaultValue("org.doxygen.Project");
cs->addDependency("GENERATE_QHP");
//----
cs = cfg->addString(
@@ -1298,6 +1299,28 @@ void addConfigOptions(Config *cfg)
cs->addDependency("GENERATE_QHP");
//----
cb = cfg->addBool(
+ "GENERATE_ECLIPSEHELP",
+ "If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files\n"
+ " will be generated, which together with the HTML files, form an Eclipse help\n"
+ " plugin. To install this plugin and make it available under the help contents\n"
+ "menu in Eclipse, the contents of the directory containing the HTML and XML\n"
+ "files needs to be copied into the plugins directory of eclipse. The name of\n"
+ "the directory within the plugins directory should be the same as\n"
+ "the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears.",
+ FALSE
+ );
+ cb->addDependency("GENERATE_HTML");
+ //----
+ cs = cfg->addString(
+ "ECLIPSE_DOC_ID",
+ "A unique identifier for the eclipse help plugin. When installing the plugin\n"
+ "the directory name containing the HTML and XML files should also have\n"
+ "this name."
+ );
+ cs->setDefaultValue("org.doxygen.Project");
+ cs->addDependency("GENERATE_ECLIPSEHELP");
+ //----
+ cb = cfg->addBool(
"DISABLE_INDEX",
"The DISABLE_INDEX tag can be used to turn on/off the condensed index at\n"
"top of each HTML page. The value NO (the default) enables the index and\n"
diff --git a/src/docparser.h b/src/docparser.h
index 433aea9..5483d20 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -1171,6 +1171,7 @@ class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode
void markFirst(bool v=TRUE) { m_isFirst=v; }
void markLast(bool v=TRUE) { m_isLast=v; }
const HtmlAttribList &attribs() const { return m_attribs; }
+ const QList<DocNode> &children() const { return m_children; }
int parse();
int parseXml();
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index fdb170f..5d590d3 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -1,8 +1,5 @@
/******************************************************************************
*
- *
- *
- *
* Copyright (C) 1997-2008 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
@@ -79,6 +76,7 @@
#include "portable.h"
#include "vhdlscanner.h"
#include "vhdldocgen.h"
+#include "eclipsehelp.h"
#include "layout.h"
@@ -10196,9 +10194,11 @@ void generateOutput()
if (Config_getBool("GENERATE_INDEXLOG")) Doxygen::indexList.addIndex(new IndexLog);
#endif
bool generateHtmlHelp = Config_getBool("GENERATE_HTMLHELP");
+ bool generateEclipseHelp = Config_getBool("GENERATE_ECLIPSEHELP");
bool generateQhp = Config_getBool("GENERATE_QHP");
bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
bool generateDocSet = Config_getBool("GENERATE_DOCSET");
+ if (generateEclipseHelp) Doxygen::indexList.addIndex(new EclipseHelp);
if (generateHtmlHelp) Doxygen::indexList.addIndex(new HtmlHelp);
if (generateQhp) Doxygen::indexList.addIndex(new Qhp);
if (generateTreeView) Doxygen::indexList.addIndex(new FTVHelp);
diff --git a/src/doxygen.css b/src/doxygen.css
index d00bc53..b057a92 100644
--- a/src/doxygen.css
+++ b/src/doxygen.css
@@ -31,7 +31,7 @@ div.multicol {
-webkit-column-count: 3;
}
-p.startli, p.startdd {
+p.startli, p.startdd, p.starttd {
margin-top: 2px;
}
@@ -43,6 +43,10 @@ p.enddd {
margin-bottom: 4px;
}
+p.endtd {
+ margin-bottom: 2px;
+}
+
/* @end */
caption {
@@ -115,9 +119,11 @@ a.elRef {
}
a.code {
+ color: #3030f0;
}
a.codeRef {
+ color: #3030f0;
}
/* @end */
@@ -136,6 +142,10 @@ pre.fragment {
background-color: #f5f5f5;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
}
div.ah {
@@ -501,3 +511,22 @@ address {
font-style: normal;
color: #333;
}
+
+table.doxtable {
+ border-collapse:collapse;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #153788;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #254798;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+}
+
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
index 076aa7c..b3ae195 100644
--- a/src/doxygen_css.h
+++ b/src/doxygen_css.h
@@ -31,7 +31,7 @@
" -webkit-column-count: 3;\n"
"}\n"
"\n"
-"p.startli, p.startdd {\n"
+"p.startli, p.startdd, p.starttd {\n"
" margin-top: 2px;\n"
"}\n"
"\n"
@@ -43,6 +43,10 @@
" margin-bottom: 4px;\n"
"}\n"
"\n"
+"p.endtd {\n"
+" margin-bottom: 2px;\n"
+"}\n"
+"\n"
"/* @end */\n"
"\n"
"caption {\n"
@@ -115,9 +119,11 @@
"}\n"
"\n"
"a.code {\n"
+" color: #3030f0;\n"
"}\n"
"\n"
"a.codeRef {\n"
+" color: #3030f0;\n"
"}\n"
"\n"
"/* @end */\n"
@@ -136,6 +142,10 @@
" background-color: #f5f5f5;\n"
" padding: 4px 6px;\n"
" margin: 4px 8px 4px 2px;\n"
+" overflow: auto;\n"
+" word-wrap: break-word;\n"
+" font-size: 9pt;\n"
+" line-height: 125%;\n"
"}\n"
"\n"
"div.ah {\n"
@@ -501,3 +511,22 @@
" font-style: normal;\n"
" color: #333;\n"
"}\n"
+"\n"
+"table.doxtable {\n"
+" border-collapse:collapse;\n"
+"}\n"
+"\n"
+"table.doxtable td, table.doxtable th {\n"
+" border: 1px solid #153788;\n"
+" padding: 3px 7px 2px;\n"
+"}\n"
+"\n"
+"table.doxtable th {\n"
+" background-color: #254798;\n"
+" color: #FFFFFF;\n"
+" font-size: 110%;\n"
+" padding-bottom: 4px;\n"
+" padding-top: 5px;\n"
+" text-align:left;\n"
+"}\n"
+"\n"
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 */)
+{
+}
+
diff --git a/src/eclipsehelp.h b/src/eclipsehelp.h
new file mode 100644
index 0000000..e0c3a34
--- /dev/null
+++ b/src/eclipsehelp.h
@@ -0,0 +1,78 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2008 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.
+ *
+ */
+/*
+ * eclipsehelp.h
+ *
+ * Created on: 7.11.2009
+ * Author: ondrej
+ */
+
+#ifndef ECLIPSEHELP_H
+#define ECLIPSEHELP_H
+
+#include "qtbc.h"
+#include "index.h"
+#include <qtextstream.h>
+
+/* -- forward declarations */
+class QFile;
+
+/*!
+ * \brief Generator of Eclipse help files
+ *
+ * This class generates the Eclipse specific help files.
+ * These files can be used to generate a help plugin readable
+ * by the Eclipse IDE.
+ */
+class EclipseHelp : public IndexIntf
+{
+ public:
+ EclipseHelp();
+ virtual ~EclipseHelp();
+
+ /* -- index interface */
+ virtual void initialize();
+ virtual void finalize();
+ virtual void incContentsDepth();
+ virtual void decContentsDepth();
+ virtual void addContentsItem(bool isDir, const char *name, const char *ref = 0,
+ const char *file = 0, const char *anchor = 0);
+ virtual void addIndexItem(Definition *context,MemberDef *md,
+ const char *anchor,const char *word);
+ virtual void addIndexFile(const char *name);
+ virtual void addImageFile(const char *name);
+ virtual void addStyleSheetFile(const char *name);
+
+ private:
+ int m_depth;
+ bool m_endtag;
+
+ QFile * m_tocfile;
+ QTextStream m_tocstream;
+ QCString m_pathprefix;
+
+ /* -- avoid copying */
+ EclipseHelp(const EclipseHelp &);
+ EclipseHelp & operator = (const EclipseHelp &);
+
+ /* -- formatting helpers */
+ void indent();
+ void closedTag();
+ void openedTag();
+};
+
+#endif /* ECLIPSEHELP_H */
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 49a0de2..cfe1bd8 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -619,7 +619,7 @@ bool isSeparatedParagraph(DocSimpleSect *parent,DocPara *par)
return FALSE;
}
-int getParagraphContext(DocPara *p,bool &isFirst,bool &isLast)
+static int getParagraphContext(DocPara *p,bool &isFirst,bool &isLast)
{
int t=0;
isFirst=FALSE;
@@ -664,6 +664,12 @@ int getParagraphContext(DocPara *p,bool &isFirst,bool &isLast)
if (isFirst) t=2;
if (isLast) t=4;
break;
+ case DocNode::Kind_HtmlCell:
+ isFirst=isFirstChildNode((DocHtmlCell*)p->parent(),p);
+ isLast =isLastChildNode ((DocHtmlCell*)p->parent(),p);
+ if (isFirst) t=5;
+ if (isLast) t=6;
+ break;
case DocNode::Kind_SimpleSect:
isFirst=isFirstChildNode((DocSimpleSect*)p->parent(),p);
isLast =isLastChildNode ((DocSimpleSect*)p->parent(),p);
@@ -741,12 +747,14 @@ void HtmlDocVisitor::visitPre(DocPara *p)
// this allows us to mark the tag with a special class so we can
// fix the otherwise ugly spacing.
int t;
- static const char *contexts[5] =
- { "",
- " class=\"startli\"",
- " class=\"startdd\"",
- " class=\"endli\"",
- " class=\"enddd\""
+ static const char *contexts[7] =
+ { "", // 0
+ " class=\"startli\"", // 1
+ " class=\"startdd\"", // 2
+ " class=\"endli\"", // 3
+ " class=\"enddd\"", // 4
+ " class=\"starttd\"", // 5
+ " class=\"endtd\"" // 6
};
bool isFirst;
bool isLast;
@@ -1025,24 +1033,24 @@ void HtmlDocVisitor::visitPost(DocHtmlDescData *)
void HtmlDocVisitor::visitPre(DocHtmlTable *t)
{
if (m_hide) return;
- bool hasBorder = FALSE;
- bool hasCellSpacing = FALSE;
- bool hasCellPadding = FALSE;
+ //bool hasBorder = FALSE;
+ //bool hasCellSpacing = FALSE;
+ //bool hasCellPadding = FALSE;
forceEndParagraph(t);
- HtmlAttribListIterator li(t->attribs());
- HtmlAttrib *att;
- for (li.toFirst();(att=li.current());++li)
- {
- if (att->name=="border") hasBorder=TRUE;
- else if (att->name=="cellspacing") hasCellSpacing=TRUE;
- else if (att->name=="cellpadding") hasCellPadding=TRUE;
- }
- m_t << "<table" << htmlAttribsToString(t->attribs());
- if (!hasBorder) m_t << " border=\"1\"";
- if (!hasCellSpacing) m_t << " cellspacing=\"3\"";
- if (!hasCellPadding) m_t << " cellpadding=\"3\"";
+ //HtmlAttribListIterator li(t->attribs());
+ //HtmlAttrib *att;
+ //for (li.toFirst();(att=li.current());++li)
+ //{
+ // if (att->name=="border") hasBorder=TRUE;
+ // else if (att->name=="cellspacing") hasCellSpacing=TRUE;
+ // else if (att->name=="cellpadding") hasCellPadding=TRUE;
+ //}
+ m_t << "<table class=\"doxtable\"" << htmlAttribsToString(t->attribs());
+ //if (!hasBorder) m_t << " border=\"1\"";
+ //if (!hasCellSpacing) m_t << " cellspacing=\"3\"";
+ //if (!hasCellPadding) m_t << " cellpadding=\"3\"";
m_t << ">\n";
}
diff --git a/src/index.cpp b/src/index.cpp
index 5f3d341..9becc0d 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -2892,7 +2892,7 @@ void writeExampleIndex(OutputList &ol)
if (!pd->title().isEmpty())
{
ol.writeObjectLink(0,n,0,pd->title());
- Doxygen::indexList.addContentsItem(FALSE,pd->title(),pd->getReference(),n,0);
+ Doxygen::indexList.addContentsItem(FALSE,filterTitle(pd->title()),pd->getReference(),n,0);
}
else
{
@@ -3005,7 +3005,7 @@ void writePageIndex(OutputList &ol)
ol.endTypewriter();
}
ol.writeString("\n");
- Doxygen::indexList.addContentsItem(hasSubPages,pageTitle,pd->getReference(),pd->getOutputFileBase(),0);
+ Doxygen::indexList.addContentsItem(hasSubPages,filterTitle(pageTitle),pd->getReference(),pd->getOutputFileBase(),0);
writeSubPages(pd);
ol.endIndexListItem();
}
@@ -3548,7 +3548,7 @@ void writeIndex(OutputList &ol)
}
else
{
- title = substitute(Doxygen::mainPage->title(),"%","");
+ title = filterTitle(Doxygen::mainPage->title());
}
QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
@@ -3576,7 +3576,9 @@ void writeIndex(OutputList &ol)
{
if (Doxygen::mainPage->title().lower()!="notitle")
{
- ol.docify(Doxygen::mainPage->title());
+ ol.parseDoc(Doxygen::mainPage->docFile(),Doxygen::mainPage->docLine(),
+ Doxygen::mainPage,0,Doxygen::mainPage->title(),
+ TRUE,FALSE,0,TRUE,FALSE);
}
}
else
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index bb828cc..6896bd3 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -42,6 +42,7 @@ HEADERS = bufstr.h \
dot.h \
doxygen.h \
doxygen_css.h \
+ eclipsehelp.h \
entry.h \
example.h \
filedef.h \
@@ -173,6 +174,7 @@ SOURCES = ce_lex.cpp \
doctokenizer.cpp \
dot.cpp \
doxygen.cpp \
+ eclipsehelp.cpp \
entry.cpp \
filedef.cpp \
filename.cpp \
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index c6b299c..599589b 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -6,6 +6,7 @@
#include "outputlist.h"
#include "doxygen.h"
#include "language.h"
+#include <qregexp.h>
PageDef::PageDef(const char *f,int l,const char *n,
@@ -156,7 +157,7 @@ void PageDef::writeDocumentation(OutputList &ol)
}
}
- Doxygen::indexList.addIndexItem(this,0,0,title());
+ Doxygen::indexList.addIndexItem(this,0,0,filterTitle(title()));
}
void PageDef::writePageDocumentation(OutputList &ol)
diff --git a/src/util.cpp b/src/util.cpp
index 8d33369..cdeaaee 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -6970,4 +6970,19 @@ bool readInputFile(const char *fileName,BufStr &inBuf)
return TRUE;
}
+// Replace %word by word in title
+QCString filterTitle(const QCString &title)
+{
+ QCString tf;
+ static QRegExp re("%[A-Z_a-z]");
+ int p=0,i,l;
+ while ((i=re.match(title,p,&l))!=-1)
+ {
+ tf+=title.mid(p,i-p);
+ tf+=title.mid(i+1,l-1); // skip %
+ p=i+l;
+ }
+ tf+=title.right(title.length()-p);
+ return tf;
+}
diff --git a/src/util.h b/src/util.h
index 6267c18..cca2de3 100644
--- a/src/util.h
+++ b/src/util.h
@@ -366,6 +366,7 @@ bool usingTreeIndex();
void stackTrace();
bool readInputFile(const char *fileName,BufStr &inBuf);
+QCString filterTitle(const QCString &title);
#endif
diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj
index 8f25893..731a493 100644
--- a/winbuild/Doxygen.vcproj
+++ b/winbuild/Doxygen.vcproj
@@ -767,6 +767,10 @@
</FileConfiguration>
</File>
<File
+ RelativePath="..\src\eclipsehelp.cpp"
+ >
+ </File>
+ <File
RelativePath="..\src\entry.cpp"
>
<FileConfiguration
@@ -2098,6 +2102,10 @@
>
</File>
<File
+ RelativePath="..\src\eclipsehelp.h"
+ >
+ </File>
+ <File
RelativePath="..\src\entry.h"
>
</File>