Commit ca3fb0a6 authored by dimitri's avatar dimitri

Release-1.2.14-20020317

parent ecbd3e37
DOXYGEN Version 1.2.14-20020310
DOXYGEN Version 1.2.14-20020317
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (10 March 2002)
Dimitri van Heesch (17 March 2002)
DOXYGEN Version 1.2.14_20020310
DOXYGEN Version 1.2.14_20020317
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) (10 March 2002)
Dimitri van Heesch (dimitri@stack.nl) (17 March 2002)
1.2.14-20020310
1.2.14-20020317
......@@ -138,7 +138,7 @@ void DumpDoc(IDoc *doc)
break;
case IDoc::SimpleSect:
{
IDocSimpleSect *ss = dynamic_cast<IDocSimpleSect*>(ss);
IDocSimpleSect *ss = dynamic_cast<IDocSimpleSect*>(doc);
ASSERT(ss!=0);
}
break;
......@@ -188,91 +188,91 @@ void DumpDoc(IDoc *doc)
break;
case IDoc::HRuler:
{
IDocHRuler *hr = dynamic_cast<IDocHRuler*>(hr);
IDocHRuler *hr = dynamic_cast<IDocHRuler*>(doc);
ASSERT(hr!=0);
}
break;
case IDoc::LineBreak:
{
IDocLineBreak *lb = dynamic_cast<IDocLineBreak*>(lb);
IDocLineBreak *lb = dynamic_cast<IDocLineBreak*>(doc);
ASSERT(lb!=0);
}
break;
case IDoc::ULink:
{
IDocULink *ul = dynamic_cast<IDocULink*>(ul);
IDocULink *ul = dynamic_cast<IDocULink*>(doc);
ASSERT(ul!=0);
}
break;
case IDoc::EMail:
{
IDocEMail *em = dynamic_cast<IDocEMail*>(em);
IDocEMail *em = dynamic_cast<IDocEMail*>(doc);
ASSERT(em!=0);
}
break;
case IDoc::Link:
{
IDocLink *lk = dynamic_cast<IDocLink*>(lk);
IDocLink *lk = dynamic_cast<IDocLink*>(doc);
ASSERT(lk!=0);
}
break;
case IDoc::ProgramListing:
{
IDocProgramListing *pl = dynamic_cast<IDocProgramListing*>(pl);
IDocProgramListing *pl = dynamic_cast<IDocProgramListing*>(doc);
ASSERT(pl!=0);
}
break;
case IDoc::CodeLine:
{
IDocCodeLine *cl = dynamic_cast<IDocCodeLine*>(cl);
IDocCodeLine *cl = dynamic_cast<IDocCodeLine*>(doc);
ASSERT(cl!=0);
}
break;
case IDoc::Highlight:
{
IDocHighlight *hl = dynamic_cast<IDocHighlight*>(hl);
IDocHighlight *hl = dynamic_cast<IDocHighlight*>(doc);
ASSERT(hl!=0);
}
break;
case IDoc::Formula:
{
IDocFormula *fm = dynamic_cast<IDocFormula*>(fm);
IDocFormula *fm = dynamic_cast<IDocFormula*>(doc);
ASSERT(fm!=0);
}
break;
case IDoc::Image:
{
IDocImage *img = dynamic_cast<IDocImage*>(img);
IDocImage *img = dynamic_cast<IDocImage*>(doc);
ASSERT(img!=0);
}
break;
case IDoc::DotFile:
{
IDocDotFile *df = dynamic_cast<IDocDotFile*>(df);
IDocDotFile *df = dynamic_cast<IDocDotFile*>(doc);
ASSERT(df!=0);
}
break;
case IDoc::IndexEntry:
{
IDocIndexEntry *ie = dynamic_cast<IDocIndexEntry*>(ie);
IDocIndexEntry *ie = dynamic_cast<IDocIndexEntry*>(doc);
ASSERT(ie!=0);
}
break;
case IDoc::Table:
{
IDocTable *tbl = dynamic_cast<IDocTable*>(tbl);
IDocTable *tbl = dynamic_cast<IDocTable*>(doc);
ASSERT(tbl!=0);
}
break;
case IDoc::Row:
{
IDocRow *row = dynamic_cast<IDocRow*>(row);
IDocRow *row = dynamic_cast<IDocRow*>(doc);
ASSERT(row!=0);
}
break;
case IDoc::Entry:
{
IDocEntry *ent = dynamic_cast<IDocEntry*>(ent);
IDocEntry *ent = dynamic_cast<IDocEntry*>(doc);
ASSERT(ent!=0);
}
break;
......
......@@ -143,9 +143,11 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_internal_docs INTERNAL_DOCS
<li> \refitem cfg_javadoc_autobrief JAVADOC_AUTOBRIEF
<li> \refitem cfg_latex_batchmode LATEX_BATCHMODE
<li> \refitem cfg_latex_cmd_name LATEX_CMD_NAME
<li> \refitem cfg_latex_header LATEX_HEADER
<li> \refitem cfg_latex_output LATEX_OUTPUT
<li> \refitem cfg_macro_expansion MACRO_EXPANSION
<li> \refitem cfg_makeindex_cmd_name MAKEINDEX_CMD_NAME
<li> \refitem cfg_man_extension MAN_EXTENSION
<li> \refitem cfg_man_links MAN_LINKS
<li> \refitem cfg_man_output MAN_OUTPUT
......@@ -904,6 +906,19 @@ followed by the descriptions of the tags grouped by category.
If a relative path is entered the value of \c OUTPUT_DIRECTORY will be
put in front of it. If left blank `latex' will be used as the default path.
\anchor cfg_latex_cmd_name
<dt>\c LATEX_CMD_NAME <dd>
\addindex LATEX_CMD_NAME
The \c LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked.
If left blank `latex' will be used as the default command name.
\anchor cfg_makeindex_cmd_name
<dt>\c MAKEINDEX_CMD_NAME <dd>
\addindex MAKEINDEX_CMD_NAME
The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
generate index for LaTeX. If left blank `makeindex' will be used as the
default command name.
\anchor cfg_compact_latex
<dt>\c COMPACT_LATEX <dd>
\addindex COMPACT_LATEX
......
......@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
Currently (version 1.2.14-20020224), 25 languages
Currently (version 1.2.14-20020310), 25 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German,
......@@ -162,7 +162,7 @@ when the translator was updated.
<TD>Romanian</TD>
<TD>Alexandru Iosup</TD>
<TD>aiosup@NOSPAM.yahoo.com</TD>
<TD>1.2.1</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Russian</TD>
......@@ -251,7 +251,7 @@ when the translator was updated.
\hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & up-to-date \\
\hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.1 \\
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & up-to-date \\
\hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\
\hline
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.2.14_20020310
Version: 1.2.14_20020317
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -335,6 +335,7 @@ static void startCodeLine()
//lineAnchor.sprintf("l%05d",g_yyLineNr);
Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
//printf("startCodeLine %d d=%p\n",g_yyLineNr,d);
//g_code->startLineNumber();
if (!g_includeCodeFragment && d && d->isLinkableInProject())
{
......@@ -590,6 +591,23 @@ static MemberDef *setCallContextForVar(const QCString &name)
return 0;
}
static void addDocCrossReference(MemberDef *src,MemberDef *dst)
{
//printf("addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
if (Config_getBool("REFERENCED_BY_RELATION") &&
(src->isFunction() || src->isSlot())
)
{
dst->addSourceReferencedBy(src);
}
if (Config_getBool("REFERENCES_RELATION") &&
(src->isFunction() || src->isSlot())
)
{
src->addSourceReferences(dst);
}
}
static void generateClassOrGlobalLink(OutputDocInterface &ol,char *clName,int *clNameLen=0)
{
int i=0;
......@@ -646,18 +664,7 @@ static void generateClassOrGlobalLink(OutputDocInterface &ol,char *clName,int *c
writeMultiLineCodeLink(ol,d->getReference(),d->getOutputFileBase(),md->getBodyAnchor(),clName);
if (g_currentMemberDef)
{
if (Config_getBool("REFERENCED_BY_RELATION") &&
(g_currentMemberDef->isFunction() || g_currentMemberDef->isSlot())
)
{
md->addSourceReferencedBy(g_currentMemberDef);
}
if (Config_getBool("REFERENCES_RELATION") &&
(g_currentMemberDef->isFunction() || g_currentMemberDef->isSlot())
)
{
g_currentMemberDef->addSourceReferences(md);
}
addDocCrossReference(g_currentMemberDef,md);
}
return;
}
......@@ -711,21 +718,13 @@ static bool getLink(const char *className,
if (d && d->isLinkable())
{
g_theCallContext.setClass(stripClassName(md->typeString()));
//printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n",
// g_currentDefinition,g_currentMemberDef,g_insideBody);
if (g_currentDefinition && g_currentMemberDef &&
md!=g_currentMemberDef && g_insideBody)
{
if (Config_getBool("REFERENCED_BY_RELATION") &&
(g_currentMemberDef->isFunction() || g_currentMemberDef->isSlot())
)
{
md->addSourceReferencedBy(g_currentMemberDef);
}
if (Config_getBool("REFERENCES_RELATION") &&
(g_currentMemberDef->isFunction() || g_currentMemberDef->isSlot())
)
{
g_currentMemberDef->addSourceReferences(md);
}
addDocCrossReference(g_currentMemberDef,md);
}
//printf("d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getOutputFileBase().data(),d->name().data(),md->name().data());
......@@ -763,14 +762,7 @@ static bool generateClassMemberLink(OutputDocInterface &ol,ClassDef *mcd,const c
if (g_currentDefinition && g_currentMemberDef &&
xmd!=g_currentMemberDef && g_insideBody)
{
if (Config_getBool("REFERENCED_BY_RELATION") && g_currentMemberDef->isFunction())
{
xmd->addSourceReferencedBy(g_currentMemberDef);
}
if (Config_getBool("REFERENCES_RELATION") && g_currentMemberDef->isFunction())
{
g_currentMemberDef->addSourceReferences(xmd);
}
addDocCrossReference(g_currentMemberDef,xmd);
}
// write the actual link
......
......@@ -1900,6 +1900,23 @@ void Config::create()
cs->setDefaultValue("latex");
cs->setWidgetType(ConfigString::Dir);
cs->addDependency("GENERATE_LATEX");
cs = addString(
"LATEX_CMD_NAME",
"The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be "
"invoked. If left blank `latex' will be used as the default command name. \n"
);
cs->setDefaultValue("latex");
cs->setWidgetType(ConfigString::File);
cs->addDependency("GENERATE_LATEX");
cs = addString(
"MAKEINDEX_CMD_NAME",
"The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \n"
"generate index for LaTeX. If left blank `makeindex' will be used as the \n"
"default command name. \n"
);
cs->setDefaultValue("makeindex");
cs->setWidgetType(ConfigString::File);
cs->addDependency("GENERATE_LATEX");
cb = addBool(
"COMPACT_LATEX",
"If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \n"
......
......@@ -910,7 +910,7 @@ static void findUsingDirectives(Entry *root)
// the global file scope.
if (root->parent->section == Entry::NAMESPACE_SEC)
{
nsName=root->parent->name.copy();
nsName=stripAnonymousNamespaceScope(root->parent->name);
if (!nsName.isEmpty())
{
nd = getResolvedNamespace(nsName);
......@@ -926,8 +926,8 @@ static void findUsingDirectives(Entry *root)
{
QCString scope=scopeOffset>0 ?
nsName.left(scopeOffset)+"::" : QCString();
//printf("Trying with scope=`%s'\n",scope.data());
usingNd = getResolvedNamespace(scope+root->name);
//printf("Trying with scope=`%s' usingNd=%p\n",(scope+root->name).data(),usingNd);
if (scopeOffset==0)
{
scopeOffset=-1;
......@@ -943,6 +943,7 @@ static void findUsingDirectives(Entry *root)
// add the namespace the correct scope
if (usingNd)
{
//printf("using fd=%p nd=%p\n",fd,nd);
if (nd)
{
//printf("Inside namespace %s\n",nd->name().data());
......@@ -1315,7 +1316,7 @@ static MemberDef *addVariableToFile(
if (md->getGroupDef()==0 && root->groups->first())
{
GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()];
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, root->doc.length() != 0);
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty());
}
else if (md->getGroupDef()!=0 && root->groups->count()==0)
{
......@@ -1900,8 +1901,9 @@ static void buildFunctionList(Entry *root)
// merge ingroup specifiers
if (md->getGroupDef()==0 && root->groups->first())
{
addMemberToGroups(root,md);
GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()];
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, root->doc.length() != 0);
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty());
}
else if (md->getGroupDef()!=0 && root->groups->count()==0)
{
......@@ -2212,6 +2214,17 @@ static void transferFunctionDocumentation()
mdec->mergeMemberSpecifiers(mdef->getMemberSpecifiers());
mdef->mergeMemberSpecifiers(mdec->getMemberSpecifiers());
// copy group info.
//if (mdec->getGroupDef()==0 && mdef->getGroupDef()!=0)
//{
// mdef->setGroupDef(mdec->getGroupDef(),mdec->getGroupPri(),mdec->docFile(),mdec->docLine(),mdec->hasDocumentation());
//}
//else if (mdef->getGroupDef()==0 && mdec->getGroupDef()!=0)
//{
// mdec->setGroupDef(mdef->getGroupDef(),mdef->getGroupPri(),mdef->docFile(),mdef->docLine(),mdef->hasDocumentation());
//}
int todoId = QMAX(mdec->todoId(),mdef->todoId());
int testId = QMAX(mdec->testId(),mdef->testId());
int bugId = QMAX(mdec->bugId() ,mdef->bugId() );
......@@ -3064,7 +3077,7 @@ static void computeClassRelations()
{
findBaseClassesForClass(root,cd,cd,DocumentedOnly,FALSE);
}
else if (bName.right(2)!="::")
if ((cd==0 || !cd->hasDocumentation()) && bName.right(2)!="::")
{
if (!root->name.isEmpty() && root->name[0]!='@')
warn_undoc(
......@@ -4930,6 +4943,9 @@ static void computeMemberRelations()
//printf("setting (new) reimplements member\n");
md->setReimplements(bmd);
}
//printf("%s: add reimplements member %s\n",mcd->name().data(),bmcd->name().data());
//md->setImplements(bmd);
//printf("%s: add reimplementedBy member %s\n",bmcd->name().data(),mcd->name().data());
bmd->insertReimplementedBy(md);
}
}
......@@ -5090,6 +5106,7 @@ static void addSourceReferences()
MemberDef *md=0;
for (mni.toFirst();(md=mni.current());++mni)
{
//printf("class member %s\n",md->name().data());
ClassDef *cd=md->getClassDef();
FileDef *fd=md->getBodyDef();
if (fd && cd && cd->isLinkableInProject() && md->getStartBodyLine()!=-1 &&
......@@ -5110,8 +5127,9 @@ static void addSourceReferences()
for (mni.toFirst();(md=mni.current());++mni)
{
NamespaceDef *nd=md->getNamespaceDef();
FileDef *fd=md->getFileDef();
FileDef *fd=md->getBodyDef();
GroupDef *gd=md->getGroupDef();
//printf("member %s fd=%p nd=%p gd=%p\n",md->name().data(),fd,nd,gd);
if (fd && md->getStartBodyLine()!=-1 && md->isLinkableInProject() &&
((nd && nd->isLinkableInProject()) ||
(fd->isLinkableInProject()) ||
......
......@@ -163,7 +163,7 @@ void GroupDef::addMembersToMemberGroup()
void GroupDef::insertMember(MemberDef *md,bool docOnly)
{
//fprintf(stderr, "GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
//printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
MemberNameInfo *mni=0;
if ((mni=(*allMemberNameInfoSDict)[md->name()]))
{ // member with this name already found
......@@ -630,7 +630,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
/*! Add a member to the group with the highest priority */
void addMemberToGroups(Entry *root,MemberDef *md)
{
//printf(" Root 0x%p = %s, md 0x%p %s\n", root, root->name.data(), md, md->name().data() );
//printf(" Root %p = %s, md %p=%s groups=%d\n", root, root->name.data(), md, md->name().data(), root->groups->count() );
QListIterator<Grouping> gli(*root->groups);
Grouping *g;
......@@ -644,7 +644,8 @@ void addMemberToGroups(Entry *root,MemberDef *md)
(gd=Doxygen::groupSDict[g->groupname]) &&
g->pri >= pri)
{
if( fgd && g->pri == pri ) {
if (fgd && g->pri==pri)
{
warn(root->fileName.data(), root->startLine,
"Warning: Member %s found in multiple %s groups! "
"The member will be put in group %s, and not in group %s",
......@@ -657,14 +658,18 @@ void addMemberToGroups(Entry *root,MemberDef *md)
pri = g->pri;
}
}
//printf("fgd=%p\n",fgd);
// put member into group defined by this entry?
if( fgd )
if (fgd)
{
GroupDef *mgd = md->getGroupDef();
//printf("mgd=%p\n",mgd);
bool insertit = FALSE;
if (mgd==0)
{
insertit = TRUE;
}
else if (mgd!=fgd)
{
bool moveit = FALSE;
......@@ -672,18 +677,19 @@ void addMemberToGroups(Entry *root,MemberDef *md)
// move member from one group to another if
// - the new one has a higher priority
// - the new entry has the same priority, but with docs where the old one had no docs
if( md->getGroupPri() < pri )
if (md->getGroupPri()<pri)
{
moveit = TRUE;
}
else
{
if( md->getGroupPri() == pri )
if (md->getGroupPri()==pri)
{
if (!root->doc.isEmpty() && !md->getGroupHasDocs())
{
if( root->doc.length() != 0 && !md->getGroupHasDocs() )
moveit = TRUE;
else if( root->doc.length() != 0 && md->getGroupHasDocs() )
}
else if (!root->doc.isEmpty() && md->getGroupHasDocs())
{
warn(md->getGroupFileName(),md->getGroupStartLine(),
"Warning: Member documentation for %s found several times in %s groups!\n"
......@@ -697,15 +703,16 @@ void addMemberToGroups(Entry *root,MemberDef *md)
}
}
if( moveit )
if (moveit)
{
mgd->removeMember(md);
insertit = TRUE;
}
}
if( insertit )
if (insertit)
{
//printf("insertMember\n");
fgd->insertMember(md);
md->setGroupDef(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
ClassDef *cd = md->getClassDefOfAnonymousType();
......
......@@ -351,6 +351,21 @@ void endFile(OutputList &ol,bool external)
//----------------------------------------------------------------------------
static bool classHasVisibleChildren(ClassDef *cd)
{
if (cd->subClasses()->count()==0) return FALSE;
BaseClassList *bcl=cd->subClasses();
BaseClassListIterator bcli(*bcl);
for ( ; bcli.current() ; ++bcli)
{
if (bcli.current()->classDef->isVisibleInHierarchy())
{
return TRUE;
}
}
return FALSE;
}
void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
{
HtmlHelp *htmlHelp=0;
......@@ -381,7 +396,8 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
started=TRUE;
}
//printf("Passed...\n");
bool hasChildren = !cd->visited && !hideSuper && cd->subClasses()->count()>0;
bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
//printf("tree4: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
//printf("Writing class %s\n",cd->displayName().data());
......@@ -454,7 +470,8 @@ void writeClassTree(BaseClassList *cl,int level)
for ( ; cli.current() ; ++cli)
{
ClassDef *cd=cli.current()->classDef;
if (cd->isVisibleInHierarchy() && !cd->visited)
if (cd->isVisibleInHierarchy() && hasVisibleRoot(cd->baseClasses()))
//if (cd->isVisibleInHierarchy() && !cd->visited)
{
if (!started)
{
......@@ -462,7 +479,8 @@ void writeClassTree(BaseClassList *cl,int level)
if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE;
}
bool hasChildren = cd->subClasses()->count()>0;
bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
//printf("tree2: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
if (hasHtmlHelp)
......@@ -499,7 +517,8 @@ void writeClassTreeNode(ClassDef *cd,bool hasHtmlHelp,bool hasFtvHelp,bool &star
{
started=TRUE;
}
bool hasChildren = cd->subClasses()->count()>0;
bool hasChildren = classHasVisibleChildren(cd);
//printf("node: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
if (hasHtmlHelp)
......@@ -583,7 +602,8 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started)
if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE;
}
bool hasChildren = !cd->visited && cd->subClasses()->count()>0;
bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
//printf("list: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
//printf("Writing class %s isLinkable()=%d isLinkableInProject()=%d cd->templateMaster()=%p\n",
......@@ -2412,7 +2432,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
}
// write classes
if(gd->classSDict->count()>0)
if (gd->classSDict->count()>0)
{
if(htmlHelp)
{
......@@ -2616,19 +2636,11 @@ void writeGroupIndex(OutputList &ol)
writeGroupHierarchy(ol);
if (hasHtmlHelp)
{
//writeGroupTree(ol); // KPW - modified to write hierarchial HMTL Help
//if(!Config::instance()->get(""))
//{
htmlHelp->decContentsDepth();
//}
}
if (hasFtvHelp)
{
//writeGroupTree(ol); // KPW - modified to write hierarchial FTV Help
//if(!Config::instance()->get(""))
//{
ftvHelp->decContentsDepth();
//}
}
endFile(ol);
ol.popGeneratorState();
......
......@@ -147,6 +147,10 @@ void LatexGenerator::init()
err("Could not open file %s for writing\n",fileName.data());
exit(1);
}
// inserted by KONNO Akihisa <konno@researchers.jp> 2002-03-05
QCString latex_command = Config_getString("LATEX_CMD_NAME");
QCString mkidx_command = Config_getString("MAKEINDEX_CMD_NAME");
// end insertion by KONNO Akihisa <konno@researchers.jp> 2002-03-05
QTextStream t(&file);
t << "all: refman.dvi" << endl
<< endl
......@@ -194,16 +198,16 @@ void LatexGenerator::init()
<< endl
<< "refman.dvi: refman.tex doxygen.sty" << endl
<< "\techo \"Running latex...\"" << endl
<< "\tlatex refman.tex" << endl
<< "\t" << latex_command << " refman.tex" << endl
<< "\techo \"Running makeindex...\"" << endl
<< "\tmakeindex refman.idx" << endl
<< "\t" << mkidx_command << " refman.idx" << endl
<< "\techo \"Rerunning latex....\"" << endl
<< "\tlatex refman.tex" << endl
<< "\t" << latex_command << " refman.tex" << endl
<< "\tlatex_count=5 ; \\" << endl
<< "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
<< "\t do \\" << endl
<< "\t echo \"Rerunning latex....\" ;\\" << endl
<< "\t latex refman.tex ;\\" << endl
<< "\t " << latex_command << " refman.tex ;\\" << endl
<< "\t latex_count=`expr $$latex_count - 1` ;\\" << endl
<< "\t done" << endl << endl
<< "clean:" << endl
......
......@@ -380,11 +380,10 @@ MemberDef::~MemberDef()
void MemberDef::setReimplements(MemberDef *md)
{
//if (m_templateMaster)
//{
// m_templateMaster->setReimplements(md);
//}
redefines=md;
//if (redefines==0) redefines = new MemberList;
//if (redefines->find(md)==-1) redefines->inSort(md);
redefines = md;
}
void MemberDef::insertReimplementedBy(MemberDef *md)
......@@ -394,7 +393,10 @@ void MemberDef::insertReimplementedBy(MemberDef *md)
m_templateMaster->insertReimplementedBy(md);
}
if (redefinedBy==0) redefinedBy = new MemberList;
if (redefinedBy->find(md)==-1) redefinedBy->inSort(md);
if (redefinedBy->findRef(md)==-1)
{
redefinedBy->inSort(md);
}
}
MemberDef *MemberDef::reimplements() const
......@@ -1374,6 +1376,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//ol.writeString(".");
}
MemberList *bml=reimplementedBy();
if (bml)
{
......
......@@ -249,9 +249,9 @@ class MemberDef : public Definition
private:
ClassDef *classDef; // member of or related to
FileDef *fileDef; // member of file definition
MemberDef *redefines; // the member that is redefined by this one
MemberDef *enumScope; // the enclosing scope, if this is an enum field
MemberDef *annEnumType; // the annonymous enum that is the type of this member
MemberDef *redefines; // the members that this member redefines
MemberList *redefinedBy; // the list of members that redefine this one
MemberDef *memDef; // member definition for this declaration
MemberDef *memDec; // member declaration for this definition
......
......@@ -1001,6 +1001,7 @@ static int yyread(char *buf,int max_size)
ID [a-z_A-Z][a-z_A-Z0-9]*
B [ \t]
BN [ \t\r\n]
CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%option noyywrap
......@@ -1213,6 +1214,9 @@ BN [ \t\r\n]
g_defArgsStr+=yytext;
}
*/
<FindDefineArgs>{CHARLIT} {
g_defArgsStr+=yytext;
}
<FindDefineArgs>\" {
g_defArgsStr+=*yytext;
BEGIN(ReadString);
......
......@@ -1009,7 +1009,7 @@ class TranslatorBrazilian: public Translator
"Se a tag \\c MAX_DOT_GRAPH_HEIGHT no arquivo de configuração tem o valor"
"200, o seguinte gráfo será gerado:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"As caixas no grafo acima tem as seguintes interpretações:\n"
"<ul>\n"
......
......@@ -951,7 +951,7 @@ class TranslatorChinese : public TranslatorAdapter_1_2_13
"\\endcode\n"
"如果在配置文件中指定了"CN_SPC"MAX_DOT_GRAPH_HEIGHT"CN_SPC"的值为200,"
"则Doxygen将生成如下的图形:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"以上图形中的矩形有如下的含义:\n"
"<ul>\n"
......
......@@ -1211,7 +1211,7 @@ class TranslatorCzech : public Translator
"\\endcode\n"
"Pokud je položka \\c MAX_DOT_GRAPH_HEIGHT konfiguraèního souboru "
"nastavena na hodnotu 200, bude vygenerován následující graf:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Bloky (tj. uzly) v uvedeném grafu mají následující význam:\n"
"<ul>\n"
......
......@@ -1082,7 +1082,7 @@ class TranslatorGerman : public Translator
"\\endcode\n\n"
"Setzen des Tags \\c MAX_DOT_GRAPH_HEIGHT in der Konfigurationsdatei "
"auf 240 liefert den folgenden Graphen:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Die Rechtecke in obigem Graphen bedeuten:\n"
"<ul>\n"
......
......@@ -1055,7 +1055,7 @@ class TranslatorDanish : public TranslatorAdapter_1_2_7
"\\endcode\n"
"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
"is set to 200 this will result in the following graph:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
......
......@@ -1072,7 +1072,7 @@ class TranslatorEnglish : public Translator
"\\endcode\n"
"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
"is set to 240 this will result in the following graph:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
......
......@@ -947,7 +947,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_2_7
"\\endcode\n"
"Si la etiqueta \\c MAX_DOT_GRAPH_HEIGHT en el archivo de configuración "
"tiene valor 200 resultará en el siguiente gráfico:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Las cajas en el gráfico arriba tienen el significado que sigue:\n"
"<ul>\n"
......
......@@ -939,7 +939,7 @@ class TranslatorFrench : public Translator
"\\endcode\n"
"Si la valeur 200 est attribuée au tag \\c MAX_DOT_GRAPH_HEIGHT "
"du fichier de configuration, cela génèrera le graphe suivant:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Les rectangles du graphe ci-dessus ont la signification suivante:\n"
"<ul>\n"
......
......@@ -1043,7 +1043,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
"\\endcode\n"
" \\c MAX_DOT_GRAPH_HEIGHT "
" 200 :"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
" :\n"
"<ul>\n"
......
......@@ -760,7 +760,7 @@ class TranslatorCroatian : public Translator
"\\endcode\n"
"Ako je \\c MAX_DOT_GRAPH_HEIGHT tag u konfiguracijskoj datoteci "
"postavljen na 200 gornje veze e rezultirati grafikonom:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Pravokutnici imaju slijedee znaenje:\n"
"<ul>\n"
......
......@@ -936,7 +936,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_2_1
"\\endcode\n"
"Ha a konfigurációs fájl \\c MAX_DOT_GRAPH_HEIGHT elemének értékét "
"200-ra állítjuk, az eredmény a következõ ábra lesz:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Az ábrán levõ dobozok jelentése:\n"
"<ul>\n"
......
......@@ -1060,7 +1060,7 @@ class TranslatorItalian : public Translator
"\\endcode\n"
"Se il tag \\c MAX_DOT_GRAPH_HEIGHT nel file di configurazione "
"è impostato a 200 verrà prodotto il grafo seguente:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"I riquadri nel grafo qui sopra hanno il seguente significato:\n"
"<ul>\n"
......
......@@ -1010,7 +1010,7 @@ class TranslatorJapanese : public Translator
"\\endcode\n"
"設定ファイル中で、タグ \\c MAX_DOT_GRAPH_HEIGHT が 200 にセットされた"
"場合、次のようなグラフとなります。"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"上のグラフ内のボックスには次のような意味があります。\n"
"<ul>\n"
......
......@@ -1010,7 +1010,7 @@ class TranslatorKorean : public TranslatorAdapter_1_2_13
"\\endcode\n"
"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
"is set to 240 this will result in the following graph:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
......
......@@ -685,7 +685,7 @@ class TranslatorDutch : public Translator
"\\endcode\n"
"Als de \\c MAX_DOT_GRAPH_HEIGHT tag in the configuratie file "
"op 200 gezet is, zal het bestaande voorbeeld resulteren in de volgende graaf:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:\n"
"<ul>\n"
......
......@@ -742,7 +742,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_2_2
"\\endcode\n"
"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
"is set to 200 this will result in the following graph:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
......
......@@ -938,7 +938,7 @@ class TranslatorPolish : public TranslatorAdapter_1_2_1
"\\endcode\n"
"Je¶li znacznik \\c MAX_DOT_GRAPH_HEIGHT w pliku konfiguracji "
"jest ustawiony na 200, odniesie to rezultat w nastêpuj±cym wykresie:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Pude³ka w powy¿szym wykresie maj± nastêpuj±ce znaczenie:\n"
"<ul>\n"
......
......@@ -1051,7 +1051,7 @@ class TranslatorPortuguese : public Translator
"\\endcode\n"
"Se no ficheiro de configuração estiver a tag \\c MAX_DOT_GRAPH_HEIGHT "
"com o valor de 200 então o seguinte grafo será gerado:"
"<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"As caixas no grafo anterior têm as seguintes interpretações:\n"
"<ul>\n"
......
This diff is collapsed.
......@@ -1095,7 +1095,7 @@ class TranslatorRussian : public Translator
"\\endcode\n"
" \\c MAX_DOT_GRAPH_HEIGHT "
" 240, :"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
" :\n"
"<ul>\n"
......
......@@ -694,7 +694,7 @@ class TranslatorSlovene : public TranslatorAdapter_1_2_13
"\\endcode\n"
"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
"is set to 200 this will result in the following graph:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
......
......@@ -1069,7 +1069,7 @@ class TranslatorSlovak : public TranslatorAdapter_1_2_13
"\\endcode\n"
"Pokia je poloka \\c MAX_DOT_GRAPH_HEIGHT konfiguranho sboru "
"nastaven na hodnotu 200, bude vygenerovan nasledujci graf:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Bloky (tj. uzly) v uvedenom grafe maj nasledujci vznam:\n"
"<ul>\n"
......
......@@ -1060,7 +1060,7 @@ class TranslatorUkrainian : public TranslatorAdapter_1_2_11
"\\endcode\n"
"ñËÝÏ \\c MAX_DOT_GRAPH_HEIGHT × ËÏÎƦÇÕÒÁæÊÎÏÍÕ ÆÁÊ̦ "
"ÕÓÔÁÎÏ×ÌÅÎÅ ÎÁ 200, ÏÔÒÉÍÁ¤ÍÏ ÎÁÓÔÕÐÎÉÊ ÇÒÁÆ:"
"<p><center><img src=\"graph_legend.png\"></center>\n"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"ðÒÑÍÏËÕÔÎÉËÉ × ÃØÏÍÕ ÇÒÁƦ ÍÁÀÔØ ÎÁÓÔÕÐÎÉÊ ÚͦÓÔ:\n"
"<ul>\n"
......
......@@ -119,13 +119,13 @@ template<class T> class ValStack
public:
ValStack() : m_values(10), m_sp(0), m_size(10) {}
virtual ~ValStack() {}
ValStack(const ValStack &s)
ValStack(const ValStack<T> &s)
{
m_values=s.m_values.copy();
m_sp=s.m_sp;
m_size=s.m_size;
}
ValStack &operator=(const ValStack &s)
ValStack &operator=(const ValStack<T> &s)
{
m_values=s.m_values.copy();
m_sp=s.m_sp;
......@@ -981,9 +981,8 @@ static void writeMemberReference(QTextStream &t,Definition *def,MemberDef *rmd,c
t << rmd->getBodyDef()->getOutputFileBase()
<< "_1" // encoded `:' character (see util.cpp:convertNameToFile)
<< rmd->anchor()
<< "\">";
writeXMLString(t,name);
t << "</" << tagName << ">" << endl;
<< "\">" << convertToXML(name) << "</"
<< tagName << ">" << endl;
}
else if (rmd->isLinkable() && d && d->isLinkable())
// link to declaration in documentation (in absense of a definition)
......@@ -992,9 +991,8 @@ static void writeMemberReference(QTextStream &t,Definition *def,MemberDef *rmd,c
t << d->getOutputFileBase()
<< "_1" // encoded `:' character (see util.cpp:convertNameToFile)
<< rmd->anchor()
<< "\">";
writeXMLString(t,name);
t << "</" << tagName << ">" << endl;
<< "\">" << convertToXML(name)
<< "</" << tagName << ">" << endl;
}
}
......@@ -1017,7 +1015,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (md->memberType()==MemberDef::EnumValue) return;
ti << " <member id=\"" << md->getOutputFileBase()
<< "_1" << md->anchor() << "\">" << md->name() << "</member>" << endl;
<< "_1" << md->anchor() << "\">" << convertToXML(md->name()) << "</member>" << endl;
QCString scopeName;
if (md->getClassDef())
......@@ -1087,16 +1085,13 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
t << "</type>" << endl;
}
t << " <name>";
writeXMLString(t,md->name());
t << "</name>" << endl;
t << " <name>" << convertToXML(md->name()) << "</name>" << endl;
MemberDef *rmd = md->reimplements();
if (rmd)
{
t << " <reimplements id=\""
<< rmd->getOutputFileBase() << "_1" << rmd->anchor() << "\">"
<< rmd->name() << "</reimplements>";
<< convertToXML(rmd->name()) << "</reimplements>";
}
MemberList *rbml = md->reimplementedBy();
if (rbml)
......@@ -1106,7 +1101,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
{
t << " <reimplementedby id=\""
<< rmd->getOutputFileBase() << "_1" << rmd->anchor() << "\">"
<< rmd->name() << "</reimplementedby>";
<< convertToXML(rmd->name()) << "</reimplementedby>";
}
}
......@@ -1346,8 +1341,8 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
{
t << " ambiguityscope=\"" << mi->ambiguityResolutionScope << "\"";
}
t << "><scope>" << cd->name() << "</scope><name>" <<
md->name() << "</name></member>" << endl;
t << "><scope>" << convertToXML(cd->name()) << "</scope><name>" <<
convertToXML(md->name()) << "</name></member>" << endl;
}
}
t << " </listofallmembers>" << endl;
......@@ -1376,7 +1371,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
if (cd->templateMaster()!=0) return; // skip generated template instances.
ti << " <compound id=\"" << cd->getOutputFileBase()
<< "\"><name>" << cd->name() << "</name>" << endl;
<< "\"><name>" << convertToXML(cd->name()) << "</name>" << endl;
QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
QCString fileName=outputDirectory+"/xml/"+cd->getOutputFileBase()+".xml";
......@@ -1540,7 +1535,7 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti)
if (nd->isReference()) return; // skip external references
ti << " <compound id=\"" << nd->getOutputFileBase()
<< "\"><name>" << nd->name() << "</name>" << endl;
<< "\"><name>" << convertToXML(nd->name()) << "</name>" << endl;
QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
QCString fileName=outputDirectory+"/xml/"+nd->getOutputFileBase()+".xml";
......@@ -1630,7 +1625,7 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti)
if (fd->isReference()) return; // skip external references
ti << " <compound id=\"" << fd->getOutputFileBase()
<< "\"><name>" << fd->name() << "</name>" << endl;
<< "\"><name>" << convertToXML(fd->name()) << "</name>" << endl;
QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
QCString fileName=outputDirectory+"/xml/"+fd->getOutputFileBase()+".xml";
......@@ -1763,7 +1758,7 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti)
if (gd->isReference()) return; // skip external references
ti << " <compound id=\"" << gd->getOutputFileBase()
<< "\"><name>" << gd->name() << "</name>" << endl;
<< "\"><name>" << convertToXML(gd->name()) << "</name>" << endl;
QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
QCString fileName=outputDirectory+"/xml/"+gd->getOutputFileBase()+".xml";
......@@ -1862,7 +1857,7 @@ static void generateXMLForPage(PageInfo *pi,QTextStream &ti)
if (pi->isReference()) return;
ti << " <compound id=\"" << pi->getOutputFileBase()
<< "\"><name>" << pi->name << "</name>" << endl;
<< "\"><name>" << convertToXML(pi->name) << "</name>" << endl;
QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
QCString fileName=outputDirectory+"/xml/"+pi->getOutputFileBase()+".xml";
......@@ -1879,7 +1874,7 @@ static void generateXMLForPage(PageInfo *pi,QTextStream &ti)
t << " <compounddef id=\"";
if (Config_getBool("CASE_SENSE_NAMES")) t << pi->name; else t << pi->name.lower();
t << "\" kind=\"page\">" << endl;
t << " <compoundname>" << pi->name << "</compoundname>" << endl;
t << " <compoundname>" << convertToXML(pi->name) << "</compoundname>" << endl;
SectionInfo *si = Doxygen::sectionDict.find(pi->name);
if (si)
{
......
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