Commit 2f790207 authored by dimitri's avatar dimitri

Release-1.2.9-20010819

parent eed68005
DOXYGEN Version 1.2.9-20010812 DOXYGEN Version 1.2.9-20010819
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (12 August 2001) Dimitri van Heesch (19 August 2001)
...@@ -11,6 +11,7 @@ irix-dcc ...@@ -11,6 +11,7 @@ irix-dcc
irix-g++ irix-g++
irix-n32 irix-n32
linux-g++ linux-g++
macosx-c++
netbsd-g++ netbsd-g++
openbsd-g++ openbsd-g++
osf1-cxx osf1-cxx
......
DOXYGEN Version 1.2.9_20010812 DOXYGEN Version 1.2.9_20010819
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) (12 August 2001) Dimitri van Heesch (dimitri@stack.nl) (19 August 2001)
1.2.9-20010812 1.2.9-20010819
...@@ -232,7 +232,9 @@ class SimpleSectHandler : public DocNode, ...@@ -232,7 +232,9 @@ class SimpleSectHandler : public DocNode,
enum Types { See, Return, Author, Version, enum Types { See, Return, Author, Version,
Since, Date, Bug, Note, Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre, Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention Post, Invar, Remark, Attention,
Todo, Test, RCS, EnumValues,
Examples
}; };
SimpleSectHandler(IBaseHandler *parent); SimpleSectHandler(IBaseHandler *parent);
virtual ~SimpleSectHandler(); virtual ~SimpleSectHandler();
......
...@@ -21,6 +21,13 @@ ...@@ -21,6 +21,13 @@
#include <qdict.h> #include <qdict.h>
#include <qlist.h> #include <qlist.h>
//#define USE_DOM
#define USE_SAX
#ifdef USE_DOM
#include <qdom.h>
#endif
class ErrorHandler : public QXmlErrorHandler class ErrorHandler : public QXmlErrorHandler
{ {
public: public:
...@@ -55,9 +62,13 @@ int main(int argc,char **argv) ...@@ -55,9 +62,13 @@ int main(int argc,char **argv)
exit(1); exit(1);
} }
//for (;;)
//{
QFile xmlFile(argv[1]); QFile xmlFile(argv[1]);
if (!xmlFile.open( IO_ReadOnly ))
{
qFatal("Could not read %s",argv[1] );
}
#ifdef USE_SAX
MainHandler handler; MainHandler handler;
ErrorHandler errorHandler; ErrorHandler errorHandler;
QXmlInputSource source( xmlFile ); QXmlInputSource source( xmlFile );
...@@ -65,7 +76,32 @@ int main(int argc,char **argv) ...@@ -65,7 +76,32 @@ int main(int argc,char **argv)
reader.setContentHandler( &handler ); reader.setContentHandler( &handler );
reader.setErrorHandler( &errorHandler ); reader.setErrorHandler( &errorHandler );
reader.parse( source ); reader.parse( source );
//} #endif
#ifdef USE_DOM
QDomDocument doc;
doc.setContent( &xmlFile );
QDomElement de = doc.documentElement();
printf("docElem=%s\n",de.tagName().data());
QDomNode n = de.firstChild();
while( !n.isNull() )
{
QDomElement e = n.toElement(); // try to convert the node to an element.
if( !e.isNull() )
{ // the node was really an element.
printf("direct child %s id=%s kind=%s\n",
e.tagName().data(),
e.attribute("id").data(),
e.attribute("kind").data()
);
}
n = n.nextSibling();
}
#endif
return 0; return 0;
} }
......
...@@ -27,6 +27,7 @@ f_prefix=/usr ...@@ -27,6 +27,7 @@ f_prefix=/usr
f_insttool=NO f_insttool=NO
f_english=NO f_english=NO
f_wizard=NO f_wizard=NO
f_langs=nl,se,cz,fr,it,de,jp,es,fi,ru,hr,pl,pt,hu,kr,ro,si,cn,no,br,dk,sk,ua
while test -n "$1"; do while test -n "$1"; do
case $1 in case $1 in
...@@ -51,6 +52,9 @@ while test -n "$1"; do ...@@ -51,6 +52,9 @@ while test -n "$1"; do
--english-only | -english-only) --english-only | -english-only)
f_english=YES f_english=YES
;; ;;
--enable-langs | -enable-langs)
shift; f_langs=$1
;;
--platform | -platform) --platform | -platform)
shift; f_platform=$1 shift; f_platform=$1
;; ;;
...@@ -86,7 +90,7 @@ if test "$f_help" = y; then ...@@ -86,7 +90,7 @@ if test "$f_help" = y; then
Usage: $0 [--help] [--shared] [--static] [--release] [--debug] Usage: $0 [--help] [--shared] [--static] [--release] [--debug]
[--perl name] [--make name] [--dot name] [--platform target] [--perl name] [--make name] [--dot name] [--platform target]
[--prefix dir] [--docdir dir] [--install name] [--english-only] [--prefix dir] [--docdir dir] [--install name] [--english-only]
[--with-doxywizard] [----enable-langs list] [--with-doxywizard]
Options: Options:
...@@ -112,6 +116,8 @@ Options: ...@@ -112,6 +116,8 @@ Options:
--install name Use \`name' as the name of the GNU install tool --install name Use \`name' as the name of the GNU install tool
[default: autodetect] [default: autodetect]
--english-only Include support for English only. --english-only Include support for English only.
--enable-langs list Include support for output languages listed in list.
[default: $f_langs]
--with-doxywizard Build the GUI frontend for doxygen. This --with-doxywizard Build the GUI frontend for doxygen. This
requires Qt 2.x.x requires Qt 2.x.x
...@@ -344,6 +350,7 @@ if test "$f_perl" = NO; then ...@@ -344,6 +350,7 @@ if test "$f_perl" = NO; then
fi fi
echo "using $f_perl"; echo "using $f_perl";
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
test -f .makeconfig && rm .makeconfig test -f .makeconfig && rm .makeconfig
...@@ -450,3 +457,20 @@ EOF ...@@ -450,3 +457,20 @@ EOF
echo " Created $DST from $SRC..." echo " Created $DST from $SRC..."
done done
# - generating src/lang_cfg.h
echo -n " Generating src/lang_cfg.h..."
echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>);
chomp @l;
@allowed=(NL,SE,CZ,FR,IT,DE,JP,ES,FI,RU,HR,PL,PT,HU,KR,RO,SI,CN,NO,BR,
DK,SK,UA);
foreach my $elem (@l){
$elem =~ tr/a-z/A-Z/;
$r=0;
foreach my $tst (@allowed){
if ($tst eq $elem) { $r=1; last; }
}
if ($r!=1) { die "ERROR: Invalid language $elem was selected!\n"; }
print "#define LANG_$elem\n";
};' > ./src/lang_cfg.h
echo
...@@ -61,6 +61,7 @@ documentation: ...@@ -61,6 +61,7 @@ documentation:
<li> \refitem cmddefgroup \defgroup <li> \refitem cmddefgroup \defgroup
<li> \refitem cmddeprecated \deprecated <li> \refitem cmddeprecated \deprecated
<li> \refitem cmddontinclude \dontinclude <li> \refitem cmddontinclude \dontinclude
<li> \refitem cmddotfile \dotfile
<li> \refitem cmde \e <li> \refitem cmde \e
<li> \refitem cmdelse \else <li> \refitem cmdelse \else
<li> \refitem cmdelseif \elseif <li> \refitem cmdelseif \elseif
...@@ -758,6 +759,32 @@ Public/Protected/Private/... section. ...@@ -758,6 +759,32 @@ Public/Protected/Private/... section.
*/ */
\endverbatim \endverbatim
You can also use conditional commands inside aliases. To
document a class in two languages you could for instance use:
\par Example 2:
\verbatim
/*! \english
* This is English.
* \endenglish
* \dutch
* Dit is Nederlands.
* \enddutch
*/
class Example
{
};
\endverbatim
<p>Where the following aliases are defined in the configuration file:<p>
\verbatim
ALIASES = "english=\if english" \
"endenglish=\endif" \
"dutch=\if dutch" \
"enddutch=\endif"
\endverbatim
and \c ENABLED_SECTIONS can be used to enable either \c english or \c dutch.
\sa sections \ref cmdendif "\\endif", \ref cmdifnot "\\ifnot", \sa sections \ref cmdendif "\\endif", \ref cmdifnot "\\ifnot",
\ref cmdelse "\\else", and \ref cmdelseif "\\elseif". \ref cmdelse "\\else", and \ref cmdelseif "\\elseif".
...@@ -1331,6 +1358,24 @@ Public/Protected/Private/... section. ...@@ -1331,6 +1358,24 @@ Public/Protected/Private/... section.
\sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim" \sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim"
<hr>
\subsection cmddotfile \dotfile <file> ["caption"]
\addindex \dotfile
Inserts an image generated by dot from \<file\> into the documentation.
The first argument specifies the file name of the image.
doxygen will look for files in the paths (or files) that you specified
after the \ref cfg_dotfile_dirs "DOTFILE_DIRS" tag.
If the dot file is found it will be used as an input file to the dot tool.
The resulting image will be put into the correct output directory.
If the dot file name contains spaces you'll have to put quotes (") around it.
The second argument is optional and can be used to specify the caption
that is displayed below the image. This argument has to be specified
between quotes even if it does not contain any spaces. The quotes are
stripped before the caption is displayed.
<hr> <hr>
\subsection cmde \e <word> \subsection cmde \e <word>
...@@ -1443,7 +1488,7 @@ Public/Protected/Private/... section. ...@@ -1443,7 +1488,7 @@ Public/Protected/Private/... section.
\ref cmdlatexonly "\\latexonly". \ref cmdlatexonly "\\latexonly".
<hr> <hr>
\subsection cmdimage \image <format> <file> ["<caption>"] [<sizeindication>=<size>] \subsection cmdimage \image <format> <file> ["caption"] [<sizeindication>=<size>]
\addindex \image \addindex \image
Inserts an image into the documentation. This command is format Inserts an image into the documentation. This command is format
......
...@@ -84,6 +84,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -84,6 +84,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_doc_abspath DOC_ABSPATH <li> \refitem cfg_doc_abspath DOC_ABSPATH
<li> \refitem cfg_doc_url DOC_URL <li> \refitem cfg_doc_url DOC_URL
<li> \refitem cfg_dot_path DOT_PATH <li> \refitem cfg_dot_path DOT_PATH
<li> \refitem cfg_dotfile_dirs DOTFILE_DIRS
<li> \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING <li> \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING
<li> \refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE <li> \refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE
<li> \refitem cfg_enabled_sections ENABLED_SECTIONS <li> \refitem cfg_enabled_sections ENABLED_SECTIONS
...@@ -1184,6 +1185,13 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre> ...@@ -1184,6 +1185,13 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
This tag can be used to specify the path where the dot tool can be found. This tag can be used to specify the path where the dot tool can be found.
If left blank, it is assumed the dot tool can be found on the path. If left blank, it is assumed the dot tool can be found on the path.
\anchor cfg_dotfile_dirs
<dt>\c DOTFILE_DIRS <dd>
\addindex DOTFILE_DIRS
This tag can be used to specify one or more directories that
contain dot files that are included in the documentation (see the
\\dotfile command).
\anchor cfg_max_dot_graph_height \anchor cfg_max_dot_graph_height
<dt>\c MAX_DOT_GRAPH_HEIGHT <dd> <dt>\c MAX_DOT_GRAPH_HEIGHT <dd>
\addindex MAX_DOT_GRAPH_HEIGHT \addindex MAX_DOT_GRAPH_HEIGHT
......
...@@ -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.2.8-20010726), 24 languages Currently (version 1.2.9-20010812), 24 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish, Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German, Dutch, English, Finnish, French, German,
...@@ -70,8 +70,8 @@ when the translator was updated. ...@@ -70,8 +70,8 @@ when the translator was updated.
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Czech</TD> <TD>Czech</TD>
<TD>Petr P&#x0159;ikryl<br>Vlastimil Havran</TD> <TD>Petr P&#x0159;ikryl</TD>
<TD>prikrylp@NOSPAM.skil.cz<br>havran@NOSPAM.fel.cvut.cz</TD> <TD>prikrylp@NOSPAM.skil.cz</TD>
<TD>up-to-date</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
...@@ -120,7 +120,7 @@ when the translator was updated. ...@@ -120,7 +120,7 @@ when the translator was updated.
<TD>Italian</TD> <TD>Italian</TD>
<TD>Ahmed Aldo Faisal<br>Alessandro Falappa</TD> <TD>Ahmed Aldo Faisal<br>Alessandro Falappa</TD>
<TD>aaf23@NOSPAM.cam.ac.uk<br>a.falappa@NOSPAM.flashnet.it</TD> <TD>aaf23@NOSPAM.cam.ac.uk<br>a.falappa@NOSPAM.flashnet.it</TD>
<TD>1.2.7</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Japanese</TD> <TD>Japanese</TD>
...@@ -212,7 +212,6 @@ when the translator was updated. ...@@ -212,7 +212,6 @@ when the translator was updated.
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
\hline \hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\ Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
& Vlastimil Havran & {\tt havran@fel.cvut.cz} & \\
\hline \hline
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & 1.2.7 \\ Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & 1.2.7 \\
\hline \hline
...@@ -229,7 +228,7 @@ when the translator was updated. ...@@ -229,7 +228,7 @@ when the translator was updated.
\hline \hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\ Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\
\hline \hline
Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & 1.2.7 \\ Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & up-to-date \\
& Alessandro Falappa & {\tt a.falappa@flashnet.it} & \\ & Alessandro Falappa & {\tt a.falappa@flashnet.it} & \\
\hline \hline
Japanese & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & 1.2.5 \\ Japanese & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & 1.2.5 \\
......
...@@ -12,7 +12,6 @@ Boris Bralo: boris.bralo@zg.tel.hr ...@@ -12,7 +12,6 @@ Boris Bralo: boris.bralo@zg.tel.hr
Czech Czech
Petr P&rcaron;ikryl: prikrylp@skil.cz Petr P&rcaron;ikryl: prikrylp@skil.cz
Vlastimil Havran: havran@fel.cvut.cz
Danish Danish
Erik S&oslash;e S&oslash;rensen: erik@mail.nu Erik S&oslash;e S&oslash;rensen: erik@mail.nu
......
...@@ -202,7 +202,16 @@ PREDEFINED = "DECLARE_INTERFACE(name)=class name" \ ...@@ -202,7 +202,16 @@ PREDEFINED = "DECLARE_INTERFACE(name)=class name" \
"ASSERT_VALID(x)=assert(x)" \ "ASSERT_VALID(x)=assert(x)" \
"TRACE0(x)=printf(x)" \ "TRACE0(x)=printf(x)" \
"OS_ERR(A,B)={ #A, B }" \ "OS_ERR(A,B)={ #A, B }" \
__cplusplus __cplusplus \
"DECLARE_OLECREATE(class)= " \
"BEGIN_DISPATCH_MAP(class1, class2)= " \
"BEGIN_INTERFACE_MAP(class1, class2)= " \
"INTERFACE_PART(class, id, name)= " \
"END_INTERFACE_MAP()=" \
"DISP_FUNCTION(class, name, function, result, id)=" \
"END_DISPATCH_MAP()=" \
"IMPLEMENT_OLECREATE2(class, name, id1, id2, id3, id4,\
id5, id6, id7, id8, id9, id10, id11)="
\endverbatim \endverbatim
As you can see doxygen's preprocessor is quite powerful, but if you want As you can see doxygen's preprocessor is quite powerful, but if you want
......
Name: doxygen Name: doxygen
Version: 1.2.9_20010812 Version: 1.2.9_20010819
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 4 Release: 4
Source: doxygen-%{version}.src.tar.gz Source: doxygen-%{version}.src.tar.gz
......
...@@ -1072,7 +1072,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1072,7 +1072,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write examples // write examples
if (exampleFlag) if (exampleFlag)
{ {
ol.startDescList(); ol.startDescList(BaseOutputDocInterface::Examples);
ol.startBold(); ol.startBold();
parseText(ol,theTranslator->trExamples()+": "); parseText(ol,theTranslator->trExamples()+": ");
ol.endBold(); ol.endBold();
...@@ -1199,6 +1199,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1199,6 +1199,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
msg("Generating docs for nested compound %s...\n",innerCd->name().data()); msg("Generating docs for nested compound %s...\n",innerCd->name().data());
innerCd->writeDocumentation(ol); innerCd->writeDocumentation(ol);
innerCd->writeMemberList(ol);
} }
} }
} }
...@@ -1541,6 +1542,7 @@ bool ClassDef::isLinkableInProject() const ...@@ -1541,6 +1542,7 @@ bool ClassDef::isLinkableInProject() const
{ {
return !name().isEmpty() && /* no name */ return !name().isEmpty() && /* no name */
//m_isTemplBaseClass==-1 && /* template base class */ //m_isTemplBaseClass==-1 && /* template base class */
!m_artificial &&
name().find('@')==-1 && /* anonymous compound */ name().find('@')==-1 && /* anonymous compound */
(m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */ (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */
hasDocumentation() && /* documented */ hasDocumentation() && /* documented */
......
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
#define YY_NEVER_INTERACTIVE 1 #define YY_NEVER_INTERACTIVE 1
#define SCOPEBLOCK (void *)1 #define SCOPEBLOCK (int *)4
#define INNERBLOCK (void *)2 #define INNERBLOCK (int *)8
/*! local class definition, used for classes that are defined /*! local class definition, used for classes that are defined
* inside code fragments. * inside code fragments.
...@@ -109,7 +109,7 @@ static QCString g_parmName; ...@@ -109,7 +109,7 @@ static QCString g_parmName;
static bool g_inClass; static bool g_inClass;
static QCString g_classScope; static QCString g_classScope;
static QCString g_realScope; static QCString g_realScope;
static QStack<void> g_scopeStack; // 1 if bracket starts a scope, 2 for internal blocks static QStack<int> g_scopeStack; // 1 if bracket starts a scope, 2 for internal blocks
static CodeClassDef g_ccd; static CodeClassDef g_ccd;
static CodeVarDef g_cvd; static CodeVarDef g_cvd;
static bool g_exampleBlock; static bool g_exampleBlock;
...@@ -939,7 +939,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -939,7 +939,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
} }
else else
{ {
g_scopeStack.push((void *)2); g_scopeStack.push(INNERBLOCK);
} }
BEGIN( Body ); BEGIN( Body );
} }
......
...@@ -1413,11 +1413,6 @@ void Config::create() ...@@ -1413,11 +1413,6 @@ void Config::create()
"Doxygen uses this value to replace tabs by spaces in code fragments. \n", "Doxygen uses this value to replace tabs by spaces in code fragments. \n",
1,16,8 1,16,8
); );
cl = addList(
"ENABLED_SECTIONS",
"The ENABLED_SECTIONS tag can be used to enable conditional \n"
"documentation sections, marked by \\if sectionname ... \\endif. \n"
);
cb = addBool( cb = addBool(
"GENERATE_TODOLIST", "GENERATE_TODOLIST",
"The GENERATE_TODOLIST tag can be used to enable (YES) or \n" "The GENERATE_TODOLIST tag can be used to enable (YES) or \n"
...@@ -1448,6 +1443,11 @@ void Config::create() ...@@ -1448,6 +1443,11 @@ void Config::create()
"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(
"ENABLED_SECTIONS",
"The ENABLED_SECTIONS tag can be used to enable conditional \n"
"documentation sections, marked by \\if sectionname ... \\endif. \n"
);
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"
...@@ -2076,6 +2076,14 @@ void Config::create() ...@@ -2076,6 +2076,14 @@ void Config::create()
); );
cs->setWidgetType(ConfigString::Dir); cs->setWidgetType(ConfigString::Dir);
cs->addDependency("HAVE_DOT"); cs->addDependency("HAVE_DOT");
cl = addList(
"DOTFILE_DIRS",
"The DOTFILE_DIRS tag can be used to specify one or more directories that \n"
"contain dot files that are included in the documentation (see the \n"
"\\dotfile command). \n"
);
cl->setWidgetType(ConfigList::Dir);
cl->addDependency("HAVE_DOT");
ci = addInt( ci = addInt(
"MAX_DOT_GRAPH_WIDTH", "MAX_DOT_GRAPH_WIDTH",
"The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width \n" "The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width \n"
......
This diff is collapsed.
...@@ -1506,3 +1506,23 @@ void generateGraphLegend(const char *path) ...@@ -1506,3 +1506,23 @@ void generateGraphLegend(const char *path)
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
} }
void writeDotGraphFromFile(const char *inFile,const char *outFile,
GraphOutputFormat format)
{
QCString dotArgs(4096);
if (format==GIF)
{
dotArgs.sprintf("-Tgif \"%s\" -o \"%s.gif\"",inFile,outFile);
}
else // format==EPS
{
dotArgs.sprintf("-Tps \"%s\" -o \"%s.eps\"",inFile,outFile);
}
QCString dotExe = Config_getString("DOT_PATH")+"dot";
//printf("Running: %s %s\n",dotExe.data(),dotArgs.data());
if (iSystem(dotExe,dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
}
}
...@@ -160,4 +160,6 @@ class DotInclDepGraph ...@@ -160,4 +160,6 @@ class DotInclDepGraph
}; };
void generateGraphLegend(const char *path); void generateGraphLegend(const char *path);
void writeDotGraphFromFile(const char *inFile,const char *outFile,
GraphOutputFormat format);
...@@ -98,7 +98,7 @@ StringDict Doxygen::aliasDict(257); // aliases ...@@ -98,7 +98,7 @@ StringDict Doxygen::aliasDict(257); // aliases
FileNameDict *Doxygen::includeNameDict; // include names FileNameDict *Doxygen::includeNameDict; // include names
FileNameDict *Doxygen::exampleNameDict; // examples FileNameDict *Doxygen::exampleNameDict; // examples
FileNameDict *Doxygen::imageNameDict; // images FileNameDict *Doxygen::imageNameDict; // images
//TypedefDict Doxygen::typedefDict(1009); // all typedefs FileNameDict *Doxygen::dotFileNameDict; // dot files
StringDict Doxygen::namespaceAliasDict(257); // all namespace aliases StringDict Doxygen::namespaceAliasDict(257); // all namespace aliases
StringDict Doxygen::tagDestinationDict(257); // all tag locations StringDict Doxygen::tagDestinationDict(257); // all tag locations
// a member group // a member group
...@@ -140,7 +140,7 @@ void clearAll() ...@@ -140,7 +140,7 @@ void clearAll()
Doxygen::includeNameDict->clear(); Doxygen::includeNameDict->clear();
Doxygen::exampleNameDict->clear(); Doxygen::exampleNameDict->clear();
Doxygen::imageNameDict->clear(); Doxygen::imageNameDict->clear();
//Doxygen::typedefDict.clear(); Doxygen::dotFileNameDict->clear();
Doxygen::groupDict.clear(); Doxygen::groupDict.clear();
Doxygen::formulaDict.clear(); Doxygen::formulaDict.clear();
Doxygen::formulaNameDict.clear(); Doxygen::formulaNameDict.clear();
...@@ -159,8 +159,8 @@ void statistics() ...@@ -159,8 +159,8 @@ void statistics()
Doxygen::exampleNameDict->statistics(); Doxygen::exampleNameDict->statistics();
fprintf(stderr,"--- imageNameDict stats ----\n"); fprintf(stderr,"--- imageNameDict stats ----\n");
Doxygen::imageNameDict->statistics(); Doxygen::imageNameDict->statistics();
//fprintf(stderr,"--- classDict stats ----\n"); fprintf(stderr,"--- dotFileNameDict stats ----\n");
//Doxygen::classSDict.statistics(); Doxygen::dotFileNameDict->statistics();
fprintf(stderr,"--- namespaceDict stats ----\n"); fprintf(stderr,"--- namespaceDict stats ----\n");
Doxygen::namespaceDict.statistics(); Doxygen::namespaceDict.statistics();
fprintf(stderr,"--- memberNameDict stats ----\n"); fprintf(stderr,"--- memberNameDict stats ----\n");
...@@ -6702,6 +6702,7 @@ void parseInput() ...@@ -6702,6 +6702,7 @@ void parseInput()
Doxygen::includeNameDict = new FileNameDict(1009); Doxygen::includeNameDict = new FileNameDict(1009);
Doxygen::exampleNameDict = new FileNameDict(1009); Doxygen::exampleNameDict = new FileNameDict(1009);
Doxygen::imageNameDict = new FileNameDict(257); Doxygen::imageNameDict = new FileNameDict(257);
Doxygen::dotFileNameDict = new FileNameDict(257);
if (!Config_getString("DOC_URL").isEmpty()) if (!Config_getString("DOC_URL").isEmpty())
{ {
...@@ -6768,6 +6769,16 @@ void parseInput() ...@@ -6768,6 +6769,16 @@ void parseInput()
s=imagePathList.next(); s=imagePathList.next();
} }
msg("Searching for dot files...\n");
QStrList &dotFileList=Config_getList("DOTFILE_DIRS");
s=dotFileList.first();
while (s)
{
readFileOrDirectory(s,0,Doxygen::dotFileNameDict,0,0,
0,0,0);
s=dotFileList.next();
}
msg("Searching for files to exclude\n"); msg("Searching for files to exclude\n");
QStrList &excludeList = Config_getList("EXCLUDE"); QStrList &excludeList = Config_getList("EXCLUDE");
s=excludeList.first(); s=excludeList.first();
......
...@@ -68,6 +68,7 @@ class Doxygen ...@@ -68,6 +68,7 @@ class Doxygen
static FileNameDict *exampleNameDict; static FileNameDict *exampleNameDict;
static FileNameDict *inputNameDict; static FileNameDict *inputNameDict;
static FileNameDict *imageNameDict; static FileNameDict *imageNameDict;
static FileNameDict *dotFileNameDict;
static QStrList tagfileList; static QStrList tagfileList;
static MemberNameList memberNameList; static MemberNameList memberNameList;
static MemberNameList functionNameList; static MemberNameList functionNameList;
...@@ -79,7 +80,6 @@ class Doxygen ...@@ -79,7 +80,6 @@ class Doxygen
static QTextStream tagFile; static QTextStream tagFile;
static SectionDict sectionDict; static SectionDict sectionDict;
static FileNameList inputNameList; static FileNameList inputNameList;
//static TypedefDict typedefDict;
static StringDict namespaceAliasDict; static StringDict namespaceAliasDict;
static GroupList groupList; static GroupList groupList;
static GroupDict groupDict; static GroupDict groupDict;
......
...@@ -858,6 +858,39 @@ void HtmlGenerator::endImage(bool hasCaption) ...@@ -858,6 +858,39 @@ void HtmlGenerator::endImage(bool hasCaption)
t << "</div>" << endl; t << "</div>" << endl;
} }
void HtmlGenerator::startDotFile(const char *name,bool hasCaption)
{
QCString baseName=name;
int i;
if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
{
baseName=baseName.right(baseName.length()-i-1);
}
QCString outName = Config_getString("HTML_OUTPUT")+
#ifdef _WIN32
"\\"
#else
"/"
#endif
+baseName;
writeDotGraphFromFile(name,outName,GIF);
t << "<div align=\"center\">" << endl;
t << "<img src=\"" << baseName << ".gif\" alt=\"" << baseName << "\">" << endl;
if (hasCaption)
{
t << "<p><strong>";
}
}
void HtmlGenerator::endDotFile(bool hasCaption)
{
if (hasCaption)
{
t << "</strong></p>" << endl;
}
t << "</div>" << endl;
}
void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *) void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *)
{ {
DBG_HTML(t << "<!-- startMemberDoc -->" << endl;) DBG_HTML(t << "<!-- startMemberDoc -->" << endl;)
......
...@@ -176,11 +176,10 @@ class HtmlGenerator : public OutputGenerator ...@@ -176,11 +176,10 @@ class HtmlGenerator : public OutputGenerator
void writeRing(char c) { t << "&" << c << "ring;"; } void writeRing(char c) { t << "&" << c << "ring;"; }
void writeSharpS() { t << "&szlig;"; } void writeSharpS() { t << "&szlig;"; }
void writeCCedil(char c) { t << "&" << c << "cedil;"; } void writeCCedil(char c) { t << "&" << c << "cedil;"; }
void startDescList() { t << "<dl compact><dt><b>" << endl; } void startDescList(SectionTypes) { t << "<dl compact><dt><b>" << endl; }
void endDescList() { t << "</dl>"; } void endDescList() { t << "</dl>"; }
void startParamList(ParamListTypes) void startParamList(ParamListTypes) { t << "<dl compact><dt><b>" << endl; }
{ startDescList(); } void endParamList() { t << "</dl>"; }
void endParamList() { endDescList(); }
void endDescTitle() { t << "</b>"; } void endDescTitle() { t << "</b>"; }
void writeDescItem() { t << "<dd>" << endl; } void writeDescItem() { t << "<dd>" << endl; }
void startSection(const char *,const char *,bool); void startSection(const char *,const char *,bool);
...@@ -204,6 +203,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -204,6 +203,8 @@ class HtmlGenerator : public OutputGenerator
void writeNonBreakableSpace(int); void writeNonBreakableSpace(int);
void startImage(const char *,const char *,bool); void startImage(const char *,const char *,bool);
void endImage(bool); void endImage(bool);
void startDotFile(const char *,bool);
void endDotFile(bool);
void startDescTable() void startDescTable()
{ t << "<table border=0 cellspacing=2 cellpadding=0>" << endl; } { t << "<table border=0 cellspacing=2 cellpadding=0>" << endl; }
......
#define LANG_NL
#define LANG_SE
#define LANG_CZ
#define LANG_FR
#define LANG_IT
#define LANG_DE
#define LANG_JP
#define LANG_ES
#define LANG_FI
#define LANG_RU
#define LANG_HR
#define LANG_PL
#define LANG_PT
#define LANG_HU
#define LANG_KR
#define LANG_RO
#define LANG_SI
#define LANG_CN
#define LANG_NO
#define LANG_BR
#define LANG_DK
#define LANG_SK
#define LANG_UA
...@@ -17,34 +17,81 @@ ...@@ -17,34 +17,81 @@
#include "message.h" #include "message.h"
#include "language.h" #include "language.h"
#include "lang_cfg.h"
#include "translator.h" #include "translator.h"
#include "translator_en.h" #include "translator_en.h"
#if !defined(ENGLISH_ONLY) #if !defined(ENGLISH_ONLY)
#include "translator_adapter.h" #include "translator_adapter.h"
#ifdef LANG_NL
#include "translator_nl.h" #include "translator_nl.h"
#endif
#ifdef LANG_SE
#include "translator_se.h" #include "translator_se.h"
#endif
#ifdef LANG_CZ
#include "translator_cz.h" #include "translator_cz.h"
#endif
#ifdef LANG_FR
#include "translator_fr.h" #include "translator_fr.h"
#endif
#ifdef LANG_IT
#include "translator_it.h" #include "translator_it.h"
#endif
#ifdef LANG_DE
#include "translator_de.h" #include "translator_de.h"
#endif
#ifdef LANG_JP
#include "translator_jp.h" #include "translator_jp.h"
#endif
#ifdef LANG_ES
#include "translator_es.h" #include "translator_es.h"
#endif
#ifdef LANG_FI
#include "translator_fi.h" #include "translator_fi.h"
#endif
#ifdef LANG_RU
#include "translator_ru.h" #include "translator_ru.h"
#endif
#ifdef LANG_HR
#include "translator_hr.h" #include "translator_hr.h"
#endif
#ifdef LANG_PL
#include "translator_pl.h" #include "translator_pl.h"
#endif
#ifdef LANG_PT
#include "translator_pt.h" #include "translator_pt.h"
#endif
#ifdef LANG_HU
#include "translator_hu.h" #include "translator_hu.h"
#endif
#ifdef LANG_KR
#include "translator_kr.h" #include "translator_kr.h"
#endif
#ifdef LANG_RO
#include "translator_ro.h" #include "translator_ro.h"
#endif
#ifdef LANG_SI
#include "translator_si.h" #include "translator_si.h"
#endif
#ifdef LANG_CN
#include "translator_cn.h" #include "translator_cn.h"
#endif
#ifdef LANG_NO
#include "translator_no.h" #include "translator_no.h"
#endif
#ifdef LANG_BR
#include "translator_br.h" #include "translator_br.h"
#endif
#ifdef LANG_DK
#include "translator_dk.h" #include "translator_dk.h"
#endif
#ifdef LANG_SK
#include "translator_sk.h" #include "translator_sk.h"
#endif
#ifdef LANG_UA
#include "translator_ua.h" #include "translator_ua.h"
#endif #endif
#endif
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -57,98 +104,144 @@ bool setTranslator(const char *langName) ...@@ -57,98 +104,144 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorEnglish; theTranslator=new TranslatorEnglish;
} }
#if !defined(ENGLISH_ONLY) #if !defined(ENGLISH_ONLY)
#ifdef LANG_NL
else if (L_EQUAL("dutch")) else if (L_EQUAL("dutch"))
{ {
theTranslator=new TranslatorDutch; theTranslator=new TranslatorDutch;
} }
#endif
#ifdef LANG_SE
else if (L_EQUAL("swedish")) else if (L_EQUAL("swedish"))
{ {
theTranslator=new TranslatorSwedish; theTranslator=new TranslatorSwedish;
} }
#endif
#ifdef LANG_CZ
else if (L_EQUAL("czech")) else if (L_EQUAL("czech"))
{ {
theTranslator=new TranslatorCzech; theTranslator=new TranslatorCzech;
} }
#endif
#ifdef LANG_FR
else if (L_EQUAL("french")) else if (L_EQUAL("french"))
{ {
theTranslator=new TranslatorFrench; theTranslator=new TranslatorFrench;
} }
#endif
#ifdef LANG_IT
else if (L_EQUAL("italian")) else if (L_EQUAL("italian"))
{ {
theTranslator=new TranslatorItalian; theTranslator=new TranslatorItalian;
} }
#endif
#ifdef LANG_DE
else if (L_EQUAL("german")) else if (L_EQUAL("german"))
{ {
theTranslator=new TranslatorGerman; theTranslator=new TranslatorGerman;
} }
#endif
#ifdef LANG_JP
else if (L_EQUAL("japanese")) else if (L_EQUAL("japanese"))
{ {
theTranslator=new TranslatorJapanese; theTranslator=new TranslatorJapanese;
} }
#endif
#ifdef LANG_ES
else if (L_EQUAL("spanish")) else if (L_EQUAL("spanish"))
{ {
theTranslator=new TranslatorSpanish; theTranslator=new TranslatorSpanish;
} }
#endif
#ifdef LANG_FI
else if (L_EQUAL("finnish")) else if (L_EQUAL("finnish"))
{ {
theTranslator=new TranslatorFinnish; theTranslator=new TranslatorFinnish;
} }
#endif
#ifdef LANG_RU
else if (L_EQUAL("russian")) else if (L_EQUAL("russian"))
{ {
theTranslator=new TranslatorRussian; theTranslator=new TranslatorRussian;
} }
#endif
#ifdef LANG_HR
else if (L_EQUAL("croatian")) else if (L_EQUAL("croatian"))
{ {
theTranslator=new TranslatorCroatian; theTranslator=new TranslatorCroatian;
} }
#endif
#ifdef LANG_PL
else if (L_EQUAL("polish")) else if (L_EQUAL("polish"))
{ {
theTranslator=new TranslatorPolish; theTranslator=new TranslatorPolish;
} }
#endif
#ifdef LANG_PT
else if (L_EQUAL("portuguese")) else if (L_EQUAL("portuguese"))
{ {
theTranslator=new TranslatorPortuguese; theTranslator=new TranslatorPortuguese;
} }
#endif
#ifdef LANG_HU
else if (L_EQUAL("hungarian")) else if (L_EQUAL("hungarian"))
{ {
theTranslator=new TranslatorHungarian; theTranslator=new TranslatorHungarian;
} }
#endif
#ifdef LANG_KR
else if (L_EQUAL("korean")) else if (L_EQUAL("korean"))
{ {
theTranslator=new TranslatorKorean; theTranslator=new TranslatorKorean;
} }
#endif
#ifdef LANG_RO
else if (L_EQUAL("romanian")) else if (L_EQUAL("romanian"))
{ {
theTranslator=new TranslatorRomanian; theTranslator=new TranslatorRomanian;
} }
#endif
#ifdef LANG_SI
else if (L_EQUAL("slovene")) else if (L_EQUAL("slovene"))
{ {
theTranslator=new TranslatorSlovene; theTranslator=new TranslatorSlovene;
} }
#endif
#ifdef LANG_CN
else if (L_EQUAL("chinese")) else if (L_EQUAL("chinese"))
{ {
theTranslator=new TranslatorChinese; theTranslator=new TranslatorChinese;
} }
#endif
#ifdef LANG_NO
else if (L_EQUAL("norwegian")) else if (L_EQUAL("norwegian"))
{ {
theTranslator=new TranslatorNorwegian; theTranslator=new TranslatorNorwegian;
} }
#endif
#ifdef LANG_BR
else if (L_EQUAL("brazilian")) else if (L_EQUAL("brazilian"))
{ {
theTranslator=new TranslatorBrazilian; theTranslator=new TranslatorBrazilian;
} }
#endif
#ifdef LANG_DK
else if (L_EQUAL("danish")) else if (L_EQUAL("danish"))
{ {
theTranslator=new TranslatorDanish; theTranslator=new TranslatorDanish;
} }
#endif
#ifdef LANG_SK
else if (L_EQUAL("slovak")) else if (L_EQUAL("slovak"))
{ {
theTranslator=new TranslatorSlovak; theTranslator=new TranslatorSlovak;
} }
#endif
#ifdef LANG_UA
else if (L_EQUAL("ukrainian")) else if (L_EQUAL("ukrainian"))
{ {
theTranslator=new TranslatorUkrainian; theTranslator=new TranslatorUkrainian;
} }
#endif
#endif #endif
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
...@@ -223,8 +223,7 @@ static void writeDefaultHeaderPart1(QTextStream &t) ...@@ -223,8 +223,7 @@ static void writeDefaultHeaderPart1(QTextStream &t)
"\\usepackage{fancyhdr}\n" "\\usepackage{fancyhdr}\n"
"\\usepackage{graphicx}\n" "\\usepackage{graphicx}\n"
"\\usepackage{float}\n" "\\usepackage{float}\n"
"\\usepackage{alltt}\n" "\\usepackage{alltt}\n";
"\\usepackage{doxygen}\n";
if (Config_getBool("PDF_HYPERLINKS")) if (Config_getBool("PDF_HYPERLINKS"))
{ {
t << "\\usepackage{times}" << endl; t << "\\usepackage{times}" << endl;
...@@ -254,6 +253,7 @@ static void writeDefaultHeaderPart1(QTextStream &t) ...@@ -254,6 +253,7 @@ static void writeDefaultHeaderPart1(QTextStream &t)
t << sLanguageSupportCommand; t << sLanguageSupportCommand;
} }
t << "\\usepackage{doxygen}\n";
QStrList &extraPackages = Config_getList("EXTRA_PACKAGES"); QStrList &extraPackages = Config_getList("EXTRA_PACKAGES");
const char *s=extraPackages.first(); const char *s=extraPackages.first();
while (s) while (s)
...@@ -1553,6 +1553,43 @@ void LatexGenerator::endImage(bool hasCaption) ...@@ -1553,6 +1553,43 @@ void LatexGenerator::endImage(bool hasCaption)
} }
} }
void LatexGenerator::startDotFile(const char *name,bool hasCaption)
{
QCString baseName=name;
int i;
if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
{
baseName=baseName.right(baseName.length()-i-1);
}
QCString outName = Config_getString("LATEX_OUTPUT")+
#ifdef _WIN32
"\\"
#else
"/"
#endif
+baseName;
writeDotGraphFromFile(name,outName,EPS);
if (hasCaption)
t << "\\begin{figure}[H]" << endl;
else
t << "\\mbox{";
t << "\\includegraphics";
t << "{" << baseName << ".eps}";
if (hasCaption)
t << "\\caption{";
else
t << "}" << endl;
}
void LatexGenerator::endDotFile(bool hasCaption)
{
if (hasCaption)
{
t << "}" << endl;
t << "\\end{figure}" << endl;
}
}
void LatexGenerator::startMemberGroupHeader(bool hasHeader) void LatexGenerator::startMemberGroupHeader(bool hasHeader)
{ {
......
...@@ -183,11 +183,10 @@ class LatexGenerator : public OutputGenerator ...@@ -183,11 +183,10 @@ class LatexGenerator : public OutputGenerator
void writeCCedil(char c) { t << "\\c{" << c << "}"; } void writeCCedil(char c) { t << "\\c{" << c << "}"; }
void startMemberDescription() { t << "\\begin{CompactList}\\small\\item\\em "; } void startMemberDescription() { t << "\\begin{CompactList}\\small\\item\\em "; }
void endMemberDescription() { t << "\\item\\end{CompactList}"; } void endMemberDescription() { t << "\\item\\end{CompactList}"; }
void startDescList() { t << "\\begin{Desc}\n\\item["; } void startDescList(SectionTypes) { t << "\\begin{Desc}\n\\item["; }
void endDescList() { t << "\\end{Desc}" << endl; } void endDescList() { t << "\\end{Desc}" << endl; }
void startParamList(ParamListTypes) void startParamList(ParamListTypes) { t << "\\begin{Desc}\n\\item["; }
{ startDescList(); } void endParamList() { t << "\\end{Desc}" << endl; }
void endParamList() { endDescList(); }
void endDescTitle() { t << "]"; } void endDescTitle() { t << "]"; }
void writeDescItem() { t << "\\par" << endl; } void writeDescItem() { t << "\\par" << endl; }
void startSection(const char *,const char *,bool); void startSection(const char *,const char *,bool);
...@@ -212,6 +211,8 @@ class LatexGenerator : public OutputGenerator ...@@ -212,6 +211,8 @@ class LatexGenerator : public OutputGenerator
void writeNonBreakableSpace(int); void writeNonBreakableSpace(int);
void startImage(const char *,const char *,bool); void startImage(const char *,const char *,bool);
void endImage(bool); void endImage(bool);
void startDotFile(const char *,bool);
void endDotFile(bool);
void startDescTable() void startDescTable()
{ t << "\\begin{description}" << endl; } { t << "\\begin{description}" << endl; }
......
...@@ -308,7 +308,17 @@ void ManGenerator::writeChar(char c) ...@@ -308,7 +308,17 @@ void ManGenerator::writeChar(char c)
paragraph=FALSE; paragraph=FALSE;
} }
void ManGenerator::startDescList() void ManGenerator::startDescList(SectionTypes)
{
if (!firstCol)
{ t << endl << ".PP" << endl;
firstCol=TRUE; paragraph=TRUE;
col=0;
}
paragraph=FALSE;
}
void ManGenerator::startParamList(ParamListTypes)
{ {
if (!firstCol) if (!firstCol)
{ t << endl << ".PP" << endl; { t << endl << ".PP" << endl;
......
...@@ -170,10 +170,10 @@ class ManGenerator : public OutputGenerator ...@@ -170,10 +170,10 @@ class ManGenerator : public OutputGenerator
firstCol=FALSE; } firstCol=FALSE; }
void startMemberDescription() { t << "\n.RI \"\\fI"; firstCol=FALSE; } void startMemberDescription() { t << "\n.RI \"\\fI"; firstCol=FALSE; }
void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; } void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; }
void startDescList(); void startDescList(SectionTypes);
void endDescList() {} void endDescList() {}
void startParamList(ParamListTypes) { startDescList(); } void startParamList(ParamListTypes);
void endParamList() { endDescList(); } void endParamList() {}
void endDescTitle(); void endDescTitle();
void writeDescItem(); void writeDescItem();
void startSection(const char *,const char *,bool); void startSection(const char *,const char *,bool);
...@@ -198,6 +198,8 @@ class ManGenerator : public OutputGenerator ...@@ -198,6 +198,8 @@ class ManGenerator : public OutputGenerator
void writeNonBreakableSpace(int n) { int i; for (i=0;i<n;i++) t << " "; } void writeNonBreakableSpace(int n) { int i; for (i=0;i<n;i++) t << " "; }
void startImage(const char *,const char *,bool) {} void startImage(const char *,const char *,bool) {}
void endImage(bool) {} void endImage(bool) {}
void startDotFile(const char *,bool) {}
void endDotFile(bool) {}
void startDescTable() {} void startDescTable() {}
void endDescTable() {} void endDescTable() {}
......
...@@ -813,8 +813,9 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -813,8 +813,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace()); linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace());
} }
else if (!init.isEmpty() && initLines==0 && // one line initializer else if (hasOneLineInitializer()
((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly //!init.isEmpty() && initLines==0 && // one line initializer
//((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
) // add initializer ) // add initializer
{ {
if (!isDefine()) if (!isDefine())
...@@ -889,7 +890,8 @@ bool MemberDef::isDetailedSectionLinkable() const ...@@ -889,7 +890,8 @@ bool MemberDef::isDetailedSectionLinkable() const
) )
) || ) ||
// has a multi-line initialization block // has a multi-line initialization block
(initLines>0 && initLines<maxInitLines) || //(initLines>0 && initLines<maxInitLines) ||
hasMultiLineInitializer() ||
// has one or more documented arguments // has one or more documented arguments
(argList!=0 && argList->hasDocumentation()); (argList!=0 && argList->hasDocumentation());
...@@ -1081,8 +1083,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1081,8 +1083,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.startMemberDocName(); ol.startMemberDocName();
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef); linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef);
writeDefArgumentList(ol,cd,scopeName,this); writeDefArgumentList(ol,cd,scopeName,this);
if (!init.isEmpty() && initLines==0 && // one line initializer if (hasOneLineInitializer()
((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly //!init.isEmpty() && initLines==0 && // one line initializer
// ((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
) // add initializer ) // add initializer
{ {
if (!isDefine()) if (!isDefine())
...@@ -1160,9 +1163,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1160,9 +1163,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.popGeneratorState(); ol.popGeneratorState();
/* write multi-line initializer (if any) */ /* write multi-line initializer (if any) */
if (initLines>0 && ((initLines<maxInitLines && userInitLines==-1) // implicitly enabled if (hasMultiLineInitializer()
|| initLines<userInitLines // explicitly enabled //initLines>0 && ((initLines<maxInitLines && userInitLines==-1) // implicitly enabled
) // || initLines<userInitLines // explicitly enabled
// )
) )
{ {
//printf("md=%s initLines=%d init=`%s'\n",name().data(),initLines,init.data()); //printf("md=%s initLines=%d init=`%s'\n",name().data(),initLines,init.data());
...@@ -1205,10 +1209,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1205,10 +1209,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (argList && argList->hasDocumentation()) if (argList && argList->hasDocumentation())
{ {
//printf("***** argumentList is documented\n"); //printf("***** argumentList is documented\n");
ol.startDescList(); ol.startParamList(BaseOutputDocInterface::Param);
ol.startBold();
parseText(ol,theTranslator->trParameters()+": "); parseText(ol,theTranslator->trParameters()+": ");
ol.endBold();
ol.endDescTitle(); ol.endDescTitle();
ol.writeDescItem(); ol.writeDescItem();
ol.startDescTable(); ol.startDescTable();
...@@ -1244,7 +1246,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1244,7 +1246,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (first) if (first)
{ {
//ol.newParagraph(); //ol.newParagraph();
ol.startDescList(); ol.startDescList(BaseOutputDocInterface::EnumValues);
ol.startBold(); ol.startBold();
parseText(ol,theTranslator->trEnumerationValues()); parseText(ol,theTranslator->trEnumerationValues());
ol.docify(":"); ol.docify(":");
...@@ -1441,7 +1443,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1441,7 +1443,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// write the list of examples that use this member // write the list of examples that use this member
if (hasExamples()) if (hasExamples())
{ {
ol.startDescList(); ol.startDescList(BaseOutputDocInterface::Examples);
ol.startBold(); ol.startBold();
parseText(ol,theTranslator->trExamples()+": "); parseText(ol,theTranslator->trExamples()+": ");
//ol.writeBoldString("Examples: "); //ol.writeBoldString("Examples: ");
...@@ -1637,3 +1639,16 @@ MemberDef *MemberDef::createTemplateInstanceMember( ...@@ -1637,3 +1639,16 @@ MemberDef *MemberDef::createTemplateInstanceMember(
return imd; return imd;
} }
bool MemberDef::hasOneLineInitializer() const
{
return !init.isEmpty() && initLines==0 && // one line initializer
((maxInitLines>0 && userInitLines==-1) || userInitLines>0); // enabled by default or explicitly
}
bool MemberDef::hasMultiLineInitializer() const
{
return initLines>0 &&
((initLines<maxInitLines && userInitLines==-1) // implicitly enabled
|| initLines<userInitLines // explicitly enabled
);
}
...@@ -119,6 +119,8 @@ class MemberDef : public Definition ...@@ -119,6 +119,8 @@ class MemberDef : public Definition
bool isExplicit() const { return (memSpec&Entry::Explicit)!=0; } bool isExplicit() const { return (memSpec&Entry::Explicit)!=0; }
bool isMutable() const { return (memSpec&Entry::Mutable)!=0; } bool isMutable() const { return (memSpec&Entry::Mutable)!=0; }
bool isExternal() const { return explExt; } bool isExternal() const { return explExt; }
bool hasOneLineInitializer() const;
bool hasMultiLineInitializer() const;
// output info // output info
bool isLinkableInProject() const; bool isLinkableInProject() const;
......
...@@ -228,16 +228,30 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -228,16 +228,30 @@ void MemberList::writePlainDeclarations(OutputList &ol,
int enumMemCount=0; int enumMemCount=0;
QList<MemberDef> *fmdl=md->enumFieldList();
uint numVisibleEnumValues=0;
if (fmdl)
{
MemberDef *fmd=fmdl->first();
while (fmd)
{
if (fmd->isBriefSectionVisible()) numVisibleEnumValues++;
fmd=fmdl->next();
}
}
if (numVisibleEnumValues==0 && !md->isBriefSectionVisible()) break;
if (numVisibleEnumValues>0)
{
uint enumValuesPerLine = (uint)Config_getInt("ENUM_VALUES_PER_LINE"); uint enumValuesPerLine = (uint)Config_getInt("ENUM_VALUES_PER_LINE");
typeDecl.docify("{ "); typeDecl.docify("{ ");
QList<MemberDef> *fmdl=md->enumFieldList();
if (fmdl) if (fmdl)
{ {
MemberDef *fmd=fmdl->first(); MemberDef *fmd=fmdl->first();
bool fmdVisible = fmd->isBriefSectionVisible();
while (fmd) while (fmd)
{ {
/* in html we start a new line after a number of items */ /* in html we start a new line after a number of items */
if (fmdl->count()>enumValuesPerLine if (numVisibleEnumValues>enumValuesPerLine
&& (enumMemCount%enumValuesPerLine)==0 && (enumMemCount%enumValuesPerLine)==0
) )
{ {
...@@ -248,6 +262,8 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -248,6 +262,8 @@ void MemberList::writePlainDeclarations(OutputList &ol,
typeDecl.popGeneratorState(); typeDecl.popGeneratorState();
} }
if (fmdVisible)
{
if (fmd->hasDocumentation()) // enum value has docs if (fmd->hasDocumentation()) // enum value has docs
{ {
if (!Config_getString("GENERATE_TAGFILE").isEmpty()) if (!Config_getString("GENERATE_TAGFILE").isEmpty())
...@@ -266,20 +282,28 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -266,20 +282,28 @@ void MemberList::writePlainDeclarations(OutputList &ol,
typeDecl.docify(fmd->name()); typeDecl.docify(fmd->name());
typeDecl.endBold(); typeDecl.endBold();
} }
if (!fmd->initializer().isEmpty()) // enum value has initializer if (fmd->hasOneLineInitializer()) // enum value has initializer
{ {
typeDecl.writeString(" = "); typeDecl.writeString(" = ");
parseText(typeDecl,fmd->initializer()); parseText(typeDecl,fmd->initializer());
} }
}
bool prevVisible = fmdVisible;
fmd=fmdl->next(); fmd=fmdl->next();
if (fmd) typeDecl.writeString(", "); if (fmd && (fmdVisible=fmd->isBriefSectionVisible()))
{
typeDecl.writeString(", ");
}
if (prevVisible)
{
typeDecl.disable(OutputGenerator::Man); typeDecl.disable(OutputGenerator::Man);
typeDecl.writeString("\n"); // to prevent too long lines in LaTeX typeDecl.writeString("\n"); // to prevent too long lines in LaTeX
typeDecl.enable(OutputGenerator::Man); typeDecl.enable(OutputGenerator::Man);
enumMemCount++; enumMemCount++;
} }
if (fmdl->count()>enumValuesPerLine) }
if (numVisibleEnumValues>enumValuesPerLine)
{ {
typeDecl.pushGeneratorState(); typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html); typeDecl.disableAllBut(OutputGenerator::Html);
...@@ -289,6 +313,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -289,6 +313,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
} }
typeDecl.docify(" }"); typeDecl.docify(" }");
md->setEnumDecl(typeDecl); md->setEnumDecl(typeDecl);
}
int enumVars=0; int enumVars=0;
MemberListIterator vmli(*this); MemberListIterator vmli(*this);
MemberDef *vmd; MemberDef *vmd;
......
...@@ -41,6 +41,13 @@ class BaseOutputDocInterface ...@@ -41,6 +41,13 @@ class BaseOutputDocInterface
{ {
public: public:
enum ParamListTypes { Param, RetVal, Exception }; enum ParamListTypes { Param, RetVal, Exception };
enum SectionTypes { See, Return, Author, Version,
Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention,
Todo, Test, RCS, EnumValues,
Examples
};
/*! Start of a bullet list: e.g. \c <ul> in html. writeListItem() is /*! Start of a bullet list: e.g. \c <ul> in html. writeListItem() is
* Used for the bullet items. * Used for the bullet items.
...@@ -207,7 +214,7 @@ class BaseOutputDocInterface ...@@ -207,7 +214,7 @@ class BaseOutputDocInterface
virtual void writeRing(char) = 0; virtual void writeRing(char) = 0;
virtual void writeSharpS() = 0; virtual void writeSharpS() = 0;
virtual void writeCCedil(char) = 0; virtual void writeCCedil(char) = 0;
virtual void startDescList() = 0; virtual void startDescList(SectionTypes t) = 0;
virtual void endDescList() = 0; virtual void endDescList() = 0;
virtual void startParamList(ParamListTypes t) = 0; virtual void startParamList(ParamListTypes t) = 0;
virtual void endParamList() = 0; virtual void endParamList() = 0;
...@@ -227,6 +234,8 @@ class BaseOutputDocInterface ...@@ -227,6 +234,8 @@ class BaseOutputDocInterface
virtual void writeNonBreakableSpace(int) = 0; virtual void writeNonBreakableSpace(int) = 0;
virtual void startImage(const char *,const char *,bool) = 0; virtual void startImage(const char *,const char *,bool) = 0;
virtual void endImage(bool) = 0; virtual void endImage(bool) = 0;
virtual void startDotFile(const char *,bool) = 0;
virtual void endDotFile(bool) = 0;
virtual void startDescTable() = 0; virtual void startDescTable() = 0;
virtual void endDescTable() = 0; virtual void endDescTable() = 0;
virtual void startDescTableTitle() = 0; virtual void startDescTableTitle() = 0;
......
...@@ -262,6 +262,7 @@ FORALL1(DotClassGraph &a1,a1) ...@@ -262,6 +262,7 @@ FORALL1(DotClassGraph &a1,a1)
FORALL1(DotInclDepGraph &a1,a1) FORALL1(DotInclDepGraph &a1,a1)
FORALL1(DotGfxHierarchyTable &a1,a1) FORALL1(DotGfxHierarchyTable &a1,a1)
FORALL1(ParamListTypes a1,a1) FORALL1(ParamListTypes 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)
FORALL1(bool a1,a1) FORALL1(bool a1,a1)
FORALL2(bool a1,int a2,a1,a2) FORALL2(bool a1,int a2,a1,a2)
......
...@@ -306,8 +306,8 @@ class OutputList : public OutputDocInterface ...@@ -306,8 +306,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startMemberDescription); } { forall(&OutputGenerator::startMemberDescription); }
void endMemberDescription() void endMemberDescription()
{ forall(&OutputGenerator::endMemberDescription); } { forall(&OutputGenerator::endMemberDescription); }
void startDescList() void startDescList(SectionTypes t)
{ forall(&OutputGenerator::startDescList); } { forall(&OutputGenerator::startDescList,t); }
void endDescList() void endDescList()
{ forall(&OutputGenerator::endDescList); } { forall(&OutputGenerator::endDescList); }
void startParamList(ParamListTypes t) void startParamList(ParamListTypes t)
...@@ -361,6 +361,10 @@ class OutputList : public OutputDocInterface ...@@ -361,6 +361,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startImage,n,s,c); } { forall(&OutputGenerator::startImage,n,s,c); }
void endImage(bool c) void endImage(bool c)
{ forall(&OutputGenerator::endImage,c); } { forall(&OutputGenerator::endImage,c); }
void startDotFile(const char *n,bool c)
{ forall(&OutputGenerator::startDotFile,n,c); }
void endDotFile(bool c)
{ forall(&OutputGenerator::endDotFile,c); }
void startDescTable() void startDescTable()
{ forall(&OutputGenerator::startDescTable); } { forall(&OutputGenerator::startDescTable); }
...@@ -456,6 +460,7 @@ class OutputList : public OutputDocInterface ...@@ -456,6 +460,7 @@ class OutputList : public OutputDocInterface
FORALLPROTO1(DotInclDepGraph &); FORALLPROTO1(DotInclDepGraph &);
FORALLPROTO1(DotGfxHierarchyTable &); FORALLPROTO1(DotGfxHierarchyTable &);
FORALLPROTO1(ParamListTypes); FORALLPROTO1(ParamListTypes);
FORALLPROTO1(SectionTypes);
#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE)
FORALLPROTO1(bool); FORALLPROTO1(bool);
FORALLPROTO2(bool,int); FORALLPROTO2(bool,int);
......
...@@ -1926,7 +1926,7 @@ void RTFGenerator::endMemberDescription() ...@@ -1926,7 +1926,7 @@ void RTFGenerator::endMemberDescription()
t << "\\par}" << endl; t << "\\par}" << endl;
} }
void RTFGenerator::startDescList() void RTFGenerator::startDescList(SectionTypes)
{ {
DBG_RTF(t << "{\\comment (startDescList)}" << endl) DBG_RTF(t << "{\\comment (startDescList)}" << endl)
t << "{"; t << "{";
...@@ -1942,6 +1942,24 @@ void RTFGenerator::endDescTitle() ...@@ -1942,6 +1942,24 @@ void RTFGenerator::endDescTitle()
t << Rtf_Style_Reset << Rtf_DList_DepthStyle(); t << Rtf_Style_Reset << Rtf_DList_DepthStyle();
} }
void RTFGenerator::startParamList(ParamListTypes)
{
DBG_RTF(t << "{\\comment (startParamList)}" << endl)
t << "{";
newParagraph();
}
void RTFGenerator::endParamList()
{
DBG_RTF(t << "{\\comment (endParamList)}" << endl)
newParagraph();
t << "}";
decrementIndentLevel();
m_omitParagraph = TRUE;
//t << Rtf_Style_Reset << styleStack.top() << endl;
}
void RTFGenerator::writeDescItem() void RTFGenerator::writeDescItem()
{ {
DBG_RTF(t << "{\\comment (writeDescItem) }" << endl) DBG_RTF(t << "{\\comment (writeDescItem) }" << endl)
...@@ -2209,6 +2227,36 @@ void RTFGenerator::endImage(bool) ...@@ -2209,6 +2227,36 @@ void RTFGenerator::endImage(bool)
// not yet implemented // not yet implemented
} }
void RTFGenerator::startDotFile(const char *name,bool)
{
QCString baseName=name;
int i;
if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
{
baseName=baseName.right(baseName.length()-i-1);
}
QCString outName = Config_getString("RTF_OUTPUT")+
#ifdef _WIN32
"\\"
#else
"/"
#endif
+baseName;
writeDotGraphFromFile(name,outName,GIF);
newParagraph();
t << "{" << endl;
t << Rtf_Style_Reset << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << outName;
t << " \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
t << "}" << endl;
}
void RTFGenerator::endDotFile(bool)
{
// not yet implemented
}
void RTFGenerator::startDescTable() void RTFGenerator::startDescTable()
{ {
DBG_RTF(t << "{\\comment (startDescTable) }" << endl) DBG_RTF(t << "{\\comment (startDescTable) }" << endl)
......
...@@ -166,10 +166,10 @@ class RTFGenerator : public OutputGenerator ...@@ -166,10 +166,10 @@ class RTFGenerator : public OutputGenerator
void startMemberDescription(); void startMemberDescription();
void endMemberDescription(); void endMemberDescription();
void startDescList(); void startDescList(SectionTypes);
void endDescList(); void endDescList();
void startParamList(ParamListTypes) { startDescList(); } void startParamList(ParamListTypes);
void endParamList() { endDescList(); } void endParamList();
void endDescTitle(); void endDescTitle();
void writeDescItem(); void writeDescItem();
void startSection(const char *,const char *,bool); void startSection(const char *,const char *,bool);
...@@ -194,6 +194,8 @@ class RTFGenerator : public OutputGenerator ...@@ -194,6 +194,8 @@ class RTFGenerator : public OutputGenerator
void writeNonBreakableSpace(int); void writeNonBreakableSpace(int);
void startImage(const char *,const char *,bool); void startImage(const char *,const char *,bool);
void endImage(bool); void endImage(bool);
void startDotFile(const char *,bool);
void endDotFile(bool);
void startDescTable(); void startDescTable();
void endDescTable(); void endDescTable();
......
...@@ -149,6 +149,7 @@ static bool insideFormula; ...@@ -149,6 +149,7 @@ static bool insideFormula;
static bool insideTryBlock=FALSE; static bool insideTryBlock=FALSE;
static int depthIf; static int depthIf;
static int initializerSharpCount;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -1320,6 +1321,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1320,6 +1321,7 @@ TITLE [tT][iI][tT][lL][eE]
<FindMembers>"=" { <FindMembers>"=" {
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
lastInitializerContext = YY_START; lastInitializerContext = YY_START;
initializerSharpCount=0;
BEGIN(ReadInitializer); BEGIN(ReadInitializer);
} }
/* Read initializer rules */ /* Read initializer rules */
...@@ -1339,9 +1341,16 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1339,9 +1341,16 @@ TITLE [tT][iI][tT][lL][eE]
} }
<ReadInitializer>[;,] { <ReadInitializer>[;,] {
//printf(">> initializer `%s' <<\n",current->initializer.data()); //printf(">> initializer `%s' <<\n",current->initializer.data());
if (initializerSharpCount==0)
{
unput(*yytext); unput(*yytext);
BEGIN(lastInitializerContext); BEGIN(lastInitializerContext);
} }
else
{
current->initializer+=*yytext;
}
}
<ReadInitializer>\" { <ReadInitializer>\" {
if (insideIDL && insideCppQuote) if (insideIDL && insideCppQuote)
{ {
...@@ -1355,9 +1364,23 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1355,9 +1364,23 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN(CopyString); BEGIN(CopyString);
} }
} }
<ReadInitializer>"'"\\[0-7]{1,3}"'" <ReadInitializer>"<<" {
<ReadInitializer>"'"\\."'" current->initializer+=yytext;
<ReadInitializer>"'".{1,4}"'" }
<ReadInitializer>">>" {
current->initializer+=yytext;
}
<ReadInitializer>\< {
initializerSharpCount++;
current->initializer+=*yytext;
}
<ReadInitializer>\> {
initializerSharpCount--;
current->initializer+=*yytext;
}
<ReadInitializer>"'"\\[0-7]{1,3}"'" |
<ReadInitializer>"'"\\."'" |
<ReadInitializer>"'".{1,4}"'" { current->initializer+=yytext; }
<ReadInitializer>\n { <ReadInitializer>\n {
current->initializer+=*yytext; current->initializer+=*yytext;
yyLineNr++; yyLineNr++;
...@@ -1547,6 +1570,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1547,6 +1570,7 @@ TITLE [tT][iI][tT][lL][eE]
} }
<FindFields>"=" { <FindFields>"=" {
lastInitializerContext = YY_START; lastInitializerContext = YY_START;
initializerSharpCount=0;
BEGIN(ReadInitializer); BEGIN(ReadInitializer);
} }
<FindFields>"," { <FindFields>"," {
...@@ -1760,6 +1784,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1760,6 +1784,7 @@ TITLE [tT][iI][tT][lL][eE]
} }
<MemberSpec>"=" { <MemberSpec>"=" {
lastInitializerContext=YY_START; lastInitializerContext=YY_START;
initializerSharpCount=0;
BEGIN(ReadInitializer); BEGIN(ReadInitializer);
/* BEGIN(MemberSpecSkip); */ /* BEGIN(MemberSpecSkip); */
} }
...@@ -3834,7 +3859,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -3834,7 +3859,7 @@ TITLE [tT][iI][tT][lL][eE]
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc>"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text <Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc>"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text
current->doc+=yytext; current->doc+=yytext;
} }
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc>{CMD}[a-z_A-Z][a-z_A-Z0-9]* { <Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc,SkipSection>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
QCString *pValue=Doxygen::aliasDict[yytext+1]; QCString *pValue=Doxygen::aliasDict[yytext+1];
if (pValue) if (pValue)
{ {
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
* Initial Italian Translation by Ahmed Aldo Faisal * Initial Italian Translation by Ahmed Aldo Faisal
* Revised and completed by Alessandro Falappa (since June 1999) * Revised and completed by Alessandro Falappa (since June 1999)
* Updates: * Updates:
* 2001/08: corrected the translation fixing the issues reported by the translator.pl script
* translated new items used since version 1.2.7
* 2001/05: adopted new translation mechanism (trough adapters), * 2001/05: adopted new translation mechanism (trough adapters),
* translated new items used since version 1.2.5 and 1.2.6, * translated new items used since version 1.2.5 and 1.2.6,
* revised those function returning strings in OPTIMIZE_OTPUT_FOR_C case, * revised those function returning strings in OPTIMIZE_OTPUT_FOR_C case,
...@@ -57,7 +59,7 @@ ...@@ -57,7 +59,7 @@
#ifndef TRANSLATOR_IT_H #ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H #define TRANSLATOR_IT_H
class TranslatorItalian : public TranslatorAdapter_1_2_7 class TranslatorItalian : public Translator
{ {
public: public:
...@@ -168,12 +170,6 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7 ...@@ -168,12 +170,6 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7
QCString trDefinedIn() QCString trDefinedIn()
{ return "definito in"; } { return "definito in"; }
/*! put as in introduction in the verbatim header file of a class.
* parameter f is the name of the include file.
*/
QCString trVerbatimText(const char *f)
{ return (QCString)"Questo è il contenuto integrale del file include "+f+"."; }
// quick reference sections // quick reference sections
/*! This is put above each page as a link to the list of all groups of /*! This is put above each page as a link to the list of all groups of
...@@ -462,10 +458,6 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7 ...@@ -462,10 +458,6 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7
QCString trEnumerationValues() QCString trEnumerationValues()
{ return "Valori dei tipi enumerati"; } { return "Valori dei tipi enumerati"; }
/*! This is used in man pages as the author section. */
QCString trAuthor()
{ return "Autore"; }
/*! 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
*/ */
...@@ -523,12 +515,6 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7 ...@@ -523,12 +515,6 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7
} }
} }
/*! This is used in the documentation of a group before the list of
* links to documented files
*/
QCString trFiles()
{ return "File"; }
/*! This is used in the standard footer of each page and indicates when /*! This is used in the standard footer of each page and indicates when
* the page was generated * the page was generated
*/ */
...@@ -576,10 +562,6 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7 ...@@ -576,10 +562,6 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7
QCString trDate() QCString trDate()
{ return "Data"; } { return "Data"; }
/*! this text is generated when the \\author command is used. */
QCString trAuthors()
{ return "Autore(i)"; }
/*! this text is generated when the \\return command is used. */ /*! this text is generated when the \\return command is used. */
QCString trReturns() QCString trReturns()
{ return "Restituisce"; } { return "Restituisce"; }
...@@ -1313,6 +1295,19 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7 ...@@ -1313,6 +1295,19 @@ class TranslatorItalian : public TranslatorAdapter_1_2_7
result+=(singular ? "e" : "i"); result+=(singular ? "e" : "i");
return result; return result;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.7
//////////////////////////////////////////////////////////////////////////
/*! This text is generated when the \\author command is used and
* for the author section in man pages. */
virtual QCString trAuthor(bool first_capital, bool singular)
{
QCString result((first_capital ? "Autor" : "autor"));
result+=(singular ? "e" : "i");
return result;
}
}; };
#endif #endif
...@@ -43,6 +43,8 @@ ...@@ -43,6 +43,8 @@
* Compounds , . * Compounds , .
* *
* ?? . * ?? .
*
* : Vitaly A. Repin <vitaly@radio.hop.stu.neva.ru>
*/ */
#ifndef TRANSLATOR_RU_H #ifndef TRANSLATOR_RU_H
...@@ -678,13 +680,13 @@ class TranslatorRussian : public Translator ...@@ -678,13 +680,13 @@ class TranslatorRussian : public Translator
} }
virtual QCString trPublicMembers() virtual QCString trPublicMembers()
{ return decode(" "); } { return decode(" "); }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
{ return decode(" "); } { return decode(" "); }
virtual QCString trSignals() virtual QCString trSignals()
{ return decode(""); } { return decode(""); }
virtual QCString trStaticPublicMembers() virtual QCString trStaticPublicMembers()
{ return decode(" "); } { return decode(" "); }
virtual QCString trProtectedMembers() virtual QCString trProtectedMembers()
{ return decode(" "); } { return decode(" "); }
virtual QCString trProtectedSlots() virtual QCString trProtectedSlots()
...@@ -692,11 +694,11 @@ class TranslatorRussian : public Translator ...@@ -692,11 +694,11 @@ class TranslatorRussian : public Translator
virtual QCString trStaticProtectedMembers() virtual QCString trStaticProtectedMembers()
{ return decode(" "); } { return decode(" "); }
virtual QCString trPrivateMembers() virtual QCString trPrivateMembers()
{ return decode(" "); } { return decode(" "); }
virtual QCString trPrivateSlots() virtual QCString trPrivateSlots()
{ return decode(" "); } { return decode(" "); }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return decode(" "); } { return decode(" "); }
/*! 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.
...@@ -957,7 +959,7 @@ class TranslatorRussian : public Translator ...@@ -957,7 +959,7 @@ class TranslatorRussian : public Translator
} }
virtual QCString trPublicTypes() virtual QCString trPublicTypes()
{ {
return decode(" "); return decode(" ");
} }
virtual QCString trPublicAttribs() virtual QCString trPublicAttribs()
{ {
...@@ -972,7 +974,7 @@ class TranslatorRussian : public Translator ...@@ -972,7 +974,7 @@ class TranslatorRussian : public Translator
} }
virtual QCString trStaticPublicAttribs() virtual QCString trStaticPublicAttribs()
{ {
return decode(" "); return decode(" ");
} }
virtual QCString trProtectedTypes() virtual QCString trProtectedTypes()
{ {
...@@ -988,15 +990,15 @@ class TranslatorRussian : public Translator ...@@ -988,15 +990,15 @@ class TranslatorRussian : public Translator
} }
virtual QCString trPrivateTypes() virtual QCString trPrivateTypes()
{ {
return decode(" "); return decode(" ");
} }
virtual QCString trPrivateAttribs() virtual QCString trPrivateAttribs()
{ {
return decode(" "); return decode(" ");
} }
virtual QCString trStaticPrivateAttribs() virtual QCString trStaticPrivateAttribs()
{ {
return decode(" "); return decode(" ");
} }
...@@ -1065,11 +1067,11 @@ class TranslatorRussian : public Translator ...@@ -1065,11 +1067,11 @@ class TranslatorRussian : public Translator
"class Truncated : public Invisible { };\n\n" "class Truncated : public Invisible { };\n\n"
"/* */\n" "/* */\n"
"class Undocumented { };\n\n" "class Undocumented { };\n\n"
"/*! */\n" "/*! */\n"
"class PublicBase : public Truncated { };\n\n" "class PublicBase : public Truncated { };\n\n"
"/*! */\n" "/*! */\n"
"class ProtectedBase { };\n\n" "class ProtectedBase { };\n\n"
"/*! */\n" "/*! */\n"
"class PrivateBase { };\n\n" "class PrivateBase { };\n\n"
"/*! , Inherited */\n" "/*! , Inherited */\n"
"class Used { };\n\n" "class Used { };\n\n"
...@@ -1099,10 +1101,10 @@ class TranslatorRussian : public Translator ...@@ -1099,10 +1101,10 @@ class TranslatorRussian : public Translator
"</ul>\n" "</ul>\n"
" :\n" " :\n"
"<ul>\n" "<ul>\n"
"<li> " "<li> "
" .\n" " .\n"
"<li> .\n" "<li> .\n"
"<li> .\n" "<li> .\n"
"<li> , " "<li> , "
" ." " ."
" , " " , "
......
...@@ -33,6 +33,35 @@ ...@@ -33,6 +33,35 @@
#include <qfile.h> #include <qfile.h>
#include <qtextstream.h> #include <qtextstream.h>
static QCString sectionTypeToString(BaseOutputDocInterface::SectionTypes t)
{
switch (t)
{
case BaseOutputDocInterface::See: return "see";
case BaseOutputDocInterface::Return: return "return";
case BaseOutputDocInterface::Author: return "author";
case BaseOutputDocInterface::Version: return "version";
case BaseOutputDocInterface::Since: return "since";
case BaseOutputDocInterface::Date: return "date";
case BaseOutputDocInterface::Bug: return "bug";
case BaseOutputDocInterface::Note: return "note";
case BaseOutputDocInterface::Warning: return "warning";
case BaseOutputDocInterface::Par: return "par";
case BaseOutputDocInterface::Deprecated: return "deprecated";
case BaseOutputDocInterface::Pre: return "pre";
case BaseOutputDocInterface::Post: return "post";
case BaseOutputDocInterface::Invar: return "invariant";
case BaseOutputDocInterface::Remark: return "remark";
case BaseOutputDocInterface::Attention: return "attention";
case BaseOutputDocInterface::Todo: return "todo";
case BaseOutputDocInterface::Test: return "test";
case BaseOutputDocInterface::RCS: return "rcs";
case BaseOutputDocInterface::EnumValues: return "enumvalues";
case BaseOutputDocInterface::Examples: return "examples";
}
return "illegal";
}
static inline void writeXMLString(QTextStream &t,const char *s) static inline void writeXMLString(QTextStream &t,const char *s)
{ {
t << convertToXML(s); t << convertToXML(s);
...@@ -320,9 +349,10 @@ class XMLGenerator : public OutputDocInterface ...@@ -320,9 +349,10 @@ class XMLGenerator : public OutputDocInterface
m_t << "</term></varlistentry><listitem>"; m_t << "</term></varlistentry><listitem>";
startNestedPar(); startNestedPar();
} }
void startDescList() void startDescList(SectionTypes st)
{ {
m_t << "<simplesect><title>"; m_t << "<simplesect kind=\"" << sectionTypeToString(st);
m_t << "\"><title>";
} }
void endDescList() void endDescList()
{ {
...@@ -350,6 +380,7 @@ class XMLGenerator : public OutputDocInterface ...@@ -350,6 +380,7 @@ class XMLGenerator : public OutputDocInterface
{ {
m_t << "</title>"; m_t << "</title>";
if (!m_inParamList) startNestedPar(); if (!m_inParamList) startNestedPar();
printf("endDescTitle %d\n",m_inParamList);
} }
void writeDescItem() { } void writeDescItem() { }
void startDescTable() { } void startDescTable() { }
...@@ -559,6 +590,15 @@ class XMLGenerator : public OutputDocInterface ...@@ -559,6 +590,15 @@ class XMLGenerator : public OutputDocInterface
{ {
m_t << "</image>"; m_t << "</image>";
} }
void startDotFile(const char *name,bool caption)
{
m_t << "<dotfile name=\"" << name << "\" "
<< "caption=\"" << (caption ? "1" : "0") << "\">"; // non docbook
}
void endDotFile(bool)
{
m_t << "</dotfile>";
}
void startTextLink(const char *name,const char *anchor) void startTextLink(const char *name,const char *anchor)
{ {
m_t << "<ulink url=\"" << name << "#" << anchor << "\">"; m_t << "<ulink url=\"" << name << "#" << anchor << "\">";
...@@ -636,6 +676,7 @@ class XMLGenerator : public OutputDocInterface ...@@ -636,6 +676,7 @@ class XMLGenerator : public OutputDocInterface
m_b.open( IO_WriteOnly ); m_b.open( IO_WriteOnly );
m_t.setDevice(&m_b); m_t.setDevice(&m_b);
m_t.setEncoding(QTextStream::Latin1); m_t.setEncoding(QTextStream::Latin1);
m_inParamList = FALSE;
} }
/*! copy constructor */ /*! copy constructor */
XMLGenerator(const XMLGenerator *xg) XMLGenerator(const XMLGenerator *xg)
...@@ -908,7 +949,8 @@ void generateXMLForClass(ClassDef *cd,QTextStream &t) ...@@ -908,7 +949,8 @@ void generateXMLForClass(ClassDef *cd,QTextStream &t)
// detailed documentation // detailed documentation
// detailed member documentation // detailed member documentation
if (cd->name().find('@')!=-1) return; // skip anonymous compounds if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
if (cd->templateMaster()!=0) return; // skip generated template instances.
t << " <compounddef id=\"" t << " <compounddef id=\""
<< cd->getOutputFileBase() << "\" kind=\"" << cd->getOutputFileBase() << "\" kind=\""
<< cd->compoundTypeString() << "\">" << endl; << cd->compoundTypeString() << "\">" << endl;
......
...@@ -9,7 +9,7 @@ CONFIG = qt warn_on release ...@@ -9,7 +9,7 @@ CONFIG = qt warn_on release
TMAKE_CC = gcc TMAKE_CC = gcc
TMAKE_CFLAGS = -pipe TMAKE_CFLAGS = -pipe
TMAKE_CFLAGS_WARN_ON = -Wall -W TMAKE_CFLAGS_WARN_ON = -Wall -W -fno-exceptions
TMAKE_CFLAGS_WARN_OFF = TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O2 TMAKE_CFLAGS_RELEASE = -O2
TMAKE_CFLAGS_DEBUG = -g TMAKE_CFLAGS_DEBUG = -g
......
#! Use the common Unix template
#$ IncludeTemplate("../unix/app.t");
#! Use the common Unix template
#$ IncludeTemplate("../unix/lib.t");
#! Use the common Unix template
#$ IncludeTemplate("../unix/subdirs.t");
#
#
#
# tmake configuration for macosx-c++
#
TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = cc
TMAKE_CFLAGS = -pipe
TMAKE_CFLAGS_WARN_ON = -Wall -W
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O2
TMAKE_CFLAGS_DEBUG = -g
TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
TMAKE_CXX = c++
TMAKE_CXXFLAGS = $$TMAKE_CFLAGS -D__FreeBSD__
TMAKE_CXXFLAGS_WARN_ON = $$TMAKE_CFLAGS_WARN_ON
TMAKE_CXXFLAGS_WARN_OFF = $$TMAKE_CFLAGS_WARN_OFF
TMAKE_CXXFLAGS_RELEASE = $$TMAKE_CFLAGS_RELEASE
TMAKE_CXXFLAGS_DEBUG = $$TMAKE_CFLAGS_DEBUG
TMAKE_CXXFLAGS_SHLIB = $$TMAKE_CFLAGS_SHLIB
TMAKE_CXXFLAGS_YACC = $$TMAKE_CFLAGS_YACC
TMAKE_INCDIR =
TMAKE_LIBDIR =
TMAKE_INCDIR_X11 = /usr/X11R6/include
TMAKE_LIBDIR_X11 = /usr/X11R6/lib
TMAKE_INCDIR_QT = $(QTDIR)/include
TMAKE_LIBDIR_QT = $(QTDIR)/lib
TMAKE_INCDIR_OPENGL = /usr/X11R6/include
TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
TMAKE_LINK = c++
TMAKE_LINK_SHLIB = c++
TMAKE_LFLAGS =
TMAKE_LFLAGS_RELEASE =
TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -shared
# soname does not work on fbsd 2.x
#TMAKE_LFLAGS_SONAME = -Wl,-soname
TMAKE_LIBS =
TMAKE_LIBS_X11 = -lXext -lX11 -lm
TMAKE_LIBS_QT = -lqt
TMAKE_LIBS_QT_OPENGL = -lqgl
TMAKE_LIBS_OPENGL = -lMesaGL -lMesaGLU -lXmu
TMAKE_MOC = moc
TMAKE_AR = ar cq
TMAKE_RANLIB = ranlib
TMAKE_TAR = tar -cf
TMAKE_GZIP = gzip -9f
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