Commit 3120c683 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release 1.1.2

parent e5d8b060
DOXYGEN Version 1.1.1-20000402
DOXYGEN Version 1.1.2
CONTENTS
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.1-20000402.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.1-20000402.src.tar # unpack it
gunzip doxygen-1.1.2.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.2.src.tar # unpack it
2. Run the configure script:
......@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (02 April 2000)
Dimitri van Heesch (09 April 2000)
DOXYGEN Version 1.1.1-20000402
DOXYGEN Version 1.1.2
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (02 April 2000)
Dimitri van Heesch (09 April 2000)
1.1.1-20000402
1.1.2
......@@ -343,7 +343,8 @@ TMAKE_CXXFLAGS = -DENGLISH_ONLY
EOF
fi
for i in Makefile.in src/Makefile.in examples/Makefile.in doc/Makefile.in ; do
for i in Makefile.in src/Makefile.in examples/Makefile.in \
doc/Makefile.in ; do
SRC=$i
DST=`echo $i|sed 's%\(.*\).in$%\1%'`
TIME=`date`
......@@ -357,7 +358,8 @@ EOF
echo " Created $DST from $SRC..."
done
for i in src/doxygen.pro.in src/doxytag.pro.in src/doxysearch.pro.in ; do
for i in src/doxygen.pro.in src/doxytag.pro.in \
src/doxysearch.pro.in ; do
SRC=$i
DST=`echo $i|sed 's%\(.*\).in$%\1%'`
TIME=`date`
......
Name: doxygen
Version: 1.1.1-20000402
Version: 1.1.2
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -1649,19 +1649,19 @@ void ClassDef::determineImplUsageRelation()
#ifdef DUMP
if (usesClassDict)
{
printf("Class %s uses the following classes:\n",name().data());
msg("Class %s uses the following classes:\n",name().data());
UsesClassDictIterator ucdi(*usesClassDict);
UsesClassDef *ucd;
for (;(ucd=ucdi.current());++ucdi)
{
printf(" %s via ",ucd->classDef->name().data());
msg(" %s via ",ucd->classDef->name().data());
QDictIterator<void> dvi(*ucd->accessors);
const char *s;
for (;(s=dvi.currentKey());++dvi)
{
printf("%s ",s);
msg("%s ",s);
}
printf("\n");
msg("\n");
}
}
#endif
......@@ -1697,8 +1697,8 @@ void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
// name().data(),cd->name().data());
}
ucd->addAccessor(md->name());
printf("in class `%s' adding accessor `%s' to class `%s'\n",
name().data(),md->name().data(),ucd->classDef->name().data());
//printf("in class `%s' adding accessor `%s' to class `%s'\n",
// name().data(),md->name().data(),ucd->classDef->name().data());
}
p=i+l;
}
......
......@@ -358,7 +358,12 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
iName=iName.mid(1,iName.length()-2); // strip quotes or brackets
}
}
if (Config::verbatimHeaderFlag) // generate code for header
else // use name of the file containing the class definition
{
iName=fd->name();
}
if (Config::verbatimHeaderFlag || Config::sourceBrowseFlag)
// generate code for header
{
cd->setIncludeFile(fd,iName,local);
fd->setGenerateSource(TRUE);
......@@ -858,7 +863,7 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
md->setFromAnnonymousMember(fromAnnMemb);
md->setIndentDepth(indentDepth);
md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setInitializer(root->initializer);
md->setInitializer(root->initializer.simplifyWhiteSpace());
//if (root->mGrpId!=-1)
//{
// printf("memberdef %s in memberGroup %d\n",name.data(),root->mGrpId);
......@@ -917,7 +922,7 @@ static MemberDef *addVariableToFile(Entry *root,MemberDef::MemberType mtype,
md->setFromAnnonymousMember(fromAnnMemb);
md->setIndentDepth(indentDepth);
md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setInitializer(root->initializer);
md->setInitializer(root->initializer.simplifyWhiteSpace());
bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd);
......@@ -1380,9 +1385,12 @@ void buildMemberList(Entry *root)
MemberDef *md=mn->first();
while (md && !found)
{
if (md->getFileDef() &&
md->getFileDef()->absFilePath()==root->fileName &&
matchArguments(md->argumentList(),root->argList)
NamespaceDef *nd = md->getNamespace();
FileDef *fd = md->getFileDef();
QCString nsName = nd ? nd->name().data() : "";
//printf("namespace `%s'\n",nsName.data());
if ((nd || (fd && fd->absFilePath()==root->fileName)) &&
matchArguments(md->argumentList(),root->argList,0,nsName)
)
{
// function already found in the same file, one is probably
......@@ -2002,7 +2010,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
if (md->initializer().isEmpty() && !root->initializer.isEmpty())
{
md->setInitializer(root->initializer);
md->setInitializer(root->initializer.simplifyWhiteSpace());
}
//if (md->bodyCode().isEmpty() && !root->body.isEmpty()) /* no body yet */
......@@ -4419,8 +4427,11 @@ void copyAndFilterFile(const char *fileName,BufStr &dest)
const int bufSize=1024;
char buf[bufSize];
int numRead;
while ((numRead=fread(buf,1,bufSize,f))!=bufSize)
while ((numRead=fread(buf,1,bufSize,f))>0)
{
//printf(">>>>>>>>Reading %d bytes\n",numRead);
dest.addArray(buf,numRead),size+=numRead;
}
pclose(f);
}
// filter unwanted bytes from the resulting data
......@@ -4761,7 +4772,10 @@ const char *getArg(int argc,char **argv,int &optind)
int main(int argc,char **argv)
{
#if QT_VERSION >= 200
setlocale(LC_ALL,"");
#endif
initPreprocessor();
/**************************************************************************
......
......@@ -577,11 +577,6 @@ void HtmlGenerator::startMemberItem(int annoType)
if (Config::htmlAlignMemberFlag)
{
t << "<tr>";
//if (inGroup)
// t << "<td bgcolor=\"" << GROUP_COLOR << "\">";
//else
//t << "<td>";
//t << "<img src=\"null.gif\"></td><td><img src=\"null.gif\"></td>";
switch(annoType)
{
case 0: t << "<td nowrap align=right valign=top>"; break;
......@@ -600,26 +595,30 @@ void HtmlGenerator::endMemberItem(bool)
//DBG_HTML(t << "<!-- endMemberItem(" << (int)inGroup << "," << fileName << "," << headerName << " -->" << endl)
if (Config::htmlAlignMemberFlag)
{
//if (inGroup)
//{
// t << "&nbsp;</td><td";
// if (headerName)
// {
// t << " align=right valign=top><a class=\"gl\" href=\""
// << fileName << ".html\">&nbsp;" << headerName << "&nbsp;</a>";
// }
// else
// {
// t << ">";
// }
// t << "</td><td bgcolor=\"" << GROUP_COLOR
// << "\"><img src=\"null.gif\">";
//}
t << "</td></tr>";
}
t << endl;
}
void HtmlGenerator::startParameter(bool first)
{
if (first)
{
t << endl << "</b></td>" << endl;
t << "<td><b>" << endl;
}
else
{
t << "<tr><td></td><td><b>" << endl;
}
}
void HtmlGenerator::endParameter(bool)
{
t << "</b></td></tr>" << endl;
}
void HtmlGenerator::insertMemberAlign()
{
DBG_HTML(t << "<!-- insertMemberAlign -->" << endl)
......@@ -762,12 +761,24 @@ void HtmlGenerator::writeImage(const char *name,const char *,const char *)
void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *)
{
t << endl << "<p><table width=100% cellpadding=2 cellspacing=0 border=0><tr><td class=\"md\"><b>" << endl;
t << "<p>" << endl;
t << "<table width=100% cellpadding=2 cellspacing=0 border=0>" << endl;
t << " <tr>" << endl;
t << " <td class=\"md\"><b>" << endl;
t << " <table cellspadding=0 cellspacing=0 border=0>" << endl;
t << " <tr>" << endl;
t << " <td><b>" << endl;
}
void HtmlGenerator::endMemberDoc()
{
t << endl << "</b></td></tr></table>" << endl;
t << endl;
t << " </b></td>" << endl;
t << " </tr>" << endl;
t << " </table>" << endl;
t << " </td>" << endl;
t << " </tr>" << endl;
t << "</table>" << endl;
}
void HtmlGenerator::startCollaborationDiagram()
......
......@@ -224,6 +224,9 @@ class HtmlGenerator : public OutputGenerator
void endTextBlock() {}
void lastIndexPage() {}
void startParameter(bool first);
void endParameter(bool last);
private:
QCString header;
QCString footer;
......
......@@ -219,6 +219,8 @@ class LatexGenerator : public OutputGenerator
void startTextBlock(bool) {}
void endTextBlock() {}
void startParameter(bool) {}
void endParameter(bool) {}
private:
LatexGenerator(const LatexGenerator &);
......
......@@ -206,6 +206,8 @@ class ManGenerator : public OutputGenerator
void startTextBlock(bool) {}
void endTextBlock() {}
void lastIndexPage() {}
void startParameter(bool) {}
void endParameter(bool) {}
private:
bool firstCol;
......
......@@ -101,22 +101,12 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
//printf("~~~ %s cName=%s\n",md->name().data(),cName.data());
// You can set the next to TRUE to experiment with multiline parameter lists.
// I'll add this in some form in a future release.
bool multiLineArgs = FALSE; /* argList->count()>2; */
bool first=TRUE;
while (a)
{
ol.startParameter(first); first=FALSE;
QRegExp re(")(");
int vp;
if (multiLineArgs)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.lineBreak();
ol.writeNonBreakableSpace();
ol.writeNonBreakableSpace();
ol.popGeneratorState();
}
if (!a->attrib.isEmpty()) // argument has an IDL attribute
{
ol.docify(a->attrib+" ");
......@@ -161,14 +151,11 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
linkifyText(ol,scopeName,md->name(),n);
}
a=argList->next();
if (a) ol.docify(", "); // there are more arguments
}
if (multiLineArgs)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.lineBreak();
ol.popGeneratorState();
if (a)
{
ol.docify(", "); // there are more arguments
ol.endParameter(FALSE);
}
}
ol.docify(")"); // end argument list
if (argList->constSpecifier)
......@@ -971,6 +958,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.docify("]");
ol.endTypewriter();
}
ol.endParameter(TRUE);
ol.endMemberDoc();
ol.endDoxyAnchor();
ol.startIndent();
......
......@@ -94,8 +94,8 @@ void MemberList::countDecMembers(bool inGroup)
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
printf("memberGroupList adding %d inGroup=%d\n",
mg->countDecMembers(),m_count);
//printf("memberGroupList adding %d inGroup=%d\n",
// mg->countDecMembers(),m_count);
m_count+=mg->countDecMembers();
}
}
......@@ -355,6 +355,13 @@ void MemberList::writePlainDeclarations(OutputList &ol,
MemberDef *fmd=fmdl->first();
while (fmd)
{
/* in html we start each enum item on a new line */
typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html);
typeDecl.lineBreak();
typeDecl.writeString("&nbsp;&nbsp;");
typeDecl.popGeneratorState();
if (fmd->hasDocumentation()) // enum value has docs
{
if (!Config::genTagFile.isEmpty())
......@@ -379,6 +386,10 @@ void MemberList::writePlainDeclarations(OutputList &ol,
typeDecl.enable(OutputGenerator::Man);
}
}
typeDecl.pushGeneratorState();
typeDecl.disableAllBut(OutputGenerator::Html);
typeDecl.lineBreak();
typeDecl.popGeneratorState();
typeDecl.docify(" }");
md->setEnumDecl(typeDecl);
int enumVars=0;
......@@ -571,7 +582,7 @@ void MemberList::writeDeclarations(OutputList &ol,
if (memberGroupList)
{
printf("MemberList::writeDeclarations()\n");
//printf("MemberList::writeDeclarations()\n");
MemberGroupListIterator mgli(*memberGroupList);
MemberGroup *mg;
while ((mg=mgli.current()))
......@@ -581,7 +592,7 @@ void MemberList::writeDeclarations(OutputList &ol,
ol.endMemberGroupHeader();
if (!mg->documentation().isEmpty())
{
printf("Member group has docs!\n");
//printf("Member group has docs!\n");
ol.startMemberGroupDocs();
parseDoc(ol,0,0,mg->documentation());
ol.endMemberGroupDocs();
......@@ -608,7 +619,7 @@ void MemberList::writeDocumentation(OutputList &ol,
void MemberList::addMemberGroup(MemberGroup *mg)
{
printf("MemberList::addMemberGroup(%p)\n",mg);
//printf("MemberList::addMemberGroup(%p)\n",mg);
if (memberGroupList==0)
{
memberGroupList=new MemberGroupList;
......
......@@ -28,6 +28,9 @@ OutputGenerator::OutputGenerator()
b.setBuffer(a);
b.open( IO_WriteOnly );
t.setDevice(&b);
#if QT_VERSION >= 200
t.setEncoding(QTextStream::Latin1);
#endif
active=TRUE;
genStack = new QStack<bool>;
genStack->setAutoDelete(TRUE);
......
......@@ -210,6 +210,9 @@ class OutputGenerator
virtual void endTextBlock() = 0;
virtual void lastIndexPage() = 0;
virtual void startParameter(bool) = 0;
virtual void endParameter(bool) = 0;
void clear() { b.close(); a.resize(0); b.setBuffer(a);
b.open(IO_WriteOnly); t.setDevice(&b); }
......
......@@ -312,8 +312,6 @@ class OutputList
{ forall(&OutputGenerator::addToIndex,s1,s2); }
void writeSynopsis()
{ forall(&OutputGenerator::writeSynopsis); }
//void generateExternalIndex()
//{ forall(&OutputGenerator::generateExternalIndex); }
void startClassDiagram()
{ forall(&OutputGenerator::startClassDiagram); }
void endClassDiagram(ClassDiagram &d,const char *f,const char *n)
......@@ -366,6 +364,11 @@ class OutputList
void lastIndexPage()
{ forall(&OutputGenerator::lastIndexPage); }
void startParameter(bool first)
{ forall(&OutputGenerator::startParameter,first); }
void endParameter(bool last)
{ forall(&OutputGenerator::endParameter,last); }
private:
void debug();
void clear();
......
......@@ -26,11 +26,13 @@
#if QT_VERSION >= 200
#include <locale.h>
#define GCI QCollection::Item
#include <qcstring.h>
#include <qstring.h>
inline QCString convertToQCString(const QString &s) { return s.local8Bit(); }
inline QCString convertToQCString(const QString &s) { return s.latin1(); }
#else /* QT_VERSION < 200 */
......
......@@ -208,6 +208,9 @@ class RTFGenerator : public OutputGenerator
void endTextBlock();
void lastIndexPage();
void startParameter(bool) {}
void endParameter(bool) {}
static bool preProcessFileInplace(const char *path,const char *name);
private:
......
......@@ -355,6 +355,16 @@ static void endTable()
curTable=tableStack.top();
}
static void forceEndTable()
{
err("Error: More <table> tags found than </table> "
"tags in documentation block in file %s!\n",yyFileName);
while (!tableStack.isEmpty())
{
endTable();
}
}
//-----------------------------------------------------------------------------
static void lineCount()
......@@ -4854,6 +4864,10 @@ void parseDocument(OutputList &ol,const QCString &docString)
{
warn("Warning: Documentation block contains \\if without matching \\endif: %d\n",depthIf);
}
if (!tableStack.isEmpty())
{
forceEndTable();
}
ol+=*outDoc;
delete outDoc; outDoc=0;
return;
......
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