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

Release-1.3.9.1-20041221

parent a17029cb
DOXYGEN Version 1.3.9.1-20041213
DOXYGEN Version 1.3.9.1-20041221
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (13 December 2004)
Dimitri van Heesch (21 December 2004)
DOXYGEN Version 1.3.9.1_20041213
DOXYGEN Version 1.3.9.1_20041221
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (13 December 2004)
Dimitri van Heesch (dimitri@stack.nl) (21 December 2004)
1.3.9.1-20041213
1.3.9.1-20041221
......@@ -180,7 +180,7 @@ if test -z "$f_platform"; then
f_platform=sunos-g++
;;
SunOS:5*)
f_platform=solaris-cc
f_platform=solaris-g++
;;
ULTRIX:*)
f_platform=ultrix-g++
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3.9.1_20041213
Version: 1.3.9.1_20041221
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -117,7 +117,9 @@ ID ([a-z_A-Z][a-z_A-Z0-9]*)|(@[0-9]+)
name += yytext;
BEGIN(Operator);
}
<Start>(~{B}*)?{ID}({B}*"["{B}*"]")* { // the []'s are for Java
<Start>(~{B}*)?{ID}/({B}*"["{B}*"]")* { // the []'s are for Java,
// the / was add to deal with multi-
// dimensional C++ arrays like A[][15]
addTypeName();
name += yytext;
}
......@@ -331,3 +333,11 @@ int main()
dumpDecl("void ( * Name < T > :: bla ) ( int, char * )");
}
#endif
#if !defined(YY_FLEX_SUBMINOR_VERSION)
//----------------------------------------------------------------------------
extern "C" { // some bogus code to keep the compiler happy
void declinfoYYdummy() { yy_flex_realloc(0,0); }
}
#endif
......@@ -563,12 +563,18 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName,
void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
{
writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict,FALSE);
if (Config_getBool("REFERENCED_BY_RELATION"))
{
writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict,FALSE);
}
}
void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
{
writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict,TRUE);
if (Config_getBool("REFERENCES_RELATION"))
{
writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict,TRUE);
}
}
bool Definition::hasDocumentation() const
......@@ -758,7 +764,6 @@ void Definition::writePathFragment(OutputList &ol) const
if (m_outerScope && m_outerScope!=Doxygen::globalScope)
{
m_outerScope->writePathFragment(ol);
ol.writeString("&nbsp;");
if (m_outerScope->definitionType()==Definition::TypeClass ||
m_outerScope->definitionType()==Definition::TypeNamespace)
{
......@@ -773,11 +778,21 @@ void Definition::writePathFragment(OutputList &ol) const
}
else
{
ol.writeString("&nbsp;");
ol.writeString("/");
ol.writeString("&nbsp;");
}
ol.writeString("&nbsp;");
}
ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_localName);
if (isLinkable())
{
ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_localName);
}
else
{
ol.startBold();
ol.docify(m_localName);
ol.endBold();
}
}
void Definition::writeNavigationPath(OutputList &ol) const
......
......@@ -222,7 +222,7 @@ void DirDef::writeDocumentation(OutputList &ol)
else
{
ol.startBold();
ol.writeString(fd->name());
ol.docify(fd->name());
ol.endBold();
}
if (fd->generateSourceFile())
......
......@@ -279,11 +279,24 @@ static void checkArgumentName(const QString &name,bool isParam)
//printf("member type=%d\n",memberDef->memberType());
QString scope=g_memberDef->getScopeString();
if (!scope.isEmpty()) scope+="::"; else scope="";
warn_doc_error(g_memberDef->docFile(),g_memberDef->docLine(),
QString inheritedFrom = "";
QString docFile = g_memberDef->docFile();
int docLine = g_memberDef->docLine();
MemberDef *inheritedMd = g_memberDef->inheritsDocsFrom();
if (inheritedMd) // documentation was inherited
{
inheritedFrom.sprintf(" inherited from member %s at line "
"%d in file %s",inheritedMd->name().data(),
inheritedMd->docLine(),inheritedMd->docFile().data());
docFile = g_memberDef->getDefFileName();
docLine = g_memberDef->getDefLine();
}
warn_doc_error(docFile,docLine,
"Warning: argument `%s' of command @param "
"is not found in the argument list of %s%s%s",
"is not found in the argument list of %s%s%s%s",
aName.data(),scope.data(),g_memberDef->name().data(),
argListToString(al).data());
argListToString(al).data(),inheritedFrom.data());
}
p=i+l;
}
......@@ -331,7 +344,14 @@ static void checkUndocumentedParams()
errMsg+=" parameter "+argName+"\n";
}
}
warn_doc_error(g_memberDef->docFile(),g_memberDef->docLine(),errMsg);
if (g_memberDef->inheritsDocsFrom())
{
warn_doc_error(g_memberDef->getDefFileName(),g_memberDef->getDefLine(),errMsg);
}
else
{
warn_doc_error(g_memberDef->docFile(),g_memberDef->docLine(),errMsg);
}
}
}
}
......@@ -1597,8 +1617,16 @@ bool DocXRefItem::parse()
ASSERT(item!=0);
if (item)
{
m_file = refList->listName();
m_anchor = item->listAnchor;
if (g_memberDef && g_memberDef->name().at(0)=='@')
{
m_file = "@"; // can't cross reference anonymous enum
m_anchor = "@";
}
else
{
m_file = refList->listName();
m_anchor = item->listAnchor;
}
m_title = refList->sectionTitle();
//printf("DocXRefItem: file=%s anchor=%s title=%s\n",
// m_file.data(),m_anchor.data(),m_title.data());
......
......@@ -317,6 +317,7 @@ HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"
HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"))*{ID}{FUNCARG}?
%option noyywrap
%option yylineno
......@@ -666,7 +667,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
return 0;
}
<St_Ref>("#"|"::")?({ID}("."|"#"|"::"|"-"))*{ID} {
<St_Ref>{REFWORD} {
g_token->name=yytext;
return TK_WORD;
}
......
......@@ -543,6 +543,20 @@ static void writeBoxMemberList(QTextStream &t,char prot,MemberList &ml,ClassDef
t << "\\l";
}
}
// write member groups within the memberlist
MemberGroupList *mgl = ml.getMemberGroupList();
if (mgl)
{
MemberGroupListIterator mgli(*mgl);
MemberGroup *mg;
for (mgli.toFirst();(mg=mgli.current());++mgli)
{
if (mg->members())
{
writeBoxMemberList(t,prot,*mg->members(),scope);
}
}
}
}
void DotNode::writeBox(QTextStream &t,
......@@ -582,6 +596,18 @@ void DotNode::writeBox(QTextStream &t,
writeBoxMemberList(t,'-',m_classDef->priMethods,m_classDef);
writeBoxMemberList(t,'-',m_classDef->priStaticMethods,m_classDef);
writeBoxMemberList(t,'-',m_classDef->priSlots,m_classDef);
if (m_classDef->memberGroupSDict)
{
MemberGroupSDict::Iterator mgdi(*m_classDef->memberGroupSDict);
MemberGroup *mg;
for (mgdi.toFirst();(mg=mgdi.current());++mgdi)
{
if (mg->members())
{
writeBoxMemberList(t,'*',*mg->members(),m_classDef);
}
}
}
t << "}";
}
else // old look
......@@ -2851,7 +2877,7 @@ void DotGroupCollaboration::addCollaborationMember(
QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat format,
const char *path, const char *,
const char *path, const char *relPath,
bool writeImageMap)
{
QDir d(path);
......@@ -2922,11 +2948,11 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
if (writeImageMap)
{
QCString mapLabel = convertNameToFile(baseName);
t << "<center><table><tr><td><img src=\"" << imgName
t << "<center><table><tr><td><img src=\"" << relPath << imgName
<< "\" border=\"0\" alt=\"\" usemap=\"#"
<< mapLabel << "_map\">" << endl;
t << "<map name=\"" << mapLabel << "_map\">" << endl;
convertMapFile(t,mapName,"");
convertMapFile(t,mapName,relPath);
t << "</map></td></tr></table></center>" << endl;
thisDir.remove(mapName);
}
......
......@@ -3431,8 +3431,11 @@ static bool findClassRelation(
cd->getFileDef(), // todo: is this ok?
baseClassName,
&baseClassTypeDef,
&templSpec);
//printf("baseClassName=%s baseClass=%p cd=%p\n",baseClassName.data(),baseClass,cd);
&templSpec,
mode==Undocumented
);
//printf("baseClassName=%s baseClass=%p cd=%p explicitGlobalScope=%d\n",
// baseClassName.data(),baseClass,cd,explicitGlobalScope);
//printf(" root->name=`%s' baseClassName=`%s' baseClass=%s templSpec=%s\n",
// root->name.data(),
// baseClassName.data(),
......@@ -3530,7 +3533,7 @@ static bool findClassRelation(
{
findTemplateInstanceRelation(root,context,baseClass,templSpec,templateNames,isArtificial);
}
else if (mode==DocumentedOnly)
else if (mode==DocumentedOnly || mode==Undocumented)
{
QCString usedName;
if (baseClassTypeDef)
......@@ -4243,7 +4246,8 @@ static bool findGlobalMember(Entry *root,
}
else // got docs for an undefined member!
{
if (root->type!="friend class" && root->type!="friend struct" &&
if (root->type!="friend class" &&
root->type!="friend struct" &&
root->type!="friend union")
{
warn(root->fileName,root->startLine,
......@@ -4879,10 +4883,12 @@ static void findMember(Entry *root,
int candidates=0;
if (mn->count()>0)
{
//printf("Assume template class\n");
for (mni.toFirst();(md=mni.current());++mni)
{
ClassDef *cd=md->getClassDef();
if (cd!=0 && cd->name()==className)
//printf("cd->name()==%s className=%s\n",cd->name().data(),className.data());
if (cd!=0 && rightScopeMatch(cd->name(),className))
{
if (root->tArgLists && md->templateArguments() &&
root->tArgLists->getLast()->count()<=md->templateArguments()->count())
......@@ -6175,6 +6181,7 @@ static void inheritDocumentation()
}
if (bmd) // copy the documentation from the reimplemented member
{
md->setInheritsDocsFrom(bmd);
md->setDocumentation(bmd->documentation(),bmd->docFile(),bmd->docLine());
md->setDocsForDefinition(bmd->isDocsForDefinition());
md->setBriefDescription(bmd->briefDescription(),bmd->briefFile(),bmd->briefLine());
......
......@@ -630,7 +630,7 @@ void FTVHelp::generateTreeView()
#endif
t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n";
t << " <head>\n";
t << " <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=\""
t << " <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset="
<< theTranslator->idLanguageCharset() << "\" />\n";
t << " <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n";
t << " <meta http-equiv=\"Content-Language\" content=\"en\" />\n";
......
......@@ -923,10 +923,21 @@ void HtmlDocVisitor::visitPost(DocParamList *)
void HtmlDocVisitor::visitPre(DocXRefItem *x)
{
if (m_hide) return;
m_t << "<dl compact><dt><b><a class=\"el\" href=\""
<< x->relPath() << x->file() << Doxygen::htmlFileExtension << "#" << x->anchor() << "\">";
bool anonymousEnum = x->file()=="@";
if (!anonymousEnum)
{
m_t << "<dl compact><dt><b><a class=\"el\" href=\""
<< x->relPath() << x->file() << Doxygen::htmlFileExtension
<< "#" << x->anchor() << "\">";
}
else
{
m_t << "<dl compact><dt><b>";
}
filter(x->title());
m_t << ":</a></b></dt><dd>";
m_t << ":";
if (!anonymousEnum) m_t << "</a>";
m_t << "</b></dt><dd>";
}
void HtmlDocVisitor::visitPost(DocXRefItem *)
......
......@@ -1108,7 +1108,7 @@ void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const
{
DBG_HTML(t << "<!-- startMemberDoc -->" << endl;)
t << "<p>" << endl;
t << "<table class=\"mdTable\" width=\"100%\" cellpadding=\"2\" cellspacing=\"0\">" << endl;
t << "<table class=\"mdTable\" cellpadding=\"2\" cellspacing=\"0\">" << endl;
t << " <tr>" << endl;
t << " <td class=\"mdRow\">" << endl;
t << " <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">" << endl;
......
......@@ -603,6 +603,7 @@ int countClassHierarchy()
void writeHierarchicalIndex(OutputList &ol)
{
//printf("writeHierarchicalIndex: %d classes\n",hierarchyClasses);
if (hierarchyClasses==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
......
......@@ -930,8 +930,9 @@ void LatexDocVisitor::visitPre(DocXRefItem *x)
{
if (m_hide) return;
m_t << "\\begin{Desc}" << endl;
bool anonymousEnum = x->file()=="@";
m_t << "\\item[";
if (Config_getBool("PDF_HYPERLINKS"))
if (Config_getBool("PDF_HYPERLINKS") && !anonymousEnum)
{
m_t << "\\hyperlink{" << stripPath(x->file()) << "_" << x->anchor() << "}{";
}
......
......@@ -425,6 +425,7 @@ MemberDef::MemberDef(const char *df,int dl,
groupMember = 0;
m_hasDocumentedParams = FALSE;
m_hasDocumentedReturnType = FALSE;
m_docProvider = 0;
}
/*! Destroys the member definition. */
......
......@@ -181,8 +181,9 @@ class MemberDef : public Definition
void makeRelated() { related=TRUE; }
void setHasDocumentedParams(bool b) { m_hasDocumentedParams = b; }
void setHasDocumentedReturnType(bool b) { m_hasDocumentedReturnType = b; }
void setInheritsDocsFrom(MemberDef *md) { m_docProvider = md; }
// output generatation
// output generation
void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
void writeDeclaration(OutputList &ol,
......@@ -276,6 +277,8 @@ class MemberDef : public Definition
void setTemplateMaster(MemberDef *mt) { m_templateMaster=mt; }
void addListReference(Definition *d);
MemberDef *inheritsDocsFrom() const { return m_docProvider; }
//QCString getBodyAnchor() const
//{
// return bodyMemb ? bodyMemb->anchor() : anchor();
......@@ -397,6 +400,9 @@ class MemberDef : public Definition
bool m_hasDocumentedParams;
bool m_hasDocumentedReturnType;
// documentation inheritance
MemberDef *m_docProvider;
};
#endif
......@@ -58,6 +58,7 @@ class MemberList : public QList<MemberDef>
void setInGroup(bool group) { m_inGroup=group; }
void addListReferences(Definition *def);
void findSectionsInDocumentation();
MemberGroupList *getMemberGroupList() const { return memberGroupList; }
private:
int m_varCnt,m_funcCnt,m_enumCnt,m_enumValCnt,m_typeCnt;
......
......@@ -1173,11 +1173,12 @@ void RTFDocVisitor::visitPost(DocParamList *)
void RTFDocVisitor::visitPre(DocXRefItem *x)
{
if (m_hide) return;
bool anonymousEnum = x->file()=="@";
DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocXRefItem)}\n");
m_t << "{"; // start param list
//m_t << "{\\b "; // start bold
m_t << "{" << rtf_Style["Heading5"]->reference << endl;
if (Config_getBool("RTF_HYPERLINKS"))
if (Config_getBool("RTF_HYPERLINKS") && !anonymousEnum)
{
QString refName;
if (!x->file().isEmpty())
......
This diff is collapsed.
......@@ -3561,6 +3561,7 @@ bool resolveLink(/* in */ const char *scName,
*resContext=0;
QCString linkRef=lr;
printf("ResolveLink linkRef=%s\n",lr);
FileDef *fd;
GroupDef *gd;
PageDef *pd;
......@@ -4704,7 +4705,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
const char *prefix,
const char *name,const char *title,const char *args)
{
//printf("addRefItem(prefix=%s,name=%s,title=%s,args=%s)\n",prefix,name,title,args);
//printf("addRefItem(sli=%p,prefix=%s,name=%s,title=%s,args=%s)\n",sli,prefix,name,title,args);
if (sli)
{
QListIterator<ListItemInfo> slii(*sli);
......@@ -4724,7 +4725,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
{
RefItem *item = refList->getRefItem(lii->itemId);
ASSERT(item!=0);
//printf("anchor=%s\n",item->listAnchor.data());
//printf("anchor=%s written=%d\n",item->listAnchor.data(),item->written);
if (item->written) return;
QCString doc(1000);
......
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