Commit 75cfc919 authored by dimitri's avatar dimitri

Release 2000-02-27

parent b76d4ee1
DOXYGEN Version 1.1.0-20000220
DOXYGEN Version 1.1.0-20000227
CONTENTS
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.0-20000220.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0-20000220.src.tar # unpack it
gunzip doxygen-1.1.0-20000227.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0-20000227.src.tar # unpack it
2. Run the configure script:
......@@ -71,7 +71,7 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
INSTALLATION INSTRUCTIONS FOR WINDOWS:
--------------------------------------
Currently, only Microsoft Visual C++ (version 5.0) is supported.
Currently, only Microsoft Visual C++ (version 5.0 or higher) is supported.
(For other compilers you may need to edit the perl script in wintools/make.pl
a bit). Let me know what you had to change if you got Doxygen working with
another windows compiler.
......@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (20 February 2000)
Dimitri van Heesch (27 February 2000)
DOXYGEN Version 1.1.0-20000220
DOXYGEN Version 1.1.0-20000227
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (20 February 2000)
Dimitri van Heesch (27 February 2000)
1.1.0-20000220
1.1.0-20000227
......@@ -51,6 +51,7 @@ followed by the descriptions of the tags grouped by category.
\begin{CompactList}
\endlatexonly
<li> \refitem cfg_allexternals ALLEXTERNALS
<li> \refitem cfg_always_detailed_sec ALWAYS_DETAILED_SEC
<li> \refitem cfg_alphabetical_index ALPHABETICAL_INDEX
<li> \refitem cfg_bin_abspath BIN_ABSPATH
<li> \refitem cfg_brief_member_desc BRIEF_MEMBER_DESC
......@@ -121,6 +122,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_search_includes SEARCH_INCLUDES
<li> \refitem cfg_searchengine SEARCHENGINE
<li> \refitem cfg_show_include_files SHOW_INCLUDE_FILES
<li> \refitem cfg_sort_member_docs SORT_MEMBER_DOCS
<li> \refitem cfg_source_browser SOURCE_BROWSER
<li> \refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
<li> \refitem cfg_strip_from_path STRIP_FROM_PATH
......@@ -260,6 +262,12 @@ followed by the descriptions of the tags grouped by category.
If both \c HIDE_UNDOC_MEMBERS and \c BRIEF_MEMBER_DESC are set to \c NO, the
brief descriptions will be completely suppressed.
\anchor cfg_always_detailed_sec
<dt>\c ALWAYS_DETAILED_SEC <dd>
If the \c ALWAYS_DETAILED_SEC and \c REPEAT_BRIEF tags are both set to \c YES then
Doxygen will generate a detailed section even if there is only a brief
description.
\anchor cfg_full_path_names
<dt>\c FULL_PATH_NAMES <dd>
\addindex FULL_PATH_NAMES
......@@ -342,12 +350,22 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_inline_info
<dt>\c INLINE_INFO <dd>
\addindex INLINE_INFO
If the \c INLINE_INFO tag is set to \c YES (the default) then a tag [inline]
is inserted in the documentation for inline members.
\anchor cfg_sort_member_docs
<dt>\c SORT_MEMBER_DOCS <dd>
\addindex SORT_MEMBER_DOCS
If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
will sort the (detailed) documentation of file and class members
alphabetically by member name. If set to NO the members will appear in
declaration order.
\anchor cfg_tab_size
<dt>\c TAB_SIZE <dd>
the TAB_SIZE tag can be used to set the number of spaces in a tab.
\addindex TAB_SIZE
the \c TAB_SIZE tag can be used to set the number of spaces in a tab.
Doxygen uses this value to replace tabs by spaces in code fragments.
</dl>
......
......@@ -495,12 +495,11 @@ Go to the <a href="diagrams.html">next</a> section or return to the
Doxygen uses the "dot" tool to generate the following graphs:
<ul>
<li>if \ref cfg_graphical_hierarchy "GRAPHICAL_HIERARCHY" is set to \c YES,
a graphical representation of the class diagram will be drawn, along
a graphical representation of the class hierarchy will be drawn, along
with the textual one. Currently this feature is supported for HTML only.\n
<b>Warning:</b> When you have a very large class hierarchy where many
classes derive from a common
base class, the resulting image may become too big to handle for some
browsers.
classes derive from a common base class, the resulting image may become
too big to handle for some browsers.
<li>if \ref cfg_include_graph "INCLUDE_GRAPH" is set to \c YES, an include
dependency graph is generated for each documented file that includes at
least one other file. This feature is currently supported for HTML and RTF
......
......@@ -121,12 +121,18 @@ void ClassDef::insertMember(const MemberDef *md)
if (md->isRelated() && (Config::extractPrivateFlag || md->protection()!=Private))
{
related.append(md);
relatedMembers.inSort(md);
if (Config::sortMembersFlag)
relatedMembers.inSort(md);
else
relatedMembers.append(md);
}
else if (md->isFriend())
{
friends.append(md);
relatedMembers.inSort(md);
if (Config::sortMembersFlag)
relatedMembers.inSort(md);
else
relatedMembers.append(md);
}
else
{
......@@ -134,22 +140,34 @@ void ClassDef::insertMember(const MemberDef *md)
{
case MemberDef::Signal:
signals.append(md);
functionMembers.inSort(md);
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
case MemberDef::Slot:
switch (md->protection())
{
case Protected:
proSlots.append(md);
functionMembers.inSort(md);
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
case Public:
pubSlots.append(md);
functionMembers.inSort(md);
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
case Private:
priSlots.append(md);
functionMembers.inSort(md);
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
}
break;
......@@ -183,22 +201,43 @@ void ClassDef::insertMember(const MemberDef *md)
switch (md->memberType())
{
case MemberDef::Typedef:
typedefMembers.inSort(md);
if (Config::sortMembersFlag)
typedefMembers.inSort(md);
else
typedefMembers.append(md);
break;
case MemberDef::Enumeration:
enumMembers.inSort(md);
if (Config::sortMembersFlag)
enumMembers.inSort(md);
else
enumMembers.append(md);
break;
case MemberDef::EnumValue:
enumValMembers.inSort(md);
if (Config::sortMembersFlag)
enumValMembers.inSort(md);
else
enumValMembers.append(md);
break;
case MemberDef::Function:
if (md->name()==name() || md->name().find('~')!=-1)
if (md->name()==name() || // constructor
(md->name().find('~')!=-1 && // hack to detect destructor
md->name().find("operator")==-1
)
)
constructors.append(md);
else
functionMembers.inSort(md);
{
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
functionMembers.append(md);
}
break;
case MemberDef::Variable:
variableMembers.inSort(md);
if (Config::sortMembersFlag)
variableMembers.inSort(md);
else
variableMembers.append(md);
break;
default:
printf("Unexpected member type %d found!\n",md->memberType());
......
......@@ -47,7 +47,8 @@ class ClassDef : public Definition
enum CompoundType { Class=Entry::CLASS_SEC,
Struct=Entry::STRUCT_SEC,
Union=Entry::UNION_SEC,
Interface=Entry::INTERFACE_SEC
Interface=Entry::INTERFACE_SEC,
Exception=Entry::EXCEPTION_SEC
};
ClassDef(const char *name,CompoundType ct,const char *ref=0,const char *fName=0);
~ClassDef();
......
This diff is collapsed.
......@@ -114,6 +114,7 @@ struct Config
static bool rtfHyperFlag; // generate hyper links in RTF
static bool showIncFileFlag; // show include file in file documentation?
static bool stripCommentsFlag; // strip special comments from code fragments?
static bool sortMembersFlag; // sort members alphabetically?
};
#endif
......@@ -144,10 +144,10 @@ bool Config::includeGraphFlag = TRUE;
bool Config::gfxHierarchyFlag = TRUE;
bool Config::showIncFileFlag = TRUE;
bool Config::stripCommentsFlag = TRUE;
bool Config::sortMembersFlag = TRUE;
int Config::tabSize = 8;
int Config::colsInAlphaIndex = 5;
/* -----------------------------------------------------------------
*
* static variables
......@@ -281,6 +281,7 @@ static int yyread(char *buf,int max_size)
<Start>"RTF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::rtfHyperFlag; }
<Start>"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; }
<Start>"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; }
<Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
......@@ -499,6 +500,7 @@ void Config::init()
Config::gfxHierarchyFlag = TRUE;
Config::showIncFileFlag = TRUE;
Config::stripCommentsFlag = TRUE;
Config::sortMembersFlag = TRUE;
}
void writeTemplateConfig(QFile *f,bool sl)
......@@ -641,7 +643,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t <<"\n";
t << "# If the ALWAYS_DETAILS_SEC and REPEAT_BRIEF tags are both set to YES then\n";
t << "# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n";
t << "# Doxygen will generate a detailed section even if there is only a brief\n";
t << "# description.\n";
t <<"\n";
......@@ -752,7 +754,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# if the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# member inherits the documentation from any documented member that it\n";
t << "# reimplements.\n";
t << "\n";
......@@ -761,7 +763,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# if the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# is inserted in the documentation for inline members.\n";
t << "\n";
}
......@@ -769,7 +771,17 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen\n";
t << "# will sort the (detailed) documentation of file and class members \n";
t << "# alphabetically by member name. If set to NO the members will appear in\n";
t << "# declaration order.\n";
t << "\n";
}
t << "SORT_MEMBER_DOCS = YES\n";
if (!sl)
{
t << "\n";
t << "# The TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n";
t << "\n";
}
......
......@@ -45,6 +45,8 @@ static int labelToEnumValue(const char *l)
return Debug::Variables;
else if (label=="Preprocessor")
return Debug::Preprocessor;
else if (label=="Classes")
return Debug::Classes;
else
return 0;
}
......
......@@ -25,7 +25,8 @@ class Debug
FindMembers = 0x00000001,
Functions = 0x00000002,
Variables = 0x00000004,
Preprocessor = 0x00000008
Preprocessor = 0x00000008,
Classes = 0x00000010
};
static void print(DebugMask mask,int prio,const char *fmt,...);
static void setFlag(const char *label);
......
......@@ -1252,6 +1252,6 @@ void ClassDiagram::writeImageMap(QTextStream &t,const char *path,
image.save((QCString)path+"/"+fileName+".gif");
t << "</map></p>" << endl;
t << "</map>" << endl;
}
......@@ -136,7 +136,14 @@ static bool isLeaf(ClassDef *cd)
for ( ; (bcd=bcli.current()); ++bcli )
{
ClassDef *bClass = bcd->classDef;
if (bClass->isLinkable() || !isLeaf(bClass)) return FALSE;
//if (bClass->isLinkable() || !isLeaf(bClass)) return FALSE;
// if class is not a leaf
if (!isLeaf(bClass)) return FALSE;
// or class is not documented in this project
if (!Config::allExtFlag && !bClass->isLinkableInProject()) return FALSE;
// or class is not documented and all ALLEXTERNALS = YES
if (Config::allExtFlag && !bClass->isLinkable()) return FALSE;
}
}
return TRUE;
......@@ -523,7 +530,12 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
for (cli.toFirst();(cd=cli.current());++cli)
{
//printf("Trying %s superClasses=%d\n",cd->name().data(),cd->superClasses()->count());
if (cd->isLinkable() && isLeaf(cd)) // root class in the graph
if (isLeaf(cd) &&
(
(!Config::allExtFlag && cd->isLinkableInProject()) ||
(Config::allExtFlag && cd->isLinkable())
)
) // root class in the graph
{
//printf("Inserting root class %s\n",cd->name().data());
DotNode *n = new DotNode(m_curNodeNumber++,
......@@ -593,7 +605,10 @@ int DotGfxUsageGraph::m_curNodeNumber;
void DotGfxUsageGraph::addClass(ClassDef *cd,DotNode *n,int prot,
const char *label,int distance)
{
if (cd->isLinkable())
if (
(!Config::allExtFlag && cd->isLinkableInProject()) ||
(Config::allExtFlag && cd->isLinkable())
)
{
//printf(":: DoxGfxUsageGraph::addClass(class=%s,parent=%s,prot=%d,label=%s,dist=%d)\n",
// cd->name().data(),n->m_label.data(),prot,label,distance);
......@@ -735,7 +750,7 @@ static void findMaximalDotGraph(DotNode *root,int maxDist,
QCString dotCmd;
// create annotated dot file
dotCmd.sprintf("dot -Tdot %s.dot -o %s_tmp.dot\n",baseName.data(),baseName.data());
dotCmd.sprintf("dot -Tdot %s.dot -o %s_tmp.dot",baseName.data(),baseName.data());
if (system(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
......@@ -807,7 +822,7 @@ void DotGfxUsageGraph::writeGraph(QTextStream &out,
// run dot to create a .gif image
QCString dotCmd;
dotCmd.sprintf("dot -Tgif %s.dot -o %s.gif\n",baseName.data(),baseName.data());
dotCmd.sprintf("dot -Tgif %s.dot -o %s.gif",baseName.data(),baseName.data());
if (system(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
......@@ -848,27 +863,42 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
for (;(ii=ili.current());++ili)
{
FileDef *bfd = ii->fileDef;
QCString in = bfd ? bfd->absFilePath() : ii->includeName;
DotNode *bn = m_usedNodes->find(in);
if (bn) // file is already a node in the graph
QCString in = ii->includeName;
bool doc=TRUE,src=FALSE;
if (bfd)
{
n->addChild(bn,0,0,0);
bn->addParent(n);
bn->setDistance(distance);
in = bfd->absFilePath();
doc = bfd->isLinkableInProject();
src = bfd->generateSource() || (!bfd->isReference() && Config::sourceBrowseFlag);
}
else
if (doc || src)
{
bn = new DotNode(
m_curNodeNumber++,
ii->includeName,
bfd ? (bfd->getReference()+"$"+bfd->getOutputFileBase()).data() : 0,
distance
);
if (distance>m_maxDistance) m_maxDistance=distance;
n->addChild(bn,0,0,0);
bn->addParent(n);
m_usedNodes->insert(in,bn);
if (bfd) buildGraph(bn,bfd,distance+1);
QCString url=bfd ? bfd->getOutputFileBase().data() : "";
if (!doc && src)
{
url+="-source";
}
DotNode *bn = m_usedNodes->find(in);
if (bn) // file is already a node in the graph
{
n->addChild(bn,0,0,0);
bn->addParent(n);
bn->setDistance(distance);
}
else
{
bn = new DotNode(
m_curNodeNumber++,
ii->includeName,
bfd ? (bfd->getReference()+"$"+url).data() : 0,
distance
);
if (distance>m_maxDistance) m_maxDistance=distance;
n->addChild(bn,0,0,0);
bn->addParent(n);
m_usedNodes->insert(in,bn);
if (bfd) buildGraph(bn,bfd,distance+1);
}
}
}
}
......@@ -876,6 +906,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
DotInclDepGraph::DotInclDepGraph(FileDef *fd)
{
m_maxDistance = 0;
ASSERT(fd!=0);
m_diskName = fd->getOutputFileBase().copy();
m_startNode = new DotNode(m_curNodeNumber++,
fd->name(),
......@@ -918,7 +949,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,const char *path)
// run dot to create a .gif image
QCString dotCmd;
dotCmd.sprintf("dot -Tgif %s.dot -o %s.gif\n",baseName.data(),baseName.data());
dotCmd.sprintf("dot -Tgif %s.dot -o %s.gif",baseName.data(),baseName.data());
if (system(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
......
This diff is collapsed.
......@@ -96,37 +96,44 @@ class Entry
CLASS_SEC = 0x00000001,
STRUCT_SEC = 0x00000002,
UNION_SEC = 0x00000004,
ENUM_SEC = 0x00000008,
EMPTY_SEC = 0x00000010,
PAGEDOC_SEC = 0x00000020,
VARIABLE_SEC = 0x00000040,
FUNCTION_SEC = 0x00000080,
TYPEDEF_SEC = 0x00000100,
CLASSDOC_SEC = 0x00000200,
MEMBERDOC_SEC = 0x00000400,
OVERLOADDOC_SEC = 0x00000800,
EXAMPLE_SEC = 0x00001000,
VARIABLEDOC_SEC = 0x00002000,
ENUMDOC_SEC = 0x00004000,
UNIONDOC_SEC = 0x00008000,
STRUCTDOC_SEC = 0x00010000,
SOURCE_SEC = 0x00020000,
HEADER_SEC = 0x00040000,
FILEDOC_SEC = 0x00080000,
DEFINEDOC_SEC = 0x00100000,
INCLUDE_SEC = 0x00200000,
DEFINE_SEC = 0x00400000,
GROUPDOC_SEC = 0x00800000,
NAMESPACE_SEC = 0x01000000,
NAMESPACEDOC_SEC = 0x02000000,
INTERFACE_SEC = 0x04000000,
INTERFACEDOC_SEC = 0x08000000,
MAINPAGEDOC_SEC = 0x10000000,
USINGDIR_SEC = 0x20000000,
COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC | INTERFACE_SEC,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC | INTERFACEDOC_SEC,
EXCEPTION_SEC = 0x00000008,
NAMESPACE_SEC = 0x00000010,
INTERFACE_SEC = 0x00000020,
COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC |
INTERFACE_SEC | EXCEPTION_SEC,
SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
FILE_MASK = SOURCE_SEC | HEADER_SEC
CLASSDOC_SEC = 0x00000100,
STRUCTDOC_SEC = 0x00000200,
UNIONDOC_SEC = 0x00000400,
EXCEPTIONDOC_SEC = 0x00000800,
NAMESPACEDOC_SEC = 0x00001000,
INTERFACEDOC_SEC = 0x00002000,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC |
INTERFACEDOC_SEC | EXCEPTIONDOC_SEC,
SOURCE_SEC = 0x00010000,
HEADER_SEC = 0x00020000,
FILE_MASK = SOURCE_SEC | HEADER_SEC,
ENUMDOC_SEC = 0x00100000,
ENUM_SEC = 0x00200000,
EMPTY_SEC = 0x00300000,
PAGEDOC_SEC = 0x00400000,
VARIABLE_SEC = 0x00500000,
FUNCTION_SEC = 0x00600000,
TYPEDEF_SEC = 0x00700000,
MEMBERDOC_SEC = 0x00800000,
OVERLOADDOC_SEC = 0x00900000,
EXAMPLE_SEC = 0x00a00000,
VARIABLEDOC_SEC = 0x00b00000,
FILEDOC_SEC = 0x00c00000,
DEFINEDOC_SEC = 0x00d00000,
INCLUDE_SEC = 0x00e00000,
DEFINE_SEC = 0x00f00000,
GROUPDOC_SEC = 0x01000000,
USINGDIR_SEC = 0x01100000,
MAINPAGEDOC_SEC = 0x01200000
};
Entry();
......
......@@ -269,6 +269,7 @@ void FileDef::writeDocumentation(OutputList &ol)
case ClassDef::Struct: ol.writeString("struct"); break;
case ClassDef::Union: ol.writeString("union"); break;
case ClassDef::Interface: ol.writeString("interface"); break;
case ClassDef::Exception: ol.writeString("exception"); break;
}
ol.writeString(" ");
ol.insertMemberAlign();
......
......@@ -136,6 +136,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case ClassDef::Struct: type="struct"; break;
case ClassDef::Union: type="union"; break;
case ClassDef::Interface: type="interface"; break;
case ClassDef::Exception: type="exception"; break;
}
ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name());
ol.writeEndAnnoItem(cd->name());
......
......@@ -184,7 +184,12 @@ void HtmlGenerator::writeStyleInfo(int part)
if (Config::htmlStyleSheet.isEmpty()) // write default style sheet
{
startPlainFile("doxygen.css");
t << "H1 { text-align: center }" << endl;
// alternative, cooler looking titles
//t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
//t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
t << "H1 { text-align: center; }" << endl;
t << "A.qindex {}" << endl;
t << "A.qindexRef {}" << endl;
t << "A.el { text-decoration: none; font-weight: bold }" << endl;
......
......@@ -211,7 +211,7 @@ void writeClassHierarchy(OutputList &ol)
ClassDef *cd=cli.current();
if (!hasVisibleRoot(cd->baseClasses()))
{
if (cd->isVisibleInHierarchy()) // WAS: isVisible()!
if (cd->isVisibleInHierarchy())
{
if (!started)
{
......@@ -399,7 +399,7 @@ void writeFileIndex(OutputList &ol)
{
bool doc = fd->isLinkableInProject();
bool src = fd->generateSource() || Config::sourceBrowseFlag;
if (doc || src)
if ((doc || src) && !fd->isReference())
{
//ol.writeIndexItem(fd->getReference(),fd->diskName(),
// fd->name());
......
......@@ -863,7 +863,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//if (cd && (!isRelated() || templateArguments()!=0) &&
// ((al=scopeDefTemplateArguments()) || (al=cd->templateArguments()))
// )
if (scopeAl) // class template prefix
if (scopeAl && !related) // class template prefix
{
writeTemplatePrefix(ol,scopeAl);
}
......
......@@ -99,6 +99,7 @@ class MemberDef : public Definition
FileDef *getFileDef() { return fileDef; }
FileDef *getFileDec() { return fileDec; }
void setMemberClass(ClassDef *cd) { classDef=cd; }
void makeRelated() { related=TRUE; }
bool isRelated() const { return related; }
bool isStatic() const { return stat; }
bool isInline() const { return inLine; }
......
......@@ -63,7 +63,9 @@ void MemberList::countDecMembers()
case MemberDef::Variable: varCnt++,m_count++; break;
case MemberDef::Function: // fall through
case MemberDef::Signal: // fall through
case MemberDef::Slot: funcCnt++,m_count++; break;
case MemberDef::Slot: if (!md->isRelated() || md->memberClass())
funcCnt++,m_count++;
break;
case MemberDef::Enumeration: enumCnt++,m_count++; break;
case MemberDef::EnumValue: enumValCnt++,m_count++; break;
case MemberDef::Typedef: typeCnt++,m_count++; break;
......@@ -409,8 +411,10 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
MemberListIterator mli(*this);
for ( ; (md=mli.current()) ; ++mli )
{
if ( md->isFunction() || md->isSignal() ||
md->isSlot())
if (
( md->isFunction() || md->isSignal() || md->isSlot()) &&
( !md->isRelated() || md->memberClass() )
)
{
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup);
prevGroupId = md->groupId();
......@@ -424,7 +428,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
MemberListIterator mli(*this);
for ( ; (md=mli.current()) ; ++mli )
{
if ( md->isFriend())
if (md->isFriend())
{
QCString type=md->typeString();
//printf("Friend: type=%s name=%s\n",type.data(),md->name().data());
......
......@@ -138,6 +138,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
case ClassDef::Struct: ol.writeString("struct"); break;
case ClassDef::Union: ol.writeString("union"); break;
case ClassDef::Interface: ol.writeString("interface"); break;
case ClassDef::Exception: ol.writeString("exception"); break;
}
ol.writeString(" ");
ol.insertMemberAlign();
......
This diff is collapsed.
......@@ -2189,7 +2189,7 @@ VAR [vV][aA][rR]
lineCount();
BEGIN( ClassName );
}
<FindMembers>{B}*"interface"{BN}+ {
<FindMembers>{B}*"interface"{BN}+ { // M$/Corba IDL interface
isTypedef=FALSE;
current->section = Entry::INTERFACE_SEC;
addType( current ) ;
......@@ -2200,6 +2200,17 @@ VAR [vV][aA][rR]
lineCount();
BEGIN( ClassName );
}
<FindMembers>{B}*"exception"{BN}+ { // Corba IDL exception
isTypedef=FALSE;
current->section = Entry::EXCEPTION_SEC;
addType( current ) ;
current->type += " exception" ;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount();
BEGIN( ClassName );
}
<FindMembers>{B}*(("typedef"{BN}+)?)"class"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::CLASS_SEC;
......@@ -2897,7 +2908,7 @@ VAR [vV][aA][rR]
while (p)
{
// only look for class scopes, not namespace scopes
if (p->section & Entry::COMPOUND_MASK)
if ((p->section & Entry::COMPOUND_MASK) && !p->name.isEmpty())
{
//printf("Trying scope `%s'\n",p->name.data());
int i=p->name.findRev("::");
......@@ -3514,8 +3525,9 @@ VAR [vV][aA][rR]
lastClassTemplSpecContext = ClassVar;
BEGIN( ClassTemplSpec );
}
<ClassTemplSpec>">"({BN}*{SCOPENAME})? {
<ClassTemplSpec>">"({BN}*"::"{BN}*{SCOPENAME})? {
current->name += yytext;
lineCount();
if (--sharpCount<=0)
{
current->name = removeRedundantWhiteSpace(current->name);
......@@ -3580,7 +3592,7 @@ VAR [vV][aA][rR]
<BasesProt>"public" { baseProt = Public; }
<BasesProt>"protected" { baseProt = Protected; }
<BasesProt>"private" { baseProt = Private; }
<BasesProt>{BN} {}
<BasesProt>{BN} { lineCount(); }
<BasesProt>. { unput(*yytext); BEGIN(Bases); }
<Bases>("::")*{BN}*({ID}{BN}*"::"{BN}*)*{ID} {
//current->extends->append(
......@@ -3634,7 +3646,10 @@ VAR [vV][aA][rR]
current->extends->append(
new BaseInfo(baseName,baseProt,baseVirt)
);
baseProt=Private;
if (current->section == Entry::INTERFACE_SEC)
baseProt=Public;
else
baseProt=Private;
baseVirt=Normal;
baseName.resize(0);
BEGIN(BasesProt);
......@@ -3850,6 +3865,12 @@ VAR [vV][aA][rR]
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"idlexcept"{B}* {
current->section = Entry::EXCEPTIONDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"page"{B}* {
current->section = Entry::PAGEDOC_SEC;
current->fileName = yyFileName;
......
......@@ -527,6 +527,7 @@ class Translator
case ClassDef::Struct: result+=" Struct"; break;
case ClassDef::Union: result+=" Union"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+=" Reference";
return result;
......@@ -686,6 +687,7 @@ class Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" was generated from the following file";
if (single) result+=":"; else result+="s:";
......
......@@ -296,6 +296,7 @@ class TranslatorCzech : public Translator
case ClassDef::Struct: result+=" struktury"; break;
case ClassDef::Union: result+=" unie"; break;
case ClassDef::Interface: result+=" rozhrani"; break;
case ClassDef::Exception: result+=" exception"; break;
}
return result;
}
......@@ -454,6 +455,7 @@ class TranslatorCzech : public Translator
case ClassDef::Struct: result+="tuto strukturu"; break;
case ClassDef::Union: result+="tuto unii"; break;
case ClassDef::Interface: result+="toto rozhrani"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" byla vygenerovana z nasledujiciho souboru";
if (single) result+=":"; else result+="s:";
......
......@@ -440,6 +440,7 @@ class TranslatorGerman : public Translator
case ClassDef::Struct: result+=" Strukturen"; break;
case ClassDef::Union: result+=" Varianten"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+="referenz";
return result;
......
......@@ -287,6 +287,7 @@ class TranslatorSpanish : public Translator
case ClassDef::Struct: result+=" Estructura"; break;
case ClassDef::Union: result+=" Unin"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+=" Referencia";
return result;
......
......@@ -473,6 +473,7 @@ class TranslatorFinnish : public Translator
case ClassDef::Struct: result+=" Struct"; break; // "Struct"
case ClassDef::Union: result+=" Union"; break; // "Union"
case ClassDef::Interface: result+=" Interface"; break; // "Interface"
case ClassDef::Exception: result+=" Exception"; break; // "Interface"
}
result+=" Referenssi"; // " Reference"
return result;
......
......@@ -499,6 +499,7 @@ class TranslatorFrench : public Translator
case ClassDef::Struct: result+="la structure "; break;
case ClassDef::Union: result+="l'union "; break;
case ClassDef::Interface: result+="l'interface "; break;
case ClassDef::Exception: result+="l'exception "; break;
}
result+=(QCString)clName;
......@@ -659,6 +660,7 @@ class TranslatorFrench : public Translator
case ClassDef::Struct: result+="structure"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" a été générée à partir ";
if (single) result+=" du fichier suivant :";
......
......@@ -538,6 +538,7 @@ class TranslatorItalian : public Translator
case ClassDef::Struct: result+="la struct "; break;
case ClassDef::Union: result+="la union "; break;
case ClassDef::Interface: result+="l'interfaccia "; break;
case ClassDef::Exception: result+="exception "; break;
}
result+=(QCString)clName;
return result;
......@@ -699,6 +700,7 @@ class TranslatorItalian : public Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interfaccia"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" è stata generata a partire ";
if (single) result+="dal seguente file:";
......
......@@ -270,6 +270,7 @@ class TranslatorDutch : public Translator
case ClassDef::Struct: result+=" Struct"; break;
case ClassDef::Union: result+=" Union"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+=" Referentie";
return result;
......@@ -403,6 +404,7 @@ class TranslatorDutch : public Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" is gegenereerd op grond van de volgende file";
if (single) result+=":"; else result+="s:";
......
......@@ -388,6 +388,7 @@ class TranslatorSwedish : public Translator
case ClassDef::Struct: result+=" strukt"; break;
case ClassDef::Union: result+=" union"; break;
case ClassDef::Interface: result+=" grnssnitt"; break;
case ClassDef::Exception: result+=" exception"; break;
}
result+="referens";
return result;
......@@ -525,6 +526,7 @@ class TranslatorSwedish : public Translator
case ClassDef::Struct: result+="denna strukt "; break;
case ClassDef::Union: result+="denna union "; break;
case ClassDef::Interface: result+="detta grnssnitt "; break;
case ClassDef::Exception: result+="exception "; break;
}
result+="var genererad frn fljande fil";
if (single) result+=":"; else result+="er:";
......
......@@ -59,6 +59,29 @@ bool isId(char c)
// return result;
//}
// remove all annoymous scopes from string s
QCString removeAnnonymousScopes(const QCString &s)
{
QCString result;
int i,ni,l=s.length();
int p=0;
while ((i=s.find('@',p))!=-1)
{
if (i>p+2) result+=s.mid(p,i-p-2);
if ((ni=s.find("::",i+1))!=-1)
{
p=ni+2;
}
else
{
p=l;
}
}
if (p!=l) result+=s.mid(p,l-p);
//printf("removeAnnonymousScopes(`%s')=`%s'\n",s.data(),result.data());
return result;
}
// strip annonymous left hand side part of the scope
QCString stripAnnonymousNamespaceScope(const QCString &s)
{
......@@ -85,7 +108,7 @@ void writePageRef(OutputList &ol,const char *cn,const char *mn)
ol.pushGeneratorState();
ol.enableAll();
//ol.enableAll();
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man);
if (Config::pdfHyperFlag) ol.disable(OutputGenerator::Latex);
......
......@@ -79,5 +79,6 @@ bool leftScopeMatch(const QCString &scope, const QCString &name);
void writePageRef(OutputList &ol,const char *cn,const char *mn);
QCString substituteKeywords(const QCString &s,const char *title);
int getPrefixIndex(const QCString &name);
QCString removeAnnonymousScopes(const QCString &s);
#endif
......@@ -8,7 +8,7 @@ TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = cc
TMAKE_CFLAGS = -w +a1
TMAKE_CFLAGS = -w +a1 -DAportable
TMAKE_CFLAGS_WARN_ON =
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O
......
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