diff options
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | README | 4 | ||||
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | doc/config.doc | 24 | ||||
-rw-r--r-- | doc/index.doc | 33 | ||||
-rw-r--r-- | doc/searching.doc | 29 | ||||
-rw-r--r-- | qtools/Doxyfile | 113 | ||||
-rw-r--r-- | src/commentcnv.l | 11 | ||||
-rw-r--r-- | src/config.l | 17 | ||||
-rw-r--r-- | src/config.xml | 17 | ||||
-rw-r--r-- | src/configoptions.cpp | 23 | ||||
-rw-r--r-- | src/docparser.h | 1 | ||||
-rw-r--r-- | src/doxygen.cpp | 6 | ||||
-rw-r--r-- | src/doxygen.css | 31 | ||||
-rw-r--r-- | src/doxygen_css.h | 31 | ||||
-rw-r--r-- | src/eclipsehelp.cpp | 200 | ||||
-rw-r--r-- | src/eclipsehelp.h | 78 | ||||
-rw-r--r-- | src/htmldocvisitor.cpp | 52 | ||||
-rw-r--r-- | src/index.cpp | 10 | ||||
-rw-r--r-- | src/libdoxygen.pro.in | 2 | ||||
-rw-r--r-- | src/pagedef.cpp | 3 | ||||
-rw-r--r-- | src/util.cpp | 15 | ||||
-rw-r--r-- | src/util.h | 1 | ||||
-rw-r--r-- | winbuild/Doxygen.vcproj | 8 |
24 files changed, 598 insertions, 119 deletions
@@ -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) @@ -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) @@ -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'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; +} @@ -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> |