Commit 0c394c58 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.1-20030607

parent 70b82ece
DOXYGEN Version 1.3.1 DOXYGEN Version 1.3.1-20030607
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 (28 May 2003) Dimitri van Heesch (07 June 2003)
DOXYGEN Version 1.3.1 DOXYGEN Version 1.3.1_20030607
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (28 May 2003) Dimitri van Heesch (dimitri@stack.nl) (07 June 2003)
1.3.1 1.3.1-20030607
...@@ -47,6 +47,7 @@ documentation: ...@@ -47,6 +47,7 @@ documentation:
\refitem cmdbrief \\brief \refitem cmdbrief \\brief
\refitem cmdbug \\bug \refitem cmdbug \\bug
\refitem cmdc \\c \refitem cmdc \\c
\refitem cmdcallgraph \\callgraph
\refitem cmdclass \\class \refitem cmdclass \\class
\refitem cmdcode \\code \refitem cmdcode \\code
\refitem cmdcopydoc \\copydoc \refitem cmdcopydoc \\copydoc
...@@ -66,6 +67,7 @@ documentation: ...@@ -66,6 +67,7 @@ documentation:
\refitem cmdendlatexonly \\endlatexonly \refitem cmdendlatexonly \\endlatexonly
\refitem cmdendlink \\endlink \refitem cmdendlink \\endlink
\refitem cmdendverbatim \\endverbatim \refitem cmdendverbatim \\endverbatim
\refitem cmdendxmlonly \\endxmlonly
\refitem cmdenum \\enum \refitem cmdenum \\enum
\refitem cmdexample \\example \refitem cmdexample \\example
\refitem cmdexception \\exception \refitem cmdexception \\exception
...@@ -129,6 +131,7 @@ documentation: ...@@ -129,6 +131,7 @@ documentation:
\refitem cmdversion \\version \refitem cmdversion \\version
\refitem cmdwarning \\warning \refitem cmdwarning \\warning
\refitem cmdweakgroup \\weakgroup \refitem cmdweakgroup \\weakgroup
\refitem cmdxmlonly \\xmlonly
\refitem cmdxrefitem \\xrefitem \refitem cmdxrefitem \\xrefitem
\refitem cmddollar \\\$ \refitem cmddollar \\\$
\refitem cmdat \\\@ \refitem cmdat \\\@
...@@ -181,6 +184,17 @@ doxygen. Unrecognized commands are treated as normal text. ...@@ -181,6 +184,17 @@ doxygen. Unrecognized commands are treated as normal text.
\sa page \ref grouping "Grouping", sections \ref cmddefgroup "\\defgroup", \ref cmdingroup "\\ingroup" and \sa page \ref grouping "Grouping", sections \ref cmddefgroup "\\defgroup", \ref cmdingroup "\\ingroup" and
\ref cmdweakgroup "\\weakgroup". \ref cmdweakgroup "\\weakgroup".
\section cmdcallgraph \callgraph
\addindex \\callgraph
When this command is put in a comment block of a function or method
and \ref cfg_have_dot "HAVE_DOT" is set to YES, then doxygen will
generate a call graph for that function (provided the implementation of the
function or method calls other documented functions). The call graph will
generated regardless of the value of \ref cfg_call_graph "CALL_GRAPH".
\note The completeness (and correctness) of the call graph depends on the
doxygen code parser which is not perfect.
\section cmdclass \class <name> [<header-file>] [<header-name>] \section cmdclass \class <name> [<header-file>] [<header-name>]
\addindex \\class \addindex \\class
...@@ -1551,6 +1565,14 @@ ALIASES = "english=\if english" \ ...@@ -1551,6 +1565,14 @@ ALIASES = "english=\if english" \
\sa section \ref cmdverbatim "\\verbatim". \sa section \ref cmdverbatim "\\verbatim".
<hr>
\section cmdendxmlonly \endxmlonly
\addindex \\endxmlonly
Ends a block of text that was started with a \\xmlonly command.
\sa section \ref cmdxmlonly "\\xmlonly".
<hr> <hr>
\section cmdfdollar \f$ \section cmdfdollar \f$
...@@ -1740,6 +1762,19 @@ ALIASES = "english=\if english" \ ...@@ -1740,6 +1762,19 @@ ALIASES = "english=\if english" \
\warning Make sure you include a \\endverbatim command for each \warning Make sure you include a \\endverbatim command for each
\\verbatim command or the parser will get confused! \\verbatim command or the parser will get confused!
<hr>
\section cmdxmlonly \xmlonly
\addindex \\xmlonly
Starts a block of text that will be verbatim included in the
generated XML output only. The block ends with a
endxmlonly command.
This command can be used to include custom XML tags.
\sa section \ref cmdhtmlonly "\\htmlonly" and section
\ref cmdlatexonly "\\latexonly".
<hr> <hr>
\section cmdbackslash \\ \section cmdbackslash \\
......
...@@ -62,6 +62,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -62,6 +62,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_bin_abspath BIN_ABSPATH \refitem cfg_bin_abspath BIN_ABSPATH
\refitem cfg_binary_toc BINARY_TOC \refitem cfg_binary_toc BINARY_TOC
\refitem cfg_brief_member_desc BRIEF_MEMBER_DESC \refitem cfg_brief_member_desc BRIEF_MEMBER_DESC
\refitem cfg_call_graph CALL_GRAPH
\refitem cfg_case_sense_names CASE_SENSE_NAMES \refitem cfg_case_sense_names CASE_SENSE_NAMES
\refitem cfg_cgi_name CGI_NAME \refitem cfg_cgi_name CGI_NAME
\refitem cfg_cgi_url CGI_URL \refitem cfg_cgi_url CGI_URL
...@@ -242,7 +243,8 @@ followed by the descriptions of the tags grouped by category. ...@@ -242,7 +243,8 @@ followed by the descriptions of the tags grouped by category.
The default language is English, other supported languages are: The default language is English, other supported languages are:
Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish and Swedish. Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,
and Ukrainian.
\anchor cfg_use_windows_encoding \anchor cfg_use_windows_encoding
<dt>\c USE_WINDOWS_ENCODING <dd> <dt>\c USE_WINDOWS_ENCODING <dd>
...@@ -251,8 +253,8 @@ followed by the descriptions of the tags grouped by category. ...@@ -251,8 +253,8 @@ followed by the descriptions of the tags grouped by category.
The encoding is not always determined by the language that is chosen, The encoding is not always determined by the language that is chosen,
but also whether or not the output is meant for Windows or non-Windows users. but also whether or not the output is meant for Windows or non-Windows users.
In case there is a difference, setting the \c USE_WINDOWS_ENCODING tag to \c YES In case there is a difference, setting the \c USE_WINDOWS_ENCODING tag to \c YES
forces the Windows enconding, (this is the default for the Windows binary), forces the Windows encoding, (this is the default for the Windows binary),
whereas setting the tag to \c NO uses a Unix-style encoding (the default for the whereas setting the tag to \c NO uses a Unix-style encoding (the default for
all platforms other than Windows). all platforms other than Windows).
\anchor cfg_extract_all \anchor cfg_extract_all
...@@ -366,7 +368,7 @@ function's detailed documentation block. ...@@ -366,7 +368,7 @@ function's detailed documentation block.
<dt>\c STRIP_FROM_PATH <dd> <dt>\c STRIP_FROM_PATH <dd>
\addindex STRIP_FROM_PATH \addindex STRIP_FROM_PATH
If the \c FULL_PATH_NAMES tag is set to \c YES then the \c STRIP_FROM_PATH tag If the \c FULL_PATH_NAMES tag is set to \c YES then the \c STRIP_FROM_PATH tag
can be used to strip a user defined part of the path. Stripping is can be used to strip a user-defined part of the path. Stripping is
only done if one of the specified strings matches the left-hand part of the only done if one of the specified strings matches the left-hand part of the
path. path.
...@@ -382,8 +384,8 @@ function's detailed documentation block. ...@@ -382,8 +384,8 @@ function's detailed documentation block.
<dt>\c CASE_SENSE_NAMES <dd> <dt>\c CASE_SENSE_NAMES <dd>
\addindex CASE_SENSE_NAMES \addindex CASE_SENSE_NAMES
If the \c CASE_SENSE_NAMES tag is set to \c NO (the default) then doxygen If the \c CASE_SENSE_NAMES tag is set to \c NO (the default) then doxygen
will only generate file names in lower case letters. If set to will only generate file names in lower-case letters. If set to
\c YES upper case letters are also allowed. This is useful if you have \c YES upper-case letters are also allowed. This is useful if you have
classes or files whose names only differ in case and if your file system classes or files whose names only differ in case and if your file system
supports case sensitive file names. supports case sensitive file names.
...@@ -413,7 +415,7 @@ function's detailed documentation block. ...@@ -413,7 +415,7 @@ function's detailed documentation block.
<dt>\c SHOW_INCLUDE_FILES <dd> <dt>\c SHOW_INCLUDE_FILES <dd>
\addindex SHOW_INCLUDE_FILES \addindex SHOW_INCLUDE_FILES
If the SHOW_INCLUDE_FILES tag is set to YES (the default) then doxygen If the SHOW_INCLUDE_FILES tag is set to YES (the default) then doxygen
will put list of the files that are included by a file in the documentation will put a list of the files that are included by a file in the documentation
of that file. of that file.
\anchor cfg_javadoc_autobrief \anchor cfg_javadoc_autobrief
...@@ -529,7 +531,7 @@ function's detailed documentation block. ...@@ -529,7 +531,7 @@ function's detailed documentation block.
\endverbatim \endverbatim
will allow you to will allow you to
put the command \\sideeffect (or \@sideeffect) in the documentation, which put the command \\sideeffect (or \@sideeffect) in the documentation, which
will result in a user defined paragraph with heading "Side Effects:". will result in a user-defined paragraph with heading "Side Effects:".
You can put \\n's in the value part of an alias to insert newlines. You can put \\n's in the value part of an alias to insert newlines.
\anchor cfg_max_initializer_lines \anchor cfg_max_initializer_lines
...@@ -547,7 +549,7 @@ function's detailed documentation block. ...@@ -547,7 +549,7 @@ function's detailed documentation block.
\addindex OPTIMIZE_OUTPUT_FOR_C \addindex OPTIMIZE_OUTPUT_FOR_C
Set the \c OPTIMIZE_OUTPUT_FOR_C tag to \c YES if your project consists Set the \c OPTIMIZE_OUTPUT_FOR_C tag to \c YES if your project consists
of C sources only. Doxygen will then generate output that is more tailored of C sources only. Doxygen will then generate output that is more tailored
for C. For instance some of the names that are used will be different. for C. For instance, some of the names that are used will be different.
The list of all members will be omitted, etc. The list of all members will be omitted, etc.
\anchor cfg_optimize_output_java \anchor cfg_optimize_output_java
...@@ -555,7 +557,7 @@ function's detailed documentation block. ...@@ -555,7 +557,7 @@ function's detailed documentation block.
\addindex OPTIMIZE_OUTPUT_JAVA \addindex OPTIMIZE_OUTPUT_JAVA
Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
only. Doxygen will then generate output that is more tailored for Java. only. Doxygen will then generate output that is more tailored for Java.
For instance namespaces will be presented as packages, qualified scopes For instance, namespaces will be presented as packages, qualified scopes
will look different, etc. will look different, etc.
\anchor cfg_show_used_files \anchor cfg_show_used_files
...@@ -816,7 +818,7 @@ function's detailed documentation block. ...@@ -816,7 +818,7 @@ function's detailed documentation block.
\anchor cfg_html_header \anchor cfg_html_header
<dt>\c HTML_HEADER <dd> <dt>\c HTML_HEADER <dd>
\addindex HTML_HEADER \addindex HTML_HEADER
The \c HTML_HEADER tag can be used to specify a user defined HTML The \c HTML_HEADER tag can be used to specify a user-defined HTML
header file for each generated HTML page. To get valid HTML the header file header file for each generated HTML page. To get valid HTML the header file
should contain at least a \c \<HTML\> and a \c \<BODY\> tag, but it is should contain at least a \c \<HTML\> and a \c \<BODY\> tag, but it is
good idea to include the style sheet that is generated by doxygen as well. good idea to include the style sheet that is generated by doxygen as well.
...@@ -847,7 +849,7 @@ function's detailed documentation block. ...@@ -847,7 +849,7 @@ function's detailed documentation block.
\anchor cfg_html_footer \anchor cfg_html_footer
<dt>\c HTML_FOOTER <dd> <dt>\c HTML_FOOTER <dd>
\addindex HTML_FOOTER \addindex HTML_FOOTER
The \c HTML_FOOTER tag can be used to specify a user defined HTML footer for The \c HTML_FOOTER tag can be used to specify a user-defined HTML footer for
each generated HTML page. To get valid HTML the header file should contain each generated HTML page. To get valid HTML the header file should contain
at least a \c \</BODY\> and a \c \</HTML\> tag. A minimal example: at least a \c \</BODY\> and a \c \</HTML\> tag. A minimal example:
\verbatim \verbatim
...@@ -871,7 +873,7 @@ function's detailed documentation block. ...@@ -871,7 +873,7 @@ function's detailed documentation block.
\anchor cfg_html_stylesheet \anchor cfg_html_stylesheet
<dt>\c HTML_STYLESHEET <dd> <dt>\c HTML_STYLESHEET <dd>
\addindex HTML_STYLESHEET \addindex HTML_STYLESHEET
The \c HTML_STYLESHEET tag can be used to specify a user defined cascading The \c HTML_STYLESHEET tag can be used to specify a user-defined cascading
style sheet that is used by each HTML page. It can be used to style sheet that is used by each HTML page. It can be used to
fine-tune the look of the HTML output. If the tag is left blank doxygen fine-tune the look of the HTML output. If the tag is left blank doxygen
will generate a default style sheet. will generate a default style sheet.
...@@ -924,7 +926,7 @@ function's detailed documentation block. ...@@ -924,7 +926,7 @@ function's detailed documentation block.
If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c HHC_LOCATION tag can If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c HHC_LOCATION tag can
be used to specify the location (absolute path including file name) of be used to specify the location (absolute path including file name) of
the HTML help compiler (hhc.exe). If non empty doxygen will try to run the HTML help compiler (hhc.exe). If non empty doxygen will try to run
the html help compiler on the generated index.hhp. the HTML help compiler on the generated index.hhp.
\anchor cfg_generate_chi \anchor cfg_generate_chi
<dt>\c GENERATE_CHI <dd> <dt>\c GENERATE_CHI <dd>
...@@ -1053,7 +1055,7 @@ EXTRA_PACKAGES = times ...@@ -1053,7 +1055,7 @@ EXTRA_PACKAGES = times
let doxygen write the default header to a separate file. let doxygen write the default header to a separate file.
\par Note: \par Note:
Only use a user defined header if you know what you are doing! Only use a user-defined header if you know what you are doing!
The following commands have a special meaning inside the header: The following commands have a special meaning inside the header:
<code>\$title</code>, <code>\$datetime</code>, <code>\$date</code>, <code>\$title</code>, <code>\$datetime</code>, <code>\$date</code>,
...@@ -1409,7 +1411,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre> ...@@ -1409,7 +1411,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
If the \c CLASS_DIAGRAMS tag is set to \c YES (the default) doxygen will If the \c CLASS_DIAGRAMS tag is set to \c YES (the default) doxygen will
generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or
super classes. Setting the tag to \c NO turns the diagrams off. super classes. Setting the tag to \c NO turns the diagrams off.
Note that this option is superceded by the HAVE_DOT option below. Note that this option is superseded by the HAVE_DOT option below.
This is only a fallback. It is recommended to install and use dot, This is only a fallback. It is recommended to install and use dot,
since it yield more powerful graphs. since it yield more powerful graphs.
...@@ -1467,6 +1469,15 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre> ...@@ -1467,6 +1469,15 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
documented header file showing the documented files that directly or indirectly documented header file showing the documented files that directly or indirectly
include this file. include this file.
\anchor cfg_call_graph
<dt>\c CALL_GRAPH <dd>
\addindex CALL_GRAPH
If the \c CALL_GRAPH and \c HAVE_DOT tags are set to \c YES then doxygen will
generate a call dependency graph for every global function or class method.
Note that enabling this option will significantly increase the time of a run.
So in most cases it will be better to enable call graphs for selected
functions only using the \\callgraph command.
\anchor cfg_graphical_hierarchy \anchor cfg_graphical_hierarchy
<dt>\c GRAPHICAL_HIERARCHY <dd> <dt>\c GRAPHICAL_HIERARCHY <dd>
\addindex GRAPHICAL_HIERARCHY \addindex GRAPHICAL_HIERARCHY
...@@ -1515,7 +1526,7 @@ not sufficient to fit the graph (see ...@@ -1515,7 +1526,7 @@ not sufficient to fit the graph (see
\ref cfg_max_dot_graph_width "MAX_DOT_GRAPH_WIDTH" and \ref cfg_max_dot_graph_width "MAX_DOT_GRAPH_WIDTH" and
\ref cfg_max_dot_graph_height "MAX_DOT_GRAPH_HEIGHT"). \ref cfg_max_dot_graph_height "MAX_DOT_GRAPH_HEIGHT").
If 0 is used fot the depth value (the default), the graph is If 0 is used fot the depth value (the default), the graph is
not depth constraint. not depth-constraint.
\anchor cfg_max_dot_graph_width \anchor cfg_max_dot_graph_width
<dt>\c MAX_DOT_GRAPH_WIDTH <dd> <dt>\c MAX_DOT_GRAPH_WIDTH <dd>
...@@ -1537,7 +1548,7 @@ not depth constraint. ...@@ -1537,7 +1548,7 @@ not depth constraint.
<dt>\c DOT_CLEANUP <dd> <dt>\c DOT_CLEANUP <dd>
\addindex DOT_CLEANUP \addindex DOT_CLEANUP
If the \c DOT_CLEANUP tag is set to \c YES (the default) doxygen will If the \c DOT_CLEANUP tag is set to \c YES (the default) doxygen will
remove the intermedate dot files that are used to generate the various graphs. remove the intermediate dot files that are used to generate the various graphs.
</dl> </dl>
......
...@@ -222,6 +222,11 @@ should send me a code fragment that triggers the message. The workaround ...@@ -222,6 +222,11 @@ should send me a code fragment that triggers the message. The workaround
the problem put some line-breaks into your file, split it up into smaller the problem put some line-breaks into your file, split it up into smaller
parts, or exclude it from the input using EXCLUDE. parts, or exclude it from the input using EXCLUDE.
<li><b>When running make in the latex dir I get "TeX capacity exceeded". Now what?</b>
You can edit the texmf.cfg file to increase the default values of the
various buffers and then run "texconfig init".
<li><b>Why are dependencies via STL classes not shown in the dot graphs?</b> <li><b>Why are dependencies via STL classes not shown in the dot graphs?</b>
Doxygen is unware of the STL classes, so it does not know that class A relates Doxygen is unware of the STL classes, so it does not know that class A relates
......
...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means ...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time. languages other than English (the default) at configuration time.
Currently (version 1.3-20030430), 28 languages Currently (version 1.3.1), 28 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish, Czech, Danish, Dutch, English, Finnish,
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.1 Version: 1.3.1_20030607
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -92,6 +92,7 @@ ClassDef::ClassDef( ...@@ -92,6 +92,7 @@ ClassDef::ClassDef(
m_membersMerged = FALSE; m_membersMerged = FALSE;
QCString ns; QCString ns;
extractNamespaceName(m_name,m_className,ns); extractNamespaceName(m_name,m_className,ns);
//printf("m_name=%s m_className=%s ns=%s\n",m_name.data(),m_className.data(),ns.data());
if (((QCString)defFileName).right(5)!=".java" && if (((QCString)defFileName).right(5)!=".java" &&
guessSection(defFileName)==Entry::SOURCE_SEC) guessSection(defFileName)==Entry::SOURCE_SEC)
......
...@@ -41,6 +41,7 @@ CommandMap cmdMap[] = ...@@ -41,6 +41,7 @@ CommandMap cmdMap[] =
{ "endlink", CMD_ENDLINK }, { "endlink", CMD_ENDLINK },
{ "endsecreflist", CMD_ENDSECREFLIST }, { "endsecreflist", CMD_ENDSECREFLIST },
{ "endverbatim", CMD_ENDVERBATIM }, { "endverbatim", CMD_ENDVERBATIM },
{ "endxmlonly", CMD_ENDXMLONLY },
{ "exception", CMD_EXCEPTION }, { "exception", CMD_EXCEPTION },
{ "form", CMD_FORMULA }, { "form", CMD_FORMULA },
{ "htmlinclude", CMD_HTMLINCLUDE }, { "htmlinclude", CMD_HTMLINCLUDE },
...@@ -79,6 +80,7 @@ CommandMap cmdMap[] = ...@@ -79,6 +80,7 @@ CommandMap cmdMap[] =
{ "since", CMD_SINCE }, { "since", CMD_SINCE },
{ "skip", CMD_SKIP }, { "skip", CMD_SKIP },
{ "skipline", CMD_SKIPLINE }, { "skipline", CMD_SKIPLINE },
{ "xmlonly", CMD_XMLONLY },
{ "xrefitem", CMD_XREFITEM }, { "xrefitem", CMD_XREFITEM },
{ "throw", CMD_EXCEPTION }, { "throw", CMD_EXCEPTION },
{ "until", CMD_UNTIL }, { "until", CMD_UNTIL },
......
...@@ -54,52 +54,54 @@ enum CommandType ...@@ -54,52 +54,54 @@ enum CommandType
CMD_ENDLINK = 20, CMD_ENDLINK = 20,
CMD_ENDSECREFLIST= 21, CMD_ENDSECREFLIST= 21,
CMD_ENDVERBATIM = 22, CMD_ENDVERBATIM = 22,
CMD_EXCEPTION = 23 | SIMPLESECT_BIT, CMD_ENDXMLONLY = 23,
CMD_FORMULA = 24, CMD_EXCEPTION = 24 | SIMPLESECT_BIT,
CMD_GREATER = 25, CMD_FORMULA = 25,
CMD_HASH = 26, CMD_GREATER = 26,
CMD_HTMLINCLUDE = 27, CMD_HASH = 27,
CMD_HTMLONLY = 28, CMD_HTMLINCLUDE = 28,
CMD_IMAGE = 29, CMD_HTMLONLY = 29,
CMD_INCLUDE = 30, CMD_IMAGE = 30,
CMD_INTERNAL = 31, CMD_INCLUDE = 31,
CMD_INTERNALREF = 32, CMD_INTERNAL = 32,
CMD_INVARIANT = 33 | SIMPLESECT_BIT , CMD_INTERNALREF = 33,
CMD_LANGSWITCH = 34, CMD_INVARIANT = 34 | SIMPLESECT_BIT ,
CMD_LATEXONLY = 35, CMD_LANGSWITCH = 35,
CMD_LESS = 36, CMD_LATEXONLY = 36,
CMD_LI = 37, CMD_LESS = 37,
CMD_LINE = 38, CMD_LI = 38,
CMD_LINEBREAK = 39, CMD_LINE = 39,
CMD_LINK = 40, CMD_LINEBREAK = 40,
CMD_NOTE = 41 | SIMPLESECT_BIT, CMD_LINK = 41,
CMD_PAR = 42 | SIMPLESECT_BIT, CMD_NOTE = 42 | SIMPLESECT_BIT,
CMD_PARAM = 43 | SIMPLESECT_BIT, CMD_PAR = 43 | SIMPLESECT_BIT,
CMD_PERCENT = 44, CMD_PARAM = 44 | SIMPLESECT_BIT,
CMD_POST = 45 | SIMPLESECT_BIT, CMD_PERCENT = 45,
CMD_PRE = 46 | SIMPLESECT_BIT , CMD_POST = 46 | SIMPLESECT_BIT,
CMD_REF = 47, CMD_PRE = 47 | SIMPLESECT_BIT ,
CMD_SECREFITEM = 48, CMD_REF = 48,
CMD_REMARK = 49 | SIMPLESECT_BIT , CMD_SECREFITEM = 49,
CMD_RETURN = 50 | SIMPLESECT_BIT , CMD_REMARK = 50 | SIMPLESECT_BIT ,
CMD_RETVAL = 51 | SIMPLESECT_BIT, CMD_RETURN = 51 | SIMPLESECT_BIT ,
CMD_SA = 52 | SIMPLESECT_BIT , CMD_RETVAL = 52 | SIMPLESECT_BIT,
CMD_SECREFLIST = 53, CMD_SA = 53 | SIMPLESECT_BIT ,
CMD_SECTION = 54, CMD_SECREFLIST = 54,
CMD_SUBSECTION = 55, CMD_SECTION = 55,
CMD_SUBSUBSECTION= 56, CMD_SUBSECTION = 56,
CMD_PARAGRAPH = 57, CMD_SUBSUBSECTION= 57,
CMD_SINCE = 58 | SIMPLESECT_BIT, CMD_PARAGRAPH = 58,
CMD_SKIP = 59, CMD_SINCE = 59 | SIMPLESECT_BIT,
CMD_SKIPLINE = 60, CMD_SKIP = 60,
CMD_STARTCODE = 61, CMD_SKIPLINE = 61,
CMD_JAVALINK = 62, CMD_STARTCODE = 62,
CMD_UNTIL = 63, CMD_JAVALINK = 63,
CMD_VERBATIM = 64, CMD_UNTIL = 64,
CMD_VERBINCLUDE = 65, CMD_VERBATIM = 65,
CMD_VERSION = 66 | SIMPLESECT_BIT, CMD_VERBINCLUDE = 66,
CMD_WARNING = 67 | SIMPLESECT_BIT, CMD_VERSION = 67 | SIMPLESECT_BIT,
CMD_XREFITEM = 68 | SIMPLESECT_BIT CMD_WARNING = 68 | SIMPLESECT_BIT,
CMD_XREFITEM = 69 | SIMPLESECT_BIT,
CMD_XMLONLY = 70
}; };
enum HtmlTagType enum HtmlTagType
......
...@@ -1224,8 +1224,6 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1224,8 +1224,6 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_scopeStack.push(SCOPEBLOCK); g_scopeStack.push(SCOPEBLOCK);
pushScope(g_curClassName); pushScope(g_curClassName);
//printf("***** g_curClassName=%s\n",g_curClassName.data()); //printf("***** g_curClassName=%s\n",g_curClassName.data());
//CodeClassDef *cd=new CodeClassDef(g_ccd);
//g_codeClassDict.insert(cd->name,cd);
if (getResolvedClass(g_currentDefinition,g_curClassName)==0) if (getResolvedClass(g_currentDefinition,g_curClassName)==0)
{ {
g_curClassDef=new ClassDef("<code>",1, g_curClassDef=new ClassDef("<code>",1,
...@@ -1611,9 +1609,6 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1611,9 +1609,6 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
BEGIN( SkipInits ); BEGIN( SkipInits );
} }
} }
/*
<MemberCall2,FuncCall>")"({BN}"const"|"volatile")*{BN}*"{" {
*/
<CallEnd>({BN}"const"|"volatile")*{BN}*"{" { <CallEnd>({BN}"const"|"volatile")*{BN}*"{" {
if (g_insideBody) if (g_insideBody)
{ {
...@@ -1622,10 +1617,19 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1622,10 +1617,19 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_theVarContext.addVariable(g_parmType,g_parmName); g_theVarContext.addVariable(g_parmType,g_parmName);
g_theCallContext.popScope(); g_theCallContext.popScope();
g_parmType.resize(0);g_parmName.resize(0); g_parmType.resize(0);g_parmName.resize(0);
if (g_name.find("::")!=-1) int index = g_name.findRev("::");
if (index!=-1)
{ {
ClassDef *cd=getResolvedClass(Doxygen::globalScope,g_name.left(index));
if (cd)
{
setClassScope(cd->name());
}
else
{
setClassScope(g_realScope);
}
g_scopeStack.push(SCOPEBLOCK); g_scopeStack.push(SCOPEBLOCK);
setClassScope(g_realScope);
} }
else else
{ {
......
...@@ -1288,8 +1288,8 @@ void Config::create() ...@@ -1288,8 +1288,8 @@ void Config::create()
"The default language is English, other supported languages are: \n" "The default language is English, other supported languages are: \n"
"Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, \n" "Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, \n"
"Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en \n" "Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en \n"
"(Japanese with english messages), Korean, Norwegian, Polish, Portuguese, \n" "(Japanese with English messages), Korean, Norwegian, Polish, Portuguese, \n"
"Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian.\n", "Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.\n",
"English" "English"
); );
#ifdef LANG_BR #ifdef LANG_BR
...@@ -1381,8 +1381,8 @@ void Config::create() ...@@ -1381,8 +1381,8 @@ void Config::create()
"The encoding is not always determined by the language that is chosen, \n" "The encoding is not always determined by the language that is chosen, \n"
"but also whether or not the output is meant for Windows or non-Windows users. \n" "but also whether or not the output is meant for Windows or non-Windows users. \n"
"In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES \n" "In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES \n"
"forces the Windows enconding, (this is the default for the Windows binary), \n" "forces the Windows encoding (this is the default for the Windows binary), \n"
"whereas setting the tag to NO uses a Unix-style encoding (the default for the \n" "whereas setting the tag to NO uses a Unix-style encoding (the default for \n"
"all platforms other than Windows).\n", "all platforms other than Windows).\n",
#if defined(_WIN32) || defined(__CYGWIN__) #if defined(_WIN32) || defined(__CYGWIN__)
TRUE TRUE
...@@ -1430,7 +1430,7 @@ void Config::create() ...@@ -1430,7 +1430,7 @@ void Config::create()
"HIDE_UNDOC_CLASSES", "HIDE_UNDOC_CLASSES",
"If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \n" "If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \n"
"undocumented classes that are normally visible in the class hierarchy. \n" "undocumented classes that are normally visible in the class hierarchy. \n"
"If set to NO (the default) these class will be included in the various \n" "If set to NO (the default) these classes will be included in the various \n"
"overviews. This option has no effect if EXTRACT_ALL is enabled. \n", "overviews. This option has no effect if EXTRACT_ALL is enabled. \n",
FALSE FALSE
); );
...@@ -1491,7 +1491,7 @@ void Config::create() ...@@ -1491,7 +1491,7 @@ void Config::create()
cl = addList( cl = addList(
"STRIP_FROM_PATH", "STRIP_FROM_PATH",
"If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \n" "If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \n"
"can be used to strip a user defined part of the path. Stripping is \n" "can be used to strip a user-defined part of the path. Stripping is \n"
"only done if one of the specified strings matches the left-hand part of \n" "only done if one of the specified strings matches the left-hand part of \n"
"the path. It is allowed to use relative paths in the argument list.\n" "the path. It is allowed to use relative paths in the argument list.\n"
); );
...@@ -1507,10 +1507,10 @@ void Config::create() ...@@ -1507,10 +1507,10 @@ void Config::create()
cb = addBool( cb = addBool(
"CASE_SENSE_NAMES", "CASE_SENSE_NAMES",
"If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \n" "If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \n"
"file names in lower case letters. If set to YES upper case letters are also \n" "file names in lower-case letters. If set to YES upper-case letters are also \n"
"allowed. This is useful if you have classes or files whose names only differ \n" "allowed. This is useful if you have classes or files whose names only differ \n"
"in case and if your file system supports case sensitive file names. Windows \n" "in case and if your file system supports case sensitive file names. Windows \n"
"users are adviced to set this option to NO.\n", "users are advised to set this option to NO.\n",
TRUE TRUE
); );
cb = addBool( cb = addBool(
...@@ -1530,7 +1530,7 @@ void Config::create() ...@@ -1530,7 +1530,7 @@ void Config::create()
cb = addBool( cb = addBool(
"SHOW_INCLUDE_FILES", "SHOW_INCLUDE_FILES",
"If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n" "If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n"
"will put list of the files that are included by a file in the documentation \n" "will put a list of the files that are included by a file in the documentation \n"
"of that file. \n", "of that file. \n",
TRUE TRUE
); );
...@@ -1539,7 +1539,7 @@ void Config::create() ...@@ -1539,7 +1539,7 @@ void Config::create()
"If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \n" "If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \n"
"will interpret the first line (until the first dot) of a JavaDoc-style \n" "will interpret the first line (until the first dot) of a JavaDoc-style \n"
"comment as the brief description. If set to NO, the JavaDoc \n" "comment as the brief description. If set to NO, the JavaDoc \n"
"comments will behave just like the Qt-style comments (thus requiring an \n" "comments will behave just like the Qt-style comments (thus requiring an \n"
"explict @brief command for a brief description. \n", "explict @brief command for a brief description. \n",
FALSE FALSE
); );
...@@ -1629,7 +1629,7 @@ void Config::create() ...@@ -1629,7 +1629,7 @@ void Config::create()
"as commands in the documentation. An alias has the form \"name=value\". \n" "as commands in the documentation. An alias has the form \"name=value\". \n"
"For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n" "For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n"
"put the command \\sideeffect (or @sideeffect) in the documentation, which \n" "put the command \\sideeffect (or @sideeffect) in the documentation, which \n"
"will result in a user defined paragraph with heading \"Side Effects:\". \n" "will result in a user-defined paragraph with heading \"Side Effects:\". \n"
"You can put \\n's in the value part of an alias to insert newlines. \n" "You can put \\n's in the value part of an alias to insert newlines. \n"
); );
cl = addList( cl = addList(
...@@ -1640,7 +1640,7 @@ void Config::create() ...@@ -1640,7 +1640,7 @@ void Config::create()
ci = addInt( ci = addInt(
"MAX_INITIALIZER_LINES", "MAX_INITIALIZER_LINES",
"The MAX_INITIALIZER_LINES tag determines the maximum number of lines \n" "The MAX_INITIALIZER_LINES tag determines the maximum number of lines \n"
"the initial value of a variable or define consist of for it to appear in \n" "the initial value of a variable or define consists of for it to appear in \n"
"the documentation. If the initializer consists of more lines than specified \n" "the documentation. If the initializer consists of more lines than specified \n"
"here it will be hidden. Use a value of 0 to hide initializers completely. \n" "here it will be hidden. Use a value of 0 to hide initializers completely. \n"
"The appearance of the initializer of individual variables and defines in the \n" "The appearance of the initializer of individual variables and defines in the \n"
...@@ -1652,7 +1652,7 @@ void Config::create() ...@@ -1652,7 +1652,7 @@ void Config::create()
"OPTIMIZE_OUTPUT_FOR_C", "OPTIMIZE_OUTPUT_FOR_C",
"Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources \n" "Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources \n"
"only. Doxygen will then generate output that is more tailored for C. \n" "only. Doxygen will then generate output that is more tailored for C. \n"
"For instance some of the names that are used will be different. The list \n" "For instance, some of the names that are used will be different. The list \n"
"of all members will be omitted, etc. \n", "of all members will be omitted, etc. \n",
FALSE FALSE
); );
...@@ -1660,7 +1660,7 @@ void Config::create() ...@@ -1660,7 +1660,7 @@ void Config::create()
"OPTIMIZE_OUTPUT_JAVA", "OPTIMIZE_OUTPUT_JAVA",
"Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources \n" "Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources \n"
"only. Doxygen will then generate output that is more tailored for Java. \n" "only. Doxygen will then generate output that is more tailored for Java. \n"
"For instance namespaces will be presented as packages, qualified scopes \n" "For instance, namespaces will be presented as packages, qualified scopes \n"
"will look different, etc. \n", "will look different, etc. \n",
FALSE FALSE
); );
...@@ -1921,7 +1921,7 @@ void Config::create() ...@@ -1921,7 +1921,7 @@ void Config::create()
cs->addDependency("GENERATE_HTML"); cs->addDependency("GENERATE_HTML");
cs = addString( cs = addString(
"HTML_STYLESHEET", "HTML_STYLESHEET",
"The HTML_STYLESHEET tag can be used to specify a user defined cascading \n" "The HTML_STYLESHEET tag can be used to specify a user-defined cascading \n"
"style sheet that is used by each HTML page. It can be used to \n" "style sheet that is used by each HTML page. It can be used to \n"
"fine-tune the look of the HTML output. If the tag is left blank doxygen \n" "fine-tune the look of the HTML output. If the tag is left blank doxygen \n"
"will generate a default style sheet \n" "will generate a default style sheet \n"
...@@ -1957,8 +1957,8 @@ void Config::create() ...@@ -1957,8 +1957,8 @@ void Config::create()
"HHC_LOCATION", "HHC_LOCATION",
"If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \n" "If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \n"
"be used to specify the location (absolute path including file name) of \n" "be used to specify the location (absolute path including file name) of \n"
"the HTML help compiler (hhc.exe). If non empty doxygen will try to run \n" "the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \n"
"the html help compiler on the generated index.hhp.\n" "the HTML help compiler on the generated index.hhp.\n"
); );
cs->addDependency("GENERATE_HTML"); cs->addDependency("GENERATE_HTML");
cb = addBool( cb = addBool(
...@@ -1980,7 +1980,7 @@ void Config::create() ...@@ -1980,7 +1980,7 @@ void Config::create()
cb = addBool( cb = addBool(
"TOC_EXPAND", "TOC_EXPAND",
"The TOC_EXPAND flag can be set to YES to add extra items for group members \n" "The TOC_EXPAND flag can be set to YES to add extra items for group members \n"
"to the contents of the Html help documentation and to the tree view. \n", "to the contents of the HTML help documentation and to the tree view. \n",
FALSE FALSE
); );
cb->addDependency("GENERATE_HTML"); cb->addDependency("GENERATE_HTML");
...@@ -2431,9 +2431,9 @@ void Config::create() ...@@ -2431,9 +2431,9 @@ void Config::create()
cb = addBool( cb = addBool(
"CLASS_DIAGRAMS", "CLASS_DIAGRAMS",
"If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n" "If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n"
"generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or \n" "generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or \n"
"super classes. Setting the tag to NO turns the diagrams off. Note that this \n" "super classes. Setting the tag to NO turns the diagrams off. Note that this \n"
"option is superceded by the HAVE_DOT option below. This is only a fallback. It is \n" "option is superseded by the HAVE_DOT option below. This is only a fallback. It is \n"
"recommended to install and use dot, since it yield more powerful graphs. \n", "recommended to install and use dot, since it yield more powerful graphs. \n",
TRUE TRUE
); );
...@@ -2470,6 +2470,14 @@ void Config::create() ...@@ -2470,6 +2470,14 @@ void Config::create()
TRUE TRUE
); );
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool(
"UML_LOOK",
"If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n"
"colloborations diagrams in a style similiar to the OMG's Unified Modeling \n"
"Language. \n",
FALSE
);
cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"TEMPLATE_RELATIONS", "TEMPLATE_RELATIONS",
"If set to YES, the inheritance and collaboration graphs will show the \n" "If set to YES, the inheritance and collaboration graphs will show the \n"
...@@ -2495,6 +2503,16 @@ void Config::create() ...@@ -2495,6 +2503,16 @@ void Config::create()
TRUE TRUE
); );
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool(
"CALL_GRAPH",
"If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will \n"
"generate a call dependency graph for every global function or class method. \n"
"Note that enabling this option will significantly increase the time of a run. \n"
"So in most cases it will be better to enable call graphs for selected \n"
"functions only using the \\callgraph command.\n",
FALSE
);
cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"GRAPHICAL_HIERARCHY", "GRAPHICAL_HIERARCHY",
"If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \n" "If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \n"
...@@ -2556,7 +2574,7 @@ void Config::create() ...@@ -2556,7 +2574,7 @@ void Config::create()
"1 or 2 may greatly reduce the computation time needed for large code bases. Also \n" "1 or 2 may greatly reduce the computation time needed for large code bases. Also \n"
"note that a graph may be further truncated if the graph's image dimensions are \n" "note that a graph may be further truncated if the graph's image dimensions are \n"
"not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). \n" "not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). \n"
"If 0 is used fot the depth value (the default), the graph is not depth constraint. \n", "If 0 is used for the depth value (the default), the graph is not depth-constrained. \n",
0,1000,0 0,1000,0
); );
ci->addDependency("HAVE_DOT"); ci->addDependency("HAVE_DOT");
...@@ -2571,7 +2589,7 @@ void Config::create() ...@@ -2571,7 +2589,7 @@ void Config::create()
cb = addBool( cb = addBool(
"DOT_CLEANUP", "DOT_CLEANUP",
"If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \n" "If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \n"
"remove the intermedate dot files that are used to generate \n" "remove the intermediate dot files that are used to generate \n"
"the various graphs. \n", "the various graphs. \n",
TRUE TRUE
); );
......
...@@ -826,6 +826,15 @@ reparsetoken: ...@@ -826,6 +826,15 @@ reparsetoken:
doctokenizerYYsetStatePara(); doctokenizerYYsetStatePara();
} }
break; break;
case CMD_XMLONLY:
{
doctokenizerYYsetStateXmlOnly();
tok = doctokenizerYYlex();
children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::XmlOnly,g_isExample,g_exampleName));
if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: xmlonly section ended without end marker",doctokenizerYYlineno);
doctokenizerYYsetStatePara();
}
break;
case CMD_FORMULA: case CMD_FORMULA:
{ {
DocFormula *form=new DocFormula(parent,g_token->id); DocFormula *form=new DocFormula(parent,g_token->id);
...@@ -3043,7 +3052,8 @@ int DocParamList::parse(const QString &cmdName) ...@@ -3043,7 +3052,8 @@ int DocParamList::parse(const QString &cmdName)
{ {
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected end of comment block while parsing the " warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected end of comment block while parsing the "
"argument of command %s",cmdName.data()); "argument of command %s",cmdName.data());
return 0; retval=0;
goto endparamlist;
} }
ASSERT(tok==TK_WHITESPACE); ASSERT(tok==TK_WHITESPACE);
...@@ -3051,6 +3061,7 @@ int DocParamList::parse(const QString &cmdName) ...@@ -3051,6 +3061,7 @@ int DocParamList::parse(const QString &cmdName)
m_paragraph->markFirst(); m_paragraph->markFirst();
m_paragraph->markLast(); m_paragraph->markLast();
endparamlist:
DBG(("DocParamList::parse() end retval=%d\n",retval)); DBG(("DocParamList::parse() end retval=%d\n",retval));
DocNode *n=g_nodeStack.pop(); DocNode *n=g_nodeStack.pop();
ASSERT(n==this); ASSERT(n==this);
...@@ -3588,6 +3599,15 @@ int DocPara::handleCommand(const QString &cmdName) ...@@ -3588,6 +3599,15 @@ int DocPara::handleCommand(const QString &cmdName)
doctokenizerYYsetStatePara(); doctokenizerYYsetStatePara();
} }
break; break;
case CMD_XMLONLY:
{
doctokenizerYYsetStateXmlOnly();
retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::XmlOnly,g_isExample,g_exampleName));
if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: xmlonly section ended without end marker");
doctokenizerYYsetStatePara();
}
break;
case CMD_VERBATIM: case CMD_VERBATIM:
{ {
doctokenizerYYsetStateVerbatim(); doctokenizerYYsetStateVerbatim();
...@@ -3600,6 +3620,7 @@ int DocPara::handleCommand(const QString &cmdName) ...@@ -3600,6 +3620,7 @@ int DocPara::handleCommand(const QString &cmdName)
case CMD_ENDCODE: case CMD_ENDCODE:
case CMD_ENDHTMLONLY: case CMD_ENDHTMLONLY:
case CMD_ENDLATEXONLY: case CMD_ENDLATEXONLY:
case CMD_ENDXMLONLY:
case CMD_ENDLINK: case CMD_ENDLINK:
case CMD_ENDVERBATIM: case CMD_ENDVERBATIM:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected command %s",g_token->name.data()); warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected command %s",g_token->name.data());
...@@ -4491,6 +4512,9 @@ int DocSection::parse() ...@@ -4491,6 +4512,9 @@ int DocSection::parse()
retval=0; // stop parsing retval=0; // stop parsing
} }
else
{
}
INTERNAL_ASSERT(retval==0 || INTERNAL_ASSERT(retval==0 ||
retval==RetVal_Section || retval==RetVal_Section ||
...@@ -4615,6 +4639,18 @@ void DocRoot::parse() ...@@ -4615,6 +4639,18 @@ void DocRoot::parse()
{ {
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid list item found"); warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid list item found");
} }
else if (retval==RetVal_Subsection)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: found subsection command outside of section context!");
}
else if (retval==RetVal_Subsubsection)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: found subsubsection command outside of subsection context!");
}
else if (retval==RetVal_Paragraph)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: found paragraph command outside of subsubsection context!");
}
} while (retval!=0 && retval!=RetVal_Section && retval!=RetVal_Internal); } while (retval!=0 && retval!=RetVal_Section && retval!=RetVal_Internal);
if (lastPar) lastPar->markLast(); if (lastPar) lastPar->markLast();
...@@ -4642,6 +4678,7 @@ void DocRoot::parse() ...@@ -4642,6 +4678,7 @@ void DocRoot::parse()
retval = in->parse(); retval = in->parse();
} }
handleUnclosedStyleCommands(); handleUnclosedStyleCommands();
DocNode *n = g_nodeStack.pop(); DocNode *n = g_nodeStack.pop();
......
...@@ -351,7 +351,7 @@ class DocWhiteSpace : public DocNode ...@@ -351,7 +351,7 @@ class DocWhiteSpace : public DocNode
class DocVerbatim : public DocNode class DocVerbatim : public DocNode
{ {
public: public:
enum Type { Code, HtmlOnly, LatexOnly, Verbatim }; enum Type { Code, HtmlOnly, LatexOnly, XmlOnly, Verbatim };
DocVerbatim(DocNode *parent,const QString &context, DocVerbatim(DocNode *parent,const QString &context,
const QString &text, Type t,bool isExample, const QString &text, Type t,bool isExample,
const QString &exampleFile) : const QString &exampleFile) :
......
...@@ -121,6 +121,7 @@ void doctokenizerYYsetStateTitle(); ...@@ -121,6 +121,7 @@ void doctokenizerYYsetStateTitle();
void doctokenizerYYsetStateCode(); void doctokenizerYYsetStateCode();
void doctokenizerYYsetStateHtmlOnly(); void doctokenizerYYsetStateHtmlOnly();
void doctokenizerYYsetStateLatexOnly(); void doctokenizerYYsetStateLatexOnly();
void doctokenizerYYsetStateXmlOnly();
void doctokenizerYYsetStateVerbatim(); void doctokenizerYYsetStateVerbatim();
void doctokenizerYYsetStateParam(); void doctokenizerYYsetStateParam();
void doctokenizerYYsetStateXRefItem(); void doctokenizerYYsetStateXRefItem();
......
...@@ -306,6 +306,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -306,6 +306,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
%x St_Code %x St_Code
%x St_HtmlOnly %x St_HtmlOnly
%x St_LatexOnly %x St_LatexOnly
%x St_XmlOnly
%x St_Verbatim %x St_Verbatim
%x St_Param %x St_Param
%x St_XRefItem %x St_XRefItem
...@@ -507,6 +508,14 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -507,6 +508,14 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
<St_LatexOnly>. { <St_LatexOnly>. {
g_token->verb+=yytext; g_token->verb+=yytext;
} }
<St_XmlOnly>{CMD}"endxmlonly" {
return RetVal_OK;
}
<St_XmlOnly>[^\\@\n]+ |
<St_XmlOnly>\n |
<St_XmlOnly>. {
g_token->verb+=yytext;
}
<St_Verbatim>{CMD}"endverbatim" { <St_Verbatim>{CMD}"endverbatim" {
return RetVal_OK; return RetVal_OK;
} }
...@@ -742,6 +751,10 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -742,6 +751,10 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
g_endMarker="endlatexonly"; g_endMarker="endlatexonly";
BEGIN(St_SecSkip); BEGIN(St_SecSkip);
} }
<St_Sections>{CMD}"xmlonly" {
g_endMarker="endxmlonly";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"code" { <St_Sections>{CMD}"code" {
g_endMarker="endcode"; g_endMarker="endcode";
BEGIN(St_SecSkip); BEGIN(St_SecSkip);
...@@ -850,6 +863,12 @@ void doctokenizerYYsetStateHtmlOnly() ...@@ -850,6 +863,12 @@ void doctokenizerYYsetStateHtmlOnly()
BEGIN(St_HtmlOnly); BEGIN(St_HtmlOnly);
} }
void doctokenizerYYsetStateXmlOnly()
{
g_token->verb="";
BEGIN(St_XmlOnly);
}
void doctokenizerYYsetStateLatexOnly() void doctokenizerYYsetStateLatexOnly()
{ {
g_token->verb=""; g_token->verb="";
......
...@@ -46,15 +46,15 @@ static const char *edgeColorMap[] = ...@@ -46,15 +46,15 @@ static const char *edgeColorMap[] =
"orange" // template relation "orange" // template relation
}; };
//static const char *arrowStyle[] = static const char *arrowStyle[] =
//{ {
// "empty", // Public "empty", // Public
// "empty", // Protected "empty", // Protected
// "empty", // Private "empty", // Private
// "open", // "use" relation "open", // "use" relation
// 0, // Undocumented 0, // Undocumented
// 0 // template relation 0 // template relation
//}; };
static const char *edgeStyleMap[] = static const char *edgeStyleMap[] =
{ {
...@@ -418,8 +418,21 @@ static QCString convertLabel(const QCString &l) ...@@ -418,8 +418,21 @@ static QCString convertLabel(const QCString &l)
return result; return result;
} }
static void writeBoxMemberList(QTextStream &t,char prot,MemberList &ml,ClassDef *scope)
{
MemberListIterator mlia(ml);
MemberDef *mma;
for (mlia.toFirst();(mma = mlia.current());++mlia)
{
if (mma->getClassDef() == scope)
{
t << prot << " " << convertLabel(mma->name()) << "\\l";
}
}
}
void DotNode::writeBox(QTextStream &t, void DotNode::writeBox(QTextStream &t,
GraphType /* gt */, GraphType gt,
GraphOutputFormat /*format*/, GraphOutputFormat /*format*/,
bool hasNonReachableChildren) bool hasNonReachableChildren)
{ {
...@@ -428,24 +441,65 @@ void DotNode::writeBox(QTextStream &t, ...@@ -428,24 +441,65 @@ void DotNode::writeBox(QTextStream &t,
( (
(hasNonReachableChildren) ? "red" : "black" (hasNonReachableChildren) ? "red" : "black"
); );
t << " Node" << m_number << " [label=\"" t << " Node" << m_number << " [label=\"";
<< convertLabel(m_label)
<< "\",height=0.2,width=0.4"; if (Config_getBool("UML_LOOK") && (gt==Inheritance || gt==Collaboration))
//if (format==BITMAP) t << ",fontname=\"Helvetica\""; {
t << ",color=\"" << labCol << "\""; t << "{" << convertLabel(m_label);
t << "\\n|";
writeBoxMemberList(t,'+',m_classDef->pubAttribs,m_classDef);
writeBoxMemberList(t,'+',m_classDef->pubStaticAttribs,m_classDef);
writeBoxMemberList(t,'~',m_classDef->pacAttribs,m_classDef);
writeBoxMemberList(t,'~',m_classDef->pacStaticAttribs,m_classDef);
writeBoxMemberList(t,'#',m_classDef->proAttribs,m_classDef);
writeBoxMemberList(t,'#',m_classDef->proStaticAttribs,m_classDef);
writeBoxMemberList(t,'-',m_classDef->priAttribs,m_classDef);
writeBoxMemberList(t,'-',m_classDef->priStaticAttribs,m_classDef);
t << "|";
writeBoxMemberList(t,'+',m_classDef->pubMethods,m_classDef);
writeBoxMemberList(t,'+',m_classDef->pubStaticMethods,m_classDef);
writeBoxMemberList(t,'+',m_classDef->pubSlots,m_classDef);
writeBoxMemberList(t,'~',m_classDef->pacMethods,m_classDef);
writeBoxMemberList(t,'~',m_classDef->pacStaticMethods,m_classDef);
writeBoxMemberList(t,'#',m_classDef->proMethods,m_classDef);
writeBoxMemberList(t,'#',m_classDef->proStaticMethods,m_classDef);
writeBoxMemberList(t,'#',m_classDef->proSlots,m_classDef);
writeBoxMemberList(t,'-',m_classDef->priMethods,m_classDef);
writeBoxMemberList(t,'-',m_classDef->priStaticMethods,m_classDef);
writeBoxMemberList(t,'-',m_classDef->priSlots,m_classDef);
t << "}";
}
else // old look
{
t << convertLabel(m_label);
}
t << "\",height=0.2,width=0.4";
if (m_isRoot) if (m_isRoot)
{ {
t << ",style=\"filled\" fontcolor=\"white\""; t << ",color=\"white\", fillcolor=\"black\", style=\"filled\" fontcolor=\"white\"";
} }
else if (!m_url.isEmpty()) else
{ {
t << ",URL=\"" << m_url << Doxygen::htmlFileExtension << "\""; t << ",color=\"" << labCol << "\"";
if (!m_url.isEmpty())
{
int anchorPos = m_url.findRev('#');
if (anchorPos==-1)
{
t << ",URL=\"" << m_url << Doxygen::htmlFileExtension << "\"";
}
else
{
t << ",URL=\"" << m_url.left(anchorPos) << Doxygen::htmlFileExtension
<< m_url.right(m_url.length()-anchorPos) << "\"";
}
}
} }
t << "];" << endl; t << "];" << endl;
} }
void DotNode::writeArrow(QTextStream &t, void DotNode::writeArrow(QTextStream &t,
GraphType /* gt */, GraphType gt,
GraphOutputFormat format, GraphOutputFormat format,
DotNode *cn, DotNode *cn,
EdgeInfo *ei, EdgeInfo *ei,
...@@ -465,10 +519,17 @@ void DotNode::writeArrow(QTextStream &t, ...@@ -465,10 +519,17 @@ void DotNode::writeArrow(QTextStream &t,
{ {
t << ",label=\"" << ei->m_label << "\""; t << ",label=\"" << ei->m_label << "\"";
} }
//if (arrowStyle[ei->m_color]) if (Config_getBool("UML_LOOK") &&
//{ arrowStyle[ei->m_color] &&
// if (pointBack) t << ",arrowtail=\"empty\""; else t << ",arrowhead=\"empty\""; (gt==Inheritance || gt==Collaboration)
//} )
{
if (pointBack)
t << ",arrowtail=\"" <<arrowStyle[ei->m_color] << "\"";
else
t << ",arrowhead=\"" << arrowStyle[ei->m_color] << "\"";
}
if (format==BITMAP) t << ",fontname=\"Helvetica\""; if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << "];" << endl; t << "];" << endl;
} }
...@@ -1015,7 +1076,7 @@ DotGfxHierarchyTable::~DotGfxHierarchyTable() ...@@ -1015,7 +1076,7 @@ DotGfxHierarchyTable::~DotGfxHierarchyTable()
//-------------------------------------------------------------------- //--------------------------------------------------------------------
int DotClassGraph::m_curNodeNumber; int DotClassGraph::m_curNodeNumber = 0;
void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot, void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot,
const char *label,int distance,const char *usedName,const char *templSpec,bool base) const char *label,int distance,const char *usedName,const char *templSpec,bool base)
...@@ -1096,7 +1157,7 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base) ...@@ -1096,7 +1157,7 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base)
// cd->name().data(),distance,base); // cd->name().data(),distance,base);
// ---- Add inheritance relations // ---- Add inheritance relations
if (m_graphType == DotNode::Inheritance) if (m_graphType == DotNode::Inheritance || m_graphType==DotNode::Collaboration)
{ {
BaseClassListIterator bcli(base ? *cd->baseClasses() : *cd->subClasses()); BaseClassListIterator bcli(base ? *cd->baseClasses() : *cd->subClasses());
BaseClassDef *bcd; BaseClassDef *bcd;
...@@ -1108,10 +1169,8 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base) ...@@ -1108,10 +1169,8 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base)
bcd->templSpecifiers,base); bcd->templSpecifiers,base);
} }
} }
else // m_graphType != Inheritance if (m_graphType == DotNode::Collaboration)
{ {
ASSERT(m_graphType==DotNode::Collaboration);
// ---- Add usage relations // ---- Add usage relations
UsesClassDict *dict = UsesClassDict *dict =
...@@ -1266,7 +1325,7 @@ void writeDotGraph(DotNode *root, ...@@ -1266,7 +1325,7 @@ void writeDotGraph(DotNode *root,
t << " rankdir=LR;" << endl; t << " rankdir=LR;" << endl;
} }
root->clearWriteFlag(); root->clearWriteFlag();
root->write(t,gt,format,TRUE,TRUE,distance,backArrows); root->write(t,gt,format,gt!=DotNode::CallGraph,TRUE,distance,backArrows);
if (renderParents && root->m_parents) if (renderParents && root->m_parents)
{ {
//printf("rendering parents!\n"); //printf("rendering parents!\n");
...@@ -1356,11 +1415,14 @@ static void findMaximalDotGraph(DotNode *root, ...@@ -1356,11 +1415,14 @@ static void findMaximalDotGraph(DotNode *root,
} }
//printf("lastFit=%d\n",lastFit); //printf("lastFit=%d\n",lastFit);
bool hasLRRank = (lrRank || (minDistance==1 && width>Config_getInt("MAX_DOT_GRAPH_WIDTH"))) &&
!Config_getBool("UML_LOOK");
writeDotGraph(root, writeDotGraph(root,
gt, gt,
format, format,
baseName, baseName,
lrRank || (minDistance==1 && width>Config_getInt("MAX_DOT_GRAPH_WIDTH")), hasLRRank,
renderParents, renderParents,
lastFit, lastFit,
backArrows backArrows
...@@ -1552,7 +1614,7 @@ void DotClassGraph::writeDEF(QTextStream &t) ...@@ -1552,7 +1614,7 @@ void DotClassGraph::writeDEF(QTextStream &t)
//-------------------------------------------------------------------- //--------------------------------------------------------------------
int DotInclDepGraph::m_curNodeNumber; int DotInclDepGraph::m_curNodeNumber = 0;
void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance) void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
{ {
...@@ -1784,6 +1846,221 @@ void DotInclDepGraph::writeXML(QTextStream &t) ...@@ -1784,6 +1846,221 @@ void DotInclDepGraph::writeXML(QTextStream &t)
//------------------------------------------------------------- //-------------------------------------------------------------
int DotCallGraph::m_curNodeNumber = 0;
DotCallGraph::DotCallGraph(MemberDef *md,int maxRecursionDepth)
{
m_maxDistance = 0;
m_recDepth = maxRecursionDepth;
if (md->getGroupDef())
{
m_diskName = md->getGroupDef()->getOutputFileBase()+"_"+md->getBodyAnchor();
}
else
{
m_diskName = md->getOutputFileBase()+"_"+md->anchor();
}
QCString uniqueId;
if (md->getGroupDef()) // member is in a group
{
uniqueId = md->getReference()+"$"+
md->getGroupDef()->getOutputFileBase()+"#"+md->getBodyAnchor();
}
else // ungrouped member
{
uniqueId = md->getReference()+"$"+
md->getOutputFileBase()+"#"+md->anchor();
}
m_startNode = new DotNode(m_curNodeNumber++,
md->qualifiedName(),
uniqueId.data(),
0, // distance
TRUE // root node
);
m_usedNodes = new QDict<DotNode>(1009);
m_usedNodes->insert(uniqueId,m_startNode);
buildGraph(m_startNode,md,1);
}
DotCallGraph::~DotCallGraph()
{
deleteNodes(m_startNode);
delete m_usedNodes;
}
QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
const char *path,bool generateImageMap)
{
QDir d(path);
// store the original directory
if (!d.exists())
{
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
// go to the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
QDir thisDir;
QCString baseName=m_diskName+"_cgraph";
//baseName=convertNameToFile(baseName);
QCString mapName=baseName;
findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),
baseName,thisDir,DotNode::CallGraph,format,
TRUE,FALSE,FALSE);
if (format==BITMAP)
{
// run dot to create a bitmap image
QCString dotArgs(maxCmdLine);
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString imgName=baseName+"."+imgExt;
dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
imgExt.data(),baseName.data(),imgName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
checkDotResult(imgName);
if (generateImageMap)
{
// run dot again to create an image map
dotArgs.sprintf("-Timap \"%s.dot\" -o \"%s.map\"",
baseName.data(),baseName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapName << "_map\" alt=\"";
out << "\">";
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapName << "_map\">" << endl;
out << tmpstr;
out << "</map>" << endl;
}
thisDir.remove(baseName+".map");
}
}
else if (format==EPS)
{
// run dot to create a .eps image
QCString dotArgs(maxCmdLine);
dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",
baseName.data(),baseName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return baseName;
}
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
baseName.data(),baseName.data());
if (iSystem("epstopdf",epstopdfArgs,TRUE)!=0)
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
}
int maxWidth = 420; /* approx. page width in points */
out << "\\begin{figure}[H]\n"
"\\begin{center}\n"
"\\leavevmode\n"
"\\includegraphics[width=" << QMIN(width/2,maxWidth)
<< "pt]{" << baseName << "}\n"
"\\end{center}\n"
"\\end{figure}\n";
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
QDir::setCurrent(oldDir);
return baseName;
}
void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance)
{
MemberSDict *refs = md->getReferencesMembers();
if (refs)
{
MemberSDict::Iterator mri(*refs);
MemberDef *rmd;
for (;(rmd=mri.current());++mri)
{
if (rmd->isFunction())
{
QCString uniqueId;
if (rmd->getGroupDef()) // member is in a group
{
uniqueId = rmd->getReference()+"$"+
rmd->getGroupDef()->getOutputFileBase()+"#"+rmd->getBodyAnchor();
}
else // ungrouped member
{
uniqueId=rmd->getReference()+"$"+
rmd->getOutputFileBase()+"#"+rmd->anchor();
}
DotNode *bn = m_usedNodes->find(uniqueId);
if (bn) // file is already a node in the graph
{
n->addChild(bn,0,0,0);
bn->addParent(n);
bn->setDistance(distance);
}
else
{
bn = new DotNode(
m_curNodeNumber++,
rmd->qualifiedName(),
uniqueId,
distance
);
if (distance>m_maxDistance) m_maxDistance=distance;
n->addChild(bn,0,0,0);
bn->addParent(n);
m_usedNodes->insert(uniqueId,bn);
// we use <=, i.s.o < to cause one more level than intended which is used to
// detect truncated nodes
if (distance<=m_recDepth) buildGraph(bn,rmd,distance+1);
}
}
}
}
}
bool DotCallGraph::isTrivial() const
{
return m_startNode->m_children==0;
}
//-------------------------------------------------------------
void generateGraphLegend(const char *path) void generateGraphLegend(const char *path)
{ {
QFile dotFile((QCString)path+"/graph_legend.dot"); QFile dotFile((QCString)path+"/graph_legend.dot");
......
...@@ -29,6 +29,7 @@ class FileDef; ...@@ -29,6 +29,7 @@ class FileDef;
class QTextStream; class QTextStream;
class DotNodeList; class DotNodeList;
class ClassSDict; class ClassSDict;
class MemberDef;
enum GraphOutputFormat { BITMAP , EPS }; enum GraphOutputFormat { BITMAP , EPS };
...@@ -48,7 +49,7 @@ struct EdgeInfo ...@@ -48,7 +49,7 @@ struct EdgeInfo
class DotNode class DotNode
{ {
public: public:
enum GraphType { Dependency, Inheritance, Collaboration, Hierarchy }; enum GraphType { Dependency, Inheritance, Collaboration, Hierarchy, CallGraph };
DotNode(int n,const char *lab,const char *url,int distance = 0,bool rootNode=FALSE,ClassDef *cd=0); DotNode(int n,const char *lab,const char *url,int distance = 0,bool rootNode=FALSE,ClassDef *cd=0);
~DotNode(); ~DotNode();
void addChild(DotNode *n, void addChild(DotNode *n,
...@@ -96,6 +97,7 @@ class DotNode ...@@ -96,6 +97,7 @@ class DotNode
friend class DotClassGraph; friend class DotClassGraph;
friend class DotInclDepGraph; friend class DotInclDepGraph;
friend class DotNodeList; friend class DotNodeList;
friend class DotCallGraph;
friend void writeDotGraph( friend void writeDotGraph(
DotNode *root, DotNode *root,
GraphType gt, GraphType gt,
...@@ -175,6 +177,25 @@ class DotInclDepGraph ...@@ -175,6 +177,25 @@ class DotInclDepGraph
int m_recDepth; int m_recDepth;
}; };
class DotCallGraph
{
public:
DotCallGraph(MemberDef *md,int maxRecursionDepth);
~DotCallGraph();
QCString writeGraph(QTextStream &t, GraphOutputFormat f,
const char *path,bool writeImageMap=TRUE);
void buildGraph(DotNode *n,MemberDef *md,int distance);
bool isTrivial() const;
private:
DotNode *m_startNode;
static int m_curNodeNumber;
QDict<DotNode> *m_usedNodes;
int m_maxDistance;
int m_recDepth;
QCString m_diskName;
};
void generateGraphLegend(const char *path); void generateGraphLegend(const char *path);
void writeDotGraphFromFile(const char *inFile,const char *outDir, void writeDotGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,GraphOutputFormat format); const char *outFile,GraphOutputFormat format);
......
...@@ -110,6 +110,7 @@ NamespaceDef *Doxygen::globalScope = new NamespaceDef("<globalScope>",1,"<globa ...@@ -110,6 +110,7 @@ NamespaceDef *Doxygen::globalScope = new NamespaceDef("<globalScope>",1,"<globa
QDict<RefList> *Doxygen::xrefLists = new QDict<RefList>; // dictionary of cross-referenced item lists QDict<RefList> *Doxygen::xrefLists = new QDict<RefList>; // dictionary of cross-referenced item lists
bool Doxygen::parseSourcesNeeded = FALSE;
static StringList inputFiles; static StringList inputFiles;
static StringDict excludeNameDict(1009); // sections static StringDict excludeNameDict(1009); // sections
...@@ -1262,6 +1263,7 @@ static void findUsingDeclImports(Entry *root) ...@@ -1262,6 +1263,7 @@ static void findUsingDeclImports(Entry *root)
newMd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine()); newMd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
} }
newMd->setDefinition(md->definition()); newMd->setDefinition(md->definition());
newMd->enableCallGraph(root->callGraph);
newMd->setBitfields(md->bitfieldString()); newMd->setBitfields(md->bitfieldString());
newMd->addSectionsToDefinition(root->anchors); newMd->addSectionsToDefinition(root->anchors);
newMd->setBodySegment(md->getStartBodyLine(),md->getEndBodyLine()); newMd->setBodySegment(md->getStartBodyLine(),md->getEndBodyLine());
...@@ -1420,6 +1422,7 @@ static MemberDef *addVariableToClass( ...@@ -1420,6 +1422,7 @@ static MemberDef *addVariableToClass(
md->setMaxInitLines(root->initLines); md->setMaxInitLines(root->initLines);
md->setMemberGroupId(root->mGrpId); md->setMemberGroupId(root->mGrpId);
md->setMemberSpecifiers(root->memSpec); md->setMemberSpecifiers(root->memSpec);
md->enableCallGraph(root->callGraph);
addMemberToGroups(root,md); addMemberToGroups(root,md);
//if (root->mGrpId!=-1) //if (root->mGrpId!=-1)
//{ //{
...@@ -1588,6 +1591,7 @@ static MemberDef *addVariableToFile( ...@@ -1588,6 +1591,7 @@ static MemberDef *addVariableToFile(
md->setMemberGroupId(root->mGrpId); md->setMemberGroupId(root->mGrpId);
md->setBodyDef(fd); md->setBodyDef(fd);
md->setDefinition(def); md->setDefinition(def);
md->enableCallGraph(root->callGraph);
md->setExplicitExternal(root->explicitExternal); md->setExplicitExternal(root->explicitExternal);
addMemberToGroups(root,md); addMemberToGroups(root,md);
//if (root->mGrpId!=-1) //if (root->mGrpId!=-1)
...@@ -2061,6 +2065,7 @@ static void addMethodToClass(Entry *root,ClassDef *cd, ...@@ -2061,6 +2065,7 @@ static void addMethodToClass(Entry *root,ClassDef *cd,
} }
if (def.left(7)=="friend ") def=def.right(def.length()-7); if (def.left(7)=="friend ") def=def.right(def.length()-7);
md->setDefinition(def); md->setDefinition(def);
md->enableCallGraph(root->callGraph);
Debug::print(Debug::Functions,0, Debug::print(Debug::Functions,0,
" Func Member:\n" " Func Member:\n"
...@@ -2267,6 +2272,8 @@ static void buildFunctionList(Entry *root) ...@@ -2267,6 +2272,8 @@ static void buildFunctionList(Entry *root)
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
md->enableCallGraph(md->hasCallGraph() || root->callGraph);
// merge ingroup specifiers // merge ingroup specifiers
if (md->getGroupDef()==0 && root->groups->first()) if (md->getGroupDef()==0 && root->groups->first())
{ {
...@@ -2350,6 +2357,7 @@ static void buildFunctionList(Entry *root) ...@@ -2350,6 +2357,7 @@ static void buildFunctionList(Entry *root)
def.data() def.data()
); );
md->setDefinition(def); md->setDefinition(def);
md->enableCallGraph(root->callGraph);
//if (root->mGrpId!=-1) //if (root->mGrpId!=-1)
//{ //{
// md->setMemberGroup(memberGroupDict[root->mGrpId]); // md->setMemberGroup(memberGroupDict[root->mGrpId]);
...@@ -2486,6 +2494,9 @@ static void findFriends() ...@@ -2486,6 +2494,9 @@ static void findFriends()
fmd->setBodyMember(mmd); fmd->setBodyMember(mmd);
} }
mmd->setDocsForDefinition(fmd->isDocsForDefinition()); mmd->setDocsForDefinition(fmd->isDocsForDefinition());
mmd->enableCallGraph(mmd->hasCallGraph() || fmd->hasCallGraph());
fmd->enableCallGraph(mmd->hasCallGraph() || fmd->hasCallGraph());
} }
} }
} }
...@@ -2643,6 +2654,9 @@ static void transferFunctionDocumentation() ...@@ -2643,6 +2654,9 @@ static void transferFunctionDocumentation()
mdef->setMemberDeclaration(mdec); mdef->setMemberDeclaration(mdec);
mdec->setMemberDefinition(mdef); mdec->setMemberDefinition(mdef);
mdef->enableCallGraph(mdec->hasCallGraph() || mdef->hasCallGraph());
mdec->enableCallGraph(mdec->hasCallGraph() || mdef->hasCallGraph());
} }
} }
} }
...@@ -3760,6 +3774,7 @@ static void addMemberDocs(Entry *root, ...@@ -3760,6 +3774,7 @@ static void addMemberDocs(Entry *root,
// strip extern specifier // strip extern specifier
if (fDecl.left(7)=="extern ") fDecl=fDecl.right(fDecl.length()-7); if (fDecl.left(7)=="extern ") fDecl=fDecl.right(fDecl.length()-7);
md->setDefinition(fDecl); md->setDefinition(fDecl);
md->enableCallGraph(root->callGraph);
ClassDef *cd=md->getClassDef(); ClassDef *cd=md->getClassDef();
NamespaceDef *nd=md->getNamespaceDef(); NamespaceDef *nd=md->getNamespaceDef();
QCString fullName; QCString fullName;
...@@ -3857,6 +3872,8 @@ static void addMemberDocs(Entry *root, ...@@ -3857,6 +3872,8 @@ static void addMemberDocs(Entry *root,
md->setRefItems(root->sli); md->setRefItems(root->sli);
} }
md->enableCallGraph(md->hasCallGraph() || root->callGraph);
//md->setDefFile(root->fileName); //md->setDefFile(root->fileName);
//md->setDefLine(root->startLine); //md->setDefLine(root->startLine);
md->mergeMemberSpecifiers(root->memSpec); md->mergeMemberSpecifiers(root->memSpec);
...@@ -4701,6 +4718,7 @@ static void findMember(Entry *root, ...@@ -4701,6 +4718,7 @@ static void findMember(Entry *root,
} }
md->setMemberClass(cd); md->setMemberClass(cd);
md->setDefinition(funcDecl); md->setDefinition(funcDecl);
md->enableCallGraph(root->callGraph);
QCString doc=getOverloadDocs(); QCString doc=getOverloadDocs();
doc+="<p>"; doc+="<p>";
doc+=root->doc; doc+=root->doc;
...@@ -4855,6 +4873,7 @@ static void findMember(Entry *root, ...@@ -4855,6 +4873,7 @@ static void findMember(Entry *root,
md->setMemberClass(cd); md->setMemberClass(cd);
md->setMemberSpecifiers(root->memSpec); md->setMemberSpecifiers(root->memSpec);
md->setDefinition(funcDecl); md->setDefinition(funcDecl);
md->enableCallGraph(root->callGraph);
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
md->setPrototype(root->proto); md->setPrototype(root->proto);
...@@ -5112,6 +5131,7 @@ static void findEnums(Entry *root) ...@@ -5112,6 +5131,7 @@ static void findEnums(Entry *root)
// root->name.data(),root->bodyLine,root->fileName.data(),root->protection); // root->name.data(),root->bodyLine,root->fileName.data(),root->protection);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
md->setMemberGroupId(root->mGrpId); md->setMemberGroupId(root->mGrpId);
md->enableCallGraph(root->callGraph);
//if (root->mGrpId!=-1) //if (root->mGrpId!=-1)
//{ //{
// md->setMemberGroup(memberGroupDict[root->mGrpId]); // md->setMemberGroup(memberGroupDict[root->mGrpId]);
...@@ -5534,6 +5554,12 @@ static void generateFileSources() ...@@ -5534,6 +5554,12 @@ static void generateFileSources()
msg("Generating code for file %s...\n",fd->docName().data()); msg("Generating code for file %s...\n",fd->docName().data());
fd->writeSource(*outputList); fd->writeSource(*outputList);
} }
else if (!fd->isReference() &&
(Doxygen::parseSourcesNeeded || Config_getBool("CALL_GRAPH")))
{
msg("Parsing code for file %s...\n",fd->docName().data());
fd->parseSource();
}
} }
} }
} }
...@@ -6405,7 +6431,7 @@ static void generateSearchIndex() ...@@ -6405,7 +6431,7 @@ static void generateSearchIndex()
QTextStream t(&f); QTextStream t(&f);
t << "#!/bin/sh" << endl t << "#!/bin/sh" << endl
<< "DOXYSEARCH=" << Config_getString("BIN_ABSPATH") << "/doxysearch" << endl << "DOXYSEARCH=" << Config_getString("BIN_ABSPATH") << "/doxysearch" << endl
<< "DOXYPATH=" << Config_getString("DOC_ABSPATH") << " "; << "DOXYPATH=\"" << Config_getString("DOC_ABSPATH") << " ";
QStrList &extDocPaths=Config_getList("EXT_DOC_PATHS"); QStrList &extDocPaths=Config_getList("EXT_DOC_PATHS");
char *s= extDocPaths.first(); char *s= extDocPaths.first();
...@@ -6415,7 +6441,7 @@ static void generateSearchIndex() ...@@ -6415,7 +6441,7 @@ static void generateSearchIndex()
s=extDocPaths.next(); s=extDocPaths.next();
} }
t << endl t << "\"" << endl
<< "if [ -f $DOXYSEARCH ]" << endl << "if [ -f $DOXYSEARCH ]" << endl
<< "then" << endl << "then" << endl
<< " $DOXYSEARCH $DOXYPATH" << endl << " $DOXYSEARCH $DOXYPATH" << endl
......
...@@ -93,6 +93,7 @@ class Doxygen ...@@ -93,6 +93,7 @@ class Doxygen
static NamespaceDef *globalScope; static NamespaceDef *globalScope;
static QDict<RefList> *xrefLists; // array of xref lists: todo, test, bug, deprecated ... static QDict<RefList> *xrefLists; // array of xref lists: todo, test, bug, deprecated ...
static QCString htmlFileExtension; static QCString htmlFileExtension;
static bool parseSourcesNeeded;
}; };
void initDoxygen(); void initDoxygen();
......
...@@ -81,6 +81,7 @@ Entry::Entry(const Entry &e) ...@@ -81,6 +81,7 @@ Entry::Entry(const Entry &e)
memSpec = e.memSpec; memSpec = e.memSpec;
initializer = e.initializer; initializer = e.initializer;
initLines = e.initLines; initLines = e.initLines;
callGraph = e.callGraph;
//todoId = e.todoId; //todoId = e.todoId;
//testId = e.testId; //testId = e.testId;
//bugId = e.bugId; //bugId = e.bugId;
...@@ -240,6 +241,7 @@ void Entry::reset() ...@@ -240,6 +241,7 @@ void Entry::reset()
bodyLine = -1; bodyLine = -1;
endBodyLine = -1; endBodyLine = -1;
mGrpId = -1; mGrpId = -1;
callGraph = FALSE;
//todoId = 0; //todoId = 0;
//testId = 0; //testId = 0;
//bugId = 0; //bugId = 0;
......
...@@ -27,7 +27,7 @@ enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event }; ...@@ -27,7 +27,7 @@ enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event };
struct ListItemInfo struct ListItemInfo
{ {
const char *type; QCString type;
int itemId; int itemId;
}; };
...@@ -253,6 +253,7 @@ class Entry ...@@ -253,6 +253,7 @@ class Entry
int memSpec; //!< member specifiers int memSpec; //!< member specifiers
int initLines; //!< define/variable initializer lines to show int initLines; //!< define/variable initializer lines to show
bool subGrouping; //!< automatically group class members? bool subGrouping; //!< automatically group class members?
bool callGraph; //!< do we need to draw the call graph?
Specifier virt; //!< virtualness of the entry Specifier virt; //!< virtualness of the entry
Entry *parent; //!< parent node in the tree Entry *parent; //!< parent node in the tree
QCString type; //!< member type QCString type; //!< member type
......
...@@ -32,6 +32,25 @@ ...@@ -32,6 +32,25 @@
#include "docparser.h" #include "docparser.h"
//#include "xml.h" //#include "xml.h"
class DevNullCodeDocInterface : public BaseCodeDocInterface
{
public:
virtual void codify(const char *) {}
virtual void writeCodeLink(const char *,const char *,
const char *,const char *) {}
virtual void writeLineNumber(const char *,const char *,
const char *,int) {}
virtual void startCodeLine() {}
virtual void endCodeLine() {}
virtual void startCodeAnchor(const char *) {}
virtual void endCodeAnchor() {}
virtual void startFontClass(const char *) {}
virtual void endFontClass() {}
virtual void writeCodeAnchor(const char *) {}
};
/*! create a new file definition, where \a p is the file path, /*! create a new file definition, where \a p is the file path,
\a the file name, and \a ref is an HTML anchor name if the \a the file name, and \a ref is an HTML anchor name if the
file was read from a tag file or 0 otherwise file was read from a tag file or 0 otherwise
...@@ -487,6 +506,14 @@ void FileDef::writeSource(OutputList &ol) ...@@ -487,6 +506,14 @@ void FileDef::writeSource(OutputList &ol)
ol.enableAll(); ol.enableAll();
} }
void FileDef::parseSource()
{
DevNullCodeDocInterface devNullIntf;
parseCode(devNullIntf,0,
fileToString(absFilePath(),Config_getBool("FILTER_SOURCE_FILES")),
FALSE,0,this
);
}
void FileDef::addMembersToMemberGroup() void FileDef::addMembersToMemberGroup()
{ {
......
...@@ -122,6 +122,7 @@ class FileDef : public Definition ...@@ -122,6 +122,7 @@ class FileDef : public Definition
void writeDetailedDocumentation(OutputList &ol); void writeDetailedDocumentation(OutputList &ol);
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
void writeSource(OutputList &ol); void writeSource(OutputList &ol);
void parseSource();
friend void generatedFileNames(); friend void generatedFileNames();
void insertMember(MemberDef *md); void insertMember(MemberDef *md);
void insertClass(ClassDef *cd); void insertClass(ClassDef *cd);
......
...@@ -437,13 +437,17 @@ int FTVHelp::decContentsDepth() ...@@ -437,13 +437,17 @@ int FTVHelp::decContentsDepth()
{ {
//int i; for (i=0;i<m_dc;i++) m_cts << " "; //int i; for (i=0;i<m_dc;i++) m_cts << " ";
m_indent--; ASSERT(m_indent>0);
QList<FTVNode> *nl = &m_indentNodes[m_indent]; if (m_indent>0)
FTVNode *parent = nl->getLast();
QList<FTVNode> *children = &m_indentNodes[m_indent+1];
while (!children->isEmpty())
{ {
parent->children.append(children->take(0)); m_indent--;
QList<FTVNode> *nl = &m_indentNodes[m_indent];
FTVNode *parent = nl->getLast();
QList<FTVNode> *children = &m_indentNodes[m_indent+1];
while (!children->isEmpty())
{
parent->children.append(children->take(0));
}
} }
return m_indent; return m_indent;
} }
......
...@@ -198,6 +198,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) ...@@ -198,6 +198,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
m_t << s->text(); m_t << s->text();
break; break;
case DocVerbatim::LatexOnly: case DocVerbatim::LatexOnly:
case DocVerbatim::XmlOnly:
/* nothing */ /* nothing */
break; break;
} }
......
...@@ -1053,6 +1053,15 @@ void HtmlGenerator::endInclDepGraph(DotInclDepGraph &g) ...@@ -1053,6 +1053,15 @@ void HtmlGenerator::endInclDepGraph(DotInclDepGraph &g)
g.writeGraph(t,BITMAP,Config_getString("HTML_OUTPUT")); g.writeGraph(t,BITMAP,Config_getString("HTML_OUTPUT"));
} }
void HtmlGenerator::startCallGraph()
{
}
void HtmlGenerator::endCallGraph(DotCallGraph &g)
{
g.writeGraph(t,BITMAP,Config_getString("HTML_OUTPUT"));
}
void HtmlGenerator::writeGraphicalHierarchy(DotGfxHierarchyTable &g) void HtmlGenerator::writeGraphicalHierarchy(DotGfxHierarchyTable &g)
{ {
g.writeGraph(t,Config_getString("HTML_OUTPUT")); g.writeGraph(t,Config_getString("HTML_OUTPUT"));
......
...@@ -185,6 +185,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -185,6 +185,8 @@ class HtmlGenerator : public OutputGenerator
void endDotGraph(DotClassGraph &g); void endDotGraph(DotClassGraph &g);
void startInclDepGraph(); void startInclDepGraph();
void endInclDepGraph(DotInclDepGraph &g); void endInclDepGraph(DotInclDepGraph &g);
void startCallGraph();
void endCallGraph(DotCallGraph &g);
void writeGraphicalHierarchy(DotGfxHierarchyTable &g); void writeGraphicalHierarchy(DotGfxHierarchyTable &g);
void startTextBlock(bool) {} void startTextBlock(bool) {}
......
...@@ -1298,6 +1298,7 @@ void writeAlphabeticalClassList(OutputList &ol) ...@@ -1298,6 +1298,7 @@ void writeAlphabeticalClassList(OutputList &ol)
if (cd->isLinkableInProject() && cd->templateMaster()==0) if (cd->isLinkableInProject() && cd->templateMaster()==0)
{ {
int index = getPrefixIndex(cd->className()); int index = getPrefixIndex(cd->className());
//printf("name=%s index=%d\n",cd->className().data(),index);
if (toupper(cd->className().at(index))!=startLetter) // new begin letter => new header if (toupper(cd->className().at(index))!=startLetter) // new begin letter => new header
{ {
startLetter=toupper(cd->className().at(index)); startLetter=toupper(cd->className().at(index));
...@@ -2270,6 +2271,13 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2270,6 +2271,13 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
{ {
HtmlHelp *htmlHelp=0; HtmlHelp *htmlHelp=0;
FTVHelp *ftvHelp = 0; FTVHelp *ftvHelp = 0;
if (level>20)
{
warn(gd->getDefFileName(),gd->getDefLine(),
"Warning: maximum nesting level exceeded for group %s: check for possible recursive group relation!\n",gd->name().data()
);
return;
}
bool &generateHtml = Config_getBool("GENERATE_HTML") ; bool &generateHtml = Config_getBool("GENERATE_HTML") ;
bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP"); bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW"); bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW");
...@@ -2433,8 +2441,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2433,8 +2441,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
md=members->next(); md=members->next();
} }
if(htmlHelp) htmlHelp->decContentsDepth(); if(htmlHelp && !first) htmlHelp->decContentsDepth();
if(ftvHelp) ftvHelp->decContentsDepth(); if(ftvHelp && !first) ftvHelp->decContentsDepth();
} }
} }
......
...@@ -252,6 +252,7 @@ void LatexDocVisitor::visit(DocVerbatim *s) ...@@ -252,6 +252,7 @@ void LatexDocVisitor::visit(DocVerbatim *s)
m_t << "\\end{verbatim}\\normalsize" << endl; m_t << "\\end{verbatim}\\normalsize" << endl;
break; break;
case DocVerbatim::HtmlOnly: case DocVerbatim::HtmlOnly:
case DocVerbatim::XmlOnly:
/* nothing */ /* nothing */
break; break;
case DocVerbatim::LatexOnly: case DocVerbatim::LatexOnly:
...@@ -295,8 +296,8 @@ void LatexDocVisitor::visit(DocInclude *inc) ...@@ -295,8 +296,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
void LatexDocVisitor::visit(DocIncOperator *op) void LatexDocVisitor::visit(DocIncOperator *op)
{ {
printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n", //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
op->type(),op->isFirst(),op->isLast(),op->text().data()); // op->type(),op->isFirst(),op->isLast(),op->text().data());
if (op->isFirst()) if (op->isFirst())
{ {
if (!m_hide) m_t << "\n\n\\footnotesize\\begin{verbatim}"; if (!m_hide) m_t << "\n\n\\footnotesize\\begin{verbatim}";
......
...@@ -1388,6 +1388,15 @@ void LatexGenerator::endInclDepGraph(DotInclDepGraph &g) ...@@ -1388,6 +1388,15 @@ void LatexGenerator::endInclDepGraph(DotInclDepGraph &g)
g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT")); g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"));
} }
void LatexGenerator::startCallGraph()
{
}
void LatexGenerator::endCallGraph(DotCallGraph &g)
{
g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"));
}
void LatexGenerator::startDescription() void LatexGenerator::startDescription()
{ {
t << "\\begin{description}" << endl; t << "\\begin{description}" << endl;
......
...@@ -261,6 +261,8 @@ class LatexGenerator : public OutputGenerator ...@@ -261,6 +261,8 @@ class LatexGenerator : public OutputGenerator
void endDotGraph(DotClassGraph &); void endDotGraph(DotClassGraph &);
void startInclDepGraph(); void startInclDepGraph();
void endInclDepGraph(DotInclDepGraph &); void endInclDepGraph(DotInclDepGraph &);
void startCallGraph();
void endCallGraph(DotCallGraph &);
void writeGraphicalHierarchy(DotGfxHierarchyTable &) {} void writeGraphicalHierarchy(DotGfxHierarchyTable &) {}
void startTextBlock(bool) {} void startTextBlock(bool) {}
......
...@@ -198,8 +198,7 @@ void ManDocVisitor::visit(DocVerbatim *s) ...@@ -198,8 +198,7 @@ void ManDocVisitor::visit(DocVerbatim *s)
m_firstCol=TRUE; m_firstCol=TRUE;
break; break;
case DocVerbatim::HtmlOnly: case DocVerbatim::HtmlOnly:
/* nothing */ case DocVerbatim::XmlOnly:
break;
case DocVerbatim::LatexOnly: case DocVerbatim::LatexOnly:
/* nothing */ /* nothing */
break; break;
......
...@@ -227,6 +227,8 @@ class ManGenerator : public OutputGenerator ...@@ -227,6 +227,8 @@ class ManGenerator : public OutputGenerator
void endDotGraph(DotClassGraph &) {} void endDotGraph(DotClassGraph &) {}
void startInclDepGraph() {} void startInclDepGraph() {}
void endInclDepGraph(DotInclDepGraph &) {} void endInclDepGraph(DotInclDepGraph &) {}
void startCallGraph() {}
void endCallGraph(DotCallGraph &) {}
void writeGraphicalHierarchy(DotGfxHierarchyTable &) {} void writeGraphicalHierarchy(DotGfxHierarchyTable &) {}
void startTextBlock(bool) {} void startTextBlock(bool) {}
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "groupdef.h" #include "groupdef.h"
#include "defargs.h" #include "defargs.h"
#include "docparser.h" #include "docparser.h"
#include "dot.h"
//#include "xml.h" //#include "xml.h"
...@@ -282,6 +283,7 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -282,6 +283,7 @@ MemberDef::MemberDef(const char *df,int dl,
//scopeTAL=0; //scopeTAL=0;
//membTAL=0; //membTAL=0;
m_defTmpArgLists=0; m_defTmpArgLists=0;
m_hasCallGraph = FALSE;
initLines=0; initLines=0;
type=t; type=t;
if (mt==Typedef && type.left(8)=="typedef ") type=type.mid(8); if (mt==Typedef && type.left(8)=="typedef ") type=type.mid(8);
...@@ -1568,7 +1570,24 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1568,7 +1570,24 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex); //if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState(); ol.popGeneratorState();
if ((m_hasCallGraph || Config_getBool("CALL_GRAPH"))
&& isFunction() && Config_getBool("HAVE_DOT")
)
{
DotCallGraph callGraph(this,Config_getInt("MAX_DOT_GRAPH_DEPTH"));
if (!callGraph.isTrivial())
{
msg("Generating call graph for function %s\n",qualifiedName().data());
ol.disable(OutputGenerator::Man);
ol.newParagraph();
ol.startCallGraph();
//ol.parseText(theTranslator->trCallGraph());
ol.endCallGraph(callGraph);
ol.enableAll();
}
}
} }
} }
void MemberDef::warnIfUndocumented() void MemberDef::warnIfUndocumented()
...@@ -1992,3 +2011,9 @@ void MemberDef::findSectionsInDocumentation() ...@@ -1992,3 +2011,9 @@ void MemberDef::findSectionsInDocumentation()
docFindSections(documentation(),this,0,docFile()); docFindSections(documentation(),this,0,docFile());
} }
void MemberDef::enableCallGraph(bool e)
{
m_hasCallGraph=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
...@@ -225,6 +225,10 @@ class MemberDef : public Definition ...@@ -225,6 +225,10 @@ class MemberDef : public Definition
//void setIndentDepth( int i) { indDepth=i; } //void setIndentDepth( int i) { indDepth=i; }
//int indentDepth() { return indDepth; } //int indentDepth() { return indDepth; }
// callgraph related members
bool hasCallGraph() const { return m_hasCallGraph; }
void enableCallGraph(bool e);
bool visibleMemberGroup(bool hideNoHeader); bool visibleMemberGroup(bool hideNoHeader);
MemberDef *templateMaster() const { return m_templateMaster; } MemberDef *templateMaster() const { return m_templateMaster; }
...@@ -292,6 +296,7 @@ class MemberDef : public Definition ...@@ -292,6 +296,7 @@ class MemberDef : public Definition
bool annScope; // member is part of an annoymous scope bool annScope; // member is part of an annoymous scope
bool annUsed; bool annUsed;
bool annShown; bool annShown;
bool m_hasCallGraph;
//int indDepth; // indentation depth for this member if inside an annonymous scope //int indDepth; // indentation depth for this member if inside an annonymous scope
int maxInitLines; // when the initializer will be displayed int maxInitLines; // when the initializer will be displayed
int userInitLines; // result of explicit \hideinitializer or \showinitializer int userInitLines; // result of explicit \hideinitializer or \showinitializer
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
class ClassDiagram; class ClassDiagram;
class DotClassGraph; class DotClassGraph;
class DotInclDepGraph; class DotInclDepGraph;
class DotCallGraph;
class DotGfxHierarchyTable; class DotGfxHierarchyTable;
class DocNode; class DocNode;
class MemberDef; class MemberDef;
...@@ -334,6 +335,8 @@ class OutputGenerator : public BaseOutputDocInterface ...@@ -334,6 +335,8 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endDotGraph(DotClassGraph &g) = 0; virtual void endDotGraph(DotClassGraph &g) = 0;
virtual void startInclDepGraph() = 0; virtual void startInclDepGraph() = 0;
virtual void endInclDepGraph(DotInclDepGraph &g) = 0; virtual void endInclDepGraph(DotInclDepGraph &g) = 0;
virtual void startCallGraph() = 0;
virtual void endCallGraph(DotCallGraph &g) = 0;
virtual void writeGraphicalHierarchy(DotGfxHierarchyTable &g) = 0; virtual void writeGraphicalHierarchy(DotGfxHierarchyTable &g) = 0;
virtual void startQuickIndexItem(const char *s,const char *l) = 0; virtual void startQuickIndexItem(const char *s,const char *l) = 0;
virtual void endQuickIndexItem() = 0; virtual void endQuickIndexItem() = 0;
......
...@@ -197,6 +197,7 @@ void OutputList::parseDoc(const char *fileName,int startLine, ...@@ -197,6 +197,7 @@ void OutputList::parseDoc(const char *fileName,int startLine,
const char *exampleName,SectionDict *sections) const char *exampleName,SectionDict *sections)
{ {
int count=0; int count=0;
OutputGenerator *og=outputs->first(); OutputGenerator *og=outputs->first();
while (og) while (og)
{ {
...@@ -205,9 +206,19 @@ void OutputList::parseDoc(const char *fileName,int startLine, ...@@ -205,9 +206,19 @@ void OutputList::parseDoc(const char *fileName,int startLine,
} }
if (count==0) return; // no output formats enabled. if (count==0) return; // no output formats enabled.
DocNode *root = validatingParseDoc(fileName,startLine, DocNode *root=0;
clName,md,docStr,isExample,exampleName, if (docStr.length()==0 || docStr.at(docStr.length()-1)=='\n')
sections); {
root = validatingParseDoc(fileName,startLine,
clName,md,docStr,isExample,exampleName,
sections);
}
else
{
root = validatingParseDoc(fileName,startLine,
clName,md,docStr+"\n",isExample,exampleName,
sections);
}
og=outputs->first(); og=outputs->first();
while (og) while (og)
...@@ -314,6 +325,7 @@ FORALL1(char a1,a1) ...@@ -314,6 +325,7 @@ FORALL1(char a1,a1)
FORALL1(int a1,a1) FORALL1(int a1,a1)
FORALL1(DotClassGraph &a1,a1) FORALL1(DotClassGraph &a1,a1)
FORALL1(DotInclDepGraph &a1,a1) FORALL1(DotInclDepGraph &a1,a1)
FORALL1(DotCallGraph &a1,a1)
FORALL1(DotGfxHierarchyTable &a1,a1) FORALL1(DotGfxHierarchyTable &a1,a1)
FORALL1(SectionTypes a1,a1) FORALL1(SectionTypes a1,a1)
#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE)
......
...@@ -312,6 +312,10 @@ class OutputList : public OutputDocInterface ...@@ -312,6 +312,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startInclDepGraph); } { forall(&OutputGenerator::startInclDepGraph); }
void endInclDepGraph(DotInclDepGraph &g) void endInclDepGraph(DotInclDepGraph &g)
{ forall(&OutputGenerator::endInclDepGraph,g); } { forall(&OutputGenerator::endInclDepGraph,g); }
void startCallGraph()
{ forall(&OutputGenerator::startCallGraph); }
void endCallGraph(DotCallGraph &g)
{ forall(&OutputGenerator::endCallGraph,g); }
void writeGraphicalHierarchy(DotGfxHierarchyTable &g) void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
{ forall(&OutputGenerator::writeGraphicalHierarchy,g); } { forall(&OutputGenerator::writeGraphicalHierarchy,g); }
void startTextBlock(bool dense=FALSE) void startTextBlock(bool dense=FALSE)
...@@ -376,6 +380,7 @@ class OutputList : public OutputDocInterface ...@@ -376,6 +380,7 @@ class OutputList : public OutputDocInterface
FORALLPROTO1(int); FORALLPROTO1(int);
FORALLPROTO1(DotClassGraph &); FORALLPROTO1(DotClassGraph &);
FORALLPROTO1(DotInclDepGraph &); FORALLPROTO1(DotInclDepGraph &);
FORALLPROTO1(DotCallGraph &);
FORALLPROTO1(DotGfxHierarchyTable &); FORALLPROTO1(DotGfxHierarchyTable &);
FORALLPROTO1(SectionTypes); FORALLPROTO1(SectionTypes);
#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE)
......
...@@ -619,6 +619,7 @@ void PerlModDocVisitor::visit(DocVerbatim *s) ...@@ -619,6 +619,7 @@ void PerlModDocVisitor::visit(DocVerbatim *s)
case DocVerbatim::Verbatim: type = "preformatted"; break; case DocVerbatim::Verbatim: type = "preformatted"; break;
case DocVerbatim::HtmlOnly: type = "htmlonly"; break; case DocVerbatim::HtmlOnly: type = "htmlonly"; break;
case DocVerbatim::LatexOnly: type = "latexonly"; break; case DocVerbatim::LatexOnly: type = "latexonly"; break;
case DocVerbatim::XmlOnly: type = "xmlonly"; break;
} }
openItem(type); openItem(type);
m_output.addFieldQuotedString("content", s->text()); m_output.addFieldQuotedString("content", s->text());
......
...@@ -1321,12 +1321,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1321,12 +1321,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_guardExpr="! "; g_guardExpr="! ";
BEGIN(DefinedExpr1); BEGIN(DefinedExpr1);
} }
<Command>"if"/[ \t(] { <Command>"if"/[ \t(!] {
incrLevel(); incrLevel();
g_guardExpr.resize(0); g_guardExpr.resize(0);
BEGIN(Guard); BEGIN(Guard);
} }
<Command>("elif"|"else"{B}*"if")/[ \t(] { <Command>("elif"|"else"{B}*"if")/[ \t(!] {
if (!otherCaseDone()) if (!otherCaseDone())
{ {
g_guardExpr.resize(0); g_guardExpr.resize(0);
...@@ -1354,7 +1354,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1354,7 +1354,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<Command>"undef"{B}+ { <Command>"undef"{B}+ {
BEGIN(UndefName); BEGIN(UndefName);
} }
<Command>("elif"|"else"{B}*"if")/[ \t(] { <Command>("elif"|"else"{B}*"if")/[ \t(!] {
if (!otherCaseDone()) if (!otherCaseDone())
{ {
g_guardExpr.resize(0); g_guardExpr.resize(0);
...@@ -1445,7 +1445,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1445,7 +1445,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCPPBlock>^{B}*"#" { BEGIN(SkipCommand); } <SkipCPPBlock>^{B}*"#" { BEGIN(SkipCommand); }
<SkipCPPBlock>^{B}*/[^#] { BEGIN(SkipLine); } <SkipCPPBlock>^{B}*/[^#] { BEGIN(SkipLine); }
<SkipCPPBlock>. <SkipCPPBlock>.
<SkipCommand>"if"(("n")?("def"))?/[ \t(] { <SkipCommand>"if"(("n")?("def"))?/[ \t(!] {
incrLevel(); incrLevel();
g_ifcount++; g_ifcount++;
//printf("#if... depth=%d\n",g_ifcount); //printf("#if... depth=%d\n",g_ifcount);
...@@ -1459,7 +1459,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1459,7 +1459,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(Start); BEGIN(Start);
} }
} }
<SkipCommand>("elif"|"else"{B}*"if")/[ \t(] { <SkipCommand>("elif"|"else"{B}*"if")/[ \t(!] {
if (g_ifcount==0) if (g_ifcount==0)
{ {
if (!otherCaseDone()) if (!otherCaseDone())
......
...@@ -304,9 +304,8 @@ void RTFDocVisitor::visit(DocVerbatim *s) ...@@ -304,9 +304,8 @@ void RTFDocVisitor::visit(DocVerbatim *s)
m_t << "}" << endl; m_t << "}" << endl;
break; break;
case DocVerbatim::HtmlOnly: case DocVerbatim::HtmlOnly:
/* nothing */
break;
case DocVerbatim::LatexOnly: case DocVerbatim::LatexOnly:
case DocVerbatim::XmlOnly:
/* nothing */ /* nothing */
break; break;
} }
......
...@@ -2223,6 +2223,27 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g) ...@@ -2223,6 +2223,27 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
DBG_RTF(t << "{\\comment (endInclDepGraph)}" << endl) DBG_RTF(t << "{\\comment (endInclDepGraph)}" << endl)
} }
void RTFGenerator::startCallGraph()
{
DBG_RTF(t << "{\\comment (startCallGraph)}" << endl)
}
void RTFGenerator::endCallGraph(DotCallGraph &g)
{
newParagraph();
QCString fileName = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),FALSE);
// display the file
t << "{" << endl;
t << rtf_Style_Reset << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << fileName << "." << Config_getEnum("DOT_IMAGE_FORMAT");
t << " \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
t << "}" << endl;
DBG_RTF(t << "{\\comment (endCallGraph)}" << endl)
}
/** Tests the integrity of the result by counting brackets. /** Tests the integrity of the result by counting brackets.
* *
*/ */
......
...@@ -223,6 +223,8 @@ class RTFGenerator : public OutputGenerator ...@@ -223,6 +223,8 @@ class RTFGenerator : public OutputGenerator
void endDotGraph(DotClassGraph &); void endDotGraph(DotClassGraph &);
void startInclDepGraph(); void startInclDepGraph();
void endInclDepGraph(DotInclDepGraph &); void endInclDepGraph(DotInclDepGraph &);
void startCallGraph();
void endCallGraph(DotCallGraph &);
void writeGraphicalHierarchy(DotGfxHierarchyTable &) {} void writeGraphicalHierarchy(DotGfxHierarchyTable &) {}
void startMemberGroupHeader(bool); void startMemberGroupHeader(bool);
......
...@@ -289,23 +289,30 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l ...@@ -289,23 +289,30 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l
{ {
if (listName==0) return; if (listName==0) return;
//printf("addXRefItem(%s,%s,%s)\n",listName,itemTitle,listTitle);
ListItemInfo *lii=0; ListItemInfo *lii=0;
RefList *refList = Doxygen::xrefLists->find(listName); RefList *refList = Doxygen::xrefLists->find(listName);
if (refList==0) // new list if (refList==0) // new list
{ {
refList = new RefList(listName,listTitle,itemTitle); refList = new RefList(listName,listTitle,itemTitle);
Doxygen::xrefLists->insert(listName,refList); Doxygen::xrefLists->insert(listName,refList);
//printf("new list!\n");
} }
if (current->sli) if (current->sli)
{ {
QListIterator<ListItemInfo> slii(*current->sli); QListIterator<ListItemInfo> slii(*current->sli);
for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii)
{ {
if (strcmp(lii->type,listName)==0) break; if (strcmp(lii->type,listName)==0)
{
//printf("found %s lii->type=%s\n",listName,lii->type);
break;
}
} }
} }
if (lii) // already found item of same type before if (lii) // already found item of same type before
{ {
//printf("listName=%s item id = %d\n",listName,lii->itemId);
RefItem *item = refList->getRefItem(lii->itemId); RefItem *item = refList->getRefItem(lii->itemId);
ASSERT(item!=0); ASSERT(item!=0);
item->text += " <p>"; item->text += " <p>";
...@@ -315,6 +322,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l ...@@ -315,6 +322,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l
else // new item else // new item
{ {
int itemId = refList->addRefItem(); int itemId = refList->addRefItem();
//printf("listName=%s item id = %d\n",listName,itemId);
char anchorLabel[1024]; char anchorLabel[1024];
sprintf(anchorLabel,"_%s%06d",listName,itemId); sprintf(anchorLabel,"_%s%06d",listName,itemId);
RefItem *item = refList->getRefItem(itemId); RefItem *item = refList->getRefItem(itemId);
...@@ -484,7 +492,7 @@ static int yyread(char *buf,int max_size) ...@@ -484,7 +492,7 @@ static int yyread(char *buf,int max_size)
/* start command character */ /* start command character */
CMD ("\\"|"@") CMD ("\\"|"@")
SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"xrefitem"|"ingroup"|"latexonly"|"htmlonly"|"{"|"verbatim"|"dotfile"|"defgroup"|"addtogroup"|"weakgroup"|"class"|"namespace"|"union"|"struct"|"fn"|"var"|"typedef"|"def"|"overload")|("<"{PRE}">") SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"xrefitem"|"ingroup"|"callgraph"|"latexonly"|"htmlonly"|"xmlonly"|"{"|"verbatim"|"dotfile"|"defgroup"|"addtogroup"|"weakgroup"|"class"|"namespace"|"union"|"struct"|"fn"|"var"|"typedef"|"def"|"overload")|("<"{PRE}">")
BN [ \t\n\r] BN [ \t\n\r]
BL [ \t\r]*"\n" BL [ \t\r]*"\n"
B [ \t] B [ \t]
...@@ -1365,7 +1373,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -1365,7 +1373,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
BEGIN( Define ); BEGIN( Define );
} }
<FindMembers,ReadBody,ReadNSBody>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */ <FindMembers,ReadBody,ReadNSBody,SkipCurly,SkipCurlyCpp>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */
yyLineNr = atoi(&yytext[1]); yyLineNr = atoi(&yytext[1]);
//printf("setting line number to %d\n",yyLineNr); //printf("setting line number to %d\n",yyLineNr);
lastPreLineCtrlContext = YY_START; lastPreLineCtrlContext = YY_START;
...@@ -3900,7 +3908,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3900,7 +3908,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
pSkipDoc=&current->brief; pSkipDoc=&current->brief;
BEGIN(SkipCode); BEGIN(SkipCode);
} }
<SkipVerbatim>{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly")/[^a-z_A-Z0-9] { <SkipVerbatim>{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly")/[^a-z_A-Z0-9] {
current->doc+=yytext; current->doc+=yytext;
BEGIN(lastVerbState); BEGIN(lastVerbState);
} }
...@@ -4016,13 +4024,13 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4016,13 +4024,13 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>("\\\\"|"@@")"f"[$\[\]] { <Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>("\\\\"|"@@")"f"[$\[\]] {
current->doc += yytext; current->doc += yytext;
} }
<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>{CMD}"f$" { <Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief,CopyArgComment,CopyArgCommentLine>{CMD}"f$" {
lastFormulaContext = YY_START; lastFormulaContext = YY_START;
formulaText="$"; formulaText="$";
insideFormula=TRUE; insideFormula=TRUE;
BEGIN(ReadFormulaShort); BEGIN(ReadFormulaShort);
} }
<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>{CMD}"f[" { <Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief,CopyArgComment,CopyArgCommentLine>{CMD}"f[" {
lastFormulaContext = YY_START; lastFormulaContext = YY_START;
formulaText="\\["; formulaText="\\[";
insideFormula=TRUE; insideFormula=TRUE;
...@@ -4036,9 +4044,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4036,9 +4044,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastFormulaContext==AfterDocBrief || lastFormulaContext==AfterDocBrief ||
lastFormulaContext==AfterDocLine lastFormulaContext==AfterDocLine
) )
{
current->brief += addFormula(); current->brief += addFormula();
}
else if (lastFormulaContext==CopyArgComment ||
lastFormulaContext==CopyArgCommentLine)
{
fullArgString += addFormula();
}
else else
{
current->doc += addFormula(); current->doc += addFormula();
}
insideFormula=FALSE; insideFormula=FALSE;
BEGIN(lastFormulaContext); BEGIN(lastFormulaContext);
} }
...@@ -4062,9 +4079,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4062,9 +4079,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastFormulaContext==AfterDocBrief || lastFormulaContext==AfterDocBrief ||
lastFormulaContext==AfterDocLine lastFormulaContext==AfterDocLine
) )
{
current->brief += addFormula(); current->brief += addFormula();
}
else if (lastFormulaContext==CopyArgComment ||
lastFormulaContext==CopyArgCommentLine)
{
fullArgString += addFormula();
}
else else
{
current->doc += addFormula(); current->doc += addFormula();
}
insideFormula=FALSE; insideFormula=FALSE;
BEGIN(lastFormulaContext); BEGIN(lastFormulaContext);
} }
...@@ -4251,6 +4277,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4251,6 +4277,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"hideinitializer"/[^a-z_A-Z0-9] { <ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"hideinitializer"/[^a-z_A-Z0-9] {
current->initLines = 0; // OFF current->initLines = 0; // OFF
} }
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"callgraph"/[^a-z_A-Z0-9] {
current->callGraph = TRUE; // ON
}
<GroupName>{ID} { <GroupName>{ID} {
current->groups->append( current->groups->append(
new Grouping(yytext, Grouping::GROUPING_INGROUP) new Grouping(yytext, Grouping::GROUPING_INGROUP)
......
...@@ -45,8 +45,6 @@ ...@@ -45,8 +45,6 @@
* -------------+------------------------------------------------------------ * -------------+------------------------------------------------------------
* 2003-03-29 | Update for new since 1.3 * 2003-03-29 | Update for new since 1.3
* -------------+------------------------------------------------------------ * -------------+------------------------------------------------------------
* 2003-03-29 | Changed fonction into m‚thode.
* -------------+------------------------------------------------------------
*/ */
#ifndef TRANSLATOR_FR_H #ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H #define TRANSLATOR_FR_H
...@@ -83,35 +81,35 @@ class TranslatorFrench : public Translator ...@@ -83,35 +81,35 @@ class TranslatorFrench : public Translator
/*! used in the compound documentation before a list of related functions. */ /*! used in the compound documentation before a list of related functions. */
QCString trRelatedFunctions() QCString trRelatedFunctions()
{ return "Fonctions associes"; } { return "Fonctions associées"; }
/*! subscript for the related functions. */ /*! subscript for the related functions. */
QCString trRelatedSubscript() QCString trRelatedSubscript()
{ return "(Noter que ces fonctions ne sont pas des mthodes de la classe)"; } { return "(Noter que ces fonctions ne sont pas des méthodes de la classe)"; }
/*! 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. */
QCString trDetailedDescription() 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. */
QCString trMemberTypedefDocumentation() QCString trMemberTypedefDocumentation()
{ return "Documentation des types imbriqus"; } { return "Documentation des types imbriqués"; }
/*! header that is put before the list of enumerations. */ /*! header that is put before the list of enumerations. */
QCString trMemberEnumerationDocumentation() QCString trMemberEnumerationDocumentation()
{ return "Documentation des ‚num‚rations imbriqu‚es"; } { return "Documentation des énumérations imbriquées"; }
/*! header that is put before the list of member functions. */ /*! header that is put before the list of member functions. */
QCString trMemberFunctionDocumentation() QCString trMemberFunctionDocumentation()
{ return "Documentation des mthodes"; } { return "Documentation des méthodes"; }
/*! header that is put before the list of member attributes. */ /*! header that is put before the list of member attributes. */
QCString trMemberDataDocumentation() QCString trMemberDataDocumentation()
{ return "Documentation des donn‚es imbriqu‚es"; } { return "Documentation des données imbriquées"; }
/*! this is the text of a link put after brief descriptions. */ /*! this is the text of a link put after brief descriptions. */
QCString trMore() QCString trMore()
{ return "Plus de dtails..."; } { return "Plus de détails..."; }
/*! put in the class documentation */ /*! put in the class documentation */
QCString trListOfAllMembers() QCString trListOfAllMembers()
...@@ -123,33 +121,33 @@ class TranslatorFrench : public Translator ...@@ -123,33 +121,33 @@ class TranslatorFrench : public Translator
/*! 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 */
QCString trThisIsTheListOfAllMembers() QCString trThisIsTheListOfAllMembers()
{ return "Ceci est la liste complŠte des membres de "; } { return "Ceci est la 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 */
QCString trIncludingInheritedMembers() QCString trIncludingInheritedMembers()
{ return " y compris des membres des classes h‚rit‚es."; } { return " y compris des membres des classes héritées."; }
/*! 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.
*/ */
QCString trGeneratedAutomatically(const char *s) QCString trGeneratedAutomatically(const char *s)
{ QCString result="G‚n‚r‚ automatiquement par Doxygen"; { QCString result="Généré automatiquement par Doxygen";
if (s) result+=(QCString)" pour "+s; if (s) result+=(QCString)" pour "+s;
result+=" partir du code source."; result+=" à partir du code source.";
return result; return result;
} }
/*! put after an enum name in the list of all members */ /*! put after an enum name in the list of all members */
QCString trEnumName() 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 */
QCString trEnumValue() QCString trEnumValue()
{ return "‚l‚ment d'une ‚num‚ration"; } { return "élément d'une énumération"; }
/*! put after an undocumented member in the list of all members */ /*! put after an undocumented member in the list of all members */
QCString trDefinedIn() QCString trDefinedIn()
{ return "dfini dans"; } { return "défini dans"; }
// quick reference sections // quick reference sections
...@@ -161,7 +159,7 @@ class TranslatorFrench : public Translator ...@@ -161,7 +159,7 @@ class TranslatorFrench : public Translator
/*! 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 */
QCString trClassHierarchy() QCString trClassHierarchy()
{ return "Hirarchie 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 */
QCString trCompoundList() QCString trCompoundList()
...@@ -173,7 +171,7 @@ class TranslatorFrench : public Translator ...@@ -173,7 +171,7 @@ class TranslatorFrench : public Translator
/*! This is put above each page as a link to the list of all verbatim headers */ /*! This is put above each page as a link to the list of all verbatim headers */
QCString trHeaderFiles() QCString trHeaderFiles()
{ return "Fichiers d'en-tˆte"; } { return "Fichiers d'en-tête"; }
/*! 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. */
QCString trCompoundMembers() QCString trCompoundMembers()
...@@ -181,11 +179,11 @@ class TranslatorFrench : public Translator ...@@ -181,11 +179,11 @@ class TranslatorFrench : public Translator
/*! This is put above each page as a link to all members of files. */ /*! This is put above each page as a link to all members of files. */
QCString trFileMembers() QCString trFileMembers()
{ return "Dclarations"; } { return "Déclarations"; }
/*! 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. */
QCString trRelatedPages() QCString trRelatedPages()
{ return "Pages associes"; } { 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. */
QCString trExamples() QCString trExamples()
...@@ -197,29 +195,29 @@ class TranslatorFrench : public Translator ...@@ -197,29 +195,29 @@ class TranslatorFrench : public Translator
/*! This is an introduction to the class hierarchy. */ /*! This is an introduction to the class hierarchy. */
QCString trClassHierarchyDescription() QCString trClassHierarchyDescription()
{ return "Cette liste d'hritage est, autant que possible, " { return "Cette liste d'héritage est, autant que possible, "
"class‚e par ordre alphab‚tique"; } "classée par ordre alphabétique"; }
/*! This is an introduction to the list with all files. */ /*! This is an introduction to the list with all files. */
QCString trFileListDescription(bool extractAll) QCString trFileListDescription(bool extractAll)
{ {
QCString result="Liste de tous les fichiers "; QCString result="Liste de tous les fichiers ";
if (!extractAll) result+="documents "; if (!extractAll) result+="documentés ";
result+="avec une brŠve description :"; result+="avec une brève description :";
return result; return result;
} }
/*! This is an introduction to the annotated compound list. */ /*! This is an introduction to the annotated compound list. */
QCString trCompoundListDescription() QCString trCompoundListDescription()
{ return "Liste des classes, des structures et des unions " { return "Liste des classes, des structures et des unions "
"avec une brŠve description :"; "avec une brève description :";
} }
/*! This is an introduction to the page with all class members. */ /*! This is an introduction to the page with all class members. */
QCString trCompoundMembersDescription(bool extractAll) QCString trCompoundMembersDescription(bool extractAll)
{ {
QCString result="Liste de tous les membres de classe "; QCString result="Liste de tous les membres de classe ";
if (!extractAll) result+="documents "; if (!extractAll) result+="documentés ";
result+="avec les liens vers "; result+="avec les liens vers ";
if (!extractAll) result+="la documentation de la classe correspondante :"; if (!extractAll) result+="la documentation de la classe correspondante :";
else result+="les classes auxquelles ils appartiennent :"; else result+="les classes auxquelles ils appartiennent :";
...@@ -229,18 +227,18 @@ class TranslatorFrench : public Translator ...@@ -229,18 +227,18 @@ class TranslatorFrench : public Translator
/*! This is an introduction to the page with all file members. */ /*! This is an introduction to the page with all file members. */
QCString trFileMembersDescription(bool extractAll) QCString trFileMembersDescription(bool extractAll)
{ {
QCString result="Liste de toutes les dclarations"; QCString result="Liste de toutes les déclarations";
if (!extractAll) result+="documentes "; if (!extractAll) result+="documentées ";
result+="avec liens sur "; result+="avec liens sur ";
if (extractAll) result+="la documentation du fichier correspondant " if (extractAll) result+="la documentation du fichier correspondant "
"pour chacune :"; "pour chacune :";
else result+="les fichiers dans lesquels elles sont dfinies :"; else result+="les fichiers dans lesquels elles sont définies :";
return result; return result;
} }
/*! This is an introduction to the page with the list of all header files. */ /*! This is an introduction to the page with the list of all header files. */
QCString trHeaderFilesDescription() QCString trHeaderFilesDescription()
{ return "Liste de tous les fichiers d'en-tˆte constituant " { return "Liste de tous les fichiers d'en-tête constituant "
"l'interface de programmation :"; } "l'interface de programmation :"; }
/*! 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 */
...@@ -249,7 +247,7 @@ class TranslatorFrench : public Translator ...@@ -249,7 +247,7 @@ class TranslatorFrench : public Translator
/*! 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 */
QCString trRelatedPagesDescription() QCString trRelatedPagesDescription()
{ return "Liste de toutes les pages de documentation associes :"; } { 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 */
QCString trModulesDescription() QCString trModulesDescription()
...@@ -278,7 +276,7 @@ class TranslatorFrench : public Translator ...@@ -278,7 +276,7 @@ class TranslatorFrench : public Translator
* class hierarchy. * class hierarchy.
*/ */
QCString trHierarchicalIndex() QCString trHierarchicalIndex()
{ return "Index hirarchique"; } { 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.
...@@ -324,13 +322,13 @@ class TranslatorFrench : public Translator ...@@ -324,13 +322,13 @@ class TranslatorFrench : public Translator
/*! This is used in LaTeX as the title of the document */ /*! This is used in LaTeX as the title of the document */
QCString trReferenceManual() 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
*/ */
QCString trDefines() QCString trDefines()
{ return "Dfinitions des macros"; } { return "Définitions des 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
...@@ -342,13 +340,13 @@ class TranslatorFrench : public Translator ...@@ -342,13 +340,13 @@ class TranslatorFrench : public Translator
* list of typedefs * list of typedefs
*/ */
QCString trTypedefs() QCString trTypedefs()
{ return "Dfinitions des types"; } { return "Définitions des types"; }
/*! 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
*/ */
QCString trEnumerations() 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
...@@ -366,7 +364,7 @@ class TranslatorFrench : public Translator ...@@ -366,7 +364,7 @@ class TranslatorFrench : public Translator
* list of (global) variables * list of (global) variables
*/ */
QCString trEnumerationValues() QCString trEnumerationValues()
{ return "l‚ments ‚num‚r‚s"; } { return "Éléments énumérés"; }
/*! 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
...@@ -390,13 +388,13 @@ class TranslatorFrench : public Translator ...@@ -390,13 +388,13 @@ class TranslatorFrench : public Translator
* of documentation blocks for enumeration types * of documentation blocks for enumeration types
*/ */
QCString trEnumerationTypeDocumentation() QCString trEnumerationTypeDocumentation()
{ return "Documentation du type de l'‚num‚ration"; } { return "Documentation du type de l'énumération"; }
/*! 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 values * of documentation blocks for enumeration values
*/ */
QCString trEnumerationValueDocumentation() QCString trEnumerationValueDocumentation()
{ return "Documentation de l'‚l‚ment de l'‚numeration"; } { return "Documentation de l'élément de l'énumeration"; }
/*! 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 functions * of documentation blocks for functions
...@@ -421,7 +419,7 @@ class TranslatorFrench : public Translator ...@@ -421,7 +419,7 @@ class TranslatorFrench : public Translator
*/ */
QCString trGeneratedAt(const char *date,const char *projName) QCString trGeneratedAt(const char *date,const char *projName)
{ {
QCString result=(QCString)"G‚n‚r‚ le "+date; QCString result=(QCString)"Généré le "+date;
if (projName) result+=(QCString)" pour "+projName; if (projName) result+=(QCString)" pour "+projName;
result+=(QCString)" par "; result+=(QCString)" par ";
return result; return result;
...@@ -430,13 +428,13 @@ class TranslatorFrench : public Translator ...@@ -430,13 +428,13 @@ class TranslatorFrench : public Translator
*/ */
QCString trWrittenBy() QCString trWrittenBy()
{ {
return "crit par"; return "écrit par";
} }
/*! this text is put before a class diagram */ /*! this text is put before a class diagram */
QCString trClassDiagram(const char *clName) QCString trClassDiagram(const char *clName)
{ {
return (QCString)"Graphe d'hritage de la classe "+clName; return (QCString)"Graphe d'héritage de la classe "+clName;
} }
/*! this text is generated when the \\internal command is used. */ /*! this text is generated when the \\internal command is used. */
...@@ -445,8 +443,8 @@ class TranslatorFrench : public Translator ...@@ -445,8 +443,8 @@ class TranslatorFrench : public Translator
/*! this text is generated when the \\reimp command is used. */ /*! this text is generated when the \\reimp command is used. */
QCString trReimplementedForInternalReasons() QCString trReimplementedForInternalReasons()
{ return "Redfini pour des raisons internes; " { return "Redéfini pour des raisons internes; "
"l'interface n'est pas modifie"; "l'interface n'est pas modifiée";
} }
/*! this text is generated when the \\warning command is used. */ /*! this text is generated when the \\warning command is used. */
...@@ -471,11 +469,11 @@ class TranslatorFrench : public Translator ...@@ -471,11 +469,11 @@ class TranslatorFrench : public Translator
/*! this text is generated when the \\sa command is used. */ /*! this text is generated when the \\sa command is used. */
QCString trSeeAlso() 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. */
QCString trParameters() 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. */
QCString trExceptions() QCString trExceptions()
...@@ -483,7 +481,7 @@ class TranslatorFrench : public Translator ...@@ -483,7 +481,7 @@ class TranslatorFrench : public Translator
/*! this text is used in the title page of a LaTeX document. */ /*! this text is used in the title page of a LaTeX document. */
QCString trGeneratedBy() QCString trGeneratedBy()
{ return "G‚n‚r‚ par"; } { return "Généré par"; }
// new since 0.49-990307 // new since 0.49-990307
...@@ -494,8 +492,8 @@ class TranslatorFrench : public Translator ...@@ -494,8 +492,8 @@ class TranslatorFrench : public Translator
virtual QCString trNamespaceListDescription(bool extractAll) virtual QCString trNamespaceListDescription(bool extractAll)
{ {
QCString result="Liste de tous les namespaces "; QCString result="Liste de tous les namespaces ";
if (!extractAll) result+="documents "; if (!extractAll) result+="documentés ";
result+="avec une brŠve description :"; result+="avec une brève description :";
return result; return result;
} }
...@@ -513,7 +511,7 @@ class TranslatorFrench : public Translator ...@@ -513,7 +511,7 @@ class TranslatorFrench : public Translator
* related classes * related classes
*/ */
virtual QCString trRelatedFunctionDocumentation() virtual QCString trRelatedFunctionDocumentation()
{ return "Documentation des fonctions amies et associes"; } { return "Documentation des fonctions amies et associées"; }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-990425 // new since 0.49-990425
...@@ -524,7 +522,7 @@ class TranslatorFrench : public Translator ...@@ -524,7 +522,7 @@ class TranslatorFrench : public Translator
ClassDef::CompoundType compType, ClassDef::CompoundType compType,
bool /*isTemplate*/) bool /*isTemplate*/)
{ {
QCString result="R‚f‚rence de "; QCString result="Référence de ";
switch(compType) switch(compType)
{ {
case ClassDef::Class: result+="la classe "; break; case ClassDef::Class: result+="la classe "; break;
...@@ -541,7 +539,7 @@ class TranslatorFrench : public Translator ...@@ -541,7 +539,7 @@ class TranslatorFrench : public Translator
/*! used as the title of the HTML page of a file */ /*! used as the title of the HTML page of a file */
virtual QCString trFileReference(const char *fileName) virtual QCString trFileReference(const char *fileName)
{ {
QCString result= "R‚f‚rence du fichier "; QCString result= "Référence du fichier ";
result += fileName; result += fileName;
return result; return result;
} }
...@@ -549,7 +547,7 @@ class TranslatorFrench : public Translator ...@@ -549,7 +547,7 @@ class TranslatorFrench : public Translator
/*! used as the title of the HTML page of a namespace */ /*! used as the title of the HTML page of a namespace */
virtual QCString trNamespaceReference(const char *namespaceName) virtual QCString trNamespaceReference(const char *namespaceName)
{ {
QCString result= "R‚f‚rence du namespace "; QCString result= "Référence du namespace ";
result += namespaceName; result += namespaceName;
return result; return result;
} }
...@@ -564,17 +562,17 @@ class TranslatorFrench : public Translator ...@@ -564,17 +562,17 @@ class TranslatorFrench : public Translator
virtual QCString trStaticPublicMembers() virtual QCString trStaticPublicMembers()
{ return "Membres publics statiques"; } { return "Membres publics statiques"; }
virtual QCString trProtectedMembers() virtual QCString trProtectedMembers()
{ return "Membres prot‚g‚s"; } { return "Membres protégés"; }
virtual QCString trProtectedSlots() virtual QCString trProtectedSlots()
{ return "Connecteurs prot‚g‚s"; } { return "Connecteurs protégés"; }
virtual QCString trStaticProtectedMembers() virtual QCString trStaticProtectedMembers()
{ return "Membres prot‚g‚s statiques"; } { return "Membres protégés statiques"; }
virtual QCString trPrivateMembers() virtual QCString trPrivateMembers()
{ return "Membres privs"; } { return "Membres privés"; }
virtual QCString trPrivateSlots() virtual QCString trPrivateSlots()
{ return "Connecteurs privs"; } { return "Connecteurs privés"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Membres privs statiques"; } { return "Membres privés 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.
...@@ -606,7 +604,7 @@ class TranslatorFrench : public Translator ...@@ -606,7 +604,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trInheritsList(int numEntries) virtual QCString trInheritsList(int numEntries)
{ {
return "Est d‚riv‚e de "+trWriteList(numEntries)+"."; return "Est dérivée de "+trWriteList(numEntries)+".";
} }
/*! used in class documentation to produce a list of super classes, /*! used in class documentation to produce a list of super classes,
...@@ -614,7 +612,7 @@ class TranslatorFrench : public Translator ...@@ -614,7 +612,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trInheritedByList(int numEntries) virtual QCString trInheritedByList(int numEntries)
{ {
return "D‚riv‚e par "+trWriteList(numEntries)+"."; return "Dérivée par "+trWriteList(numEntries)+".";
} }
/*! used in member documentation blocks to produce a list of /*! used in member documentation blocks to produce a list of
...@@ -622,7 +620,7 @@ class TranslatorFrench : public Translator ...@@ -622,7 +620,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trReimplementedFromList(int numEntries) virtual QCString trReimplementedFromList(int numEntries)
{ {
return "Red‚finie … partir de "+trWriteList(numEntries)+"."; return "Redéfinie à partir de "+trWriteList(numEntries)+".";
} }
/*! used in member documentation blocks to produce a list of /*! used in member documentation blocks to produce a list of
...@@ -630,7 +628,7 @@ class TranslatorFrench : public Translator ...@@ -630,7 +628,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trReimplementedInList(int numEntries) virtual QCString trReimplementedInList(int numEntries)
{ {
return "Redfinie dans "+trWriteList(numEntries)+"."; return "Redéfinie dans "+trWriteList(numEntries)+".";
} }
/*! 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. */
...@@ -641,10 +639,10 @@ class TranslatorFrench : public Translator ...@@ -641,10 +639,10 @@ class TranslatorFrench : public Translator
virtual QCString trNamespaceMemberDescription(bool extractAll) virtual QCString trNamespaceMemberDescription(bool extractAll)
{ {
QCString result="Voici une liste de tous les membres de namespace"; QCString result="Voici une liste de tous les membres de namespace";
if (!extractAll) result+="documents "; if (!extractAll) result+="documentés ";
result+=" avec liens vers "; result+=" avec liens vers ";
if (extractAll) if (extractAll)
result+="les documentations des namespaces associs :"; result+="les documentations des namespaces associés :";
else else
result+="les namespaces auxquels ils appartiennent :"; result+="les namespaces auxquels ils appartiennent :";
return result; return result;
...@@ -682,7 +680,7 @@ class TranslatorFrench : public Translator ...@@ -682,7 +680,7 @@ class TranslatorFrench : public Translator
bool single) bool single)
{ // here s is one of " Class", " Struct" or " Union" { // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file // single is true implies a single file
QCString result=(QCString)"La documentation associ‚e … cette "; QCString result=(QCString)"La documentation associée à cette ";
switch(compType) switch(compType)
{ {
case ClassDef::Class: result+="classe"; break; case ClassDef::Class: result+="classe"; break;
...@@ -691,7 +689,7 @@ class TranslatorFrench : public Translator ...@@ -691,7 +689,7 @@ class TranslatorFrench : public Translator
case ClassDef::Interface: result+="interface"; break; case ClassDef::Interface: result+="interface"; break;
case ClassDef::Exception: result+="exception"; break; case ClassDef::Exception: result+="exception"; break;
} }
result+=" a ‚t‚ g‚n‚r‚e … partir "; result+=" a été générée à partir ";
if (single) result+=" du fichier suivant :"; if (single) result+=" du fichier suivant :";
else result+="des fichiers suivants :"; else result+="des fichiers suivants :";
return result; return result;
...@@ -702,7 +700,7 @@ class TranslatorFrench : public Translator ...@@ -702,7 +700,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trAlphabeticalList() virtual QCString trAlphabeticalList()
{ {
return "Liste par ordre alphabtique"; return "Liste par ordre alphabétique";
} }
...@@ -712,7 +710,7 @@ class TranslatorFrench : public Translator ...@@ -712,7 +710,7 @@ class TranslatorFrench : public Translator
/*! 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 retournes"; } { 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)
*/ */
...@@ -735,11 +733,11 @@ class TranslatorFrench : public Translator ...@@ -735,11 +733,11 @@ class TranslatorFrench : public Translator
} }
virtual QCString trDefinedAtLineInSourceFile() virtual QCString trDefinedAtLineInSourceFile()
{ {
return "D‚finition … la ligne @0 du fichier @1."; return "Définition à la ligne @0 du fichier @1.";
} }
virtual QCString trDefinedInSourceFile() virtual QCString trDefinedInSourceFile()
{ {
return "Dfinition dans le fichier @0."; return "Définition dans le fichier @0.";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 0.49-991205 // new since 0.49-991205
...@@ -747,7 +745,7 @@ class TranslatorFrench : public Translator ...@@ -747,7 +745,7 @@ class TranslatorFrench : public Translator
virtual QCString trDeprecated() virtual QCString trDeprecated()
{ {
return "ObsolŠte"; return "Obsolète";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -762,7 +760,7 @@ class TranslatorFrench : public Translator ...@@ -762,7 +760,7 @@ class TranslatorFrench : public Translator
/*! this text is put before an include dependency graph */ /*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName) virtual QCString trInclDepGraph(const char *fName)
{ {
return (QCString)"Graphe des dpendances par inclusion pour "+fName+":"; return (QCString)"Graphe des dépendances par inclusion pour "+fName+":";
} }
/*! header that is put before the list of constructor/destructors. */ /*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation() virtual QCString trConstructorDocumentation()
...@@ -777,12 +775,12 @@ class TranslatorFrench : public Translator ...@@ -777,12 +775,12 @@ class TranslatorFrench : public Translator
/*! Used in the file sources to point to the corresponding documentation. */ /*! Used in the file sources to point to the corresponding documentation. */
virtual QCString trGotoDocumentation() virtual QCString trGotoDocumentation()
{ {
return "Aller la documentation de ce fichier."; return "Aller à la documentation de ce fichier.";
} }
/*! Text for the \\pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ {
return "Prcondition"; return "Précondition";
} }
/*! Text for the \\post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
...@@ -806,15 +804,15 @@ class TranslatorFrench : public Translator ...@@ -806,15 +804,15 @@ class TranslatorFrench : public Translator
} }
virtual QCString trGraphicalHierarchy() virtual QCString trGraphicalHierarchy()
{ {
return "Diagramme hirarchique des classes"; return "Diagramme hiérarchique des classes";
} }
virtual QCString trGotoGraphicalHierarchy() virtual QCString trGotoGraphicalHierarchy()
{ {
return "Aller au diagramme hirarchique des classes"; return "Aller au diagramme hiérarchique des classes";
} }
virtual QCString trGotoTextualHierarchy() virtual QCString trGotoTextualHierarchy()
{ {
return "Aller … la hi‚rarchie des classes en texte"; return "Aller à la hiérarchie des classes en texte";
} }
virtual QCString trPageIndex() virtual QCString trPageIndex()
{ {
...@@ -843,27 +841,27 @@ class TranslatorFrench : public Translator ...@@ -843,27 +841,27 @@ class TranslatorFrench : public Translator
} }
virtual QCString trProtectedTypes() virtual QCString trProtectedTypes()
{ {
return "Types Prot‚g‚s"; return "Types Protégés";
} }
virtual QCString trProtectedAttribs() virtual QCString trProtectedAttribs()
{ {
return "Attributs Prot‚g‚s"; return "Attributs Protégés";
} }
virtual QCString trStaticProtectedAttribs() virtual QCString trStaticProtectedAttribs()
{ {
return "Attributs Prot‚g‚s Statiques"; return "Attributs Protégés Statiques";
} }
virtual QCString trPrivateTypes() virtual QCString trPrivateTypes()
{ {
return "Types Privs"; return "Types Privés";
} }
virtual QCString trPrivateAttribs() virtual QCString trPrivateAttribs()
{ {
return "Attributs Privs"; return "Attributs Privés";
} }
virtual QCString trStaticPrivateAttribs() virtual QCString trStaticPrivateAttribs()
{ {
return "Attributs Privs Statiques"; return "Attributs Privés Statiques";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -878,7 +876,7 @@ class TranslatorFrench : public Translator ...@@ -878,7 +876,7 @@ class TranslatorFrench : public Translator
/*! Used as the header of the todo list */ /*! Used as the header of the todo list */
virtual QCString trTodoList() virtual QCString trTodoList()
{ {
return "Liste des choses faire"; return "Liste des choses à faire";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -887,7 +885,7 @@ class TranslatorFrench : public Translator ...@@ -887,7 +885,7 @@ class TranslatorFrench : public Translator
virtual QCString trReferencedBy() virtual QCString trReferencedBy()
{ {
return "R‚f‚renc‚ par"; return "Référencé par";
} }
virtual QCString trRemarks() virtual QCString trRemarks()
{ {
...@@ -914,32 +912,32 @@ class TranslatorFrench : public Translator ...@@ -914,32 +912,32 @@ class TranslatorFrench : public Translator
/*! title of the graph legend page */ /*! title of the graph legend page */
virtual QCString trLegendTitle() virtual QCString trLegendTitle()
{ {
return "Lgende du graphe"; return "Légende du graphe";
} }
/*! page explaining how the dot graph's should be interpreted */ /*! page explaining how the dot graph's should be interpreted */
virtual QCString trLegendDocs() virtual QCString trLegendDocs()
{ {
return return
"Cette page explique comment interpr‚ter les graphes g‚n‚r‚s " "Cette page explique comment interpréter les graphes générés "
"par doxygen.<p>\n" "par doxygen.<p>\n"
"Considrez l'exemple suivant:\n" "Considérez l'exemple suivant:\n"
"\\code\n" "\\code\n"
"/*! Classe invisible cause d'une troncature */\n" "/*! Classe invisible à cause d'une troncature */\n"
"class Invisible { };\n\n" "class Invisible { };\n\n"
"/*! Classe tronqu‚e, la relation d'h‚ritage est masqu‚e */\n" "/*! Classe tronquée, la relation d'héritage est masquée */\n"
"class Truncated : public Invisible { };\n\n" "class Truncated : public Invisible { };\n\n"
"/*! Classe non documente avec des commentaires Doxygen */\n" "/*! Classe non documentée avec des commentaires Doxygen */\n"
"class Undocumented { };\n\n" "class Undocumented { };\n\n"
"/*! Classe d‚riv‚e par h‚ritage public */\n" "/*! Classe dérivée par héritage public */\n"
"class PublicBase : public Truncated { };\n\n" "class PublicBase : public Truncated { };\n\n"
"/*! Classe d‚riv‚e par h‚ritage prot‚g‚ */\n" "/*! Classe dérivée par héritage protégé */\n"
"class ProtectedBase { };\n\n" "class ProtectedBase { };\n\n"
"/*! Classe d‚riv‚e par h‚ritage priv‚ */\n" "/*! Classe dérivée par héritage privé */\n"
"class PrivateBase { };\n\n" "class PrivateBase { };\n\n"
"/*! Classe utilis‚e par la classe d‚riv‚e */\n" "/*! Classe utilisée par la classe dérivée */\n"
"class Used { };\n\n" "class Used { };\n\n"
"/*! Super-classe qui hrite de plusieurs autres classes */\n" "/*! Super-classe qui hérite de plusieurs autres classes */\n"
"class Inherited : public PublicBase,\n" "class Inherited : public PublicBase,\n"
" protected ProtectedBase,\n" " protected ProtectedBase,\n"
" private PrivateBase,\n" " private PrivateBase,\n"
...@@ -949,35 +947,35 @@ class TranslatorFrench : public Translator ...@@ -949,35 +947,35 @@ class TranslatorFrench : public Translator
" Used *m_usedClass;\n" " Used *m_usedClass;\n"
"};\n" "};\n"
"\\endcode\n" "\\endcode\n"
"Si la valeur 200 est attribue au tag \\c MAX_DOT_GRAPH_HEIGHT " "Si la valeur 200 est attribuée au tag \\c MAX_DOT_GRAPH_HEIGHT "
"du fichier de configuration, cela g‚nŠrera le graphe suivant:" "du fichier de configuration, cela génèrera le graphe suivant:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n" "<p>\n"
"Les rectangles du graphe ci-dessus ont la signification suivante:\n" "Les rectangles du graphe ci-dessus ont la signification suivante:\n"
"<ul>\n" "<ul>\n"
"<li>Un rectangle plein noir reprsente la structure ou la classe pour laquelle " "<li>Un rectangle plein noir représente la structure ou la classe pour laquelle "
"le graphe est g‚n‚r‚.\n" "le graphe est généré.\n"
"<li>Un rectangle avec un bord noir indique une classe ou une structure documente.\n" "<li>Un rectangle avec un bord noir indique une classe ou une structure documentée.\n"
"<li>Un rectangle avec un bord gris indique une classe ou une structure non documente.\n" "<li>Un rectangle avec un bord gris indique une classe ou une structure non documentée.\n"
"<li>Un rectangle avec un bord rouge indique une structure ou une classe documente\n" "<li>Un rectangle avec un bord rouge indique une structure ou une classe documentée\n"
"pour laquelle des relations d'hritage ou de collaboration manquent. Un graphe est " "pour laquelle des relations d'héritage ou de collaboration manquent. Un graphe est "
"tronqu‚ s'il ne rentre pas dans les limites sp‚cifi‚es." "tronqué s'il ne rentre pas dans les limites spécifiées."
"</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 public "
"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é.\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é.\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"
"</ul>\n"; "</ul>\n";
} }
/*! text for the link to the legend page */ /*! text for the link to the legend page */
virtual QCString trLegend() virtual QCString trLegend()
{ {
return "Lgende"; return "Légende";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.2.0 // new since 1.2.0
...@@ -1001,7 +999,7 @@ class TranslatorFrench : public Translator ...@@ -1001,7 +999,7 @@ class TranslatorFrench : public Translator
/*! Used as a section header for KDE-2 IDL methods */ /*! Used as a section header for KDE-2 IDL methods */
virtual QCString trDCOPMethods() virtual QCString trDCOPMethods()
{ {
return "Mthodes DCOP"; return "Méthodes DCOP";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1011,12 +1009,12 @@ class TranslatorFrench : public Translator ...@@ -1011,12 +1009,12 @@ class TranslatorFrench : public Translator
/*! Used as a section header for IDL properties */ /*! Used as a section header for IDL properties */
virtual QCString trProperties() virtual QCString trProperties()
{ {
return "Propri‚t‚s"; return "Propriétés";
} }
/*! Used as a section header for IDL property documentation */ /*! Used as a section header for IDL property documentation */
virtual QCString trPropertyDocumentation() virtual QCString trPropertyDocumentation()
{ {
return "Documentation des propri‚t‚s"; return "Documentation des propriétés";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1033,7 +1031,7 @@ class TranslatorFrench : public Translator ...@@ -1033,7 +1031,7 @@ class TranslatorFrench : public Translator
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
return "Structures de donnes"; return "Structures de données";
} }
else else
{ {
...@@ -1053,7 +1051,7 @@ class TranslatorFrench : public Translator ...@@ -1053,7 +1051,7 @@ class TranslatorFrench : public Translator
/*! The description of the package index page */ /*! The description of the package index page */
virtual QCString trPackageListDescription() virtual QCString trPackageListDescription()
{ {
return "Liste des paquetages avec une brŠve description (si disponible):"; return "Liste des paquetages avec une brève description (si disponible):";
} }
/*! The link name in the Quick links header for each page */ /*! The link name in the Quick links header for each page */
virtual QCString trPackages() virtual QCString trPackages()
...@@ -1244,7 +1242,7 @@ class TranslatorFrench : public Translator ...@@ -1244,7 +1242,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trReferences() virtual QCString trReferences()
{ {
return "R‚f‚rences"; return "Références";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.2.13 // new since 1.2.13
...@@ -1255,7 +1253,7 @@ class TranslatorFrench : public Translator ...@@ -1255,7 +1253,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trImplementedFromList(int numEntries) virtual QCString trImplementedFromList(int numEntries)
{ {
return "Implmente "+trWriteList(numEntries)+"."; return "Implémente "+trWriteList(numEntries)+".";
} }
/*! used in member documentation blocks to produce a list of /*! used in member documentation blocks to produce a list of
...@@ -1263,7 +1261,7 @@ class TranslatorFrench : public Translator ...@@ -1263,7 +1261,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trImplementedInList(int numEntries) virtual QCString trImplementedInList(int numEntries)
{ {
return "Impl‚ment‚ dans "+trWriteList(numEntries)+"."; return "Implémenté dans "+trWriteList(numEntries)+".";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1275,7 +1273,7 @@ class TranslatorFrench : public Translator ...@@ -1275,7 +1273,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trRTFTableOfContents() virtual QCString trRTFTableOfContents()
{ {
return "Table des matiŠres"; return "Table des matières";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1287,7 +1285,7 @@ class TranslatorFrench : public Translator ...@@ -1287,7 +1285,7 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trDeprecatedList() virtual QCString trDeprecatedList()
{ {
return "Liste obsolŠte"; return "Liste obsolète";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1299,12 +1297,12 @@ class TranslatorFrench : public Translator ...@@ -1299,12 +1297,12 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trEvents() virtual QCString trEvents()
{ {
return "EvŠnements"; return "Evènements";
} }
/*! Header used for the documentation section of a class' events. */ /*! Header used for the documentation section of a class' events. */
virtual QCString trEventDocumentation() virtual QCString trEventDocumentation()
{ {
return "Documentation des ‚vŠnements"; return "Documentation des évènements";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1322,14 +1320,14 @@ class TranslatorFrench : public Translator ...@@ -1322,14 +1320,14 @@ class TranslatorFrench : public Translator
*/ */
virtual QCString trPackageMembers() virtual QCString trPackageMembers()
{ {
return "M‚thodes de paquetage"; return "Fonctions de paquetage";
} }
/*! Used as a heading for a list of static Java class functions with /*! Used as a heading for a list of static Java class functions with
* package scope. * package scope.
*/ */
virtual QCString trStaticPackageMembers() virtual QCString trStaticPackageMembers()
{ {
return "M‚thodes statiques de paquetage"; return "Fonctions statiques de paquetage";
} }
/*! Used as a heading for a list of Java class variables with package /*! Used as a heading for a list of Java class variables with package
* scope. * scope.
...@@ -1345,6 +1343,7 @@ class TranslatorFrench : public Translator ...@@ -1345,6 +1343,7 @@ class TranslatorFrench : public Translator
{ {
return "Attributs statiques de paquetage"; return "Attributs statiques de paquetage";
} }
}; };
......
...@@ -3130,6 +3130,12 @@ void extractNamespaceName(const QCString &scopeName, ...@@ -3130,6 +3130,12 @@ void extractNamespaceName(const QCString &scopeName,
namespaceName.resize(0); namespaceName.resize(0);
done: done:
if (className.isEmpty() && !namespaceName.isEmpty())
{
// class and namespace with the same name, correct to return the class.
className=namespaceName.copy();
namespaceName.resize(0);
}
//printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(), //printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(),
// className.data(),namespaceName.data()); // className.data(),namespaceName.data());
return; return;
...@@ -4009,6 +4015,7 @@ void filterLatexString(QTextStream &t,const char *str, ...@@ -4009,6 +4015,7 @@ void filterLatexString(QTextStream &t,const char *str,
case '\\': t << "\\(\\backslash\\)"; break; case '\\': t << "\\(\\backslash\\)"; break;
case '{': t << "\\{"; break; case '{': t << "\\{"; break;
case '}': t << "\\}"; break; case '}': t << "\\}"; break;
case '_': t << "\\_"; break;
default: default:
{ {
// Some languages use wide characters // Some languages use wide characters
......
...@@ -185,6 +185,9 @@ void XmlDocVisitor::visit(DocVerbatim *s) ...@@ -185,6 +185,9 @@ void XmlDocVisitor::visit(DocVerbatim *s)
filter(s->text()); filter(s->text());
m_t << "</latexonly>"; m_t << "</latexonly>";
break; break;
case DocVerbatim::XmlOnly:
m_t << s->text();
break;
} }
} }
......
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