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

Doxygen-1.2.17-20020901

parent 6b47ce0c
DOXYGEN Version 1.2.17-20020825
DOXYGEN Version 1.2.17-20020901
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (25 August 2002)
Dimitri van Heesch (01 September 2002)
DOXYGEN Version 1.2.17_20020825
DOXYGEN Version 1.2.17_20020901
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) (25 August 2002)
Dimitri van Heesch (dimitri@stack.nl) (01 September 2002)
1.2.17-20020825
1.2.17-20020901
......@@ -1039,7 +1039,11 @@ ALIASES = "english=\if english" \
\addindex \\anchor
This command places an invisible, named anchor into the documentation
to which you can refer with the \\ref command.
to which you can refer with the \\ref command.
\note Anchors can currently only be put into a comment block
that is marked as a page (using \ref cmdpage "\\page") or mainpage
(\ref cmdmainpage "\\mainpage").
\sa section \ref cmdref "\\ref".
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.2.17_20020825
Version: 1.2.17_20020901
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -164,6 +164,9 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
g_curArgTypeName+=g_curArgName;
BEGIN( ReadFuncArgType );
}
<ReadFuncArgType>"<="|">="|"->"|">>"|"<<" { // handle operators in defargs
g_curArgTypeName+=yytext;
}
<ReadFuncArgType,ReadFuncArgDef>[({<] {
if (YY_START==ReadFuncArgType)
{
......@@ -175,10 +178,10 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
g_curArgDefValue+=*yytext;
g_copyArgValue=&g_curArgDefValue;
}
g_readArgContext = YY_START;
g_readArgContext = YY_START;
if (*yytext=='(')
{
g_argRoundCount=0;
g_argRoundCount=0;
BEGIN( CopyArgRound );
}
else if (*yytext=='{')
......@@ -249,67 +252,74 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
BEGIN( ReadDocBlock );
}
<ReadFuncArgType,ReadFuncArgDef>[,)>] {
g_curArgTypeName=removeRedundantWhiteSpace(g_curArgTypeName);
g_curArgDefValue=g_curArgDefValue.stripWhiteSpace();
//printf("curArgType=`%s' curArgDefVal=`%s'\n",g_curArgTypeName.data(),g_curArgDefValue.data());
int l=g_curArgTypeName.length();
if (l>0)
if (*yytext==')' && g_curArgTypeName.stripWhiteSpace().isEmpty())
{
g_curArgTypeName+=*yytext;
}
else
{
int i=l-1;
while (i>=0 && (isspace(g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
while (i>=0 && isId(g_curArgTypeName.at(i))) i--;
//printf("g_curArgTypeName=`%s' i=%d\n",g_curArgTypeName.data(),i);
Argument *a = new Argument;
a->attrib = g_curArgAttrib.copy();
//printf("a->type=%s a->name=%s i=%d l=%d\n",
// a->type.data(),a->name.data(),i,l);
a->array.resize(0);
if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
g_curArgTypeName=removeRedundantWhiteSpace(g_curArgTypeName);
g_curArgDefValue=g_curArgDefValue.stripWhiteSpace();
//printf("curArgType=`%s' curArgDefVal=`%s'\n",g_curArgTypeName.data(),g_curArgDefValue.data());
int l=g_curArgTypeName.length();
if (l>0)
{
int bi=g_curArgTypeName.find('(');
int fi=bi-1;
//printf("func arg fi=%d\n",fi);
while (fi>=0 && isId(g_curArgTypeName.at(fi))) fi--;
if (fi>=0)
int i=l-1;
while (i>=0 && (isspace(g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
while (i>=0 && isId(g_curArgTypeName.at(i))) i--;
//printf("g_curArgTypeName=`%s' i=%d\n",g_curArgTypeName.data(),i);
Argument *a = new Argument;
a->attrib = g_curArgAttrib.copy();
//printf("a->type=%s a->name=%s i=%d l=%d\n",
// a->type.data(),a->name.data(),i,l);
a->array.resize(0);
if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
{
a->type = g_curArgTypeName.left(fi+1);
a->name = g_curArgTypeName.mid(fi+1,bi-fi-1);
a->array = g_curArgTypeName.right(l-bi);
int bi=g_curArgTypeName.find('(');
int fi=bi-1;
//printf("func arg fi=%d\n",fi);
while (fi>=0 && isId(g_curArgTypeName.at(fi))) fi--;
if (fi>=0)
{
a->type = g_curArgTypeName.left(fi+1);
a->name = g_curArgTypeName.mid(fi+1,bi-fi-1);
a->array = g_curArgTypeName.right(l-bi);
}
else
{
a->type = g_curArgTypeName;
}
}
else if (i>=0 && g_curArgTypeName.at(i)!=':')
{ // type contains a name
a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1));
a->name = g_curArgTypeName.right(l-i-1);
}
else
else // assume only the type was specified, try to determine name later
{
a->type = g_curArgTypeName;
a->type = removeRedundantWhiteSpace(g_curArgTypeName);
}
//printf("a->type=%s a->name=%s a->array=%s\n",a->type.data(),a->name.data());
a->array += removeRedundantWhiteSpace(g_curArgArray);
a->defval = g_curArgDefValue.copy();
a->docs = g_curArgDocs.stripWhiteSpace();
//printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data());
g_argList->append(a);
}
else if (i>=0 && g_curArgTypeName.at(i)!=':')
{ // type contains a name
a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1));
a->name = g_curArgTypeName.right(l-i-1);
g_curArgAttrib.resize(0);
g_curArgTypeName.resize(0);
g_curArgDefValue.resize(0);
g_curArgArray.resize(0);
g_curArgDocs.resize(0);
if (*yytext==')')
{
BEGIN(FuncQual);
//printf(">>> end of argument list\n");
}
else // assume only the type was specified, try to determine name later
else
{
a->type = removeRedundantWhiteSpace(g_curArgTypeName);
BEGIN( ReadFuncArgType );
}
//printf("a->type=%s a->name=%s a->array=%s\n",a->type.data(),a->name.data());
a->array += removeRedundantWhiteSpace(g_curArgArray);
a->defval = g_curArgDefValue.copy();
a->docs = g_curArgDocs.stripWhiteSpace();
//printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data());
g_argList->append(a);
}
g_curArgAttrib.resize(0);
g_curArgTypeName.resize(0);
g_curArgDefValue.resize(0);
g_curArgArray.resize(0);
g_curArgDocs.resize(0);
if (*yytext==')')
{
BEGIN(FuncQual);
//printf(">>> end of argument list\n");
}
else
{
BEGIN( ReadFuncArgType );
}
}
<ReadFuncArgType,ReadFuncArgPtr>{ID} {
......
......@@ -1130,8 +1130,10 @@ static int yyread(char *buf,int max_size)
return c;
}
//ATTR ((({BN}+[^\>]+)/">")?)
//LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
//ATTR ((({BN}+[^\>]+)/">")?)
%}
CMD ("\\"|"@")
BN [ \t\n\r]
BL [ \t\r]*"\n"
......@@ -1200,7 +1202,7 @@ OPARG "("[a-z_A-Z0-9,\<\> \t\*\&]*")"
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
OPCAST {B}+[^(\r\n.,]+
OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
LINKMASK [^ \t\n\r\\@<&$]+("("[^\n)]*")")?({B}*("const"|"volatile"))?
%option noyywrap
......@@ -1785,7 +1787,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
if (inBlock()) endBlock();
inReturnBlock=TRUE;
currentListIndent.push("P");
outDoc->startSimpleSect(BaseOutputDocInterface::Return,0,0,theTranslator->trReturns()+":");
outDoc->startSimpleSect(BaseOutputDocInterface::Return,0,0,theTranslator->trReturns()+": ");
outDoc->writeDescItem();
}
}
......
......@@ -1392,6 +1392,7 @@ QCString DocLink::parse(bool isJavaLink)
printf("Error: Unsupported symbol %s found at line %d\n",
g_token->name.data(),doctokenizerYYlineno);
break;
case TK_LNKWORD:
case TK_WORD:
if (isJavaLink) // special case to detect closing }
{
......@@ -3894,7 +3895,7 @@ void DocRoot::parse()
DocNode *validatingParseDoc(const char *fileName,int startLine,
const char *context,const char *input)
{
//printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
printf("========== validating %s at line %d\n",fileName,startLine);
g_token = new TokenInfo;
......
......@@ -1793,8 +1793,10 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
QCString imgName = (QCString)outFile+"."+imgExt;
if (format==BITMAP)
{
dotArgs.sprintf("-T%s \"%s\" -o \"%s\"",imgExt.data(),
inFile,imgName.data());
dotArgs.sprintf("-T%s \"%s\" -o \"%s\"",
imgExt.data(),
inFile,
imgName.data());
}
else // format==EPS
{
......
This diff is collapsed.
......@@ -162,7 +162,7 @@ void GroupDef::addMembersToMemberGroup()
}
void GroupDef::insertMember(MemberDef *md,bool docOnly)
bool GroupDef::insertMember(MemberDef *md,bool docOnly)
{
//printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
MemberNameInfo *mni=0;
......@@ -173,10 +173,17 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
for ( ; (srcMi=srcMnii.current()) ; ++srcMnii )
{
MemberDef *srcMd = srcMi->memberDef;
if (matchArguments(srcMd->argumentList(),md->argumentList()) &&
srcMd->getOuterScope()==md->getOuterScope())
bool sameScope = srcMd->getOuterScope()==md->getOuterScope() || // same class or namespace
// both inside a file => definition and declaration do not have to be in the same file
(srcMd->getOuterScope()->definitionType()==Definition::TypeFile &&
md->getOuterScope()->definitionType()==Definition::TypeFile);
if (matchArguments(srcMd->argumentList(),md->argumentList()) &&
sameScope
)
{
return; // member already added
return FALSE; // member already added
}
}
mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
......@@ -187,6 +194,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
allMemberNameInfoSDict->append(mni->memberName(),mni);
}
//printf("Added member!\n");
allMemberList->append(md);
switch(md->memberType())
{
......@@ -241,7 +249,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
md->getClassDef() ? md->getClassDef()->name().data() : "",
name().data());
}
//addMemberToGroup(md,groupId);
return TRUE;
}
void GroupDef::removeMember(MemberDef *md)
......@@ -723,10 +731,13 @@ void addMemberToGroups(Entry *root,MemberDef *md)
if (insertit)
{
//printf("insertMember\n");
fgd->insertMember(md);
md->setGroupDef(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
ClassDef *cd = md->getClassDefOfAnonymousType();
if (cd) cd->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
bool success = fgd->insertMember(md);
if (success)
{
md->setGroupDef(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
ClassDef *cd = md->getClassDefOfAnonymousType();
if (cd) cd->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
}
}
}
}
......
......@@ -55,7 +55,7 @@ class GroupDef : public Definition
void addParentGroup(const GroupDef *def);
void addPage(PageInfo *def); // pages in this group
void addExample(const PageInfo *def); // examples in this group
void insertMember(MemberDef *def,bool docOnly=FALSE);
bool insertMember(MemberDef *def,bool docOnly=FALSE);
void removeMember(MemberDef *md);
bool containsGroup(const GroupDef *def); // true if def is already a subgroup
void writeDetailedDocumentation(OutputList &ol);
......
This diff is collapsed.
This diff is collapsed.
......@@ -30,6 +30,7 @@
#include "dot.h"
#include "language.h"
#include "htmlhelp.h"
#include "docparser.h"
#include "htmldocvisitor.h"
// #define GROUP_COLOR "#ff8080"
......
This diff is collapsed.
This diff is collapsed.
......@@ -29,6 +29,7 @@
#include "version.h"
#include "dot.h"
#include "page.h"
#include "docparser.h"
#include "latexdocvisitor.h"
//static QCString filterTitle(const char *s)
......
......@@ -71,7 +71,9 @@ HEADERS = bufstr.h \
printdocvisitor.h \
qtbc.h \
reflist.h \
rtfdocvisitor.h \
rtfgen.h \
rtfstyle.h \
scanner.h \
searchindex.h \
section.h \
......@@ -162,7 +164,9 @@ SOURCES = ce_lex.cpp \
pngenc.cpp \
pre.cpp \
reflist.cpp \
rtfdocvisitor.cpp \
rtfgen.cpp \
rtfstyle.cpp \
scanner.cpp \
searchindex.cpp \
suffixtree.cpp \
......
......@@ -552,7 +552,14 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
*/
bool MemberDef::isBriefSectionVisible() const
{
bool hasDocs = hasDocumentation();
//printf("Member %s grpId=%d docs=%s file=%s args=%s\n",
// name().data(),
// grpId,grpId==-1?"<none>":Doxygen::memberDocDict[grpId]->data(),
// getFileDef()->name().data(),
// argsString());
bool hasDocs = hasDocumentation() ||
// part of a documented member group
(grpId!=-1 && !Doxygen::memberDocDict[grpId]->isEmpty());
// only include static members with file/namespace scope if
// explicitly enabled in the config file
......@@ -609,6 +616,12 @@ bool MemberDef::isBriefSectionVisible() const
!hasDocs
);
//printf("visibleIfStatic=%d visibleIfDocumented=%d visibleIfEnabled=%d"
// "visibleIfPrivate=%d visibleIfDocVirtual=%d visibltIfNotDefaultCDTor=%d "
// "visibleIfFriendCompound=%d\n",visibleIfStatic,visibleIfDocumented,
// visibleIfEnabled,visibleIfPrivate,visibleIfDocVirtual,visibleIfNotDefaultCDTor,
// visibleIfFriendCompound);
bool visible = visibleIfStatic && visibleIfDocumented &&
visibleIfEnabled && visibleIfPrivate &&
visibleIfDocVirtual && visibleIfNotDefaultCDTor &&
......
......@@ -245,6 +245,12 @@ class MemberDef : public Definition
}
void setBodyMember(MemberDef *md) { bodyMemb = md; }
void setDocsForDefinition(bool b) { docsForDefinition = b; }
// declaration <-> definition relation
void setMemberDefinition(MemberDef *md) { memDef=md; }
void setMemberDeclaration(MemberDef *md) { memDec=md; }
MemberDef *memberDefinition() const { return memDef; }
MemberDef *memberDeclaration() const { return memDec; }
bool visited;
......@@ -270,8 +276,6 @@ class MemberDef : public Definition
QCString init; // initializer
int initLines; // number of lines in the initializer
QCString decl; // member declaration in class
//QCString declFile; // file where the declaration was found
//int declLine; // line where the declaration was found
QCString def; // member definition in code (fully qualified name)
QCString anc; // HTML anchor name
MemberDef *bodyMemb; // Member containing the definition
......@@ -281,7 +285,6 @@ class MemberDef : public Definition
bool stat; // is it a static function?
int memSpec; // The specifiers present for this member
MemberType mtype; // returns the kind of member
//bool eUsed; // is the enumerate already placed in a list
bool proto; // is it a prototype;
bool docEnumValues; // is an enum with documented enum values.
bool annScope; // member is part of an annoymous scope
......
......@@ -25,7 +25,8 @@ class PageInfo
public:
PageInfo(const char *f, int l,const char *n,const char *d,const char *t) :
defFileName(f), defLine(l), name(n),
doc(d), title(t), sectionDict(0),specialListItems(0),m_inGroup(0) {}
doc(d), title(t), context(0), sectionDict(0),specialListItems(0),m_inGroup(0)
{}
// where the page definition was found
QCString defFileName;
......@@ -40,6 +41,9 @@ class PageInfo
QCString reference;
QCString fileName;
// class, file or namespace in which the page was found
Definition *context;
// functions to get a uniform interface with Definitions
QCString getOutputFileBase() const { return fileName; }
bool isReference() const { return !reference.isEmpty(); }
......
This diff is collapsed.
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2002 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef _RTFDOCVISITOR_H
#define _RTFDOCVISITOR_H
#include "docvisitor.h"
class QTextStream;
class BaseCodeDocInterface;
class QCString;
/*! @brief Concrete visitor implementation for RTF output. */
class RTFDocVisitor : public DocVisitor
{
public:
RTFDocVisitor(QTextStream &t,BaseCodeDocInterface &ci);
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
void visit(DocWord *);
void visit(DocLinkedWord *);
void visit(DocWhiteSpace *);
void visit(DocSymbol *);
void visit(DocURL *);
void visit(DocLineBreak *);
void visit(DocHorRuler *);
void visit(DocStyleChange *);
void visit(DocVerbatim *);
void visit(DocAnchor *);
void visit(DocInclude *);
void visit(DocIncOperator *);
void visit(DocFormula *);
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void visitPre(DocAutoList *);
void visitPost(DocAutoList *);
void visitPre(DocAutoListItem *);
void visitPost(DocAutoListItem *);
void visitPre(DocPara *);
void visitPost(DocPara *);
void visitPre(DocRoot *);
void visitPost(DocRoot *);
void visitPre(DocSimpleSect *);
void visitPost(DocSimpleSect *);
void visitPre(DocTitle *);
void visitPost(DocTitle *);
void visitPre(DocSimpleList *);
void visitPost(DocSimpleList *);
void visitPre(DocSimpleListItem *);
void visitPost(DocSimpleListItem *);
void visitPre(DocSection *s);
void visitPost(DocSection *);
void visitPre(DocHtmlList *s);
void visitPost(DocHtmlList *s);
void visitPre(DocHtmlListItem *);
void visitPost(DocHtmlListItem *);
void visitPre(DocHtmlPre *);
void visitPost(DocHtmlPre *);
void visitPre(DocHtmlDescList *);
void visitPost(DocHtmlDescList *);
void visitPre(DocHtmlDescTitle *);
void visitPost(DocHtmlDescTitle *);
void visitPre(DocHtmlDescData *);
void visitPost(DocHtmlDescData *);
void visitPre(DocHtmlTable *t);
void visitPost(DocHtmlTable *t);
void visitPre(DocHtmlCaption *);
void visitPost(DocHtmlCaption *);
void visitPre(DocHtmlRow *);
void visitPost(DocHtmlRow *) ;
void visitPre(DocHtmlCell *);
void visitPost(DocHtmlCell *);
void visitPre(DocIndexEntry *);
void visitPost(DocIndexEntry *);
void visitPre(DocInternal *);
void visitPost(DocInternal *);
void visitPre(DocHRef *);
void visitPost(DocHRef *);
void visitPre(DocHtmlHeader *);
void visitPost(DocHtmlHeader *) ;
void visitPre(DocImage *);
void visitPost(DocImage *);
void visitPre(DocDotFile *);
void visitPost(DocDotFile *);
void visitPre(DocLink *lnk);
void visitPost(DocLink *);
void visitPre(DocRef *ref);
void visitPost(DocRef *);
void visitPre(DocSecRefItem *);
void visitPost(DocSecRefItem *);
void visitPre(DocSecRefList *);
void visitPost(DocSecRefList *);
void visitPre(DocLanguage *);
void visitPost(DocLanguage *);
void visitPre(DocParamSect *);
void visitPost(DocParamSect *);
void visitPre(DocParamList *);
void visitPost(DocParamList *);
void visitPre(DocXRefItem *);
void visitPost(DocXRefItem *);
void visitPre(DocInternalRef *);
void visitPost(DocInternalRef *);
void visitPre(DocCopy *);
void visitPost(DocCopy *);
private:
//--------------------------------------
// helper functions
//--------------------------------------
void filter(const char *str);
void startLink(const QCString &ref,const QCString &file,
const QCString &anchor);
void endLink(const QCString &ref);
QCString getStyle(const char *name);
//--------------------------------------
// state variables
//--------------------------------------
QTextStream &m_t;
BaseCodeDocInterface &m_ci;
bool m_insidePre;
bool m_hide;
int m_indentLevel;
};
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -190,7 +190,7 @@ int getScopeFragment(const QCString &s,int p,int *l);
int filterCRLF(char *buf,int len);
void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
const char *name,const char *title,const char *args=0);
void addRelatedPage(const char *name,const QCString &ptitle,
PageInfo *addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,QList<QCString> *anchors,
const char *fileName,int startLine,
const QList<ListItemInfo> *sli,
......@@ -201,6 +201,7 @@ QCString escapeCharsInString(const char *name,bool allowDots);
void addGroupListToTitle(OutputList &ol,Definition *d);
void filterLatexString(QTextStream &t,const char *str,
bool insideTabbing=FALSE,bool insidePre=FALSE);
QCString rtfFormatBmkStr(const char *name);
#endif
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