Commit f62ec116 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.4-20031005

parent b740d594
DOXYGEN Version 1.3.4 DOXYGEN Version 1.3.4-20031005
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (22 September 2003) Dimitri van Heesch (05 October 2003)
DOXYGEN Version 1.3.4 DOXYGEN Version 1.3.4_20031005
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) (22 September 2003) Dimitri van Heesch (dimitri@stack.nl) (05 October 2003)
1.3.4 1.3.4-20031005
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.4 Version: 1.3.4_20031005
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
......
...@@ -40,6 +40,17 @@ ...@@ -40,6 +40,17 @@
#include "qfile.h" #include "qfile.h"
#include "qfiledefs_p.h" #include "qfiledefs_p.h"
#if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_)
# define HAS_TEXT_FILEMODE // has translate/text filemode
#endif
#if defined(O_NONBLOCK)
# define HAS_ASYNC_FILEMODE
# define OPEN_ASYNC O_NONBLOCK
#elif defined(O_NDELAY)
# define HAS_ASYNC_FILEMODE
# define OPEN_ASYNC O_NDELAY
#endif
bool qt_file_access( const QString& fn, int t ) bool qt_file_access( const QString& fn, int t )
{ {
if ( fn.isEmpty() ) if ( fn.isEmpty() )
......
...@@ -23,6 +23,17 @@ ...@@ -23,6 +23,17 @@
#include "qfile.h" #include "qfile.h"
#include "qfiledefs_p.h" #include "qfiledefs_p.h"
#if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_)
# define HAS_TEXT_FILEMODE // has translate/text filemode
#endif
#if defined(O_NONBLOCK)
# define HAS_ASYNC_FILEMODE
# define OPEN_ASYNC O_NONBLOCK
#elif defined(O_NDELAY)
# define HAS_ASYNC_FILEMODE
# define OPEN_ASYNC O_NDELAY
#endif
bool qt_file_access( const QString& fn, int t ) bool qt_file_access( const QString& fn, int t )
{ {
if ( fn.isEmpty() ) if ( fn.isEmpty() )
......
...@@ -853,7 +853,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -853,7 +853,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()); Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION"));
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
} }
...@@ -1428,9 +1428,10 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -1428,9 +1428,10 @@ void ClassDef::writeMemberList(OutputList &ol)
QCString name=mi->ambiguityResolutionScope+md->name(); QCString name=mi->ambiguityResolutionScope+md->name();
//ol.writeListItem(); //ol.writeListItem();
ol.writeString(" <tr class=\"memlist\"><td>"); ol.writeString(" <tr class=\"memlist\"><td>");
Definition *bd = md->getGroupDef(); //Definition *bd = md->getGroupDef();
if (bd==0) bd=cd; //if (bd==0) bd=cd;
ol.writeObjectLink(bd->getReference(),bd->getOutputFileBase(), ol.writeObjectLink(md->getReference(),
md->getOutputFileBase(),
md->anchor(),name); md->anchor(),name);
if ( md->isFunction() || md->isSignal() || md->isSlot() || if ( md->isFunction() || md->isSignal() || md->isSlot() ||
...@@ -2430,8 +2431,6 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName, ...@@ -2430,8 +2431,6 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
Debug::print(Debug::Classes,0," New template instance class %s%s\n",name().data(),templSpec.data()); Debug::print(Debug::Classes,0," New template instance class %s%s\n",name().data(),templSpec.data());
templateClass = new ClassDef( templateClass = new ClassDef(
fileName,startLine,name()+templSpec,ClassDef::Class); fileName,startLine,name()+templSpec,ClassDef::Class);
//templateClass->setBriefDescription(briefDescription());
//templateClass->setDocumentation(documentation());
templateClass->setTemplateMaster(this); templateClass->setTemplateMaster(this);
templateClass->setOuterScope(getOuterScope()); templateClass->setOuterScope(getOuterScope());
m_templateInstances->insert(templSpec,templateClass); m_templateInstances->insert(templSpec,templateClass);
...@@ -2486,6 +2485,7 @@ void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec) ...@@ -2486,6 +2485,7 @@ void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
imd->setTemplateMaster(md); imd->setTemplateMaster(md);
imd->setDocumentation(md->documentation(),md->docFile(),md->docLine()); imd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine()); imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
imd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
imd->setMemberSpecifiers(md->getMemberSpecifiers()); imd->setMemberSpecifiers(md->getMemberSpecifiers());
insertMember(imd); insertMember(imd);
//printf("Adding member=%s %s%s to class %s templSpec %s\n", //printf("Adding member=%s %s%s to class %s templSpec %s\n",
......
...@@ -355,15 +355,23 @@ static void startCodeLine() ...@@ -355,15 +355,23 @@ static void startCodeLine()
{ {
g_currentDefinition = d; g_currentDefinition = d;
g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr); g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
QCString anchor;
g_insideBody = FALSE; g_insideBody = FALSE;
g_searchingForBody = TRUE; g_searchingForBody = TRUE;
g_realScope = d->name().copy(); g_realScope = d->name().copy();
//printf("Real scope: `%s'\n",g_realScope.data()); //printf("Real scope: `%s'\n",g_realScope.data());
g_bodyCurlyCount = 0; g_bodyCurlyCount = 0;
if (g_currentMemberDef) anchor=g_currentMemberDef->getBodyAnchor(); if (g_currentMemberDef)
g_code->writeLineNumber(d->getReference(),d->getOutputFileBase(), {
anchor,g_yyLineNr); g_code->writeLineNumber(g_currentMemberDef->getReference(),
g_currentMemberDef->getOutputFileBase(),
g_currentMemberDef->anchor(),g_yyLineNr);
}
else
{
g_code->writeLineNumber(d->getReference(),
d->getOutputFileBase(),
0,g_yyLineNr);
}
} }
else else
{ {
...@@ -702,13 +710,13 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -702,13 +710,13 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
if (md) if (md)
{ {
//printf("is a global md=%p g_currentDefinition=%s\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>"); //printf("is a global md=%p g_currentDefinition=%s\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>");
Definition *d = md->getOuterScope()==Doxygen::globalScope ? //Definition *d = md->getOuterScope()==Doxygen::globalScope ?
md->getBodyDef() : md->getOuterScope(); // md->getBodyDef() : md->getOuterScope();
//printf("definition %s\n",d?d->name().data():"<none>"); //printf("definition %s\n",d?d->name().data():"<none>");
if (md->getGroupDef()) d = md->getGroupDef(); //if (md->getGroupDef()) d = md->getGroupDef();
if (d && d->isLinkable() && md->isLinkable()) if (md->isLinkable())
{ {
writeMultiLineCodeLink(ol,d->getReference(),d->getOutputFileBase(),md->getBodyAnchor(),clName); writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),clName);
if (g_currentMemberDef) if (g_currentMemberDef)
{ {
addDocCrossReference(g_currentMemberDef,md); addDocCrossReference(g_currentMemberDef,md);
...@@ -770,8 +778,10 @@ static bool getLink(const char *className, ...@@ -770,8 +778,10 @@ static bool getLink(const char *className,
} }
//printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data()); //printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data());
writeMultiLineCodeLink(ol,d->getReference(),d->getOutputFileBase(), writeMultiLineCodeLink(ol,md->getReference(),
md->getBodyAnchor(),text ? text : memberName); md->getOutputFileBase(),
md->anchor(),
text ? text : memberName);
return TRUE; return TRUE;
} }
} }
...@@ -822,8 +832,8 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const ...@@ -822,8 +832,8 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const
} }
// write the actual link // write the actual link
writeMultiLineCodeLink(ol,xd->getReference(), writeMultiLineCodeLink(ol,xmd->getReference(),
xd->getOutputFileBase(),xmd->getBodyAnchor(),memName); xmd->getOutputFileBase(),xmd->anchor(),memName);
return TRUE; return TRUE;
} }
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="id" /> <xsd:attribute name="id" />
<xsd:attribute name="kind" type="DoxCompoundKind" /> <xsd:attribute name="kind" type="DoxCompoundKind" />
<xsd:attribute name="prot" type="DoxProtectionKind" />
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="listofallmembersType"> <xsd:complexType name="listofallmembersType">
...@@ -104,6 +105,7 @@ ...@@ -104,6 +105,7 @@
<xsd:element name="exceptions" type="linkedTextType" minOccurs="0" /> <xsd:element name="exceptions" type="linkedTextType" minOccurs="0" />
<xsd:element name="briefdescription" type="descriptionType" minOccurs="0" /> <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
<xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" /> <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
<xsd:element name="inbodydescription" type="descriptionType" minOccurs="0" />
<xsd:element name="location" type="locationType" /> <xsd:element name="location" type="locationType" />
<xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
" </xsd:sequence>\n" " </xsd:sequence>\n"
" <xsd:attribute name=\"id\" />\n" " <xsd:attribute name=\"id\" />\n"
" <xsd:attribute name=\"kind\" type=\"DoxCompoundKind\" />\n" " <xsd:attribute name=\"kind\" type=\"DoxCompoundKind\" />\n"
" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
" </xsd:complexType>\n" " </xsd:complexType>\n"
"\n" "\n"
" <xsd:complexType name=\"listofallmembersType\">\n" " <xsd:complexType name=\"listofallmembersType\">\n"
...@@ -104,6 +105,7 @@ ...@@ -104,6 +105,7 @@
" <xsd:element name=\"exceptions\" type=\"linkedTextType\" minOccurs=\"0\" />\n" " <xsd:element name=\"exceptions\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
" <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n" " <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
" <xsd:element name=\"detaileddescription\" type=\"descriptionType\" minOccurs=\"0\" />\n" " <xsd:element name=\"detaileddescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
" <xsd:element name=\"inbodydescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
" <xsd:element name=\"location\" type=\"locationType\" />\n" " <xsd:element name=\"location\" type=\"locationType\" />\n"
" <xsd:element name=\"references\" type=\"referenceType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" " <xsd:element name=\"references\" type=\"referenceType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
" <xsd:element name=\"referencedby\" type=\"referenceType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" " <xsd:element name=\"referencedby\" type=\"referenceType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
......
...@@ -1841,7 +1841,9 @@ void Config::create() ...@@ -1841,7 +1841,9 @@ void Config::create()
cb = addBool( cb = addBool(
"SOURCE_BROWSER", "SOURCE_BROWSER",
"If the SOURCE_BROWSER tag is set to YES then a list of source files will \n" "If the SOURCE_BROWSER tag is set to YES then a list of source files will \n"
"be generated. Documented entities will be cross-referenced with these sources. \n", "be generated. Documented entities will be cross-referenced with these sources. \n"
"Note: To get rid of all source code in the generated output, make sure also \n"
"VERBATIM_HEADERS is set to NO. \n",
FALSE FALSE
); );
cb = addBool( cb = addBool(
......
...@@ -103,7 +103,7 @@ void generateDEFForMember(MemberDef *md, ...@@ -103,7 +103,7 @@ void generateDEFForMember(MemberDef *md,
t << memPrefix << "kind = '" << memType << "';" << endl; t << memPrefix << "kind = '" << memType << "';" << endl;
t << memPrefix << "id = '" t << memPrefix << "id = '"
<< def->getOutputFileBase() << "_1" << md->anchor() << md->getOutputFileBase() << "_1" << md->anchor()
<< "';" << endl; << "';" << endl;
t << memPrefix << "virt = "; t << memPrefix << "virt = ";
......
...@@ -51,12 +51,13 @@ static void addToMap(const char *name,Definition *d) ...@@ -51,12 +51,13 @@ static void addToMap(const char *name,Definition *d)
} }
//printf("******* adding symbol `%s'\n",symbolName.data()); //printf("******* adding symbol `%s'\n",symbolName.data());
dl->append(d); dl->append(d);
d->setSymbolName(symbolName);
} }
} }
static void removeFromMap(Definition *d) static void removeFromMap(Definition *d)
{ {
QCString symbolName = d->name(); QCString symbolName = d->symbolName();
int index=symbolName.findRev("::"); int index=symbolName.findRev("::");
if (index!=-1) symbolName=symbolName.mid(index+2); if (index!=-1) symbolName=symbolName.mid(index+2);
if (!symbolName.isEmpty()) if (!symbolName.isEmpty())
...@@ -510,8 +511,8 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName, ...@@ -510,8 +511,8 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName,
if (md->isFunction() || md->isSlot() || if (md->isFunction() || md->isSlot() ||
md->isPrototype() || md->isSignal() md->isPrototype() || md->isSignal()
) name+="()"; ) name+="()";
Definition *d = md->getOuterScope(); //Definition *d = md->getOutputFileBase();
if (d==Doxygen::globalScope) d=md->getBodyDef(); //if (d==Doxygen::globalScope) d=md->getBodyDef();
if (md->getStartBodyLine()!=-1 && md->getBodyDef()) if (md->getStartBodyLine()!=-1 && md->getBodyDef())
{ {
//printf("md->getBodyDef()=%p global=%p\n",md->getBodyDef(),Doxygen::globalScope); //printf("md->getBodyDef()=%p global=%p\n",md->getBodyDef(),Doxygen::globalScope);
...@@ -530,12 +531,13 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName, ...@@ -530,12 +531,13 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName,
ol.docify(name); ol.docify(name);
ol.popGeneratorState(); ol.popGeneratorState();
} }
else if (md->isLinkable() && d && d->isLinkable()) else if (md->isLinkable() /*&& d && d->isLinkable()*/)
{ {
// for HTML write a real link // for HTML write a real link
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(), ol.writeObjectLink(md->getReference(),
md->getOutputFileBase(),
md->anchor(),name); md->anchor(),name);
ol.popGeneratorState(); ol.popGeneratorState();
......
...@@ -84,6 +84,10 @@ class Definition ...@@ -84,6 +84,10 @@ class Definition
virtual bool isLinkable() const = 0; virtual bool isLinkable() const = 0;
virtual QCString getReference() const { return m_ref; } virtual QCString getReference() const { return m_ref; }
// symbols
QCString symbolName() const { return m_symbolName; }
void setSymbolName(const QCString &name) { m_symbolName=name; }
virtual bool isReference() const { return !m_ref.isEmpty(); } virtual bool isReference() const { return !m_ref.isEmpty(); }
void setReference(const char *r) { m_ref=r; } void setReference(const char *r) { m_ref=r; }
...@@ -174,6 +178,7 @@ class Definition ...@@ -174,6 +178,7 @@ class Definition
int m_briefLine; int m_briefLine;
QCString m_briefFile; QCString m_briefFile;
QList<ListItemInfo> *m_xrefListItems; QList<ListItemInfo> *m_xrefListItems;
QCString m_symbolName;
}; };
class DefinitionList : public QList<Definition> class DefinitionList : public QList<Definition>
......
...@@ -705,8 +705,8 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) ...@@ -705,8 +705,8 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
{ {
children.append(new children.append(new
DocLinkedWord(parent,name, DocLinkedWord(parent,name,
compound->getReference(), member->getReference(),
compound->getOutputFileBase(), member->getOutputFileBase(),
member->anchor() member->anchor()
) )
); );
......
...@@ -1886,25 +1886,10 @@ DotCallGraph::DotCallGraph(MemberDef *md,int maxRecursionDepth) ...@@ -1886,25 +1886,10 @@ DotCallGraph::DotCallGraph(MemberDef *md,int maxRecursionDepth)
{ {
m_maxDistance = 0; m_maxDistance = 0;
m_recDepth = maxRecursionDepth; m_recDepth = maxRecursionDepth;
if (md->getGroupDef())
{
m_diskName = md->getGroupDef()->getOutputFileBase()+"_"+md->getBodyAnchor();
}
else
{
m_diskName = md->getOutputFileBase()+"_"+md->anchor(); m_diskName = md->getOutputFileBase()+"_"+md->anchor();
}
QCString uniqueId; QCString uniqueId;
if (md->getGroupDef()) // member is in a group
{
uniqueId = md->getReference()+"$"+
md->getGroupDef()->getOutputFileBase()+"#"+md->getBodyAnchor();
}
else // ungrouped member
{
uniqueId = md->getReference()+"$"+ uniqueId = md->getReference()+"$"+
md->getOutputFileBase()+"#"+md->anchor(); md->getOutputFileBase()+"#"+md->anchor();
}
m_startNode = new DotNode(m_curNodeNumber++, m_startNode = new DotNode(m_curNodeNumber++,
md->qualifiedName(), md->qualifiedName(),
uniqueId.data(), uniqueId.data(),
...@@ -2049,16 +2034,8 @@ void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance) ...@@ -2049,16 +2034,8 @@ void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance)
if (rmd->isFunction()) if (rmd->isFunction())
{ {
QCString uniqueId; QCString uniqueId;
if (rmd->getGroupDef()) // member is in a group
{
uniqueId = rmd->getReference()+"$"+
rmd->getGroupDef()->getOutputFileBase()+"#"+rmd->getBodyAnchor();
}
else // ungrouped member
{
uniqueId=rmd->getReference()+"$"+ uniqueId=rmd->getReference()+"$"+
rmd->getOutputFileBase()+"#"+rmd->anchor(); rmd->getOutputFileBase()+"#"+rmd->anchor();
}
DotNode *bn = m_usedNodes->find(uniqueId); DotNode *bn = m_usedNodes->find(uniqueId);
if (bn) // file is already a node in the graph if (bn) // file is already a node in the graph
{ {
......
...@@ -1298,11 +1298,13 @@ static void findUsingDeclImports(Entry *root) ...@@ -1298,11 +1298,13 @@ static void findUsingDeclImports(Entry *root)
{ {
newMd->setDocumentation(root->doc,root->docFile,root->docLine); newMd->setDocumentation(root->doc,root->docFile,root->docLine);
newMd->setBriefDescription(root->brief,root->briefFile,root->briefLine); newMd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
newMd->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
} }
else else
{ {
newMd->setDocumentation(md->documentation(),md->docFile(),md->docLine()); newMd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
newMd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine()); newMd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
newMd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
} }
newMd->setDefinition(md->definition()); newMd->setDefinition(md->definition());
newMd->enableCallGraph(root->callGraph); newMd->enableCallGraph(root->callGraph);
...@@ -1453,6 +1455,7 @@ static MemberDef *addVariableToClass( ...@@ -1453,6 +1455,7 @@ static MemberDef *addVariableToClass(
//md->setDefLine(root->startLine); //md->setDefLine(root->startLine);
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDefinition(def); md->setDefinition(def);
md->setBitfields(root->bitfields); md->setBitfields(root->bitfields);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
...@@ -1599,8 +1602,9 @@ static MemberDef *addVariableToFile( ...@@ -1599,8 +1602,9 @@ static MemberDef *addVariableToFile(
// merge ingroup specifiers // merge ingroup specifiers
if (md->getGroupDef()==0 && root->groups->first()) if (md->getGroupDef()==0 && root->groups->first())
{ {
GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()]; //GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()];
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty()); //md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty());
addMemberToGroups(root,md);
} }
else if (md->getGroupDef()!=0 && root->groups->count()==0) else if (md->getGroupDef()!=0 && root->groups->count()==0)
{ {
...@@ -1624,6 +1628,7 @@ static MemberDef *addVariableToFile( ...@@ -1624,6 +1628,7 @@ static MemberDef *addVariableToFile(
//md->setDefLine(root->startLine); //md->setDefLine(root->startLine);
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
md->setFromAnonymousScope(fromAnnScope); md->setFromAnonymousScope(fromAnnScope);
md->setFromAnonymousMember(fromAnnMemb); md->setFromAnonymousMember(fromAnnMemb);
...@@ -2041,6 +2046,7 @@ static void addMethodToClass(Entry *root,ClassDef *cd, ...@@ -2041,6 +2046,7 @@ static void addMethodToClass(Entry *root,ClassDef *cd,
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setMemberSpecifiers(root->memSpec); md->setMemberSpecifiers(root->memSpec);
md->setMemberGroupId(root->mGrpId); md->setMemberGroupId(root->mGrpId);
...@@ -2289,6 +2295,7 @@ static void buildFunctionList(Entry *root) ...@@ -2289,6 +2295,7 @@ static void buildFunctionList(Entry *root)
if (md->documentation().isEmpty() && !root->doc.isEmpty()) if (md->documentation().isEmpty() && !root->doc.isEmpty())
{ {
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
ArgumentList *argList = new ArgumentList; ArgumentList *argList = new ArgumentList;
stringToArgumentList(root->args,argList); stringToArgumentList(root->args,argList);
...@@ -2346,14 +2353,15 @@ static void buildFunctionList(Entry *root) ...@@ -2346,14 +2353,15 @@ static void buildFunctionList(Entry *root)
// the documented implementation below it from being added // the documented implementation below it from being added
//addMemberToGroups(root,md); //addMemberToGroups(root,md);
//GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()]; //GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()];
if (gd) //if (gd)
{ //{
bool success = gd->insertMember(md); // bool success = gd->insertMember(md);
if (success) // if (success)
{ // {
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty()); // md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty());
} // }
} //}
addMemberToGroups(root,md);
} }
else if (md->getGroupDef()!=0 && root->groups->count()==0) else if (md->getGroupDef()!=0 && root->groups->count()==0)
{ {
...@@ -2391,6 +2399,7 @@ static void buildFunctionList(Entry *root) ...@@ -2391,6 +2399,7 @@ static void buildFunctionList(Entry *root)
//md->setDefLine(root->startLine); //md->setDefLine(root->startLine);
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setPrototype(root->proto); md->setPrototype(root->proto);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
//md->setBody(root->body); //md->setBody(root->body);
...@@ -2565,18 +2574,26 @@ static void findFriends() ...@@ -2565,18 +2574,26 @@ static void findFriends()
{ {
fmd->setBriefDescription(mmd->briefDescription(),mmd->briefFile(),mmd->briefLine()); fmd->setBriefDescription(mmd->briefDescription(),mmd->briefFile(),mmd->briefLine());
} }
if (!fmd->inbodyDocumentation().isEmpty())
{
mmd->setInbodyDocumentation(fmd->inbodyDocumentation(),fmd->inbodyFile(),fmd->inbodyLine());
}
else if (!mmd->inbodyDocumentation().isEmpty())
{
fmd->setInbodyDocumentation(mmd->inbodyDocumentation(),mmd->inbodyFile(),mmd->inbodyLine());
}
//printf("body mmd %d fmd %d\n",mmd->getStartBodyLine(),fmd->getStartBodyLine()); //printf("body mmd %d fmd %d\n",mmd->getStartBodyLine(),fmd->getStartBodyLine());
if (mmd->getStartBodyLine()==-1 && fmd->getStartBodyLine()!=-1) if (mmd->getStartBodyLine()==-1 && fmd->getStartBodyLine()!=-1)
{ {
mmd->setBodySegment(fmd->getStartBodyLine(),fmd->getEndBodyLine()); mmd->setBodySegment(fmd->getStartBodyLine(),fmd->getEndBodyLine());
mmd->setBodyDef(fmd->getBodyDef()); mmd->setBodyDef(fmd->getBodyDef());
mmd->setBodyMember(fmd); //mmd->setBodyMember(fmd);
} }
else if (mmd->getStartBodyLine()!=-1 && fmd->getStartBodyLine()==-1) else if (mmd->getStartBodyLine()!=-1 && fmd->getStartBodyLine()==-1)
{ {
fmd->setBodySegment(mmd->getStartBodyLine(),mmd->getEndBodyLine()); fmd->setBodySegment(mmd->getStartBodyLine(),mmd->getEndBodyLine());
fmd->setBodyDef(mmd->getBodyDef()); fmd->setBodyDef(mmd->getBodyDef());
fmd->setBodyMember(mmd); //fmd->setBodyMember(mmd);
} }
mmd->setDocsForDefinition(fmd->isDocsForDefinition()); mmd->setDocsForDefinition(fmd->isDocsForDefinition());
...@@ -2696,19 +2713,27 @@ static void transferFunctionDocumentation() ...@@ -2696,19 +2713,27 @@ static void transferFunctionDocumentation()
mdef->setDeclArgumentList(mdecAl); mdef->setDeclArgumentList(mdecAl);
} }
} }
if (!mdef->inbodyDocumentation().isEmpty())
{
mdec->setInbodyDocumentation(mdef->inbodyDocumentation(),mdef->inbodyFile(),mdef->inbodyLine());
}
else if (!mdec->inbodyDocumentation().isEmpty())
{
mdef->setInbodyDocumentation(mdec->inbodyDocumentation(),mdec->inbodyFile(),mdec->inbodyLine());
}
if (mdec->getStartBodyLine()!=-1 && mdef->getStartBodyLine()==-1) if (mdec->getStartBodyLine()!=-1 && mdef->getStartBodyLine()==-1)
{ {
//printf("body mdec->mdef %d-%d\n",mdec->getStartBodyLine(),mdef->getEndBodyLine()); //printf("body mdec->mdef %d-%d\n",mdec->getStartBodyLine(),mdef->getEndBodyLine());
mdef->setBodySegment(mdec->getStartBodyLine(),mdec->getEndBodyLine()); mdef->setBodySegment(mdec->getStartBodyLine(),mdec->getEndBodyLine());
mdef->setBodyDef(mdec->getBodyDef()); mdef->setBodyDef(mdec->getBodyDef());
mdef->setBodyMember(mdec); //mdef->setBodyMember(mdec);
} }
else if (mdef->getStartBodyLine()!=-1 && mdec->getStartBodyLine()==-1) else if (mdef->getStartBodyLine()!=-1 && mdec->getStartBodyLine()==-1)
{ {
//printf("body mdef->mdec %d-%d\n",mdef->getStartBodyLine(),mdec->getEndBodyLine()); //printf("body mdef->mdec %d-%d\n",mdef->getStartBodyLine(),mdec->getEndBodyLine());
mdec->setBodySegment(mdef->getStartBodyLine(),mdef->getEndBodyLine()); mdec->setBodySegment(mdef->getStartBodyLine(),mdef->getEndBodyLine());
mdec->setBodyDef(mdef->getBodyDef()); mdec->setBodyDef(mdef->getBodyDef());
mdec->setBodyMember(mdef); //mdec->setBodyMember(mdef);
} }
mdec->mergeMemberSpecifiers(mdef->getMemberSpecifiers()); mdec->mergeMemberSpecifiers(mdef->getMemberSpecifiers());
mdef->mergeMemberSpecifiers(mdec->getMemberSpecifiers()); mdef->mergeMemberSpecifiers(mdec->getMemberSpecifiers());
...@@ -3902,6 +3927,7 @@ static void addMemberDocs(Entry *root, ...@@ -3902,6 +3927,7 @@ static void addMemberDocs(Entry *root,
doc+=root->doc; doc+=root->doc;
} }
md->setDocumentation(doc,root->docFile,root->docLine); md->setDocumentation(doc,root->docFile,root->docLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
} }
else else
...@@ -3937,6 +3963,15 @@ static void addMemberDocs(Entry *root, ...@@ -3937,6 +3963,15 @@ static void addMemberDocs(Entry *root,
//printf("overwrite!\n"); //printf("overwrite!\n");
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
} }
if (
(md->inbodyDocumentation().isEmpty() ||
!root->parent->name.isEmpty()
) && !root->inbodyDocs.isEmpty()
)
{
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
}
} }
if (md->initializer().isEmpty() && !root->initializer.isEmpty()) if (md->initializer().isEmpty() && !root->initializer.isEmpty())
...@@ -4815,6 +4850,7 @@ static void findMember(Entry *root, ...@@ -4815,6 +4850,7 @@ static void findMember(Entry *root,
doc+="<p>"; doc+="<p>";
doc+=root->doc; doc+=root->doc;
md->setDocumentation(doc,root->docFile,root->docLine); md->setDocumentation(doc,root->docFile,root->docLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
md->setPrototype(root->proto); md->setPrototype(root->proto);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
...@@ -4946,7 +4982,7 @@ static void findMember(Entry *root, ...@@ -4946,7 +4982,7 @@ static void findMember(Entry *root,
{ {
md->setBodySegment(rmd->getStartBodyLine(),rmd->getEndBodyLine()); md->setBodySegment(rmd->getStartBodyLine(),rmd->getEndBodyLine());
md->setBodyDef(rmd->getBodyDef()); md->setBodyDef(rmd->getBodyDef());
md->setBodyMember(rmd); //md->setBodyMember(rmd);
} }
} }
} }
...@@ -4968,6 +5004,7 @@ static void findMember(Entry *root, ...@@ -4968,6 +5004,7 @@ static void findMember(Entry *root,
md->setDefinition(funcDecl); md->setDefinition(funcDecl);
md->enableCallGraph(root->callGraph); md->enableCallGraph(root->callGraph);
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
md->setPrototype(root->proto); md->setPrototype(root->proto);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
...@@ -5275,6 +5312,7 @@ static void findEnums(Entry *root) ...@@ -5275,6 +5312,7 @@ static void findEnums(Entry *root)
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
//printf("Adding member=%s\n",md->name().data()); //printf("Adding member=%s\n",md->name().data());
MemberName *mn; MemberName *mn;
...@@ -5417,6 +5455,11 @@ static void findEnumDocumentation(Entry *root) ...@@ -5417,6 +5455,11 @@ static void findEnumDocumentation(Entry *root)
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
} }
if (!md->inbodyDocumentation() || !root->parent->name.isEmpty())
{
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
}
if (root->mGrpId!=-1 && md->getMemberGroupId()==-1) if (root->mGrpId!=-1 && md->getMemberGroupId()==-1)
{ {
md->setMemberGroupId(root->mGrpId); md->setMemberGroupId(root->mGrpId);
...@@ -5441,6 +5484,7 @@ static void findEnumDocumentation(Entry *root) ...@@ -5441,6 +5484,7 @@ static void findEnumDocumentation(Entry *root)
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
md->setMemberGroupId(root->mGrpId); md->setMemberGroupId(root->mGrpId);
found=TRUE; found=TRUE;
...@@ -5858,6 +5902,7 @@ static void inheritDocumentation() ...@@ -5858,6 +5902,7 @@ static void inheritDocumentation()
md->setDocumentation(bmd->documentation(),bmd->docFile(),bmd->docLine()); md->setDocumentation(bmd->documentation(),bmd->docFile(),bmd->docLine());
md->setDocsForDefinition(bmd->isDocsForDefinition()); md->setDocsForDefinition(bmd->isDocsForDefinition());
md->setBriefDescription(bmd->briefDescription(),bmd->briefFile(),bmd->briefLine()); md->setBriefDescription(bmd->briefDescription(),bmd->briefFile(),bmd->briefLine());
md->setInbodyDocumentation(bmd->inbodyDocumentation(),bmd->inbodyFile(),bmd->inbodyLine());
} }
} }
} }
...@@ -6089,7 +6134,13 @@ static void findDefineDocumentation(Entry *root) ...@@ -6089,7 +6134,13 @@ static void findDefineDocumentation(Entry *root)
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
} }
if (md->briefDescription().isEmpty()) if (md->briefDescription().isEmpty())
{
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
}
if (md->inbodyDocumentation().isEmpty())
{
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
}
md->setBodySegment(root->bodyLine,root->endBodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
...@@ -6126,7 +6177,13 @@ static void findDefineDocumentation(Entry *root) ...@@ -6126,7 +6177,13 @@ static void findDefineDocumentation(Entry *root)
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
} }
if (md->briefDescription().isEmpty()) if (md->briefDescription().isEmpty())
{
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
}
if (md->inbodyDocumentation().isEmpty())
{
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
}
md->setBodySegment(root->bodyLine,root->endBodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
...@@ -8101,7 +8158,6 @@ void parseInput() ...@@ -8101,7 +8158,6 @@ void parseInput()
msg("Adding source references...\n"); msg("Adding source references...\n");
addSourceReferences(); addSourceReferences();
msg("Adding todo/test/bug list items...\n"); msg("Adding todo/test/bug list items...\n");
addListReferences(); addListReferences();
......
...@@ -74,6 +74,9 @@ Entry::Entry(const Entry &e) ...@@ -74,6 +74,9 @@ Entry::Entry(const Entry &e)
brief = e.brief.copy(); brief = e.brief.copy();
briefLine = e.briefLine; briefLine = e.briefLine;
briefFile = e.briefFile.copy(); briefFile = e.briefFile.copy();
inbodyDocs = e.inbodyDocs.copy();
inbodyLine = e.inbodyLine;
inbodyFile = e.inbodyFile.copy();
inside = e.inside.copy(); inside = e.inside.copy();
fileName = e.fileName.copy(); fileName = e.fileName.copy();
startLine = e.startLine; startLine = e.startLine;
...@@ -233,6 +236,9 @@ void Entry::reset() ...@@ -233,6 +236,9 @@ void Entry::reset()
brief.resize(0); brief.resize(0);
briefFile.resize(0); briefFile.resize(0);
briefLine=-1; briefLine=-1;
inbodyDocs.resize(0);
inbodyFile.resize(0);
inbodyLine=-1;
inside.resize(0); inside.resize(0);
fileName.resize(0); fileName.resize(0);
//scopeSpec.resize(0); //scopeSpec.resize(0);
...@@ -285,6 +291,8 @@ int Entry::getSize() ...@@ -285,6 +291,8 @@ int Entry::getSize()
size+=relates.length()+1; size+=relates.length()+1;
size+=brief.length()+1; size+=brief.length()+1;
size+=briefFile.length()+1; size+=briefFile.length()+1;
size+=inbodyDocs.length()+1;
size+=inbodyFile.length()+1;
size+=inside.length()+1; size+=inside.length()+1;
size+=fileName.length()+1; size+=fileName.length()+1;
size+=initializer.length()+1; size+=initializer.length()+1;
......
...@@ -274,6 +274,9 @@ class Entry ...@@ -274,6 +274,9 @@ class Entry
QCString brief; //!< brief description (doc block) QCString brief; //!< brief description (doc block)
int briefLine; //!< line number at which the brief desc. was found int briefLine; //!< line number at which the brief desc. was found
QCString briefFile; //!< file in which the brief desc. was found QCString briefFile; //!< file in which the brief desc. was found
QCString inbodyDocs; //!< documentation inside the body of a function
int inbodyLine; //!< line number at which the body doc was found
QCString inbodyFile; //!< file in which the body doc was found
QCString relates; //!< related class (doc block) QCString relates; //!< related class (doc block)
bool relatesDup; //!< keep duplicate doc in original file also bool relatesDup; //!< keep duplicate doc in original file also
QCString inside; //!< name of the class in which documents are found QCString inside; //!< name of the class in which documents are found
......
...@@ -223,7 +223,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -223,7 +223,7 @@ void FileDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()); Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION"));
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
} }
......
...@@ -208,6 +208,7 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -208,6 +208,7 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
sameScope sameScope
) )
{ {
md->setGroupAlias(srcMd);
return FALSE; // member already added return FALSE; // member already added
} }
} }
...@@ -364,9 +365,10 @@ int GroupDef::countMembers() const ...@@ -364,9 +365,10 @@ int GroupDef::countMembers() const
exampleDict->count(); exampleDict->count();
} }
/*! Compute the HTML anchor names for all members in the class */ /*! Compute the HTML anchor names for all members in the group */
void GroupDef::computeAnchors() void GroupDef::computeAnchors()
{ {
//printf("GroupDef::computeAnchors()\n");
setAnchors(0,'a',allMemberList); setAnchors(0,'a',allMemberList);
} }
...@@ -416,7 +418,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -416,7 +418,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase()); Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION"));
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
} }
......
...@@ -1407,7 +1407,10 @@ void HtmlGenerator::writeSearchPage() ...@@ -1407,7 +1407,10 @@ void HtmlGenerator::writeSearchPage()
} }
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen " t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
<< versionString << " -->" << endl; << versionString << " -->" << endl;
if (!Config_getBool("DISABLE_INDEX"))
{
writeDefaultQuickLinks(t,TRUE,HLI_Search); writeDefaultQuickLinks(t,TRUE,HLI_Search);
}
t << "<?php \n\n"; t << "<?php \n\n";
t << "function search_results()\n"; t << "function search_results()\n";
......
...@@ -1679,14 +1679,14 @@ void writeMemberList(OutputList &ol,bool useSections,ClassMemberHighlight filter ...@@ -1679,14 +1679,14 @@ void writeMemberList(OutputList &ol,bool useSections,ClassMemberHighlight filter
if ( if (
md->isLinkableInProject() && md->isLinkableInProject() &&
prevName!=cd->displayName() && prevName!=cd->displayName() &&
cd->isLinkableInProject() && cd->templateMaster()==0 cd->templateMaster()==0
) )
{ {
if (count==0) if (count==0)
ol.docify(": "); ol.docify(": ");
else else
ol.docify(", "); ol.docify(", ");
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),md->anchor(), ol.writeObjectLink(md->getReference(),md->getOutputFileBase(),md->anchor(),
cd->displayName()); cd->displayName());
count++; count++;
prevName=cd->displayName(); prevName=cd->displayName();
...@@ -1965,9 +1965,7 @@ static void writeFileMemberList(OutputList &ol, ...@@ -1965,9 +1965,7 @@ static void writeFileMemberList(OutputList &ol,
while (md) while (md)
{ {
FileDef *fd=md->getFileDef(); FileDef *fd=md->getFileDef();
bool hasDocs = md->getFileDef() && if (fd && fd->isLinkableInProject() &&
md->getFileDef()->isLinkableInProject();
if (fd && hasDocs &&
md->isLinkableInProject() && md->isLinkableInProject() &&
prevName!=fd->name()) prevName!=fd->name())
{ {
...@@ -1975,9 +1973,9 @@ static void writeFileMemberList(OutputList &ol, ...@@ -1975,9 +1973,9 @@ static void writeFileMemberList(OutputList &ol,
ol.docify(": "); ol.docify(": ");
else else
ol.docify(", "); ol.docify(", ");
QCString baseName=fd->name().copy(); QCString baseName=fd->name();
ol.writeObjectLink(fd->getReference(), ol.writeObjectLink(md->getReference(),
fd->getOutputFileBase(),md->anchor(), baseName); md->getOutputFileBase(),md->anchor(), baseName);
count++; count++;
prevName=fd->name(); prevName=fd->name();
} }
...@@ -2064,7 +2062,7 @@ void writeNamespaceMemberList(OutputList &ol,bool useSections, ...@@ -2064,7 +2062,7 @@ void writeNamespaceMemberList(OutputList &ol,bool useSections,
ol.docify(": "); ol.docify(": ");
else else
ol.docify(", "); ol.docify(", ");
ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(), ol.writeObjectLink(md->getReference(),md->getOutputFileBase(),
md->anchor(),nd->name()); md->anchor(),nd->name());
count++; count++;
prevName=nd->name(); prevName=nd->name();
...@@ -2734,14 +2732,13 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2734,14 +2732,13 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
ftvHelp->incContentsDepth(); ftvHelp->incContentsDepth();
} }
} }
GroupDef *gd=md->getGroupDef();
if(htmlHelp) if(htmlHelp)
{ {
htmlHelp->addContentsItem(FALSE,md->name(),gd->getOutputFileBase(),md->anchor()); htmlHelp->addContentsItem(FALSE,md->name(),md->getOutputFileBase(),md->anchor());
} }
if(ftvHelp) if(ftvHelp)
{ {
ftvHelp->addContentsItem(FALSE,gd->getReference(),gd->getOutputFileBase(),md->anchor(),md->name()); ftvHelp->addContentsItem(FALSE,md->getReference(),md->getOutputFileBase(),md->anchor(),md->name());
} }
} }
md=members->next(); md=members->next();
......
...@@ -316,7 +316,7 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -316,7 +316,7 @@ MemberDef::MemberDef(const char *df,int dl,
annEnumType=0; annEnumType=0;
//indDepth=0; //indDepth=0;
section=0; section=0;
bodyMemb=0; groupAlias=0;
explExt=FALSE; explExt=FALSE;
cachedAnonymousType=0; cachedAnonymousType=0;
maxInitLines=Config_getInt("MAX_INITIALIZER_LINES"); maxInitLines=Config_getInt("MAX_INITIALIZER_LINES");
...@@ -377,6 +377,7 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -377,6 +377,7 @@ MemberDef::MemberDef(const char *df,int dl,
docsForDefinition = TRUE; docsForDefinition = TRUE;
m_isTypedefValCached = FALSE; m_isTypedefValCached = FALSE;
m_cachedTypedefValue = 0; m_cachedTypedefValue = 0;
m_inbodyLine = -1;
} }
/*! Destroys the member definition. */ /*! Destroys the member definition. */
...@@ -461,6 +462,10 @@ QCString MemberDef::getOutputFileBase() const ...@@ -461,6 +462,10 @@ QCString MemberDef::getOutputFileBase() const
{ {
return m_templateMaster->getOutputFileBase(); return m_templateMaster->getOutputFileBase();
} }
else if (group)
{
return group->getOutputFileBase();
}
else if (classDef) else if (classDef)
{ {
return classDef->getOutputFileBase(); return classDef->getOutputFileBase();
...@@ -469,10 +474,6 @@ QCString MemberDef::getOutputFileBase() const ...@@ -469,10 +474,6 @@ QCString MemberDef::getOutputFileBase() const
{ {
return nspace->getOutputFileBase(); return nspace->getOutputFileBase();
} }
//else if (group)
//{
// return group->getOutputFileBase();
//}
else if (fileDef) else if (fileDef)
{ {
return fileDef->getOutputFileBase(); return fileDef->getOutputFileBase();
...@@ -484,6 +485,105 @@ QCString MemberDef::getOutputFileBase() const ...@@ -484,6 +485,105 @@ QCString MemberDef::getOutputFileBase() const
return "dummy"; return "dummy";
} }
QCString MemberDef::getReference() const
{
if (m_templateMaster)
{
return m_templateMaster->getReference();
}
else if (group)
{
return group->getReference();
}
else if (classDef)
{
return classDef->getReference();
}
else if (nspace)
{
return nspace->getReference();
}
else if (fileDef)
{
return fileDef->getReference();
}
return "";
}
QCString MemberDef::anchor() const
{
QCString result=anc;
if (groupAlias) return groupAlias->anchor();
if (m_templateMaster) return m_templateMaster->anchor();
if (enumScope) result.prepend(enumScope->anchor());
if (group) result.prepend("g");
return result;
}
bool MemberDef::isLinkableInProject() const
{
//printf("MemberDef::isLinkableInProject()\n");
if (m_templateMaster)
{
return m_templateMaster->isLinkableInProject();
}
if (name().isEmpty() || name().at(0)=='@')
{
//printf("name invalid\n");
return FALSE; // not a valid or a dummy name
}
if (!hasDocumentation() && !isReference())
{
//printf("no docs or reference\n");
return FALSE; // no documentation
}
if (group && !group->isLinkableInProject())
{
//printf("group but group not linkable!\n");
return FALSE; // group but group not linkable
}
if (!group && classDef && !classDef->isLinkableInProject())
{
//printf("in a class but class not linkable!\n");
return FALSE; // in class but class not linkable
}
if (!group && nspace && !nspace->isLinkableInProject())
{
//printf("in a namespace but namespace not linkable!\n");
return FALSE; // in namespace but namespace not linkable
}
if (!group && fileDef && !fileDef->isLinkableInProject())
{
//printf("in a file but file not linkable!\n");
return FALSE; // in file but file not linkable
}
if (prot==Private && !Config_getBool("EXTRACT_PRIVATE") && mtype!=Friend)
{
//printf("private and invisible!\n");
return FALSE; // hidden due to protection
}
if (isStatic() && classDef==0 && !Config_getBool("EXTRACT_STATIC"))
{
//printf("static and invisible!\n");
return FALSE; // hidden due to staticness
}
//printf("linkable!\n");
return TRUE; // linkable!
}
bool MemberDef::isLinkable() const
{
if (m_templateMaster)
{
return m_templateMaster->isLinkable();
}
else
{
return isLinkableInProject() || isReference();
}
}
void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
{ {
if (lists) if (lists)
...@@ -493,24 +593,24 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) ...@@ -493,24 +593,24 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
} }
} }
void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd, void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
FileDef *fd,GroupDef *gd) FileDef *,GroupDef *gd)
{ {
Definition *d=0; //Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd; //if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd;
if (d==0) { err("Member %s without definition! Please report this bug!\n",name().data()); return; } //if (d==0) { err("Member %s without definition! Please report this bug!\n",name().data()); return; }
if (group!=0 && gd==0) // forward link to the group //if (group!=0 && gd==0) // forward link to the group
{ //{
ol.writeObjectLink(group->getReference(),group->getOutputFileBase(),anchor(),name()); // ol.writeObjectLink(group->getReference(),group->getOutputFileBase(),anchor(),name());
} //}
else // local link //else // local link
{ //{
QCString sep = Config_getBool("OPTIMIZE_OUTPUT_JAVA") ? "." : "::"; QCString sep = Config_getBool("OPTIMIZE_OUTPUT_JAVA") ? "." : "::";
QCString n = name(); QCString n = name();
if (classDef && gd) n.prepend(classDef->name()+sep); if (classDef && gd) n.prepend(classDef->name()+sep);
else if (nspace && gd) n.prepend(nspace->name()+sep); else if (nspace && gd) n.prepend(nspace->name()+sep);
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),anchor(),n); ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
} //}
} }
/*! If this member has an anonymous class/struct/union as its type, then /*! If this member has an anonymous class/struct/union as its type, then
...@@ -714,24 +814,24 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -714,24 +814,24 @@ void MemberDef::writeDeclaration(OutputList &ol,
Doxygen::tagFile << " </member>" << endl; Doxygen::tagFile << " </member>" << endl;
} }
// write search index info
if (Config_getBool("SEARCHENGINE"))
{
Doxygen::searchIndex->setCurrentDoc(qualifiedName(),getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION")+"#"+anchor());
Doxygen::searchIndex->addWord(localName().lower());
Doxygen::searchIndex->addWord(qualifiedName().lower());
}
Definition *d=0; Definition *d=0;
ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
QCString cname = d->name(); QCString cname = d->name();
QCString cfname = d->getOutputFileBase(); QCString cfname = getOutputFileBase();
QCString osname = cname; QCString osname = cname;
// in case of class members that are put in a group the name of the outerscope // in case of class members that are put in a group the name of the outerscope
// differs from the cname. // differs from the cname.
if (getOuterScope()) osname=getOuterScope()->name(); if (getOuterScope()) osname=getOuterScope()->name();
if (Config_getBool("SEARCHENGINE"))
{
Doxygen::searchIndex->setCurrentDoc(qualifiedName(),getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION")+"#"+anchor());
Doxygen::searchIndex->addWord(localName().lower());
Doxygen::searchIndex->addWord(qualifiedName().lower());
}
HtmlHelp *htmlHelp=0; HtmlHelp *htmlHelp=0;
bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP");
...@@ -951,18 +1051,18 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -951,18 +1051,18 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.endEmphasis(); //ol.endEmphasis();
ol.docify(" "); ol.docify(" ");
if (group!=0 && gd==0) // forward link to the group if (group!=0 && gd==0) // forward link to the group
{ {
ol.startTextLink(group->getOutputFileBase(),anchor()); ol.startTextLink(getOutputFileBase(),anchor());
} }
else else // local link
{ {
ol.startTextLink(0,anchor()); ol.startTextLink(0,anchor());
} }
ol.endTextLink(); ol.endTextLink();
ol.startEmphasis(); //ol.startEmphasis();
ol.popGeneratorState(); ol.popGeneratorState();
} }
//ol.newParagraph(); //ol.newParagraph();
...@@ -979,6 +1079,8 @@ bool MemberDef::isDetailedSectionLinkable() const ...@@ -979,6 +1079,8 @@ bool MemberDef::isDetailedSectionLinkable() const
Config_getBool("EXTRACT_ALL") || Config_getBool("EXTRACT_ALL") ||
// has detailed docs // has detailed docs
!documentation().isEmpty() || !documentation().isEmpty() ||
// has inbody docs
!inbodyDocumentation().isEmpty() ||
// is an enum with values that are documented // is an enum with values that are documented
(mtype==Enumeration && docEnumValues) || (mtype==Enumeration && docEnumValues) ||
// is documented enum value // is documented enum value
...@@ -1047,7 +1149,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1047,7 +1149,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
} }
QCString cname = container->name(); QCString cname = container->name();
QCString cfname = container->getOutputFileBase(); QCString cfname = getOutputFileBase();
//ol.addIndexItem(name(),cname); //ol.addIndexItem(name(),cname);
//ol.addIndexItem(cname,name()); //ol.addIndexItem(cname,name());
...@@ -1313,6 +1415,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1313,6 +1415,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{ {
ol.parseDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE); ol.parseDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE);
ol.pushGeneratorState(); ol.pushGeneratorState();
if (!m_inbodyDocs.isEmpty())
{
ol.newParagraph();
ol.parseDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,m_inbodyDocs+"\n",TRUE,FALSE);
}
ol.disableAllBut(OutputGenerator::RTF); ol.disableAllBut(OutputGenerator::RTF);
ol.newParagraph(); ol.newParagraph();
ol.popGeneratorState(); ol.popGeneratorState();
...@@ -1320,6 +1427,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1320,6 +1427,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
else if(!brief.isEmpty() && (Config_getBool("REPEAT_BRIEF") || else if(!brief.isEmpty() && (Config_getBool("REPEAT_BRIEF") ||
!Config_getBool("BRIEF_MEMBER_DESC"))) !Config_getBool("BRIEF_MEMBER_DESC")))
{ {
if (!m_inbodyDocs.isEmpty())
{
ol.newParagraph();
ol.parseDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,m_inbodyDocs+"\n",TRUE,FALSE);
}
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::RTF); ol.disableAllBut(OutputGenerator::RTF);
ol.newParagraph(); ol.newParagraph();
...@@ -1449,16 +1561,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1449,16 +1561,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.parseText(reimplFromLine.left(markerPos)); //text left from marker ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
if (bmd->isLinkable()) // replace marker with link if (bmd->isLinkable()) // replace marker with link
{ {
Definition *bd=bmd->group; //Definition *bd=bmd->group;
if (bd==0) bd=bcd; //if (bd==0) bd=bcd;
ol.writeObjectLink(bd->getReference(),bd->getOutputFileBase(), ol.writeObjectLink(bmd->getReference(),bmd->getOutputFileBase(),
bmd->anchor(),bcd->displayName()); bmd->anchor(),bcd->displayName());
//ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(), //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
// bmd->anchor(),bcd->name()); // bmd->anchor(),bcd->name());
if ( bd->isLinkableInProject() ) if ( bmd->isLinkableInProject() )
{ {
writePageRef(ol,bd->getOutputFileBase(),bmd->anchor()); writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
} }
} }
else else
...@@ -1544,15 +1656,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1544,15 +1656,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{ {
//ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(), //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
// bmd->anchor(),bcd->name()); // bmd->anchor(),bcd->name());
Definition* bd; ol.writeObjectLink(bmd->getReference(),bmd->getOutputFileBase(),
if (bmd->group) bd=bmd->group; else bd=bcd;
ol.writeObjectLink(bd->getReference(),bd->getOutputFileBase(),
bmd->anchor(),bcd->displayName()); bmd->anchor(),bcd->displayName());
if (bd->isLinkableInProject() ) if (bmd->isLinkableInProject() )
{ {
writePageRef(ol,bd->getOutputFileBase(),bmd->anchor()); writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
} }
} }
++mli; ++mli;
...@@ -1630,7 +1739,7 @@ void MemberDef::warnIfUndocumented() ...@@ -1630,7 +1739,7 @@ void MemberDef::warnIfUndocumented()
// "isDocumentedFriendClass()=%d name()=%s prot=%d\n", // "isDocumentedFriendClass()=%d name()=%s prot=%d\n",
// d->isLinkable(),isLinkable(),isDocumentedFriendClass(), // d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
// name().data(),prot); // name().data(),prot);
if (d && d->isLinkable() && !isLinkable() && if (/*d && d->isLinkable() &&*/ !isLinkable() &&
!isDocumentedFriendClass() && !isDocumentedFriendClass() &&
name().find('@')==-1 && name().find('@')==-1 &&
(prot!=Private || Config_getBool("EXTRACT_PRIVATE")) (prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
...@@ -1642,35 +1751,6 @@ void MemberDef::warnIfUndocumented() ...@@ -1642,35 +1751,6 @@ void MemberDef::warnIfUndocumented()
} }
bool MemberDef::isLinkableInProject() const
{
if (m_templateMaster)
{
return m_templateMaster->isLinkableInProject();
}
else
{
return !name().isEmpty() && name().at(0)!='@' &&
(hasDocumentation() && !isReference()) &&
(prot!=Private || Config_getBool("EXTRACT_PRIVATE") ||
mtype==Friend) && // not a hidden member due to protection
(classDef!=0 || Config_getBool("EXTRACT_STATIC") ||
!isStatic()); // not a static file/namespace member
}
}
bool MemberDef::isLinkable() const
{
if (m_templateMaster)
{
return m_templateMaster->isLinkable();
}
else
{
return isLinkableInProject() || isReference();
}
}
//void MemberDef::setEnumDecl(OutputList &ed) //void MemberDef::setEnumDecl(OutputList &ed)
//{ //{
// enumDeclList=new OutputList(&ed); // enumDeclList=new OutputList(&ed);
...@@ -1689,6 +1769,7 @@ bool MemberDef::isDocumentedFriendClass() const ...@@ -1689,6 +1769,7 @@ bool MemberDef::isDocumentedFriendClass() const
bool MemberDef::hasDocumentation() const bool MemberDef::hasDocumentation() const
{ {
return Definition::hasDocumentation() || return Definition::hasDocumentation() ||
!m_inbodyDocs.isEmpty() ||
(mtype==Enumeration && docEnumValues) || // has enum values (mtype==Enumeration && docEnumValues) || // has enum values
(defArgList!=0 && defArgList->hasDocumentation()); // has doc arguments (defArgList!=0 && defArgList->hasDocumentation()); // has doc arguments
} }
...@@ -1717,13 +1798,6 @@ void MemberDef::setAnchor(const char *a) ...@@ -1717,13 +1798,6 @@ void MemberDef::setAnchor(const char *a)
anc=a; anc=a;
} }
QCString MemberDef::anchor() const
{
if (m_templateMaster) return m_templateMaster->anchor();
if (enumScope) return enumScope->anchor()+anc;
return anc;
}
void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs) void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
{ {
//printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data()); //printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data());
...@@ -1792,7 +1866,7 @@ MemberDef *MemberDef::createTemplateInstanceMember( ...@@ -1792,7 +1866,7 @@ MemberDef *MemberDef::createTemplateInstanceMember(
imd->def = substituteTemplateArgumentsInString(def,formalArgs,actualArgs); imd->def = substituteTemplateArgumentsInString(def,formalArgs,actualArgs);
imd->setBodyDef(getBodyDef()); imd->setBodyDef(getBodyDef());
imd->setBodySegment(getStartBodyLine(),getEndBodyLine()); imd->setBodySegment(getStartBodyLine(),getEndBodyLine());
imd->setBodyMember(this); //imd->setBodyMember(this);
// TODO: init other member variables (if needed). // TODO: init other member variables (if needed).
// TODO: reimplemented info // TODO: reimplemented info
...@@ -1824,7 +1898,7 @@ void MemberDef::setInitializer(const char *initializer) ...@@ -1824,7 +1898,7 @@ void MemberDef::setInitializer(const char *initializer)
initLines=init.contains('\n'); initLines=init.contains('\n');
} }
void MemberDef::addListReference(Definition *d) void MemberDef::addListReference(Definition *)
{ {
visited=TRUE; visited=TRUE;
if (!isLinkableInProject()) return; if (!isLinkableInProject()) return;
...@@ -1855,7 +1929,7 @@ void MemberDef::addListReference(Definition *d) ...@@ -1855,7 +1929,7 @@ void MemberDef::addListReference(Definition *d)
} }
//printf("*** addListReference %s todo=%d test=%d bug=%d\n",name().data(),todoId(),testId(),bugId()); //printf("*** addListReference %s todo=%d test=%d bug=%d\n",name().data(),todoId(),testId(),bugId());
addRefItem(xrefListItems(),memLabel, addRefItem(xrefListItems(),memLabel,
d->getOutputFileBase()+"#"+anchor(),memName,argsString()); getOutputFileBase()+"#"+anchor(),memName,argsString());
} }
MemberList *MemberDef::getSectionList(Definition *d) const MemberList *MemberDef::getSectionList(Definition *d) const
...@@ -2044,3 +2118,12 @@ bool MemberDef::protectionVisible() const ...@@ -2044,3 +2118,12 @@ bool MemberDef::protectionVisible() const
(prot==Package && Config_getBool("EXTRACT_PACKAGE")); (prot==Package && Config_getBool("EXTRACT_PACKAGE"));
} }
void MemberDef::setInbodyDocumentation(const char *docs,
const char *docFile,int docLine)
{
m_inbodyDocs = docs;
m_inbodyDocs = m_inbodyDocs.stripWhiteSpace();
m_inbodyLine = docLine;
m_inbodyFile = docFile;
}
...@@ -74,13 +74,14 @@ class MemberDef : public Definition ...@@ -74,13 +74,14 @@ class MemberDef : public Definition
DefType definitionType() { return TypeMember; } DefType definitionType() { return TypeMember; }
QCString getOutputFileBase() const; QCString getOutputFileBase() const;
QCString getReference() const;
QCString anchor() const;
const char *declaration() const { return decl; } const char *declaration() const { return decl; }
const char *definition() const { return def; } const char *definition() const { return def; }
const char *typeString() const { return type; } const char *typeString() const { return type; }
const char *argsString() const { return args; } const char *argsString() const { return args; }
const char *excpString() const { return exception; } const char *excpString() const { return exception; }
const char *bitfieldString() const { return bitfields; } const char *bitfieldString() const { return bitfields; }
QCString anchor() const;
const QCString &initializer() const { return init; } const QCString &initializer() const { return init; }
int initializerLines() const { return initLines; } int initializerLines() const { return initLines; }
int getMemberSpecifiers() const { return memSpec; } int getMemberSpecifiers() const { return memSpec; }
...@@ -175,6 +176,12 @@ class MemberDef : public Definition ...@@ -175,6 +176,12 @@ class MemberDef : public Definition
MemberDef *reimplements() const; MemberDef *reimplements() const;
MemberList *reimplementedBy() const; MemberList *reimplementedBy() const;
// in-body documentation
void setInbodyDocumentation(const char *docs,const char *file,int line);
int inbodyLine() const { return m_inbodyLine; }
QCString inbodyFile() const { return m_inbodyFile; }
const QCString &inbodyDocumentation() const { return m_inbodyDocs; }
// For function documentation that can also be found in a class's related func section. // For function documentation that can also be found in a class's related func section.
void setRelatedAlso(ClassDef *cd) { m_relatedAlso=cd; } void setRelatedAlso(ClassDef *cd) { m_relatedAlso=cd; }
ClassDef *relatedAlso() const { return m_relatedAlso; } ClassDef *relatedAlso() const { return m_relatedAlso; }
...@@ -245,12 +252,13 @@ class MemberDef : public Definition ...@@ -245,12 +252,13 @@ class MemberDef : public Definition
void setTemplateMaster(MemberDef *mt) { m_templateMaster=mt; } void setTemplateMaster(MemberDef *mt) { m_templateMaster=mt; }
void addListReference(Definition *d); void addListReference(Definition *d);
QCString getBodyAnchor() const //QCString getBodyAnchor() const
{ //{
return bodyMemb ? bodyMemb->anchor() : anchor(); // return bodyMemb ? bodyMemb->anchor() : anchor();
} //}
void setBodyMember(MemberDef *md) { bodyMemb = md; } //void setBodyMember(MemberDef *md) { bodyMemb = md; }
void setDocsForDefinition(bool b) { docsForDefinition = b; } void setDocsForDefinition(bool b) { docsForDefinition = b; }
void setGroupAlias(MemberDef *md) { groupAlias = md; }
// cached typedef functions // cached typedef functions
bool isTypedefValCached() const { return m_isTypedefValCached; } bool isTypedefValCached() const { return m_isTypedefValCached; }
...@@ -295,7 +303,7 @@ class MemberDef : public Definition ...@@ -295,7 +303,7 @@ class MemberDef : public Definition
QCString decl; // member declaration in class QCString decl; // member declaration in class
QCString def; // member definition in code (fully qualified name) QCString def; // member definition in code (fully qualified name)
QCString anc; // HTML anchor name QCString anc; // HTML anchor name
MemberDef *bodyMemb; // Member containing the definition MemberDef *groupAlias; // Member containing the definition
Specifier virt; // normal/virtual/pure virtual Specifier virt; // normal/virtual/pure virtual
Protection prot; // protection type [Public/Protected/Private] Protection prot; // protection type [Public/Protected/Private]
bool related; // is this a member that is only related to a class bool related; // is this a member that is only related to a class
...@@ -346,6 +354,10 @@ class MemberDef : public Definition ...@@ -346,6 +354,10 @@ class MemberDef : public Definition
bool m_isTypedefValCached; bool m_isTypedefValCached;
ClassDef *m_cachedTypedefValue; ClassDef *m_cachedTypedefValue;
// inbody documentation
int m_inbodyLine;
QCString m_inbodyFile;
QCString m_inbodyDocs;
}; };
#endif #endif
...@@ -138,17 +138,22 @@ void MemberGroup::distributeMemberGroupDocumentation() ...@@ -138,17 +138,22 @@ void MemberGroup::distributeMemberGroupDocumentation()
{ {
//printf("MemberGroup::distributeMemberGroupDocumentation() %s\n",grpHeader.data()); //printf("MemberGroup::distributeMemberGroupDocumentation() %s\n",grpHeader.data());
MemberDef *md=memberList->first(); MemberDef *md=memberList->first();
if (md && !(md->documentation().isEmpty() && md->briefDescription().isEmpty())) if (md && !(md->documentation().isEmpty() &&
md->briefDescription().isEmpty() &&
md->inbodyDocumentation().isEmpty()
)
)
{ {
//printf("First member %s has documentation!\n",md->name().data()); //printf("First member %s has documentation!\n",md->name().data());
MemberDef *omd=memberList->next(); MemberDef *omd=memberList->next();
while (omd) while (omd)
{ {
if (omd->documentation().isEmpty() && omd->briefDescription().isEmpty()) if (omd->documentation().isEmpty() && omd->briefDescription().isEmpty() && omd->inbodyDocumentation().isEmpty())
{ {
//printf("Copying documentation to member %s\n",omd->name().data()); //printf("Copying documentation to member %s\n",omd->name().data());
omd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine()); omd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
omd->setDocumentation(md->documentation(),md->docFile(),md->docLine()); omd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
omd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
} }
omd=memberList->next(); omd=memberList->next();
} }
......
...@@ -247,7 +247,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -247,7 +247,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
ol.docify(" "); ol.docify(" ");
if (md->getGroupDef()!=0 && gd==0) // forward link to group if (md->getGroupDef()!=0 && gd==0) // forward link to group
{ {
ol.startTextLink(md->getGroupDef()->getOutputFileBase(), ol.startTextLink(md->getOutputFileBase(),
md->anchor()); md->anchor());
} }
else else
......
...@@ -263,7 +263,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -263,7 +263,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()); Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION"));
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
} }
......
...@@ -2740,7 +2740,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2740,7 +2740,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
{ {
// copy documentation found inside the body // copy documentation found inside the body
// to the previous item // to the previous item
previous->doc += current->doc; if (previous->inbodyLine==-1)
{
previous->inbodyLine = current->docLine;
previous->inbodyFile = current->docFile;
}
previous->inbodyDocs += current->doc;
current->doc.resize(0); current->doc.resize(0);
} }
if (current->sli) // copy special list items if (current->sli) // copy special list items
...@@ -3159,6 +3164,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3159,6 +3164,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases>("//"{B}*)?"/**"/[^/*] { <FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases>("//"{B}*)?"/**"/[^/*] {
removeSlashes=(yytext[1]=='/'); removeSlashes=(yytext[1]=='/');
lastDocContext = YY_START; lastDocContext = YY_START;
printf("Found comment block at %s:%d\n",yyFileName,yyLineNr);
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
{ {
current->inside = current_root->name+"::"; current->inside = current_root->name+"::";
...@@ -3169,6 +3175,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3169,6 +3175,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
} }
if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style
{ {
current->docLine = yyLineNr;
current->docFile = yyFileName;
tmpDocType=-1; tmpDocType=-1;
if (!Config_getBool("HIDE_IN_BODY_DOCS") && if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
YY_START==SkipCurly) // inside body YY_START==SkipCurly) // inside body
...@@ -3178,13 +3186,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3178,13 +3186,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
else else
{ {
current->doc.resize(0); current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
} }
BEGIN( Doc ); BEGIN( Doc );
} }
else // Use the javadoc style else // Use the javadoc style
{ {
current->docLine = yyLineNr;
current->docFile = yyFileName;
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
if (!Config_getBool("HIDE_IN_BODY_DOCS") && if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
YY_START==SkipCurly) // inside body YY_START==SkipCurly) // inside body
{ {
...@@ -3198,10 +3208,6 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3198,10 +3208,6 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
tmpDocType=Doc; tmpDocType=Doc;
current->doc.resize(0); current->doc.resize(0);
current->brief.resize(0); current->brief.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN( JavaDoc ); BEGIN( JavaDoc );
} }
} }
......
...@@ -80,6 +80,10 @@ ...@@ -80,6 +80,10 @@
// 2003/09/11 Jens Seidel (jensseidel@users.sourceforge.net) // 2003/09/11 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated for "new since 1.3.1" version // - Updated for "new since 1.3.1" version
// //
// 2003/09/24 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated a few strings which changed in CVS revision 1.22
// ("compound" vs. "class")
//
// Todo: // Todo:
// - see FIXME // - see FIXME
...@@ -213,7 +217,7 @@ class TranslatorGerman : public Translator ...@@ -213,7 +217,7 @@ class TranslatorGerman : public Translator
} }
else else
{ {
return "Übersicht"; return "Auflistung der Klassen";
} }
} }
...@@ -223,7 +227,7 @@ class TranslatorGerman : public Translator ...@@ -223,7 +227,7 @@ class TranslatorGerman : public Translator
/*! This is put above each page as a link to the list of all verbatim headers */ /*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles() virtual QCString trHeaderFiles()
{ return "Auflistung der Header-Dateien"; } { return "Header-Dateien"; }
/*! This is put above each page as a link to all members of compounds. */ /*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers() virtual QCString trCompoundMembers()
...@@ -234,7 +238,7 @@ class TranslatorGerman : public Translator ...@@ -234,7 +238,7 @@ class TranslatorGerman : public Translator
} }
else else
{ {
return "Datenstruktur-Elemente"; return "Klassen-Elemente";
} }
} }
...@@ -392,9 +396,11 @@ class TranslatorGerman : public Translator ...@@ -392,9 +396,11 @@ class TranslatorGerman : public Translator
* annotated compound index. * annotated compound index.
*/ */
virtual QCString trCompoundIndex() virtual QCString trCompoundIndex()
/* No difference if "OPTIMIZE_OUTPUT_FOR_C" is set! */
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
return "Datenstruktur-Verzeichnis"; return "Datenstruktur-Verzeichnis";
else
return "Klassen-Verzeichnis";
} }
/*! This is used in LaTeX as the title of the chapter with the /*! This is used in LaTeX as the title of the chapter with the
...@@ -541,7 +547,7 @@ class TranslatorGerman : public Translator ...@@ -541,7 +547,7 @@ class TranslatorGerman : public Translator
} }
else else
{ {
return "Übersicht"; return "Klassen";
} }
} }
......
/*-*- c-basic-offset: 2 -*-*/ /*-*- c-basic-offset: 2; tab-width: 8 -*-*/
/****************************************************************************** /******************************************************************************
* *
* *
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
* *
* First version (not complete) for Doxygen 1.2.7 * First version (not complete) for Doxygen 1.2.7
* Extended and revised for Doxygen 1.3 * Extended and revised for Doxygen 1.3
* Extended and revised for Doxygen 1.3.4
*/ */
/* Translator's notes: /* Translator's notes:
...@@ -71,7 +72,7 @@ ...@@ -71,7 +72,7 @@
#ifndef TRANSLATOR_DK_H #ifndef TRANSLATOR_DK_H
#define TRANSLATOR_DK_H #define TRANSLATOR_DK_H
class TranslatorDanish : public TranslatorAdapter_1_3 class TranslatorDanish : public Translator
{ {
public: public:
...@@ -146,7 +147,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -146,7 +147,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
return "Felt-dokumentation"; return "Felt-dokumentation";
} else { } else {
return "Dokumentation af feltvariable"; return "Dokumentation af feltvariable";
//medlems-data";
} }
} }
...@@ -225,12 +225,9 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -225,12 +225,9 @@ class TranslatorDanish : public TranslatorAdapter_1_3
/*! This is put above each page as a link to all members of compounds. */ /*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers() virtual QCString trCompoundMembers()
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
{
return "Data-felter"; return "Data-felter";
} } else {
else
{
return "Felter i sammensatte typer"; return "Felter i sammensatte typer";
} }
} }
...@@ -542,9 +539,7 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -542,9 +539,7 @@ class TranslatorDanish : public TranslatorAdapter_1_3
/*! This is part of the sentence used in the standard footer of each page. /*! This is part of the sentence used in the standard footer of each page.
*/ */
virtual QCString trWrittenBy() virtual QCString trWrittenBy()
{ { return "skrevet af"; }
return "skrevet af";
}
/*! this text is put before a class diagram */ /*! this text is put before a class diagram */
virtual QCString trClassDiagram(const char *clName) virtual QCString trClassDiagram(const char *clName)
...@@ -803,8 +798,8 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -803,8 +798,8 @@ class TranslatorDanish : public TranslatorAdapter_1_3
case ClassDef::Interface: result+="grænseflade"; break; case ClassDef::Interface: result+="grænseflade"; break;
case ClassDef::Exception: result+="exception"; break; case ClassDef::Exception: result+="exception"; break;
} }
result+=" blev genereret ud fra følgende fil"; result+=" blev genereret ud fra fil";
if (single) result+=":"; else result+="er:"; if (single) result+="en:"; else result+="erne:";
return result; return result;
} }
...@@ -838,13 +833,13 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -838,13 +833,13 @@ class TranslatorDanish : public TranslatorAdapter_1_3
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trSources() virtual QCString trSources()
{ { return "Kilder"; /* Tranlation?? */ }
return "Kilder"; //??
}
virtual QCString trDefinedAtLineInSourceFile() virtual QCString trDefinedAtLineInSourceFile()
{ {
return "Defineret på linje @0 i filen @1."; return "Defineret på linje @0 i filen @1.";
} }
virtual QCString trDefinedInSourceFile() virtual QCString trDefinedInSourceFile()
{ {
return "Defineret i filen @0."; return "Defineret i filen @0.";
...@@ -880,70 +875,49 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -880,70 +875,49 @@ class TranslatorDanish : public TranslatorAdapter_1_3
return "Dokumentation af konstruktører og destruktører"; return "Dokumentation af konstruktører og destruktører";
// "Constructor & Destructor dokumentation"; // "Constructor & Destructor dokumentation";
} }
/*! Used in the file documentation to point to the corresponding sources. */ /*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode() virtual QCString trGotoSourceCode()
{ { return "Hop til denne fils kildekode."; }
return "Hop til denne fils kildekode.";
}
/*! Used in the file sources to point to the corresponding documentation. */ /*! Used in the file sources to point to the corresponding documentation. */
virtual QCString trGotoDocumentation() virtual QCString trGotoDocumentation()
{ { return "Hop til denne fils dokumentation."; }
return "Hop til denne fils dokumentation.";
}
/*! Text for the \\pre command */ /*! Text for the \\pre command */
virtual QCString trPrecondition() virtual QCString trPrecondition()
{ { return "Forudsætninger (precondition)"; }
return "Forudsætninger (precondition)";
}
/*! Text for the \\post command */ /*! Text for the \\post command */
virtual QCString trPostcondition() virtual QCString trPostcondition()
{ { return "Resultat (postcondition)"; }
return "Resultat (postcondition)";
}
/*! Text for the \\invariant command */ /*! Text for the \\invariant command */
virtual QCString trInvariant() virtual QCString trInvariant()
{ { return "Invariant"; }
return "Invariant";
}
/*! Text shown before a multi-line variable/enum initialization */ /*! Text shown before a multi-line variable/enum initialization */
virtual QCString trInitialValue() virtual QCString trInitialValue()
{ { return "Startværdi:"; }
return "Startværdi:";
}
/*! Text used the source code in the file index */ /*! Text used the source code in the file index */
virtual QCString trCode() virtual QCString trCode()
{ { return "kildekode"; }
return "kildekode";
}
virtual QCString trGraphicalHierarchy() virtual QCString trGraphicalHierarchy()
{ { return "Grafisk klassehierarki"; }
return "Grafisk klassehierarki";
}
virtual QCString trGotoGraphicalHierarchy() virtual QCString trGotoGraphicalHierarchy()
{ { return "Hop til det grafiske klassehierarki"; }
return "Hop til det grafiske klassehierarki";
}
virtual QCString trGotoTextualHierarchy() virtual QCString trGotoTextualHierarchy()
{ { return "Hop til det tekstuelle klassehierarki"; }
return "Hop til det tekstuelle klassehierarki";
}
virtual QCString trPageIndex() virtual QCString trPageIndex()
{ { return "Sideindeks"; }
return "Sideindeks";
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.1.0 // new since 1.1.0
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trNote() virtual QCString trNote()
{ { return "Note"; }
return "Note";
}
virtual QCString trPublicTypes() virtual QCString trPublicTypes()
{ { return "Offentlige typer"; }
return "Offentlige typer";
}
virtual QCString trPublicAttribs() virtual QCString trPublicAttribs()
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
...@@ -952,34 +926,21 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -952,34 +926,21 @@ class TranslatorDanish : public TranslatorAdapter_1_3
return "Offentlige attributter"; return "Offentlige attributter";
} }
} }
virtual QCString trStaticPublicAttribs() virtual QCString trStaticPublicAttribs()
{ { return "Statiske, offentlige attributter"; }
return "Statiske, offentlige attributter";
}
virtual QCString trProtectedTypes() virtual QCString trProtectedTypes()
{ { return "Beskyttede typer"; }
return "Beskyttede typer";
}
virtual QCString trProtectedAttribs() virtual QCString trProtectedAttribs()
{ { return "Beskyttede attributter"; }
return "Beskyttede attributter";
}
virtual QCString trStaticProtectedAttribs() virtual QCString trStaticProtectedAttribs()
{ { return "Statiske, beskyttede attributter"; }
return "Statiske, beskyttede attributter";
}
virtual QCString trPrivateTypes() virtual QCString trPrivateTypes()
{ { return "Private typer"; }
return "Private typer";
}
virtual QCString trPrivateAttribs() virtual QCString trPrivateAttribs()
{ { return "Private attributter"; }
return "Private attributter";
}
virtual QCString trStaticPrivateAttribs() virtual QCString trStaticPrivateAttribs()
{ { return "Statiske, private attributter"; }
return "Statiske, private attributter";
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.1.3 // new since 1.1.3
...@@ -1247,10 +1208,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1247,10 +1208,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
*/ */
virtual QCString trClass(bool first_capital, bool singular) virtual QCString trClass(bool first_capital, bool singular)
{ {
//QCString result(first_capital ? "Klasse" : "klasse");
//if (first_capital) result.at(0) = toupper(result.at(0));
//if (!singular) result+="r";
//return result;
return createNoun(first_capital, singular, "klasse", "r"); return createNoun(first_capital, singular, "klasse", "r");
} }
...@@ -1260,9 +1217,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1260,9 +1217,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
*/ */
virtual QCString trFile(bool first_capital, bool singular) virtual QCString trFile(bool first_capital, bool singular)
{ {
//QCString result((first_capital ? "Fil" : "fil"));
//if (!singular) result+="er";
//return result;
return createNoun(first_capital, singular, "fil", "er"); return createNoun(first_capital, singular, "fil", "er");
} }
...@@ -1272,9 +1226,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1272,9 +1226,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
*/ */
virtual QCString trNamespace(bool first_capital, bool singular) virtual QCString trNamespace(bool first_capital, bool singular)
{ {
//QCString result((first_capital ? "Namespace" : "namespace"));
//if (!singular) result+="s";
//return result;
return createNoun(first_capital, singular, "namespace", "s"); return createNoun(first_capital, singular, "namespace", "s");
} }
...@@ -1284,9 +1235,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1284,9 +1235,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
*/ */
virtual QCString trGroup(bool first_capital, bool singular) virtual QCString trGroup(bool first_capital, bool singular)
{ {
//QCString result((first_capital ? "Gruppe" : "gruppe"));
//if (!singular) result+="r";
//return result;
return createNoun(first_capital, singular, "gruppe", "r"); return createNoun(first_capital, singular, "gruppe", "r");
} }
...@@ -1296,9 +1244,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1296,9 +1244,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
*/ */
virtual QCString trPage(bool first_capital, bool singular) virtual QCString trPage(bool first_capital, bool singular)
{ {
//QCString result((first_capital ? "Side" : "side"));
//if (!singular) result+="r";
//return result;
return createNoun(first_capital, singular, "side", "r"); return createNoun(first_capital, singular, "side", "r");
} }
...@@ -1308,9 +1253,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1308,9 +1253,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
*/ */
virtual QCString trMember(bool first_capital, bool singular) virtual QCString trMember(bool first_capital, bool singular)
{ {
//QCString result((first_capital ? "Medlem" : "medlem"));
//if (!singular) result+="mer";
//return result;
return createNoun(first_capital, singular, "medlem", "mer"); return createNoun(first_capital, singular, "medlem", "mer");
} }
...@@ -1320,9 +1262,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1320,9 +1262,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
*/ */
virtual QCString trField(bool first_capital, bool singular) virtual QCString trField(bool first_capital, bool singular)
{ {
//QCString result((first_capital ? "Felt" : "felt"));
//if (!singular) result+="er";
//return result;
return createNoun(first_capital, singular, "felt", "er"); return createNoun(first_capital, singular, "felt", "er");
} }
...@@ -1332,9 +1271,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1332,9 +1271,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
*/ */
virtual QCString trGlobal(bool first_capital, bool singular) virtual QCString trGlobal(bool first_capital, bool singular)
{ {
//QCString result((first_capital ? "Global" : "global"));
//if (!singular) result+="e";
//return result;
return createNoun(first_capital, singular, "global", "e"); return createNoun(first_capital, singular, "global", "e");
} }
...@@ -1346,9 +1282,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1346,9 +1282,6 @@ class TranslatorDanish : public TranslatorAdapter_1_3
* for the author section in man pages. */ * for the author section in man pages. */
virtual QCString trAuthor(bool first_capital, bool singular) virtual QCString trAuthor(bool first_capital, bool singular)
{ {
//QCString result((first_capital ? "Forfatter" : "forfatter"));
//if (!singular) result+="e";
//return result;
return createNoun(first_capital, singular, "forfatter", "e"); return createNoun(first_capital, singular, "forfatter", "e");
} }
...@@ -1424,6 +1357,89 @@ class TranslatorDanish : public TranslatorAdapter_1_3 ...@@ -1424,6 +1357,89 @@ class TranslatorDanish : public TranslatorAdapter_1_3
return "Begivenhedsdokumentation"; return "Begivenhedsdokumentation";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////
/* Java: Entities with package scope... */
virtual QCString trPackageTypes()
{ return "Typer med pakke-scope"; }
virtual QCString trPackageMembers()
{ return "Metoder med pakke-scope"; }
virtual QCString trStaticPackageMembers()
{ return "Statiske metoder med pakke-scope"; }
virtual QCString trPackageAttribs()
{ return "Attributter med pakke-scope"; }
virtual QCString trStaticPackageAttribs()
{ return "Statiske attributter med pakke-scope"; }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.1
//////////////////////////////////////////////////////////////////////////
/*! Used in the quick index of a class/file/namespace member list page
* to link to the unfiltered list of all members.
*/
virtual QCString trAll()
{
return "Alle";
}
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
return "Her er kald-grafen for denne funktion:";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.3
//////////////////////////////////////////////////////////////////////////
/*! When the search engine is enabled this text is put in the header
* of each page before the field where one can enter the text to search
* for.
*/
virtual QCString trSearchForIndex()
{
return "Søg efter";
}
/*! This string is used as the title for the page listing the search
* results.
*/
virtual QCString trSearchResultsTitle()
{
return "Søgeresultater";
}
/*! This string is put just before listing the search results. The
* text can be different depending on the number of documents found.
* Inside the text you can put the special marker $num to insert
* the number representing the actual number of search results.
* The @a numDocuments parameter can be either 0, 1 or 2, where the
* value 2 represents 2 or more matches. HTML markup is allowed inside
* the returned string.
*/
virtual QCString trSearchResults(int numDocuments)
{
if (numDocuments==0) {
return "Beklager - ingen dokumenter passede til din forespørgsel.";
} else if (numDocuments==1) {
return "Fandt <b>1</b> dokument, der passer til din forespørgsel.";
} else {
return
"Fandt <b>$num</b> dokumenter, der passer til din forespørgsel. "
"De, der passer bedst, vises først.";
}
}
/*! This string is put before the list of matched words, for each search
* result. What follows is the list of words that matched the query.
*/
virtual QCString trSearchMatches()
{
return "Fundne ord:"; //translation?
}
/*---------- For internal use: ----------------------------------------*/ /*---------- For internal use: ----------------------------------------*/
protected: protected:
......
...@@ -1554,6 +1554,7 @@ class TranslatorRussian : public Translator ...@@ -1554,6 +1554,7 @@ class TranslatorRussian : public Translator
return decode( ":" ); return decode( ":" );
} }
private:
QCString as_documents( int num ) QCString as_documents( int num )
{ {
if( num % 10 == 1 ) return ""; if( num % 10 == 1 ) return "";
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
// Translator class (by the local maintainer) when the localized // Translator class (by the local maintainer) when the localized
// translator is made up-to-date again. // translator is made up-to-date again.
class TranslatorChinesetraditional : public TranslatorAdapter_1_3_3 class TranslatorChinesetraditional : public Translator
{ {
public: public:
...@@ -1472,6 +1472,57 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_3_3 ...@@ -1472,6 +1472,57 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_3_3
return "這是此函數的引用函數圖:"; return "這是此函數的引用函數圖:";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.3
//////////////////////////////////////////////////////////////////////////
/*! When the search engine is enabled this text is put in the header
* of each page before the field where one can enter the text to search
* for.
*/
virtual QCString trSearchForIndex()
{
return "搜尋索引";
}
/*! This string is used as the title for the page listing the search
* results.
*/
virtual QCString trSearchResultsTitle()
{
return "搜尋結果";
}
/*! This string is put just before listing the search results. The
* text can be different depending on the number of documents found.
* Inside the text you can put the special marker $num to insert
* the number representing the actual number of search results.
* The @a numDocuments parameter can be either 0, 1 or 2, where the
* value 2 represents 2 or more matches. HTML markup is allowed inside
* the returned string.
*/
virtual QCString trSearchResults(int numDocuments)
{
if (numDocuments==0)
{
return "找不到符合的資料.";
}
else if (numDocuments==1)
{
return "找到 <b>1</b> 筆符合的資料.";
}
else
{
return "找到 <b>$num</b> 筆符合的資料. "
"越符合的結果顯示在越前面.";
}
}
/*! This string is put before the list of matched words, for each search
* result. What follows is the list of words that matched the query.
*/
virtual QCString trSearchMatches()
{
return "符合:";
}
}; };
#endif #endif
...@@ -1030,7 +1030,7 @@ QCString removeRedundantWhiteSpace(const QCString &s) ...@@ -1030,7 +1030,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
result+=' '; result+=' ';
result+=s.at(i); result+=s.at(i);
} }
else if (c=='t' && csp==5 && !isId(s.at(i+1))) // prevent const ::A from being converted to const::A else if (c=='t' && csp==5 && !(isId(s.at(i+1)) || s.at(i+1)==' ')) // prevent const ::A from being converted to const::A
{ {
result+="t "; result+="t ";
csp=0; csp=0;
...@@ -1208,14 +1208,12 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,FileDef *fileSco ...@@ -1208,14 +1208,12 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,FileDef *fileSco
(external ? md->isLinkable() : md->isLinkableInProject()) (external ? md->isLinkable() : md->isLinkableInProject())
) )
{ {
Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
//printf("Found ref scope=%s\n",d?d->name().data():"<global>"); //printf("Found ref scope=%s\n",d?d->name().data():"<global>");
if (d && (external ? d->isLinkable() : d->isLinkableInProject())) if ((external ? md->isLinkable() : md->isLinkableInProject()))
{ {
//ol.writeObjectLink(d->getReference(),d->getOutputFileBase(), //ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),
// md->anchor(),word); // md->anchor(),word);
out.writeLink(d->getReference(),d->getOutputFileBase(), out.writeLink(md->getReference(),md->getOutputFileBase(),
md->anchor(),word); md->anchor(),word);
found=TRUE; found=TRUE;
} }
...@@ -1356,8 +1354,9 @@ void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId) ...@@ -1356,8 +1354,9 @@ void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId)
else else
anchor.sprintf("%c%d_%d",id,groupId,count++); anchor.sprintf("%c%d_%d",id,groupId,count++);
if (cd) anchor.prepend(escapeCharsInString(cd->name(),FALSE)); if (cd) anchor.prepend(escapeCharsInString(cd->name(),FALSE));
//printf("Member %s anchor %s\n",md->name().data(),anchor.data());
md->setAnchor(anchor); md->setAnchor(anchor);
//printf("setAnchors(): Member %s outputFileBase=%s anchor %s result %s\n",
// md->name().data(),md->getOutputFileBase().data(),anchor.data(),md->anchor().data());
} }
} }
} }
...@@ -2881,8 +2880,8 @@ bool resolveRef(/* in */ const char *scName, ...@@ -2881,8 +2880,8 @@ bool resolveRef(/* in */ const char *scName,
) )
{ {
//printf("after getDefs md=%p cd=%p fd=%p nd=%p gd=%p\n",md,cd,fd,nd,gd); //printf("after getDefs md=%p cd=%p fd=%p nd=%p gd=%p\n",md,cd,fd,nd,gd);
*resMember=md; if (md) { *resMember=md; *resContext=md; }
if (cd) *resContext=cd; else if (cd) *resContext=cd;
else if (nd) *resContext=nd; else if (nd) *resContext=nd;
else if (fd) *resContext=fd; else if (fd) *resContext=fd;
else if (gd) *resContext=gd; else if (gd) *resContext=gd;
...@@ -2966,14 +2965,13 @@ bool generateRef(OutputDocInterface &od,const char *scName, ...@@ -2966,14 +2965,13 @@ bool generateRef(OutputDocInterface &od,const char *scName,
{ {
if (md) // link to member if (md) // link to member
{ {
od.writeObjectLink(compound->getReference(), od.writeObjectLink(md->getReference(),
compound->getOutputFileBase(), md->getOutputFileBase(),
md->anchor(),linkText); md->anchor(),linkText);
// generate the page reference (for LaTeX) // generate the page reference (for LaTeX)
if (!compound->isReference() && !md->anchor().isEmpty() && if (md->isLinkableInProject())
md->isLinkableInProject())
{ {
writePageRef(od,compound->getOutputFileBase(),md->anchor()); writePageRef(od,md->getOutputFileBase(),md->anchor());
} }
} }
else // link to compound else // link to compound
...@@ -3007,12 +3005,10 @@ bool resolveLink(/* in */ const char *scName, ...@@ -3007,12 +3005,10 @@ bool resolveLink(/* in */ const char *scName,
/* in */ const char *lr, /* in */ const char *lr,
/* in */ bool inSeeBlock, /* in */ bool inSeeBlock,
/* out */ Definition **resContext, /* out */ Definition **resContext,
/* out PageInfo **resPageInfo,*/
/* out */ QCString &resAnchor /* out */ QCString &resAnchor
) )
{ {
*resContext=0; *resContext=0;
//*resPageInfo=0;
QCString linkRef=lr; QCString linkRef=lr;
FileDef *fd; FileDef *fd;
...@@ -3094,16 +3090,6 @@ bool generateLink(OutputDocInterface &od,const char *clName, ...@@ -3094,16 +3090,6 @@ bool generateLink(OutputDocInterface &od,const char *clName,
//printf("generateLink linkText=%s\n",linkText.data()); //printf("generateLink linkText=%s\n",linkText.data());
if (resolveLink(clName,lr,inSeeBlock,&compound,anchor)) if (resolveLink(clName,lr,inSeeBlock,&compound,anchor))
{ {
//if (pageInfo) // link to page
//{
// od.writeObjectLink(pageInfo->getReference(),
// pageInfo->getOutputFileBase(),anchor,linkText);
// if (!pageInfo->isReference())
// {
// writePageRef(od,pageInfo->getOutputFileBase(),anchor);
// }
//}
//else
if (compound) // link to compound if (compound) // link to compound
{ {
if (lt==0 && anchor.isEmpty() && /* compound link */ if (lt==0 && anchor.isEmpty() && /* compound link */
...@@ -4022,9 +4008,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle, ...@@ -4022,9 +4008,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
pageName=pd->name(); pageName=pd->name();
else else
pageName=pd->name().lower(); pageName=pd->name().lower();
//setFileNameForSections(anchors,pageName,pi);
pd->setFileName(pageName); pd->setFileName(pageName);
//pi->addSections(anchors);
//printf("Appending page `%s'\n",baseName.data()); //printf("Appending page `%s'\n",baseName.data());
Doxygen::pageSDict->append(baseName,pd); Doxygen::pageSDict->append(baseName,pd);
......
...@@ -736,6 +736,9 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -736,6 +736,9 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
t << " <detaileddescription>" << endl; t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation()); writeXMLDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
t << " </detaileddescription>" << endl; t << " </detaileddescription>" << endl;
t << " <inbodydescription>" << endl;
writeXMLDocBlock(t,md->docFile(),md->inbodyLine(),md->getOuterScope(),md,md->inbodyDocumentation());
t << " </inbodydescription>" << endl;
if (md->getDefLine()!=-1) if (md->getDefLine()!=-1)
{ {
t << " <location file=\"" t << " <location file=\""
...@@ -803,12 +806,9 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t) ...@@ -803,12 +806,9 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
for (mii.toFirst();(mi=mii.current());++mii) for (mii.toFirst();(mi=mii.current());++mii)
{ {
MemberDef *md=mi->memberDef; MemberDef *md=mi->memberDef;
ClassDef *cd=md->getClassDef();
Definition *d=md->getGroupDef();
if (d==0) d = cd;
Protection prot = mi->prot; Protection prot = mi->prot;
Specifier virt=md->virtualness(); Specifier virt=md->virtualness();
t << " <member refid=\"" << d->getOutputFileBase() << "_1" << t << " <member refid=\"" << md->getOutputFileBase() << "_1" <<
md->anchor() << "\" prot=\""; md->anchor() << "\" prot=\"";
switch (prot) switch (prot)
{ {
...@@ -876,7 +876,15 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -876,7 +876,15 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
writeXMLHeader(t); writeXMLHeader(t);
t << " <compounddef id=\"" t << " <compounddef id=\""
<< cd->getOutputFileBase() << "\" kind=\"" << cd->getOutputFileBase() << "\" kind=\""
<< cd->compoundTypeString() << "\">" << endl; << cd->compoundTypeString() << "\" prot=\"";
switch (cd->protection())
{
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: t << "package"; break;
}
t << "\">" << endl;
t << " <compoundname>"; t << " <compoundname>";
writeXMLString(t,cd->name()); writeXMLString(t,cd->name());
t << "</compoundname>" << endl; t << "</compoundname>" << endl;
......
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