Commit 24f9a159 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.13-20020210

parent 1335cc70
DOXYGEN Version 1.2.13-20020203 DOXYGEN Version 1.2.13-20020210
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (03 February 2002) Dimitri van Heesch (10 February 2002)
...@@ -23,3 +23,4 @@ solaris-g++ ...@@ -23,3 +23,4 @@ solaris-g++
sunos-g++ sunos-g++
ultrix-g++ ultrix-g++
unixware-g++ unixware-g++
win32-g++
DOXYGEN Version 1.2.13_20020203 DOXYGEN Version 1.2.13_20020210
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) (03 February 2002) Dimitri van Heesch (dimitri@stack.nl) (10 February 2002)
1.2.13-20020203 1.2.13-20020210
...@@ -187,6 +187,9 @@ if test -z "$f_platform"; then ...@@ -187,6 +187,9 @@ if test -z "$f_platform"; then
UNIX_SV:4.2*) UNIX_SV:4.2*)
f_platform=unixware-g++ f_platform=unixware-g++
;; ;;
Cygwin:*)
f_platform=win32-g++
;;
*) *)
echo echo
echo "Your platform was not recognised by this configure script" echo "Your platform was not recognised by this configure script"
...@@ -409,6 +412,12 @@ EOF ...@@ -409,6 +412,12 @@ EOF
fi fi
fi fi
if test "$f_platform" = "win32-g++"; then
cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS += -D_WIN32
EOF
fi
if test "$f_english" = YES; then if test "$f_english" = YES; then
cat >> .tmakeconfig <<EOF cat >> .tmakeconfig <<EOF
TMAKE_CXXFLAGS += -DENGLISH_ONLY TMAKE_CXXFLAGS += -DENGLISH_ONLY
......
...@@ -137,6 +137,7 @@ documentation: ...@@ -137,6 +137,7 @@ documentation:
<li> \refitem cmdat \@ <li> \refitem cmdat \@
<li> \refitem cmdbackslash \\ <li> \refitem cmdbackslash \\
<li> \refitem cmdamp \& <li> \refitem cmdamp \&
<li> \refitem cmdtilde \~
<li> \refitem cmdlt \\< <li> \refitem cmdlt \\<
<li> \refitem cmdgt \\> <li> \refitem cmdgt \\>
<li> \refitem cmdhash \# <li> \refitem cmdhash \#
...@@ -1330,6 +1331,7 @@ ALIASES = "english=\if english" \ ...@@ -1330,6 +1331,7 @@ ALIASES = "english=\if english" \
\addindex \b \addindex \b
Displays the argument \<word\> using a bold font. Displays the argument \<word\> using a bold font.
Equivalent to \<b\>word\</b\>. Equivalent to \<b\>word\</b\>.
To put multiple words in bold use \<b\>multiple words\</b\>.
<hr> <hr>
\subsection cmdc \c <word> \subsection cmdc \c <word>
...@@ -1348,6 +1350,7 @@ ALIASES = "english=\if english" \ ...@@ -1348,6 +1350,7 @@ ALIASES = "english=\if english" \
... This function returns \c void and not \c int ... ... This function returns \c void and not \c int ...
Equivalent to \ref cmdp "\\p" Equivalent to \ref cmdp "\\p"
To have multiple words in typewriter font use \<tt\>multiple words\</tt\>.
<hr> <hr>
\subsection cmdcode \code \subsection cmdcode \code
...@@ -1393,7 +1396,8 @@ ALIASES = "english=\if english" \ ...@@ -1393,7 +1396,8 @@ ALIASES = "english=\if english" \
will result in the following text:<br><br> will result in the following text:<br><br>
... this is a \e really good example ... ... this is a \e really good example ...
Equivalent to \ref cmdem "\\em" Equivalent to \ref cmdem "\\em".
To emphasis multiple words use \<em\>multiple words\</em\>.
<hr> <hr>
\subsection cmdem \em <word> \subsection cmdem \em <word>
...@@ -1641,6 +1645,23 @@ ALIASES = "english=\if english" \ ...@@ -1641,6 +1645,23 @@ ALIASES = "english=\if english" \
\f$\mbox{\LaTeX}\f$ output. The at-sign has to be escaped in some cases \f$\mbox{\LaTeX}\f$ output. The at-sign has to be escaped in some cases
because doxygen uses it to detect JavaDoc commands. because doxygen uses it to detect JavaDoc commands.
<hr>
\subsection cmdtilde \~[LanguageId]
\addindex \~
This command enables/disables a language specific filter. This can be
used to put documentation for different language into one comment block
and use the \c OUTPUT_LANGUAGE tag to filter out only a specific language.
Use \\~language_id to enable output for a specific language only and
\\~ to enable output for all languages (this is also the default mode).
Example:
\verbatim
/*! \~english This is english \~dutch Dit is Nederlands \~german Dieses ist
deutsch. \~ output for all languages.
*/
\endverbatim
<hr> <hr>
\subsection cmdamp \& \subsection cmdamp \&
......
...@@ -729,6 +729,13 @@ followed by the descriptions of the tags grouped by category. ...@@ -729,6 +729,13 @@ followed by the descriptions of the tags grouped by category.
If a relative path is entered the value of \c OUTPUT_DIRECTORY will be If a relative path is entered the value of \c OUTPUT_DIRECTORY will be
put in front of it. If left blank `html' will be used as the default path. put in front of it. If left blank `html' will be used as the default path.
\anchor cfg_html_file_extension
<dt>\c HTML_FILE_EXTENSION <dd>
\addindex HTML_FILE_EXTENSION
The \c HTML_FILE_EXTENSION tag can be used to specify the file extension for
each generated HTML page (for example: .htm, .php, .asp). If it is left blank
doxygen will generate files with .html extension.
\anchor cfg_html_header \anchor cfg_html_header
<dt>\c HTML_HEADER <dd> <dt>\c HTML_HEADER <dd>
\addindex HTML_HEADER \addindex HTML_HEADER
......
...@@ -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.13-20020121), 25 languages Currently (version 1.2.13-20020203), 25 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,
...@@ -132,7 +132,7 @@ when the translator was updated. ...@@ -132,7 +132,7 @@ when the translator was updated.
<TD>Japanese</TD> <TD>Japanese</TD>
<TD>Ryunosuke Sato<br>Kenji Nagamatsu</TD> <TD>Ryunosuke Sato<br>Kenji Nagamatsu</TD>
<TD>puyo@NOSPAM.mint.freemail.ne.jp<br>naga@NOSPAM.joyful.club.ne.jp</TD> <TD>puyo@NOSPAM.mint.freemail.ne.jp<br>naga@NOSPAM.joyful.club.ne.jp</TD>
<TD>1.2.13</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Korean</TD> <TD>Korean</TD>
...@@ -240,7 +240,7 @@ when the translator was updated. ...@@ -240,7 +240,7 @@ when the translator was updated.
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\ Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\ & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline \hline
Japanese & Ryunosuke Sato & {\tt puyo@mint.freemail.ne.jp} & 1.2.13 \\ Japanese & Ryunosuke Sato & {\tt puyo@mint.freemail.ne.jp} & up-to-date \\
& Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\ & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\
\hline \hline
Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.2.13 \\ Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.2.13 \\
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.2.13_20020203 Version: 1.2.13_20020210
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
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
static QCString stripExtension(const char *fName) static QCString stripExtension(const char *fName)
{ {
QCString result=fName; QCString result=fName;
if (result.right(5)==".html") result=result.left(result.length()-5); if (result.right(htmlFileExtensionLength)==htmlFileExtension) result=result.left(result.length()-htmlFileExtensionLength);
return result; return result;
} }
...@@ -701,6 +701,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -701,6 +701,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
startFile(ol,getOutputFileBase(),name(),pageTitle); startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
parseText(ol,theTranslator->trCompoundReference(name(),m_compType,outerTempArgList!=0)); parseText(ol,theTranslator->trCompoundReference(name(),m_compType,outerTempArgList!=0));
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),name()); endTitle(ol,getOutputFileBase(),name());
ol.startTextBlock(); ol.startTextBlock();
...@@ -789,7 +790,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -789,7 +790,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " <compound kind=\"" << compoundTypeString(); Doxygen::tagFile << " <compound kind=\"" << compoundTypeString();
Doxygen::tagFile << "\">" << endl; Doxygen::tagFile << "\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << ".html</filename>" << endl; Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << htmlFileExtension << "</filename>" << endl;
if (m_tempArgs) if (m_tempArgs)
{ {
ArgumentListIterator ali(*m_tempArgs); ArgumentListIterator ali(*m_tempArgs);
...@@ -929,7 +930,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -929,7 +930,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<center><font size=\"2\">["); ol.writeString("<center><font size=\"2\">[");
ol.startHtmlLink("graph_legend.html"); ol.startHtmlLink("graph_legend"+htmlFileExtension);
ol.docify(theTranslator->trLegend()); ol.docify(theTranslator->trLegend());
ol.endHtmlLink(); ol.endHtmlLink();
ol.writeString("]</font></center>"); ol.writeString("]</font></center>");
...@@ -964,7 +965,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -964,7 +965,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<center><font size=\"2\">["); ol.writeString("<center><font size=\"2\">[");
ol.startHtmlLink("graph_legend.html"); ol.startHtmlLink("graph_legend"+htmlFileExtension);
ol.docify(theTranslator->trLegend()); ol.docify(theTranslator->trLegend());
ol.endHtmlLink(); ol.endHtmlLink();
ol.writeString("]</font></center>"); ol.writeString("]</font></center>");
...@@ -1727,7 +1728,7 @@ void ClassDef::mergeMembers() ...@@ -1727,7 +1728,7 @@ void ClassDef::mergeMembers()
// argListToString(srcMd->argumentList()).data(), // argListToString(srcMd->argumentList()).data(),
// argListToString(dstMd->argumentList()).data(), // argListToString(dstMd->argumentList()).data(),
// found); // found);
hidden = hidden || !found; hidden = hidden || !found;
} }
else // member is in a non base class => multiple inheritance else // member is in a non base class => multiple inheritance
// using the same base class. // using the same base class.
...@@ -1746,10 +1747,12 @@ void ClassDef::mergeMembers() ...@@ -1746,10 +1747,12 @@ void ClassDef::mergeMembers()
else // same members else // same members
{ {
// do not add if base class is virtual or // do not add if base class is virtual or
// if scope paths are equal // if scope paths are equal or
// if base class is an interface (and thus implicitly virtual).
//printf("same member found srcMi->virt=%d dstMi->virt=%d\n",srcMi->virt,dstMi->virt); //printf("same member found srcMi->virt=%d dstMi->virt=%d\n",srcMi->virt,dstMi->virt);
if ((srcMi->virt!=Normal && dstMi->virt!=Normal) || if ((srcMi->virt!=Normal && dstMi->virt!=Normal) ||
bClass->name()+"::"+srcMi->scopePath == dstMi->scopePath bClass->name()+"::"+srcMi->scopePath == dstMi->scopePath ||
dstMd->getClassDef()->compoundType()==ClassDef::Interface
) )
{ {
found=TRUE; found=TRUE;
...@@ -1783,17 +1786,23 @@ void ClassDef::mergeMembers() ...@@ -1783,17 +1786,23 @@ void ClassDef::mergeMembers()
// this case is shown anyway. // this case is shown anyway.
if (!found && srcMd->protection()!=Private) if (!found && srcMd->protection()!=Private)
{ {
Protection prot=srcMd->protection();
if (bcd->prot==Protected && prot==Public) prot=bcd->prot;
else if (bcd->prot==Private) prot=bcd->prot;
if (inlineInheritedMembers) if (inlineInheritedMembers)
{ {
if (!isStandardFunc(srcMd)) if (!isStandardFunc(srcMd))
{ {
//printf(" insertMember `%s'\n",srcMd->name().data()); //printf(" insertMember `%s'\n",srcMd->name().data());
internalInsertMember(srcMd,bcd->prot,FALSE); internalInsertMember(srcMd,prot,FALSE);
} }
} }
Specifier virt=srcMi->virt; Specifier virt=srcMi->virt;
if (srcMi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt; if (srcMi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
MemberInfo *newMi = new MemberInfo(srcMd,bcd->prot,virt,TRUE);
MemberInfo *newMi = new MemberInfo(srcMd,prot,virt,TRUE);
newMi->scopePath=bClass->name()+"::"+srcMi->scopePath; newMi->scopePath=bClass->name()+"::"+srcMi->scopePath;
if (ambigue) if (ambigue)
{ {
......
...@@ -862,6 +862,13 @@ void Config::check() ...@@ -862,6 +862,13 @@ void Config::check()
{ {
outputLanguage = "English"; outputLanguage = "English";
} }
QCString &htmlFileExtension=Config_getString("HTML_FILE_EXTENSION");
htmlFileExtension=htmlFileExtension.stripWhiteSpace();
if (htmlFileExtension.isEmpty())
{
htmlFileExtension = ".html";
}
// expand the relative stripFromPath values // expand the relative stripFromPath values
QStrList &stripFromPath = Config_getList("STRIP_FROM_PATH"); QStrList &stripFromPath = Config_getList("STRIP_FROM_PATH");
...@@ -1749,6 +1756,14 @@ void Config::create() ...@@ -1749,6 +1756,14 @@ void Config::create()
cs->setDefaultValue("html"); cs->setDefaultValue("html");
cs->setWidgetType(ConfigString::Dir); cs->setWidgetType(ConfigString::Dir);
cs->addDependency("GENERATE_HTML"); cs->addDependency("GENERATE_HTML");
cs = addString(
"HTML_FILE_EXTENSION",
"The HTML_FILE_EXTENSION tag can be used to specify the file extension for \n"
"each generated HTML page (for example: .htm,.php,.asp). If it is left blank \n"
"doxygen will generate files with .html extension.\n"
);
cs->setDefaultValue(".html");
cs->addDependency("GENERATE_HTML");
cs = addString( cs = addString(
"HTML_HEADER", "HTML_HEADER",
"The HTML_HEADER tag can be used to specify a personal HTML header for \n" "The HTML_HEADER tag can be used to specify a personal HTML header for \n"
......
/****************************************************************************** /******************************************************************************
* *
* $Id$ *
* *
* Copyright (C) 1997-2002 by Dimitri van Heesch. * Copyright (C) 1997-2002 by Dimitri van Heesch.
* *
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "doc.h" #include "doc.h"
#include "code.h" #include "code.h"
#include "util.h" #include "util.h"
#include "groupdef.h"
Definition::Definition(const char *df,int dl, Definition::Definition(const char *df,int dl,
const char *name,const char *b,const char *d) const char *name,const char *b,const char *d)
...@@ -50,6 +51,7 @@ Definition::Definition(const char *df,int dl, ...@@ -50,6 +51,7 @@ Definition::Definition(const char *df,int dl,
m_testId=0; m_testId=0;
m_bugId=0; m_bugId=0;
m_outerScope=Doxygen::globalScope; m_outerScope=Doxygen::globalScope;
m_partOfGroups=0;
} }
Definition::~Definition() Definition::~Definition()
...@@ -57,9 +59,9 @@ Definition::~Definition() ...@@ -57,9 +59,9 @@ Definition::~Definition()
delete m_sectionDict; delete m_sectionDict;
delete m_sourceRefByDict; delete m_sourceRefByDict;
delete m_sourceRefsDict; delete m_sourceRefsDict;
delete m_partOfGroups;
} }
void Definition::addSectionsToDefinition(QList<QCString> *anchorList) void Definition::addSectionsToDefinition(QList<QCString> *anchorList)
{ {
if (!anchorList) return; if (!anchorList) return;
...@@ -544,3 +546,10 @@ void Definition::setBodySegment(int bls,int ble) ...@@ -544,3 +546,10 @@ void Definition::setBodySegment(int bls,int ble)
m_endBodyLine=ble; m_endBodyLine=ble;
} }
void Definition::makePartOfGroup(GroupDef *gd)
{
if (m_partOfGroups==0) m_partOfGroups = new GroupList;
m_partOfGroups->append(gd);
}
...@@ -28,6 +28,8 @@ class SectionDict; ...@@ -28,6 +28,8 @@ class SectionDict;
//class MemberDict; //class MemberDict;
class MemberSDict; class MemberSDict;
class MemberDef; class MemberDef;
class GroupDef;
class GroupList;
/*! The common base class of all entity definitions found in the sources. */ /*! The common base class of all entity definitions found in the sources. */
class Definition class Definition
...@@ -124,6 +126,9 @@ class Definition ...@@ -124,6 +126,9 @@ class Definition
MemberSDict *getReferencesMembers() const { return m_sourceRefsDict; } MemberSDict *getReferencesMembers() const { return m_sourceRefsDict; }
MemberSDict *getReferencedByMembers() const { return m_sourceRefByDict; } MemberSDict *getReferencedByMembers() const { return m_sourceRefByDict; }
void makePartOfGroup(GroupDef *gd);
GroupList *partOfGroups() const { return m_partOfGroups; }
protected: protected:
int m_startBodyLine; // line number of the start of the definition int m_startBodyLine; // line number of the start of the definition
int m_endBodyLine; // line number of the end of the definition int m_endBodyLine; // line number of the end of the definition
...@@ -139,6 +144,9 @@ class Definition ...@@ -139,6 +144,9 @@ class Definition
QCString m_name; // name of the definition QCString m_name; // name of the definition
QCString m_localName; // local (unqualified) name of the definition QCString m_localName; // local (unqualified) name of the definition
// in the future m_name should become m_localName // in the future m_name should become m_localName
/*! List of groups this definition is part of */
GroupList *m_partOfGroups;
private: private:
void writeSourceRefList(OutputList &ol,const char *scopeName, void writeSourceRefList(OutputList &ol,const char *scopeName,
......
...@@ -166,7 +166,7 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h) ...@@ -166,7 +166,7 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h)
{ {
if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/";
} }
t << cd->getOutputFileBase() << ".html\" "; t << cd->getOutputFileBase() << htmlFileExtension << "\" ";
t << "alt=\"" << cd->name(); t << "alt=\"" << cd->name();
t << "\" shape=\"rect\" coords=\"" << x << "," << y << ","; t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
t << (x+w) << "," << (y+h) << "\">" << endl; t << (x+w) << "," << (y+h) << "\">" << endl;
......
...@@ -401,7 +401,7 @@ static QCString stripKnownExtensions(const char *text) ...@@ -401,7 +401,7 @@ static QCString stripKnownExtensions(const char *text)
{ {
QCString result=text; QCString result=text;
if (result.right(4)==".tex") result=result.left(result.length()-4); if (result.right(4)==".tex") result=result.left(result.length()-4);
else if (result.right(5)==".html") result=result.left(result.length()-5); else if (result.right(htmlFileExtensionLength)==htmlFileExtension) result=result.left(result.length()-htmlFileExtensionLength);
//printf("%s stripKnowExtensions(%s)\n",result.data(),text); //printf("%s stripKnowExtensions(%s)\n",result.data(),text);
return result; return result;
} }
...@@ -686,26 +686,6 @@ static void forceEndItemList() ...@@ -686,26 +686,6 @@ static void forceEndItemList()
static void endArgumentList() static void endArgumentList()
{ {
#if 0
IndentInfo *info;
while ((info=listIndentStack.pop())!=0)
{
delete info;
}
while (!currentListIndent.isEmpty())
{
char c=*currentListIndent.pop();
switch(c)
{
case 'O': outDoc->endEnumList(); break;
case 'U': outDoc->endItemList(); break;
case 'D':
if (!inBlock()) outDoc->endDescription();
break;
}
}
insideItemList=FALSE;
#endif
if (insideArgumentList) if (insideArgumentList)
{ {
insideArgumentList=FALSE; insideArgumentList=FALSE;
...@@ -897,18 +877,20 @@ static void checkArgName(const QCString &name) ...@@ -897,18 +877,20 @@ static void checkArgName(const QCString &name)
Argument *a; Argument *a;
for (ali.toFirst();(a=ali.current());++ali) for (ali.toFirst();(a=ali.current());++ali)
{ {
if (name==a->name) QCString argName = memberDef->isDefine() ? a->type : a->name;
if (aName==argName)
{ {
paramsFound.insert(name,(void *)(0x8)); paramsFound.insert(name,(void *)(0x8));
return; return;
} }
} }
printf("member type=%d\n",memberDef->memberType());
QCString scope=memberDef->getScopeString(); QCString scope=memberDef->getScopeString();
if (!scope.isEmpty()) scope+="::"; else scope=""; if (!scope.isEmpty()) scope+="::"; else scope="";
warn(memberDef->docFile(),memberDef->docLine(), warn(memberDef->docFile(),memberDef->docLine(),
"Warning: argument `%s' of command @param " "Warning: argument `%s' of command @param "
"is not found in the argument list of %s%s%s", "is not found in the argument list of %s%s%s",
name.data(),scope.data(),memberDef->name().data(), aName.data(),scope.data(),memberDef->name().data(),
argListToString(al).data() argListToString(al).data()
); );
p=i+l; p=i+l;
...@@ -1053,6 +1035,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1053,6 +1035,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
%x DocRtfImageOpt %x DocRtfImageOpt
%x DocDotFile %x DocDotFile
%x DocDotFileOpt %x DocDotFileOpt
%x DocSkipLanguage
%% %%
...@@ -1171,19 +1154,35 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1171,19 +1154,35 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
char c[2];c[0]=*yytext;c[1]='\0'; char c[2];c[0]=*yytext;c[1]='\0';
outDoc->codify(c); outDoc->codify(c);
} }
<DocScan>{CMD}"~"[a-z_A-Z0-9]*/{BN} {
if (yytext[2])
{
if (theTranslator->idLanguage()!=&yytext[2]) // not current language
{
BEGIN(DocSkipLanguage);
}
}
}
<DocSkipLanguage>{CMD}"~"[a-z_A-Z0-9]*/{BN} {
if (yytext[2])
{
if (theTranslator->idLanguage()==&yytext[2])
{
BEGIN( DocScan ); // current language => include
}
}
else // back to "all language" processing.
{
BEGIN( DocScan );
}
}
<DocSkipLanguage>[^\\\@\~\n]+
<DocScan>{CMD}"internal"/{BN} { <DocScan>{CMD}"internal"/{BN} {
//if (!Config_getBool("INTERNAL_DOCS")) outDoc->newParagraph();
//{ outDoc->startBold();
// BEGIN( DocInternal ); scanString(theTranslator->trForInternalUseOnly()+"\n");
//} outDoc->endBold();
//else outDoc->newParagraph();
//{
outDoc->newParagraph();
outDoc->startBold();
scanString(theTranslator->trForInternalUseOnly()+"\n");
outDoc->endBold();
outDoc->newParagraph();
//}
} }
<DocScan>"\\reimp"/{BN} { <DocScan>"\\reimp"/{BN} {
outDoc->newParagraph(); outDoc->newParagraph();
...@@ -1269,6 +1268,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1269,6 +1268,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
bool b = inBlock(); bool b = inBlock();
if (!title.isEmpty()) if (!title.isEmpty())
{ {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (b) endBlock(); if (b) endBlock();
inParBlock=TRUE; inParBlock=TRUE;
...@@ -1285,6 +1288,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1285,6 +1288,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
BEGIN(DocScan); BEGIN(DocScan);
} }
<DocScan>{CMD}"warning"{BSEP} { <DocScan>{CMD}"warning"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inWarningBlock) if (!inWarningBlock)
{ {
...@@ -1302,6 +1309,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1302,6 +1309,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"remark"[s]?{BSEP} { <DocScan>{CMD}"remark"[s]?{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inRemarkBlock) if (!inRemarkBlock)
{ {
...@@ -1319,6 +1330,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1319,6 +1330,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"attention"{BSEP} { <DocScan>{CMD}"attention"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inAttentionBlock) if (!inAttentionBlock)
{ {
...@@ -1336,6 +1351,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1336,6 +1351,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"note"[s]?{BSEP} { <DocScan>{CMD}"note"[s]?{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inNoteBlock) if (!inNoteBlock)
{ {
...@@ -1353,6 +1372,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1353,6 +1372,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"pre"{BSEP} { <DocScan>{CMD}"pre"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inPreBlock) if (!inPreBlock)
{ {
...@@ -1370,6 +1393,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1370,6 +1393,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"post"{BSEP} { <DocScan>{CMD}"post"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inPostBlock) if (!inPostBlock)
{ {
...@@ -1387,6 +1414,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1387,6 +1414,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"invariant"{BSEP} { <DocScan>{CMD}"invariant"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inInvarBlock) if (!inInvarBlock)
{ {
...@@ -1404,6 +1435,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1404,6 +1435,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"version"{BSEP} { <DocScan>{CMD}"version"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inVersionBlock) if (!inVersionBlock)
{ {
...@@ -1421,6 +1456,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1421,6 +1456,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"since"{BSEP} { <DocScan>{CMD}"since"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inSinceBlock) if (!inSinceBlock)
{ {
...@@ -1438,6 +1477,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1438,6 +1477,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"date"{BSEP} { <DocScan>{CMD}"date"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inDateBlock) if (!inDateBlock)
{ {
...@@ -1462,6 +1505,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1462,6 +1505,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
bool ok; int num = numStr.toUInt(&ok); bool ok; int num = numStr.toUInt(&ok);
RefItem *item = todoList.getRefItem(num); RefItem *item = todoList.getRefItem(num);
ASSERT(item!=0); ASSERT(item!=0);
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (inBlock()) endBlock(); if (inBlock()) endBlock();
currentListIndent.push("P"); currentListIndent.push("P");
...@@ -1482,6 +1529,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1482,6 +1529,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
bool ok; int num = numStr.toUInt(&ok); bool ok; int num = numStr.toUInt(&ok);
RefItem *item = testList.getRefItem(num); RefItem *item = testList.getRefItem(num);
ASSERT(item!=0); ASSERT(item!=0);
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (inBlock()) endBlock(); if (inBlock()) endBlock();
currentListIndent.push("P"); currentListIndent.push("P");
...@@ -1502,6 +1553,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1502,6 +1553,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
bool ok; int num = numStr.toUInt(&ok); bool ok; int num = numStr.toUInt(&ok);
RefItem *item = bugList.getRefItem(num); RefItem *item = bugList.getRefItem(num);
ASSERT(item!=0); ASSERT(item!=0);
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (inBlock()) endBlock(); if (inBlock()) endBlock();
currentListIndent.push("P"); currentListIndent.push("P");
...@@ -1515,6 +1570,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1515,6 +1570,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}"deprecated"{BSEP} { <DocScan>{CMD}"deprecated"{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inDeprecatedBlock) if (!inDeprecatedBlock)
{ {
...@@ -1537,6 +1596,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1537,6 +1596,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
tagName=tagName.left(i); tagName=tagName.left(i);
QCString tagText=&yytext[i+2]; QCString tagText=&yytext[i+2];
tagText=tagText.left(tagText.length()-1); tagText=tagText.left(tagText.length()-1);
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (inBlock()) endBlock(); if (inBlock()) endBlock();
currentListIndent.push("P"); currentListIndent.push("P");
...@@ -1549,6 +1612,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1549,6 +1612,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
currentListIndent.pop(); currentListIndent.pop();
} }
<DocScan>{CMD}"author"[s]?{BSEP} { <DocScan>{CMD}"author"[s]?{BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inAuthorBlock) if (!inAuthorBlock)
{ {
...@@ -1567,6 +1634,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1567,6 +1634,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}("return"([s])?|"result"){BSEP} { <DocScan>{CMD}("return"([s])?|"result"){BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inReturnBlock) if (!inReturnBlock)
{ {
...@@ -1580,6 +1651,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1580,6 +1651,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocScan>{CMD}("sa"|"see"){BSEP} { <DocScan>{CMD}("sa"|"see"){BSEP} {
if (insideItemList)
{
forceEndItemList();
}
endArgumentList(); endArgumentList();
if (!inSeeBlock) if (!inSeeBlock)
{ {
...@@ -2701,7 +2776,8 @@ void parseDoc(OutputDocInterface &od,const char *fileName,int startLine, ...@@ -2701,7 +2776,8 @@ void parseDoc(OutputDocInterface &od,const char *fileName,int startLine,
bool found=FALSE; bool found=FALSE;
for (ali.toFirst();(a=ali.current());++ali) for (ali.toFirst();(a=ali.current());++ali)
{ {
if (!a->name.isEmpty() && paramsFound.find(a->name)==0) QCString argName = memberDef->isDefine() ? a->type : a->name;
if (!argName.isEmpty() && paramsFound.find(argName)==0)
{ {
found = TRUE; found = TRUE;
break; break;
......
...@@ -344,7 +344,7 @@ void DotNode::writeBox(QTextStream &t, ...@@ -344,7 +344,7 @@ void DotNode::writeBox(QTextStream &t,
} }
else if (!m_url.isEmpty()) else if (!m_url.isEmpty())
{ {
t << ",URL=\"" << m_url << ".html\""; t << ",URL=\"" << m_url << htmlFileExtension << "\"";
} }
t << "];" << endl; t << "];" << endl;
} }
...@@ -1638,38 +1638,38 @@ void generateGraphLegend(const char *path) ...@@ -1638,38 +1638,38 @@ void generateGraphLegend(const char *path)
dotText << "{\n"; dotText << "{\n";
dotText << " Node7 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n"; dotText << " Node7 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node8 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node8 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node8 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_publicbase.html\"];\n"; dotText << " Node8 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_publicbase" << htmlFileExtension << "\"];\n";
dotText << " Node9 -> Node8 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node9 -> Node8 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node9 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"red\",URL=\"$class_truncated.html\"];\n"; dotText << " Node9 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"red\",URL=\"$class_truncated" << htmlFileExtension << "\"];\n";
dotText << " Node11 -> Node7 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node11 -> Node7 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node11 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_protectedbase.html\"];\n"; dotText << " Node11 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_protectedbase" << htmlFileExtension << "\"];\n";
dotText << " Node12 -> Node7 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node12 -> Node7 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node12 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_privatebase.html\"];\n"; dotText << " Node12 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_privatebase" << htmlFileExtension << "\"];\n";
dotText << " Node13 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node13 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node13 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey75\"];\n"; dotText << " Node13 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey75\"];\n";
dotText << " Node14 -> Node7 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n"; dotText << " Node14 -> Node7 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n";
dotText << " Node14 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_used.html\"];\n"; dotText << " Node14 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_used" << htmlFileExtension << "\"];\n";
dotText << "}\n"; dotText << "}\n";
#endif #endif
dotText << "digraph inheritance\n"; dotText << "digraph inheritance\n";
dotText << "{\n"; dotText << "{\n";
dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n"; dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classPublicBase.html\"];\n"; dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classPublicBase" << htmlFileExtension << "\"];\n";
dotText << " Node11 -> Node10 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node11 -> Node10 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node11 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"red\",URL=\"$classTruncated.html\"];\n"; dotText << " Node11 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"red\",URL=\"$classTruncated" << htmlFileExtension << "\"];\n";
dotText << " Node13 -> Node9 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node13 -> Node9 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classProtectedBase.html\"];\n"; dotText << " Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classProtectedBase" << htmlFileExtension << "\"];\n";
dotText << " Node14 -> Node9 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node14 -> Node9 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classPrivateBase.html\"];\n"; dotText << " Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classPrivateBase" << htmlFileExtension << "\"];\n";
dotText << " Node15 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node15 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node15 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey75\"];\n"; dotText << " Node15 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey75\"];\n";
dotText << " Node16 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n"; dotText << " Node16 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classTempl.html\"];\n"; dotText << " Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classTempl" << htmlFileExtension << "\"];\n";
dotText << " Node17 -> Node16 [dir=back,color=\"orange\",fontsize=10,style=\"dashed\",label=\"< int >\",fontname=\"doxfont\"];\n"; dotText << " Node17 -> Node16 [dir=back,color=\"orange\",fontsize=10,style=\"dashed\",label=\"< int >\",fontname=\"doxfont\"];\n";
dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classTempl.html\"];\n"; dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classTempl" << htmlFileExtension << "\"];\n";
dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n"; dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n";
dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classUsed.html\"];\n"; dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classUsed" << htmlFileExtension << "\"];\n";
dotText << "}\n"; dotText << "}\n";
dotFile.close(); dotFile.close();
......
...@@ -182,6 +182,8 @@ static void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl, ...@@ -182,6 +182,8 @@ static void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
const char idMask[] = "[A-Za-z_][A-Za-z_0-9]*"; const char idMask[] = "[A-Za-z_][A-Za-z_0-9]*";
QCString spaces; QCString spaces;
QCString htmlFileExtension;
int htmlFileExtensionLength;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
...@@ -2837,7 +2839,7 @@ static bool findClassRelation( ...@@ -2837,7 +2839,7 @@ static bool findClassRelation(
baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec); baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
// the undocumented base was found in this file // the undocumented base was found in this file
baseClass->insertUsedFile(root->fileName); baseClass->insertUsedFile(root->fileName);
baseClass->setOuterScope(fd); baseClass->setOuterScope(Doxygen::globalScope);
return TRUE; return TRUE;
} }
else else
...@@ -3717,7 +3719,7 @@ static void findMember(Entry *root, ...@@ -3717,7 +3719,7 @@ static void findMember(Entry *root,
//printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data()); //printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
// rebuild the function declaration (needed to get the scope right). // rebuild the function declaration (needed to get the scope right).
if (!scopeName.isEmpty() && /*!isRelated &&*/ !isFriend && !Config_getBool("HIDE_SCOPE_NAMES")) if (!scopeName.isEmpty() && !isRelated && !isFriend && !Config_getBool("HIDE_SCOPE_NAMES"))
{ {
if (!funcType.isEmpty()) if (!funcType.isEmpty())
{ {
...@@ -4000,8 +4002,13 @@ static void findMember(Entry *root, ...@@ -4000,8 +4002,13 @@ static void findMember(Entry *root,
{ {
warn_cont(" template %s\n",tempArgListToString(md->templateArguments()).data()); warn_cont(" template %s\n",tempArgListToString(md->templateArguments()).data());
} }
warn_cont(" %s %s::%s%s\n", warn_cont(" ");
md->typeString(),cd->name().data(), if (md->typeString())
{
warn_cont("%s",md->typeString());
}
warn_cont("%s::%s%s\n",
cd->name().data(),
md->name().data(),md->argsString()); md->name().data(),md->argsString());
} }
} }
...@@ -4090,6 +4097,16 @@ static void findMember(Entry *root, ...@@ -4090,6 +4097,16 @@ static void findMember(Entry *root,
{ {
bool newMember=TRUE; // assume we have a new member bool newMember=TRUE; // assume we have a new member
bool newMemberName=FALSE; bool newMemberName=FALSE;
bool isDefine=FALSE;
{
MemberName *mn = Doxygen::functionNameSDict[funcName];
MemberDef *md = mn->first();
while (md && !isDefine)
{
isDefine = isDefine || md->isDefine();
md = mn->next();
}
}
if ((mn=Doxygen::memberNameSDict[funcName])==0) if ((mn=Doxygen::memberNameSDict[funcName])==0)
{ {
mn=new MemberName(funcName); mn=new MemberName(funcName);
...@@ -4115,7 +4132,9 @@ static void findMember(Entry *root, ...@@ -4115,7 +4132,9 @@ static void findMember(Entry *root,
if (newMember) // need to create a new member if (newMember) // need to create a new member
{ {
MemberDef::MemberType mtype; MemberDef::MemberType mtype;
if (root->mtype==Signal) if (isDefine)
mtype=MemberDef::Define;
else if (root->mtype==Signal)
mtype=MemberDef::Signal; mtype=MemberDef::Signal;
else if (root->mtype==Slot) else if (root->mtype==Slot)
mtype=MemberDef::Slot; mtype=MemberDef::Slot;
...@@ -5419,9 +5438,9 @@ static void resolveUserReferences() ...@@ -5419,9 +5438,9 @@ static void resolveUserReferences()
// have to adjust the link file name to point to the group. // have to adjust the link file name to point to the group.
if (!si->fileName.isEmpty() && if (!si->fileName.isEmpty() &&
(pi=Doxygen::pageSDict->find(si->fileName)) && (pi=Doxygen::pageSDict->find(si->fileName)) &&
pi->inGroup) pi->getGroupDef())
{ {
si->fileName=pi->inGroup->getOutputFileBase().copy(); si->fileName=pi->getGroupDef()->getOutputFileBase().copy();
} }
...@@ -5468,7 +5487,7 @@ static void generatePageDocs() ...@@ -5468,7 +5487,7 @@ static void generatePageDocs()
PageInfo *pi=0; PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
if (!pi->inGroup && !pi->isReference()) if (!pi->getGroupDef() && !pi->isReference())
{ {
msg("Generating docs for page %s...\n",pi->name.data()); msg("Generating docs for page %s...\n",pi->name.data());
//outputList->disable(OutputGenerator::Man); //outputList->disable(OutputGenerator::Man);
...@@ -5771,9 +5790,9 @@ static void generateSearchIndex() ...@@ -5771,9 +5790,9 @@ static void generateSearchIndex()
//outputList->generateExternalIndex(); //outputList->generateExternalIndex();
outputList->pushGeneratorState(); outputList->pushGeneratorState();
outputList->disableAllBut(OutputGenerator::Html); outputList->disableAllBut(OutputGenerator::Html);
startFile(*outputList,"header.html",0,"Search Engine",TRUE); startFile(*outputList,"header"+htmlFileExtension,0,"Search Engine",TRUE);
outputList->endPlainFile(); outputList->endPlainFile();
outputList->startPlainFile("footer.html"); outputList->startPlainFile("footer"+htmlFileExtension);
endFile(*outputList,TRUE); endFile(*outputList,TRUE);
outputList->popGeneratorState(); outputList->popGeneratorState();
} }
...@@ -5818,6 +5837,7 @@ static void generateConfigFile(const char *configFile,bool shortList, ...@@ -5818,6 +5837,7 @@ static void generateConfigFile(const char *configFile,bool shortList,
bool writeToStdout=(configFile[0]=='-' && configFile[1]=='\0'); bool writeToStdout=(configFile[0]=='-' && configFile[1]=='\0');
if (fileOpened) if (fileOpened)
{ {
Config::instance()->init();
Config::instance()->writeTemplate(&f,shortList,updateOnly); Config::instance()->writeTemplate(&f,shortList,updateOnly);
if (!writeToStdout) if (!writeToStdout)
{ {
...@@ -6611,6 +6631,9 @@ void readConfiguration(int argc, char **argv) ...@@ -6611,6 +6631,9 @@ void readConfiguration(int argc, char **argv)
s=includePath.next(); s=includePath.next();
} }
/* Set the global html file extension. */
htmlFileExtension = Config_getString("HTML_FILE_EXTENSION");
htmlFileExtensionLength = htmlFileExtension.length();
} }
void parseInput() void parseInput()
......
...@@ -50,6 +50,8 @@ class StringDict : public QDict<QCString> ...@@ -50,6 +50,8 @@ class StringDict : public QDict<QCString>
}; };
extern QCString htmlFileExtension;
extern int htmlFileExtensionLength;
extern QCString spaces; extern QCString spaces;
/*! \brief This class serves as a namespace for global variables used by doxygen. /*! \brief This class serves as a namespace for global variables used by doxygen.
......
...@@ -31,5 +31,6 @@ DESTDIR = ../bin ...@@ -31,5 +31,6 @@ DESTDIR = ../bin
TARGET = doxygen TARGET = doxygen
unix:TARGETDEPS = ../lib/libdoxygen.a ../lib/libdoxycfg.a unix:TARGETDEPS = ../lib/libdoxygen.a ../lib/libdoxycfg.a
win32:TARGETDEPS = ..\lib\doxygen.lib ..\lib\doxycfg.lib win32:TARGETDEPS = ..\lib\doxygen.lib ..\lib\doxycfg.lib
win32-g++:TARGETDEPS = ../lib/libdoxygen.a ../lib/libdoxycfg.a
OBJECTS_DIR = ../objects OBJECTS_DIR = ../objects
...@@ -116,6 +116,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -116,6 +116,7 @@ void FileDef::writeDocumentation(OutputList &ol)
startFile(ol,getOutputFileBase(),name(),pageTitle); startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
parseText(ol,theTranslator->trFileReference(docname)); parseText(ol,theTranslator->trFileReference(docname));
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),docName()); endTitle(ol,getOutputFileBase(),docName());
//ol.newParagraph(); //ol.newParagraph();
...@@ -124,7 +125,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -124,7 +125,7 @@ void FileDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " <compound kind=\"file\">" << endl; Doxygen::tagFile << " <compound kind=\"file\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
Doxygen::tagFile << " <path>" << convertToXML(getPath()) << "</path>" << endl; Doxygen::tagFile << " <path>" << convertToXML(getPath()) << "</path>" << endl;
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << ".html</filename>" << endl; Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << htmlFileExtension << "</filename>" << endl;
} }
ol.startTextBlock(); ol.startTextBlock();
...@@ -256,9 +257,9 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -256,9 +257,9 @@ void FileDef::writeDocumentation(OutputList &ol)
//ol.disableAllBut(OutputGenerator::Html); //ol.disableAllBut(OutputGenerator::Html);
//ol.writeString((QCString)"<p>Interface collaboration diagram for " //ol.writeString((QCString)"<p>Interface collaboration diagram for "
// "<a href=\"usage_intf_graph_"+name()+".html\">here</a>"); // "<a href=\"usage_intf_graph_"+name()+htmlFileExtension+"\">here</a>");
//ol.writeString((QCString)"<p>Include dependency diagram for "+fn+" can be found "+ //ol.writeString((QCString)"<p>Include dependency diagram for "+fn+" can be found "+
// "<a href=\""+diskname+"_incldep.html\">here</a>."); // "<a href=\""+diskname+"_incldep+htmlFileExtension+"\">here</a>.");
//ol.enableAll(); //ol.enableAll();
ol.endTextBlock(); ol.endTextBlock();
......
...@@ -264,7 +264,7 @@ static void generateFolderTreeViewData() ...@@ -264,7 +264,7 @@ static void generateFolderTreeViewData()
} }
// Generate alternative index.html as a frame // Generate alternative index.html as a frame
fileName=Config_getString("HTML_OUTPUT")+"/index.html"; fileName=Config_getString("HTML_OUTPUT")+"/index"+htmlFileExtension;
f.setName(fileName); f.setName(fileName);
if (!f.open(IO_WriteOnly)) if (!f.open(IO_WriteOnly))
{ {
...@@ -291,15 +291,15 @@ static void generateFolderTreeViewData() ...@@ -291,15 +291,15 @@ static void generateFolderTreeViewData()
} }
t << "</title></head>" << endl; t << "</title></head>" << endl;
t << "<frameset cols=\"" << Config_getInt("TREEVIEW_WIDTH") << ",*\">" << endl; t << "<frameset cols=\"" << Config_getInt("TREEVIEW_WIDTH") << ",*\">" << endl;
t << " <frame src=\"tree.html\" name=\"treefrm\">" << endl; t << " <frame src=\"tree" << htmlFileExtension << "\" name=\"treefrm\">" << endl;
t << " <frame src=\"main.html\" name=\"basefrm\">" << endl; t << " <frame src=\"main" << htmlFileExtension << "\" name=\"basefrm\">" << endl;
t << "</frameset>" << endl; t << "</frameset>" << endl;
t << "</html>" << endl; t << "</html>" << endl;
f.close(); f.close();
} }
// Generate tree view frame // Generate tree view frame
fileName=Config_getString("HTML_OUTPUT")+"/tree.html"; fileName=Config_getString("HTML_OUTPUT")+"/tree"+htmlFileExtension;
f.setName(fileName); f.setName(fileName);
if (!f.open(IO_WriteOnly)) if (!f.open(IO_WriteOnly))
{ {
...@@ -476,7 +476,7 @@ void FTVHelp::addContentsItem(bool isDir, ...@@ -476,7 +476,7 @@ void FTVHelp::addContentsItem(bool isDir,
<< name << "\", \"" << tagName << "\", "; << name << "\", \"" << tagName << "\", ";
if (file) // file optional param if (file) // file optional param
{ {
m_cts << "\"" << tagDir << file << ".html\"))"; m_cts << "\"" << tagDir << file << htmlFileExtension << "\"))";
} }
else else
{ {
...@@ -489,7 +489,7 @@ void FTVHelp::addContentsItem(bool isDir, ...@@ -489,7 +489,7 @@ void FTVHelp::addContentsItem(bool isDir,
<< name << "\", \"" << tagName << "\", "; << name << "\", \"" << tagName << "\", ";
if (file) // ref optional param if (file) // ref optional param
{ {
m_cts << "\"" << tagDir << file << ".html"; m_cts << "\"" << tagDir << file << htmlFileExtension;
if (anchor) m_cts << "#" << anchor; if (anchor) m_cts << "#" << anchor;
m_cts << "\"))"; m_cts << "\"))";
} }
......
...@@ -38,7 +38,6 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) : ...@@ -38,7 +38,6 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) :
fileList = new FileList; fileList = new FileList;
classSDict = new ClassSDict(257); classSDict = new ClassSDict(257);
groupList = new GroupList; groupList = new GroupList;
parentGroupList = new GroupList;
namespaceList = new NamespaceList; namespaceList = new NamespaceList;
pageDict = new PageSDict(257); pageDict = new PageSDict(257);
exampleDict = new PageSDict(257); exampleDict = new PageSDict(257);
...@@ -72,7 +71,6 @@ GroupDef::~GroupDef() ...@@ -72,7 +71,6 @@ GroupDef::~GroupDef()
delete fileList; delete fileList;
delete classSDict; delete classSDict;
delete groupList; delete groupList;
delete parentGroupList;
delete namespaceList; delete namespaceList;
delete pageDict; delete pageDict;
delete exampleDict; delete exampleDict;
...@@ -134,7 +132,7 @@ void GroupDef::addNamespace(const NamespaceDef *def) ...@@ -134,7 +132,7 @@ void GroupDef::addNamespace(const NamespaceDef *def)
void GroupDef::addPage(PageInfo *def) void GroupDef::addPage(PageInfo *def)
{ {
pageDict->append(def->name,def); pageDict->append(def->name,def);
def->inGroup = this; def->makePartOfGroup(this);
} }
void GroupDef::addExample(const PageInfo *def) void GroupDef::addExample(const PageInfo *def)
...@@ -316,20 +314,11 @@ void GroupDef::addGroup(const GroupDef *def) ...@@ -316,20 +314,11 @@ void GroupDef::addGroup(const GroupDef *def)
groupList->append(def); groupList->append(def);
} }
void GroupDef::addParentGroup(const GroupDef *def)
{
//if (Config_getBool("SORT_MEMBER_DOCS"))
// parentGroupList->inSort(def);
//else
parentGroupList->append(def);
}
bool GroupDef::isASubGroup() const bool GroupDef::isASubGroup() const
{ {
return parentGroupList->count()!=0; return m_partOfGroups && m_partOfGroups->count()!=0;
} }
int GroupDef::countMembers() const int GroupDef::countMembers() const
{ {
return fileList->count()+ return fileList->count()+
...@@ -354,6 +343,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -354,6 +343,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
startFile(ol,getOutputFileBase(),name(),title); startFile(ol,getOutputFileBase(),name(),title);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
ol.docify(title); ol.docify(title);
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),title); endTitle(ol,getOutputFileBase(),title);
//brief=brief.stripWhiteSpace(); //brief=brief.stripWhiteSpace();
...@@ -379,7 +369,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -379,7 +369,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " <compound kind=\"group\">" << endl; Doxygen::tagFile << " <compound kind=\"group\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
Doxygen::tagFile << " <title>" << convertToXML(title) << "</title>" << endl; Doxygen::tagFile << " <title>" << convertToXML(title) << "</title>" << endl;
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << ".html</filename>" << endl; Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << htmlFileExtension << "</filename>" << endl;
} }
ol.startMemberSections(); ol.startMemberSections();
...@@ -597,6 +587,7 @@ void addClassToGroups(Entry *root,ClassDef *cd) ...@@ -597,6 +587,7 @@ void addClassToGroups(Entry *root,ClassDef *cd)
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{ {
gd->addClass(cd); gd->addClass(cd);
cd->makePartOfGroup(gd);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data()); //printf("Compound %s: in group %s\n",cd->name().data(),s->data());
} }
} }
...@@ -614,6 +605,7 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd) ...@@ -614,6 +605,7 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{ {
gd->addNamespace(nd); gd->addNamespace(nd);
nd->makePartOfGroup(gd);
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data()); //printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
} }
} }
...@@ -630,7 +622,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup) ...@@ -630,7 +622,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
!gd->containsGroup(subGroup) ) !gd->containsGroup(subGroup) )
{ {
gd->addGroup(subGroup); gd->addGroup(subGroup);
subGroup->addParentGroup(gd); subGroup->makePartOfGroup(gd);
} }
} }
} }
...@@ -681,7 +673,9 @@ void addMemberToGroups(Entry *root,MemberDef *md) ...@@ -681,7 +673,9 @@ void addMemberToGroups(Entry *root,MemberDef *md)
// - the new one has a higher priority // - the new one has a higher priority
// - the new entry has the same priority, but with docs where the old one had no docs // - the new entry has the same priority, but with docs where the old one had no docs
if( md->getGroupPri() < pri ) if( md->getGroupPri() < pri )
{
moveit = TRUE; moveit = TRUE;
}
else else
{ {
if( md->getGroupPri() == pri ) if( md->getGroupPri() == pri )
...@@ -731,6 +725,7 @@ void addExampleToGroups(Entry *root,PageInfo *eg) ...@@ -731,6 +725,7 @@ void addExampleToGroups(Entry *root,PageInfo *eg)
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{ {
gd->addExample(eg); gd->addExample(eg);
eg->makePartOfGroup(gd);
//printf("Example %s: in group %s\n",eg->name().data(),s->data()); //printf("Example %s: in group %s\n",eg->name().data(),s->data());
} }
} }
......
...@@ -118,7 +118,7 @@ class GroupDef : public Definition ...@@ -118,7 +118,7 @@ class GroupDef : public Definition
ClassSDict *classSDict; // list of classes in the group ClassSDict *classSDict; // list of classes in the group
NamespaceList *namespaceList; // list of namespaces in the group NamespaceList *namespaceList; // list of namespaces in the group
GroupList *groupList; // list of sub groups. GroupList *groupList; // list of sub groups.
GroupList *parentGroupList; // list of parent groups. //GroupList *parentGroupList; // list of parent groups.
PageSDict *pageDict; // list of pages in the group PageSDict *pageDict; // list of pages in the group
PageSDict *exampleDict; // list of examples in the group PageSDict *exampleDict; // list of examples in the group
...@@ -139,6 +139,13 @@ class GroupList : public QList<GroupDef> ...@@ -139,6 +139,13 @@ class GroupList : public QList<GroupDef>
{ {
}; };
class GroupListIterator : public QListIterator<GroupDef>
{
public:
GroupListIterator(const GroupList &l) : QListIterator<GroupDef>(l) {}
virtual ~GroupListIterator() {}
};
void addClassToGroups(Entry *root,ClassDef *cd); void addClassToGroups(Entry *root,ClassDef *cd);
void addNamespaceToGroups(Entry *root,NamespaceDef *nd); void addNamespaceToGroups(Entry *root,NamespaceDef *nd);
void addGroupToGroups(Entry *root,GroupDef *subGroup); void addGroupToGroups(Entry *root,GroupDef *subGroup);
......
...@@ -200,7 +200,7 @@ void HtmlGenerator::startFile(const char *name,const char *, ...@@ -200,7 +200,7 @@ void HtmlGenerator::startFile(const char *name,const char *,
//printf("HtmlGenerator::startFile(%s)\n",name); //printf("HtmlGenerator::startFile(%s)\n",name);
QCString fileName=name; QCString fileName=name;
lastTitle=title; lastTitle=title;
if (fileName.right(5)!=".html") fileName+=".html"; if (fileName.right(htmlFileExtensionLength)!=htmlFileExtension) fileName+=htmlFileExtension;
startPlainFile(fileName); startPlainFile(fileName);
if (Config_getBool("GENERATE_HTMLHELP")) if (Config_getBool("GENERATE_HTMLHELP"))
{ {
...@@ -379,7 +379,7 @@ void HtmlGenerator::writeIndexItem(const char *ref,const char *f, ...@@ -379,7 +379,7 @@ void HtmlGenerator::writeIndexItem(const char *ref,const char *f,
{ {
if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/";
} }
if (f) t << f << ".html\">"; if (f) t << f << htmlFileExtension << "\">";
} }
else else
{ {
...@@ -396,7 +396,7 @@ void HtmlGenerator::writeIndexItem(const char *ref,const char *f, ...@@ -396,7 +396,7 @@ void HtmlGenerator::writeIndexItem(const char *ref,const char *f,
} }
//if (Config_getBool("GENERATE_HTMLHELP") && f) //if (Config_getBool("GENERATE_HTMLHELP") && f)
//{ //{
// htmlHelp->addItem(name,((QCString)f)+".html"); // htmlHelp->addItem(name,((QCString)f)+htmlFileExtension);
//} //}
} }
...@@ -405,12 +405,12 @@ void HtmlGenerator::writeStartAnnoItem(const char *,const char *f, ...@@ -405,12 +405,12 @@ void HtmlGenerator::writeStartAnnoItem(const char *,const char *f,
{ {
t << "<li>"; t << "<li>";
if (path) docify(path); if (path) docify(path);
t << "<a class=\"el\" href=\"" << f << ".html\">"; t << "<a class=\"el\" href=\"" << f << htmlFileExtension << "\">";
docify(name); docify(name);
t << "</a> "; t << "</a> ";
//if (Config_getBool("GENERATE_HTMLHELP") && f) //if (Config_getBool("GENERATE_HTMLHELP") && f)
//{ //{
// htmlHelp->addItem(name, ((QCString)f)+".html"); // htmlHelp->addItem(name, ((QCString)f)+htmlFileExtension);
//} //}
} }
...@@ -434,7 +434,7 @@ void HtmlGenerator::writeObjectLink(const char *ref,const char *f, ...@@ -434,7 +434,7 @@ void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
{ {
if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/";
} }
if (f) t << f << ".html"; if (f) t << f << htmlFileExtension;
if (anchor) t << "#" << anchor; if (anchor) t << "#" << anchor;
t << "\">"; t << "\">";
docify(name); docify(name);
...@@ -461,7 +461,7 @@ void HtmlGenerator::writeCodeLink(const char *ref,const char *f, ...@@ -461,7 +461,7 @@ void HtmlGenerator::writeCodeLink(const char *ref,const char *f,
{ {
if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/";
} }
if (f) t << f << ".html"; if (f) t << f << htmlFileExtension;
if (anchor) t << "#" << anchor; if (anchor) t << "#" << anchor;
t << "\">"; t << "\">";
docify(name); docify(name);
...@@ -472,7 +472,7 @@ void HtmlGenerator::writeCodeLink(const char *ref,const char *f, ...@@ -472,7 +472,7 @@ void HtmlGenerator::writeCodeLink(const char *ref,const char *f,
void HtmlGenerator::startTextLink(const char *f,const char *anchor) void HtmlGenerator::startTextLink(const char *f,const char *anchor)
{ {
t << "<a href=\""; t << "<a href=\"";
if (f) t << f << ".html"; if (f) t << f << htmlFileExtension;
if (anchor) t << "#" << anchor; if (anchor) t << "#" << anchor;
t << "\">"; t << "\">";
} }
...@@ -531,7 +531,7 @@ void HtmlGenerator::writeSectionRef(const char *ref,const char *name, ...@@ -531,7 +531,7 @@ void HtmlGenerator::writeSectionRef(const char *ref,const char *name,
QCString *dest; QCString *dest;
//printf("writeSectionRef(%s,%s,%s,%s)\n",ref,name,anchor,title); //printf("writeSectionRef(%s,%s,%s,%s)\n",ref,name,anchor,title);
QCString refName=name; QCString refName=name;
if (refName.right(5)!=".html") refName+=".html"; if (refName.right(htmlFileExtensionLength)!=htmlFileExtension) refName+=htmlFileExtension;
t << "<a "; t << "<a ";
if (ref) if (ref)
{ {
...@@ -553,7 +553,7 @@ void HtmlGenerator::writeSectionRefItem(const char *name,const char *lab, ...@@ -553,7 +553,7 @@ void HtmlGenerator::writeSectionRefItem(const char *name,const char *lab,
const char *title) const char *title)
{ {
QCString refName=name; QCString refName=name;
if (refName.right(5)!=".html") refName+=".html"; if (refName.right(htmlFileExtensionLength)!=htmlFileExtension) refName+=htmlFileExtension;
t << "<a href=\"" << refName << "#" << lab << "\">"; t << "<a href=\"" << refName << "#" << lab << "\">";
docify(title); docify(title);
t << "</a>"; t << "</a>";
......
...@@ -181,11 +181,11 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE) ...@@ -181,11 +181,11 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
if (Config_getBool("GENERATE_TREEVIEW")) if (Config_getBool("GENERATE_TREEVIEW"))
{ {
ol.startQuickIndexItem(extLink,"main.html"); ol.startQuickIndexItem(extLink,"main"+htmlFileExtension);
} }
else else
{ {
ol.startQuickIndexItem(extLink,"index.html"); ol.startQuickIndexItem(extLink,"index"+htmlFileExtension);
} }
parseText(ol,theTranslator->trMainPage()); parseText(ol,theTranslator->trMainPage());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
...@@ -193,28 +193,28 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE) ...@@ -193,28 +193,28 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
if (documentedPackages>0) if (documentedPackages>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"packages.html"); ol.startQuickIndexItem(extLink,"packages"+htmlFileExtension);
parseText(ol,theTranslator->trPackages()); parseText(ol,theTranslator->trPackages());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedGroups>0) if (documentedGroups>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"modules.html"); ol.startQuickIndexItem(extLink,"modules"+htmlFileExtension);
parseText(ol,theTranslator->trModules()); parseText(ol,theTranslator->trModules());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedNamespaces>0) if (documentedNamespaces>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"namespaces.html"); ol.startQuickIndexItem(extLink,"namespaces"+htmlFileExtension);
parseText(ol,theTranslator->trNamespaceList()); parseText(ol,theTranslator->trNamespaceList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (hierarchyClasses>0) if (hierarchyClasses>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"hierarchy.html"); ol.startQuickIndexItem(extLink,"hierarchy"+htmlFileExtension);
parseText(ol,theTranslator->trClassHierarchy()); parseText(ol,theTranslator->trClassHierarchy());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
...@@ -223,68 +223,68 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE) ...@@ -223,68 +223,68 @@ void writeQuickLinks(OutputList &ol,bool compact ,bool ext=FALSE)
if (Config_getBool("ALPHABETICAL_INDEX")) if (Config_getBool("ALPHABETICAL_INDEX"))
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"classes.html"); ol.startQuickIndexItem(extLink,"classes"+htmlFileExtension);
parseText(ol,theTranslator->trAlphabeticalList()); parseText(ol,theTranslator->trAlphabeticalList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"annotated.html"); ol.startQuickIndexItem(extLink,"annotated"+htmlFileExtension);
parseText(ol,theTranslator->trCompoundList()); parseText(ol,theTranslator->trCompoundList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedHtmlFiles>0) if (documentedHtmlFiles>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"files.html"); ol.startQuickIndexItem(extLink,"files"+htmlFileExtension);
parseText(ol,theTranslator->trFileList()); parseText(ol,theTranslator->trFileList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
//if (documentedIncludeFiles>0 && Config_getBool("VERBATIM_HEADERS")) //if (documentedIncludeFiles>0 && Config_getBool("VERBATIM_HEADERS"))
//{ //{
// if (!compact) ol.writeListItem(); // if (!compact) ol.writeListItem();
// ol.startQuickIndexItem(extLink,"headers.html"); // ol.startQuickIndexItem(extLink,"headers"+htmlFileExtension);
// parseText(ol,theTranslator->trHeaderFiles()); // parseText(ol,theTranslator->trHeaderFiles());
// ol.endQuickIndexItem(); // ol.endQuickIndexItem();
//} //}
//if (Config_getBool("SOURCE_BROWSER")) //if (Config_getBool("SOURCE_BROWSER"))
//{ //{
// if (!compact) ol.writeListItem(); // if (!compact) ol.writeListItem();
// ol.startQuickIndexItem(extLink,"sources.html"); // ol.startQuickIndexItem(extLink,"sources"+htmlFileExtension);
// parseText(ol,theTranslator->trSources()); // parseText(ol,theTranslator->trSources());
// ol.endQuickIndexItem(); // ol.endQuickIndexItem();
//} //}
if (documentedNamespaceMembers>0) if (documentedNamespaceMembers>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"namespacemembers.html"); ol.startQuickIndexItem(extLink,"namespacemembers"+htmlFileExtension);
parseText(ol,theTranslator->trNamespaceMembers()); parseText(ol,theTranslator->trNamespaceMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedMembers>0) if (documentedMembers>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"functions.html"); ol.startQuickIndexItem(extLink,"functions"+htmlFileExtension);
parseText(ol,theTranslator->trCompoundMembers()); parseText(ol,theTranslator->trCompoundMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedFunctions>0) if (documentedFunctions>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"globals.html"); ol.startQuickIndexItem(extLink,"globals"+htmlFileExtension);
parseText(ol,theTranslator->trFileMembers()); parseText(ol,theTranslator->trFileMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (indexedPages>0) if (indexedPages>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"pages.html"); ol.startQuickIndexItem(extLink,"pages"+htmlFileExtension);
parseText(ol,theTranslator->trRelatedPages()); parseText(ol,theTranslator->trRelatedPages());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (Doxygen::exampleSDict->count()>0) if (Doxygen::exampleSDict->count()>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"examples.html"); ol.startQuickIndexItem(extLink,"examples"+htmlFileExtension);
parseText(ol,theTranslator->trExamples()); parseText(ol,theTranslator->trExamples());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
...@@ -683,7 +683,10 @@ void writeHierarchicalIndex(OutputList &ol) ...@@ -683,7 +683,10 @@ void writeHierarchicalIndex(OutputList &ol)
QCString title = theTranslator->trClassHierarchy(); QCString title = theTranslator->trClassHierarchy();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title; QCString ftvHelpTitle = title;
if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" "); if (!Config_getString("PROJECT_NAME").isEmpty())
{
title.prepend(Config_getString("PROJECT_NAME")+" ");
}
parseText(ol,title); parseText(ol,title);
endTitle(ol,0,0); endTitle(ol,0,0);
ol.startTextBlock(); ol.startTextBlock();
...@@ -714,7 +717,6 @@ void writeHierarchicalIndex(OutputList &ol) ...@@ -714,7 +717,6 @@ void writeHierarchicalIndex(OutputList &ol)
ol.enable(OutputGenerator::RTF); ol.enable(OutputGenerator::RTF);
} }
parseText(ol,theTranslator->trClassHierarchyDescription()); parseText(ol,theTranslator->trClassHierarchyDescription());
//ol.newParagraph();
ol.endTextBlock(); ol.endTextBlock();
writeClassHierarchy(ol); writeClassHierarchy(ol);
endFile(ol); endFile(ol);
...@@ -1388,7 +1390,7 @@ void writeAlphabeticalIndex(OutputList &ol) ...@@ -1388,7 +1390,7 @@ void writeAlphabeticalIndex(OutputList &ol)
if (annotatedClasses==0) return; if (annotatedClasses==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"classes.html",0,"Alphabetical index"); startFile(ol,"classes"+htmlFileExtension,0,"Alphabetical index");
startTitle(ol,0); startTitle(ol,0);
parseText(ol,Config_getString("PROJECT_NAME")+" "+theTranslator->trCompoundIndex()); parseText(ol,Config_getString("PROJECT_NAME")+" "+theTranslator->trCompoundIndex());
endTitle(ol,0,0); endTitle(ol,0,0);
...@@ -2060,7 +2062,7 @@ void countRelatedPages(int &docPages,int &indexPages) ...@@ -2060,7 +2062,7 @@ void countRelatedPages(int &docPages,int &indexPages)
PageInfo *pi=0; PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
if (!pi->inGroup && (!pi->isReference() || Config_getBool("ALLEXTERNALS"))) if (!pi->getGroupDef() && (!pi->isReference() || Config_getBool("ALLEXTERNALS")))
{ {
indexPages++; indexPages++;
if (!pi->isReference()) docPages++; if (!pi->isReference()) docPages++;
...@@ -2125,7 +2127,7 @@ void writePageIndex(OutputList &ol) ...@@ -2125,7 +2127,7 @@ void writePageIndex(OutputList &ol)
PageInfo *pi=0; PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
if (!pi->inGroup && (!pi->isReference() || Config_getBool("ALLEXTERNALS"))) if (!pi->getGroupDef() && (!pi->isReference() || Config_getBool("ALLEXTERNALS")))
{ {
QCString pageName,pageTitle; QCString pageName,pageTitle;
......
...@@ -199,12 +199,12 @@ void LatexGenerator::init() ...@@ -199,12 +199,12 @@ void LatexGenerator::init()
<< "\tmakeindex refman.idx" << endl << "\tmakeindex refman.idx" << endl
<< "\techo \"Rerunning latex....\"" << endl << "\techo \"Rerunning latex....\"" << endl
<< "\tlatex refman.tex" << endl << "\tlatex refman.tex" << endl
<< "\tlatex_count=5" << endl << "\tlatex_count=5 ; \\" << endl
<< "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $latex_count -gt 0 ] ;\\" << endl << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
<< "\t do \\" << endl << "\t do \\" << endl
<< "\t echo \"Rerunning latex....\" ;\\" << endl << "\t echo \"Rerunning latex....\" ;\\" << endl
<< "\t latex refman.tex ;\\" << endl << "\t latex refman.tex ;\\" << endl
<< "\t latex_count=`expr $latex_count - 1` ;\\" << endl << "\t latex_count=`expr $$latex_count - 1` ;\\" << endl
<< "\t done" << endl << endl << "\t done" << endl << endl
<< "clean:" << endl << "clean:" << endl
<< "\trm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out" << endl; << "\trm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out" << endl;
...@@ -787,7 +787,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -787,7 +787,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool first=TRUE; bool first=TRUE;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
if (!pi->inGroup && !pi->isReference()) if (!pi->getGroupDef() && !pi->isReference())
{ {
QCString pageName; QCString pageName;
if (Config_getBool("CASE_SENSE_NAMES")) if (Config_getBool("CASE_SENSE_NAMES"))
......
...@@ -177,13 +177,14 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -177,13 +177,14 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
//ol.docify(pageTitle); //ol.docify(pageTitle);
parseText(ol,theTranslator->trNamespaceReference(name())); parseText(ol,theTranslator->trNamespaceReference(name()));
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),name()); endTitle(ol,getOutputFileBase(),name());
if (!Config_getString("GENERATE_TAGFILE").isEmpty()) if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{ {
Doxygen::tagFile << " <compound kind=\"namespace\">" << endl; Doxygen::tagFile << " <compound kind=\"namespace\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << ".html</filename>" << endl; Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << htmlFileExtension << "</filename>" << endl;
} }
ol.startTextBlock(); ol.startTextBlock();
......
...@@ -25,7 +25,7 @@ class PageInfo ...@@ -25,7 +25,7 @@ class PageInfo
public: public:
PageInfo(const char *f, int l,const char *n,const char *d,const char *t) : PageInfo(const char *f, int l,const char *n,const char *d,const char *t) :
defFileName(f), defLine(l), name(n), defFileName(f), defLine(l), name(n),
doc(d), title(t), todoId(0), testId(0),inGroup(0), sectionDict(0) {} doc(d), title(t), todoId(0), testId(0),sectionDict(0), m_inGroup(0) {}
// where the page definition was found // where the page definition was found
QCString defFileName; QCString defFileName;
...@@ -92,9 +92,14 @@ class PageInfo ...@@ -92,9 +92,14 @@ class PageInfo
int testId; int testId;
int bugId; int bugId;
void makePartOfGroup(GroupDef *gd) { m_inGroup = gd; }
GroupDef *getGroupDef() const { return m_inGroup; }
// is this page part of a group // is this page part of a group
GroupDef *inGroup;
SectionDict *sectionDict; SectionDict *sectionDict;
private:
GroupDef *m_inGroup;
}; };
class PageSDict : public SDict<PageInfo> class PageSDict : public SDict<PageInfo>
......
...@@ -1050,7 +1050,7 @@ BN [ \t\r\n] ...@@ -1050,7 +1050,7 @@ BN [ \t\r\n]
} }
BEGIN(CopyLine); BEGIN(CopyLine);
} }
<Start>^{B}*[_A-Z][_A-Z0-9]*"("[^\)\n]*")"{B}*\n { // function like macro <Start>^{B}*[_A-Z][_A-Z0-9]*{B}*"("[^\)\n]*")"{B}*\n { // function like macro
static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS"); static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS");
QCString name(yytext); QCString name(yytext);
name=name.left(name.find('(')).stripWhiteSpace(); name=name.left(name.find('(')).stripWhiteSpace();
......
...@@ -1328,7 +1328,7 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -1328,7 +1328,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
bool first=TRUE; bool first=TRUE;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
if (!pi->inGroup && !pi->isReference()) if (!pi->getGroupDef() && !pi->isReference())
{ {
QCString pageName; QCString pageName;
if (Config_getBool("CASE_SENSE_NAMES")) if (Config_getBool("CASE_SENSE_NAMES"))
......
/***************************************************************************** /*****************************************************************************
* *
* $Id$ *
* *
* Copyright (C) 1997-2002 by Dimitri van Heesch. * Copyright (C) 1997-2002 by Dimitri van Heesch.
* *
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#ifndef TRANSLATOR_JP_H #ifndef TRANSLATOR_JP_H
#define TRANSLATOR_JP_H #define TRANSLATOR_JP_H
class TranslatorJapanese : public TranslatorAdapter_1_2_13 class TranslatorJapanese : public Translator
{ {
private: private:
/*! The decode() can change euc into sjis */ /*! The decode() can change euc into sjis */
...@@ -484,7 +484,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_13 ...@@ -484,7 +484,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_13
*/ */
virtual QCString trWrittenBy() virtual QCString trWrittenBy()
{ {
return decode("担当"); return decode("作者");
} }
/*! this text is put before a class diagram */ /*! this text is put before a class diagram */
...@@ -1317,6 +1317,25 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_13 ...@@ -1317,6 +1317,25 @@ class TranslatorJapanese : public TranslatorAdapter_1_2_13
return decode("参照"); return decode("参照");
} }
}; //////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/*! used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return trWriteList(numEntries)+decode("を実装しています")+".";
}
/*! used in member documentation blocks to produce a list of
* all members that implement this abstract member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return trWriteList(numEntries)+decode("に実装されています")+".";
}
};
#endif #endif
...@@ -2603,7 +2603,7 @@ bool generateLink(OutputDocInterface &od,const char *clName, ...@@ -2603,7 +2603,7 @@ bool generateLink(OutputDocInterface &od,const char *clName,
} }
else if ((pi=Doxygen::pageSDict->find(linkRef))) // link to a page else if ((pi=Doxygen::pageSDict->find(linkRef))) // link to a page
{ {
GroupDef *gd = pi->inGroup; GroupDef *gd = pi->getGroupDef();
if (gd) if (gd)
{ {
SectionInfo *si=0; SectionInfo *si=0;
...@@ -3467,8 +3467,8 @@ void addRelatedPage(const char *name,const QCString &ptitle, ...@@ -3467,8 +3467,8 @@ void addRelatedPage(const char *name,const QCString &ptitle,
QCString baseName=name; QCString baseName=name;
if (baseName.right(4)==".tex") if (baseName.right(4)==".tex")
baseName=baseName.left(baseName.length()-4); baseName=baseName.left(baseName.length()-4);
else if (baseName.right(5)==".html") else if (baseName.right(htmlFileExtensionLength)==htmlFileExtension)
baseName=baseName.left(baseName.length()-5); baseName=baseName.left(baseName.length()-htmlFileExtensionLength);
QCString title=ptitle.stripWhiteSpace(); QCString title=ptitle.stripWhiteSpace();
pi=new PageInfo(fileName,startLine,baseName,doc,title); pi=new PageInfo(fileName,startLine,baseName,doc,title);
...@@ -3504,9 +3504,9 @@ void addRelatedPage(const char *name,const QCString &ptitle, ...@@ -3504,9 +3504,9 @@ void addRelatedPage(const char *name,const QCString &ptitle,
{ {
si->fileName=gd->getOutputFileBase(); si->fileName=gd->getOutputFileBase();
} }
else if (pi->inGroup) else if (pi->getGroupDef())
{ {
si->fileName=pi->inGroup->getOutputFileBase().copy(); si->fileName=pi->getGroupDef()->getOutputFileBase().copy();
} }
else else
{ {
...@@ -3621,4 +3621,27 @@ void addRefItem(int todoId,int testId,int bugId,const char *prefix, ...@@ -3621,4 +3621,27 @@ void addRefItem(int todoId,int testId,int bugId,const char *prefix,
} }
} }
void addGroupListToTitle(OutputList &ol,Definition *d)
{
if (d->partOfGroups()) // write list of group to which this definition belongs
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.lineBreak();
ol.startSmall();
ol.docify("[");
GroupListIterator gli(*d->partOfGroups());
GroupDef *gd;
bool first=TRUE;
for (gli.toFirst();(gd=gli.current());++gli)
{
if (!first) { ol.docify(","); ol.writeNonBreakableSpace(1); } else first=FALSE;
ol.writeObjectLink(gd->getReference(),
gd->getOutputFileBase(),0,gd->groupTitle());
}
ol.docify("]");
ol.endSmall();
ol.popGeneratorState();
}
}
...@@ -176,6 +176,7 @@ void addRelatedPage(const char *name,const QCString &ptitle, ...@@ -176,6 +176,7 @@ void addRelatedPage(const char *name,const QCString &ptitle,
TagInfo *tagInfo=0 TagInfo *tagInfo=0
); );
QCString escapeCharsInString(const char *name,bool allowDots); QCString escapeCharsInString(const char *name,bool allowDots);
void addGroupListToTitle(OutputList &ol,Definition *d);
#endif #endif
...@@ -182,13 +182,13 @@ class XMLGenerator : public OutputDocInterface ...@@ -182,13 +182,13 @@ class XMLGenerator : public OutputDocInterface
if (!m_inParStack.isEmpty() && !m_inParStack.top()) if (!m_inParStack.isEmpty() && !m_inParStack.top())
{ {
m_inParStack.top() = TRUE; m_inParStack.top() = TRUE;
m_t << "<para>" << endl; m_t << "<para>";
XML_DB(("start par at level=%d\n",m_inParStack.count())); XML_DB(("start par at level=%d\n",m_inParStack.count()));
} }
else if (m_inParStack.isEmpty()) else if (m_inParStack.isEmpty())
{ {
m_inParStack.push(TRUE); m_inParStack.push(TRUE);
m_t << "<para>" << endl; m_t << "<para>";
XML_DB(("start par at level=%d\n",m_inParStack.count())); XML_DB(("start par at level=%d\n",m_inParStack.count()));
} }
} }
...@@ -1271,11 +1271,49 @@ static void generateXMLSection(Definition *d,QTextStream &ti,QTextStream &t, ...@@ -1271,11 +1271,49 @@ static void generateXMLSection(Definition *d,QTextStream &ti,QTextStream &t,
t << " </sectiondef>" << endl; t << " </sectiondef>" << endl;
} }
static void writeTemplateLists(Definition *d,QTextStream &t)
{
if (d->definitionType()==Definition::TypeClass)
{
if (d->getOuterScope()) writeTemplateLists(d->getOuterScope(),t);
ClassDef *cd = (ClassDef *)d;
ArgumentList *al = cd->templateArguments();
if (al)
{
t << " <templateparamlist>" << endl;
ArgumentListIterator ali(*al);
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
t << " <param>" << endl;
if (!a->type.isEmpty())
{
t << " <type>";
linkifyText(TextGeneratorXMLImpl(t),d->name(),0,a->type);
t << "</type>" << endl;
}
if (!a->name.isEmpty())
{
t << " <name>" << a->name << "</name>" << endl;
}
if (!a->defval.isEmpty())
{
t << " <defval>";
linkifyText(TextGeneratorXMLImpl(t),d->name(),0,a->defval);
t << "</defval>" << endl;
}
t << " </param>" << endl;
}
t << " </templateparamlist>" << endl;
}
}
}
static void generateXMLForClass(ClassDef *cd,QTextStream &ti) static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
{ {
// + brief description // + brief description
// + detailed description // + detailed description
// - template arguments // + template argument list(s)
// - include file // - include file
// + member groups // + member groups
// + inheritance diagram // + inheritance diagram
...@@ -1376,6 +1414,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -1376,6 +1414,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl; << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
} }
} }
writeTemplateLists(cd,t);
MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict); MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict);
MemberGroup *mg; MemberGroup *mg;
for (;(mg=mgli.current());++mgli) for (;(mg=mgli.current());++mgli)
......
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
if ( Project("TMAKE_APP_FLAG") ) { if ( Project("TMAKE_APP_FLAG") ) {
$project{"TARGET_EXT"} = ".exe"; $project{"TARGET_EXT"} = ".exe";
} else { } else {
$project{"TARGET_EXT"} = ".lib"; $project{"TARGET_EXT"} = ".a";
} }
} }
if ( Config("windows") ) { if ( Config("windows") ) {
...@@ -141,11 +141,9 @@ ...@@ -141,11 +141,9 @@
$project{"VER_MIN"} =~ s/^\d+\.//; $project{"VER_MIN"} =~ s/^\d+\.//;
} }
if ( Config("staticlib") ) { if ( Config("staticlib") ) {
$project{"TARGET"} = $project{"DESTDIR"} . "lib" . $project{"TARGET"} . $project{"TARGET"} = $project{"DESTDIR"} . "lib" . $project{"TARGET"}
$project{"TARGET_EXT"};
} else { } else {
$project{"TARGET"} = $project{"DESTDIR"} . $project{"TARGET"} . $project{"TARGET"} = $project{"DESTDIR"} . $project{"TARGET"}
$project{"TARGET_EXT"};
} }
#$} #$}
#! #!
......
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