Commit 5c424c55 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.7.5.1

parent 9be75800
DOXYGEN Version 1.7.5 DOXYGEN Version 1.7.5.1
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 (14 August 2011) Dimitri van Heesch (21 August 2011)
DOXYGEN Version 1.7.5 DOXYGEN Version 1.7.5.1
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) (14 August 2011) Dimitri van Heesch (dimitri@stack.nl) (21 August 2011)
...@@ -191,7 +191,7 @@ void MainWindow::about() ...@@ -191,7 +191,7 @@ void MainWindow::about()
t << QString::fromAscii("<qt><center>A tool to configure and run doxygen version ")+ t << QString::fromAscii("<qt><center>A tool to configure and run doxygen version ")+
QString::fromAscii(versionString)+ QString::fromAscii(versionString)+
QString::fromAscii(" on your source files.</center><p><br>" QString::fromAscii(" on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2010</center><p>" "<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2011</center><p>"
"</qt>"); "</qt>");
QMessageBox::about(this,tr("Doxygen GUI"),msg); QMessageBox::about(this,tr("Doxygen GUI"),msg);
} }
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
doxygen_version_major=1 doxygen_version_major=1
doxygen_version_minor=7 doxygen_version_minor=7
doxygen_version_revision=5 doxygen_version_revision=5.1
#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=NO doxygen_version_mmn=NO
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2003 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.
*
*/
/*! \page doxysearch_usage Doxysearch usage
Doxysearch is a small, fast and highly portable search engine that allows
you to search for strings or words in the documentation generated by
<a href="doxygen_usage.html">doxygen</a> or
in the Qt documentation (see <a href="#searchqt">below</a>).
Doxysearch must be run as a CGI binary. This implies the following:
<ul>
<li> There must be a HTTP daemon running on the system where you want to
install the documentation (the <em>target</em>)
<li> You must have permission to install and execute a CGI binary on the
target.
</ul>
Ask your system administrator or provider if you are unsure if this is possible.
In order to be able to search fast and efficient, doxysearch does not
search the generated documentation directly. Instead, it uses an
<em>index file</em>, that should be generated with
<a href="doxytag_usage.html">doxytag</a>. The index file is extracted from
the generated HTML files and contains all words and substrings of words
present in the HTML files, in a compact form, together with their
frequencies and links. Although I tried to store all information
as compactly as possible, the size of the index is still quite large.
Usually it is about the same size as the original HTML files.
I have tried to make the search engine highly portable, because it
must run on the target system. As a result doxysearch does not require the
Qt library. All that is required to build doxysearch is a C++ compiler.
If you are using \c g++ for example, you can build the search engine manually,
by typing:
\verbatim
g++ doxysearch.cpp -o doxysearch
\endverbatim
<a name="se"></a>
<h3>Generating the search engine</h3>
To include a search engine in the documentation generated by doxygen
follow these steps:
<ol>
<li>Generate a configuration file with
<a href="doxygen_usage.html">doxygen</a> using the
<code>-g</code> option, if you haven't done this already.
<li>Edit the search engine section (see section \ref config_search of
the configuration file).
Make sure the \c SEARCHENGINE tag is set to \c YES
and that all paths are correct.
<li>Use <a href="doxygen_usage.html">doxygen</a> to generate the
documentation. Apart from the documentation, Doxygen will create the
following files:
<ul>
<li>A small shell script. The name of the script is determined by the
\c CGI_NAME tag in the configuration file.
The script is a small wrapper that calls \c doxysearch with
the correct parameters. Using this script allows multiple
search engines for different projects to be present in one directory.
<li>\c search.cfg: this file is a small configuration file
for the search engine. It contains two lines of text. The first line
should be the absolute URL to the documentation. The second line should
be the absolute URL to the CGI script. This information is taken from
the configuration file.
<li>\c search.gif: this is the image that is used for the search button.
</ul>
\par Note:
On the Windows platform Unix shell scripts cannot be used.
In fact the HTTP daemon that I tried (apache for Windows) only
recognized <code>.cgi</code> files that were renamed
executables (so DOS batch files do not seem to work either). Therefore,
on Windows a small C program will be generated by doxygen.
You should compile and link the program with your favourite
compiler and change the extension of the executable from
<code>.exe</code> to <code>.cgi</code>.
<li>Copy (or move) the CGI script to the directory where the CGI binaries
are located.
This is usually a special directory on your system or in your
home directory.
Consult the manual of your HTTP daemon or your system administrator to
find out where this directory resides on your system.
<li>Go to the directory where the generated HTML files are located and run
doxytag as follows:
<pre>doxytag -s search.idx</pre>
This will create a search index with the name <code>search.idx</code>.
Currently the index file <em>must</em> be called like this.
<li>If you change the location of the search engine or the documentation
and you do not want to regenerate the HTML output, you can simply edit
the generated search.cfg file and run the generated
<a href="installdox_usage.html">installdox</a> script to correct
the links in the documentation.
</ol>
<a name="searchqt">
<h3>Creating a search engine to search in the Qt documentation</h3>
</a>
Using <code>doxytag</code> and <code>doxysearch</code> it is possible to create a search engine for
the Qt documentation, without needing the sources!
This can be done by carefully following these steps:
<ol>
<li>Go to the html directory of the Qt-distribution:
<pre>cd \$QTDIR/html</pre>
<li>Generate the search index by typing:
<pre>doxytag -s search.idx</pre>
in the directory where the HTML files are located.
This will parse all files and build a search index.
Apart from the file <code>search.idx</code> two other files
will be generated: <code>search.gif</code> and <code>search.cgi</code>
\par Note:
Doxytag requires quite a large amount of memory to
generate the search index (about 30 MB on my Linux box)!
The resulting index file requires about 3 MB of space on your disk.
<li>Edit the shell script <code>search.cgi</code> with a text editor.
Fill in the absolute path to the <code>doxysearch</code> binary after
the <code>DOXYSEARCH=</code> tag.
On my system this becomes:
<pre>DOXYSEARCH=/usr/local/bin/doxysearch</pre>
Fill in the absolute path to the qt documentation after the
<code>DOXYPATH=</code> tag.
On my system this becomes:
<pre>DOXYPATH=/usr/local/qt/html</pre>
<li>
CGI binaries are usually located in a special directory.
Consult the manual of your HTTP daemon or your system administrator to
find out, where this directory resides on your system.
Copy (or move) the <code>search.cgi</code> script to this directory.
If needed you may change the name of the script.
On my system, this becomes:
<pre>cp search.cgi /usr/local/lib/httpd/cgi-bin/</pre>
<li>Create a text-file with the name <code>search.cfg</code>.
On the first line, you must put the <em>absolute</em> URL to the Qt
documentation.
Since, I only use the search engine on my own standalone system, I use
the <code>file:</code> protocol.
On the second line, you must put the <em>absolute</em> URL to the
cgi script.
On my system the resulting file looks like this:
\verbatim
file:///usr/local/qt/html
http://blizzard/cgi-bin/search.cgi
\endverbatim
<li>Add a link to the search engine in the Qt documentation.
On my system, I have put a line
\verbatim
<li><a href="http://blizzard/cgi-bin/search.cgi">Search the documentation<a>
\endverbatim
in the additional information section of the <code>index.html</code> file.
<li>Start your favourite web browser and click on the link.
If everything is OK, you should get a page where you can enter
search terms.
</ol>
*/
/******************************************************************************
*
*
*
* 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.
*
*/
/*! \page history Doxygen History
<h2>Version 1.2.0</h2>
<h3>Major new features:</h3>
<ul>
<li>Support for RTF output.
<li>Using the dot tool of the AT\&T's GraphViz package, doxygen can now
generate inheritance diagrams, collaboration diagrams, include
dependency graphs, included by graphs and graphical inheritance overviews.
<li>Function arguments can now be documented with separate comment blocks.
<li>Initializers and macro definitions are now included in the documentation.
<li>Variables and typedefs are now put in their own section.
<li>Old configuration files can be upgraded using the -u option without
loosing any changes.
<li>Using the \\if and \\endif commands, doxygen can conditionally
include documentation blocks.
<li>Added Doc++ like support for member grouping.
<li>Doxygen now has a GUI front-end called doxywizard (based on Qt-2.1)
<li>All info about configuration options is now concentrated in a new
tool called configgen. This tool can generate the configuration
parser and GUI front-end from source templates.
<li>Better support for the using keyword.
<li>New transparent mini logo that is put in the footer of all HTML pages.
<li>Internationalization support for the Polish, Portuguese and Croatian language.
<li>Todo list support.
<li>If the source browser is enabled, for a function, a list of function whose
implementation calls that function, is generated.
<li>All source code fragments are now syntax highlighted in the HTML output.
The colors can be changed using cascading style sheets.
</ul>
<h2>Version 1.0.0</h2>
<h3>Major new features:</h3>
<ul>
<li>Support for templates and namespaces.
<li>Internationalization support. Currently supported languages are:
English, Czech, German, Spanish, Finnish, French, Italian, Japanese,
Dutch, and Swedish.
<li>Automatic generation of inheritance diagrams for sub and super classes.
<li>Support for man page, compressed HTML help, and hyperlinked PDF output.
<li>Cross-referencing documentation with source code and source inlining.
<li>LaTeX formulas can be included in the documentation.
<li>Support for parsing Corba and Microsoft IDL.
<li>Images can be included in the documentation.
<li>Improved parsing and preprocessing.
</ul>
<h2>Version 0.4</h2>
<h3>Major new features:</h3>
<ul>
<li>LaTeX output generation.
<li>Full JavaDoc support.
<li>Build-in C-preprocessor for correct conditional parsing of source code
that is read by Doxygen.
<li>Build-in HTML to LaTeX converter. This allows you to use HTML tags in
your documentation, while doxygen still generates proper LaTeX output.
<li>Many new commands (there are now more than 60!) to document
more entities, to make the documentation look nicer, and to include
examples or pieces of examples.
<li>Enum types, enum values, typedefs, \#defines, and files can now be
documented.
<li>Completely new documentation, that is now generated by Doxygen.
<li>A lot of small examples are now included.
</ul>
<h2>Version 0.3</h2>
<h3>Major new features:</h3>
<ul>
<li>A PHP based search engine that allows you to search through the generated
documentation.
<li>A configuration file instead of command-line options. A default
configuration file can be generated
by <a href="doxygen_usage.html">doxygen</a>.
<li>Added an option to generate output for undocumented classes.
<li>Added an option to generate output for private members.
<li>Every page now contains a condensed index page, allowing much faster
navigation through the documentation.
<li>Global and member variables can now be documented.
<li>A project name can now given, which will be included in the
documentation.
</ul>
<h2>Version 0.2</h2>
<h3>Major new features:</h3>
<ul>
<li>Blocks of code are now parsed. Function calls and variables are
replaced by links to their documentation if possible.
<li>Special example documentation block added. This can be used to
provide cross references between the documentation and some example code.
<li>Documentation blocks can now be placed inside the body of a class.
<li>Documentation blocks with line range may now be created using
special <code>//!</code> C++ line comments.
<li>Unrelated members can now be documented. A page containing a
list of these members is generated.
<li>Added an <code>\\include</code> command to insert blocks of source code
into the documentation.
<li>Warnings are generated for members that are undocumented.
<li>You can now specify your own HTML headers and footers for the
generated pages.
<li>Option added to generated indices containing all external classes
instead of only the used ones.
</ul>
<h2>Version 0.1</h2>
Initial version.
*/
...@@ -138,9 +138,9 @@ when the translator was updated. ...@@ -138,9 +138,9 @@ when the translator was updated.
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>French</td> <td>French</td>
<td>Xavier Outhier</td> <td>David Martinet<br/>Xavier Outhier</td>
<td>xouthier at yahoo dot fr</td> <td>contact at e-concept-applications dot fr<br/>xouthier at yahoo dot fr</td>
<td>1.6.3</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>German</td> <td>German</td>
...@@ -348,7 +348,8 @@ when the translator was updated. ...@@ -348,7 +348,8 @@ when the translator was updated.
\hline \hline
Finnish & Antti Laine & {\tt\tiny antti dot a dot laine at tut dot fi} & 1.6.0 \\ Finnish & Antti Laine & {\tt\tiny antti dot a dot laine at tut dot fi} & 1.6.0 \\
\hline \hline
French & Xavier Outhier & {\tt\tiny xouthier at yahoo dot fr} & 1.6.3 \\ French & David Martinet & {\tt\tiny contact at e-concept-applications dot fr} & up-to-date \\
~ & Xavier Outhier & {\tt\tiny xouthier at yahoo dot fr} & ~ \\
\hline \hline
German & Peter Grotrian & {\tt\tiny Peter dot Grotrian at pdv-FS dot de} & up-to-date \\ German & Peter Grotrian & {\tt\tiny Peter dot Grotrian at pdv-FS dot de} & up-to-date \\
~ & Jens Seidel & {\tt\tiny jensseidel at users dot sf dot net} & ~ \\ ~ & Jens Seidel & {\tt\tiny jensseidel at users dot sf dot net} & ~ \\
......
...@@ -64,6 +64,7 @@ TranslatorFinnish ...@@ -64,6 +64,7 @@ TranslatorFinnish
Antti Laine: antti dot a dot laine at tut dot fi Antti Laine: antti dot a dot laine at tut dot fi
TranslatorFrench TranslatorFrench
David Martinet: contact at e-concept-applications dot fr
Xavier Outhier: xouthier at yahoo dot fr Xavier Outhier: xouthier at yahoo dot fr
TranslatorGerman TranslatorGerman
......
...@@ -10,7 +10,7 @@ Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Serbian, ...@@ -10,7 +10,7 @@ Norwegian, 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, 25 translators are based on Of them, 15 translators are up-to-date, 24 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -29,6 +29,7 @@ still may be some details listed even for them: ...@@ -29,6 +29,7 @@ still may be some details listed even for them:
TranslatorDanish -- Reimplementation using UTF-8 suggested. TranslatorDanish -- Reimplementation using UTF-8 suggested.
TranslatorDutch TranslatorDutch
TranslatorEnglish TranslatorEnglish
TranslatorFrench -- Reimplementation using UTF-8 suggested.
TranslatorGerman TranslatorGerman
TranslatorGreek TranslatorGreek
TranslatorPortuguese TranslatorPortuguese
...@@ -52,9 +53,6 @@ must be implemented to become up-to-date: ...@@ -52,9 +53,6 @@ must be implemented to become up-to-date:
TranslatorItalian 1.7.5 3 methods to implement (1 %) TranslatorItalian 1.7.5 3 methods to implement (1 %)
TranslatorEsperanto 1.7.5 3 methods to implement (1 %) TranslatorEsperanto 1.7.5 3 methods to implement (1 %)
TranslatorPolish 1.6.3 7 methods to implement (3 %) TranslatorPolish 1.6.3 7 methods to implement (3 %)
TranslatorFrench 1.6.3 6 methods to implement (2 %)
Note: Reimplementation using UTF-8 suggested.
TranslatorVietnamese 1.6.0 12 methods to implement (5 %) TranslatorVietnamese 1.6.0 12 methods to implement (5 %)
TranslatorSwedish 1.6.0 12 methods to implement (5 %) TranslatorSwedish 1.6.0 12 methods to implement (5 %)
Note: Reimplementation using UTF-8 suggested. Note: Reimplementation using UTF-8 suggested.
...@@ -253,19 +251,10 @@ TranslatorFinnish (TranslatorAdapter_1_6_0) 12 methods to implement (5 %) ...@@ -253,19 +251,10 @@ TranslatorFinnish (TranslatorAdapter_1_6_0) 12 methods to implement (5 %)
virtual QCString trIncludesFileIn(const char * name) virtual QCString trIncludesFileIn(const char * name)
TranslatorFrench (TranslatorAdapter_1_6_3) 6 methods to implement (2 %) TranslatorFrench (Translator)
---------------- ----------------
Implements 222 of the required methods (97 %). Implements 228 of the required methods (100 %).
Missing methods (should be implemented):
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 trDirDepGraph(const char * name)
virtual QCString trDirDependency(const char * name)
virtual QCString trCopyright()
virtual QCString trIncludesFileIn(const char * name)
TranslatorHungarian (TranslatorAdapter_1_4_6) 36 methods to implement (15 %) TranslatorHungarian (TranslatorAdapter_1_4_6) 36 methods to implement (15 %)
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* \author John Doe * \author John Doe
* \author Jan Doe * \author Jan Doe
* \version 4.1a * \version 4.1a
* \date 1990-2010 * \date 1990-2011
* \pre First initialize the system. * \pre First initialize the system.
* \bug Not all memory is freed when deleting an object of this class. * \bug Not all memory is freed when deleting an object of this class.
* \warning Improper use can crash your application * \warning Improper use can crash your application
......
...@@ -129,7 +129,7 @@ IGNORE_PREFIX = Q ...@@ -129,7 +129,7 @@ IGNORE_PREFIX = Q
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the HTML output # configuration options related to the HTML output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_HTML = YES GENERATE_HTML = NO
HTML_OUTPUT = HTML_OUTPUT =
HTML_FILE_EXTENSION = .html HTML_FILE_EXTENSION = .html
HTML_HEADER = HTML_HEADER =
...@@ -179,7 +179,7 @@ SERVER_BASED_SEARCH = YES ...@@ -179,7 +179,7 @@ SERVER_BASED_SEARCH = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the LaTeX output # configuration options related to the LaTeX output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_LATEX = YES GENERATE_LATEX = NO
LATEX_OUTPUT = LATEX_OUTPUT =
LATEX_CMD_NAME = latex LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex MAKEINDEX_CMD_NAME = makeindex
...@@ -212,7 +212,7 @@ MAN_LINKS = NO ...@@ -212,7 +212,7 @@ MAN_LINKS = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the XML output # configuration options related to the XML output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_XML = YES GENERATE_XML = NO
XML_OUTPUT = xml XML_OUTPUT = xml
XML_SCHEMA = XML_SCHEMA =
XML_DTD = XML_DTD =
......
...@@ -72,14 +72,18 @@ bool CiteDict::writeAux() ...@@ -72,14 +72,18 @@ bool CiteDict::writeAux()
if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib"; if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
if (!bibFile.isEmpty()) if (!bibFile.isEmpty())
{ {
QFileInfo fi(bibFile); QFileInfo fi(bibFile); // open file (with .bib extension)
if (fi.exists()) if (fi.exists())
{ {
if (!copyFile(bibFile,m_baseFileName+"_"+bibFile)) if (!copyFile(bibFile,m_baseFileName+"_"+bibFile))
{ {
return FALSE; return FALSE;
} }
t << m_baseFileName+"_"+bibFile; if (bibFile.right(4)==".bib")
{
bibFile = bibFile.left(bibFile.length()-4);
}
t << m_baseFileName+"_"+bibFile; // write name (without bib extension)
bibdata = citeDataList.next(); bibdata = citeDataList.next();
if (bibdata) if (bibdata)
{ {
...@@ -128,6 +132,10 @@ void CiteDict::writeLatexBibliography(FTextStream &t) ...@@ -128,6 +132,10 @@ void CiteDict::writeLatexBibliography(FTextStream &t)
while (bibdata) while (bibdata)
{ {
QCString bibFile = bibdata; QCString bibFile = bibdata;
if (bibFile.right(4)==".bib")
{
bibFile = bibFile.left(bibFile.length()-4);
}
if (!bibFile.isEmpty()) if (!bibFile.isEmpty())
{ {
t << bibFile; t << bibFile;
...@@ -268,11 +276,7 @@ void CiteDict::resolve() ...@@ -268,11 +276,7 @@ void CiteDict::resolve()
QStrList &citeBibFiles = Config_getList("CITE_BIB_FILES"); QStrList &citeBibFiles = Config_getList("CITE_BIB_FILES");
if (citeBibFiles.count()==0 || m_entries.count()==0) return; // nothing to cite if (citeBibFiles.count()==0 || m_entries.count()==0) return; // nothing to cite
QCString &outputDirectory = Config_getString("OUTPUT_DIRECTORY"); QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
if (outputDirectory.isEmpty())
{
outputDirectory=QDir::currentDirPath();
}
QDir d(outputDirectory); QDir d(outputDirectory);
d.mkdir("bib"); d.mkdir("bib");
......
...@@ -1716,12 +1716,11 @@ static int yyread(char *buf,int max_size) ...@@ -1716,12 +1716,11 @@ static int yyread(char *buf,int max_size)
B [ \t] B [ \t]
BN [ \t\n\r] BN [ \t\n\r]
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
SCOPESEP ("::"|"\\"){BN}* SEP ("::"|"\\")
SCOPEPRE ({SCOPESEP}{ID}{BN}*)*{SCOPESEP} SCOPENAME ({SEP}{BN}*)?({ID}{BN}*{SEP}{BN}*)*("~"{BN}*)?{ID}
SCOPENAME {SCOPEPRE}?(("~"{BN}*)?{ID})
TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">" TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?("::"|"\\"){BN}*)*)((~{BN}*)?{ID}) SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?{SEP}{BN}*)*)((~{BN}*)?{ID})
SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*("::"|"\\"){BN}*)+ SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+
KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property") KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property")
KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC}) KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC})
FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally") FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally")
......
...@@ -48,8 +48,7 @@ class DefinitionImpl ...@@ -48,8 +48,7 @@ class DefinitionImpl
public: public:
DefinitionImpl(); DefinitionImpl();
~DefinitionImpl(); ~DefinitionImpl();
void init(const char *df,int dl, void init(const char *df, const char *n);
const char *n);
SectionDict *sectionDict; // dictionary of all sections, not accessible SectionDict *sectionDict; // dictionary of all sections, not accessible
...@@ -76,7 +75,6 @@ class DefinitionImpl ...@@ -76,7 +75,6 @@ class DefinitionImpl
// where the item was found // where the item was found
QCString defFileName; QCString defFileName;
int defLine;
QCString defFileExt; QCString defFileExt;
SrcLangExt lang; SrcLangExt lang;
...@@ -103,8 +101,7 @@ DefinitionImpl::~DefinitionImpl() ...@@ -103,8 +101,7 @@ DefinitionImpl::~DefinitionImpl()
delete inbodyDocs; delete inbodyDocs;
} }
void DefinitionImpl::init(const char *df,int dl, void DefinitionImpl::init(const char *df, const char *n)
const char *n)
{ {
defFileName = df; defFileName = df;
int lastDot = defFileName.findRev('.'); int lastDot = defFileName.findRev('.');
...@@ -112,7 +109,6 @@ void DefinitionImpl::init(const char *df,int dl, ...@@ -112,7 +109,6 @@ void DefinitionImpl::init(const char *df,int dl,
{ {
defFileExt = defFileName.mid(lastDot); defFileExt = defFileName.mid(lastDot);
} }
defLine = dl;
QCString name = n; QCString name = n;
if (name!="<globalScope>") if (name!="<globalScope>")
{ {
...@@ -280,8 +276,9 @@ Definition::Definition(const char *df,int dl, ...@@ -280,8 +276,9 @@ Definition::Definition(const char *df,int dl,
const char *d,bool isSymbol) const char *d,bool isSymbol)
{ {
m_name = name; m_name = name;
m_defLine = dl;
m_impl = new DefinitionImpl; m_impl = new DefinitionImpl;
m_impl->init(df,dl,name); m_impl->init(df,name);
m_isSymbol = isSymbol; m_isSymbol = isSymbol;
if (isSymbol) addToMap(name,this); if (isSymbol) addToMap(name,this);
_setBriefDescription(b,df,dl); _setBriefDescription(b,df,dl);
...@@ -892,12 +889,17 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) ...@@ -892,12 +889,17 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool /*funcOnly*/) const QCString &text,MemberSDict *members,bool /*funcOnly*/)
{ {
LockingPtr<Definition> lock(this,this); // since this can be a memberDef
// accessing other memberDefs prevent
// it from being flushed to disk
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE"); static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE");
ol.pushGeneratorState(); ol.pushGeneratorState();
if (members) if (members)
{ {
members->sort();
ol.startParagraph(); ol.startParagraph();
ol.parseText(text); ol.parseText(text);
ol.docify(" "); ol.docify(" ");
...@@ -1118,19 +1120,6 @@ QCString Definition::qualifiedName() const ...@@ -1118,19 +1120,6 @@ QCString Definition::qualifiedName() const
count--; count--;
return m_impl->qualifiedName; return m_impl->qualifiedName;
} }
#if 0
if (count>20)
{
printf("Definition::qualifiedName() Infinite recursion detected! Type=%d\n",definitionType());
printf("Trace:\n");
Definition *d = (Definition *)this;
for (int i=0;d && i<20;i++)
{
printf(" %s\n",d->name().data());
d = d->getOuterScope();
}
}
#endif
//printf("start %s::qualifiedName() localName=%s\n",name().data(),m_impl->localName.data()); //printf("start %s::qualifiedName() localName=%s\n",name().data(),m_impl->localName.data());
if (m_impl->outerScope==0) if (m_impl->outerScope==0)
...@@ -1400,6 +1389,9 @@ QCString Definition::briefDescription() const ...@@ -1400,6 +1389,9 @@ QCString Definition::briefDescription() const
QCString Definition::briefDescriptionAsTooltip() const QCString Definition::briefDescriptionAsTooltip() const
{ {
makeResident(); makeResident();
LockingPtr<Definition> lock(this,this); // since this can be a memberDef
// accessing other memberDefs prevent
// it from being flushed to disk
if (m_impl->brief) if (m_impl->brief)
{ {
if (m_impl->brief->tooltip.isEmpty() && !m_impl->brief->doc.isEmpty()) if (m_impl->brief->tooltip.isEmpty() && !m_impl->brief->doc.isEmpty())
...@@ -1470,12 +1462,6 @@ QCString Definition::getDefFileExtension() const ...@@ -1470,12 +1462,6 @@ QCString Definition::getDefFileExtension() const
return m_impl->defFileExt; return m_impl->defFileExt;
} }
int Definition::getDefLine() const
{
makeResident();
return m_impl->defLine;
}
bool Definition::isHidden() const bool Definition::isHidden() const
{ {
makeResident(); makeResident();
...@@ -1559,14 +1545,10 @@ void Definition::setReference(const char *r) ...@@ -1559,14 +1545,10 @@ void Definition::setReference(const char *r)
SrcLangExt Definition::getLanguage() const SrcLangExt Definition::getLanguage() const
{ {
makeResident();
return m_impl->lang; return m_impl->lang;
} }
void Definition::_setSymbolName(const QCString &name)
{
m_symbolName=name;
}
void Definition::setHidden(bool b) void Definition::setHidden(bool b)
{ {
makeResident(); makeResident();
...@@ -1585,13 +1567,21 @@ void Definition::setLocalName(const QCString name) ...@@ -1585,13 +1567,21 @@ void Definition::setLocalName(const QCString name)
m_impl->localName=name; m_impl->localName=name;
} }
void Definition::setLanguage(SrcLangExt lang)
{
makeResident();
m_impl->lang=lang;
}
void Definition::makeResident() const void Definition::makeResident() const
{ {
} }
void Definition::setLanguage(SrcLangExt lang) //---------------
void Definition::_setSymbolName(const QCString &name)
{ {
m_impl->lang=lang; m_symbolName=name;
} }
void Definition::flushToDisk() const void Definition::flushToDisk() const
...@@ -1617,7 +1607,6 @@ void Definition::flushToDisk() const ...@@ -1617,7 +1607,6 @@ void Definition::flushToDisk() const
marshalBool (Doxygen::symbolStorage,m_impl->isArtificial); marshalBool (Doxygen::symbolStorage,m_impl->isArtificial);
marshalObjPointer (Doxygen::symbolStorage,m_impl->outerScope); marshalObjPointer (Doxygen::symbolStorage,m_impl->outerScope);
marshalQCString (Doxygen::symbolStorage,m_impl->defFileName); marshalQCString (Doxygen::symbolStorage,m_impl->defFileName);
marshalInt (Doxygen::symbolStorage,m_impl->defLine);
marshalQCString (Doxygen::symbolStorage,m_impl->defFileExt); marshalQCString (Doxygen::symbolStorage,m_impl->defFileExt);
marshalInt (Doxygen::symbolStorage,(int)m_impl->lang); marshalInt (Doxygen::symbolStorage,(int)m_impl->lang);
marshalUInt(Doxygen::symbolStorage,END_MARKER); marshalUInt(Doxygen::symbolStorage,END_MARKER);
...@@ -1650,7 +1639,6 @@ void Definition::loadFromDisk() const ...@@ -1650,7 +1639,6 @@ void Definition::loadFromDisk() const
m_impl->isArtificial = unmarshalBool (Doxygen::symbolStorage); m_impl->isArtificial = unmarshalBool (Doxygen::symbolStorage);
m_impl->outerScope = (Definition *)unmarshalObjPointer (Doxygen::symbolStorage); m_impl->outerScope = (Definition *)unmarshalObjPointer (Doxygen::symbolStorage);
m_impl->defFileName = unmarshalQCString (Doxygen::symbolStorage); m_impl->defFileName = unmarshalQCString (Doxygen::symbolStorage);
m_impl->defLine = unmarshalInt (Doxygen::symbolStorage);
m_impl->defFileExt = unmarshalQCString (Doxygen::symbolStorage); m_impl->defFileExt = unmarshalQCString (Doxygen::symbolStorage);
m_impl->lang = (SrcLangExt)unmarshalInt(Doxygen::symbolStorage); m_impl->lang = (SrcLangExt)unmarshalInt(Doxygen::symbolStorage);
marker = unmarshalUInt(Doxygen::symbolStorage); marker = unmarshalUInt(Doxygen::symbolStorage);
......
...@@ -179,7 +179,7 @@ class Definition : public DefinitionIntf, public LockableObj ...@@ -179,7 +179,7 @@ class Definition : public DefinitionIntf, public LockableObj
QCString getDefFileExtension() const; QCString getDefFileExtension() const;
/*! returns the line number at which the definition was found */ /*! returns the line number at which the definition was found */
int getDefLine() const; int getDefLine() const { return m_defLine; }
/*! Returns TRUE iff the definition is documented /*! Returns TRUE iff the definition is documented
* (which could be generated documentation) * (which could be generated documentation)
...@@ -348,7 +348,7 @@ class Definition : public DefinitionIntf, public LockableObj ...@@ -348,7 +348,7 @@ class Definition : public DefinitionIntf, public LockableObj
QCString m_name; QCString m_name;
bool m_isSymbol; bool m_isSymbol;
QCString m_symbolName; QCString m_symbolName;
int m_defLine;
}; };
class DefinitionList : public QList<Definition>, public DefinitionIntf class DefinitionList : public QList<Definition>, public DefinitionIntf
......
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
#include "vhdldocgen.h" #include "vhdldocgen.h"
#include "eclipsehelp.h" #include "eclipsehelp.h"
#include "cite.h" #include "cite.h"
#include "filestorage.h"
#include "layout.h" #include "layout.h"
...@@ -1175,6 +1176,29 @@ static void addClassToContext(EntryNav *rootNav) ...@@ -1175,6 +1176,29 @@ static void addClassToContext(EntryNav *rootNav)
fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1); fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
cd->setLanguage(root->lang);
cd->setHidden(root->hidden);
cd->setArtificial(root->artificial);
cd->setTypeConstraints(root->typeConstr);
//printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());
ArgumentList *tArgList =
getTemplateArgumentsFromName(fullName,root->tArgLists);
//printf("class %s template args=%s\n",fullName.data(),
// tArgList ? tempArgListToString(tArgList).data() : "<none>");
cd->setTemplateArguments(tArgList);
cd->setProtection(root->protection);
cd->setIsStatic(root->stat);
// file definition containing the class cd
cd->setBodySegment(root->bodyLine,root->endBodyLine);
cd->setBodyDef(fd);
// see if the class is found inside a namespace
//bool found=addNamespace(root,cd);
// the empty string test is needed for extract all case
cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
cd->insertUsedFile(root->fileName); cd->insertUsedFile(root->fileName);
// add class to the list // add class to the list
...@@ -1415,7 +1439,7 @@ static void processTagLessClasses(ClassDef *rootCd, ...@@ -1415,7 +1439,7 @@ static void processTagLessClasses(ClassDef *rootCd,
ClassDef *tagParentCd, ClassDef *tagParentCd,
const QCString &prefix,int count) const QCString &prefix,int count)
{ {
printf("%d: processTagLessClasses %s\n",count,cd->name().data()); //printf("%d: processTagLessClasses %s\n",count,cd->name().data());
//printf("checking members for %s\n",cd->name().data()); //printf("checking members for %s\n",cd->name().data());
if (cd->getInnerClasses()) if (cd->getInnerClasses())
{ {
...@@ -1433,7 +1457,7 @@ static void processTagLessClasses(ClassDef *rootCd, ...@@ -1433,7 +1457,7 @@ static void processTagLessClasses(ClassDef *rootCd,
ClassDef *icd; ClassDef *icd;
for (it.toFirst();(icd=it.current());++it) for (it.toFirst();(icd=it.current());++it)
{ {
printf(" member %s: type='%s'\n",md->name().data(),type.data()); //printf(" member %s: type='%s'\n",md->name().data(),type.data());
//printf(" comparing '%s'<->'%s'\n",type.data(),icd->name().data()); //printf(" comparing '%s'<->'%s'\n",type.data(),icd->name().data());
if (type.find(icd->name())!=-1) // matching tag less struct/union if (type.find(icd->name())!=-1) // matching tag less struct/union
{ {
...@@ -8900,6 +8924,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav) ...@@ -8900,6 +8924,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav)
bool ambig; bool ambig;
FileDef *fd=findFileDef(Doxygen::inputNameDict,fileName,ambig); FileDef *fd=findFileDef(Doxygen::inputNameDict,fileName,ambig);
ASSERT(fd!=0); ASSERT(fd!=0);
//printf("root->createNavigationIndex for %s\n",fd->name().data());
root->createNavigationIndex(rootNav,g_storage,fd); root->createNavigationIndex(rootNav,g_storage,fd);
s=g_inputFiles.next(); s=g_inputFiles.next();
...@@ -10169,6 +10194,7 @@ void parseInput() ...@@ -10169,6 +10194,7 @@ void parseInput()
if (cacheSize>9) cacheSize=9; if (cacheSize>9) cacheSize=9;
Doxygen::symbolCache = new ObjCache(16+cacheSize); // 16 -> room for 65536 elements, Doxygen::symbolCache = new ObjCache(16+cacheSize); // 16 -> room for 65536 elements,
// ~2.0 MByte "overhead" // ~2.0 MByte "overhead"
//Doxygen::symbolCache = new ObjCache(1); // only to stress test cache behaviour
Doxygen::symbolStorage = new Store; Doxygen::symbolStorage = new Store;
#ifdef HAS_SIGNALS #ifdef HAS_SIGNALS
...@@ -10331,15 +10357,6 @@ void parseInput() ...@@ -10331,15 +10357,6 @@ void parseInput()
* Parse source files * * Parse source files *
**************************************************************************/ **************************************************************************/
parseFiles(root,rootNav);
g_storage->close();
if (!g_storage->open(IO_ReadOnly))
{
err("Failed to open temporary storage file %s for reading",
Doxygen::entryDBFileName.data());
exit(1);
}
//printNavTree(rootNav,0); //printNavTree(rootNav,0);
// we are done with input scanning now, so free up the buffers used by flex // we are done with input scanning now, so free up the buffers used by flex
...@@ -10352,6 +10369,20 @@ void parseInput() ...@@ -10352,6 +10369,20 @@ void parseInput()
//g_storage.close(); //g_storage.close();
//exit(1); //exit(1);
if (Config_getBool("BUILTIN_STL_SUPPORT"))
{
addSTLClasses(rootNav);
}
parseFiles(root,rootNav);
g_storage->close();
if (!g_storage->open(IO_ReadOnly))
{
err("Failed to open temporary storage file %s for reading",
Doxygen::entryDBFileName.data());
exit(1);
}
/************************************************************************** /**************************************************************************
* Gather information * * Gather information *
**************************************************************************/ **************************************************************************/
...@@ -10364,11 +10395,6 @@ void parseInput() ...@@ -10364,11 +10395,6 @@ void parseInput()
buildDirectories(); buildDirectories();
findDirDocumentation(rootNav); findDirDocumentation(rootNav);
if (Config_getBool("BUILTIN_STL_SUPPORT"))
{
addSTLClasses(rootNav);
}
msg("Building namespace list...\n"); msg("Building namespace list...\n");
buildNamespaceList(rootNav); buildNamespaceList(rootNav);
findUsingDirectives(rootNav); findUsingDirectives(rootNav);
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "util.h" #include "util.h"
#include "section.h" #include "section.h"
#include "doxygen.h" #include "doxygen.h"
#include "filestorage.h"
//------------------------------------------------------------------ //------------------------------------------------------------------
......
/******************************************************************************
*
* Copyright (C) 1997-2011 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 <qfile.h>
#include <assert.h>
#include "store.h"
#ifndef FILESTORAGE_H
#define FILESTORAGE_H
/** @brief Store implementation based on a file.
Writing is linear, after that the file is re-opened for reading.
Reading is random (seek+read).
*/
class FileStorage : public StorageIntf
{
public:
FileStorage() : m_readOnly(FALSE) {}
FileStorage( const QString &name) :
m_readOnly(FALSE) { m_file.setName(name); }
int read(char *buf,uint size) { return m_file.readBlock(buf,size); }
int write(const char *buf,uint size) { assert(m_readOnly==FALSE); return m_file.writeBlock(buf,size); }
bool open( int m ) { m_readOnly = m==IO_ReadOnly; return m_file.open(m); }
bool seek(int64 pos) { return m_file.seek(pos); }
int64 pos() const { return m_file.pos(); }
void close() { m_file.close(); }
void setName( const char *name ) { m_file.setName(name); }
private:
bool m_readOnly;
QFile m_file;
};
#if 0 // experimental version using mmap after opening the file as read only.
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
class FileStorage : public StorageIntf
{
public:
FileStorage() : m_readOnly(FALSE), m_map(0), m_off(0), m_size(0) {}
FileStorage( const QString &name) :
m_readOnly(FALSE) { m_file.setName(name); }
void setName( const char *name ) { m_file.setName(name); }
bool open( int m )
{
if (m==IO_ReadOnly)
{
m_readOnly=TRUE;
QString name = m_file.name();
m_file.close();
m_fd = ::open(name.data(),O_RDONLY);
struct stat stat;
fstat(m_fd,&stat);
m_size = stat.st_size;
m_map = mmap(NULL,m_size,PROT_READ,MAP_SHARED,m_fd,0);
if (m_map==MAP_FAILED) perror("mmap failed");
assert(m_map!=MAP_FAILED);
m_off = 0;
return TRUE;
}
else
{
m_readOnly = FALSE;
return m_file.open(m);
}
}
int write(const char *buf,uint size)
{
assert(m_map==0);
return m_file.writeBlock(buf,size);
}
int read(char *buf,uint size)
{
assert(m_map!=0);
memcpy(buf,((char *)m_map)+m_off,size);
m_off+=size;
return size;
}
bool seek(int64 pos)
{
m_off=pos;
return TRUE;
}
int64 pos() const
{
if (m_readOnly)
{
return m_off;
}
else
{
return m_file.pos();
}
}
void close()
{
if (m_readOnly)
{
munmap(m_map,m_size);
::close(m_fd);
exit(1);
}
else
{
m_file.close();
}
}
private:
bool m_readOnly;
QFile m_file;
int m_fd;
void *m_map;
off_t m_off;
off_t m_size;
};
#endif
#endif
/******************************************************************************
*
* $Id$
*
*
* 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.
*
* All output generated with Doxygen is not covered by this license.
*
* The GIF compression code below is based on the file ppmtogif.c of the
* netpbm package. The original copyright message follows:
*
* ---------------------------------------------------------------------------
*
* Copyright (C) 1989 by Jef Poskanzer.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation. This software is provided "as is" without express or
* implied warranty.
*
* ---------------------------------------------------------------------------
*
* The Graphics Interchange Format(c) is the Copyright property of
* CompuServe Incorporated. GIF(sm) is a Service Mark property of
* CompuServe Incorporated.
*/
#include "gifenc.h"
static const unsigned int masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F,
0x001F, 0x003F, 0x007F, 0x00FF,
0x01FF, 0x03FF, 0x07FF, 0x0FFF,
0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };
GifEncoder::GifEncoder(Byte *rawBytes,Color *p,int w,int h, Byte d,
int t)
: colorResolution(8),globalPaletteFlag(0x80),bits(12),
maxMaxCode(1<<bits)
{
width = w;
height = h;
depth = d;
transIndex = t;
palette = p;
data = rawBytes;
dataPtr = data;
}
GifEncoder::~GifEncoder()
{
}
void GifEncoder::writeGIF(QFile &fp)
{
// Write the Magic header
fp.writeBlock( transIndex < 0 ? "GIF87a" : "GIF89a", 6 );
// Write the logical screen descriptor
putWord( width, fp );
putWord( height, fp );
Byte pack = globalPaletteFlag | ((colorResolution-1)<<4) | (depth-1);
putByte( pack, fp );
putByte( 0, fp ); // the background color
putByte( 0, fp ); // no aspect ration defined
// Write global color table
int i; for ( i=0 ; i< (1<<depth) ; i++)
{
putByte(palette[i].red, fp);
putByte(palette[i].green,fp);
putByte(palette[i].blue, fp);
}
if ( transIndex >= 0)
{
// Write graphic control extension (needed for GIF transparancy)
putByte( 0x21, fp); // extension introducer
putByte( 0xf9, fp); // graphic control label
putByte( 4, fp); // block size
putByte( 1, fp); // announce transparacy value
putWord( 0, fp); // zero delay time
putByte( transIndex, fp); // write transparant index
putByte( 0, fp); // end block
}
// Write the image descriptor
putByte( 0x2c, fp); // image separator
putWord( 0, fp); // image left position
putWord( 0, fp); // image top position
putWord( width, fp); // image width
putWord( height, fp); // image height
putByte( 0, fp); // no local color table, no interlacing
// Write table based image data
Byte initCodeSize = depth<=1 ? 2 : depth;
putByte( initCodeSize, fp); // LZW Minimum Code Size
compress( initCodeSize+1, fp);
putByte( 0, fp); // end of blocks
// Write GIF Trailer
putByte( 0x3b, fp);
}
void GifEncoder::compress( int ibits, QFile &outfile )
{
int i;
int entry;
initBits = ibits;
numPixels = width*height;
dataPtr = data;
clearFlag = FALSE;
nBits = initBits;
maxCode = (1<<nBits) -1;
ClearCode = (1 << (initBits - 1));
EOFCode = ClearCode + 1;
freeEntry = ClearCode + 2;
aCount = 0;
curAccum = 0;
curBits = 0;
entry = nextPixel();
int hshift = 0;
int fcode;
for ( fcode = hashTableSize; fcode < 65536L; fcode *= 2L ) ++hshift;
hshift = 8 - hshift; /* set hash code range bound */
clearHashTable(); /* clear hash table */
writeCode( ClearCode,outfile );
int c;
while ( (c = nextPixel()) != EOF )
{
fcode = (c << bits) + entry;
i = (c << hshift) ^ entry; /* xor hashing */
bool found=FALSE;
if (htab[i]==fcode)
{
entry = codetab[i];
found=TRUE;
}
else if (htab[i]>=0)
{
int disp = hashTableSize - i;
if (i==0) disp=1;
do
{
if ((i-=disp)<0) i+=hashTableSize;
if (htab[i]==fcode)
{
entry=codetab[i];
found=TRUE;
}
} while (htab[i]>0 && !found);
}
if (!found)
{
writeCode( entry, outfile );
entry = c;
if ( freeEntry < maxMaxCode )
{
codetab[i] = freeEntry++; /* code -> hashtable */
htab[i] = fcode;
}
else
{
clearHashTable();
freeEntry = ClearCode + 2;
clearFlag = TRUE;
writeCode( ClearCode, outfile );
}
}
}
writeCode( entry, outfile );
writeCode( EOFCode, outfile );
}
void GifEncoder::putWord( Word w, QFile &fp )
{
fp.putch( w & 0xff );
fp.putch( (w>>8) & 0xff );
}
void GifEncoder::putByte( Byte b, QFile &fp )
{
fp.putch( b );
}
void GifEncoder::writeCode( int code, QFile &outfile )
{
curAccum &= masks[ curBits ];
if ( curBits > 0 )
{
curAccum |= (code << curBits);
}
else
{
curAccum = code;
}
curBits += nBits;
while( curBits >= 8 )
{
writeChar( (Byte)(curAccum & 0xff),outfile );
curAccum >>= 8;
curBits -= 8;
}
/*
* If the next entry is going to be too big for the code size,
* then increase it, if possible.
*/
if ( freeEntry > maxCode || clearFlag )
{
if( clearFlag )
{
nBits = initBits;
maxCode = (1<<nBits)-1;
clearFlag = FALSE;
}
else
{
++nBits;
if ( nBits == bits )
maxCode = maxMaxCode;
else
maxCode = (1<<nBits)-1;
}
}
if ( code == EOFCode )
{
/* At EOF, write the rest of the buffer. */
while( curBits > 0 )
{
writeChar( (Byte)(curAccum & 0xff), outfile );
curAccum >>= 8;
curBits -= 8;
}
writePacket(outfile);
}
}
/*
* Add a character to the end of the current packet, and if it is 254
* characters, flush the packet to disk.
*/
void GifEncoder::writeChar( Byte c, QFile &fp )
{
accum[ aCount++ ] = c;
if( aCount >= 254 ) writePacket(fp);
}
/*
* Flush the packet to disk, and reset the accumulator
*/
void GifEncoder::writePacket(QFile &fp)
{
if ( aCount > 0 )
{
fp.putch( aCount );
fp.writeBlock( (const char *)accum, aCount );
aCount = 0;
}
}
void GifEncoder::clearHashTable() /* reset code table */
{
int *htab_p = htab;
int i; for (i=0;i<hashTableSize;i++) *htab_p++ = -1;
}
/******************************************************************************
*
* $Id$
*
*
* 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.
*
* All output generated with Doxygen is not covered by this license.
*
*/
#ifndef _GIFENC_H
#define _GIFENC_H
#include <qfile.h>
typedef unsigned char Byte;
typedef unsigned short Word;
struct Color
{
Byte red;
Byte green;
Byte blue;
};
const int hashTableSize=5003; // size of the hash table
class GifEncoder
{
public:
GifEncoder(Byte *rawBytes,Color *p,int w,int h,Byte d,int t);
~GifEncoder();
void writeGIF(QFile &fp);
protected:
void putWord( Word w, QFile &fp );
void putByte( Byte b, QFile &fp );
void compress(int csize, QFile &fp);
void writeCode(int code, QFile &fp);
void writeChar( Byte c, QFile &fp );
void writePacket(QFile &fp);
void clearHashTable();
int nextPixel()
{
if ( --numPixels < 0) return EOF;
return *dataPtr++;
}
private:
const int colorResolution; // 8 bit for Red, Green and Blue;
const int globalPaletteFlag;
const int bits;
const int maxMaxCode;
// image variables
int width; // image width
int height; // image height
Byte depth; // bits per CLUT entry
int transIndex; // index of the transparant color; -1 = none
Color *palette; // pointer to the color palette
int numPixels; // total number of pixel (i.e. width * height)
Byte *data; // pointer to the image data (one byte per pixel)
Byte *dataPtr; // pointer located at the current pixel.
// compression variables
bool clearFlag; // clear hash table flag
int freeEntry; // first free entry in the hash table
unsigned int curAccum; // encoded bit accumulator
int curBits; // number of bits in curAccum
Byte accum[256]; // Buffer for a packet
int aCount; // Number of characters so far in this 'packet'
int nBits; // number of bits/code
int maxCode; // maximum code, given n_bits
int initBits; // initial number of bits
int EOFCode; // code for signaling the end of the file
int ClearCode; // the clear code for the decompressor
// tables
int htab[hashTableSize]; // the hash table
Word codetab[hashTableSize]; // the code table
};
#endif
...@@ -1005,7 +1005,10 @@ static QCString substituteHtmlKeywords(const QCString &s,const char *title, ...@@ -1005,7 +1005,10 @@ static QCString substituteHtmlKeywords(const QCString &s,const char *title,
} }
// first substitute generic keywords // first substitute generic keywords
QCString result = substituteKeywords(s,title); QCString result = substituteKeywords(s,title,
convertToHtml(Config_getString("PROJECT_NAME")),
convertToHtml(Config_getString("PROJECT_NUMBER")),
convertToHtml(Config_getString("PROJECT_BRIEF")));
// additional HTML only keywords // additional HTML only keywords
result = substitute(result,"$stylesheet",cssFile); result = substitute(result,"$stylesheet",cssFile);
...@@ -2452,6 +2455,7 @@ static bool quickLinkVisible(LayoutNavEntry::Kind kind) ...@@ -2452,6 +2455,7 @@ static bool quickLinkVisible(LayoutNavEntry::Kind kind)
switch (kind) switch (kind)
{ {
case LayoutNavEntry::MainPage: return TRUE; case LayoutNavEntry::MainPage: return TRUE;
case LayoutNavEntry::User: return TRUE;
case LayoutNavEntry::Pages: return indexedPages>0; case LayoutNavEntry::Pages: return indexedPages>0;
case LayoutNavEntry::Modules: return documentedGroups>0; case LayoutNavEntry::Modules: return documentedGroups>0;
case LayoutNavEntry::Namespaces: return documentedNamespaces>0; case LayoutNavEntry::Namespaces: return documentedNamespaces>0;
...@@ -2485,8 +2489,12 @@ static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,Layout ...@@ -2485,8 +2489,12 @@ static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,Layout
{ {
if (entry->visible() && quickLinkVisible(entry->kind())) if (entry->visible() && quickLinkVisible(entry->kind()))
{ {
startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension, QCString url = entry->baseFile();
FALSE,FALSE,relPath); if (entry->kind()!=LayoutNavEntry::User)
{
url+=Doxygen::htmlFileExtension;
}
startQuickIndexItem(t,url,FALSE,FALSE,relPath);
t << fixSpaces(entry->title()); t << fixSpaces(entry->title());
// recursive into child list // recursive into child list
renderQuickLinksAsTree(t,relPath,entry); renderQuickLinksAsTree(t,relPath,entry);
...@@ -2525,7 +2533,12 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath, ...@@ -2525,7 +2533,12 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
{ {
if (entry->visible() && quickLinkVisible(entry->kind())) if (entry->visible() && quickLinkVisible(entry->kind()))
{ {
startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension, QCString url = entry->baseFile();
if (entry->kind()!=LayoutNavEntry::User)
{
url+=Doxygen::htmlFileExtension;
}
startQuickIndexItem(t,url,
entry==hlEntry && entry==hlEntry &&
(entry->children().count()>0 || (entry->children().count()>0 ||
(entry->kind()==kind && !highlightParent) (entry->kind()==kind && !highlightParent)
...@@ -2694,9 +2707,6 @@ void HtmlGenerator::writeSearchPage() ...@@ -2694,9 +2707,6 @@ void HtmlGenerator::writeSearchPage()
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool disableIndex = Config_getBool("DISABLE_INDEX"); static bool disableIndex = Config_getBool("DISABLE_INDEX");
static QCString projectName = Config_getString("PROJECT_NAME"); static QCString projectName = Config_getString("PROJECT_NAME");
static QCString projectBrief = Config_getString("PROJECT_BRIEF");
static QCString projectNumber = Config_getString("PROJECT_NUMBER");
static QCString projectLogo = Config_getString("PROJECT_LOGO");
// OPENSEARCH_PROVIDER { // OPENSEARCH_PROVIDER {
QCString configFileName = Config_getString("HTML_OUTPUT")+"/search-config.php"; QCString configFileName = Config_getString("HTML_OUTPUT")+"/search-config.php";
......
...@@ -956,7 +956,10 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -956,7 +956,10 @@ void LatexGenerator::startIndexSection(IndexSections is)
else else
{ {
QCString header = fileToString(latexHeader); QCString header = fileToString(latexHeader);
t << substituteKeywords(header,0); t << substituteKeywords(header,0,
Config_getString("PROJECT_NAME"),
Config_getString("PROJECT_NUMBER"),
Config_getString("PROJECT_BRIEF"));
} }
} }
break; break;
...@@ -1351,7 +1354,10 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -1351,7 +1354,10 @@ void LatexGenerator::endIndexSection(IndexSections is)
else else
{ {
QCString footer = fileToString(latexFooter); QCString footer = fileToString(latexFooter);
t << substituteKeywords(footer,0); t << substituteKeywords(footer,0,
Config_getString("PROJECT_NAME"),
Config_getString("PROJECT_NUMBER"),
Config_getString("PROJECT_BRIEF"));
} }
break; break;
} }
......
...@@ -895,6 +895,13 @@ class LayoutParser : public QXmlDefaultHandler ...@@ -895,6 +895,13 @@ class LayoutParser : public QXmlDefaultHandler
theTranslator->trExamplesDescription(), theTranslator->trExamplesDescription(),
"examples" "examples"
}, },
{ "user",
LayoutNavEntry::User,
QCString(),
QCString(),
QCString(),
"user"
},
{ 0, // end of list { 0, // end of list
(LayoutNavEntry::Kind)0, (LayoutNavEntry::Kind)0,
QCString(), QCString(),
...@@ -945,6 +952,11 @@ class LayoutParser : public QXmlDefaultHandler ...@@ -945,6 +952,11 @@ class LayoutParser : public QXmlDefaultHandler
{ {
intro = mapping[i].intro; intro = mapping[i].intro;
} }
QCString url = convertToQCString(attrib.value("url"));
if (mapping[i].kind==LayoutNavEntry::User && !url.isEmpty())
{
baseFile=url;
}
// create new item and make it the new root // create new item and make it the new root
m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title,intro); m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title,intro);
} }
......
...@@ -123,7 +123,8 @@ struct LayoutNavEntry ...@@ -123,7 +123,8 @@ struct LayoutNavEntry
Files, Files,
FileGlobals, FileGlobals,
Dirs, Dirs,
Examples Examples,
User
}; };
LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QCString &bf, LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QCString &bf,
const QCString &tl,const QCString &intro,bool prepend=FALSE) const QCString &tl,const QCString &intro,bool prepend=FALSE)
......
...@@ -644,9 +644,9 @@ MemberSDict *unmarshalMemberSDict(StorageIntf *s) ...@@ -644,9 +644,9 @@ MemberSDict *unmarshalMemberSDict(StorageIntf *s)
//printf(" unmarshaling key %s\n",key.data()); //printf(" unmarshaling key %s\n",key.data());
MemberDef *md = (MemberDef *)unmarshalObjPointer(s); MemberDef *md = (MemberDef *)unmarshalObjPointer(s);
//printf(" unmarshalMemberSDict i=%d key=%s md=%p\n",i,key.data(),md); //printf(" unmarshalMemberSDict i=%d key=%s md=%p\n",i,key.data(),md);
result->append(key,md); // note: this can lead to unmarshalling another object! result->append(key,md);
} }
result->sort();
//printf("--- end unmarshalMemberSDict\n"); //printf("--- end unmarshalMemberSDict\n");
return result; return result;
} }
......
/******************************************************************************
*
* Copyright (C) 1997-2011 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.
*
*/
#ifndef MARSHAL_H #ifndef MARSHAL_H
#define MARSHAL_H #define MARSHAL_H
...@@ -25,58 +40,6 @@ class Entry; ...@@ -25,58 +40,6 @@ class Entry;
#define NULL_LIST 0xffffffff #define NULL_LIST 0xffffffff
class FileStorage : public QFile, public StorageIntf
{
public:
FileStorage() : QFile() {}
FileStorage( const QString &name) : QFile(name) {}
int read(char *buf,uint size) { return QFile::readBlock(buf,size); }
int write(const char *buf,uint size) { return QFile::writeBlock(buf,size); }
};
class StreamStorage : public StorageIntf
{
public:
StreamStorage()
{
m_data=0;
m_offset=0;
m_len=0;
}
~StreamStorage()
{
delete m_data;
}
StreamStorage(char *data,uint len)
{
m_data=data;
m_offset=0;
m_len=len;
}
int read(char *buf,uint size)
{
int bytesLeft = QMIN((int)size,m_len-m_offset);
if (bytesLeft>0) memcpy(buf,m_data,bytesLeft);
m_offset+=bytesLeft;
return bytesLeft;
}
int write(const char *buf,uint size)
{
m_data=(char *)realloc(m_data,m_offset+size);
memcpy(m_data+m_offset,buf,size);
m_offset+=size;
m_len+=size;
return size;
}
void rewind() { m_offset=0; }
char *data() const { return m_data; }
int size() { return m_len; }
private:
char *m_data;
int m_offset;
int m_len;
};
//----- marshaling function: datatype -> byte stream -------------------- //----- marshaling function: datatype -> byte stream --------------------
void marshalInt(StorageIntf *s,int v); void marshalInt(StorageIntf *s,int v);
......
...@@ -49,6 +49,10 @@ ...@@ -49,6 +49,10 @@
#define snprintf _snprintf #define snprintf _snprintf
#endif #endif
// Put this macro at the start of any method of MemberDef that can directly
// or indirectly access other MemberDefs. It prevents that the content
// pointed to by m_impl gets flushed to disk in the middle of the method call!
#define KEEP_RESIDENT_DURING_CALL makeResident();LockingPtr<MemberDef> lock(this,this)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -693,6 +697,8 @@ void MemberDef::moveTo(Definition *scope) ...@@ -693,6 +697,8 @@ void MemberDef::moveTo(Definition *scope)
MemberDef::~MemberDef() MemberDef::~MemberDef()
{ {
delete m_impl; delete m_impl;
//printf("%p: ~MemberDef()\n",this);
m_impl=0;
if (m_cacheHandle!=-1) if (m_cacheHandle!=-1)
{ {
Doxygen::symbolCache->del(m_cacheHandle); Doxygen::symbolCache->del(m_cacheHandle);
...@@ -858,7 +864,7 @@ QCString MemberDef::getReference() const ...@@ -858,7 +864,7 @@ QCString MemberDef::getReference() const
QCString MemberDef::anchor() const QCString MemberDef::anchor() const
{ {
makeResident(); KEEP_RESIDENT_DURING_CALL;
QCString result=m_impl->anc; QCString result=m_impl->anc;
if (m_impl->groupAlias) return m_impl->groupAlias->anchor(); if (m_impl->groupAlias) return m_impl->groupAlias->anchor();
if (m_impl->templateMaster) return m_impl->templateMaster->anchor(); if (m_impl->templateMaster) return m_impl->templateMaster->anchor();
...@@ -882,7 +888,7 @@ QCString MemberDef::anchor() const ...@@ -882,7 +888,7 @@ QCString MemberDef::anchor() const
void MemberDef::_computeLinkableInProject() void MemberDef::_computeLinkableInProject()
{ {
makeResident(); KEEP_RESIDENT_DURING_CALL;
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
static bool extractStatic = Config_getBool("EXTRACT_STATIC"); static bool extractStatic = Config_getBool("EXTRACT_STATIC");
m_isLinkableCached = 2; // linkable m_isLinkableCached = 2; // linkable
...@@ -1018,11 +1024,10 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) ...@@ -1018,11 +1024,10 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
FileDef *fd,GroupDef *gd,bool onlyText) FileDef *fd,GroupDef *gd,bool onlyText)
{ {
KEEP_RESIDENT_DURING_CALL;
SrcLangExt lang = getLanguage();
//static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
makeResident();
SrcLangExt lang = getLanguage();
LockingPtr<MemberDef> lock(this,this);
QCString sep = getLanguageSpecificSeparator(lang); QCString sep = getLanguageSpecificSeparator(lang);
QCString n = name(); QCString n = name();
if (!hideScopeNames) if (!hideScopeNames)
...@@ -1069,9 +1074,12 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, ...@@ -1069,9 +1074,12 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
*/ */
ClassDef *MemberDef::getClassDefOfAnonymousType() ClassDef *MemberDef::getClassDefOfAnonymousType()
{ {
// split KEEP_RESIDENT_DURING_CALL for performance
makeResident(); makeResident();
if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType; if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType;
LockingPtr<MemberDef> lock(this,this); LockingPtr<MemberDef> lock(this,this); // since this memberDef can access
// other memberDefs prevent it from
// being flushed to disk halfway
QCString cname; QCString cname;
if (getClassDef()!=0) if (getClassDef()!=0)
...@@ -1139,8 +1147,8 @@ bool MemberDef::isBriefSectionVisible() const ...@@ -1139,8 +1147,8 @@ bool MemberDef::isBriefSectionVisible() const
// "", //getFileDef()->name().data(), // "", //getFileDef()->name().data(),
// argsString()); // argsString());
makeResident(); KEEP_RESIDENT_DURING_CALL;
LockingPtr<MemberDef> lock(this,this);
MemberGroupInfo *info = Doxygen::memGrpInfoDict[m_impl->grpId]; MemberGroupInfo *info = Doxygen::memGrpInfoDict[m_impl->grpId];
//printf("name=%s m_impl->grpId=%d info=%p\n",name().data(),m_impl->grpId,info); //printf("name=%s m_impl->grpId=%d info=%p\n",name().data(),m_impl->grpId,info);
//QCString *pMemGrp = Doxygen::memberDocDict[grpId]; //QCString *pMemGrp = Doxygen::memberDocDict[grpId];
...@@ -1232,9 +1240,8 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1232,9 +1240,8 @@ void MemberDef::writeDeclaration(OutputList &ol,
// hide enum value, since they appear already as part of the enum, unless they // hide enum value, since they appear already as part of the enum, unless they
// are explicitly grouped. // are explicitly grouped.
makeResident(); KEEP_RESIDENT_DURING_CALL;
if (!inGroup && m_impl->mtype==EnumValue) return; if (!inGroup && m_impl->mtype==EnumValue) return;
LockingPtr<MemberDef> lock(this,this);
// hide members whose brief section should not be visible // hide members whose brief section should not be visible
//if (!isBriefSectionVisible()) return; //if (!isBriefSectionVisible()) return;
...@@ -1680,7 +1687,8 @@ bool MemberDef::isDetailedSectionLinkable() const ...@@ -1680,7 +1687,8 @@ bool MemberDef::isDetailedSectionLinkable() const
static bool extractStatic = Config_getBool("EXTRACT_STATIC"); static bool extractStatic = Config_getBool("EXTRACT_STATIC");
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
makeResident(); KEEP_RESIDENT_DURING_CALL;
// the member has details documentation for any of the following reasons // the member has details documentation for any of the following reasons
bool docFilter = bool docFilter =
// treat everything as documented // treat everything as documented
...@@ -1775,10 +1783,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1775,10 +1783,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if ( !hasDocs ) return; if ( !hasDocs ) return;
if (isEnumValue() && !showEnumValues) return; if (isEnumValue() && !showEnumValues) return;
makeResident(); KEEP_RESIDENT_DURING_CALL;
SrcLangExt lang = getLanguage(); SrcLangExt lang = getLanguage();
bool optVhdl = lang==SrcLangExt_VHDL; bool optVhdl = lang==SrcLangExt_VHDL;
LockingPtr<MemberDef> lock(this,this);
QCString scopeName = scName; QCString scopeName = scName;
QCString memAnchor = anchor(); QCString memAnchor = anchor();
...@@ -2532,6 +2540,8 @@ static QCString simplifyTypeForTable(const QCString &s) ...@@ -2532,6 +2540,8 @@ static QCString simplifyTypeForTable(const QCString &s)
void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container) void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
{ {
KEEP_RESIDENT_DURING_CALL;
Definition *scope = getOuterScope(); Definition *scope = getOuterScope();
QCString doxyName = name(); QCString doxyName = name();
QCString doxyArgs = argsString(); QCString doxyArgs = argsString();
...@@ -2818,8 +2828,7 @@ void MemberDef::setNamespace(NamespaceDef *nd) ...@@ -2818,8 +2828,7 @@ void MemberDef::setNamespace(NamespaceDef *nd)
MemberDef *MemberDef::createTemplateInstanceMember( MemberDef *MemberDef::createTemplateInstanceMember(
ArgumentList *formalArgs,ArgumentList *actualArgs) ArgumentList *formalArgs,ArgumentList *actualArgs)
{ {
makeResident(); KEEP_RESIDENT_DURING_CALL;
LockingPtr<MemberDef> lock(this,this);
//printf(" Member %s %s %s\n",typeString(),name().data(),argsString()); //printf(" Member %s %s %s\n",typeString(),name().data(),argsString());
ArgumentList *actualArgList = 0; ArgumentList *actualArgList = 0;
if (m_impl->defArgList) if (m_impl->defArgList)
...@@ -2896,7 +2905,7 @@ void MemberDef::setInitializer(const char *initializer) ...@@ -2896,7 +2905,7 @@ void MemberDef::setInitializer(const char *initializer)
void MemberDef::addListReference(Definition *) void MemberDef::addListReference(Definition *)
{ {
makeResident(); KEEP_RESIDENT_DURING_CALL;
static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C"); static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
//static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); //static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
//static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
...@@ -2978,6 +2987,7 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl) ...@@ -2978,6 +2987,7 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl)
Specifier MemberDef::virtualness(int count) const Specifier MemberDef::virtualness(int count) const
{ {
KEEP_RESIDENT_DURING_CALL;
if (count>25) if (count>25)
{ {
warn(getDefFileName(),getDefLine(), warn(getDefFileName(),getDefLine(),
...@@ -2999,7 +3009,7 @@ Specifier MemberDef::virtualness(int count) const ...@@ -2999,7 +3009,7 @@ Specifier MemberDef::virtualness(int count) const
void MemberDef::_computeIsConstructor() void MemberDef::_computeIsConstructor()
{ {
makeResident(); KEEP_RESIDENT_DURING_CALL;
m_isConstructorCached=1; // FALSE m_isConstructorCached=1; // FALSE
if (m_impl->classDef) if (m_impl->classDef)
{ {
...@@ -3055,7 +3065,7 @@ bool MemberDef::isConstructor() const ...@@ -3055,7 +3065,7 @@ bool MemberDef::isConstructor() const
void MemberDef::_computeIsDestructor() void MemberDef::_computeIsDestructor()
{ {
makeResident(); KEEP_RESIDENT_DURING_CALL;
bool isDestructor; bool isDestructor;
if (m_impl->isDMember) // for D if (m_impl->isDMember) // for D
{ {
...@@ -3097,8 +3107,8 @@ bool MemberDef::isDestructor() const ...@@ -3097,8 +3107,8 @@ bool MemberDef::isDestructor() const
void MemberDef::writeEnumDeclaration(OutputList &typeDecl, void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd) ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd)
{ {
makeResident(); KEEP_RESIDENT_DURING_CALL;
LockingPtr<MemberDef> lock(this,this);
int enumMemCount=0; int enumMemCount=0;
QList<MemberDef> *fmdl=m_impl->enumFields; QList<MemberDef> *fmdl=m_impl->enumFields;
...@@ -3752,26 +3762,6 @@ bool MemberDef::hasDocumentedReturnType() const ...@@ -3752,26 +3762,6 @@ bool MemberDef::hasDocumentedReturnType() const
return m_impl->hasDocumentedReturnType; return m_impl->hasDocumentedReturnType;
} }
#if 0
int MemberDef::inbodyLine() const
{
makeResident();
return m_impl->inbodyLine;
}
QCString MemberDef::inbodyFile() const
{
makeResident();
return m_impl->inbodyFile;
}
const QCString &MemberDef::inbodyDocumentation() const
{
makeResident();
return m_impl->inbodyDocs;
}
#endif
ClassDef *MemberDef::relatedAlso() const ClassDef *MemberDef::relatedAlso() const
{ {
makeResident(); makeResident();
...@@ -4175,12 +4165,66 @@ void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const ...@@ -4175,12 +4165,66 @@ void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const
//printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl); //printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
} }
void MemberDef::copyArgumentNames(MemberDef *bmd)
{
makeResident();
{
LockingPtr<ArgumentList> arguments = bmd->argumentList();
if (m_impl->defArgList && arguments!=0)
{
ArgumentListIterator aliDst(*m_impl->defArgList);
ArgumentListIterator aliSrc(*arguments);
Argument *argDst, *argSrc;
for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc)
{
argDst->name = argSrc->name;
}
}
}
{
LockingPtr<ArgumentList> arguments = bmd->declArgumentList();
if (m_impl->declArgList && arguments!=0)
{
ArgumentListIterator aliDst(*m_impl->declArgList);
ArgumentListIterator aliSrc(*arguments);
Argument *argDst, *argSrc;
for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc)
{
argDst->name = argSrc->name;
}
}
}
}
static void invalidateCachedTypesInArgumentList(ArgumentList *al)
{
if (al)
{
ArgumentListIterator ali(*al);
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
a->canType.resize(0);
}
}
}
void MemberDef::invalidateCachedArgumentTypes()
{
makeResident();
invalidateCachedTypesInArgumentList(m_impl->defArgList);
invalidateCachedTypesInArgumentList(m_impl->declArgList);
}
//-----------------------------------------------------------------
void MemberDef::flushToDisk() const void MemberDef::flushToDisk() const
{ {
if (isLocked()) return; if (isLocked()) return;
MemberDef *that = (MemberDef*)this; MemberDef *that = (MemberDef*)this;
that->m_storagePos = Doxygen::symbolStorage->alloc(); that->m_storagePos = Doxygen::symbolStorage->alloc();
//printf("%p: MemberDef::flushToDisk()\n",this); //printf("%p: MemberDef::flushToDisk() m_impl=%p\n",this,m_impl);
// write the definition base class member variables to disk // write the definition base class member variables to disk
Definition::flushToDisk(); Definition::flushToDisk();
...@@ -4268,10 +4312,10 @@ void MemberDef::flushToDisk() const ...@@ -4268,10 +4312,10 @@ void MemberDef::flushToDisk() const
void MemberDef::loadFromDisk() const void MemberDef::loadFromDisk() const
{ {
//printf("%p: MemberDef::loadFromDisk()\n",this);
MemberDef *that = (MemberDef *)this; MemberDef *that = (MemberDef *)this;
if (isLocked()) if (isLocked())
{ {
//printf("%p: loadFromDisk() locked: so still in memory\n",this);
assert(m_impl!=0); assert(m_impl!=0);
return; return;
} }
...@@ -4283,6 +4327,7 @@ void MemberDef::loadFromDisk() const ...@@ -4283,6 +4327,7 @@ void MemberDef::loadFromDisk() const
//printf("%p: loading specific part\n",this); //printf("%p: loading specific part\n",this);
that->m_impl = new MemberDefImpl; that->m_impl = new MemberDefImpl;
//printf("%p: MemberDef::loadFromDisk(): m_impl=%p\n",this,m_impl);
uint marker = unmarshalUInt(Doxygen::symbolStorage); uint marker = unmarshalUInt(Doxygen::symbolStorage);
assert(marker==START_MARKER); assert(marker==START_MARKER);
...@@ -4358,6 +4403,8 @@ void MemberDef::loadFromDisk() const ...@@ -4358,6 +4403,8 @@ void MemberDef::loadFromDisk() const
m_impl->category = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage); m_impl->category = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
marker = unmarshalUInt(Doxygen::symbolStorage); marker = unmarshalUInt(Doxygen::symbolStorage);
assert(marker==END_MARKER); assert(marker==END_MARKER);
//printf("%p: MemberDef::loadFromDisk(): sorting\n",this);
} }
void MemberDef::makeResident() const void MemberDef::makeResident() const
...@@ -4371,6 +4418,7 @@ void MemberDef::makeResident() const ...@@ -4371,6 +4418,7 @@ void MemberDef::makeResident() const
//printf("adding %s to cache, handle=%d\n",m_impl->name.data(),that->m_cacheHandle); //printf("adding %s to cache, handle=%d\n",m_impl->name.data(),that->m_cacheHandle);
if (victim) // cache was full, victim was the least recently used item and has to go if (victim) // cache was full, victim was the least recently used item and has to go
{ {
//printf("%p: makeResident(): cache full %p::saveToDisk(): m_impl=%p\n",this,victim,victim->m_impl);
victim->m_cacheHandle=-1; // invalidate cache handle victim->m_cacheHandle=-1; // invalidate cache handle
victim->saveToDisk(); // store the item on disk victim->saveToDisk(); // store the item on disk
} }
...@@ -4404,6 +4452,7 @@ void MemberDef::saveToDisk() const ...@@ -4404,6 +4452,7 @@ void MemberDef::saveToDisk() const
{ {
assert(m_impl!=0); assert(m_impl!=0);
MemberDef *that = (MemberDef *)this; MemberDef *that = (MemberDef *)this;
//printf("%p: saveToDisk(): m_impl=%p\n",this,m_impl);
if (isLocked()) // cannot flush the item as it is locked if (isLocked()) // cannot flush the item as it is locked
{ {
that->m_flushPending=TRUE; // flush when unlocked that->m_flushPending=TRUE; // flush when unlocked
...@@ -4433,6 +4482,7 @@ void MemberDef::unlock() const ...@@ -4433,6 +4482,7 @@ void MemberDef::unlock() const
{ {
if (m_flushPending && !isLocked()) if (m_flushPending && !isLocked())
{ {
//printf("%p: flush after unlock\n",this);
// write a the new (possibly modified) instance to disk // write a the new (possibly modified) instance to disk
flushToDisk(); flushToDisk();
// end to write sequence (unless nothing was written due to the lock) // end to write sequence (unless nothing was written due to the lock)
...@@ -4440,55 +4490,3 @@ void MemberDef::unlock() const ...@@ -4440,55 +4490,3 @@ void MemberDef::unlock() const
} }
} }
void MemberDef::copyArgumentNames(MemberDef *bmd)
{
makeResident();
{
LockingPtr<ArgumentList> arguments = bmd->argumentList();
if (m_impl->defArgList && arguments!=0)
{
ArgumentListIterator aliDst(*m_impl->defArgList);
ArgumentListIterator aliSrc(*arguments);
Argument *argDst, *argSrc;
for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc)
{
argDst->name = argSrc->name;
}
}
}
{
LockingPtr<ArgumentList> arguments = bmd->declArgumentList();
if (m_impl->declArgList && arguments!=0)
{
ArgumentListIterator aliDst(*m_impl->declArgList);
ArgumentListIterator aliSrc(*arguments);
Argument *argDst, *argSrc;
for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc)
{
argDst->name = argSrc->name;
}
}
}
}
static void invalidateCachedTypesInArgumentList(ArgumentList *al)
{
if (al)
{
ArgumentListIterator ali(*al);
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
a->canType.resize(0);
}
}
}
void MemberDef::invalidateCachedArgumentTypes()
{
makeResident();
invalidateCachedTypesInArgumentList(m_impl->defArgList);
invalidateCachedTypesInArgumentList(m_impl->declArgList);
}
...@@ -808,10 +808,22 @@ void MemberList::setNeedsSorting(bool b) ...@@ -808,10 +808,22 @@ void MemberList::setNeedsSorting(bool b)
int MemberSDict::compareItems(GCI item1, GCI item2) int MemberSDict::compareItems(GCI item1, GCI item2)
{ {
// NOTE: this function can be triggered from unmarshalMemberSDict
// so it may not result in called to MemberDef::makeResident().
// As a result, the data returned by MemberDef::name() and
// MemberDef::getDefLine() will always be kept in memory.
MemberDef *c1=(MemberDef *)item1; MemberDef *c1=(MemberDef *)item1;
MemberDef *c2=(MemberDef *)item2; MemberDef *c2=(MemberDef *)item2;
//printf("MemberSDict::compareItems(%s,%s)\n",c1->name().data(),c2->name().data());
int cmp = stricmp(c1->name(),c2->name()); int cmp = stricmp(c1->name(),c2->name());
return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine(); if (cmp)
{
return cmp;
}
else
{
return c1->getDefLine()-c2->getDefLine();
}
} }
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <errno.h> #include <errno.h>
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#include <ctype.h>
#define BLOCK_SIZE 512 // should be >8 and a power of 2 #define BLOCK_SIZE 512 // should be >8 and a power of 2
#define BLOCK_POINTER_SIZE sizeof(portable_off_t) #define BLOCK_POINTER_SIZE sizeof(portable_off_t)
...@@ -111,7 +112,7 @@ portable_off_t Store::alloc() ...@@ -111,7 +112,7 @@ portable_off_t Store::alloc()
portable_off_t pos; portable_off_t pos;
if (m_head==0) // allocate new block if (m_head==0) // allocate new block
{ {
//printf("alloc: new block\n"); //printf("alloc: new block, pos=%lld\n",(long long)m_front);
if (portable_fseek(m_file,0,SEEK_END)==-1) // go to end of the file if (portable_fseek(m_file,0,SEEK_END)==-1) // go to end of the file
{ {
fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno)); fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno));
...@@ -130,7 +131,7 @@ portable_off_t Store::alloc() ...@@ -130,7 +131,7 @@ portable_off_t Store::alloc()
} }
else // reuse freed block else // reuse freed block
{ {
//printf("alloc: reuse block: m_head=%d\n",(int)m_head); //printf("alloc: reuse block: pos=%lld\n",(long long)m_head->pos);
Node *node = m_head; Node *node = m_head;
pos = node->pos; pos = node->pos;
// point head to next free item // point head to next free item
...@@ -268,7 +269,7 @@ void Store::end() ...@@ -268,7 +269,7 @@ void Store::end()
void Store::release(portable_off_t pos) void Store::release(portable_off_t pos)
{ {
STORE_ASSERT(m_state==Reading); STORE_ASSERT(m_state==Reading);
//printf("%x: Store::release\n",(int)pos); //printf("release: block pos=%lld\n",(long long)pos);
STORE_ASSERT(pos>0 && (pos & (BLOCK_SIZE-1))==0); STORE_ASSERT(pos>0 && (pos & (BLOCK_SIZE-1))==0);
// goto end of the block // goto end of the block
portable_off_t cur = pos, next; portable_off_t cur = pos, next;
...@@ -396,6 +397,30 @@ void Store::printStats() ...@@ -396,6 +397,30 @@ void Store::printStats()
BLOCK_SIZE,(long)(m_front/BLOCK_SIZE),m_reads,m_writes); BLOCK_SIZE,(long)(m_front/BLOCK_SIZE),m_reads,m_writes);
} }
void Store::dumpBlock(portable_off_t s,portable_off_t e)
{
portable_fseek(m_file,s,SEEK_SET);
int size = (int)(e-s);
uchar *buf = new uchar[size];
fread(buf,size,1,m_file);
int i,j;
for (i=0;i<size;i+=16)
{
printf("%08x: ",(int)s+i);
for (j=i;j<QMIN(size,i+16);j++)
{
printf("%02x ",buf[i+j]);
}
printf(" ");
for (j=i;j<QMIN(size,i+16);j++)
{
printf("%c",(buf[i+j]>=32 && buf[i+j]<128)?buf[i+j]:'.');
}
printf("\n");
}
portable_fseek(m_file,m_cur,SEEK_SET);
}
#ifdef STORE_TEST #ifdef STORE_TEST
int main() int main()
......
...@@ -94,6 +94,10 @@ class Store : public StorageIntf ...@@ -94,6 +94,10 @@ class Store : public StorageIntf
void printStats(); void printStats();
portable_off_t pos() const { return m_cur; }
void dumpBlock(portable_off_t start,portable_off_t end);
private: private:
enum State enum State
{ {
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* *
* *
* *
* Copyright (C) 1997-2010 by Dimitri van Heesch. * Copyright (C) 1997-2011 by Dimitri van Heesch.
* Copyright (C) 2010 by Rene Zaumseil * Copyright (C) 2010-2011 by Rene Zaumseil
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -50,10 +50,10 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 ...@@ -50,10 +50,10 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5
const char * PersianDigits[] = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" }; const char * PersianDigits[] = { "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" };
for(unsigned i=0; i<str.length(); i++) for(unsigned i=0; i<str.length(); i++)
{ {
if (str[i] >= '0' && str[i] <= '9') if (str.at(i) >= '0' && str.at(i) <= '9')
output += PersianDigits[ str[i] - '0' ]; output += PersianDigits[ str.at(i) - '0' ];
else else
output += str[i]; output += str.at(i);
} }
return output; return output;
......
...@@ -76,6 +76,7 @@ ...@@ -76,6 +76,7 @@
* | Corrected some misspelling thanx to Christophe C. * | Corrected some misspelling thanx to Christophe C.
* -------------+------------------------------------------------------------ * -------------+------------------------------------------------------------
*/ */
#ifndef TRANSLATOR_FR_H #ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H #define TRANSLATOR_FR_H
...@@ -100,7 +101,7 @@ ...@@ -100,7 +101,7 @@
// Translator class (by the local maintainer) when the localized // Translator class (by the local maintainer) when the localized
// translator is made up-to-date again. // translator is made up-to-date again.
class TranslatorFrench : public TranslatorAdapter_1_6_3 class TranslatorFrench : public Translator
{ {
public: public:
...@@ -113,8 +114,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -113,8 +114,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* the identification used in language.cpp. * the identification used in language.cpp.
*/ */
virtual QCString idLanguage() virtual QCString idLanguage()
{ { return "french"; }
return "french"; }
/*! Used to get the LaTeX command(s) for the language support. /*! Used to get the LaTeX command(s) for the language support.
* This method should return string with commands that switch * This method should return string with commands that switch
...@@ -132,7 +132,8 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -132,7 +132,8 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
return "\\usepackage[french]{babel}\n"; return "\\usepackage[french]{babel}\n";
} }
/*! return the language charset. This will be used for the HTML output */ /*! return the language charset. This will be used
when transcoding the translatable strings in this file to UTF-8 */
virtual QCString idLanguageCharset() virtual QCString idLanguageCharset()
{ {
return "iso-8859-1"; return "iso-8859-1";
...@@ -142,33 +143,27 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -142,33 +143,27 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! used in the compound documentation before a list of related functions. */ /*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions() virtual QCString trRelatedFunctions()
{ { return "Fonctions associées"; }
return "Fonctions associées"; }
/*! subscript for the related functions. */ /*! subscript for the related functions. */
virtual QCString trRelatedSubscript() virtual QCString trRelatedSubscript()
{ { return "(Notez que ce ne sont pas des fonctions membres)"; }
return "(Noter que ce ne sont pas des fonctions membres)"; }
/*! header that is put before the detailed description of files, classes and namespaces. */ /*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription() virtual QCString trDetailedDescription()
{ { return "Description détaillée"; }
return "Description détaillée"; }
/*! header that is put before the list of typedefs. */ /*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation() virtual QCString trMemberTypedefDocumentation()
{ { return "Documentation des définitions de type membres"; }
return "Documentation des définitions de type membres"; }
/*! header that is put before the list of enumerations. */ /*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation() virtual QCString trMemberEnumerationDocumentation()
{ { return "Documentation des énumérations membres"; }
return "Documentation des énumérations membres"; }
/*! header that is put before the list of member functions. */ /*! header that is put before the list of member functions. */
virtual QCString trMemberFunctionDocumentation() virtual QCString trMemberFunctionDocumentation()
{ { return "Documentation des fonctions membres"; }
return "Documentation des fonctions membres"; }
/*! header that is put before the list of member attributes. */ /*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation() virtual QCString trMemberDataDocumentation()
...@@ -185,28 +180,23 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -185,28 +180,23 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! this is the text of a link put after brief descriptions. */ /*! this is the text of a link put after brief descriptions. */
virtual QCString trMore() virtual QCString trMore()
{ { return "Plus de détails..."; }
return "Plus de détails..."; }
/*! put in the class documentation */ /*! put in the class documentation */
virtual QCString trListOfAllMembers() virtual QCString trListOfAllMembers()
{ { return "Liste de tous les membres"; }
return "Liste de tous les membres"; }
/*! used as the title of the "list of all members" page of a class */ /*! used as the title of the "list of all members" page of a class */
virtual QCString trMemberList() virtual QCString trMemberList()
{ { return "Liste des membres"; }
return "Liste des membres"; }
/*! this is the first part of a sentence that is followed by a class name */ /*! this is the first part of a sentence that is followed by a class name */
virtual QCString trThisIsTheListOfAllMembers() virtual QCString trThisIsTheListOfAllMembers()
{ { return "Liste complète des membres de "; }
return "Liste complète des membres de "; }
/*! this is the remainder of the sentence after the class name */ /*! this is the remainder of the sentence after the class name */
virtual QCString trIncludingInheritedMembers() virtual QCString trIncludingInheritedMembers()
{ { return ", y compris les membres hérités :"; }
return ", y compris les membres hérités :"; }
/*! this is put at the author sections at the bottom of man pages. /*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name. * parameter s is name of the project name.
...@@ -220,18 +210,15 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -220,18 +210,15 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! put after an enum name in the list of all members */ /*! put after an enum name in the list of all members */
virtual QCString trEnumName() virtual QCString trEnumName()
{ { return "énumération"; }
return "énumération"; }
/*! put after an enum value in the list of all members */ /*! put after an enum value in the list of all members */
virtual QCString trEnumValue() virtual QCString trEnumValue()
{ { return "valeur énumérée"; }
return "valeur énumérée"; }
/*! put after an undocumented member in the list of all members */ /*! put after an undocumented member in the list of all members */
virtual QCString trDefinedIn() virtual QCString trDefinedIn()
{ { return "défini dans"; }
return "défini dans"; }
// quick reference sections // quick reference sections
...@@ -239,13 +226,11 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -239,13 +226,11 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* compounds or files (see the \\group command). * compounds or files (see the \\group command).
*/ */
virtual QCString trModules() virtual QCString trModules()
{ { return "Modules"; }
return "Modules"; }
/*! This is put above each page as a link to the class hierarchy */ /*! This is put above each page as a link to the class hierarchy */
virtual QCString trClassHierarchy() virtual QCString trClassHierarchy()
{ { return "Hiérarchie des classes"; }
return "Hiérarchie des classes"; }
/*! This is put above each page as a link to the list of annotated classes */ /*! This is put above each page as a link to the list of annotated classes */
virtual QCString trCompoundList() virtual QCString trCompoundList()
...@@ -262,8 +247,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -262,8 +247,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! This is put above each page as a link to the list of documented files */ /*! This is put above each page as a link to the list of documented files */
virtual QCString trFileList() virtual QCString trFileList()
{ { return "Liste des fichiers"; }
return "Liste des fichiers"; }
/*! This is put above each page as a link to all members of compounds. */ /*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers() virtual QCString trCompoundMembers()
...@@ -283,7 +267,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -283,7 +267,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
return "Portée globale"; return "Variables globale";
} }
else else
{ {
...@@ -293,23 +277,19 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -293,23 +277,19 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! This is put above each page as a link to all related pages. */ /*! This is put above each page as a link to all related pages. */
virtual QCString trRelatedPages() virtual QCString trRelatedPages()
{ { return "Pages associées"; }
return "Pages associées"; }
/*! This is put above each page as a link to all examples. */ /*! This is put above each page as a link to all examples. */
virtual QCString trExamples() virtual QCString trExamples()
{ { return "Exemples"; }
return "Exemples"; }
/*! This is put above each page as a link to the search engine. */ /*! This is put above each page as a link to the search engine. */
virtual QCString trSearch() virtual QCString trSearch()
{ { return "Recherche"; }
return "Recherche"; }
/*! This is an introduction to the class hierarchy. */ /*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription() virtual QCString trClassHierarchyDescription()
{ { return "Cette liste d'héritage est classée "
return "Cette liste d'héritage est classée "
"approximativement par ordre alphabétique :"; "approximativement par ordre alphabétique :";
} }
...@@ -353,7 +333,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -353,7 +333,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
{ {
result+="documentés "; result+="documentés ";
} }
result+="avec liens vers "; result+="avec des liens vers ";
if (!extractAll) if (!extractAll)
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
...@@ -386,14 +366,14 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -386,14 +366,14 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
result+="des fonctions, variables, macros, enumérations, et définitions de type "; result+="de toutes les fonctions, variables, macros, enumérations, et définitions de type ";
} }
else else
{ {
result+="de tous les membres de fichier "; result+="de tous les membres de fichier ";
} }
if (!extractAll) result+="documentés "; if (!extractAll) result+="documentés ";
result+="avec liens vers "; result+="avec des liens vers ";
if (extractAll) if (extractAll)
result+="les fichiers auxquels ils appartiennent :"; result+="les fichiers auxquels ils appartiennent :";
else else
...@@ -403,37 +383,31 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -403,37 +383,31 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! This is an introduction to the page with the list of all examples */ /*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription() virtual QCString trExamplesDescription()
{ { return "Liste de tous les exemples :"; }
return "Liste de tous les exemples :"; }
/*! This is an introduction to the page with the list of related pages */ /*! This is an introduction to the page with the list of related pages */
virtual QCString trRelatedPagesDescription() virtual QCString trRelatedPagesDescription()
{ { return "Liste de toutes les pages de documentation associées :"; }
return "Liste de toutes les pages de documentation associées :"; }
/*! This is an introduction to the page with the list of class/file groups */ /*! This is an introduction to the page with the list of class/file groups */
virtual QCString trModulesDescription() virtual QCString trModulesDescription()
{ { return "Liste de tous les modules :"; }
return "Liste de tous les modules :"; }
/*! This is used in HTML as the title of index.html. */ /*! This is used in HTML as the title of index.html. */
virtual QCString trDocumentation() virtual QCString trDocumentation()
{ { return "Documentation"; }
return "Documentation"; }
/*! This is used in LaTeX as the title of the chapter with the /*! This is used in LaTeX as the title of the chapter with the
* index of all groups. * index of all groups.
*/ */
virtual QCString trModuleIndex() virtual QCString trModuleIndex()
{ { return "Index des modules"; }
return "Index des modules"; }
/*! This is used in LaTeX as the title of the chapter with the /*! This is used in LaTeX as the title of the chapter with the
* class hierarchy. * class hierarchy.
*/ */
virtual QCString trHierarchicalIndex() virtual QCString trHierarchicalIndex()
{ { return "Index hiérarchique"; }
return "Index hiérarchique"; }
/*! This is used in LaTeX as the title of the chapter with the /*! This is used in LaTeX as the title of the chapter with the
* annotated compound index. * annotated compound index.
...@@ -454,15 +428,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -454,15 +428,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* list of all files. * list of all files.
*/ */
virtual QCString trFileIndex() virtual QCString trFileIndex()
{ { return "Index des fichiers"; }
return "Index des fichiers"; }
/*! This is used in LaTeX as the title of the chapter containing /*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups. * the documentation of all groups.
*/ */
virtual QCString trModuleDocumentation() virtual QCString trModuleDocumentation()
{ { return "Documentation des modules"; }
return "Documentation des modules"; }
/*! This is used in LaTeX as the title of the chapter containing /*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions. * the documentation of all classes, structs and unions.
...@@ -483,97 +455,83 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -483,97 +455,83 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* the documentation of all files. * the documentation of all files.
*/ */
virtual QCString trFileDocumentation() virtual QCString trFileDocumentation()
{ { return "Documentation des fichiers"; }
return "Documentation des fichiers"; }
/*! This is used in LaTeX as the title of the chapter containing /*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples. * the documentation of all examples.
*/ */
virtual QCString trExampleDocumentation() virtual QCString trExampleDocumentation()
{ { return "Documentation des exemples"; }
return "Documentation des exemples"; }
/*! This is used in LaTeX as the title of the chapter containing /*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages. * the documentation of all related pages.
*/ */
virtual QCString trPageDocumentation() virtual QCString trPageDocumentation()
{ { return "Documentation des pages associées"; }
return "Documentation des pages associées"; }
/*! This is used in LaTeX as the title of the document */ /*! This is used in LaTeX as the title of the document */
virtual QCString trReferenceManual() virtual QCString trReferenceManual()
{ { return "Manuel de référence"; }
return "Manuel de référence"; }
/*! This is used in the documentation of a file as a header before the /*! This is used in the documentation of a file as a header before the
* list of defines * list of defines
*/ */
virtual QCString trDefines() virtual QCString trDefines()
{ { return "Macros"; }
return "Macros"; }
/*! This is used in the documentation of a file as a header before the /*! This is used in the documentation of a file as a header before the
* list of function prototypes * list of function prototypes
*/ */
virtual QCString trFuncProtos() virtual QCString trFuncProtos()
{ { return "Prototypes de fonction"; }
return "Prototypes de fonction"; }
/*! This is used in the documentation of a file as a header before the /*! This is used in the documentation of a file as a header before the
* list of typedefs * list of typedefs
*/ */
virtual QCString trTypedefs() virtual QCString trTypedefs()
{ { return "Définitions de type"; }
return "Définition de type"; }
/*! This is used in the documentation of a file as a header before the /*! This is used in the documentation of a file as a header before the
* list of enumerations * list of enumerations
*/ */
virtual QCString trEnumerations() virtual QCString trEnumerations()
{ { return "Énumérations"; }
return "Énumérations"; }
/*! This is used in the documentation of a file as a header before the /*! This is used in the documentation of a file as a header before the
* list of (global) functions * list of (global) functions
*/ */
virtual QCString trFunctions() virtual QCString trFunctions()
{ { return "Fonctions"; }
return "Fonctions"; }
/*! This is used in the documentation of a file as a header before the /*! This is used in the documentation of a file as a header before the
* list of (global) variables * list of (global) variables
*/ */
virtual QCString trVariables() virtual QCString trVariables()
{ { return "Variables"; }
return "Variables"; }
/*! This is used in the documentation of a file as a header before the /*! This is used in the documentation of a file as a header before the
* list of (global) variables * list of (global) variables
*/ */
virtual QCString trEnumerationValues() virtual QCString trEnumerationValues()
{ { return "Valeurs énumérées"; }
return "Valeurs énumérées"; }
/*! This is used in the documentation of a file before the list of /*! This is used in the documentation of a file before the list of
* documentation blocks for defines * documentation blocks for defines
*/ */
virtual QCString trDefineDocumentation() virtual QCString trDefineDocumentation()
{ { return "Documentation des macros"; }
return "Documentation des macros"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes * of documentation blocks for function prototypes
*/ */
virtual QCString trFunctionPrototypeDocumentation() virtual QCString trFunctionPrototypeDocumentation()
{ { return "Documentation des prototypes de fonction"; }
return "Documentation des prototypes de fonction"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs * of documentation blocks for typedefs
*/ */
virtual QCString trTypedefDocumentation() virtual QCString trTypedefDocumentation()
{ { return "Documentation des définitions de type"; }
return "Documentation des définitions de type"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types * of documentation blocks for enumeration types
...@@ -585,15 +543,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -585,15 +543,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* of documentation blocks for functions * of documentation blocks for functions
*/ */
virtual QCString trFunctionDocumentation() virtual QCString trFunctionDocumentation()
{ { return "Documentation des fonctions"; }
return "Documentation des fonctions"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables * of documentation blocks for variables
*/ */
virtual QCString trVariableDocumentation() virtual QCString trVariableDocumentation()
{ { return "Documentation des variables"; }
return "Documentation des variables"; }
/*! This is used in the documentation of a file/namespace/group before /*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds * the list of links to documented compounds
...@@ -635,48 +591,39 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -635,48 +591,39 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! this text is generated when the \\internal command is used. */ /*! this text is generated when the \\internal command is used. */
virtual QCString trForInternalUseOnly() virtual QCString trForInternalUseOnly()
{ { return "Pour un usage interne uniquement."; }
return "À usage interne uniquement."; }
/*! this text is generated when the \\warning command is used. */ /*! this text is generated when the \\warning command is used. */
virtual QCString trWarning() virtual QCString trWarning()
{ { return "Avertissement"; }
return "Avertissement"; }
/*! this text is generated when the \\version command is used. */ /*! this text is generated when the \\version command is used. */
virtual QCString trVersion() virtual QCString trVersion()
{ { return "Version"; }
return "Version"; }
/*! this text is generated when the \\date command is used. */ /*! this text is generated when the \\date command is used. */
virtual QCString trDate() virtual QCString trDate()
{ { return "Date"; }
return "Date"; }
/*! this text is generated when the \\return command is used. */ /*! this text is generated when the \\return command is used. */
virtual QCString trReturns() virtual QCString trReturns()
{ { return "Renvoie"; }
return "Renvoie"; }
/*! this text is generated when the \\sa command is used. */ /*! this text is generated when the \\sa command is used. */
virtual QCString trSeeAlso() virtual QCString trSeeAlso()
{ { return "Voir également"; }
return "Voir également"; }
/*! this text is generated when the \\param command is used. */ /*! this text is generated when the \\param command is used. */
virtual QCString trParameters() virtual QCString trParameters()
{ { return "Paramètres"; }
return "Paramètres"; }
/*! this text is generated when the \\exception command is used. */ /*! this text is generated when the \\exception command is used. */
virtual QCString trExceptions() virtual QCString trExceptions()
{ { return "Exceptions"; }
return "Exceptions"; }
/*! this text is used in the title page of a LaTeX document. */ /*! this text is used in the title page of a LaTeX document. */
virtual QCString trGeneratedBy() virtual QCString trGeneratedBy()
{ { return "Généré par"; }
return "Généré par"; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-990307 // new since 0.49-990307
...@@ -684,8 +631,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -684,8 +631,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! used as the title of page containing all the index of all namespaces. */ /*! used as the title of page containing all the index of all namespaces. */
virtual QCString trNamespaceList() virtual QCString trNamespaceList()
{ { return "Liste des espaces de nommage"; }
return "Liste des espaces de nommage"; }
/*! used as an introduction to the namespace list */ /*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll) virtual QCString trNamespaceListDescription(bool extractAll)
...@@ -700,8 +646,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -700,8 +646,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* friends of a class * friends of a class
*/ */
virtual QCString trFriends() virtual QCString trFriends()
{ { return "Amis"; }
return "Amis"; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-990405 // new since 0.49-990405
...@@ -711,8 +656,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -711,8 +656,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* related classes * related classes
*/ */
virtual QCString trRelatedFunctionDocumentation() virtual QCString trRelatedFunctionDocumentation()
{ { return "Documentation des fonctions amies et associées"; }
return "Documentation des fonctions amies et associées"; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-990425 // new since 0.49-990425
...@@ -723,26 +667,20 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -723,26 +667,20 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
ClassDef::CompoundType compType, ClassDef::CompoundType compType,
bool isTemplate) bool isTemplate)
{ {
QCString result="Référence de "; QCString result="Référence ";
if (isTemplate) result+="du modèle ";
result+="de ";
switch(compType) switch(compType)
{ {
case ClassDef::Class: result+="la classe "; case ClassDef::Class: result+="la classe "; break;
break; case ClassDef::Struct: result+="la structure "; break;
case ClassDef::Struct: result+="la structure "; case ClassDef::Union: result+="l'union "; break;
break; case ClassDef::Interface: result+="l'interface "; break;
case ClassDef::Union: result+="l'union "; case ClassDef::Protocol: result+="le protocol "; break;
break; case ClassDef::Category: result+="la catégorie "; break;
case ClassDef::Interface: result+="l'interface "; case ClassDef::Exception: result+="l'exception "; break;
break;
case ClassDef::Protocol: result+="le protocol ";
break;
case ClassDef::Category: result+="la catégorie ";
break;
case ClassDef::Exception: result+="l'exception ";
break;
} }
result+=(QCString)clName; result+=(QCString)clName;
if (isTemplate) result+=" (modèle)";
return result; return result;
} }
...@@ -763,35 +701,25 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -763,35 +701,25 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
} }
virtual QCString trPublicMembers() virtual QCString trPublicMembers()
{ { return "Fonctions membres publiques"; }
return "Fonctions membres publiques"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
{ { return "Connecteurs publics"; }
return "Connecteurs publics"; }
virtual QCString trSignals() virtual QCString trSignals()
{ { return "Signaux"; }
return "Signaux"; }
virtual QCString trStaticPublicMembers() virtual QCString trStaticPublicMembers()
{ { return "Fonctions membres publiques statiques"; }
return "Fonctions membres publiques statiques"; }
virtual QCString trProtectedMembers() virtual QCString trProtectedMembers()
{ { return "Fonctions membres protégées"; }
return "Fonctions membres protégées"; }
virtual QCString trProtectedSlots() virtual QCString trProtectedSlots()
{ { return "Connecteurs protégés"; }
return "Connecteurs protégés"; }
virtual QCString trStaticProtectedMembers() virtual QCString trStaticProtectedMembers()
{ { return "Fonctions membres protégées statiques"; }
return "Fonctions membres protégées statiques"; }
virtual QCString trPrivateMembers() virtual QCString trPrivateMembers()
{ { return "Fonctions membres privées"; }
return "Fonctions membres privées"; }
virtual QCString trPrivateSlots() virtual QCString trPrivateSlots()
{ { return "Connecteurs privés"; }
return "Connecteurs privés"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ { return "Fonctions membres privées statiques"; }
return "Fonctions membres privées statiques"; }
/*! this function is used to produce a comma-separated list of items. /*! this function is used to produce a comma-separated list of items.
* use generateMarker(i) to indicate where item i should be put. * use generateMarker(i) to indicate where item i should be put.
...@@ -852,15 +780,14 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -852,15 +780,14 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! This is put above each page as a link to all members of namespaces. */ /*! This is put above each page as a link to all members of namespaces. */
virtual QCString trNamespaceMembers() virtual QCString trNamespaceMembers()
{ { return "Membres de l'espace de nommage"; }
return "Membres de l'espace de nommage"; }
/*! This is an introduction to the page with all namespace members */ /*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll) virtual QCString trNamespaceMemberDescription(bool extractAll)
{ {
QCString result="Liste de tous les membres des espaces de nommage "; QCString result="Liste de tous les membres des espaces de nommage ";
if (!extractAll) result+="documentés "; if (!extractAll) result+="documentés ";
result+="avec liens vers "; result+="avec des liens vers ";
if (extractAll) if (extractAll)
result+="la documentation de namespace de chaque membre :"; result+="la documentation de namespace de chaque membre :";
else else
...@@ -871,15 +798,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -871,15 +798,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* index of all namespaces. * index of all namespaces.
*/ */
virtual QCString trNamespaceIndex() virtual QCString trNamespaceIndex()
{ { return "Index des espaces de nommage"; }
return "Index des espaces de nommage"; }
/*! This is used in LaTeX as the title of the chapter containing /*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces. * the documentation of all namespaces.
*/ */
virtual QCString trNamespaceDocumentation() virtual QCString trNamespaceDocumentation()
{ { return "Documentation des espaces de nommage"; }
return "Documentation des espaces de nommage"; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-990522 // new since 0.49-990522
...@@ -889,8 +814,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -889,8 +814,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* namespaces in a file. * namespaces in a file.
*/ */
virtual QCString trNamespaces() virtual QCString trNamespaces()
{ { return "Espaces de nommage"; }
return "Espaces de nommage"; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-990728 // new since 0.49-990728
...@@ -907,21 +831,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -907,21 +831,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
QCString result=(QCString)"La documentation de "; QCString result=(QCString)"La documentation de ";
switch(compType) switch(compType)
{ {
case ClassDef::Class: result+="cette classe"; case ClassDef::Class: result+="cette classe"; break;
break; case ClassDef::Struct: result+="cette structure"; break;
case ClassDef::Struct: result+="cette structure"; case ClassDef::Union: result+="cette union"; break;
break; case ClassDef::Interface: result+="cette interface"; break;
case ClassDef::Union: result+="cette union"; case ClassDef::Protocol: result+="ce protocol"; female = false; break;
break; case ClassDef::Category: result+="cette catégorie"; break;
case ClassDef::Interface: result+="cette interface"; case ClassDef::Exception: result+="cette exception"; break;
break;
case ClassDef::Protocol: result+="ce protocol";
female = false;
break;
case ClassDef::Category: result+="cette catégorie";
break;
case ClassDef::Exception: result+="cette exception";
break;
} }
if (female) result+= " a été générée à partir "; if (female) result+= " a été générée à partir ";
else result+=" a été généré à partir "; else result+=" a été généré à partir ";
...@@ -934,8 +850,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -934,8 +850,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* list. * list.
*/ */
virtual QCString trAlphabeticalList() virtual QCString trAlphabeticalList()
{ { return "Liste alphabétique"; }
return "Liste alphabétique"; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-990901 // new since 0.49-990901
...@@ -943,21 +858,18 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -943,21 +858,18 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! This is used as the heading text for the retval command. */ /*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues() virtual QCString trReturnValues()
{ { return "Valeurs retournées"; }
return "Valeurs retournées"; }
/*! This is in the (quick) index as a link to the main page (index.html) /*! This is in the (quick) index as a link to the main page (index.html)
*/ */
virtual QCString trMainPage() virtual QCString trMainPage()
{ { return "Page principale"; }
return "Page principale"; }
/*! This is used in references to page that are put in the LaTeX /*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page. * documentation. It should be an abbreviation of the word page.
*/ */
virtual QCString trPageAbbreviation() virtual QCString trPageAbbreviation()
{ { return "p."; }
return "p."; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-991003 // new since 0.49-991003
...@@ -1111,7 +1023,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1111,7 +1023,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! Used as a marker that is put before a \\todo item */ /*! Used as a marker that is put before a \\todo item */
virtual QCString trTodo() virtual QCString trTodo()
{ {
return "À faire"; return "A faire";
} }
/*! Used as the header of the todo list */ /*! Used as the header of the todo list */
virtual QCString trTodoList() virtual QCString trTodoList()
...@@ -1207,16 +1119,16 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1207,16 +1119,16 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
"</ul>\n" "</ul>\n"
"Les flèches ont la signification suivante :\n" "Les flèches ont la signification suivante :\n"
"<ul>\n" "<ul>\n"
"<li>Une flèche bleu foncé est utilisée pour visualiser une relation d'héritage public " "<li>Une flèche bleu foncé est utilisée pour visualiser une relation d'héritage publique "
"entre deux classes.\n" "entre deux classes.\n"
"<li>Une flèche vert foncé est utilisée pour une relation d'héritage protégé.\n" "<li>Une flèche vert foncé est utilisée pour une relation d'héritage protégée.\n"
"<li>Une flèche rouge foncé est utilisée pour une relation d'héritage privé.\n" "<li>Une flèche rouge foncé est utilisée pour une relation d'héritage privée.\n"
"<li>Une flèche violette en pointillés est utilisée si une classe est contenue ou " "<li>Une flèche violette en pointillés est utilisée si une classe est contenue ou "
"utilisée par une autre classe. La flèche est étiquetée avec la ou les variable(s) " "utilisée par une autre classe. La flèche est étiquetée avec la ou les variable(s) "
"qui permettent d'accéder à la classe ou structure pointée. \n" "qui permettent d'accéder à la classe ou structure pointée. \n"
"<li>Une flèche verte en pointillés indique une relation entre une classe instanciée et " "<li>Une flèche jaune en pointillés indique une relation entre un modèle d'instance et "
"le modèle de classe utilisé. La flèche est étiquetée avec " "le modèle de classe duquel il est instancié. La flèche est étiquetée avec "
"les paramètres de modèle de la classe instanciée.\n" "les paramètres de modèle de l'instance.\n"
"</ul>\n"; "</ul>\n";
} }
/*! text for the link to the legend page */ /*! text for the link to the legend page */
...@@ -1301,7 +1213,6 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1301,7 +1213,6 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
{ {
return "Paquetages"; return "Paquetages";
} }
/*! Text shown before a multi-line define */ /*! Text shown before a multi-line define */
virtual QCString trDefineValue() virtual QCString trDefineValue()
{ {
...@@ -1445,8 +1356,8 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1445,8 +1356,8 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
*/ */
virtual QCString trGlobal(bool first_capital, bool singular) virtual QCString trGlobal(bool first_capital, bool singular)
{ {
QCString result((first_capital ? "Global(e)" : "global(e)")); QCString result((first_capital ? "Globa" : "globa"));
if (!singular) result+="s"; if (!singular) result+="ux(ales)"; else result+="l(e)";
return result; return result;
} }
...@@ -1661,29 +1572,25 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1661,29 +1572,25 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* hierarchy. * hierarchy.
*/ */
virtual QCString trDirIndex() virtual QCString trDirIndex()
{ { return "Hiérarchie de répertoires"; }
return "Hiérarchie de répertoires"; }
/*! This is used as the name of the chapter containing the documentation /*! This is used as the name of the chapter containing the documentation
* of the directories. * of the directories.
*/ */
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
{ { return "Documentation des répertoires"; }
return "Documentation des répertoires"; }
/*! This is used as the title of the directory index and also in the /*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy. * Quick links of a HTML page, to link to the directory hierarchy.
*/ */
virtual QCString trDirectories() virtual QCString trDirectories()
{ { return "Répertoires"; }
return "Répertoires"; }
/*! This returns a sentences that introduces the directory hierarchy. /*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level * and the fact that it is sorted alphabetically per level
*/ */
virtual QCString trDirDescription() virtual QCString trDirDescription()
{ { return "Cette hiérarchie de répertoire est triée approximativement, "
return "Cette hiérarchie de répertoire est triée approximativement, "
"mais pas complètement, par ordre alphabétique :"; "mais pas complètement, par ordre alphabétique :";
} }
...@@ -1691,10 +1598,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1691,10 +1598,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* directory is passed via \a dirName. * directory is passed via \a dirName.
*/ */
virtual QCString trDirReference(const char *dirName) virtual QCString trDirReference(const char *dirName)
{ { QCString result="Répertoire de référence de "; result+=dirName; return result; }
QCString result="Répertoire de référence de "; result+=dirName;
return result;
}
/*! This returns the word directory with or without starting capital /*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular). * (\a first_capital) and in sigular or plural form (\a singular).
...@@ -1702,8 +1606,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1702,8 +1606,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
virtual QCString trDir(bool first_capital, bool singular) virtual QCString trDir(bool first_capital, bool singular)
{ {
QCString result((first_capital ? "Répertoire" : "répertoire")); QCString result((first_capital ? "Répertoire" : "répertoire"));
if (singular) result+=""; if (singular) result+=""; else result+="s";
else result+="s";
return result; return result;
} }
...@@ -1728,7 +1631,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1728,7 +1631,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! This is used to introduce a caller (or called-by) graph */ /*! This is used to introduce a caller (or called-by) graph */
virtual QCString trCallerGraph() virtual QCString trCallerGraph()
{ {
return "Voici le graphe d'appel pour cette fonction :"; return "Voici le graphe des appelants de cette fonction :";
} }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
...@@ -1743,7 +1646,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1743,7 +1646,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! header that is put before the list of member subprograms (Fortran). */ /*! header that is put before the list of member subprograms (Fortran). */
virtual QCString trMemberFunctionDocumentationFortran() virtual QCString trMemberFunctionDocumentationFortran()
{ return "Documentation des fonctions membres/subroutine"; } { return "Documentation des fonctions/subroutines membres"; }
/*! This is put above each page as a link to the list of annotated data types (Fortran). */ /*! This is put above each page as a link to the list of annotated data types (Fortran). */
virtual QCString trCompoundListFortran() virtual QCString trCompoundListFortran()
...@@ -1760,13 +1663,12 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1760,13 +1663,12 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! This is an introduction to the page with all data types (Fortran). */ /*! This is an introduction to the page with all data types (Fortran). */
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
{ {
QCString result="Liste de tous les "; QCString result="Liste de tous les membres de types de données ";
result+="membres de types de données ";
if (!extractAll) if (!extractAll)
{ {
result+="documentés "; result+="documentés ";
} }
result+="avec liens vers "; result+="avec des liens vers ";
if (!extractAll) if (!extractAll)
{ {
result+="la documentation de la structure des données de chaque membre :"; result+="la documentation de la structure des données de chaque membre :";
...@@ -1800,7 +1702,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1800,7 +1702,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
* of documentation blocks for subprograms (Fortran) * of documentation blocks for subprograms (Fortran)
*/ */
virtual QCString trSubprogramDocumentation() virtual QCString trSubprogramDocumentation()
{ return "Documentation de la Fonction/Subroutine"; } { return "Documentation de la fonction/subroutine"; }
/*! This is used in the documentation of a file/namespace/group before /*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds (Fortran) * the list of links to documented compounds (Fortran)
...@@ -1815,7 +1717,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1815,7 +1717,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! used as an introduction to the modules list (Fortran) */ /*! used as an introduction to the modules list (Fortran) */
virtual QCString trModulesListDescription(bool extractAll) virtual QCString trModulesListDescription(bool extractAll)
{ {
QCString result="Liste de tous les modules"; QCString result="Liste de tous les modules ";
if (!extractAll) result+="documentés "; if (!extractAll) result+="documentés ";
result+="avec une brève description :"; result+="avec une brève description :";
return result; return result;
...@@ -1827,7 +1729,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1827,7 +1729,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
bool isTemplate) bool isTemplate)
{ {
QCString result="Réference "; QCString result="Réference ";
if (isTemplate) result+="du gabarit (template) "; if (isTemplate) result+="du modèle ";
switch(compType) switch(compType)
{ {
case ClassDef::Class: result+="du module "; break; case ClassDef::Class: result+="du module "; break;
...@@ -1858,7 +1760,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1858,7 +1760,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
{ {
QCString result="Liste de tous les membres "; QCString result="Liste de tous les membres ";
if (!extractAll) result+="documentés "; if (!extractAll) result+="documentés ";
result+="du module avec lien vers "; result+="du module avec des liens vers ";
if (extractAll) if (extractAll)
{ {
result+="la documentation du module de chaque membre :"; result+="la documentation du module de chaque membre :";
...@@ -1935,7 +1837,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1935,7 +1837,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
/*! C# Type Constraint list */ /*! C# Type Constraint list */
virtual QCString trTypeConstraints() virtual QCString trTypeConstraints()
{ {
return "Les constraintes du type"; return "Contraintes de type";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1976,14 +1878,73 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ...@@ -1976,14 +1878,73 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3
// new since 1.6.3 // new since 1.6.3
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! introduction text for the directory dependency graph */
virtual QCString trDirDependency(const char *name)
{
return (QCString)"Graphe des dépendances de répertoire pour "+name;
}
/*! when clicking a directory dependency label, a page with a
* table is shown. The heading for the first column mentions the
* source file that has a relation to another file.
*/
virtual QCString trFileIn(const char *name)
{
return (QCString)"Fichier dans "+name;
}
/*! when clicking a directory dependency label, a page with a
* table is shown. The heading for the second column mentions the
* destination file that is included.
*/
virtual QCString trIncludesFileIn(const char *name)
{
return (QCString)"Inclut le fichier dans "+name;
}
/** Compiles a date string.
* @param year Year in 4 digits
* @param month Month of the year: 1=January
* @param day Day of the Month: 1..31
* @param dayOfWeek Day of the week: 1=Monday..7=Sunday
* @param hour Hour of the day: 0..23
* @param minutes Minutes in the hour: 0..59
* @param seconds Seconds within the minute: 0..59
* @param includeTime Include time in the result string?
*/
virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
int hour,int minutes,int seconds,
bool includeTime)
{
static const char *days[] = { "Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche" };
static const char *months[] = { "Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre" };
QCString sdate;
sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
if (includeTime)
{
QCString stime;
stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
sdate+=stime;
}
return sdate;
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.7.5 // new since 1.7.5
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! Header for the page with bibliographic citations */
virtual QCString trCiteReferences() virtual QCString trCiteReferences()
{ return "Bibliographie"; } { return "Références bibliographiques"; }
/*! Text for copyright paragraph */
virtual QCString trCopyright()
{ return "Copyright"; }
/*! Header for the graph showing the directory dependencies */
virtual QCString trDirDepGraph(const char *name)
{ return QCString("Graphe des dépendances de répertoires pour ")+name+":"; }
}; };
#endif #endif
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2010 by Dimitri van Heesch. * Copyright (C) 1997-2011 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
......
...@@ -4711,7 +4711,8 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n) ...@@ -4711,7 +4711,8 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
QCString substituteKeywords(const QCString &s,const char *title) QCString substituteKeywords(const QCString &s,const char *title,
const char *projName,const char *projNum,const char *projBrief)
{ {
QCString result = s; QCString result = s;
if (title) result = substitute(result,"$title",title); if (title) result = substitute(result,"$title",title);
...@@ -4719,9 +4720,9 @@ QCString substituteKeywords(const QCString &s,const char *title) ...@@ -4719,9 +4720,9 @@ QCString substituteKeywords(const QCString &s,const char *title)
result = substitute(result,"$date",dateToString(FALSE)); result = substitute(result,"$date",dateToString(FALSE));
result = substitute(result,"$year",yearToString()); result = substitute(result,"$year",yearToString());
result = substitute(result,"$doxygenversion",versionString); result = substitute(result,"$doxygenversion",versionString);
result = substitute(result,"$projectname",Config_getString("PROJECT_NAME")); result = substitute(result,"$projectname",projName);
result = substitute(result,"$projectnumber",Config_getString("PROJECT_NUMBER")); result = substitute(result,"$projectnumber",projNum);
result = substitute(result,"$projectbrief",Config_getString("PROJECT_BRIEF")); result = substitute(result,"$projectbrief",projBrief);
result = substitute(result,"$projectlogo",stripPath(Config_getString("PROJECT_LOGO"))); result = substitute(result,"$projectlogo",stripPath(Config_getString("PROJECT_LOGO")));
return result; return result;
} }
......
...@@ -234,7 +234,8 @@ bool rightScopeMatch(const QCString &scope, const QCString &name); ...@@ -234,7 +234,8 @@ 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); QCString substituteKeywords(const QCString &s,const char *title,
const char *projName,const char *projNum,const char *projBrief);
int getPrefixIndex(const QCString &name); int getPrefixIndex(const QCString &name);
......
...@@ -1842,6 +1842,14 @@ ...@@ -1842,6 +1842,14 @@
<File <File
RelativePath="..\src\tclscanner.l" RelativePath="..\src\tclscanner.l"
> >
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="Lex"
CommandLine="flex -PvhdlcodeYY [AllOptions] [AdditionalOptions] [inputs]"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|Win32" Name="Release|Win32"
> >
......
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