Commit 712ab49d authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.7.3-20110217

parent eba15fd2
...@@ -168,7 +168,7 @@ DOCSET_FEEDNAME = "Doxygen docs" ...@@ -168,7 +168,7 @@ DOCSET_FEEDNAME = "Doxygen docs"
DOCSET_BUNDLE_ID = org.doxygen.Doxygen DOCSET_BUNDLE_ID = org.doxygen.Doxygen
DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_ID = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME = Publisher DOCSET_PUBLISHER_NAME = Publisher
GENERATE_HTMLHELP = YES GENERATE_HTMLHELP = NO
CHM_FILE = CHM_FILE =
HHC_LOCATION = HHC_LOCATION =
GENERATE_CHI = NO GENERATE_CHI = NO
......
DOXYGEN Version 1.7.3-20110123 DOXYGEN Version 1.7.3-20110217
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (23 January 2011) Dimitri van Heesch (17 February 2011)
DOXYGEN Version 1.7.3_20110123 DOXYGEN Version 1.7.3_20110217
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -26,4 +26,4 @@ forum. ...@@ -26,4 +26,4 @@ forum.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (23 January 2011) Dimitri van Heesch (dimitri@stack.nl) (17 February 2011)
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include "input.h" #include "input.h"
#include "doxywizard.h" #include "doxywizard.h"
#include <math.h>
#include <QtGui> #include <QtGui>
// options configurable via the wizard // options configurable via the wizard
......
...@@ -20,7 +20,7 @@ doxygen_version_minor=7 ...@@ -20,7 +20,7 @@ doxygen_version_minor=7
doxygen_version_revision=3 doxygen_version_revision=3
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20110123 doxygen_version_mmn=20110217
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -161,6 +161,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -161,6 +161,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_html_colorstyle_hue HTML_COLORSTYLE_HUE \refitem cfg_html_colorstyle_hue HTML_COLORSTYLE_HUE
\refitem cfg_html_colorstyle_sat HTML_COLORSTYLE_SAT \refitem cfg_html_colorstyle_sat HTML_COLORSTYLE_SAT
\refitem cfg_html_dynamic_sections HTML_DYNAMIC_SECTIONS \refitem cfg_html_dynamic_sections HTML_DYNAMIC_SECTIONS
\refitem cfg_html_extra_files HTML_EXTRA_FILES
\refitem cfg_html_file_extension HTML_FILE_EXTENSION \refitem cfg_html_file_extension HTML_FILE_EXTENSION
\refitem cfg_html_footer HTML_FOOTER \refitem cfg_html_footer HTML_FOOTER
\refitem cfg_html_header HTML_HEADER \refitem cfg_html_header HTML_HEADER
...@@ -185,6 +186,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -185,6 +186,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_javadoc_autobrief JAVADOC_AUTOBRIEF \refitem cfg_javadoc_autobrief JAVADOC_AUTOBRIEF
\refitem cfg_latex_batchmode LATEX_BATCHMODE \refitem cfg_latex_batchmode LATEX_BATCHMODE
\refitem cfg_latex_cmd_name LATEX_CMD_NAME \refitem cfg_latex_cmd_name LATEX_CMD_NAME
\refitem cfg_latex_footer LATEX_FOOTER
\refitem cfg_latex_header LATEX_HEADER \refitem cfg_latex_header LATEX_HEADER
\refitem cfg_latex_hide_indices LATEX_HIDE_INDICES \refitem cfg_latex_hide_indices LATEX_HIDE_INDICES
\refitem cfg_latex_output LATEX_OUTPUT \refitem cfg_latex_output LATEX_OUTPUT
...@@ -1280,21 +1282,18 @@ AClass::ANamespace, ANamespace::*Test ...@@ -1280,21 +1282,18 @@ AClass::ANamespace, ANamespace::*Test
<dt>\c HTML_HEADER <dd> <dt>\c HTML_HEADER <dd>
\addindex HTML_HEADER \addindex HTML_HEADER
The \c HTML_HEADER tag can be used to specify a user-defined HTML The \c HTML_HEADER tag can be used to specify a user-defined HTML
header file for each generated HTML page. To get valid HTML the header file header file for each generated HTML page.
should contain at least a \c \<HTML\> and a \c \<BODY\> tag, but it is
good idea to include the style sheet that is generated by doxygen as well.
Minimal example:
\verbatim
<HTML>
<HEAD>
<TITLE>My title</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
\endverbatim
If the tag is left blank doxygen will generate a If the tag is left blank doxygen will generate a
standard header. standard header.
To get valid HTML the header file that
includes any scripts and style sheets that doxygen
needs, it is highly recommended to start with a default header using
\verbatim
doxygen -w html new_header.html new_footer.html new_stylesheet.css YourConfigFile
\endverbatim
and then modify the file \c new_header.html.
The following markers have a special meaning inside the header and footer: The following markers have a special meaning inside the header and footer:
<dl> <dl>
<dt><code>\$title</code><dd>will be replaced with the title of the page. <dt><code>\$title</code><dd>will be replaced with the title of the page.
...@@ -1303,55 +1302,83 @@ AClass::ANamespace, ANamespace::*Test ...@@ -1303,55 +1302,83 @@ AClass::ANamespace, ANamespace::*Test
<dt><code>\$year</code><dd>will be replaces with the current year. <dt><code>\$year</code><dd>will be replaces with the current year.
<dt><code>\$doxygenversion</code><dd>will be replaced with the version of doxygen <dt><code>\$doxygenversion</code><dd>will be replaced with the version of doxygen
<dt><code>\$projectname</code><dd>will be replaced with the name of <dt><code>\$projectname</code><dd>will be replaced with the name of
the project (see \c PROJECT_NAME) the project (see \ref cfg_project_name "PROJECT_NAME")
<dt><code>\$projectnumber</code><dd>will be replaced with the project number <dt><code>\$projectnumber</code><dd>will be replaced with the project number
(see \c PROJECT_NUMBER) (see \ref cfg_project_number "PROJECT_NUMBER")
<dt><code>\$projectbrief</code><dd>will be replaced with the project brief <dt><code>\$projectbrief</code><dd>will be replaced with the project brief
description (see \c PROJECT_BRIEF) description (see \ref cfg_project_brief "PROJECT_BRIEF")
<dt><code>\$projectlogo</code><dd>will be replaced with the project logo <dt><code>\$projectlogo</code><dd>will be replaced with the project logo
(see \c PROJECT_LOGO) (see \ref cfg_project_logo "PROJECT_LOGO")
<dt><code>\$treeview</code><dd>will be replaced with links to
the javascript and style sheets needed for the navigation tree
(or an empty string when \ref cfg_generate_treeview "GENERATE_TREEVIEW"
is disabled).
<dt><code>\$search</code><dd>will be replaced with a links to
the javascript and style sheets needed for the search engine
(or an empty string when \ref cfg_searchengine "SEARCHENGINE"
is disabled).
<dt><code>\$mathjax</code><dd>will be replaced with a links to
the javascript and style sheets needed for the MathJax feature
(or an empty string when \ref cfg_use_mathjax "USE_MATHJAX" is disabled).
<dt><code>\$relpath\$</code><dd> <dt><code>\$relpath\$</code><dd>
If \c CREATE_SUBDIRS is enabled, the command <code>\$relpath\$</code> can be If \c CREATE_SUBDIRS is enabled, the command <code>\$relpath\$</code> can be
used to produce a relative path to the root of the HTML output directory, used to produce a relative path to the root of the HTML output directory,
e.g. use \$relpath\$doxygen.css, to refer to the standard style sheet. e.g. use \$relpath\$doxygen.css, to refer to the standard style sheet.
</dl> </dl>
See also section \ref doxygen_usage for information on how to generate
the default header that doxygen normally uses.
@note When using a custom header you are responsible To cope with differences in the layout of the header and footer that depend on
for the proper inclusion of any scripts and style sheets that doxygen configuration settings, the header can also contain special blocks that
needs, which is dependent on the configuration options used. will be copied to the output or skipped depending on the configuration.
It is adviced to generate a default header using Such blocks have the following form:
\verbatim \verbatim
doxygen -w html header.html footer.html stylesheet.css YourConfigFile <!--BEGIN BLOCKNAME-->
Some context copied when condition BLOCKNAME holds
<!--END BLOCKNAME-->
<!--BEGIN !BLOCKNAME-->
Some context copied when condition BLOCKNAME does not hold
<!--END !BLOCKNAME-->
\endverbatim \endverbatim
and then modify that header. The following block names are supported:
<dl>
<dt><code>DISABLE_INDEX</code><dd>Content within this block is copied to the output
when the \ref cfg_disable_index "DISABLE_INDEX" option is enabled (so when the index is disabled).
<dt><code>GENERATE_TREEVIEW</code><dd>Content within this block is copied to the output
when the \ref cfg_generate_treeview "GENERATE_TREEVIEW" option is enabled.
<dt><code>SEARCHENGINE</code><dd>Content within this block is copied to the output
when the \ref cfg_searchengine "SEARCHENGINE" option is enabled.
<dt><code>PROJECT_NAME</code><dd>Content within the block is copied to the output
when the \ref cfg_project_name "PROJECT_NAME" option is not empty.
<dt><code>PROJECT_NUMBER</code><dd>Content within the block is copied to the output
when the \ref cfg_project_number "PROJECT_NUMBER" option is not empty.
<dt><code>PROJECT_BRIEF</code><dd>Content within the block is copied to the output
when the \ref cfg_project_brief "PROJECT_BRIEF" option is not empty.
<dt><code>PROJECT_LOGO</code><dd>Content within the block is copied to the output
when the \ref cfg_project_logo "PROJECT_LOGO" option is not empty.
<dt><code>TITLEAREA</code><dd>Content within this block is copied to the output
when a title is visible at the top of each page. This is the case
if either \ref cfg_project_name "PROJECT_NAME",
\ref cfg_project_brief "PROJECT_BRIEF", \ref cfg_project_logo "PROJECT_LOGO"
is filled in or if both \ref cfg_disable_index "DISABLE_INDEX" and
\ref cfg_searchengine "SEARCHENGINE" are enabled.
</dl>
See also section \ref doxygen_usage for information on how to generate
the default header that doxygen normally uses.
@note The header is subject to change so you typically @note The header is subject to change so you typically
have to redo this when upgrading to a newer version of doxygen or when have to regenerate the default header when upgrading to a newer version of
changing the value of configuration settings such as \c GENERATE_TREEVIEW! doxygen.
\anchor cfg_html_footer \anchor cfg_html_footer
<dt>\c HTML_FOOTER <dd> <dt>\c HTML_FOOTER <dd>
\addindex HTML_FOOTER \addindex HTML_FOOTER
The \c HTML_FOOTER tag can be used to specify a user-defined HTML footer for The \c HTML_FOOTER tag can be used to specify a user-defined HTML footer for
each generated HTML page. To get valid HTML the footer file should contain each generated HTML page.
at least a \c \</BODY\> and a \c \</HTML\> tag. A minimal example:
\verbatim
</BODY>
</HTML>
\endverbatim
If the tag is left blank doxygen will generate a standard footer. If the tag is left blank doxygen will generate a standard footer.
The following commands have a special meaning inside the footer: See \ref cfg_html_header "HTML_HEADER" for more information on
<code>\$title</code>, <code>\$datetime</code>, <code>\$date</code>, how to generate a default footer and what special commands can be
<code>\$doxygenversion</code>, <code>\$projectname</code>, used inside the footer.
<code>\$projectnumber</code>.
Doxygen will replace them by respectively
the title of the page, the current date and time, only the current date,
the version number of doxygen, the project name (see \c PROJECT_NAME), or the
project number (see \c PROJECT_NUMBER).
See also section \ref doxygen_usage for information on how to generate See also section \ref doxygen_usage for information on how to generate
the default footer that doxygen normally uses. the default footer that doxygen normally uses.
...@@ -1367,6 +1394,16 @@ doxygen -w html header.html footer.html stylesheet.css YourConfigFile ...@@ -1367,6 +1394,16 @@ doxygen -w html header.html footer.html stylesheet.css YourConfigFile
See also section \ref doxygen_usage for information on how to generate See also section \ref doxygen_usage for information on how to generate
the style sheet that doxygen normally uses. the style sheet that doxygen normally uses.
\anchor cfg_html_extra_files
<dt>\c HTML_EXTRA_FILES <dd>
\addindex HTML_EXTRA_FILES
The \c HTML_EXTRA_FILES tag can be used to specify one or more extra images or
other source files which should be copied to the HTML output directory. Note
that these files will be copied to the base HTML output directory. Use the
$relpath$ marker in the \c HTML_HEADER and/or \c HTML_FOOTER files to load these
files. In the \c HTML_STYLESHEET file, use the file name only. Also note that
the files will be copied as-is; there are no commands or markers available.
\anchor cfg_html_colorstyle_hue \anchor cfg_html_colorstyle_hue
<dt>\c HTML_COLORSTYLE_HUE <dd> <dt>\c HTML_COLORSTYLE_HUE <dd>
\addindex HTML_COLOR_STYLE_HUE \addindex HTML_COLOR_STYLE_HUE
...@@ -1821,6 +1858,14 @@ EXTRA_PACKAGES = times ...@@ -1821,6 +1858,14 @@ EXTRA_PACKAGES = times
the title of the page, the current date and time, only the current date, the title of the page, the current date and time, only the current date,
the version number of doxygen, the project name (see \c PROJECT_NAME), or the the version number of doxygen, the project name (see \c PROJECT_NAME), or the
project number (see \c PROJECT_NUMBER). project number (see \c PROJECT_NUMBER).
\anchor cfg_latex_footer
<dt>\c LATEX_FOOTER <dd>
\addindex LATEX_FOOTER
The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
the generated latex document. The footer should contain everything after
the last chapter. If it is left blank doxygen will generate a
standard footer. Notice: only use this tag if you know what you are doing!
\anchor cfg_pdf_hyperlinks \anchor cfg_pdf_hyperlinks
<dt>\c PDF_HYPERLINKS <dd> <dt>\c PDF_HYPERLINKS <dd>
......
...@@ -31,7 +31,7 @@ doxygen \fB\-w\fR rtf styleSheetFile ...@@ -31,7 +31,7 @@ doxygen \fB\-w\fR rtf styleSheetFile
HTML: HTML:
doxygen \fB\-w\fR html headerFile footerFile styleSheetFile [configFile] doxygen \fB\-w\fR html headerFile footerFile styleSheetFile [configFile]
.TP .TP
LaTeX: doxygen \fB\-w\fR latex headerFile styleSheetFile [configFile] LaTeX: doxygen \fB\-w\fR latex headerFile footerFile styleSheetFile [configFile]
.TP .TP
5) Use doxygen to generate an rtf extensions file 5) Use doxygen to generate an rtf extensions file
.TP .TP
......
...@@ -164,7 +164,7 @@ when the translator was updated. ...@@ -164,7 +164,7 @@ when the translator was updated.
<td>Italian</td> <td>Italian</td>
<td>Alessandro Falappa<br/>Ahmed Aldo Faisal</td> <td>Alessandro Falappa<br/>Ahmed Aldo Faisal</td>
<td>alessandro at falappa dot net<br/>aaf23 at cam dot ac dot uk</td> <td>alessandro at falappa dot net<br/>aaf23 at cam dot ac dot uk</td>
<td>1.6.0</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Japanese</td> <td>Japanese</td>
...@@ -351,7 +351,7 @@ when the translator was updated. ...@@ -351,7 +351,7 @@ when the translator was updated.
\hline \hline
Indonesian & Hendy Irawan & {\tt\tiny ceefour at gauldong dot net} & 1.4.6 \\ Indonesian & Hendy Irawan & {\tt\tiny ceefour at gauldong dot net} & 1.4.6 \\
\hline \hline
Italian & Alessandro Falappa & {\tt\tiny alessandro at falappa dot net} & 1.6.0 \\ Italian & Alessandro Falappa & {\tt\tiny alessandro at falappa dot net} & up-to-date \\
~ & Ahmed Aldo Faisal & {\tt\tiny aaf23 at cam dot ac dot uk} & ~ \\ ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23 at cam dot ac dot uk} & ~ \\
\hline \hline
Japanese & Hiroki Iseri & {\tt\tiny goyoki at gmail dot com} & 1.6.0 \\ Japanese & Hiroki Iseri & {\tt\tiny goyoki at gmail dot com} & 1.6.0 \\
......
...@@ -10,7 +10,7 @@ Persian, Polish, Portuguese, Romanian, Russian, Serbian, ...@@ -10,7 +10,7 @@ Persian, Polish, Portuguese, Romanian, Russian, Serbian,
SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian, SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
and Vietnamese. and Vietnamese.
Of them, 14 translators are up-to-date, 24 translators are based on Of them, 15 translators are up-to-date, 23 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -28,6 +28,7 @@ still may be some details listed even for them: ...@@ -28,6 +28,7 @@ still may be some details listed even for them:
TranslatorEnglish TranslatorEnglish
TranslatorEsperanto TranslatorEsperanto
TranslatorGreek TranslatorGreek
TranslatorItalian
TranslatorKorean -- Change the base class to Translator. TranslatorKorean -- Change the base class to Translator.
TranslatorPersian -- The MAX_DOT_GRAPH_HEIGHT found in trLegendDocs() TranslatorPersian -- The MAX_DOT_GRAPH_HEIGHT found in trLegendDocs()
TranslatorSlovak TranslatorSlovak
...@@ -64,7 +65,6 @@ must be implemented to become up-to-date: ...@@ -64,7 +65,6 @@ must be implemented to become up-to-date:
TranslatorJapanese 1.6.0 9 methods to implement (4 %) TranslatorJapanese 1.6.0 9 methods to implement (4 %)
Note: Reimplementation using UTF-8 suggested. Note: Reimplementation using UTF-8 suggested.
TranslatorItalian 1.6.0 9 methods to implement (4 %)
TranslatorFinnish 1.6.0 9 methods to implement (4 %) TranslatorFinnish 1.6.0 9 methods to implement (4 %)
TranslatorChinesetraditional 1.6.0 9 methods to implement (4 %) TranslatorChinesetraditional 1.6.0 9 methods to implement (4 %)
Note: Reimplementation using UTF-8 suggested. Note: Reimplementation using UTF-8 suggested.
...@@ -379,24 +379,6 @@ TranslatorIndonesian (TranslatorAdapter_1_4_6) 32 methods to implement (14 %) ...@@ -379,24 +379,6 @@ TranslatorIndonesian (TranslatorAdapter_1_4_6) 32 methods to implement (14 %)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorItalian (TranslatorAdapter_1_6_0) 9 methods to implement (4 %)
-----------------
Implements 216 of the required methods (96 %).
Missing methods (should be implemented):
virtual QCString trSearching()
virtual QCString trNoMatches()
virtual QCString trLoading()
virtual QCString trDateTime(int year, int month, int day, int dayOfWeek, int hour, int minutes, int seconds, bool includeTime)
virtual QCString trFileIn(const char * name)
virtual QCString trGlobalNamespace()
virtual QCString trDirRelation(const char * name)
virtual QCString trDirDependency(const char * name)
virtual QCString trIncludesFileIn(const char * name)
TranslatorJapanese (TranslatorAdapter_1_6_0) 9 methods to implement (4 %) TranslatorJapanese (TranslatorAdapter_1_6_0) 9 methods to implement (4 %)
------------------ ------------------
......
...@@ -171,7 +171,7 @@ FORMULA_TRANSPARENT = YES ...@@ -171,7 +171,7 @@ FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO USE_MATHJAX = NO
MATHJAX_RELPATH = http://www.mathjax.org/mathjax MATHJAX_RELPATH = http://www.mathjax.org/mathjax
SEARCHENGINE = YES SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO SERVER_BASED_SEARCH = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the LaTeX output # configuration options related to the LaTeX output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
......
...@@ -141,15 +141,16 @@ SCString &SCString::sprintf( const char *format, ... ) ...@@ -141,15 +141,16 @@ SCString &SCString::sprintf( const char *format, ... )
va_list ap; va_list ap;
va_start( ap, format ); va_start( ap, format );
uint l = length(); uint l = length();
const uint minlen=256; const uint minlen=4095;
if (l<minlen) if (l<minlen)
{ {
if (m_data) if (m_data)
m_data = (char *)realloc(m_data,minlen); m_data = (char *)realloc(m_data,minlen+1);
else else
m_data = (char *)malloc(minlen); m_data = (char *)malloc(minlen+1);
m_data[minlen]='\0';
} }
vsprintf( m_data, format, ap ); vsnprintf( m_data, minlen, format, ap );
resize( qstrlen(m_data) + 1 ); // truncate resize( qstrlen(m_data) + 1 ); // truncate
va_end( ap ); va_end( ap );
return *this; return *this;
......
...@@ -1889,16 +1889,15 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -1889,16 +1889,15 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
//FileInfo *f; //FileInfo *f;
bool ambig; bool ambig;
bool found=FALSE; bool found=FALSE;
FileDef *fd=0; //QCString absPath = yytext;
QCString absPath = yytext; //if (g_sourceFileDef && QDir::isRelativePath(absPath))
if (g_sourceFileDef && QDir::isRelativePath(absPath)) //{
{ // absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath);
absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath); //}
}
//printf("looking for include %s -> %s\n",yytext,absPath.data()); FileDef *fd=findFileDef(Doxygen::inputNameDict,yytext,ambig);
if ((fd=findFileDef(Doxygen::inputNameDict,absPath,ambig)) && //printf("looking for include %s -> %s fd=%p\n",yytext,absPath.data(),fd);
fd->isLinkable()) if (fd && fd->isLinkable())
{ {
if (ambig) // multiple input files match the name if (ambig) // multiple input files match the name
{ {
...@@ -1925,9 +1924,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -1925,9 +1924,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
found = TRUE; found = TRUE;
} }
} }
//printf(" include file %s found=%d\n",fd ? fd->absFilePath().data() : "<none>",found);
if (found) if (found)
{ {
//printf(" include file %s found=%d\n",fd->absFilePath().data(),found);
g_code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext,fd->briefDescriptionAsTooltip()); g_code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext,fd->briefDescriptionAsTooltip());
} }
else else
......
...@@ -2381,7 +2381,8 @@ static bool handleInternal(const QCString &) ...@@ -2381,7 +2381,8 @@ static bool handleInternal(const QCString &)
} }
else else
{ {
//addOutput("\\internal "); // re-enabled for bug640828
addOutput("\\internal ");
} }
return FALSE; return FALSE;
} }
......
...@@ -804,6 +804,14 @@ will generate a default style sheet. Note that doxygen will try to copy ...@@ -804,6 +804,14 @@ will generate a default style sheet. Note that doxygen will try to copy
the style sheet file to the HTML output directory, so don&apos;t put your own the style sheet file to the HTML output directory, so don&apos;t put your own
stylesheet in the HTML output directory as well, or it will be erased! stylesheet in the HTML output directory as well, or it will be erased!
' defval='' depends='GENERATE_HTML'/> ' defval='' depends='GENERATE_HTML'/>
<option type='list' id='HTML_EXTRA_FILES' format='file' docs='
The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
other source files which should be copied to the HTML output directory. Note
that these files will be copied to the base HTML output directory. Use the
$relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
files. In the HTML_STYLESHEET file, use the file name only. Also note that
the files will be copied as-is; there are no commands or markers available.
' depends='GENERATE_HTML'/>
<option type='int' id='HTML_COLORSTYLE_HUE' docs=' <option type='int' id='HTML_COLORSTYLE_HUE' docs='
The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
Doxygen will adjust the colors in the stylesheet and background images Doxygen will adjust the colors in the stylesheet and background images
...@@ -1104,6 +1112,12 @@ The LATEX_HEADER tag can be used to specify a personal LaTeX header for ...@@ -1104,6 +1112,12 @@ The LATEX_HEADER tag can be used to specify a personal LaTeX header for
the generated latex document. The header should contain everything until the generated latex document. The header should contain everything until
the first chapter. If it is left blank doxygen will generate a the first chapter. If it is left blank doxygen will generate a
standard header. Notice: only use this tag if you know what you are doing! standard header. Notice: only use this tag if you know what you are doing!
' defval='' depends='GENERATE_LATEX'/>
<option type='string' id='LATEX_FOOTER' format='file' docs='
The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
the generated latex document. The footer should contain everything after
the last chapter. If it is left blank doxygen will generate a
standard footer. Notice: only use this tag if you know what you are doing!
' defval='' depends='GENERATE_LATEX'/> ' defval='' depends='GENERATE_LATEX'/>
<option type='bool' id='PDF_HYPERLINKS' docs=' <option type='bool' id='PDF_HYPERLINKS' docs='
If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
......
...@@ -1151,6 +1151,18 @@ void addConfigOptions(Config *cfg) ...@@ -1151,6 +1151,18 @@ void addConfigOptions(Config *cfg)
cs->setWidgetType(ConfigString::File); cs->setWidgetType(ConfigString::File);
cs->addDependency("GENERATE_HTML"); cs->addDependency("GENERATE_HTML");
//---- //----
cl = cfg->addList(
"HTML_EXTRA_FILES",
"The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n"
"other source files which should be copied to the HTML output directory. Note\n"
"that these files will be copied to the base HTML output directory. Use the\n"
"$relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n"
"files. In the HTML_STYLESHEET file, use the file name only. Also note that\n"
"the files will be copied as-is; there are no commands or markers available."
);
cl->addDependency("GENERATE_HTML");
cl->setWidgetType(ConfigList::File);
//----
ci = cfg->addInt( ci = cfg->addInt(
"HTML_COLORSTYLE_HUE", "HTML_COLORSTYLE_HUE",
"The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.\n" "The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.\n"
...@@ -1638,6 +1650,16 @@ void addConfigOptions(Config *cfg) ...@@ -1638,6 +1650,16 @@ void addConfigOptions(Config *cfg)
cs->setWidgetType(ConfigString::File); cs->setWidgetType(ConfigString::File);
cs->addDependency("GENERATE_LATEX"); cs->addDependency("GENERATE_LATEX");
//---- //----
cs = cfg->addString(
"LATEX_FOOTER",
"The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for\n"
"the generated latex document. The footer should contain everything after\n"
"the last chapter. If it is left blank doxygen will generate a\n"
"standard footer. Notice: only use this tag if you know what you are doing!"
);
cs->setWidgetType(ConfigString::File);
cs->addDependency("GENERATE_LATEX");
//----
cb = cfg->addBool( cb = cfg->addBool(
"PDF_HYPERLINKS", "PDF_HYPERLINKS",
"If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated\n" "If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated\n"
......
...@@ -5424,7 +5424,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta ...@@ -5424,7 +5424,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
g_hasReturnCommand=TRUE; g_hasReturnCommand=TRUE;
break; break;
case XML_TERM: case XML_TERM:
m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,TRUE)); //m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,TRUE));
if (insideTable(this)) if (insideTable(this))
{ {
retval=RetVal_TableCell; retval=RetVal_TableCell;
...@@ -5506,19 +5506,19 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta ...@@ -5506,19 +5506,19 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
QCString type; QCString type;
findAttribute(tagHtmlAttribs,"type",&type); findAttribute(tagHtmlAttribs,"type",&type);
DocHtmlList::Type listType = DocHtmlList::Unordered; DocHtmlList::Type listType = DocHtmlList::Unordered;
HtmlAttribList emptyList;
if (type=="number") if (type=="number")
{ {
listType=DocHtmlList::Ordered; listType=DocHtmlList::Ordered;
} }
if (type=="table") if (type=="table")
{ {
DocHtmlTable *table = new DocHtmlTable(this,tagHtmlAttribs); DocHtmlTable *table = new DocHtmlTable(this,emptyList);
m_children.append(table); m_children.append(table);
retval=table->parseXml(); retval=table->parseXml();
} }
else else
{ {
HtmlAttribList emptyList;
DocHtmlList *list = new DocHtmlList(this,emptyList,listType); DocHtmlList *list = new DocHtmlList(this,emptyList,listType);
m_children.append(list); m_children.append(list);
retval=list->parseXml(); retval=list->parseXml();
...@@ -5671,7 +5671,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName) ...@@ -5671,7 +5671,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
break; break;
case XML_TERM: case XML_TERM:
m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,FALSE)); //m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,FALSE));
break; break;
case XML_SUMMARY: case XML_SUMMARY:
case XML_REMARKS: case XML_REMARKS:
......
...@@ -451,7 +451,7 @@ class DocFormula : public DocNode ...@@ -451,7 +451,7 @@ class DocFormula : public DocNode
QCString relPath() const { return m_relPath; } QCString relPath() const { return m_relPath; }
int id() const { return m_id; } int id() const { return m_id; }
void accept(DocVisitor *v) { v->visit(this); } void accept(DocVisitor *v) { v->visit(this); }
bool isInline() { return text().at(0)!='\\'; } bool isInline() { return m_text.length()>0 ? m_text.at(0)!='\\' : TRUE; }
private: private:
QCString m_name; QCString m_name;
......
...@@ -334,9 +334,10 @@ CVSPEC {BLANK}*("const"|"volatile") ...@@ -334,9 +334,10 @@ CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}? LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+ LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+
CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."] CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."]
WORD1 "%"?{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"") ESCWORD "%"{ID}(("::"|"."){ID})*
WORD1 {ESCWORD}|{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"")
WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?" WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"
WORD1NQ "%"?{CHARWORDQ}+ WORD1NQ {ESCWORD}|{CHARWORDQ}+
WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?" WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"
HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">" HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p" HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
......
...@@ -3523,6 +3523,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, ...@@ -3523,6 +3523,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
* \param inFile just the basename part of the filename * \param inFile just the basename part of the filename
* \param outDir output directory * \param outDir output directory
* \param relPath relative path the to root of the output dir * \param relPath relative path the to root of the output dir
* \param baseName the base name of the output files
* \param context the scope in which this graph is found (for resolving links) * \param context the scope in which this graph is found (for resolving links)
*/ */
void writeDotImageMapFromFile(FTextStream &t, void writeDotImageMapFromFile(FTextStream &t,
......
...@@ -4694,7 +4694,7 @@ static void addListReferences() ...@@ -4694,7 +4694,7 @@ static void addListReferences()
PageDef *pd=0; PageDef *pd=0;
for (pdi.toFirst();(pd=pdi.current());++pdi) for (pdi.toFirst();(pd=pdi.current());++pdi)
{ {
QCString name = pd->name(); QCString name = pd->getOutputFileBase();
if (pd->getGroupDef()) if (pd->getGroupDef())
{ {
name = pd->getGroupDef()->getOutputFileBase(); name = pd->getGroupDef()->getOutputFileBase();
...@@ -8619,6 +8619,30 @@ static void copyLogo() ...@@ -8619,6 +8619,30 @@ static void copyLogo()
} }
} }
static void copyExtraFiles()
{
QStrList files = Config_getList("HTML_EXTRA_FILES");
uint i;
for (i=0; i<files.count(); ++i)
{
QCString fileName(files.at(i));
if (!fileName.isEmpty())
{
QFileInfo fi(fileName);
if (!fi.exists())
{
err("Extra HTML file '%s' specified in HTML_EXTRA_FILES does not exist!\n", fileName.data());
}
else
{
QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
Doxygen::indexList.addImageFile(fi.fileName().data());
copyFile(fileName, destFileName);
}
}
}
}
//! parse the list of input files //! parse the list of input files
static void parseFiles(Entry *root,EntryNav *rootNav) static void parseFiles(Entry *root,EntryNav *rootNav)
...@@ -9151,7 +9175,7 @@ static void usage(const char *name) ...@@ -9151,7 +9175,7 @@ static void usage(const char *name)
msg("5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n"); msg("5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
msg(" RTF: %s -w rtf styleSheetFile\n",name); msg(" RTF: %s -w rtf styleSheetFile\n",name);
msg(" HTML: %s -w html headerFile footerFile styleSheetFile [configFile]\n",name); msg(" HTML: %s -w html headerFile footerFile styleSheetFile [configFile]\n",name);
msg(" LaTeX: %s -w latex headerFile styleSheetFile [configFile]\n\n",name); msg(" LaTeX: %s -w latex headerFile footerFile styleSheetFile [configFile]\n\n",name);
msg("6) Use doxygen to generate an rtf extensions file\n"); msg("6) Use doxygen to generate an rtf extensions file\n");
msg(" RTF: %s -e rtf extensionsFile\n\n",name); msg(" RTF: %s -e rtf extensionsFile\n\n",name);
msg("If -s is specified the comments in the config file will be omitted.\n"); msg("If -s is specified the comments in the config file will be omitted.\n");
...@@ -9430,7 +9454,7 @@ void readConfiguration(int argc, char **argv) ...@@ -9430,7 +9454,7 @@ void readConfiguration(int argc, char **argv)
QFile f; QFile f;
if (openOutputFile(argv[optind+1],f)) if (openOutputFile(argv[optind+1],f))
{ {
HtmlGenerator::writeHeaderFile(f); HtmlGenerator::writeHeaderFile(f, argv[optind+3]);
} }
f.close(); f.close();
if (openOutputFile(argv[optind+2],f)) if (openOutputFile(argv[optind+2],f))
...@@ -9447,11 +9471,11 @@ void readConfiguration(int argc, char **argv) ...@@ -9447,11 +9471,11 @@ void readConfiguration(int argc, char **argv)
} }
else if (stricmp(formatName,"latex")==0) else if (stricmp(formatName,"latex")==0)
{ {
if (optind+3<argc) // use config file to get settings if (optind+4<argc) // use config file to get settings
{ {
if (!Config::instance()->parse(argv[optind+3])) if (!Config::instance()->parse(argv[optind+4]))
{ {
err("error opening or reading configuration file %s!\n",argv[optind+3]); err("error opening or reading configuration file %s!\n",argv[optind+4]);
exit(1); exit(1);
} }
Config::instance()->substituteEnvironmentVars(); Config::instance()->substituteEnvironmentVars();
...@@ -9463,7 +9487,7 @@ void readConfiguration(int argc, char **argv) ...@@ -9463,7 +9487,7 @@ void readConfiguration(int argc, char **argv)
{ {
Config::instance()->init(); Config::instance()->init();
} }
if (optind+2>=argc) if (optind+3>=argc)
{ {
err("error: option \"-w latex\" does not have enough arguments\n"); err("error: option \"-w latex\" does not have enough arguments\n");
cleanUpDoxygen(); cleanUpDoxygen();
...@@ -9483,6 +9507,11 @@ void readConfiguration(int argc, char **argv) ...@@ -9483,6 +9507,11 @@ void readConfiguration(int argc, char **argv)
} }
f.close(); f.close();
if (openOutputFile(argv[optind+2],f)) if (openOutputFile(argv[optind+2],f))
{
LatexGenerator::writeFooterFile(f);
}
f.close();
if (openOutputFile(argv[optind+3],f))
{ {
LatexGenerator::writeStyleSheetFile(f); LatexGenerator::writeStyleSheetFile(f);
} }
...@@ -10380,6 +10409,7 @@ void generateOutput() ...@@ -10380,6 +10409,7 @@ void generateOutput()
//if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages(); //if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages();
copyStyleSheet(); copyStyleSheet();
copyLogo(); copyLogo();
copyExtraFiles();
if (!generateTreeView && Config_getBool("USE_INLINE_TREES")) if (!generateTreeView && Config_getBool("USE_INLINE_TREES"))
{ {
FTVHelp::generateTreeViewImages(); FTVHelp::generateTreeViewImages();
......
...@@ -771,21 +771,21 @@ dl.bug ...@@ -771,21 +771,21 @@ dl.bug
#projectname #projectname
{ {
font: 300% arial,sans-serif; font: 300% Tahoma, Arial,sans-serif;
margin: 0px; margin: 0px;
padding: 0px; padding: 2px 0px;
} }
#projectbrief #projectbrief
{ {
font: 120% arial,sans-serif; font: 120% Tahoma, Arial,sans-serif;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
} }
#projectnumber #projectnumber
{ {
font: 50% arial,sans-serif; font: 50% Tahoma, Arial,sans-serif;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
} }
......
...@@ -771,21 +771,21 @@ ...@@ -771,21 +771,21 @@
" \n" " \n"
"#projectname\n" "#projectname\n"
"{\n" "{\n"
" font: 300% arial,sans-serif;\n" " font: 300% Tahoma, Arial,sans-serif;\n"
" margin: 0px;\n" " margin: 0px;\n"
" padding: 0px;\n" " padding: 2px 0px;\n"
"}\n" "}\n"
" \n" " \n"
"#projectbrief\n" "#projectbrief\n"
"{\n" "{\n"
" font: 120% arial,sans-serif;\n" " font: 120% Tahoma, Arial,sans-serif;\n"
" margin: 0px;\n" " margin: 0px;\n"
" padding: 0px;\n" " padding: 0px;\n"
"}\n" "}\n"
"\n" "\n"
"#projectnumber\n" "#projectnumber\n"
"{\n" "{\n"
" font: 50% arial,sans-serif;\n" " font: 50% Tahoma, Arial,sans-serif;\n"
" margin: 0px;\n" " margin: 0px;\n"
" padding: 0px;\n" " padding: 0px;\n"
"}\n" "}\n"
......
...@@ -197,7 +197,7 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length); ...@@ -197,7 +197,7 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length);
static void truncatePrepass(int index); static void truncatePrepass(int index);
static void pushBuffer(QCString &buffer); static void pushBuffer(QCString &buffer);
static void popBuffer(); static void popBuffer();
static void extractPrefix(QCString& text); //static void extractPrefix(QCString& text);
static QCString extractFromParens(const QCString name); static QCString extractFromParens(const QCString name);
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
......
...@@ -43,6 +43,7 @@ static const char resize_script[]= ...@@ -43,6 +43,7 @@ static const char resize_script[]=
#include "resize_js.h" #include "resize_js.h"
; ;
#if 0
static const char jquery_script1[]= static const char jquery_script1[]=
#include "jquery_js.h" #include "jquery_js.h"
; ;
...@@ -52,6 +53,7 @@ static const char jquery_script2[]= ...@@ -52,6 +53,7 @@ static const char jquery_script2[]=
static const char jquery_script3[]= static const char jquery_script3[]=
#include "jquery_ui_js.h" #include "jquery_ui_js.h"
; ;
#endif
static const char navtree_css[]= static const char navtree_css[]=
#include "navtree_css.h" #include "navtree_css.h"
...@@ -936,13 +938,13 @@ void FTVHelp::generateJSLink(FTextStream &t,FTVNode *n) ...@@ -936,13 +938,13 @@ void FTVHelp::generateJSLink(FTextStream &t,FTVNode *n)
{ {
if (n->file.isEmpty()) // no link if (n->file.isEmpty()) // no link
{ {
t << "\"" << n->name << "\", null, "; t << "\"" << convertToJSString(n->name) << "\", null, ";
} }
else // link into other page else // link into other page
{ {
// TODO: external links with installdox // TODO: external links with installdox
// TODO: use m_topLevelIndex // TODO: use m_topLevelIndex
t << "\"" << n->name << "\", \""; t << "\"" << convertToJSString(n->name) << "\", \"";
t << externalRef("",n->ref,TRUE); t << externalRef("",n->ref,TRUE);
t << n->file << Doxygen::htmlFileExtension; t << n->file << Doxygen::htmlFileExtension;
if (!n->anchor.isEmpty()) t << "#" << n->anchor; if (!n->anchor.isEmpty()) t << "#" << n->anchor;
...@@ -1088,6 +1090,7 @@ void FTVHelp::generateTreeViewScripts() ...@@ -1088,6 +1090,7 @@ void FTVHelp::generateTreeViewScripts()
t << resize_script; t << resize_script;
} }
} }
#if 0
// generate jquery.js // generate jquery.js
{ {
QFile f(Config_getString("HTML_OUTPUT")+"/jquery.js"); QFile f(Config_getString("HTML_OUTPUT")+"/jquery.js");
...@@ -1097,6 +1100,7 @@ void FTVHelp::generateTreeViewScripts() ...@@ -1097,6 +1100,7 @@ void FTVHelp::generateTreeViewScripts()
t << jquery_script1 << jquery_script2 << jquery_script3; t << jquery_script1 << jquery_script2 << jquery_script3;
} }
} }
#endif
// generate navtree.css // generate navtree.css
{ {
QFile f(Config_getString("HTML_OUTPUT")+"/navtree.css"); QFile f(Config_getString("HTML_OUTPUT")+"/navtree.css");
......
...@@ -1138,17 +1138,17 @@ void HtmlDocVisitor::visitPost(DocHtmlCaption *) ...@@ -1138,17 +1138,17 @@ void HtmlDocVisitor::visitPost(DocHtmlCaption *)
m_t << "</caption>\n"; m_t << "</caption>\n";
} }
void HtmlDocVisitor::visitPre(DocInternal *i) void HtmlDocVisitor::visitPre(DocInternal *)
{ {
if (m_hide) return; if (m_hide) return;
forceEndParagraph(i); //forceEndParagraph(i);
m_t << "<p><b>" << theTranslator->trForInternalUseOnly() << "</b></p>" << endl; //m_t << "<p><b>" << theTranslator->trForInternalUseOnly() << "</b></p>" << endl;
} }
void HtmlDocVisitor::visitPost(DocInternal *i) void HtmlDocVisitor::visitPost(DocInternal *)
{ {
if (m_hide) return; if (m_hide) return;
forceStartParagraph(i); //forceStartParagraph(i);
} }
void HtmlDocVisitor::visitPre(DocHRef *href) void HtmlDocVisitor::visitPre(DocHRef *href)
......
This diff is collapsed.
...@@ -34,7 +34,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -34,7 +34,7 @@ class HtmlGenerator : public OutputGenerator
virtual ~HtmlGenerator(); virtual ~HtmlGenerator();
static void init(); static void init();
static void writeStyleSheetFile(QFile &f); static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f); static void writeHeaderFile(QFile &f, const char *cssname);
static void writeFooterFile(QFile &f); static void writeFooterFile(QFile &f);
static void writeTabData(); static void writeTabData();
static void writeSearchFooter(FTextStream &t,const QCString &relPath); static void writeSearchFooter(FTextStream &t,const QCString &relPath);
......
...@@ -492,6 +492,7 @@ void HtmlHelp::createProjectFile() ...@@ -492,6 +492,7 @@ void HtmlHelp::createProjectFile()
t << "nav_h.png" << endl; t << "nav_h.png" << endl;
t << "nav_f.png" << endl; t << "nav_f.png" << endl;
t << "bc_s.png" << endl; t << "bc_s.png" << endl;
#if 0
if (Config_getBool("HTML_DYNAMIC_SECTIONS")) if (Config_getBool("HTML_DYNAMIC_SECTIONS"))
{ {
t << "open.png" << endl; t << "open.png" << endl;
...@@ -527,6 +528,12 @@ void HtmlHelp::createProjectFile() ...@@ -527,6 +528,12 @@ void HtmlHelp::createProjectFile()
t << "close.png" << endl; t << "close.png" << endl;
} }
} }
#endif
uint i;
for (i=0;i<imageFiles.count();i++)
{
t << imageFiles.at(i) << endl;
}
f.close(); f.close();
} }
else else
...@@ -690,3 +697,8 @@ void HtmlHelp::addIndexItem(Definition *context,MemberDef *md, ...@@ -690,3 +697,8 @@ void HtmlHelp::addIndexItem(Definition *context,MemberDef *md,
} }
} }
void HtmlHelp::addImageFile(const char *fileName)
{
imageFiles.append(fileName);
}
...@@ -79,7 +79,7 @@ class HtmlHelp : public IndexIntf ...@@ -79,7 +79,7 @@ class HtmlHelp : public IndexIntf
// const char *anchor,const MemberDef *md); // const char *anchor,const MemberDef *md);
void addIndexItem(Definition *context,MemberDef *md,const char *title); void addIndexItem(Definition *context,MemberDef *md,const char *title);
void addIndexFile(const char *name); void addIndexFile(const char *name);
void addImageFile(const char *) {} void addImageFile(const char *);
void addStyleSheetFile(const char *) {} void addStyleSheetFile(const char *) {}
private: private:
...@@ -90,6 +90,7 @@ class HtmlHelp : public IndexIntf ...@@ -90,6 +90,7 @@ class HtmlHelp : public IndexIntf
HtmlHelpIndex *index; HtmlHelpIndex *index;
int dc; int dc;
QStrList indexFiles; QStrList indexFiles;
QStrList imageFiles;
QDict<void> indexFileDict; QDict<void> indexFileDict;
static HtmlHelp *theInstance; static HtmlHelp *theInstance;
QCString recode(const QCString &s); QCString recode(const QCString &s);
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "qtbc.h" #include "qtbc.h"
#include "image.h" #include "image.h"
//#include "gifenc.h"
#include <qfile.h> #include <qfile.h>
#include <math.h> #include <math.h>
#include "lodepng.h" #include "lodepng.h"
......
...@@ -894,15 +894,15 @@ void LatexDocVisitor::visitPost(DocHtmlCell *c) ...@@ -894,15 +894,15 @@ void LatexDocVisitor::visitPost(DocHtmlCell *c)
void LatexDocVisitor::visitPre(DocInternal *) void LatexDocVisitor::visitPre(DocInternal *)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "\\begin{DoxyInternal}{"; //m_t << "\\begin{DoxyInternal}{";
filter(theTranslator->trForInternalUseOnly()); //filter(theTranslator->trForInternalUseOnly());
m_t << "}\n"; //m_t << "}\n";
} }
void LatexDocVisitor::visitPost(DocInternal *) void LatexDocVisitor::visitPost(DocInternal *)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "\\end{DoxyInternal}" << endl; //m_t << "\\end{DoxyInternal}" << endl;
} }
void LatexDocVisitor::visitPre(DocHRef *href) void LatexDocVisitor::visitPre(DocHRef *href)
......
...@@ -257,6 +257,7 @@ static void writeDefaultHeaderPart1(FTextStream &t) ...@@ -257,6 +257,7 @@ static void writeDefaultHeaderPart1(FTextStream &t)
t << "\\makeindex\n" t << "\\makeindex\n"
"\\setcounter{tocdepth}{3}\n" "\\setcounter{tocdepth}{3}\n"
"\\renewcommand{\\footrulewidth}{0.4pt}\n" "\\renewcommand{\\footrulewidth}{0.4pt}\n"
"\\renewcommand{\\familydefault}{\\sfdefault}\n"
"\\begin{document}\n"; "\\begin{document}\n";
static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
...@@ -762,6 +763,12 @@ static void writeDefaultStyleSheetPart3(FTextStream &t) ...@@ -762,6 +763,12 @@ static void writeDefaultStyleSheetPart3(FTextStream &t)
t << "\\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}\n"; t << "\\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}\n";
} }
static void writeDefaultFooter(FTextStream &t)
{
t << "\\printindex\n";
t << "\\end{document}\n";
}
void LatexGenerator::writeHeaderFile(QFile &f) void LatexGenerator::writeHeaderFile(QFile &f)
{ {
FTextStream t(&f); FTextStream t(&f);
...@@ -772,6 +779,12 @@ void LatexGenerator::writeHeaderFile(QFile &f) ...@@ -772,6 +779,12 @@ void LatexGenerator::writeHeaderFile(QFile &f)
writeDefaultHeaderPart3(t); writeDefaultHeaderPart3(t);
} }
void LatexGenerator::writeFooterFile(QFile &f)
{
FTextStream t(&f);
writeDefaultFooter(t);
}
void LatexGenerator::writeStyleSheetFile(QFile &f) void LatexGenerator::writeStyleSheetFile(QFile &f)
{ {
FTextStream t(&f); FTextStream t(&f);
...@@ -993,6 +1006,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -993,6 +1006,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
//static bool compactLatex = Config_getBool("COMPACT_LATEX"); //static bool compactLatex = Config_getBool("COMPACT_LATEX");
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static QCString latexHeader = Config_getString("LATEX_HEADER"); static QCString latexHeader = Config_getString("LATEX_HEADER");
static QCString latexFooter = Config_getString("LATEX_FOOTER");
switch (is) switch (is)
{ {
case isTitlePageStart: case isTitlePageStart:
...@@ -1211,8 +1225,15 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -1211,8 +1225,15 @@ void LatexGenerator::endIndexSection(IndexSections is)
case isPageDocumentation2: case isPageDocumentation2:
break; break;
case isEndIndex: case isEndIndex:
t << "\\printindex\n"; if (latexFooter.isEmpty())
t << "\\end{document}\n"; {
writeDefaultFooter(t);
}
else
{
QCString footer = fileToString(latexFooter);
t << substituteKeywords(footer,0);
}
break; break;
} }
} }
......
...@@ -30,6 +30,7 @@ class LatexGenerator : public OutputGenerator ...@@ -30,6 +30,7 @@ class LatexGenerator : public OutputGenerator
static void init(); static void init();
static void writeStyleSheetFile(QFile &f); static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f); static void writeHeaderFile(QFile &f);
static void writeFooterFile(QFile &f);
//OutputGenerator *copy(); //OutputGenerator *copy();
//OutputGenerator *clone() { return new LatexGenerator(*this); } //OutputGenerator *clone() { return new LatexGenerator(*this); }
......
...@@ -661,19 +661,19 @@ void ManDocVisitor::visitPost(DocHtmlCell *) ...@@ -661,19 +661,19 @@ void ManDocVisitor::visitPost(DocHtmlCell *)
void ManDocVisitor::visitPre(DocInternal *) void ManDocVisitor::visitPre(DocInternal *)
{ {
if (m_hide) return; if (m_hide) return;
if (!m_firstCol) m_t << endl; //if (!m_firstCol) m_t << endl;
m_t << ".PP" << endl; //m_t << ".PP" << endl;
m_t << "\\fB" << theTranslator->trForInternalUseOnly() << "\\fP" << endl; //m_t << "\\fB" << theTranslator->trForInternalUseOnly() << "\\fP" << endl;
m_t << ".RS 4" << endl; //m_t << ".RS 4" << endl;
} }
void ManDocVisitor::visitPost(DocInternal *) void ManDocVisitor::visitPost(DocInternal *)
{ {
if (m_hide) return; if (m_hide) return;
if (!m_firstCol) m_t << endl; //if (!m_firstCol) m_t << endl;
m_t << ".RE" << endl; //m_t << ".RE" << endl;
m_t << ".PP" << endl; //m_t << ".PP" << endl;
m_firstCol=TRUE; //m_firstCol=TRUE;
} }
void ManDocVisitor::visitPre(DocHRef *) void ManDocVisitor::visitPre(DocHRef *)
......
...@@ -102,6 +102,7 @@ void PageDef::writeDocumentation(OutputList &ol) ...@@ -102,6 +102,7 @@ void PageDef::writeDocumentation(OutputList &ol)
} }
ol.endQuickIndices(); ol.endQuickIndices();
} }
SectionInfo *si=Doxygen::sectionDict.find(name());
// save old generator state and write title only to Man generator // save old generator state and write title only to Man generator
ol.pushGeneratorState(); ol.pushGeneratorState();
...@@ -109,6 +110,11 @@ void PageDef::writeDocumentation(OutputList &ol) ...@@ -109,6 +110,11 @@ void PageDef::writeDocumentation(OutputList &ol)
ol.disableAllBut(OutputGenerator::Man); ol.disableAllBut(OutputGenerator::Man);
ol.startTitleHead(pageName); ol.startTitleHead(pageName);
ol.endTitleHead(pageName, pageName); ol.endTitleHead(pageName, pageName);
if (si)
{
ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
ol.endSection(si->label,si->type);
}
ol.popGeneratorState(); ol.popGeneratorState();
//2.} //2.}
...@@ -117,9 +123,8 @@ void PageDef::writeDocumentation(OutputList &ol) ...@@ -117,9 +123,8 @@ void PageDef::writeDocumentation(OutputList &ol)
//2.{ //2.{
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF); ol.disable(OutputGenerator::RTF);
SectionInfo *si=0; ol.disable(OutputGenerator::Man);
if (!title().isEmpty() && !name().isEmpty() && if (!title().isEmpty() && !name().isEmpty() && si!=0)
(si=Doxygen::sectionDict.find(name()))!=0)
{ {
//ol.startSection(si->label,si->title,si->type); //ol.startSection(si->label,si->title,si->type);
startTitle(ol,getOutputFileBase(),this); startTitle(ol,getOutputFileBase(),this);
......
...@@ -56,12 +56,9 @@ struct FileState ...@@ -56,12 +56,9 @@ struct FileState
FileState(int size) : fileBuf(size), FileState(int size) : fileBuf(size),
oldFileBuf(0), oldFileBufPos(0) {} oldFileBuf(0), oldFileBufPos(0) {}
int lineNr; int lineNr;
//FILE *filePtr;
BufStr fileBuf; BufStr fileBuf;
//FILE *oldYYin;
BufStr *oldFileBuf; BufStr *oldFileBuf;
int oldFileBufPos; int oldFileBufPos;
//bool isPlainFile;
YY_BUFFER_STATE bufState; YY_BUFFER_STATE bufState;
QCString fileName; QCString fileName;
}; };
...@@ -1264,7 +1261,10 @@ static void readIncludeFile(const QCString &inc) ...@@ -1264,7 +1261,10 @@ static void readIncludeFile(const QCString &inc)
if (oldFileDef) if (oldFileDef)
{ {
// add include dependency to the file in which the #include was found // add include dependency to the file in which the #include was found
oldFileDef->addIncludeDependency(g_yyFileDef,incFileName,localInclude,g_isImported); bool ambig;
// change to local name for bug 641336
FileDef *incFd = findFileDef(Doxygen::inputNameDict,incFileName,ambig);
oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,g_isImported);
// add included by dependency // add included by dependency
if (g_yyFileDef) if (g_yyFileDef)
{ {
...@@ -1297,16 +1297,18 @@ static void readIncludeFile(const QCString &inc) ...@@ -1297,16 +1297,18 @@ static void readIncludeFile(const QCString &inc)
if (oldFileDef) if (oldFileDef)
{ {
bool ambig; bool ambig;
QCString absPath = incFileName; //QCString absPath = incFileName;
if (QDir::isRelativePath(incFileName)) //if (QDir::isRelativePath(incFileName))
{ //{
absPath = QDir::cleanDirPath(oldFileDef->getPath()+"/"+incFileName); // absPath = QDir::cleanDirPath(oldFileDef->getPath()+"/"+incFileName);
//printf("%s + %s -> resolved path %s\n",oldFileDef->getPath().data(),incFileName.data(),absPath.data()); // //printf("%s + %s -> resolved path %s\n",oldFileDef->getPath().data(),incFileName.data(),absPath.data());
} //}
FileDef *fd = findFileDef(Doxygen::inputNameDict,absPath,ambig);
// change to local name for bug 641336
FileDef *fd = findFileDef(Doxygen::inputNameDict,incFileName,ambig);
//printf("%s::findFileDef(%s)=%p\n",oldFileDef->name().data(),incFileName.data(),fd); //printf("%s::findFileDef(%s)=%p\n",oldFileDef->name().data(),incFileName.data(),fd);
// add include dependency to the file in which the #include was found // add include dependency to the file in which the #include was found
oldFileDef->addIncludeDependency(fd,incFileName,localInclude,g_isImported); oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,g_isImported);
// add included by dependency // add included by dependency
if (fd) if (fd)
{ {
...@@ -2506,9 +2508,10 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) ...@@ -2506,9 +2508,10 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
g_expandedDict->clear(); g_expandedDict->clear();
g_condStack.clear(); g_condStack.clear();
g_condStack.setAutoDelete(TRUE); g_condStack.setAutoDelete(TRUE);
g_fileDefineDict->clear(); // add due to bug 641346
static bool firstTime=TRUE; //static bool firstTime=TRUE;
if (firstTime) //if (firstTime)
{ {
// add predefined macros // add predefined macros
char *defStr; char *defStr;
...@@ -2618,7 +2621,7 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output) ...@@ -2618,7 +2621,7 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
// def->name.data(),def->definition.data(),def->nargs); // def->name.data(),def->definition.data(),def->nargs);
} }
} }
firstTime=FALSE; //firstTime=FALSE;
} }
g_yyLineNr = 1; g_yyLineNr = 1;
......
...@@ -85,7 +85,7 @@ void Qhp::initialize() ...@@ -85,7 +85,7 @@ void Qhp::initialize()
{ "name", filterName, 0 }; { "name", filterName, 0 };
m_doc.open("customFilter", tagAttributes); m_doc.open("customFilter", tagAttributes);
QStringList customFilterAttributes = QStringList::split(' ', Config_getString("QHP_CUST_FILTER_ATTRS")); QStringList customFilterAttributes = QStringList::split(QChar(' '), Config_getString("QHP_CUST_FILTER_ATTRS"));
for (int i = 0; i < (int)customFilterAttributes.count(); i++) for (int i = 0; i < (int)customFilterAttributes.count(); i++)
{ {
m_doc.openCloseContent("filterAttribute", customFilterAttributes[i]); m_doc.openCloseContent("filterAttribute", customFilterAttributes[i]);
...@@ -96,7 +96,7 @@ void Qhp::initialize() ...@@ -96,7 +96,7 @@ void Qhp::initialize()
m_doc.open("filterSection"); m_doc.open("filterSection");
// Add section attributes // Add section attributes
QStringList sectionFilterAttributes = QStringList::split(' ', QStringList sectionFilterAttributes = QStringList::split(QChar(' '),
Config_getString("QHP_SECT_FILTER_ATTRS")); Config_getString("QHP_SECT_FILTER_ATTRS"));
if (!sectionFilterAttributes.contains(QString("doxygen"))) if (!sectionFilterAttributes.contains(QString("doxygen")))
{ {
......
...@@ -953,25 +953,25 @@ void RTFDocVisitor::visitPost(DocHtmlCell *) ...@@ -953,25 +953,25 @@ void RTFDocVisitor::visitPost(DocHtmlCell *)
void RTFDocVisitor::visitPre(DocInternal *) void RTFDocVisitor::visitPre(DocInternal *)
{ {
if (m_hide) return; if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocInternal)}\n"); //DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocInternal)}\n");
m_t << "{"; // start desc //m_t << "{"; // start desc
m_t << "{\\b "; // start bold //m_t << "{\\b "; // start bold
m_t << theTranslator->trForInternalUseOnly(); //m_t << theTranslator->trForInternalUseOnly();
m_t << "}"; // end bold //m_t << "}"; // end bold
m_t << "\\par" << endl; //m_t << "\\par" << endl;
incIndentLevel(); //incIndentLevel();
m_t << rtf_Style_Reset << getStyle("DescContinue"); //m_t << rtf_Style_Reset << getStyle("DescContinue");
m_lastIsPara=FALSE; //m_lastIsPara=FALSE;
} }
void RTFDocVisitor::visitPost(DocInternal *) void RTFDocVisitor::visitPost(DocInternal *)
{ {
if (m_hide) return; if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocInternal)}\n"); //DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocInternal)}\n");
m_t << "\\par"; //m_t << "\\par";
decIndentLevel(); //decIndentLevel();
m_t << "}"; // end desc //m_t << "}"; // end desc
m_lastIsPara=TRUE; //m_lastIsPara=TRUE;
} }
void RTFDocVisitor::visitPre(DocHRef *href) void RTFDocVisitor::visitPre(DocHRef *href)
......
...@@ -587,6 +587,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -587,6 +587,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x ClassVar %x ClassVar
%x CSConstraintName %x CSConstraintName
%x CSConstraintType %x CSConstraintType
%x CSIndexer
%x ClassCategory %x ClassCategory
%x ClassTemplSpec %x ClassTemplSpec
%x CliPropertyType %x CliPropertyType
...@@ -1660,7 +1661,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1660,7 +1661,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<NSAliasArg>";" { <NSAliasArg>";" {
BEGIN( FindMembers ); BEGIN( FindMembers );
} }
<PHPUse>({ID}{BN}*"\\"{BN}*)+{ID} { <PHPUse>({ID}{BN}*"\\"{BN}*)*{ID} {
lineCount(); lineCount();
aliasName=yytext; aliasName=yytext;
//current->fileName = yyFileName; //current->fileName = yyFileName;
...@@ -1972,6 +1973,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1972,6 +1973,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
{ // javascript function { // javascript function
current->type="function"; current->type="function";
} }
else if (insideCS && strcmp(yytext,"this")==0)
{
// C# indexer
addType( current ) ;
current->name="this";
BEGIN(CSIndexer);
}
else else
{ {
if (YY_START==FindMembers) if (YY_START==FindMembers)
...@@ -2046,6 +2054,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -2046,6 +2054,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
} }
} }
<CSIndexer>"["[^\n\]]*"]" {
current->name+=removeRedundantWhiteSpace(yytext);
BEGIN(FindMembers);
}
<FindMembers>[0-9]{ID} { // some number where we did not expect one <FindMembers>[0-9]{ID} { // some number where we did not expect one
} }
<FindMembers>"." { <FindMembers>"." {
...@@ -4089,9 +4101,15 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4089,9 +4101,15 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
<OldStyleArgs>. { current->args += *yytext; } <OldStyleArgs>. { current->args += *yytext; }
<FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; } <FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; }
<FuncQual>{BN}*"try:" |
<FuncQual>{BN}*"try"{BN}+ { /* try-function-block */ <FuncQual>{BN}*"try"{BN}+ { /* try-function-block */
insideTryBlock=TRUE; insideTryBlock=TRUE;
lineCount(); lineCount();
if (yytext[yyleng-1]==':')
{
unput(':');
BEGIN( Function );
}
} }
<FuncQual>{BN}*"throw"{BN}*"(" { // C++ style throw clause <FuncQual>{BN}*"throw"{BN}*"(" { // C++ style throw clause
current->exception = " throw (" ; current->exception = " throw (" ;
...@@ -4869,7 +4887,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4869,7 +4887,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<BasesProt>"private"{BN}+ { lineCount(); baseProt = Private; } <BasesProt>"private"{BN}+ { lineCount(); baseProt = Private; }
<BasesProt>{BN} { lineCount(); } <BasesProt>{BN} { lineCount(); }
<BasesProt>. { unput(*yytext); BEGIN(Bases); } <BasesProt>. { unput(*yytext); BEGIN(Bases); }
<Bases>("\\")?{BN}*({ID}{BN}*"\\"{BN}*)*{ID} { <Bases>("\\")?({ID}"\\")*{ID} { // PHP namespace token, not sure if interspacing is allowed but it gives problems (see bug 640847)
if (!insidePHP) if (!insidePHP)
{ {
REJECT; REJECT;
......
...@@ -140,7 +140,7 @@ function combine_results($results,&$docs) ...@@ -140,7 +140,7 @@ function combine_results($results,&$docs)
{ {
$key=$di["url"]; $key=$di["url"];
$rank=$di["rank"]; $rank=$di["rank"];
if ($docs[$key]) if (isset($docs[$key]))
{ {
$docs[$key]["rank"]+=$rank; $docs[$key]["rank"]+=$rank;
} }
......
...@@ -140,7 +140,7 @@ ...@@ -140,7 +140,7 @@
" {\n" " {\n"
" $key=$di[\"url\"];\n" " $key=$di[\"url\"];\n"
" $rank=$di[\"rank\"];\n" " $rank=$di[\"rank\"];\n"
" if ($docs[$key])\n" " if (isset($docs[$key]))\n"
" {\n" " {\n"
" $docs[$key][\"rank\"]+=$rank;\n" " $docs[$key][\"rank\"]+=$rank;\n"
" }\n" " }\n"
......
This diff is collapsed.
...@@ -3645,7 +3645,7 @@ static void findMembersWithSpecificName(MemberName *mn, ...@@ -3645,7 +3645,7 @@ static void findMembersWithSpecificName(MemberName *mn,
//printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p current=%p\n", //printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p current=%p\n",
// md->name().data(),args,fd,gd,currentFile); // md->name().data(),args,fd,gd,currentFile);
if ( if (
((gd && gd->isLinkable()) || (fd && fd->isLinkable())) && ((gd && gd->isLinkable()) || (fd && fd->isLinkable()) || md->isReference()) &&
md->getNamespaceDef()==0 && md->isLinkable() && md->getNamespaceDef()==0 && md->isLinkable() &&
(!checkStatics || (!md->isStatic() && !md->isDefine()) || (!checkStatics || (!md->isStatic() && !md->isDefine()) ||
currentFile==0 || fd==currentFile) // statics must appear in the same file currentFile==0 || fd==currentFile) // statics must appear in the same file
...@@ -3908,11 +3908,11 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3908,11 +3908,11 @@ bool getDefs(const QCString &scName,const QCString &memberName,
// maybe an namespace, file or group member ? // maybe an namespace, file or group member ?
//printf("Testing for global function scopeName=`%s' mScope=`%s' :: mName=`%s'\n", //printf("Testing for global symbol scopeName=`%s' mScope=`%s' :: mName=`%s'\n",
// scopeName.data(),mScope.data(),mName.data()); // scopeName.data(),mScope.data(),mName.data());
if ((mn=Doxygen::functionNameSDict->find(mName))) // name is known if ((mn=Doxygen::functionNameSDict->find(mName))) // name is known
{ {
//printf(" >function name found\n"); //printf(" >symbol name found\n");
NamespaceDef *fnd=0; NamespaceDef *fnd=0;
int scopeOffset=scopeName.length(); int scopeOffset=scopeName.length();
do do
...@@ -4250,6 +4250,7 @@ bool resolveRef(/* in */ const char *scName, ...@@ -4250,6 +4250,7 @@ bool resolveRef(/* in */ const char *scName,
// we did find a member, but it is a global one while we were explicitly // we did find a member, but it is a global one while we were explicitly
// looking for a scoped variable. See bug 616387 for an example why this check is needed. // looking for a scoped variable. See bug 616387 for an example why this check is needed.
// note we do need to support autolinking to "::symbol" hence the >0 // note we do need to support autolinking to "::symbol" hence the >0
//printf("not global member!\n");
*resContext=0; *resContext=0;
*resMember=0; *resMember=0;
return FALSE; return FALSE;
...@@ -4285,6 +4286,7 @@ bool resolveRef(/* in */ const char *scName, ...@@ -4285,6 +4286,7 @@ bool resolveRef(/* in */ const char *scName,
{ {
return resolveRef(scName,name,inSeeBlock,resContext,resMember,FALSE,0,checkScope); return resolveRef(scName,name,inSeeBlock,resContext,resMember,FALSE,0,checkScope);
} }
//printf("resolveRef: %s not found!\n",name);
return FALSE; return FALSE;
} }
...@@ -4564,41 +4566,6 @@ QCString substituteClassNames(const QCString &s) ...@@ -4564,41 +4566,6 @@ QCString substituteClassNames(const QCString &s)
} }
#endif #endif
//----------------------------------------------------------------------
// substitute all occurrences of `src' in `s' by `dst'
QCString substitute(const char *s,const char *src,const char *dst)
{
if (s==0 || src==0) return s;
const char *p, *q;
int srcLen = strlen(src);
int dstLen = dst ? strlen(dst) : 0;
int resLen;
if (srcLen!=dstLen)
{
int count;
for (count=0, p=s; (q=strstr(p,src))!=0; p=q+srcLen) count++;
resLen = p-s+strlen(p)+count*(dstLen-srcLen);
}
else // result has same size as s
{
resLen = strlen(s);
}
QCString result(resLen+1);
char *r;
for (r=result.data(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
{
int l = (int)(q-p);
memcpy(r,p,l);
r+=l;
if (dst) memcpy(r,dst,dstLen);
r+=dstLen;
}
strcpy(r,p);
//printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
return result;
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
struct FindFileCacheElem struct FindFileCacheElem
...@@ -4621,9 +4588,11 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -4621,9 +4588,11 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
g_findFileDefCache.setAutoDelete(TRUE); g_findFileDefCache.setAutoDelete(TRUE);
FindFileCacheElem *cachedResult = g_findFileDefCache.find(key); FindFileCacheElem *cachedResult = g_findFileDefCache.find(key);
//printf("key=%s cachedResult=%p\n",key.data(),cachedResult);
if (cachedResult) if (cachedResult)
{ {
ambig = cachedResult->isAmbig; ambig = cachedResult->isAmbig;
//printf("cached: fileDef=%p\n",cachedResult->fileDef);
return cachedResult->fileDef; return cachedResult->fileDef;
} }
else else
...@@ -4641,10 +4610,12 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -4641,10 +4610,12 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
{ {
path=name.left(slashPos+1); path=name.left(slashPos+1);
name=name.right(name.length()-slashPos-1); name=name.right(name.length()-slashPos-1);
//printf("path=%s name=%s\n",path.data(),name.data());
} }
if (name.isEmpty()) goto exit; if (name.isEmpty()) goto exit;
if ((fn=(*fnDict)[name])) if ((fn=(*fnDict)[name]))
{ {
//printf("fn->count()=%d\n",fn->count());
if (fn->count()==1) if (fn->count()==1)
{ {
FileDef *fd = fn->getFirst(); FileDef *fd = fn->getFirst();
...@@ -4652,6 +4623,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -4652,6 +4623,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
{ {
cachedResult->fileDef = fd; cachedResult->fileDef = fd;
g_findFileDefCache.insert(key,cachedResult); g_findFileDefCache.insert(key,cachedResult);
//printf("=1 ===> add to cache %p\n",fd);
return fd; return fd;
} }
} }
...@@ -4671,6 +4643,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -4671,6 +4643,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
lastMatch=fd; lastMatch=fd;
} }
} }
//printf(">1 ===> add to cache %p\n",fd);
ambig=(count>1); ambig=(count>1);
cachedResult->isAmbig = ambig; cachedResult->isAmbig = ambig;
...@@ -4684,7 +4657,9 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -4684,7 +4657,9 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
//printf("not found!\n"); //printf("not found!\n");
} }
exit: exit:
//printf("0 ===> add to cache %p: %s\n",cachedResult,n);
g_findFileDefCache.insert(key,cachedResult); g_findFileDefCache.insert(key,cachedResult);
//delete cachedResult;
return 0; return 0;
} }
...@@ -4719,9 +4694,9 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n) ...@@ -4719,9 +4694,9 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
QCString substituteKeywords(const QCString &s,const char *title,const QCString &relPath) QCString substituteKeywords(const QCString &s,const char *title)
{ {
QCString result = s.copy(); QCString result = s;
if (title) result = substitute(result,"$title",title); if (title) result = substitute(result,"$title",title);
result = substitute(result,"$datetime",dateToString(TRUE)); result = substitute(result,"$datetime",dateToString(TRUE));
result = substitute(result,"$date",dateToString(FALSE)); result = substitute(result,"$date",dateToString(FALSE));
...@@ -4731,7 +4706,6 @@ QCString substituteKeywords(const QCString &s,const char *title,const QCString & ...@@ -4731,7 +4706,6 @@ QCString substituteKeywords(const QCString &s,const char *title,const QCString &
result = substitute(result,"$projectnumber",Config_getString("PROJECT_NUMBER")); result = substitute(result,"$projectnumber",Config_getString("PROJECT_NUMBER"));
result = substitute(result,"$projectbrief",Config_getString("PROJECT_BRIEF")); result = substitute(result,"$projectbrief",Config_getString("PROJECT_BRIEF"));
result = substitute(result,"$projectlogo",Config_getString("PROJECT_LOGO")); result = substitute(result,"$projectlogo",Config_getString("PROJECT_LOGO"));
result = substitute(result,"$relpath$",relPath);
return result; return result;
} }
...@@ -5272,6 +5246,26 @@ QCString convertToHtml(const char *s,bool keepEntities) ...@@ -5272,6 +5246,26 @@ QCString convertToHtml(const char *s,bool keepEntities)
return strBuf.get(); return strBuf.get();
} }
QCString convertToJSString(const char *s)
{
static StrBuf strBuf;
strBuf.clear();
if (s==0) return "";
const char *p=s;
char c;
while ((c=*p++))
{
switch (c)
{
case '"': strBuf.addStr("\\\""); break;
default: strBuf.addChar(c); break;
}
}
strBuf.addChar(0);
return strBuf.get();
}
QCString convertCharEntitiesToUTF8(const QCString &s) QCString convertCharEntitiesToUTF8(const QCString &s)
{ {
static QDict<char> entityMap(67); static QDict<char> entityMap(67);
......
...@@ -178,6 +178,10 @@ QCString substituteClassNames(const QCString &s); ...@@ -178,6 +178,10 @@ QCString substituteClassNames(const QCString &s);
QCString substitute(const char *s,const char *src,const char *dst); QCString substitute(const char *s,const char *src,const char *dst);
QCString clearBlock(const char *s,const char *begin,const char *end);
QCString selectBlock(const QCString& s,const QCString &name,bool which);
QCString resolveDefines(const char *n); QCString resolveDefines(const char *n);
ClassDef *getClass(const char *key); ClassDef *getClass(const char *key);
...@@ -225,7 +229,7 @@ bool rightScopeMatch(const QCString &scope, const QCString &name); ...@@ -225,7 +229,7 @@ bool rightScopeMatch(const QCString &scope, const QCString &name);
bool leftScopeMatch(const QCString &scope, const QCString &name); bool leftScopeMatch(const QCString &scope, const QCString &name);
QCString substituteKeywords(const QCString &s,const char *title,const QCString &relPath=""); QCString substituteKeywords(const QCString &s,const char *title);
int getPrefixIndex(const QCString &name); int getPrefixIndex(const QCString &name);
...@@ -253,6 +257,8 @@ QCString convertToHtml(const char *s,bool keepEntities=TRUE); ...@@ -253,6 +257,8 @@ QCString convertToHtml(const char *s,bool keepEntities=TRUE);
QCString convertToXML(const char *s); QCString convertToXML(const char *s);
QCString convertToJSString(const char *s);
QCString getOverloadDocs(); QCString getOverloadDocs();
void addMembersToMemberGroup(/* in */ MemberList *ml, void addMembersToMemberGroup(/* in */ MemberList *ml,
......
...@@ -167,7 +167,7 @@ static void writeCombineScript() ...@@ -167,7 +167,7 @@ static void writeCombineScript()
" xsltproc combine.xslt index.xml >all.xml\n" " xsltproc combine.xslt index.xml >all.xml\n"
"-->\n" "-->\n"
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n" "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n"
" <xsl:output method=\"xml\" version=\"1.0\" indent=\"yes\" standalone=\"yes\" />\n" " <xsl:output method=\"xml\" version=\"1.0\" indent=\"no\" standalone=\"yes\" />\n"
" <xsl:template match=\"/\">\n" " <xsl:template match=\"/\">\n"
" <doxygen version=\"{doxygenindex/@version}\">\n" " <doxygen version=\"{doxygenindex/@version}\">\n"
" <!-- Load all doxgen generated xml files -->\n" " <!-- Load all doxgen generated xml files -->\n"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment