summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addon/doxyapp/doxyapp.cpp14
-rw-r--r--doc/commands.doc32
-rw-r--r--doc/doxygen_manual.css4
-rw-r--r--doc/translator.py6
-rw-r--r--qtools/qcstring.cpp6
-rw-r--r--qtools/qfile_win32.cpp4
-rw-r--r--qtools/qglobal.h2
-rw-r--r--src/classdef.cpp661
-rw-r--r--src/classdef.h414
-rw-r--r--src/code.l18
-rw-r--r--src/commentcnv.l17
-rw-r--r--src/context.cpp53
-rw-r--r--src/debug.cpp1
-rw-r--r--src/debug.h3
-rw-r--r--src/definition.cpp319
-rw-r--r--src/definition.h209
-rw-r--r--src/definitionimpl.h144
-rw-r--r--src/diagram.cpp2
-rw-r--r--src/dirdef.cpp143
-rw-r--r--src/dirdef.h90
-rw-r--r--src/docbookgen.cpp4
-rw-r--r--src/docbookvisitor.cpp32
-rw-r--r--src/docparser.cpp57
-rw-r--r--src/docparser.h20
-rw-r--r--src/docsets.cpp6
-rw-r--r--src/dot.cpp12
-rw-r--r--src/doxygen.cpp135
-rw-r--r--src/filedef.cpp315
-rw-r--r--src/filedef.h218
-rw-r--r--src/formula.cpp1
-rw-r--r--src/fortrancode.l8
-rw-r--r--src/fortranscanner.l76
-rw-r--r--src/ftvhelp.cpp8
-rw-r--r--src/groupdef.cpp242
-rw-r--r--src/groupdef.h166
-rw-r--r--src/htmldocvisitor.cpp85
-rw-r--r--src/index.cpp24
-rw-r--r--src/latexdocvisitor.cpp33
-rw-r--r--src/mandocvisitor.cpp34
-rw-r--r--src/markdown.cpp36
-rw-r--r--src/memberdef.cpp969
-rw-r--r--src/memberdef.h603
-rw-r--r--src/memberlist.cpp2
-rw-r--r--src/namespacedef.cpp243
-rw-r--r--src/namespacedef.h179
-rw-r--r--src/pagedef.cpp98
-rw-r--r--src/pagedef.h78
-rw-r--r--src/perlmodgen.cpp1
-rw-r--r--src/pre.l85
-rw-r--r--src/printdocvisitor.h1
-rw-r--r--src/pycode.l10
-rw-r--r--src/rtfdocvisitor.cpp34
-rw-r--r--src/searchindex.cpp34
-rw-r--r--src/sqlcode.l2
-rw-r--r--src/tagreader.cpp4
-rw-r--r--src/tooltip.cpp2
-rw-r--r--src/util.cpp40
-rw-r--r--src/vhdlcode.l4
-rw-r--r--src/vhdldocgen.cpp4
-rw-r--r--src/xmlcode.l2
-rw-r--r--src/xmldocvisitor.cpp28
-rw-r--r--src/xmlgen.cpp4
-rw-r--r--templates/html/doxygen.css4
-rwxr-xr-xtesting/runtests.py75
64 files changed, 3685 insertions, 2475 deletions
diff --git a/addon/doxyapp/doxyapp.cpp b/addon/doxyapp/doxyapp.cpp
index 45e71fc..1249871 100644
--- a/addon/doxyapp/doxyapp.cpp
+++ b/addon/doxyapp/doxyapp.cpp
@@ -76,15 +76,15 @@ class XRefDummyCodeGenerator : public CodeOutputInterface
// it is inside a member of a class
{
ctx.sprintf("inside %s %s of %s %s",
- ((MemberDef *)context)->memberTypeName().data(),
+ (dynamic_cast<MemberDef*>(context))->memberTypeName().data(),
context->name().data(),
- ((ClassDef*)parentContext)->compoundTypeString().data(),
+ (dynamic_cast<ClassDef*>(parentContext))->compoundTypeString().data(),
parentContext->name().data());
}
else if (parentContext==Doxygen::globalScope) // it is inside a global member
{
ctx.sprintf("inside %s %s",
- ((MemberDef *)context)->memberTypeName().data(),
+ (dynamic_cast<MemberDef*>(context))->memberTypeName().data(),
context->name().data());
}
}
@@ -185,20 +185,20 @@ static void lookupSymbol(Definition *d)
{
case Definition::TypeClass:
{
- ClassDef *cd = (ClassDef *)d;
+ ClassDef *cd = dynamic_cast<ClassDef*>(d);
printf("Kind: %s\n",cd->compoundTypeString().data());
}
break;
case Definition::TypeFile:
{
- FileDef *fd = (FileDef *)d;
+ FileDef *fd = dynamic_cast<FileDef*>(d);
printf("Kind: File: #includes %d other files\n",
fd->includeFileList() ? fd->includeFileList()->count() : 0);
}
break;
case Definition::TypeNamespace:
{
- NamespaceDef *nd = (NamespaceDef *)d;
+ NamespaceDef *nd = dynamic_cast<NamespaceDef*>(d);
printf("Kind: Namespace: contains %d classes and %d namespaces\n",
nd->getClassSDict() ? nd->getClassSDict()->count() : 0,
nd->getNamespaceSDict() ? nd->getNamespaceSDict()->count() : 0);
@@ -206,7 +206,7 @@ static void lookupSymbol(Definition *d)
break;
case Definition::TypeMember:
{
- MemberDef *md = (MemberDef *)d;
+ MemberDef *md = dynamic_cast<MemberDef*>(d);
printf("Kind: %s\n",md->memberTypeName().data());
}
break;
diff --git a/doc/commands.doc b/doc/commands.doc
index 0e66c1d..ae27a7a 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -445,7 +445,7 @@ Structural indicators
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
-</p><hr>
+<hr>
\section cmddef \\def <name>
\addindex \\def
@@ -463,7 +463,7 @@ Structural indicators
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
-</p><hr>
+<hr>
\section cmddefgroup \\defgroup <name> (group title)
\addindex \\defgroup
@@ -515,7 +515,7 @@ Structural indicators
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
-</p><hr>
+<hr>
\section cmdexample \\example[{lineno}] <file-name>
\addindex \\example
@@ -553,7 +553,7 @@ Structural indicators
\sa section \ref cmdinclude "\\include".
-</p><hr>
+<hr>
\section cmdendinternal \\endinternal
\addindex \\endinternal
@@ -612,7 +612,7 @@ Structural indicators
\note In the above example \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF"
has been set to \c YES in the configuration file.
-</p><hr>
+<hr>
\section cmdfn \\fn (function declaration)
\addindex \\fn
@@ -650,7 +650,7 @@ Structural indicators
\sa sections \ref cmdvar "\\var", \ref cmdproperty "\\property", and
\ref cmdtypedef "\\typedef".
-</p><hr>
+<hr>
\section cmdheaderfile \\headerfile <header-file> [<header-name>]
\addindex \\headerfile
@@ -836,7 +836,7 @@ Structural indicators
\ref cmdpublic "\\public", \ref cmdprotected "\\protected" and
\ref cmdprivate "\\private".
-</p><hr>
+<hr>
\section cmdname \\name [(header)]
\addindex \\name
@@ -904,7 +904,7 @@ Structural indicators
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
-</p><hr>
+<hr>
\section cmdpackage \\package <name>
\addindex \\package
@@ -945,7 +945,7 @@ Structural indicators
\ref cmdsubsection "\\subsection", and section
\ref cmdref "\\ref".
-</p><hr>
+<hr>
\section cmdprivate \\private
\addindex \\private
@@ -1092,7 +1092,7 @@ Structural indicators
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
-</p><hr>
+<hr>
\section cmdrelated \\related <name>
\addindex \\related
@@ -1255,7 +1255,7 @@ Section indicators
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
-</p><hr>
+<hr>
\section cmdauthors \\authors { list of authors }
\addindex \\authors
@@ -1606,7 +1606,7 @@ ALIASES = "english=\if english" \
for the corresponding \mbox{\LaTeX} documentation that is generated by doxygen.
\endlatexonly
-</p><hr>
+<hr>
\section cmdparam \\param [(dir)] <parameter-name> { parameter description }
\addindex \\param
@@ -2186,7 +2186,7 @@ Commands for displaying examples
\htmlonly</p></center><p>\endhtmlonly
<hr>
-\section cmddontinclude \\dontinclude <file-name>
+\section cmddontinclude \\dontinclude[{lineno}] <file-name>
\addindex \\dontinclude
This command can be used to parse a source file without actually
@@ -2197,6 +2197,8 @@ Commands for displaying examples
\ref cfg_example_path "EXAMPLE_PATH"
tag of doxygen's configuration file.
+ You can add option `{lineno}` to enable line numbers for the included code if desired.
+
The class and member declarations and definitions inside the code fragment
are 'remembered' during the parsing of the comment block that contained
the \c \\dontinclude command.
@@ -2224,7 +2226,7 @@ Commands for displaying examples
\ref cmdskipline "\\skipline", \ref cmduntil "\\until", and
\ref cmdinclude "\\include".
-</p><hr>
+<hr>
\section cmdinclude \\include[{lineno|doc}] <file-name>
\addindex \\include
@@ -3522,10 +3524,8 @@ browser generator. Do \e not use these commands in your own documentation.
\htmlonly
-</p>
Go to the <a href="htmlcmds.html">next</a> section or return to the
<a href="index.html">index</a>.
-<p>
\endhtmlonly
*/
diff --git a/doc/doxygen_manual.css b/doc/doxygen_manual.css
index 87d560c..1c42e1b 100644
--- a/doc/doxygen_manual.css
+++ b/doc/doxygen_manual.css
@@ -49,11 +49,13 @@ dt {
font-weight: bold;
}
-div.multicol {
+ul.multicol {
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
+ column-gap: 1em;
-moz-column-count: 3;
-webkit-column-count: 3;
+ column-count: 3;
}
p.startli, p.startdd {
diff --git a/doc/translator.py b/doc/translator.py
index 2246c08..ed001bb 100644
--- a/doc/translator.py
+++ b/doc/translator.py
@@ -1821,9 +1821,9 @@ class TrManager:
tplDic['numLangStr'] = str(self.numLang)
# Define templates for HTML table parts of the documentation.
- htmlTableTpl = '''\
+ htmlTableTpl = '''
\\htmlonly
- </p>
+ </p>
<table align="center" cellspacing="0" cellpadding="0" border="0">
<tr bgcolor="#000000">
<td>
@@ -1842,7 +1842,7 @@ class TrManager:
</td>
</tr>
</table>
- <p>
+ <p>
\\endhtmlonly
'''
htmlTableTpl = textwrap.dedent(htmlTableTpl)
diff --git a/qtools/qcstring.cpp b/qtools/qcstring.cpp
index 77461b2..6a14d66 100644
--- a/qtools/qcstring.cpp
+++ b/qtools/qcstring.cpp
@@ -343,7 +343,7 @@ QCString QCString::simplifyWhiteSpace() const
if ( to > first && *(to-1) == 0x20 )
to--;
*to = '\0';
- result.resize( (int)((long)to - (long)result.data()) + 1 );
+ result.resize( (int)(to - result.data()) + 1 );
return result;
}
@@ -571,7 +571,7 @@ int qstricmp( const char *str1, const char *str2 )
int res;
uchar c;
if ( !s1 || !s2 )
- return s1 == s2 ? 0 : (int)((long)s2 - (long)s1);
+ return s1 == s2 ? 0 : (int)(s2 - s1);
for ( ; !(res = (c=tolower(*s1)) - tolower(*s2)); s1++, s2++ )
if ( !c ) // strings are equal
break;
@@ -585,7 +585,7 @@ int qstrnicmp( const char *str1, const char *str2, uint len )
int res;
uchar c;
if ( !s1 || !s2 )
- return (int)((long)s2 - (long)s1);
+ return (int)(s2 - s1);
for ( ; len--; s1++, s2++ ) {
if ( (res = (c=tolower(*s1)) - tolower(*s2)) )
return res;
diff --git a/qtools/qfile_win32.cpp b/qtools/qfile_win32.cpp
index a4ab013..e0b1d88 100644
--- a/qtools/qfile_win32.cpp
+++ b/qtools/qfile_win32.cpp
@@ -515,7 +515,7 @@ int QFile::readBlock( char *p, uint len )
setStatus(IO_ReadError);
}
} else { // buffered file
- nread = fread( p, 1, len, fh );
+ nread = (int)fread( p, 1, len, fh );
if ( (uint)nread != len ) {
if ( ferror( fh ) || nread==0 )
setStatus(IO_ReadError);
@@ -562,7 +562,7 @@ int QFile::writeBlock( const char *p, uint len )
if ( isRaw() ) // raw file
nwritten = WRITE( fd, p, len );
else // buffered file
- nwritten = fwrite( p, 1, len, fh );
+ nwritten = (int)fwrite( p, 1, len, fh );
if ( nwritten != (int)len ) { // write error
if ( errno == ENOSPC ) // disk is full
setStatus( IO_ResourceError );
diff --git a/qtools/qglobal.h b/qtools/qglobal.h
index c3f7594..8512f41 100644
--- a/qtools/qglobal.h
+++ b/qtools/qglobal.h
@@ -357,7 +357,9 @@ typedef const char *pcchar;
typedef __int64 int64;
typedef unsigned __int64 uint64;
#else
+#if !defined(_OS_AIX_) || !defined(_H_INTTYPES)
typedef long long int64;
+#endif
typedef unsigned long long uint64;
#endif
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 621b98c..5ea8cea 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -45,15 +45,235 @@
#include "filedef.h"
#include "namespacedef.h"
#include "membergroup.h"
+#include "definitionimpl.h"
//-----------------------------------------------------------------------------
-/** Private data associated with a ClassDef object. */
-class ClassDefImpl
+
+/** Implementation of the ClassDef interface */
+class ClassDefImpl : public DefinitionImpl, public ClassDef
{
public:
- ClassDefImpl();
+ ClassDefImpl(const char *fileName,int startLine,int startColumn,
+ const char *name,CompoundType ct,
+ const char *ref=0,const char *fName=0,
+ bool isSymbol=TRUE,bool isJavaEnum=FALSE);
+ /** Destroys a compound definition. */
~ClassDefImpl();
+
+ virtual DefType definitionType() const { return TypeClass; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString getInstanceOutputFileBase() const;
+ virtual QCString getSourceFileBase() const;
+ virtual QCString getReference() const;
+ virtual bool isReference() const;
+ virtual bool isLocal() const;
+ virtual ClassSDict *getClassSDict() const;
+ virtual bool hasDocumentation() const;
+ virtual bool hasDetailedDescription() const;
+ virtual QCString collaborationGraphFileName() const;
+ virtual QCString inheritanceGraphFileName() const;
+ virtual QCString displayName(bool includeScope=TRUE) const;
+ virtual CompoundType compoundType() const;
+ virtual QCString compoundTypeString() const;
+ virtual BaseClassList *baseClasses() const;
+ virtual BaseClassList *subClasses() const;
+ virtual MemberNameInfoSDict *memberNameInfoSDict() const;
+ virtual Protection protection() const;
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual bool isVisibleInHierarchy() const;
+ virtual bool visibleInParentsDeclList() const;
+ virtual ArgumentList *templateArguments() const;
+ virtual NamespaceDef *getNamespaceDef() const;
+ virtual FileDef *getFileDef() const;
+ virtual MemberDef *getMemberByName(const QCString &) const;
+ virtual bool isBaseClass(const ClassDef *bcd,bool followInstances,int level=0) const;
+ virtual bool isSubClass(ClassDef *bcd,int level=0) const;
+ virtual bool isAccessibleMember(const MemberDef *md) const;
+ virtual QDict<ClassDef> *getTemplateInstances() const;
+ virtual ClassDef *templateMaster() const;
+ virtual bool isTemplate() const;
+ virtual IncludeInfo *includeInfo() const;
+ virtual UsesClassDict *usedImplementationClasses() const;
+ virtual UsesClassDict *usedByImplementationClasses() const;
+ virtual UsesClassDict *usedInterfaceClasses() const;
+ virtual ConstraintClassDict *templateTypeConstraints() const;
+ virtual bool isTemplateArgument() const;
+ virtual Definition *findInnerCompound(const char *name) const;
+ virtual void getTemplateParameterLists(QList<ArgumentList> &lists) const;
+ virtual QCString qualifiedNameWithTemplateParameters(
+ QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const;
+ virtual bool isAbstract() const;
+ virtual bool isObjectiveC() const;
+ virtual bool isFortran() const;
+ virtual bool isCSharp() const;
+ virtual bool isFinal() const;
+ virtual bool isSealed() const;
+ virtual bool isPublished() const;
+ virtual bool isExtension() const;
+ virtual bool isForwardDeclared() const;
+ virtual bool isInterface() const;
+ virtual ClassDef *categoryOf() const;
+ virtual QCString className() const;
+ virtual MemberList *getMemberList(MemberListType lt) const;
+ virtual const QList<MemberList> &getMemberLists() const;
+ virtual MemberGroupSDict *getMemberGroupSDict() const;
+ virtual QDict<int> *getTemplateBaseClassNames() const;
+ virtual ClassDef *getVariableInstance(const char *templSpec);
+ virtual bool isUsedOnly() const;
+ virtual QCString anchor() const;
+ virtual bool isEmbeddedInOuterScope() const;
+ virtual bool isSimple() const;
+ virtual const ClassList *taggedInnerClasses() const;
+ virtual ClassDef *tagLessReference() const;
+ virtual MemberDef *isSmartPointer() const;
+ virtual bool isJavaEnum() const;
+ virtual bool isGeneric() const;
+ virtual bool isAnonymous() const;
+ virtual const ClassSDict *innerClasses() const;
+ virtual QCString title() const;
+ virtual QCString generatedFromFiles() const;
+ virtual const FileList &usedFiles() const;
+ virtual const ArgumentList *typeConstraints() const;
+ virtual const ExampleSDict *exampleList() const;
+ virtual bool hasExamples() const;
+ virtual QCString getMemberListFileName() const;
+ virtual bool subGrouping() const;
+ virtual bool isSliceLocal() const;
+ virtual void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0);
+ virtual void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0);
+ virtual void setIncludeFile(FileDef *fd,const char *incName,bool local,bool force);
+ virtual void insertMember(MemberDef *);
+ virtual void insertUsedFile(FileDef *);
+ virtual bool addExample(const char *anchor,const char *name, const char *file);
+ virtual void mergeCategory(ClassDef *category);
+ virtual void setNamespace(NamespaceDef *nd);
+ virtual void setFileDef(FileDef *fd);
+ virtual void setSubGrouping(bool enabled);
+ virtual void setProtection(Protection p);
+ virtual void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
+ virtual void addInnerCompound(Definition *d);
+ virtual ClassDef *insertTemplateInstance(const QCString &fileName,int startLine,int startColumn,
+ const QCString &templSpec,bool &freshInstance);
+ virtual void addUsedClass(ClassDef *cd,const char *accessName,Protection prot);
+ virtual void addUsedByClass(ClassDef *cd,const char *accessName,Protection prot);
+ virtual void setIsStatic(bool b);
+ virtual void setCompoundType(CompoundType t);
+ virtual void setClassName(const char *name);
+ virtual void setClassSpecifier(uint64 spec);
+ virtual void setTemplateArguments(ArgumentList *al);
+ virtual void setTemplateBaseClassNames(QDict<int> *templateNames);
+ virtual void setTemplateMaster(ClassDef *tm);
+ virtual void setTypeConstraints(ArgumentList *al);
+ virtual void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
+ virtual void makeTemplateArgument(bool b=TRUE);
+ virtual void setCategoryOf(ClassDef *cd);
+ virtual void setUsedOnly(bool b);
+ virtual void addTaggedInnerClass(ClassDef *cd);
+ virtual void setTagLessReference(ClassDef *cd);
+ virtual void setName(const char *name);
+ virtual void setMetaData(const char *md);
+ virtual void findSectionsInDocumentation();
+ virtual void addMembersToMemberGroup();
+ virtual void addListReferences();
+ virtual void addTypeConstraints();
+ virtual void computeAnchors();
+ virtual void mergeMembers();
+ virtual void sortMemberLists();
+ virtual void distributeMemberGroupDocumentation();
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeDocumentationForInnerClasses(OutputList &ol);
+ virtual void writeMemberPages(OutputList &ol);
+ virtual void writeMemberList(OutputList &ol);
+ virtual void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
+ ClassDef *inheritedFrom,const char *inheritId);
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const;
+ virtual void writeSummaryLinks(OutputList &ol);
+ virtual void reclassifyMember(MemberDef *md,MemberType t);
+ virtual void writeInlineDocumentation(OutputList &ol);
+ virtual void writeDeclarationLink(OutputList &ol,bool &found,
+ const char *header,bool localNames);
+ virtual void removeMemberFromLists(MemberDef *md);
+ virtual void addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
+ ClassDef *inheritedFrom,const QCString &inheritId);
+ virtual int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional);
+ virtual int countInheritanceNodes();
+ virtual void writeTagFile(FTextStream &);
+
+ virtual void setVisited(bool visited) { m_visited = visited; }
+ virtual bool isVisited() const { return m_visited; }
+ virtual bool hasNonReferenceSuperClass() const;
+ virtual int countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
+ int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
+ virtual void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
+ const char *subTitle=0,bool showInline=FALSE,ClassDef *inheritedFrom=0,
+ int lt2=-1,bool invert=FALSE,bool showAlways=FALSE,
+ QPtrDict<void> *visitedClasses=0);
+
+ private:
+ bool m_visited;
+ void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
+ void showUsedFiles(OutputList &ol);
+
+ void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
+ void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
+ void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief);
+ MemberList *createMemberList(MemberListType lt);
+ void writeInheritedMemberDeclarations(OutputList &ol,MemberListType lt,int lt2,const QCString &title,ClassDef *inheritedFrom,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
+ void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title,bool showInline=FALSE);
+ void writeSimpleMemberDocumentation(OutputList &ol,MemberListType lt);
+ void writePlainMemberDeclaration(OutputList &ol,MemberListType lt,bool inGroup,ClassDef *inheritedFrom,const char *inheritId);
+ void writeBriefDescription(OutputList &ol,bool exampleFlag);
+ void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
+ const QCString &title,const QCString &anchor=QCString());
+ void writeIncludeFiles(OutputList &ol);
+ void writeIncludeFilesForSlice(OutputList &ol);
+ //void writeAllMembersLink(OutputList &ol);
+ void writeInheritanceGraph(OutputList &ol);
+ void writeCollaborationGraph(OutputList &ol);
+ void writeMemberGroups(OutputList &ol,bool showInline=FALSE);
+ void writeNestedClasses(OutputList &ol,const QCString &title);
+ void writeInlineClasses(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void writeMoreLink(OutputList &ol,const QCString &anchor);
+ void writeDetailedDocumentationBody(OutputList &ol);
+
+ int countAdditionalInheritedMembers();
+ void writeAdditionalInheritedMembers(OutputList &ol);
+ void addClassAttributes(OutputList &ol);
+ int countInheritedDecMembers(MemberListType lt,
+ ClassDef *inheritedFrom,bool invert,bool showAlways,
+ QPtrDict<void> *visitedClasses);
+ void getTitleForMemberListType(MemberListType type,
+ QCString &title,QCString &subtitle);
+ QCString includeStatement() const;
+ void addTypeConstraint(const QCString &typeConstraint,const QCString &type);
+
+ // PIMPL idiom
+ class IMPL;
+ IMPL *m_impl;
+};
+
+ClassDef *createClassDef(
+ const char *fileName,int startLine,int startColumn,
+ const char *name,ClassDef::CompoundType ct,
+ const char *ref,const char *fName,
+ bool isSymbol,bool isJavaEnum)
+{
+ return new ClassDefImpl(fileName,startLine,startColumn,name,ct,ref,fName,isSymbol,isJavaEnum);
+}
+
+/** Private data associated with a ClassDef object. */
+class ClassDefImpl::IMPL
+{
+ public:
+ IMPL();
+ ~IMPL();
void init(const char *defFileName, const char *name,
const QCString &ctStr, const char *fName);
@@ -206,7 +426,7 @@ class ClassDefImpl
QCString metaData;
};
-void ClassDefImpl::init(const char *defFileName, const char *name,
+void ClassDefImpl::IMPL::init(const char *defFileName, const char *name,
const QCString &ctStr, const char *fName)
{
if (fName)
@@ -268,12 +488,12 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
isAnonymous = QCString(name).find('@')!=-1;
}
-ClassDefImpl::ClassDefImpl() : vhdlSummaryTitles(17)
+ClassDefImpl::IMPL::IMPL() : vhdlSummaryTitles(17)
{
vhdlSummaryTitles.setAutoDelete(TRUE);
}
-ClassDefImpl::~ClassDefImpl()
+ClassDefImpl::IMPL::~IMPL()
{
delete inherits;
delete inheritedBy;
@@ -294,17 +514,19 @@ ClassDefImpl::~ClassDefImpl()
delete taggedInnerClasses;
}
+//-------------------------------------------------------------------------------------------
+
// constructs a new class definition
-ClassDef::ClassDef(
+ClassDefImpl::ClassDefImpl(
const char *defFileName,int defLine,int defColumn,
const char *nm,CompoundType ct,
const char *lref,const char *fName,
bool isSymbol,bool isJavaEnum)
- : Definition(defFileName,defLine,defColumn,removeRedundantWhiteSpace(nm),0,0,isSymbol)
+ : DefinitionImpl(defFileName,defLine,defColumn,removeRedundantWhiteSpace(nm),0,0,isSymbol)
{
- visited=FALSE;
+ m_visited=FALSE;
setReference(lref);
- m_impl = new ClassDefImpl;
+ m_impl = new ClassDefImpl::IMPL;
m_impl->compType = ct;
m_impl->isJavaEnum = isJavaEnum;
m_impl->init(defFileName,name(),compoundTypeString(),fName);
@@ -318,17 +540,17 @@ ClassDef::ClassDef(
}
// destroy the class definition
-ClassDef::~ClassDef()
+ClassDefImpl::~ClassDefImpl()
{
delete m_impl;
}
-QCString ClassDef::getMemberListFileName() const
+QCString ClassDefImpl::getMemberListFileName() const
{
return m_impl->memberListFileName;
}
-QCString ClassDef::displayName(bool includeScope) const
+QCString ClassDefImpl::displayName(bool includeScope) const
{
//static bool optimizeOutputForJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
SrcLangExt lang = getLanguage();
@@ -362,7 +584,7 @@ QCString ClassDef::displayName(bool includeScope) const
//{
// n = n.left(n.length()-2);
//}
- //printf("ClassDef::displayName()=%s\n",n.data());
+ //printf("ClassDefImpl::displayName()=%s\n",n.data());
if (n.find('@')!=-1)
{
return removeAnonymousScopes(n);
@@ -374,7 +596,7 @@ QCString ClassDef::displayName(bool includeScope) const
}
// inserts a base/super class in the inheritance list
-void ClassDef::insertBaseClass(ClassDef *cd,const char *n,Protection p,
+void ClassDefImpl::insertBaseClass(ClassDef *cd,const char *n,Protection p,
Specifier s,const char *t)
{
//printf("*** insert base class %s into %s\n",cd->name().data(),name().data());
@@ -389,7 +611,7 @@ void ClassDef::insertBaseClass(ClassDef *cd,const char *n,Protection p,
}
// inserts a derived/sub class in the inherited-by list
-void ClassDef::insertSubClass(ClassDef *cd,Protection p,
+void ClassDefImpl::insertSubClass(ClassDef *cd,Protection p,
Specifier s,const char *t)
{
//printf("*** insert sub class %s into %s\n",cd->name().data(),name().data());
@@ -404,7 +626,7 @@ void ClassDef::insertSubClass(ClassDef *cd,Protection p,
m_impl->isSimple = FALSE;
}
-void ClassDef::addMembersToMemberGroup()
+void ClassDefImpl::addMembersToMemberGroup()
{
QListIterator<MemberList> mli(m_impl->memberLists);
MemberList *ml;
@@ -433,7 +655,7 @@ void ClassDef::addMembersToMemberGroup()
}
// adds new member definition to the class
-void ClassDef::internalInsertMember(MemberDef *md,
+void ClassDefImpl::internalInsertMember(MemberDef *md,
Protection prot,
bool addToAllList
)
@@ -739,13 +961,13 @@ void ClassDef::internalInsertMember(MemberDef *md,
}
}
-void ClassDef::insertMember(MemberDef *md)
+void ClassDefImpl::insertMember(MemberDef *md)
{
internalInsertMember(md,md->protection(),TRUE);
}
// compute the anchors for all members
-void ClassDef::computeAnchors()
+void ClassDefImpl::computeAnchors()
{
//ClassDef *context = Config_getBool(INLINE_INHERITED_MEMB) ? this : 0;
//const char *letters = "abcdefghijklmnopqrstuvwxyz0123456789";
@@ -771,7 +993,7 @@ void ClassDef::computeAnchors()
}
}
-void ClassDef::distributeMemberGroupDocumentation()
+void ClassDefImpl::distributeMemberGroupDocumentation()
{
if (m_impl->memberGroupSDict)
{
@@ -784,7 +1006,7 @@ void ClassDef::distributeMemberGroupDocumentation()
}
}
-void ClassDef::findSectionsInDocumentation()
+void ClassDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
if (m_impl->memberGroupSDict)
@@ -809,7 +1031,7 @@ void ClassDef::findSectionsInDocumentation()
// add a file name to the used files set
-void ClassDef::insertUsedFile(FileDef *fd)
+void ClassDefImpl::insertUsedFile(FileDef *fd)
{
if (fd==0) return;
if (m_impl->files.find(fd)==-1) m_impl->files.append(fd);
@@ -846,10 +1068,10 @@ static void writeInheritanceSpecifier(OutputList &ol,BaseClassDef *bcd)
}
}
-void ClassDef::setIncludeFile(FileDef *fd,
+void ClassDefImpl::setIncludeFile(FileDef *fd,
const char *includeName,bool local, bool force)
{
- //printf("ClassDef::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
+ //printf("ClassDefImpl::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
if (!m_impl->incInfo) m_impl->incInfo=new IncludeInfo;
if ((includeName && m_impl->incInfo->includeName.isEmpty()) ||
(fd!=0 && m_impl->incInfo->fileDef==0)
@@ -868,7 +1090,7 @@ void ClassDef::setIncludeFile(FileDef *fd,
}
// TODO: fix this: a nested template class can have multiple outer templates
-//ArgumentList *ClassDef::outerTemplateArguments() const
+//ArgumentList *ClassDefImpl::outerTemplateArguments() const
//{
// int ti;
// ClassDef *pcd=0;
@@ -896,7 +1118,7 @@ static void searchTemplateSpecs(/*in*/ Definition *d,
{
searchTemplateSpecs(d->getOuterScope(),result,name,lang);
}
- ClassDef *cd=(ClassDef *)d;
+ ClassDef *cd=dynamic_cast<ClassDef *>(d);
if (!name.isEmpty()) name+="::";
QCString clName = d->localName();
if (/*clName.right(2)=="-g" ||*/ clName.right(2)=="-p")
@@ -962,7 +1184,7 @@ static void writeTemplateSpec(OutputList &ol,Definition *d,
}
}
-void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
+void ClassDefImpl::writeBriefDescription(OutputList &ol,bool exampleFlag)
{
if (hasBriefDescription())
{
@@ -989,7 +1211,7 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
ol.writeSynopsis();
}
-void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
+void ClassDefImpl::writeDetailedDocumentationBody(OutputList &ol)
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
@@ -1037,7 +1259,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
ol.endTextBlock();
}
-bool ClassDef::hasDetailedDescription() const
+bool ClassDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
@@ -1047,7 +1269,7 @@ bool ClassDef::hasDetailedDescription() const
}
// write the detailed description for this class
-void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &/*pageType*/, bool exampleFlag,
+void ClassDefImpl::writeDetailedDescription(OutputList &ol, const QCString &/*pageType*/, bool exampleFlag,
const QCString &title,const QCString &anchor)
{
if (hasDetailedDescription() || exampleFlag)
@@ -1083,7 +1305,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &/*pageTy
}
}
-QCString ClassDef::generatedFromFiles() const
+QCString ClassDefImpl::generatedFromFiles() const
{
QCString result;
SrcLangExt lang = getLanguage();
@@ -1114,7 +1336,7 @@ QCString ClassDef::generatedFromFiles() const
return result;
}
-void ClassDef::showUsedFiles(OutputList &ol)
+void ClassDefImpl::showUsedFiles(OutputList &ol)
{
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
@@ -1194,7 +1416,7 @@ void ClassDef::showUsedFiles(OutputList &ol)
ol.popGeneratorState();
}
-int ClassDef::countInheritanceNodes()
+int ClassDefImpl::countInheritanceNodes()
{
int count=0;
BaseClassDef *ibcd;
@@ -1219,7 +1441,7 @@ int ClassDef::countInheritanceNodes()
return count;
}
-void ClassDef::writeInheritanceGraph(OutputList &ol)
+void ClassDefImpl::writeInheritanceGraph(OutputList &ol)
{
// count direct inheritance relations
const int count=countInheritanceNodes();
@@ -1344,7 +1566,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
}
}
-void ClassDef::writeCollaborationGraph(OutputList &ol)
+void ClassDefImpl::writeCollaborationGraph(OutputList &ol)
{
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(COLLABORATION_GRAPH)*/)
{
@@ -1361,7 +1583,7 @@ void ClassDef::writeCollaborationGraph(OutputList &ol)
}
}
-QCString ClassDef::includeStatement() const
+QCString ClassDefImpl::includeStatement() const
{
SrcLangExt lang = getLanguage();
bool isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
@@ -1379,7 +1601,7 @@ QCString ClassDef::includeStatement() const
}
}
-void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
+void ClassDefImpl::writeIncludeFilesForSlice(OutputList &ol)
{
if (m_impl->incInfo)
{
@@ -1489,15 +1711,15 @@ void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
else
{
// Must be a class.
- bool implements = false;
+ bool implements = FALSE;
BaseClassListIterator it(*m_impl->inherits);
BaseClassDef *ibcd;
for (;(ibcd=it.current());++it)
{
ClassDef *icd = ibcd->classDef;
- if (icd->m_impl->spec & Entry::Interface)
+ if (icd->isInterface())
{
- implements = true;
+ implements = TRUE;
}
else
{
@@ -1508,11 +1730,11 @@ void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
if (implements)
{
ol.docify(" implements ");
- bool first = true;
+ bool first = TRUE;
for (ibcd=it.toFirst();(ibcd=it.current());++it)
{
ClassDef *icd = ibcd->classDef;
- if (icd->m_impl->spec & Entry::Interface)
+ if (icd->isInterface())
{
if (!first)
{
@@ -1520,7 +1742,7 @@ void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
}
else
{
- first = false;
+ first = FALSE;
}
ol.docify(icd->name());
}
@@ -1533,7 +1755,7 @@ void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
ol.endParagraph();
}
-void ClassDef::writeIncludeFiles(OutputList &ol)
+void ClassDefImpl::writeIncludeFiles(OutputList &ol)
{
if (m_impl->incInfo /*&& Config_getBool(SHOW_INCLUDE_FILES)*/)
{
@@ -1580,7 +1802,7 @@ void ClassDef::writeIncludeFiles(OutputList &ol)
}
#if 0
-void ClassDef::writeAllMembersLink(OutputList &ol)
+void ClassDefImpl::writeAllMembersLink(OutputList &ol)
{
// write link to list of all members (HTML only)
if (m_impl->allMemberNameInfoSDict &&
@@ -1600,7 +1822,7 @@ void ClassDef::writeAllMembersLink(OutputList &ol)
}
#endif
-void ClassDef::writeMemberGroups(OutputList &ol,bool showInline)
+void ClassDefImpl::writeMemberGroups(OutputList &ol,bool showInline)
{
// write user defined member groups
if (m_impl->memberGroupSDict)
@@ -1623,7 +1845,7 @@ void ClassDef::writeMemberGroups(OutputList &ol,bool showInline)
}
}
-void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title)
+void ClassDefImpl::writeNestedClasses(OutputList &ol,const QCString &title)
{
// nested classes
if (m_impl->innerClasses)
@@ -1632,7 +1854,7 @@ void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title)
}
}
-void ClassDef::writeInlineClasses(OutputList &ol)
+void ClassDefImpl::writeInlineClasses(OutputList &ol)
{
if (m_impl->innerClasses)
{
@@ -1640,9 +1862,9 @@ void ClassDef::writeInlineClasses(OutputList &ol)
}
}
-void ClassDef::startMemberDocumentation(OutputList &ol)
+void ClassDefImpl::startMemberDocumentation(OutputList &ol)
{
- //printf("%s: ClassDef::startMemberDocumentation()\n",name().data());
+ //printf("%s: ClassDefImpl::startMemberDocumentation()\n",name().data());
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
ol.disable(OutputGenerator::Html);
@@ -1650,9 +1872,9 @@ void ClassDef::startMemberDocumentation(OutputList &ol)
}
}
-void ClassDef::endMemberDocumentation(OutputList &ol)
+void ClassDefImpl::endMemberDocumentation(OutputList &ol)
{
- //printf("%s: ClassDef::endMemberDocumentation()\n",name().data());
+ //printf("%s: ClassDefImpl::endMemberDocumentation()\n",name().data());
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
ol.enable(OutputGenerator::Html);
@@ -1660,15 +1882,15 @@ void ClassDef::endMemberDocumentation(OutputList &ol)
}
}
-void ClassDef::startMemberDeclarations(OutputList &ol)
+void ClassDefImpl::startMemberDeclarations(OutputList &ol)
{
- //printf("%s: ClassDef::startMemberDeclarations()\n",name().data());
+ //printf("%s: ClassDefImpl::startMemberDeclarations()\n",name().data());
ol.startMemberSections();
}
-void ClassDef::endMemberDeclarations(OutputList &ol)
+void ClassDefImpl::endMemberDeclarations(OutputList &ol)
{
- //printf("%s: ClassDef::endMemberDeclarations()\n",name().data());
+ //printf("%s: ClassDefImpl::endMemberDeclarations()\n",name().data());
static bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
if (!inlineInheritedMembers && countAdditionalInheritedMembers()>0)
{
@@ -1680,7 +1902,7 @@ void ClassDef::endMemberDeclarations(OutputList &ol)
ol.endMemberSections();
}
-void ClassDef::writeAuthorSection(OutputList &ol)
+void ClassDefImpl::writeAuthorSection(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Man);
@@ -1693,7 +1915,7 @@ void ClassDef::writeAuthorSection(OutputList &ol)
}
-void ClassDef::writeSummaryLinks(OutputList &ol)
+void ClassDefImpl::writeSummaryLinks(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1752,7 +1974,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeTagFile(FTextStream &tagFile)
+void ClassDefImpl::writeTagFile(FTextStream &tagFile)
{
if (!isLinkableInProject()) return;
tagFile << " <compound kind=\"";
@@ -1871,12 +2093,12 @@ void ClassDef::writeTagFile(FTextStream &tagFile)
}
/** Write class documentation inside another container (i.e. a group) */
-void ClassDef::writeInlineDocumentation(OutputList &ol)
+void ClassDefImpl::writeInlineDocumentation(OutputList &ol)
{
bool isSimple = m_impl->isSimple;
ol.addIndexItem(name(),0);
- //printf("ClassDef::writeInlineDocumentation(%s)\n",name().data());
+ //printf("ClassDefImpl::writeInlineDocumentation(%s)\n",name().data());
QListIterator<LayoutDocEntry> eli(
LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
LayoutDocEntry *lde;
@@ -1988,7 +2210,7 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
+void ClassDefImpl::writeMoreLink(OutputList &ol,const QCString &anchor)
{
// TODO: clean up this mess by moving it to
// the output generators...
@@ -2032,7 +2254,7 @@ void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
}
}
-bool ClassDef::visibleInParentsDeclList() const
+bool ClassDefImpl::visibleInParentsDeclList() const
{
static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
static bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
@@ -2044,7 +2266,7 @@ bool ClassDef::visibleInParentsDeclList() const
);
}
-void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *header,bool localNames)
+void ClassDefImpl::writeDeclarationLink(OutputList &ol,bool &found,const char *header,bool localNames)
{
//static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
//static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
@@ -2153,7 +2375,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
}
}
-void ClassDef::addClassAttributes(OutputList &ol)
+void ClassDefImpl::addClassAttributes(OutputList &ol)
{
QStrList sl;
if (isFinal()) sl.append("final");
@@ -2178,7 +2400,7 @@ void ClassDef::addClassAttributes(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*pageTitle*/)
+void ClassDefImpl::writeDocumentationContents(OutputList &ol,const QCString & /*pageTitle*/)
{
ol.startContents();
@@ -2313,7 +2535,7 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
ol.endContents();
}
-QCString ClassDef::title() const
+QCString ClassDefImpl::title() const
{
QCString pageTitle;
SrcLangExt lang = getLanguage();
@@ -2363,7 +2585,7 @@ QCString ClassDef::title() const
}
// write all documentation for this class
-void ClassDef::writeDocumentation(OutputList &ol)
+void ClassDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
//static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
@@ -2421,7 +2643,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
}
-void ClassDef::writeMemberPages(OutputList &ol)
+void ClassDefImpl::writeMemberPages(OutputList &ol)
{
///////////////////////////////////////////////////////////////////////////
//// Member definitions on separate pages
@@ -2444,7 +2666,7 @@ void ClassDef::writeMemberPages(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
+void ClassDefImpl::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
{
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
@@ -2494,7 +2716,7 @@ void ClassDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
-void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
+void ClassDefImpl::writeDocumentationForInnerClasses(OutputList &ol)
{
// write inner classes after the parent, so the tag files contain
// the definition in proper order!
@@ -2519,7 +2741,7 @@ void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
}
// write the list of all (inherited) members for this class
-void ClassDef::writeMemberList(OutputList &ol)
+void ClassDefImpl::writeMemberList(OutputList &ol)
{
static bool cOpt = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
//static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
@@ -2804,7 +3026,7 @@ void ClassDef::writeMemberList(OutputList &ol)
// add a reference to an example
-bool ClassDef::addExample(const char *anchor,const char *nameStr,
+bool ClassDefImpl::addExample(const char *anchor,const char *nameStr,
const char *file)
{
if (m_impl->exampleSDict==0)
@@ -2825,7 +3047,7 @@ bool ClassDef::addExample(const char *anchor,const char *nameStr,
}
// returns TRUE if this class is used in an example
-bool ClassDef::hasExamples() const
+bool ClassDefImpl::hasExamples() const
{
bool result=FALSE;
if (m_impl->exampleSDict)
@@ -2833,7 +3055,7 @@ bool ClassDef::hasExamples() const
return result;
}
-void ClassDef::addTypeConstraint(const QCString &typeConstraint,const QCString &type)
+void ClassDefImpl::addTypeConstraint(const QCString &typeConstraint,const QCString &type)
{
//printf("addTypeContraint(%s,%s)\n",type.data(),typeConstraint.data());
static bool hideUndocRelation = Config_getBool(HIDE_UNDOC_RELATIONS);
@@ -2841,7 +3063,7 @@ void ClassDef::addTypeConstraint(const QCString &typeConstraint,const QCString &
ClassDef *cd = getResolvedClass(this,getFileDef(),typeConstraint);
if (cd==0 && !hideUndocRelation)
{
- cd = new ClassDef(getDefFileName(),getDefLine(),getDefColumn(),typeConstraint,ClassDef::Class);
+ cd = new ClassDefImpl(getDefFileName(),getDefLine(),getDefColumn(),typeConstraint,ClassDef::Class);
cd->setUsedOnly(TRUE);
cd->setLanguage(getLanguage());
Doxygen::hiddenClasses->append(typeConstraint,cd);
@@ -2868,7 +3090,7 @@ void ClassDef::addTypeConstraint(const QCString &typeConstraint,const QCString &
}
// Java Type Constrains: A<T extends C & I>
-void ClassDef::addTypeConstraints()
+void ClassDefImpl::addTypeConstraints()
{
if (m_impl->tempArgs)
{
@@ -2894,7 +3116,7 @@ void ClassDef::addTypeConstraints()
}
// C# Type Constraints: D<T> where T : C, I
-void ClassDef::setTypeConstraints(ArgumentList *al)
+void ClassDefImpl::setTypeConstraints(ArgumentList *al)
{
if (al==0) return;
if (!m_impl->typeConstraints) delete m_impl->typeConstraints;
@@ -2907,7 +3129,7 @@ void ClassDef::setTypeConstraints(ArgumentList *al)
}
}
-void ClassDef::setTemplateArguments(ArgumentList *al)
+void ClassDefImpl::setTemplateArguments(ArgumentList *al)
{
if (al==0) return;
if (m_impl->tempArgs) delete m_impl->tempArgs; // delete old list if needed
@@ -2924,7 +3146,7 @@ void ClassDef::setTemplateArguments(ArgumentList *al)
/*! Returns \c TRUE iff this class or a class inheriting from this class
* is \e not defined in an external tag file.
*/
-bool ClassDef::hasNonReferenceSuperClass() const
+bool ClassDefImpl::hasNonReferenceSuperClass() const
{
bool found=!isReference() && isLinkableInProject() && !isHidden();
if (found)
@@ -2961,7 +3183,7 @@ bool ClassDef::hasNonReferenceSuperClass() const
/*! called from MemberDef::writeDeclaration() to (recursively) write the
* definition of an anonymous struct, union or class.
*/
-void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
+void ClassDefImpl::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
ClassDef *inheritedFrom,const char *inheritId)
{
//printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup);
@@ -3011,7 +3233,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
}
/*! a link to this class is possible within this project */
-bool ClassDef::isLinkableInProject() const
+bool ClassDefImpl::isLinkableInProject() const
{
static bool extractLocal = Config_getBool(EXTRACT_LOCAL_CLASSES);
static bool extractStatic = Config_getBool(EXTRACT_STATIC);
@@ -3033,7 +3255,7 @@ bool ClassDef::isLinkableInProject() const
}
}
-bool ClassDef::isLinkable() const
+bool ClassDefImpl::isLinkable() const
{
if (m_impl->templateMaster)
{
@@ -3047,7 +3269,7 @@ bool ClassDef::isLinkable() const
/*! the class is visible in a class diagram, or class hierarchy */
-bool ClassDef::isVisibleInHierarchy() const
+bool ClassDefImpl::isVisibleInHierarchy() const
{
static bool allExternals = Config_getBool(ALLEXTERNALS);
static bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
@@ -3071,9 +3293,9 @@ bool ClassDef::isVisibleInHierarchy() const
(!m_impl->isStatic || extractStatic);
}
-bool ClassDef::hasDocumentation() const
+bool ClassDefImpl::hasDocumentation() const
{
- return Definition::hasDocumentation();
+ return DefinitionImpl::hasDocumentation();
}
//----------------------------------------------------------------------
@@ -3081,7 +3303,7 @@ bool ClassDef::hasDocumentation() const
// returns TRUE iff class definition `bcd' represents an (in)direct base
// class of class definition `cd'.
-bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level) const
+bool ClassDefImpl::isBaseClass(const ClassDef *bcd, bool followInstances,int level) const
{
bool found=FALSE;
//printf("isBaseClass(cd=%s) looking for %s\n",name().data(),bcd->name().data());
@@ -3111,7 +3333,7 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level) const
//----------------------------------------------------------------------
-bool ClassDef::isSubClass(ClassDef *cd,int level) const
+bool ClassDefImpl::isSubClass(ClassDef *cd,int level) const
{
bool found=FALSE;
if (level>256)
@@ -3148,7 +3370,7 @@ static bool isStandardFunc(MemberDef *md)
* with that of this class. Must only be called for classes without
* subclasses!
*/
-void ClassDef::mergeMembers()
+void ClassDefImpl::mergeMembers()
{
if (m_impl->membersMerged) return;
@@ -3399,7 +3621,7 @@ void ClassDef::mergeMembers()
/*! Merges the members of a Objective-C category into this class.
*/
-void ClassDef::mergeCategory(ClassDef *category)
+void ClassDefImpl::mergeCategory(ClassDef *category)
{
static bool extractLocalMethods = Config_getBool(EXTRACT_LOCAL_METHODS);
bool makePrivate = category->isLocal();
@@ -3537,7 +3759,7 @@ void ClassDef::mergeCategory(ClassDef *category)
//----------------------------------------------------------------------------
-void ClassDef::addUsedClass(ClassDef *cd,const char *accessName,
+void ClassDefImpl::addUsedClass(ClassDef *cd,const char *accessName,
Protection prot)
{
static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
@@ -3571,7 +3793,7 @@ void ClassDef::addUsedClass(ClassDef *cd,const char *accessName,
ucd->addAccessor(acc);
}
-void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
+void ClassDefImpl::addUsedByClass(ClassDef *cd,const char *accessName,
Protection prot)
{
static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
@@ -3612,7 +3834,7 @@ void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
* Must be called before mergeMembers() is called!
*/
-void ClassDef::determineImplUsageRelation()
+void ClassDefImpl::determineImplUsageRelation()
{
MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoSDict);
MemberNameInfo *mni;
@@ -3726,7 +3948,7 @@ void ClassDef::determineImplUsageRelation()
// I have disabled this code because the graphs it renders quickly become
// too large to be of practical use.
-void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
+void ClassDefImpl::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
{
QCString type = typeStr;
static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
@@ -3757,7 +3979,7 @@ void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
}
}
-void ClassDef::determineIntfUsageRelation()
+void ClassDefImpl::determineIntfUsageRelation()
{
MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoList);
MemberNameInfo *mni;
@@ -3803,7 +4025,7 @@ void ClassDef::determineIntfUsageRelation()
}
#endif
-QCString ClassDef::compoundTypeString() const
+QCString ClassDefImpl::compoundTypeString() const
{
if (getLanguage()==SrcLangExt_Fortran)
{
@@ -3837,7 +4059,7 @@ QCString ClassDef::compoundTypeString() const
}
}
-QCString ClassDef::getOutputFileBase() const
+QCString ClassDefImpl::getOutputFileBase() const
{
static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
@@ -3874,12 +4096,12 @@ QCString ClassDef::getOutputFileBase() const
return m_impl->fileName;
}
-QCString ClassDef::getInstanceOutputFileBase() const
+QCString ClassDefImpl::getInstanceOutputFileBase() const
{
return m_impl->fileName;
}
-QCString ClassDef::getSourceFileBase() const
+QCString ClassDefImpl::getSourceFileBase() const
{
if (m_impl->templateMaster)
{
@@ -3887,14 +4109,14 @@ QCString ClassDef::getSourceFileBase() const
}
else
{
- return Definition::getSourceFileBase();
+ return DefinitionImpl::getSourceFileBase();
}
}
-void ClassDef::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
+void ClassDefImpl::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
{
gd->addClass(this);
- //printf("ClassDef::setGroupDefForAllMembers(%s)\n",gd->name().data());
+ //printf("ClassDefImpl::setGroupDefForAllMembers(%s)\n",gd->name().data());
if (m_impl->allMemberNameInfoSDict==0) return;
MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoSDict);
MemberNameInfo *mni;
@@ -3913,7 +4135,7 @@ void ClassDef::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,co
}
}
-void ClassDef::addInnerCompound(Definition *d)
+void ClassDefImpl::addInnerCompound(Definition *d)
{
//printf("**** %s::addInnerCompound(%s)\n",name().data(),d->name().data());
if (d->definitionType()==Definition::TypeClass) // only classes can be
@@ -3923,11 +4145,11 @@ void ClassDef::addInnerCompound(Definition *d)
{
m_impl->innerClasses = new ClassSDict(17);
}
- m_impl->innerClasses->inSort(d->localName(),(ClassDef *)d);
+ m_impl->innerClasses->inSort(d->localName(),dynamic_cast<ClassDef *>(d));
}
}
-Definition *ClassDef::findInnerCompound(const char *name) const
+Definition *ClassDefImpl::findInnerCompound(const char *name) const
{
Definition *result=0;
if (name==0) return 0;
@@ -3938,7 +4160,7 @@ Definition *ClassDef::findInnerCompound(const char *name) const
return result;
}
-//void ClassDef::initTemplateMapping()
+//void ClassDefImpl::initTemplateMapping()
//{
// m_impl->templateMapping->clear();
// ArgumentList *al = templateArguments();
@@ -3952,9 +4174,9 @@ Definition *ClassDef::findInnerCompound(const char *name) const
// }
// }
//}
-//void ClassDef::setTemplateArgumentMapping(const char *formal,const char *actual)
+//void ClassDefImpl::setTemplateArgumentMapping(const char *formal,const char *actual)
//{
-// //printf("ClassDef::setTemplateArgumentMapping(%s,%s)\n",formal,actual);
+// //printf("ClassDefImpl::setTemplateArgumentMapping(%s,%s)\n",formal,actual);
// if (m_impl->templateMapping && formal)
// {
// if (m_impl->templateMapping->find(formal))
@@ -3965,7 +4187,7 @@ Definition *ClassDef::findInnerCompound(const char *name) const
// }
//}
//
-//QCString ClassDef::getTemplateArgumentMapping(const char *formal) const
+//QCString ClassDefImpl::getTemplateArgumentMapping(const char *formal) const
//{
// if (m_impl->templateMapping && formal)
// {
@@ -3978,7 +4200,7 @@ Definition *ClassDef::findInnerCompound(const char *name) const
// return "";
//}
-ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
+ClassDef *ClassDefImpl::insertTemplateInstance(const QCString &fileName,
int startLine, int startColumn, const QCString &templSpec,bool &freshInstance)
{
freshInstance = FALSE;
@@ -3991,7 +4213,7 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
{
Debug::print(Debug::Classes,0," New template instance class `%s'`%s'\n",qPrint(name()),qPrint(templSpec));
QCString tcname = removeRedundantWhiteSpace(localName()+templSpec);
- templateClass = new ClassDef(
+ templateClass = new ClassDefImpl(
fileName,startLine,startColumn,tcname,ClassDef::Class);
templateClass->setTemplateMaster(this);
templateClass->setOuterScope(getOuterScope());
@@ -4002,7 +4224,7 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
return templateClass;
}
-ClassDef *ClassDef::getVariableInstance(const char *templSpec)
+ClassDef *ClassDefImpl::getVariableInstance(const char *templSpec)
{
if (m_impl->variableInstances==0)
{
@@ -4014,7 +4236,7 @@ ClassDef *ClassDef::getVariableInstance(const char *templSpec)
{
Debug::print(Debug::Classes,0," New template variable instance class `%s'`%s'\n",qPrint(name()),qPrint(templSpec));
QCString tcname = removeRedundantWhiteSpace(name()+templSpec);
- templateClass = new ClassDef("<code>",1,1,tcname,
+ templateClass = new ClassDefImpl("<code>",1,1,tcname,
ClassDef::Class,0,0,FALSE);
templateClass->addMembersToTemplateInstance( this, templSpec );
templateClass->setTemplateMaster(this);
@@ -4023,7 +4245,7 @@ ClassDef *ClassDef::getVariableInstance(const char *templSpec)
return templateClass;
}
-void ClassDef::setTemplateBaseClassNames(QDict<int> *templateNames)
+void ClassDefImpl::setTemplateBaseClassNames(QDict<int> *templateNames)
{
if (templateNames==0) return;
if (m_impl->templBaseClassNames==0)
@@ -4042,12 +4264,12 @@ void ClassDef::setTemplateBaseClassNames(QDict<int> *templateNames)
}
}
-QDict<int> *ClassDef::getTemplateBaseClassNames() const
+QDict<int> *ClassDefImpl::getTemplateBaseClassNames() const
{
return m_impl->templBaseClassNames;
}
-void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
+void ClassDefImpl::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
{
//printf("%s::addMembersToTemplateInstance(%s,%s)\n",name().data(),cd->name().data(),templSpec);
if (cd->memberNameInfoSDict()==0) return;
@@ -4090,7 +4312,7 @@ void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
}
}
-QCString ClassDef::getReference() const
+QCString ClassDefImpl::getReference() const
{
if (m_impl->templateMaster)
{
@@ -4098,11 +4320,11 @@ QCString ClassDef::getReference() const
}
else
{
- return Definition::getReference();
+ return DefinitionImpl::getReference();
}
}
-bool ClassDef::isReference() const
+bool ClassDefImpl::isReference() const
{
if (m_impl->templateMaster)
{
@@ -4110,18 +4332,18 @@ bool ClassDef::isReference() const
}
else
{
- return Definition::isReference();
+ return DefinitionImpl::isReference();
}
}
-void ClassDef::getTemplateParameterLists(QList<ArgumentList> &lists) const
+void ClassDefImpl::getTemplateParameterLists(QList<ArgumentList> &lists) const
{
Definition *d=getOuterScope();
if (d)
{
if (d->definitionType()==Definition::TypeClass)
{
- ClassDef *cd=(ClassDef *)d;
+ ClassDef *cd=dynamic_cast<ClassDef *>(d);
cd->getTemplateParameterLists(lists);
}
}
@@ -4131,7 +4353,7 @@ void ClassDef::getTemplateParameterLists(QList<ArgumentList> &lists) const
}
}
-QCString ClassDef::qualifiedNameWithTemplateParameters(
+QCString ClassDefImpl::qualifiedNameWithTemplateParameters(
QList<ArgumentList> *actualParams,int *actualParamIndex) const
{
//static bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
@@ -4143,7 +4365,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
{
if (d->definitionType()==Definition::TypeClass)
{
- ClassDef *cd=(ClassDef *)d;
+ ClassDef *cd=dynamic_cast<ClassDef *>(d);
scName = cd->qualifiedNameWithTemplateParameters(actualParams,actualParamIndex);
}
else if (!hideScopeNames)
@@ -4190,7 +4412,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
return scName;
}
-QCString ClassDef::className() const
+QCString ClassDefImpl::className() const
{
if (m_impl->className.isEmpty())
{
@@ -4202,12 +4424,12 @@ QCString ClassDef::className() const
}
};
-void ClassDef::setClassName(const char *name)
+void ClassDefImpl::setClassName(const char *name)
{
m_impl->className = name;
}
-void ClassDef::addListReferences()
+void ClassDefImpl::addListReferences()
{
SrcLangExt lang = getLanguage();
if (!isLinkableInProject()) return;
@@ -4244,7 +4466,7 @@ void ClassDef::addListReferences()
}
}
-MemberDef *ClassDef::getMemberByName(const QCString &name) const
+MemberDef *ClassDefImpl::getMemberByName(const QCString &name) const
{
MemberDef *xmd = 0;
if (m_impl->allMemberNameInfoSDict)
@@ -4274,12 +4496,12 @@ MemberDef *ClassDef::getMemberByName(const QCString &name) const
return xmd;
}
-bool ClassDef::isAccessibleMember(MemberDef *md) const
+bool ClassDefImpl::isAccessibleMember(const MemberDef *md) const
{
return md->getClassDef() && isBaseClass(md->getClassDef(),TRUE);
}
-MemberList *ClassDef::createMemberList(MemberListType lt)
+MemberList *ClassDefImpl::createMemberList(MemberListType lt)
{
m_impl->memberLists.setAutoDelete(TRUE);
QListIterator<MemberList> mli(m_impl->memberLists);
@@ -4297,7 +4519,7 @@ MemberList *ClassDef::createMemberList(MemberListType lt)
return ml;
}
-MemberList *ClassDef::getMemberList(MemberListType lt) const
+MemberList *ClassDefImpl::getMemberList(MemberListType lt) const
{
QListIterator<MemberList> mli(m_impl->memberLists);
MemberList *ml;
@@ -4311,7 +4533,7 @@ MemberList *ClassDef::getMemberList(MemberListType lt) const
return 0;
}
-void ClassDef::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief)
+void ClassDefImpl::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
@@ -4323,7 +4545,7 @@ void ClassDef::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief)
if ((ml->listType()&MemberListType_detailedLists)==0) md->setSectionList(this,ml);
}
-void ClassDef::sortMemberLists()
+void ClassDefImpl::sortMemberLists()
{
QListIterator<MemberList> mli(m_impl->memberLists);
MemberList *ml;
@@ -4337,7 +4559,7 @@ void ClassDef::sortMemberLists()
}
}
-int ClassDef::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
+int ClassDefImpl::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses)
{
//printf("%s: countMemberDeclarations for %d and %d\n",name().data(),lt,lt2);
@@ -4380,7 +4602,7 @@ int ClassDef::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
}
-int ClassDef::countInheritedDecMembers(MemberListType lt,
+int ClassDefImpl::countInheritedDecMembers(MemberListType lt,
ClassDef *inheritedFrom,bool invert,bool showAlways,
QPtrDict<void> *visitedClasses)
{
@@ -4419,7 +4641,7 @@ int ClassDef::countInheritedDecMembers(MemberListType lt,
return inhCount;
}
-void ClassDef::getTitleForMemberListType(MemberListType type,
+void ClassDefImpl::getTitleForMemberListType(MemberListType type,
QCString &title,QCString &subtitle)
{
SrcLangExt lang = getLanguage();
@@ -4443,7 +4665,7 @@ void ClassDef::getTitleForMemberListType(MemberListType type,
subtitle="";
}
-int ClassDef::countAdditionalInheritedMembers()
+int ClassDefImpl::countAdditionalInheritedMembers()
{
int totalCount=0;
QListIterator<LayoutDocEntry> eli(
@@ -4469,7 +4691,7 @@ int ClassDef::countAdditionalInheritedMembers()
return totalCount;
}
-void ClassDef::writeAdditionalInheritedMembers(OutputList &ol)
+void ClassDefImpl::writeAdditionalInheritedMembers(OutputList &ol)
{
//printf("**** writeAdditionalInheritedMembers()\n");
QListIterator<LayoutDocEntry> eli(
@@ -4489,7 +4711,7 @@ void ClassDef::writeAdditionalInheritedMembers(OutputList &ol)
}
}
-int ClassDef::countMembersIncludingGrouped(MemberListType lt,
+int ClassDefImpl::countMembersIncludingGrouped(MemberListType lt,
ClassDef *inheritedFrom,bool additional)
{
int count=0;
@@ -4518,7 +4740,7 @@ int ClassDef::countMembersIncludingGrouped(MemberListType lt,
return count;
}
-void ClassDef::writeInheritedMemberDeclarations(OutputList &ol,
+void ClassDefImpl::writeInheritedMemberDeclarations(OutputList &ol,
MemberListType lt,int lt2,const QCString &title,
ClassDef *inheritedFrom,bool invert,bool showAlways,
QPtrDict<void> *visitedClasses)
@@ -4567,11 +4789,11 @@ void ClassDef::writeInheritedMemberDeclarations(OutputList &ol,
ol.popGeneratorState();
}
-void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
+void ClassDefImpl::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
const char *subTitle,bool showInline,ClassDef *inheritedFrom,int lt2,
bool invert,bool showAlways,QPtrDict<void> *visitedClasses)
{
- //printf("%s: ClassDef::writeMemberDeclarations lt=%d lt2=%d\n",name().data(),lt,lt2);
+ //printf("%s: ClassDefImpl::writeMemberDeclarations lt=%d lt2=%d\n",name().data(),lt,lt2);
MemberList * ml = getMemberList(lt);
MemberList * ml2 = getMemberList((MemberListType)lt2);
if (getLanguage()==SrcLangExt_VHDL) // use specific declarations function
@@ -4615,7 +4837,7 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
}
}
-void ClassDef::addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
+void ClassDefImpl::addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
ClassDef *inheritedFrom,const QCString &inheritId)
{
//printf("** %s::addGroupedInheritedMembers(%p) inheritId=%s\n",name().data(),m_impl->memberGroupSDict,inheritId.data());
@@ -4633,25 +4855,25 @@ void ClassDef::addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
}
}
-void ClassDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title,bool showInline)
+void ClassDefImpl::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title,bool showInline)
{
- //printf("%s: ClassDef::writeMemberDocumentation()\n",name().data());
+ //printf("%s: ClassDefImpl::writeMemberDocumentation()\n",name().data());
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDocumentation(ol,displayName(),this,title,FALSE,showInline);
}
-void ClassDef::writeSimpleMemberDocumentation(OutputList &ol,MemberListType lt)
+void ClassDefImpl::writeSimpleMemberDocumentation(OutputList &ol,MemberListType lt)
{
- //printf("%s: ClassDef::writeSimpleMemberDocumentation()\n",name().data());
+ //printf("%s: ClassDefImpl::writeSimpleMemberDocumentation()\n",name().data());
MemberList * ml = getMemberList(lt);
if (ml) ml->writeSimpleDocumentation(ol,this);
}
-void ClassDef::writePlainMemberDeclaration(OutputList &ol,
+void ClassDefImpl::writePlainMemberDeclaration(OutputList &ol,
MemberListType lt,bool inGroup,
ClassDef *inheritedFrom,const char *inheritId)
{
- //printf("%s: ClassDef::writePlainMemberDeclaration()\n",name().data());
+ //printf("%s: ClassDefImpl::writePlainMemberDeclaration()\n",name().data());
MemberList * ml = getMemberList(lt);
if (ml)
{
@@ -4660,222 +4882,227 @@ void ClassDef::writePlainMemberDeclaration(OutputList &ol,
}
}
-bool ClassDef::isLocal() const
+bool ClassDefImpl::isLocal() const
{
return m_impl->isLocal;
}
-ClassSDict *ClassDef::getClassSDict() const
+ClassSDict *ClassDefImpl::getClassSDict() const
{
return m_impl->innerClasses;
}
-ClassDef::CompoundType ClassDef::compoundType() const
+ClassDefImpl::CompoundType ClassDefImpl::compoundType() const
{
return m_impl->compType;
}
-BaseClassList *ClassDef::baseClasses() const
+BaseClassList *ClassDefImpl::baseClasses() const
{
return m_impl->inherits;
}
-BaseClassList *ClassDef::subClasses() const
+BaseClassList *ClassDefImpl::subClasses() const
{
return m_impl->inheritedBy;
}
-MemberNameInfoSDict *ClassDef::memberNameInfoSDict() const
+MemberNameInfoSDict *ClassDefImpl::memberNameInfoSDict() const
{
return m_impl->allMemberNameInfoSDict;
}
-Protection ClassDef::protection() const
+Protection ClassDefImpl::protection() const
{
return m_impl->prot;
}
-ArgumentList *ClassDef::templateArguments() const
+ArgumentList *ClassDefImpl::templateArguments() const
{
return m_impl->tempArgs;
}
-NamespaceDef *ClassDef::getNamespaceDef() const
+NamespaceDef *ClassDefImpl::getNamespaceDef() const
{
return m_impl->nspace;
}
-FileDef *ClassDef::getFileDef() const
+FileDef *ClassDefImpl::getFileDef() const
{
return m_impl->fileDef;
}
-QDict<ClassDef> *ClassDef::getTemplateInstances() const
+QDict<ClassDef> *ClassDefImpl::getTemplateInstances() const
{
return m_impl->templateInstances;
}
-ClassDef *ClassDef::templateMaster() const
+ClassDef *ClassDefImpl::templateMaster() const
{
return m_impl->templateMaster;
}
-bool ClassDef::isTemplate() const
+bool ClassDefImpl::isTemplate() const
{
return m_impl->tempArgs!=0;
}
-IncludeInfo *ClassDef::includeInfo() const
+IncludeInfo *ClassDefImpl::includeInfo() const
{
return m_impl->incInfo;
}
-UsesClassDict *ClassDef::usedImplementationClasses() const
+UsesClassDict *ClassDefImpl::usedImplementationClasses() const
{
return m_impl->usesImplClassDict;
}
-UsesClassDict *ClassDef::usedByImplementationClasses() const
+UsesClassDict *ClassDefImpl::usedByImplementationClasses() const
{
return m_impl->usedByImplClassDict;
}
-UsesClassDict *ClassDef::usedInterfaceClasses() const
+UsesClassDict *ClassDefImpl::usedInterfaceClasses() const
{
return m_impl->usesIntfClassDict;
}
-ConstraintClassDict *ClassDef::templateTypeConstraints() const
+ConstraintClassDict *ClassDefImpl::templateTypeConstraints() const
{
return m_impl->constraintClassDict;
}
-bool ClassDef::isTemplateArgument() const
+bool ClassDefImpl::isTemplateArgument() const
{
return m_impl->isTemplArg;
}
-bool ClassDef::isAbstract() const
+bool ClassDefImpl::isAbstract() const
{
return m_impl->isAbstract || (m_impl->spec&Entry::Abstract);
}
-bool ClassDef::isFinal() const
+bool ClassDefImpl::isFinal() const
{
return m_impl->spec&Entry::Final;
}
-bool ClassDef::isSealed() const
+bool ClassDefImpl::isSealed() const
{
return m_impl->spec&Entry::Sealed;
}
-bool ClassDef::isPublished() const
+bool ClassDefImpl::isPublished() const
{
return m_impl->spec&Entry::Published;
}
-bool ClassDef::isForwardDeclared() const
+bool ClassDefImpl::isForwardDeclared() const
{
return m_impl->spec&Entry::ForwardDecl;
}
-bool ClassDef::isObjectiveC() const
+bool ClassDefImpl::isInterface() const
+{
+ return m_impl->spec&Entry::Interface;
+}
+
+bool ClassDefImpl::isObjectiveC() const
{
return getLanguage()==SrcLangExt_ObjC;
}
-bool ClassDef::isFortran() const
+bool ClassDefImpl::isFortran() const
{
return getLanguage()==SrcLangExt_Fortran;
}
-bool ClassDef::isCSharp() const
+bool ClassDefImpl::isCSharp() const
{
return getLanguage()==SrcLangExt_CSharp;
}
-ClassDef *ClassDef::categoryOf() const
+ClassDef *ClassDefImpl::categoryOf() const
{
return m_impl->categoryOf;
}
-const QList<MemberList> &ClassDef::getMemberLists() const
+const QList<MemberList> &ClassDefImpl::getMemberLists() const
{
return m_impl->memberLists;
}
-MemberGroupSDict *ClassDef::getMemberGroupSDict() const
+MemberGroupSDict *ClassDefImpl::getMemberGroupSDict() const
{
return m_impl->memberGroupSDict;
}
-void ClassDef::setNamespace(NamespaceDef *nd)
+void ClassDefImpl::setNamespace(NamespaceDef *nd)
{
m_impl->nspace = nd;
}
-void ClassDef::setFileDef(FileDef *fd)
+void ClassDefImpl::setFileDef(FileDef *fd)
{
m_impl->fileDef=fd;
}
-void ClassDef::setSubGrouping(bool enabled)
+void ClassDefImpl::setSubGrouping(bool enabled)
{
m_impl->subGrouping = enabled;
}
-void ClassDef::setProtection(Protection p)
+void ClassDefImpl::setProtection(Protection p)
{
m_impl->prot=p;
}
-void ClassDef::setIsStatic(bool b)
+void ClassDefImpl::setIsStatic(bool b)
{
m_impl->isStatic=b;
}
-void ClassDef::setCompoundType(CompoundType t)
+void ClassDefImpl::setCompoundType(CompoundType t)
{
m_impl->compType = t;
}
-void ClassDef::setTemplateMaster(ClassDef *tm)
+void ClassDefImpl::setTemplateMaster(ClassDef *tm)
{
m_impl->templateMaster=tm;
}
-void ClassDef::makeTemplateArgument(bool b)
+void ClassDefImpl::makeTemplateArgument(bool b)
{
m_impl->isTemplArg = b;
}
-void ClassDef::setCategoryOf(ClassDef *cd)
+void ClassDefImpl::setCategoryOf(ClassDef *cd)
{
m_impl->categoryOf = cd;
}
-void ClassDef::setUsedOnly(bool b)
+void ClassDefImpl::setUsedOnly(bool b)
{
m_impl->usedOnly = b;
}
-bool ClassDef::isUsedOnly() const
+bool ClassDefImpl::isUsedOnly() const
{
return m_impl->usedOnly;
}
-bool ClassDef::isSimple() const
+bool ClassDefImpl::isSimple() const
{
return m_impl->isSimple;
}
-MemberDef *ClassDef::isSmartPointer() const
+MemberDef *ClassDefImpl::isSmartPointer() const
{
return m_impl->arrowOperator;
}
-void ClassDef::reclassifyMember(MemberDef *md,MemberType t)
+void ClassDefImpl::reclassifyMember(MemberDef *md,MemberType t)
{
md->setMemberType(t);
QListIterator<MemberList> mli(m_impl->memberLists);
@@ -4887,7 +5114,7 @@ void ClassDef::reclassifyMember(MemberDef *md,MemberType t)
insertMember(md);
}
-QCString ClassDef::anchor() const
+QCString ClassDefImpl::anchor() const
{
QCString anc;
if (isEmbeddedInOuterScope() && !Doxygen::generatingXmlOutput)
@@ -4905,7 +5132,7 @@ QCString ClassDef::anchor() const
return anc;
}
-bool ClassDef::isEmbeddedInOuterScope() const
+bool ClassDefImpl::isEmbeddedInOuterScope() const
{
static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
@@ -4935,12 +5162,12 @@ bool ClassDef::isEmbeddedInOuterScope() const
return b1 || b2; // either reason will do
}
-const ClassList *ClassDef::taggedInnerClasses() const
+const ClassList *ClassDefImpl::taggedInnerClasses() const
{
return m_impl->taggedInnerClasses;
}
-void ClassDef::addTaggedInnerClass(ClassDef *cd)
+void ClassDefImpl::addTaggedInnerClass(ClassDef *cd)
{
if (m_impl->taggedInnerClasses==0)
{
@@ -4949,17 +5176,17 @@ void ClassDef::addTaggedInnerClass(ClassDef *cd)
m_impl->taggedInnerClasses->append(cd);
}
-ClassDef *ClassDef::tagLessReference() const
+ClassDef *ClassDefImpl::tagLessReference() const
{
return m_impl->tagLessRef;
}
-void ClassDef::setTagLessReference(ClassDef *cd)
+void ClassDefImpl::setTagLessReference(ClassDef *cd)
{
m_impl->tagLessRef = cd;
}
-void ClassDef::removeMemberFromLists(MemberDef *md)
+void ClassDefImpl::removeMemberFromLists(MemberDef *md)
{
QListIterator<MemberList> mli(m_impl->memberLists);
MemberList *ml;
@@ -4969,22 +5196,22 @@ void ClassDef::removeMemberFromLists(MemberDef *md)
}
}
-bool ClassDef::isJavaEnum() const
+bool ClassDefImpl::isJavaEnum() const
{
return m_impl->isJavaEnum;
}
-bool ClassDef::isGeneric() const
+bool ClassDefImpl::isGeneric() const
{
return m_impl->isGeneric;
}
-void ClassDef::setClassSpecifier(uint64 spec)
+void ClassDefImpl::setClassSpecifier(uint64 spec)
{
m_impl->spec = spec;
}
-bool ClassDef::isExtension() const
+bool ClassDefImpl::isExtension() const
{
QCString n = name();
int si = n.find('(');
@@ -4993,58 +5220,58 @@ bool ClassDef::isExtension() const
return b;
}
-const ClassSDict *ClassDef::innerClasses() const
+const ClassSDict *ClassDefImpl::innerClasses() const
{
return m_impl->innerClasses;
}
-const FileList &ClassDef::usedFiles() const
+const FileList &ClassDefImpl::usedFiles() const
{
return m_impl->files;
}
-const ArgumentList *ClassDef::typeConstraints() const
+const ArgumentList *ClassDefImpl::typeConstraints() const
{
return m_impl->typeConstraints;
}
-const ExampleSDict *ClassDef::exampleList() const
+const ExampleSDict *ClassDefImpl::exampleList() const
{
return m_impl->exampleSDict;
}
-bool ClassDef::subGrouping() const
+bool ClassDefImpl::subGrouping() const
{
return m_impl->subGrouping;
}
-bool ClassDef::isSliceLocal() const
+bool ClassDefImpl::isSliceLocal() const
{
return m_impl->spec&Entry::Local;
}
-void ClassDef::setName(const char *name)
+void ClassDefImpl::setName(const char *name)
{
m_impl->isAnonymous = QCString(name).find('@')!=-1;
- Definition::setName(name);
+ DefinitionImpl::setName(name);
}
-void ClassDef::setMetaData(const char *md)
+void ClassDefImpl::setMetaData(const char *md)
{
m_impl->metaData = md;
}
-bool ClassDef::isAnonymous() const
+bool ClassDefImpl::isAnonymous() const
{
return m_impl->isAnonymous;
}
-QCString ClassDef::collaborationGraphFileName() const
+QCString ClassDefImpl::collaborationGraphFileName() const
{
return m_impl->collabFileName;
}
-QCString ClassDef::inheritanceGraphFileName() const
+QCString ClassDefImpl::inheritanceGraphFileName() const
{
return m_impl->inheritFileName;
}
diff --git a/src/classdef.h b/src/classdef.h
index 1360612..58a3dee 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -50,13 +50,12 @@ class ClassDefImpl;
class ArgumentList;
class FTextStream;
-/** A class representing of a compound symbol.
+/** A abstract class representing of a compound symbol.
*
* A compound can be a class, struct, union, interface, service, singleton,
* or exception.
- * \note This class should be renamed to CompoundDef
*/
-class ClassDef : public Definition
+class ClassDef : virtual public Definition
{
public:
/** The various compound types */
@@ -71,398 +70,341 @@ class ClassDef : public Definition
Singleton, //=Entry::CLASS_SEC
};
- /** Creates a new compound definition.
- * \param fileName full path and file name in which this compound was
- * found.
- * \param startLine line number where the definition of this compound
- * starts.
- * \param startColumn column number where the definition of this compound
- * starts.
- * \param name the name of this compound (including scope)
- * \param ct the kind of Compound
- * \param ref the tag file from which this compound is extracted
- * or 0 if the compound doesn't come from a tag file
- * \param fName the file name as found in the tag file.
- * This overwrites the file that doxygen normally
- * generates based on the compound type & name.
- * \param isSymbol If TRUE this class name is added as a publicly
- * visible (and referencable) symbol.
- * \param isJavaEnum If TRUE this class is actually a Java enum.
- * I didn't add this to CompoundType to avoid having
- * to adapt all translators.
- */
- ClassDef(const char *fileName,int startLine,int startColumn,
- const char *name,CompoundType ct,
- const char *ref=0,const char *fName=0,
- bool isSymbol=TRUE,bool isJavaEnum=FALSE);
- /** Destroys a compound definition. */
- ~ClassDef();
+ virtual ~ClassDef() {}
//-----------------------------------------------------------------------------------
// --- getters
//-----------------------------------------------------------------------------------
/** Used for RTTI, this is a class */
- DefType definitionType() const { return TypeClass; }
+ virtual DefType definitionType() const = 0;
/** Returns the unique base name (without extension) of the class's file on disk */
- QCString getOutputFileBase() const;
- QCString getInstanceOutputFileBase() const;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString getInstanceOutputFileBase() const = 0;
/** Returns the base name for the source code file */
- QCString getSourceFileBase() const;
+ virtual QCString getSourceFileBase() const = 0;
/** If this class originated from a tagfile, this will return the tag file reference */
- QCString getReference() const;
+ virtual QCString getReference() const = 0;
/** Returns TRUE if this class is imported via a tag file */
- bool isReference() const;
+ virtual bool isReference() const = 0;
/** Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES */
- bool isLocal() const;
+ virtual bool isLocal() const = 0;
/** returns the classes nested into this class */
- ClassSDict *getClassSDict() const;
+ virtual ClassSDict *getClassSDict() const = 0;
/** returns TRUE if this class has documentation */
- bool hasDocumentation() const;
+ virtual bool hasDocumentation() const = 0;
/** returns TRUE if this class has a non-empty detailed description */
- bool hasDetailedDescription() const;
-
+ virtual bool hasDetailedDescription() const = 0;
+
/** returns the file name to use for the collaboration graph */
- QCString collaborationGraphFileName() const;
+ virtual QCString collaborationGraphFileName() const = 0;
/** returns the file name to use for the inheritance graph */
- QCString inheritanceGraphFileName() const;
+ virtual QCString inheritanceGraphFileName() const = 0;
/** Returns the name as it is appears in the documentation */
- QCString displayName(bool includeScope=TRUE) const;
+ virtual QCString displayName(bool includeScope=TRUE) const = 0;
/** Returns the type of compound this is, i.e. class/struct/union/.. */
- CompoundType compoundType() const;
+ virtual CompoundType compoundType() const = 0;
/** Returns the type of compound as a string */
- QCString compoundTypeString() const;
+ virtual QCString compoundTypeString() const = 0;
/** Returns the list of base classes from which this class directly
* inherits.
*/
- BaseClassList *baseClasses() const;
-
+ virtual BaseClassList *baseClasses() const = 0;
+
/** Returns the list of sub classes that directly derive from this class
*/
- BaseClassList *subClasses() const;
+ virtual BaseClassList *subClasses() const = 0;
- /** Returns a dictionary of all members. This includes any inherited
+ /** Returns a dictionary of all members. This includes any inherited
* members. Members are sorted alphabetically.
- */
- MemberNameInfoSDict *memberNameInfoSDict() const;
+ */
+ virtual MemberNameInfoSDict *memberNameInfoSDict() const = 0;
- /** Return the protection level (Public,Protected,Private) in which
+ /** Return the protection level (Public,Protected,Private) in which
* this compound was found.
*/
- Protection protection() const;
+ virtual Protection protection() const = 0;
/** returns TRUE iff a link is possible to this item within this project.
*/
- bool isLinkableInProject() const;
+ virtual bool isLinkableInProject() const = 0;
- /** return TRUE iff a link to this class is possible (either within
+ /** return TRUE iff a link to this class is possible (either within
* this project, or as a cross-reference to another project).
*/
- bool isLinkable() const;
+ virtual bool isLinkable() const = 0;
/** the class is visible in a class diagram, or class hierarchy */
- bool isVisibleInHierarchy() const;
-
+ virtual bool isVisibleInHierarchy() const = 0;
+
/** show this class in the declaration section of its parent? */
- bool visibleInParentsDeclList() const;
+ virtual bool visibleInParentsDeclList() const = 0;
/** Returns the template arguments of this class
* Will return 0 if not applicable.
*/
- ArgumentList *templateArguments() const;
+ virtual ArgumentList *templateArguments() const = 0;
/** Returns the namespace this compound is in, or 0 if it has a global
* scope.
*/
- NamespaceDef *getNamespaceDef() const;
+ virtual NamespaceDef *getNamespaceDef() const = 0;
/** Returns the file in which this compound's definition can be found.
* Should not return 0 (but it might be a good idea to check anyway).
*/
- FileDef *getFileDef() const;
+ virtual FileDef *getFileDef() const = 0;
- /** Returns the Java package this class is in or 0 if not applicable.
- */
+ /** Returns the Java package this class is in or 0 if not applicable.
+ */
+
+ virtual MemberDef *getMemberByName(const QCString &) const = 0;
- MemberDef *getMemberByName(const QCString &) const;
-
/** Returns TRUE iff \a bcd is a direct or indirect base class of this
* class. This function will recursively traverse all branches of the
* inheritance tree.
*/
- bool isBaseClass(ClassDef *bcd,bool followInstances,int level=0) const;
+ virtual bool isBaseClass(const ClassDef *bcd,bool followInstances,int level=0) const = 0;
/** Returns TRUE iff \a bcd is a direct or indirect sub class of this
* class.
*/
- bool isSubClass(ClassDef *bcd,int level=0) const;
+ virtual bool isSubClass(ClassDef *bcd,int level=0) const = 0;
/** returns TRUE iff \a md is a member of this class or of the
- * the public/protected members of a base class
+ * the public/protected members of a base class
*/
- bool isAccessibleMember(MemberDef *md) const;
+ virtual bool isAccessibleMember(const MemberDef *md) const = 0;
/** Returns a sorted dictionary with all template instances found for
* this template class. Returns 0 if not a template or no instances.
*/
- QDict<ClassDef> *getTemplateInstances() const;
+ virtual QDict<ClassDef> *getTemplateInstances() const = 0;
/** Returns the template master of which this class is an instance.
* Returns 0 if not applicable.
*/
- ClassDef *templateMaster() const;
+ virtual ClassDef *templateMaster() const = 0;
/** Returns TRUE if this class is a template */
- bool isTemplate() const;
+ virtual bool isTemplate() const = 0;
- IncludeInfo *includeInfo() const;
-
- UsesClassDict *usedImplementationClasses() const;
+ virtual IncludeInfo *includeInfo() const = 0;
- UsesClassDict *usedByImplementationClasses() const;
+ virtual UsesClassDict *usedImplementationClasses() const = 0;
- UsesClassDict *usedInterfaceClasses() const;
+ virtual UsesClassDict *usedByImplementationClasses() const = 0;
- ConstraintClassDict *templateTypeConstraints() const;
+ virtual UsesClassDict *usedInterfaceClasses() const = 0;
- bool isTemplateArgument() const;
+ virtual ConstraintClassDict *templateTypeConstraints() const = 0;
+
+ virtual bool isTemplateArgument() const = 0;
/** Returns the definition of a nested compound if
* available, or 0 otherwise.
* @param name The name of the nested compound
*/
- virtual Definition *findInnerCompound(const char *name) const;
+ virtual Definition *findInnerCompound(const char *name) const = 0;
/** Returns the template parameter lists that form the template
* declaration of this class.
- *
- * Example: <code>template<class T> class TC {};</code>
+ *
+ * Example: <code>template<class T> class TC {} = 0;</code>
* will return a list with one ArgumentList containing one argument
* with type="class" and name="T".
*/
- void getTemplateParameterLists(QList<ArgumentList> &lists) const;
+ virtual void getTemplateParameterLists(QList<ArgumentList> &lists) const = 0;
- QCString qualifiedNameWithTemplateParameters(
- QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const;
+ virtual QCString qualifiedNameWithTemplateParameters(
+ QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const = 0;
/** Returns TRUE if there is at least one pure virtual member in this
* class.
*/
- bool isAbstract() const;
+ virtual bool isAbstract() const = 0;
/** Returns TRUE if this class is implemented in Objective-C */
- bool isObjectiveC() const;
+ virtual bool isObjectiveC() const = 0;
/** Returns TRUE if this class is implemented in Fortran */
- bool isFortran() const;
+ virtual bool isFortran() const = 0;
/** Returns TRUE if this class is implemented in C# */
- bool isCSharp() const;
+ virtual bool isCSharp() const = 0;
/** Returns TRUE if this class is marked as final */
- bool isFinal() const;
+ virtual bool isFinal() const = 0;
/** Returns TRUE if this class is marked as sealed */
- bool isSealed() const;
+ virtual bool isSealed() const = 0;
/** Returns TRUE if this class is marked as published */
- bool isPublished() const;
+ virtual bool isPublished() const = 0;
/** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */
- bool isExtension() const;
+ virtual bool isExtension() const = 0;
/** Returns TRUE if this class represents a forward declaration of a template class */
- bool isForwardDeclared() const;
+ virtual bool isForwardDeclared() const = 0;
+
+ /** Returns TRUE if this class represents an interface */
+ virtual bool isInterface() const = 0;
/** Returns the class of which this is a category (Objective-C only) */
- ClassDef *categoryOf() const;
+ virtual ClassDef *categoryOf() const = 0;
/** Returns the name of the class including outer classes, but not
* including namespaces.
*/
- QCString className() const;
+ virtual QCString className() const = 0;
/** Returns the members in the list identified by \a lt */
- MemberList *getMemberList(MemberListType lt) const;
+ virtual MemberList *getMemberList(MemberListType lt) const = 0;
/** Returns the list containing the list of members sorted per type */
- const QList<MemberList> &getMemberLists() const;
+ virtual const QList<MemberList> &getMemberLists() const = 0;
/** Returns the member groups defined for this class */
- MemberGroupSDict *getMemberGroupSDict() const;
+ virtual MemberGroupSDict *getMemberGroupSDict() const = 0;
- QDict<int> *getTemplateBaseClassNames() const;
+ virtual QDict<int> *getTemplateBaseClassNames() const = 0;
- ClassDef *getVariableInstance(const char *templSpec);
+ virtual ClassDef *getVariableInstance(const char *templSpec) = 0;
- bool isUsedOnly() const;
+ virtual bool isUsedOnly() const = 0;
- QCString anchor() const;
- bool isEmbeddedInOuterScope() const;
+ virtual QCString anchor() const = 0;
+ virtual bool isEmbeddedInOuterScope() const = 0;
- bool isSimple() const;
+ virtual bool isSimple() const = 0;
- const ClassList *taggedInnerClasses() const;
- ClassDef *tagLessReference() const;
+ virtual const ClassList *taggedInnerClasses() const = 0;
+ virtual ClassDef *tagLessReference() const = 0;
- MemberDef *isSmartPointer() const;
+ virtual MemberDef *isSmartPointer() const = 0;
- bool isJavaEnum() const;
+ virtual bool isJavaEnum() const = 0;
- bool isGeneric() const;
- bool isAnonymous() const;
- const ClassSDict *innerClasses() const;
- QCString title() const;
+ virtual bool isGeneric() const = 0;
+ virtual bool isAnonymous() const = 0;
+ virtual const ClassSDict *innerClasses() const = 0;
+ virtual QCString title() const = 0;
- QCString generatedFromFiles() const;
- const FileList &usedFiles() const;
+ virtual QCString generatedFromFiles() const = 0;
+ virtual const FileList &usedFiles() const = 0;
- const ArgumentList *typeConstraints() const;
- const ExampleSDict *exampleList() const;
- bool hasExamples() const;
- QCString getMemberListFileName() const;
- bool subGrouping() const;
+ virtual const ArgumentList *typeConstraints() const = 0;
+ virtual const ExampleSDict *exampleList() const = 0;
+ virtual bool hasExamples() const = 0;
+ virtual QCString getMemberListFileName() const = 0;
+ virtual bool subGrouping() const = 0;
- bool isSliceLocal() const;
+ virtual bool isSliceLocal() const = 0;
//-----------------------------------------------------------------------------------
// --- setters ----
//-----------------------------------------------------------------------------------
- void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0);
- void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0);
- void setIncludeFile(FileDef *fd,const char *incName,bool local,bool force);
- void insertMember(MemberDef *);
- void insertUsedFile(FileDef *);
- bool addExample(const char *anchor,const char *name, const char *file);
- void mergeCategory(ClassDef *category);
- void setNamespace(NamespaceDef *nd);
- void setFileDef(FileDef *fd);
- void setSubGrouping(bool enabled);
- void setProtection(Protection p);
- void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
- void addInnerCompound(Definition *d);
- ClassDef *insertTemplateInstance(const QCString &fileName,int startLine,int startColumn,
- const QCString &templSpec,bool &freshInstance);
- void addUsedClass(ClassDef *cd,const char *accessName,Protection prot);
- void addUsedByClass(ClassDef *cd,const char *accessName,Protection prot);
- void setIsStatic(bool b);
- void setCompoundType(CompoundType t);
- void setClassName(const char *name);
- void setClassSpecifier(uint64 spec);
-
- void setTemplateArguments(ArgumentList *al);
- void setTemplateBaseClassNames(QDict<int> *templateNames);
- void setTemplateMaster(ClassDef *tm);
- void setTypeConstraints(ArgumentList *al);
- void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
- void makeTemplateArgument(bool b=TRUE);
- void setCategoryOf(ClassDef *cd);
- void setUsedOnly(bool b);
-
- void addTaggedInnerClass(ClassDef *cd);
- void setTagLessReference(ClassDef *cd);
- void setName(const char *name);
-
- void setMetaData(const char *md);
+ virtual void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0) = 0;
+ virtual void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0) = 0;
+ virtual void setIncludeFile(FileDef *fd,const char *incName,bool local,bool force) = 0;
+ virtual void insertMember(MemberDef *) = 0;
+ virtual void insertUsedFile(FileDef *) = 0;
+ virtual bool addExample(const char *anchor,const char *name, const char *file) = 0;
+ virtual void mergeCategory(ClassDef *category) = 0;
+ virtual void setNamespace(NamespaceDef *nd) = 0;
+ virtual void setFileDef(FileDef *fd) = 0;
+ virtual void setSubGrouping(bool enabled) = 0;
+ virtual void setProtection(Protection p) = 0;
+ virtual void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs) = 0;
+ virtual void addInnerCompound(Definition *d) = 0;
+ virtual ClassDef *insertTemplateInstance(const QCString &fileName,int startLine,int startColumn,
+ const QCString &templSpec,bool &freshInstance) = 0;
+ virtual void addUsedClass(ClassDef *cd,const char *accessName,Protection prot) = 0;
+ virtual void addUsedByClass(ClassDef *cd,const char *accessName,Protection prot) = 0;
+ virtual void setIsStatic(bool b) = 0;
+ virtual void setCompoundType(CompoundType t) = 0;
+ virtual void setClassName(const char *name) = 0;
+ virtual void setClassSpecifier(uint64 spec) = 0;
+
+ virtual void setTemplateArguments(ArgumentList *al) = 0;
+ virtual void setTemplateBaseClassNames(QDict<int> *templateNames) = 0;
+ virtual void setTemplateMaster(ClassDef *tm) = 0;
+ virtual void setTypeConstraints(ArgumentList *al) = 0;
+ virtual void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec) = 0;
+ virtual void makeTemplateArgument(bool b=TRUE) = 0;
+ virtual void setCategoryOf(ClassDef *cd) = 0;
+ virtual void setUsedOnly(bool b) = 0;
+
+ virtual void addTaggedInnerClass(ClassDef *cd) = 0;
+ virtual void setTagLessReference(ClassDef *cd) = 0;
+ virtual void setName(const char *name) = 0;
+
+ virtual void setMetaData(const char *md) = 0;
//-----------------------------------------------------------------------------------
// --- actions ----
//-----------------------------------------------------------------------------------
- void findSectionsInDocumentation();
- void addMembersToMemberGroup();
- void addListReferences();
- void addTypeConstraints();
- void computeAnchors();
- void mergeMembers();
- void sortMemberLists();
- void distributeMemberGroupDocumentation();
- void writeDocumentation(OutputList &ol);
- void writeDocumentationForInnerClasses(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeMemberList(OutputList &ol);
- void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
- ClassDef *inheritedFrom,const char *inheritId);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const;
- void writeSummaryLinks(OutputList &ol);
- void reclassifyMember(MemberDef *md,MemberType t);
- void writeInlineDocumentation(OutputList &ol);
- void writeDeclarationLink(OutputList &ol,bool &found,
- const char *header,bool localNames);
- void removeMemberFromLists(MemberDef *md);
- void addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
- ClassDef *inheritedFrom,const QCString &inheritId);
- int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional);
- int countInheritanceNodes();
- void writeTagFile(FTextStream &);
-
- bool visited;
-
- protected:
- void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
- bool hasNonReferenceSuperClass() const;
- void showUsedFiles(OutputList &ol);
-
- private:
- void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
- void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
- void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief);
- MemberList *createMemberList(MemberListType lt);
- void writeInheritedMemberDeclarations(OutputList &ol,MemberListType lt,int lt2,const QCString &title,ClassDef *inheritedFrom,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
- void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
- const char *subTitle=0,bool showInline=FALSE,ClassDef *inheritedFrom=0,int lt2=-1,bool invert=FALSE,bool showAlways=FALSE,QPtrDict<void> *visitedClasses=0);
- void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title,bool showInline=FALSE);
- void writeSimpleMemberDocumentation(OutputList &ol,MemberListType lt);
- void writePlainMemberDeclaration(OutputList &ol,MemberListType lt,bool inGroup,ClassDef *inheritedFrom,const char *inheritId);
- void writeBriefDescription(OutputList &ol,bool exampleFlag);
- void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
- const QCString &title,const QCString &anchor=QCString());
- void writeIncludeFiles(OutputList &ol);
- void writeIncludeFilesForSlice(OutputList &ol);
- //void writeAllMembersLink(OutputList &ol);
- void writeInheritanceGraph(OutputList &ol);
- void writeCollaborationGraph(OutputList &ol);
- void writeMemberGroups(OutputList &ol,bool showInline=FALSE);
- void writeNestedClasses(OutputList &ol,const QCString &title);
- void writeInlineClasses(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeMoreLink(OutputList &ol,const QCString &anchor);
- void writeDetailedDocumentationBody(OutputList &ol);
-
- int countAdditionalInheritedMembers();
- void writeAdditionalInheritedMembers(OutputList &ol);
- void addClassAttributes(OutputList &ol);
- int countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
- int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
- int countInheritedDecMembers(MemberListType lt,
- ClassDef *inheritedFrom,bool invert,bool showAlways,
- QPtrDict<void> *visitedClasses);
- void getTitleForMemberListType(MemberListType type,
- QCString &title,QCString &subtitle);
- QCString includeStatement() const;
- void addTypeConstraint(const QCString &typeConstraint,const QCString &type);
-
- ClassDefImpl *m_impl;
+ virtual void findSectionsInDocumentation() = 0;
+ virtual void addMembersToMemberGroup() = 0;
+ virtual void addListReferences() = 0;
+ virtual void addTypeConstraints() = 0;
+ virtual void computeAnchors() = 0;
+ virtual void mergeMembers() = 0;
+ virtual void sortMemberLists() = 0;
+ virtual void distributeMemberGroupDocumentation() = 0;
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeDocumentationForInnerClasses(OutputList &ol) = 0;
+ virtual void writeMemberPages(OutputList &ol) = 0;
+ virtual void writeMemberList(OutputList &ol) = 0;
+ virtual void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
+ ClassDef *inheritedFrom,const char *inheritId) = 0;
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const = 0;
+ virtual void writeSummaryLinks(OutputList &ol) = 0;
+ virtual void reclassifyMember(MemberDef *md,MemberType t) = 0;
+ virtual void writeInlineDocumentation(OutputList &ol) = 0;
+ virtual void writeDeclarationLink(OutputList &ol,bool &found,
+ const char *header,bool localNames) = 0;
+ virtual void removeMemberFromLists(MemberDef *md) = 0;
+ virtual void addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
+ ClassDef *inheritedFrom,const QCString &inheritId) = 0;
+ virtual int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional) = 0;
+ virtual int countInheritanceNodes() = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+
+ virtual void setVisited(bool visited) = 0;
+ virtual bool isVisited() const = 0;
+ virtual bool hasNonReferenceSuperClass() const = 0;
+ virtual int countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
+ int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses) = 0;
+ virtual void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
+ const char *subTitle=0,bool showInline=FALSE,ClassDef *inheritedFrom=0,
+ int lt2=-1,bool invert=FALSE,bool showAlways=FALSE,
+ QPtrDict<void> *visitedClasses=0) = 0;
};
+/** Factory method to create a new ClassDef object */
+ClassDef *createClassDef(
+ const char *fileName,int startLine,int startColumn,
+ const char *name,ClassDef::CompoundType ct,
+ const char *ref=0,const char *fName=0,
+ bool isSymbol=TRUE,bool isJavaEnum=FALSE);
+
//------------------------------------------------------------------------
/** Class that contains information about a usage relation.
diff --git a/src/code.l b/src/code.l
index 711dfe8..b2dacba 100644
--- a/src/code.l
+++ b/src/code.l
@@ -841,7 +841,7 @@ static void updateCallContextForSmartPointer()
Definition *d = g_theCallContext.getScope();
//printf("updateCallContextForSmartPointer() cd=%s\n",cd ? d->name().data() : "<none>");
MemberDef *md;
- if (d && d->definitionType()==Definition::TypeClass && (md=((ClassDef*)d)->isSmartPointer()))
+ if (d && d->definitionType()==Definition::TypeClass && (md=(dynamic_cast<ClassDef*>(d))->isSmartPointer()))
{
ClassDef *ncd = stripClassName(md->typeString(),md->getOuterScope());
if (ncd)
@@ -1176,7 +1176,7 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,Definition *def,cons
{
if (def && def->definitionType()==Definition::TypeClass)
{
- ClassDef *cd = (ClassDef*)def;
+ ClassDef *cd = dynamic_cast<ClassDef*>(def);
MemberDef *xmd = cd->getMemberByName(memName);
//printf("generateClassMemberLink(class=%s,member=%s)=%p\n",def->name().data(),memName,xmd);
if (xmd)
@@ -1197,7 +1197,7 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,Definition *def,cons
}
else if (def && def->definitionType()==Definition::TypeNamespace)
{
- NamespaceDef *nd = (NamespaceDef*)def;
+ NamespaceDef *nd = dynamic_cast<NamespaceDef*>(def);
//printf("Looking for %s inside namespace %s\n",memName,nd->name().data());
Definition *innerDef = nd->findInnerCompound(memName);
if (innerDef)
@@ -1483,7 +1483,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectType = (ClassDef *)g_currentDefinition;
+ ctx->objectType = dynamic_cast<ClassDef *>(g_currentDefinition);
}
}
else
@@ -1507,7 +1507,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectVar = ((ClassDef *)g_currentDefinition)->getMemberByName(ctx->objectTypeOrName);
+ ctx->objectVar = (dynamic_cast<ClassDef *>(g_currentDefinition))->getMemberByName(ctx->objectTypeOrName);
//printf(" ctx->objectVar=%p\n",ctx->objectVar);
if (ctx->objectVar)
{
@@ -1589,7 +1589,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectType = (ClassDef *)g_currentDefinition;
+ ctx->objectType = dynamic_cast<ClassDef *>(g_currentDefinition);
if (ctx->objectType->categoryOf())
{
ctx->objectType = ctx->objectType->categoryOf();
@@ -1608,7 +1608,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ClassDef *cd = (ClassDef *)g_currentDefinition;
+ ClassDef *cd = dynamic_cast<ClassDef *>(g_currentDefinition);
if (cd->categoryOf())
{
cd = cd->categoryOf();
@@ -2295,7 +2295,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
if (getResolvedClass(g_currentDefinition,g_sourceFileDef,g_curClassName)==0)
{
DBG_CTX((stderr,"Adding new class %s\n",g_curClassName.data()));
- ClassDef *ncd=new ClassDef("<code>",1,1,
+ ClassDef *ncd=createClassDef("<code>",1,1,
g_curClassName,ClassDef::Class,0,0,FALSE);
g_codeClassSDict->append(g_curClassName,ncd);
// insert base classes.
@@ -3769,7 +3769,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
if (fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
+ g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
g_insideObjC = lang==SrcLangExt_ObjC;
diff --git a/src/commentcnv.l b/src/commentcnv.l
index 88236ed..6b08d74 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -829,10 +829,19 @@ void replaceComment(int offset);
g_inRoseComment=FALSE;
BEGIN(Scan);
}
-<ReadLine>[^\\@\n]*/\n {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(g_readLineCtx);
- }
+<ReadLine>"*/" {
+ copyToOutput("*&zwj;/",7);
+ }
+<ReadLine>"*" {
+ copyToOutput(yytext,(int)yyleng);
+ }
+<ReadLine>[^\\@\n\*]* {
+ copyToOutput(yytext,(int)yyleng);
+ }
+<ReadLine>[^\\@\n\*]*/\n {
+ copyToOutput(yytext,(int)yyleng);
+ BEGIN(g_readLineCtx);
+ }
<CComment,ReadLine>[\\@][\\@][~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command
copyToOutput(yytext,(int)yyleng);
}
diff --git a/src/context.cpp b/src/context.cpp
index 6ddc141..7b7c725 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -1582,9 +1582,9 @@ class DefinitionContext
{
fillPath(outerScope,list);
}
- else if (type==Definition::TypeFile && ((const FileDef*)def)->getDirDef())
+ else if (type==Definition::TypeFile && (dynamic_cast<const FileDef*>(def))->getDirDef())
{
- fillPath(((const FileDef*)def)->getDirDef(),list);
+ fillPath((dynamic_cast<const FileDef*>(def))->getDirDef(),list);
}
list->append(NavPathElemContext::alloc(def));
}
@@ -1598,9 +1598,9 @@ class DefinitionContext
{
fillPath(m_def->getOuterScope(),list);
}
- else if (m_def->definitionType()==Definition::TypeFile && ((const FileDef *)m_def)->getDirDef())
+ else if (m_def->definitionType()==Definition::TypeFile && (dynamic_cast<const FileDef *>(m_def))->getDirDef())
{
- fillPath(((const FileDef *)m_def)->getDirDef(),list);
+ fillPath((dynamic_cast<const FileDef *>(m_def))->getDirDef(),list);
}
cache.navPath.reset(list);
}
@@ -2374,7 +2374,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
addTemplateDecls(parent,tl);
}
- ClassDef *cd=(ClassDef *)d;
+ ClassDef *cd=dynamic_cast<ClassDef *>(d);
if (cd->templateArguments())
{
ArgumentListContext *al = ArgumentListContext::alloc(cd->templateArguments(),cd,relPathAsString());
@@ -6278,7 +6278,7 @@ class NestingNodeContext::Private
{
if (!m_cache.classContext && m_def->definitionType()==Definition::TypeClass)
{
- m_cache.classContext.reset(ClassContext::alloc((ClassDef*)m_def));
+ m_cache.classContext.reset(ClassContext::alloc(dynamic_cast<ClassDef*>(m_def)));
}
if (m_cache.classContext)
{
@@ -6293,7 +6293,7 @@ class NestingNodeContext::Private
{
if (!m_cache.namespaceContext && m_def->definitionType()==Definition::TypeNamespace)
{
- m_cache.namespaceContext.reset(NamespaceContext::alloc((NamespaceDef*)m_def));
+ m_cache.namespaceContext.reset(NamespaceContext::alloc(dynamic_cast<NamespaceDef*>(m_def)));
}
if (m_cache.namespaceContext)
{
@@ -6308,7 +6308,7 @@ class NestingNodeContext::Private
{
if (!m_cache.dirContext && m_def->definitionType()==Definition::TypeDir)
{
- m_cache.dirContext.reset(DirContext::alloc((DirDef*)m_def));
+ m_cache.dirContext.reset(DirContext::alloc(dynamic_cast<DirDef*>(m_def)));
}
if (m_cache.dirContext)
{
@@ -6323,7 +6323,7 @@ class NestingNodeContext::Private
{
if (!m_cache.fileContext && m_def->definitionType()==Definition::TypeFile)
{
- m_cache.fileContext.reset(FileContext::alloc((FileDef*)m_def));
+ m_cache.fileContext.reset(FileContext::alloc(dynamic_cast<FileDef*>(m_def)));
}
if (m_cache.fileContext)
{
@@ -6338,7 +6338,7 @@ class NestingNodeContext::Private
{
if (!m_cache.pageContext && m_def->definitionType()==Definition::TypePage)
{
- m_cache.pageContext.reset(PageContext::alloc((PageDef*)m_def,FALSE,FALSE));
+ m_cache.pageContext.reset(PageContext::alloc(dynamic_cast<PageDef*>(m_def),FALSE,FALSE));
}
if (m_cache.pageContext)
{
@@ -6353,7 +6353,7 @@ class NestingNodeContext::Private
{
if (!m_cache.moduleContext && m_def->definitionType()==Definition::TypeGroup)
{
- m_cache.moduleContext.reset(ModuleContext::alloc((GroupDef*)m_def));
+ m_cache.moduleContext.reset(ModuleContext::alloc(dynamic_cast<GroupDef*>(m_def)));
}
if (m_cache.moduleContext)
{
@@ -6425,14 +6425,14 @@ class NestingNodeContext::Private
void addClasses(bool inherit, bool hideSuper)
{
- ClassDef *cd = m_def->definitionType()==Definition::TypeClass ? (ClassDef*)m_def : 0;
+ ClassDef *cd = dynamic_cast<ClassDef*>(m_def);
if (cd && inherit)
{
- bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
+ bool hasChildren = !cd->isVisited() && !hideSuper && classHasVisibleChildren(cd);
if (hasChildren)
{
- bool wasVisited=cd->visited;
- cd->visited=TRUE;
+ bool wasVisited=cd->isVisited();
+ cd->setVisited(TRUE);
if (cd->getLanguage()==SrcLangExt_VHDL)
{
m_children->addDerivedClasses(cd->baseClasses(),wasVisited);
@@ -6453,7 +6453,7 @@ class NestingNodeContext::Private
}
void addNamespaces(bool addClasses)
{
- NamespaceDef *nd = m_def->definitionType()==Definition::TypeNamespace ? (NamespaceDef*)m_def : 0;
+ NamespaceDef *nd = dynamic_cast<NamespaceDef*>(m_def);
if (nd && nd->getNamespaceSDict())
{
m_children->addNamespaces(*nd->getNamespaceSDict(),FALSE,addClasses);
@@ -6465,7 +6465,7 @@ class NestingNodeContext::Private
}
void addDirFiles()
{
- DirDef *dd = m_def->definitionType()==Definition::TypeDir ? (DirDef*)m_def : 0;
+ DirDef *dd = dynamic_cast<DirDef*>(m_def);
if (dd)
{
m_children->addDirs(dd->subDirs());
@@ -6477,7 +6477,7 @@ class NestingNodeContext::Private
}
void addPages()
{
- PageDef *pd = m_def->definitionType()==Definition::TypePage ? (PageDef*)m_def : 0;
+ PageDef *pd = dynamic_cast<PageDef*>(m_def);
if (pd && pd->getSubPages())
{
m_children->addPages(*pd->getSubPages(),FALSE);
@@ -6485,7 +6485,7 @@ class NestingNodeContext::Private
}
void addModules()
{
- GroupDef *gd = m_def->definitionType()==Definition::TypeGroup ? (GroupDef*)m_def : 0;
+ GroupDef *gd = dynamic_cast<GroupDef*>(m_def);
if (gd && gd->getSubGroups())
{
m_children->addModules(*gd->getSubGroups());
@@ -6744,7 +6744,7 @@ class NestingContext::Private : public GenericNodeListContext
if (cd->isVisibleInHierarchy()) // should it be visible
{
// new root level class
- NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,TRUE,cd->visited);
+ NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,TRUE,cd->isVisited());
append(nnc);
m_index++;
}
@@ -7805,11 +7805,11 @@ class NavPathElemContext::Private
QCString text = m_def->localName();
if (type==Definition::TypeGroup)
{
- text = ((const GroupDef*)m_def)->groupTitle();
+ text = (dynamic_cast<const GroupDef*>(m_def))->groupTitle();
}
- else if (type==Definition::TypePage && (((const PageDef*)m_def)->hasTitle()))
+ else if (type==Definition::TypePage && ((dynamic_cast<const PageDef*>(m_def))->hasTitle()))
{
- text = ((const PageDef*)m_def)->title();
+ text = (dynamic_cast<const PageDef*>(m_def))->title();
}
else if (type==Definition::TypeClass)
{
@@ -9102,7 +9102,7 @@ class MemberListInfoContext::Private
m_def->definitionType()==Definition::TypeClass)
{
InheritedMemberInfoListContext *ctx = InheritedMemberInfoListContext::alloc();
- ctx->addMemberList((ClassDef*)m_def,m_memberList->listType(),m_title,FALSE);
+ ctx->addMemberList(dynamic_cast<ClassDef*>(m_def),m_memberList->listType(),m_title,FALSE);
m_cache.inherited.reset(ctx);
}
if (m_cache.inherited)
@@ -9614,8 +9614,7 @@ class SymbolContext::Private
const Definition *prev = m_prevDef;
const Definition *nextScope = next ? next->getOuterScope() : 0;
const Definition *prevScope = prev ? prev->getOuterScope() : 0;
- bool isMemberDef = m_def->definitionType()==Definition::TypeMember;
- const MemberDef *md = isMemberDef ? (const MemberDef*)m_def : 0;
+ const MemberDef *md = dynamic_cast<const MemberDef*>(m_def);
bool isFunctionLike = md && (md->isFunction() || md->isSlot() || md->isSignal());
bool overloadedFunction = isFunctionLike &&
((prevScope!=0 && scope==prevScope) || (scope && scope==nextScope));
@@ -10300,7 +10299,7 @@ void generateOutputViaTemplate()
else
{
// TODO: for LaTeX output index should be main... => solve in template
- Doxygen::mainPage = new PageDef("[generated]",1,"index","",theTranslator->trMainPage());
+ Doxygen::mainPage = createPageDef("[generated]",1,"index","",theTranslator->trMainPage());
Doxygen::mainPage->setFileName("index");
SharedPtr<PageContext> mainPage(PageContext::alloc(Doxygen::mainPage,TRUE,FALSE));
ctx->set("mainPage",mainPage.get());
diff --git a/src/debug.cpp b/src/debug.cpp
index 2f343ac..4c7afb3 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -49,6 +49,7 @@ static LabelMap s_labels[] =
{ "filteroutput", Debug::FilterOutput },
{ "lex", Debug::Lex },
{ "plantuml", Debug::Plantuml },
+ { "fortranfixed2free", Debug::FortranFixed2Free },
{ 0, (Debug::DebugMask)0 }
};
diff --git a/src/debug.h b/src/debug.h
index 9a2070c..79bc3d8 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -38,7 +38,8 @@ class Debug
Markdown = 0x00000800,
FilterOutput = 0x00001000,
Lex = 0x00002000,
- Plantuml = 0x00004000
+ Plantuml = 0x00004000,
+ FortranFixed2Free = 0x00008000
};
static void print(DebugMask mask,int prio,const char *fmt,...);
static int setFlag(const char *label);
diff --git a/src/definition.cpp b/src/definition.cpp
index a649700..1233add 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -22,7 +22,7 @@
#include <stdlib.h>
#include <assert.h>
#include "config.h"
-#include "definition.h"
+#include "definitionimpl.h"
#include "doxygen.h"
#include "language.h"
#include "message.h"
@@ -44,18 +44,14 @@
#include "pagedef.h"
#include "bufstr.h"
-#define START_MARKER 0x4445465B // DEF[
-#define END_MARKER 0x4445465D // DEF]
-
//-----------------------------------------------------------------------------------------
-
-/** Private data associated with a Symbol Definition object. */
-class DefinitionImpl
+/** Private data associated with a Symbol DefinitionImpl object. */
+class DefinitionImpl::IMPL
{
public:
- DefinitionImpl();
- ~DefinitionImpl();
+ IMPL();
+ ~IMPL();
void init(const char *df, const char *n);
void setDefFileName(const QCString &df);
@@ -90,9 +86,16 @@ class DefinitionImpl
SrcLangExt lang;
QCString id; // clang unique id
+
+ QCString name;
+ bool isSymbol;
+ QCString symbolName;
+ int defLine;
+ int defColumn;
+ Cookie *cookie;
};
-DefinitionImpl::DefinitionImpl()
+DefinitionImpl::IMPL::IMPL()
: sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
xrefListItems(0), partOfGroups(0),
details(0), inbodyDocs(0), brief(0), body(0), hidden(FALSE), isArtificial(FALSE),
@@ -100,7 +103,7 @@ DefinitionImpl::DefinitionImpl()
{
}
-DefinitionImpl::~DefinitionImpl()
+DefinitionImpl::IMPL::~IMPL()
{
delete sectionDict;
delete sourceRefByDict;
@@ -113,7 +116,7 @@ DefinitionImpl::~DefinitionImpl()
delete inbodyDocs;
}
-void DefinitionImpl::setDefFileName(const QCString &df)
+void DefinitionImpl::IMPL::setDefFileName(const QCString &df)
{
defFileName = df;
int lastDot = defFileName.findRev('.');
@@ -123,7 +126,7 @@ void DefinitionImpl::setDefFileName(const QCString &df)
}
}
-void DefinitionImpl::init(const char *df, const char *n)
+void DefinitionImpl::IMPL::init(const char *df, const char *n)
{
setDefFileName(df);
QCString name = n;
@@ -151,13 +154,14 @@ void DefinitionImpl::init(const char *df, const char *n)
hidden = FALSE;
isArtificial = FALSE;
lang = SrcLangExt_Unknown;
+ cookie = 0;
}
-void Definition::setDefFile(const QCString &df,int defLine,int defCol)
+void DefinitionImpl::setDefFile(const QCString &df,int defLine,int defCol)
{
m_impl->setDefFileName(df);
- m_defLine = defLine;
- m_defColumn = defCol;
+ m_impl->defLine = defLine;
+ m_impl->defColumn = defCol;
}
//-----------------------------------------------------------------------------------------
@@ -219,7 +223,7 @@ static bool matchExcludedSymbols(const char *name)
return FALSE;
}
-void Definition::addToMap(const char *name,Definition *d)
+void DefinitionImpl::addToMap(const char *name,Definition *d)
{
bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
QCString symbolName = name;
@@ -266,9 +270,9 @@ void Definition::addToMap(const char *name,Definition *d)
}
}
-void Definition::removeFromMap(Definition *d)
+void DefinitionImpl::removeFromMap(Definition *d)
{
- QCString symbolName = d->m_symbolName;
+ QCString symbolName = d->_symbolName();
if (!symbolName.isEmpty())
{
//printf("******* removing symbol `%s' (%p)\n",symbolName.data(),d);
@@ -296,16 +300,16 @@ void Definition::removeFromMap(Definition *d)
}
}
-Definition::Definition(const char *df,int dl,int dc,
+DefinitionImpl::DefinitionImpl(const char *df,int dl,int dc,
const char *name,const char *b,
- const char *d,bool isSymbol) : m_cookie(0)
+ const char *d,bool isSymbol)
{
- m_name = name;
- m_defLine = dl;
- m_defColumn = dc;
- m_impl = new DefinitionImpl;
+ m_impl = new DefinitionImpl::IMPL;
+ m_impl->name = name;
+ m_impl->defLine = dl;
+ m_impl->defColumn = dc;
m_impl->init(df,name);
- m_isSymbol = isSymbol;
+ m_impl->isSymbol = isSymbol;
if (isSymbol) addToMap(name,this);
_setBriefDescription(b,df,dl);
_setDocumentation(d,df,dl,TRUE,FALSE);
@@ -315,12 +319,9 @@ Definition::Definition(const char *df,int dl,int dc,
}
}
-Definition::Definition(const Definition &d) : DefinitionIntf(), m_cookie(0)
+DefinitionImpl::DefinitionImpl(const DefinitionImpl &d)
{
- m_name = d.m_name;
- m_defLine = d.m_defLine;
- m_defColumn = d.m_defColumn;
- m_impl = new DefinitionImpl;
+ m_impl = new DefinitionImpl::IMPL;
*m_impl = *d.m_impl;
m_impl->sectionDict = 0;
m_impl->sourceRefByDict = 0;
@@ -391,13 +392,12 @@ Definition::Definition(const Definition &d) : DefinitionIntf(), m_cookie(0)
m_impl->inbodyDocs = new DocInfo(*d.m_impl->inbodyDocs);
}
- m_isSymbol = d.m_isSymbol;
- if (m_isSymbol) addToMap(m_name,this);
+ if (m_impl->isSymbol) addToMap(m_impl->name,this);
}
-Definition::~Definition()
+DefinitionImpl::~DefinitionImpl()
{
- if (m_isSymbol)
+ if (m_impl->isSymbol)
{
removeFromMap(this);
}
@@ -406,33 +406,31 @@ Definition::~Definition()
delete m_impl;
m_impl=0;
}
- delete m_cookie;
- m_cookie=0;
}
-void Definition::setName(const char *name)
+void DefinitionImpl::setName(const char *name)
{
if (name==0) return;
- m_name = name;
+ m_impl->name = name;
}
-void Definition::setId(const char *id)
+void DefinitionImpl::setId(const char *id)
{
if (id==0) return;
m_impl->id = id;
if (Doxygen::clangUsrMap)
{
- //printf("Definition::setId '%s'->'%s'\n",id,m_name.data());
+ //printf("DefinitionImpl::setId '%s'->'%s'\n",id,m_name.data());
Doxygen::clangUsrMap->insert(id,this);
}
}
-QCString Definition::id() const
+QCString DefinitionImpl::id() const
{
return m_impl->id;
}
-void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
+void DefinitionImpl::addSectionsToDefinition(QList<SectionInfo> *anchorList)
{
if (!anchorList) return;
//printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
@@ -461,9 +459,9 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
}
}
-bool Definition::hasSections() const
+bool DefinitionImpl::hasSections() const
{
- //printf("Definition::hasSections(%s) #sections=%d\n",name().data(),
+ //printf("DefinitionImpl::hasSections(%s) #sections=%d\n",name().data(),
// m_impl->sectionDict ? m_impl->sectionDict->count() : 0);
if (m_impl->sectionDict==0) return FALSE;
SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
@@ -481,10 +479,10 @@ bool Definition::hasSections() const
return FALSE;
}
-void Definition::addSectionsToIndex()
+void DefinitionImpl::addSectionsToIndex()
{
if (m_impl->sectionDict==0) return;
- //printf("Definition::addSectionsToIndex()\n");
+ //printf("DefinitionImpl::addSectionsToIndex()\n");
SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
SectionInfo *si;
int level=1;
@@ -534,7 +532,7 @@ void Definition::addSectionsToIndex()
}
}
-void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile)
+void DefinitionImpl::writeDocAnchorsToTagFile(FTextStream &tagFile)
{
if (m_impl->sectionDict)
{
@@ -558,7 +556,7 @@ void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile)
}
}
-bool Definition::_docsAlreadyAdded(const QCString &doc,QCString &sigList)
+bool DefinitionImpl::_docsAlreadyAdded(const QCString &doc,QCString &sigList)
{
uchar md5_sig[16];
QCString sigStr(33);
@@ -580,7 +578,7 @@ bool Definition::_docsAlreadyAdded(const QCString &doc,QCString &sigList)
}
}
-void Definition::_setDocumentation(const char *d,const char *docFile,int docLine,
+void DefinitionImpl::_setDocumentation(const char *d,const char *docFile,int docLine,
bool stripWhiteSpace,bool atTop)
{
//printf("%s::setDocumentation(%s,%s,%d,%d)\n",name().data(),d,docFile,docLine,stripWhiteSpace);
@@ -626,7 +624,7 @@ void Definition::_setDocumentation(const char *d,const char *docFile,int docLine
}
}
-void Definition::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
+void DefinitionImpl::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
{
if (d==0) return;
_setDocumentation(d,docFile,docLine,stripWhiteSpace,FALSE);
@@ -646,7 +644,7 @@ static bool lastCharIsMultibyte(const QCString &s)
return TRUE;
}
-void Definition::_setBriefDescription(const char *b,const char *briefFile,int briefLine)
+void DefinitionImpl::_setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
static QCString outputLanguage = Config_getEnum(OUTPUT_LANGUAGE);
static bool needsDot = outputLanguage!="Japanese" &&
@@ -677,7 +675,7 @@ void Definition::_setBriefDescription(const char *b,const char *briefFile,int br
}
else
{
- //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
+ //fprintf(stderr,"DefinitionImpl::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
if (m_impl->brief==0)
{
m_impl->brief = new BriefInfo;
@@ -701,13 +699,13 @@ void Definition::_setBriefDescription(const char *b,const char *briefFile,int br
}
}
-void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine)
+void DefinitionImpl::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
if (b==0) return;
_setBriefDescription(b,briefFile,briefLine);
}
-void Definition::_setInbodyDocumentation(const char *doc,const char *inbodyFile,int inbodyLine)
+void DefinitionImpl::_setInbodyDocumentation(const char *doc,const char *inbodyFile,int inbodyLine)
{
if (m_impl->inbodyDocs==0)
{
@@ -725,7 +723,7 @@ void Definition::_setInbodyDocumentation(const char *doc,const char *inbodyFile,
}
}
-void Definition::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
+void DefinitionImpl::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
{
if (d==0) return;
_setInbodyDocumentation(d,inbodyFile,inbodyLine);
@@ -1016,7 +1014,7 @@ bool readCodeFragment(const char *fileName,
return found;
}
-QCString Definition::getSourceFileBase() const
+QCString DefinitionImpl::getSourceFileBase() const
{
ASSERT(definitionType()!=Definition::TypeFile); // file overloads this method
QCString fn;
@@ -1029,7 +1027,7 @@ QCString Definition::getSourceFileBase() const
return fn;
}
-QCString Definition::getSourceAnchor() const
+QCString DefinitionImpl::getSourceAnchor() const
{
const int maxAnchorStrLen = 20;
char anchorStr[maxAnchorStrLen];
@@ -1049,13 +1047,13 @@ QCString Definition::getSourceAnchor() const
}
/*! Write a reference to the source code defining this definition */
-void Definition::writeSourceDef(OutputList &ol,const char *)
+void DefinitionImpl::writeSourceDef(OutputList &ol,const char *)
{
static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE);
static bool rtfSourceCode = Config_getBool(RTF_SOURCE_CODE);
static bool docbookSourceCode = Config_getBool(DOCBOOK_PROGRAMLISTING);
ol.pushGeneratorState();
- //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
+ //printf("DefinitionImpl::writeSourceRef %d %p\n",bodyLine,bodyDef);
QCString fn = getSourceFileBase();
if (!fn.isEmpty())
{
@@ -1239,7 +1237,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.popGeneratorState();
}
-void Definition::setBodySegment(int bls,int ble)
+void DefinitionImpl::setBodySegment(int bls,int ble)
{
//printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
if (m_impl->body==0) m_impl->body = new BodyInfo;
@@ -1247,13 +1245,13 @@ void Definition::setBodySegment(int bls,int ble)
m_impl->body->endLine=ble;
}
-void Definition::setBodyDef(FileDef *fd)
+void DefinitionImpl::setBodyDef(FileDef *fd)
{
if (m_impl->body==0) m_impl->body = new BodyInfo;
m_impl->body->fileDef=fd;
}
-bool Definition::hasSources() const
+bool DefinitionImpl::hasSources() const
{
return m_impl->body && m_impl->body->startLine!=-1 &&
m_impl->body->endLine>=m_impl->body->startLine &&
@@ -1261,7 +1259,7 @@ bool Definition::hasSources() const
}
/*! Write code of this definition into the documentation */
-void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
+void DefinitionImpl::writeInlineCode(OutputList &ol,const char *scopeName)
{
static bool inlineSources = Config_getBool(INLINE_SOURCES);
ol.pushGeneratorState();
@@ -1281,7 +1279,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
pIntf->resetCodeParserState();
//printf("Read:\n`%s'\n\n",codeFragment.data());
MemberDef *thisMd = 0;
- if (definitionType()==TypeMember) thisMd = (MemberDef *)this;
+ if (definitionType()==TypeMember) thisMd = dynamic_cast <MemberDef*>(this);
ol.startCodeFragment();
pIntf->parseCode(ol, // codeOutIntf
@@ -1306,7 +1304,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
/*! Write a reference to the source code fragments in which this
* definition is used.
*/
-void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
+void DefinitionImpl::_writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool /*funcOnly*/)
{
static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE);
@@ -1351,7 +1349,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
{
name+="()";
}
- //Definition *d = md->getOutputFileBase();
+ //DefinitionImpl *d = md->getOutputFileBase();
//if (d==Doxygen::globalScope) d=md->getBodyDef();
if (sourceBrowser &&
!(md->isLinkable() && !refLinkSource) &&
@@ -1458,17 +1456,17 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
ol.popGeneratorState();
}
-void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
+void DefinitionImpl::writeSourceReffedBy(OutputList &ol,const char *scopeName)
{
_writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE);
}
-void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
+void DefinitionImpl::writeSourceRefs(OutputList &ol,const char *scopeName)
{
_writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE);
}
-bool Definition::hasDocumentation() const
+bool DefinitionImpl::hasDocumentation() const
{
static bool extractAll = Config_getBool(EXTRACT_ALL);
//static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
@@ -1483,7 +1481,7 @@ bool Definition::hasDocumentation() const
return hasDocs;
}
-bool Definition::hasUserDocumentation() const
+bool DefinitionImpl::hasUserDocumentation() const
{
bool hasDocs =
(m_impl->details && !m_impl->details->doc.isEmpty()) ||
@@ -1493,7 +1491,7 @@ bool Definition::hasUserDocumentation() const
}
-void Definition::addSourceReferencedBy(MemberDef *md)
+void DefinitionImpl::addSourceReferencedBy(MemberDef *md)
{
if (md)
{
@@ -1516,7 +1514,7 @@ void Definition::addSourceReferencedBy(MemberDef *md)
}
}
-void Definition::addSourceReferences(MemberDef *md)
+void DefinitionImpl::addSourceReferences(MemberDef *md)
{
if (md)
{
@@ -1539,17 +1537,17 @@ void Definition::addSourceReferences(MemberDef *md)
}
}
-Definition *Definition::findInnerCompound(const char *) const
+Definition *DefinitionImpl::findInnerCompound(const char *) const
{
return 0;
}
-void Definition::addInnerCompound(Definition *)
+void DefinitionImpl::addInnerCompound(Definition *)
{
- err("Definition::addInnerCompound() called\n");
+ err("DefinitionImpl::addInnerCompound() called\n");
}
-QCString Definition::qualifiedName() const
+QCString DefinitionImpl::qualifiedName() const
{
//static int count=0;
//count++;
@@ -1589,7 +1587,7 @@ QCString Definition::qualifiedName() const
return m_impl->qualifiedName;
}
-void Definition::setOuterScope(Definition *d)
+void DefinitionImpl::setOuterScope(Definition *d)
{
//printf("%s::setOuterScope(%s)\n",name().data(),d?d->name().data():"<none>");
Definition *p = m_impl->outerScope;
@@ -1598,7 +1596,7 @@ void Definition::setOuterScope(Definition *d)
while (p && !found)
{
found = (p==d);
- p = p->m_impl->outerScope;
+ p = p->getOuterScope();
}
if (!found)
{
@@ -1608,18 +1606,18 @@ void Definition::setOuterScope(Definition *d)
m_impl->hidden = m_impl->hidden || d->isHidden();
}
-QCString Definition::localName() const
+QCString DefinitionImpl::localName() const
{
return m_impl->localName;
}
-void Definition::makePartOfGroup(GroupDef *gd)
+void DefinitionImpl::makePartOfGroup(GroupDef *gd)
{
if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList;
m_impl->partOfGroups->append(gd);
}
-void Definition::setRefItems(const QList<ListItemInfo> *sli)
+void DefinitionImpl::setRefItems(const QList<ListItemInfo> *sli)
{
//printf("%s::setRefItems()\n",name().data());
if (sli)
@@ -1639,7 +1637,7 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
}
}
-void Definition::mergeRefItems(Definition *d)
+void DefinitionImpl::mergeRefItems(Definition *d)
{
//printf("%s::mergeRefItems()\n",name().data());
QList<ListItemInfo> *xrefList = d->xrefListItems();
@@ -1671,7 +1669,7 @@ void Definition::mergeRefItems(Definition *d)
}
}
-int Definition::_getXRefListId(const char *listName) const
+int DefinitionImpl::_getXRefListId(const char *listName) const
{
if (m_impl->xrefListItems)
{
@@ -1688,12 +1686,12 @@ int Definition::_getXRefListId(const char *listName) const
return -1;
}
-QList<ListItemInfo> *Definition::xrefListItems() const
+QList<ListItemInfo> *DefinitionImpl::xrefListItems() const
{
return m_impl->xrefListItems;
}
-QCString Definition::pathFragment() const
+QCString DefinitionImpl::pathFragment() const
{
QCString result;
if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope)
@@ -1703,13 +1701,13 @@ QCString Definition::pathFragment() const
if (isLinkable())
{
if (!result.isEmpty()) result+="/";
- if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
+ if (definitionType()==Definition::TypeGroup && (dynamic_cast <const GroupDef*>(this))->groupTitle())
{
- result+=((const GroupDef*)this)->groupTitle();
+ result+=(dynamic_cast <const GroupDef*>(this))->groupTitle();
}
- else if (definitionType()==Definition::TypePage && ((const PageDef*)this)->hasTitle())
+ else if (definitionType()==Definition::TypePage && (dynamic_cast <const PageDef*>(this))->hasTitle())
{
- result+=((const PageDef*)this)->title();
+ result+=(dynamic_cast <const PageDef*>(this))->title();
}
else
{
@@ -1729,7 +1727,7 @@ QCString Definition::pathFragment() const
/*! Returns the string used in the footer for $navpath when
* GENERATE_TREEVIEW is enabled
*/
-QCString Definition::navigationPathAsString() const
+QCString DefinitionImpl::navigationPathAsString() const
{
QCString result;
Definition *outerScope = getOuterScope();
@@ -1738,22 +1736,22 @@ QCString Definition::navigationPathAsString() const
{
result+=outerScope->navigationPathAsString();
}
- else if (definitionType()==Definition::TypeFile && ((const FileDef*)this)->getDirDef())
+ else if (definitionType()==Definition::TypeFile && (dynamic_cast<const FileDef*>(this))->getDirDef())
{
- result+=((const FileDef*)this)->getDirDef()->navigationPathAsString();
+ result+=(dynamic_cast<const FileDef*>(this))->getDirDef()->navigationPathAsString();
}
result+="<li class=\"navelem\">";
if (isLinkable())
{
- if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
+ if (definitionType()==Definition::TypeGroup && (dynamic_cast<const GroupDef*>(this))->groupTitle())
{
result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
- convertToHtml(((const GroupDef*)this)->groupTitle())+"</a>";
+ convertToHtml((dynamic_cast<const GroupDef*>(this))->groupTitle())+"</a>";
}
- else if (definitionType()==Definition::TypePage && ((const PageDef*)this)->hasTitle())
+ else if (definitionType()==Definition::TypePage && (dynamic_cast<const PageDef*>(this))->hasTitle())
{
result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
- convertToHtml(((const PageDef*)this)->title())+"</a>";
+ convertToHtml((dynamic_cast<const PageDef*>(this))->title())+"</a>";
}
else if (definitionType()==Definition::TypeClass)
{
@@ -1781,7 +1779,7 @@ QCString Definition::navigationPathAsString() const
}
// TODO: move to htmlgen
-void Definition::writeNavigationPath(OutputList &ol) const
+void DefinitionImpl::writeNavigationPath(OutputList &ol) const
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1798,7 +1796,7 @@ void Definition::writeNavigationPath(OutputList &ol) const
}
// TODO: move to htmlgen
-void Definition::writeToc(OutputList &ol, const LocalToc &localToc)
+void DefinitionImpl::writeToc(OutputList &ol, const LocalToc &localToc)
{
SectionDict *sectionDict = m_impl->sectionDict;
if (sectionDict==0) return;
@@ -1938,31 +1936,31 @@ void Definition::writeToc(OutputList &ol, const LocalToc &localToc)
//----------------------------------------------------------------------------------------
-SectionDict * Definition::getSectionDict(void)
+SectionDict * DefinitionImpl::getSectionDict(void)
{
return m_impl->sectionDict;
}
-QCString Definition::symbolName() const
+QCString DefinitionImpl::symbolName() const
{
- return m_symbolName;
+ return m_impl->symbolName;
}
//----------------------
-QCString Definition::documentation() const
+QCString DefinitionImpl::documentation() const
{
return m_impl->details ? m_impl->details->doc : QCString("");
}
-int Definition::docLine() const
+int DefinitionImpl::docLine() const
{
return m_impl->details ? m_impl->details->line : 1;
}
-QCString Definition::docFile() const
+QCString DefinitionImpl::docFile() const
{
- return m_impl->details ? m_impl->details->file : QCString("<"+m_name+">");
+ return m_impl->details ? m_impl->details->file : QCString("<"+m_impl->name+">");
}
//----------------------------------------------------------------------------
@@ -2016,7 +2014,7 @@ QCString abbreviate(const char *s,const char *name)
//----------------------
-QCString Definition::briefDescription(bool abbr) const
+QCString DefinitionImpl::briefDescription(bool abbr) const
{
//printf("%s::briefDescription(%d)='%s'\n",name().data(),abbr,m_impl->brief?m_impl->brief->doc.data():"<none>");
return m_impl->brief ?
@@ -2024,7 +2022,7 @@ QCString Definition::briefDescription(bool abbr) const
QCString("");
}
-QCString Definition::briefDescriptionAsTooltip() const
+QCString DefinitionImpl::briefDescriptionAsTooltip() const
{
if (m_impl->brief)
{
@@ -2033,7 +2031,7 @@ QCString Definition::briefDescriptionAsTooltip() const
static bool reentering=FALSE;
if (!reentering)
{
- MemberDef *md = definitionType()==TypeMember ? (MemberDef*)this : 0;
+ const MemberDef *md = definitionType()==TypeMember ? dynamic_cast<const MemberDef*>(this) : 0;
const Definition *scope = definitionType()==TypeMember ? getOuterScope() : this;
reentering=TRUE; // prevent requests for tooltips while parsing a tooltip
m_impl->brief->tooltip = parseCommentAsText(
@@ -2049,97 +2047,97 @@ QCString Definition::briefDescriptionAsTooltip() const
return QCString("");
}
-int Definition::briefLine() const
+int DefinitionImpl::briefLine() const
{
return m_impl->brief ? m_impl->brief->line : 1;
}
-QCString Definition::briefFile() const
+QCString DefinitionImpl::briefFile() const
{
- return m_impl->brief ? m_impl->brief->file : QCString("<"+m_name+">");
+ return m_impl->brief ? m_impl->brief->file : QCString("<"+m_impl->name+">");
}
//----------------------
-QCString Definition::inbodyDocumentation() const
+QCString DefinitionImpl::inbodyDocumentation() const
{
return m_impl->inbodyDocs ? m_impl->inbodyDocs->doc : QCString("");
}
-int Definition::inbodyLine() const
+int DefinitionImpl::inbodyLine() const
{
return m_impl->inbodyDocs ? m_impl->inbodyDocs->line : 1;
}
-QCString Definition::inbodyFile() const
+QCString DefinitionImpl::inbodyFile() const
{
- return m_impl->inbodyDocs ? m_impl->inbodyDocs->file : QCString("<"+m_name+">");
+ return m_impl->inbodyDocs ? m_impl->inbodyDocs->file : QCString("<"+m_impl->name+">");
}
//----------------------
-QCString Definition::getDefFileName() const
+QCString DefinitionImpl::getDefFileName() const
{
return m_impl->defFileName;
}
-QCString Definition::getDefFileExtension() const
+QCString DefinitionImpl::getDefFileExtension() const
{
return m_impl->defFileExt;
}
-bool Definition::isHidden() const
+bool DefinitionImpl::isHidden() const
{
return m_impl->hidden;
}
-bool Definition::isVisibleInProject() const
+bool DefinitionImpl::isVisibleInProject() const
{
return isLinkableInProject() && !m_impl->hidden;
}
-bool Definition::isVisible() const
+bool DefinitionImpl::isVisible() const
{
return isLinkable() && !m_impl->hidden;
}
-bool Definition::isArtificial() const
+bool DefinitionImpl::isArtificial() const
{
return m_impl->isArtificial;
}
-QCString Definition::getReference() const
+QCString DefinitionImpl::getReference() const
{
return m_impl->ref;
}
-bool Definition::isReference() const
+bool DefinitionImpl::isReference() const
{
return !m_impl->ref.isEmpty();
}
-int Definition::getStartBodyLine() const
+int DefinitionImpl::getStartBodyLine() const
{
return m_impl->body ? m_impl->body->startLine : -1;
}
-int Definition::getEndBodyLine() const
+int DefinitionImpl::getEndBodyLine() const
{
return m_impl->body ? m_impl->body->endLine : -1;
}
-FileDef *Definition::getBodyDef() const
+FileDef *DefinitionImpl::getBodyDef() const
{
return m_impl->body ? m_impl->body->fileDef : 0;
}
-GroupList *Definition::partOfGroups() const
+GroupList *DefinitionImpl::partOfGroups() const
{
return m_impl->partOfGroups;
}
-bool Definition::isLinkableViaGroup() const
+bool DefinitionImpl::isLinkableViaGroup() const
{
GroupList *gl = partOfGroups();
if (gl)
@@ -2154,64 +2152,69 @@ bool Definition::isLinkableViaGroup() const
return FALSE;
}
-Definition *Definition::getOuterScope() const
+Definition *DefinitionImpl::getOuterScope() const
{
return m_impl->outerScope;
}
-MemberSDict *Definition::getReferencesMembers() const
+MemberSDict *DefinitionImpl::getReferencesMembers() const
{
return m_impl->sourceRefsDict;
}
-MemberSDict *Definition::getReferencedByMembers() const
+MemberSDict *DefinitionImpl::getReferencedByMembers() const
{
return m_impl->sourceRefByDict;
}
-void Definition::setReference(const char *r)
+void DefinitionImpl::setReference(const char *r)
{
m_impl->ref=r;
}
-SrcLangExt Definition::getLanguage() const
+SrcLangExt DefinitionImpl::getLanguage() const
{
return m_impl->lang;
}
-void Definition::setHidden(bool b)
+void DefinitionImpl::setHidden(bool b)
{
m_impl->hidden = m_impl->hidden || b;
}
-void Definition::setArtificial(bool b)
+void DefinitionImpl::setArtificial(bool b)
{
m_impl->isArtificial = b;
}
-void Definition::setLocalName(const QCString name)
+void DefinitionImpl::setLocalName(const QCString name)
{
m_impl->localName=name;
}
-void Definition::setLanguage(SrcLangExt lang)
+void DefinitionImpl::setLanguage(SrcLangExt lang)
{
m_impl->lang=lang;
}
-void Definition::_setSymbolName(const QCString &name)
+void DefinitionImpl::_setSymbolName(const QCString &name)
{
- m_symbolName=name;
+ m_impl->symbolName=name;
+}
+
+QCString DefinitionImpl::_symbolName() const
+{
+ return m_impl->symbolName;
}
-bool Definition::hasBriefDescription() const
+bool DefinitionImpl::hasBriefDescription() const
{
static bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
return !briefDescription().isEmpty() && briefMemberDesc;
}
-QCString Definition::externalReference(const QCString &relPath) const
+QCString DefinitionImpl::externalReference(const QCString &relPath) const
{
QCString ref = getReference();
if (!ref.isEmpty())
@@ -2233,5 +2236,37 @@ QCString Definition::externalReference(const QCString &relPath) const
return relPath;
}
+QCString DefinitionImpl::name() const
+{
+ return m_impl->name;
+}
+int DefinitionImpl::getDefLine() const
+{
+ return m_impl->defLine;
+}
+
+int DefinitionImpl::getDefColumn() const
+{
+ return m_impl->defColumn;
+}
+
+void DefinitionImpl::setCookie(Cookie *cookie)
+{
+ delete m_impl->cookie;
+ m_impl->cookie = cookie;
+}
+
+Definition::Cookie *DefinitionImpl::cookie() const
+{
+ return m_impl->cookie;
+}
+
+void DefinitionImpl::writeQuickMemberLinks(OutputList &,MemberDef *) const
+{
+}
+
+void DefinitionImpl::writeSummaryLinks(OutputList &)
+{
+}
diff --git a/src/definition.h b/src/definition.h
index c382013..a2307f7 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -23,6 +23,12 @@
#include "types.h"
+#if defined(_WIN32) && !defined(__CYGWIN__)
+// To disable 'inherits via dominance' warnings.
+// See also https://stackoverflow.com/a/14487243/784672
+#pragma warning( disable: 4250 )
+#endif
+
class FileDef;
class OutputList;
class SectionDict;
@@ -33,7 +39,6 @@ class GroupList;
struct ListItemInfo;
struct SectionInfo;
class Definition;
-class DefinitionImpl;
class FTextStream;
/** Data associated with a detailed description. */
@@ -97,35 +102,26 @@ class Definition : public DefinitionIntf
virtual ~Cookie() {}
};
- /*! Create a new definition */
- Definition(
- const char *defFileName,int defLine,int defColumn,
- const char *name,const char *b=0,const char *d=0,
- bool isSymbol=TRUE);
-
- /*! Destroys the definition */
- virtual ~Definition();
-
//-----------------------------------------------------------------------------------
// ---- getters -----
//-----------------------------------------------------------------------------------
/*! Returns the name of the definition */
- const QCString& name() const { return m_name; }
+ virtual QCString name() const = 0;
/*! Returns the name of the definition as it appears in the output */
virtual QCString displayName(bool includeScope=TRUE) const = 0;
/*! Returns the local name without any scope qualifiers. */
- QCString localName() const;
+ virtual QCString localName() const = 0;
/*! Returns the fully qualified name of this definition
*/
- virtual QCString qualifiedName() const;
+ virtual QCString qualifiedName() const = 0;
/*! Returns the name of this definition as it appears in the symbol map.
*/
- QCString symbolName() const;
+ virtual QCString symbolName() const = 0;
/*! Returns the base file name (without extension) of this definition.
* as it is referenced to/written to disk.
@@ -136,68 +132,68 @@ class Definition : public DefinitionIntf
virtual QCString anchor() const = 0;
/*! Returns the name of the source listing of this definition. */
- virtual QCString getSourceFileBase() const;
+ virtual QCString getSourceFileBase() const = 0;
/*! Returns the anchor of the source listing of this definition. */
- virtual QCString getSourceAnchor() const;
+ virtual QCString getSourceAnchor() const = 0;
/*! Returns the detailed description of this definition */
- virtual QCString documentation() const;
+ virtual QCString documentation() const = 0;
/*! Returns the line number at which the detailed documentation was found. */
- int docLine() const;
+ virtual int docLine() const = 0;
/*! Returns the file in which the detailed documentation block was found.
* This can differ from getDefFileName().
*/
- QCString docFile() const;
+ virtual QCString docFile() const = 0;
/*! Returns the brief description of this definition. This can include commands. */
- virtual QCString briefDescription(bool abbreviate=FALSE) const;
+ virtual QCString briefDescription(bool abbreviate=FALSE) const = 0;
/*! Returns a plain text version of the brief description suitable for use
* as a tool tip.
*/
- QCString briefDescriptionAsTooltip() const;
+ virtual QCString briefDescriptionAsTooltip() const = 0;
/*! Returns the line number at which the brief description was found. */
- int briefLine() const;
+ virtual int briefLine() const = 0;
/*! Returns the documentation found inside the body of a member */
- QCString inbodyDocumentation() const;
+ virtual QCString inbodyDocumentation() const = 0;
/*! Returns the file in which the in body documentation was found */
- QCString inbodyFile() const;
+ virtual QCString inbodyFile() const = 0;
/*! Returns the line at which the first in body documentation
part was found */
- int inbodyLine() const;
+ virtual int inbodyLine() const = 0;
/*! Returns the file in which the brief description was found.
* This can differ from getDefFileName().
*/
- QCString briefFile() const;
+ virtual QCString briefFile() const = 0;
/*! returns the file in which this definition was found */
- QCString getDefFileName() const;
+ virtual QCString getDefFileName() const = 0;
/*! returns the extension of the file in which this definition was found */
- QCString getDefFileExtension() const;
+ virtual QCString getDefFileExtension() const = 0;
/*! returns the line number at which the definition was found */
- int getDefLine() const { return m_defLine; }
+ virtual int getDefLine() const = 0;
/*! returns the column number at which the definition was found */
- int getDefColumn() const { return m_defColumn; }
+ virtual int getDefColumn() const = 0;
/*! Returns TRUE iff the definition is documented
* (which could be generated documentation)
* @see hasUserDocumentation()
*/
- virtual bool hasDocumentation() const;
+ virtual bool hasDocumentation() const = 0;
/*! Returns TRUE iff the definition is documented by the user. */
- virtual bool hasUserDocumentation() const;
+ virtual bool hasUserDocumentation() const = 0;
/*! Returns TRUE iff it is possible to link to this item within this
* project.
@@ -212,175 +208,152 @@ class Definition : public DefinitionIntf
/*! Returns TRUE iff the name is part of this project and
* may appear in the output
*/
- virtual bool isVisibleInProject() const;
+ virtual bool isVisibleInProject() const = 0;
/*! Returns TRUE iff the name may appear in the output */
- virtual bool isVisible() const;
+ virtual bool isVisible() const = 0;
/*! Returns TRUE iff this item is supposed to be hidden from the output. */
- bool isHidden() const;
+ virtual bool isHidden() const = 0;
/*! returns TRUE if this entity was artificially introduced, for
* instance because it is used to show a template instantiation relation.
*/
- bool isArtificial() const;
+ virtual bool isArtificial() const = 0;
/*! If this definition was imported via a tag file, this function
* returns the tagfile for the external project. This can be
* translated into an external link target via
* Doxygen::tagDestinationDict
*/
- virtual QCString getReference() const;
+ virtual QCString getReference() const = 0;
/*! Returns TRUE if this definition is imported via a tag file. */
- virtual bool isReference() const;
+ virtual bool isReference() const = 0;
/*! Convenience method to return a resolved external link */
- QCString externalReference(const QCString &relPath) const;
+ virtual QCString externalReference(const QCString &relPath) const = 0;
/*! Returns the first line of the body of this item (applicable to classes and
* functions).
*/
- int getStartBodyLine() const;
+ virtual int getStartBodyLine() const = 0;
/*! Returns the last line of the body of this item (applicable to classes and
* functions).
*/
- int getEndBodyLine() const;
+ virtual int getEndBodyLine() const = 0;
/*! Returns the file in which the body of this item is located or 0 if no
* body is available.
*/
- FileDef *getBodyDef() const;
+ virtual FileDef *getBodyDef() const = 0;
/** Returns the programming language this definition was written in. */
- SrcLangExt getLanguage() const;
+ virtual SrcLangExt getLanguage() const = 0;
- GroupList *partOfGroups() const;
- bool isLinkableViaGroup() const;
+ virtual GroupList *partOfGroups() const = 0;
+ virtual bool isLinkableViaGroup() const = 0;
- QList<ListItemInfo> *xrefListItems() const;
+ virtual QList<ListItemInfo> *xrefListItems() const = 0;
- virtual Definition *findInnerCompound(const char *name) const ;
- virtual Definition *getOuterScope() const;
+ virtual Definition *findInnerCompound(const char *name) const = 0;
+ virtual Definition *getOuterScope() const = 0;
- MemberSDict *getReferencesMembers() const;
- MemberSDict *getReferencedByMembers() const;
+ virtual MemberSDict *getReferencesMembers() const = 0;
+ virtual MemberSDict *getReferencedByMembers() const = 0;
- bool hasSections() const;
- bool hasSources() const;
+ virtual bool hasSections() const = 0;
+ virtual bool hasSources() const = 0;
/** returns TRUE if this class has a brief description */
- bool hasBriefDescription() const;
+ virtual bool hasBriefDescription() const = 0;
- QCString id() const;
+ virtual QCString id() const = 0;
/** returns the section dictionary, only of importance for pagedef */
- SectionDict * getSectionDict(void);
+ virtual SectionDict * getSectionDict(void) = 0;
//-----------------------------------------------------------------------------------
// ---- setters -----
//-----------------------------------------------------------------------------------
/*! Sets a new \a name for the definition */
- virtual void setName(const char *name);
+ virtual void setName(const char *name) = 0;
/*! Sets a unique id for the symbol. Used for libclang integration. */
- void setId(const char *name);
+ virtual void setId(const char *name) = 0;
/*! Set a new file name and position */
- void setDefFile(const QCString& df,int defLine,int defColumn);
+ virtual void setDefFile(const QCString& df,int defLine,int defColumn) = 0;
/*! Sets the documentation of this definition to \a d. */
- virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
+ virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE) = 0;
/*! Sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available.
*/
- virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine) = 0;
/*! Set the documentation that was found inside the body of an item.
* If there was already some documentation set, the new documentation
* will be appended.
*/
- virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine);
+ virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine) = 0;
/*! Sets the tag file id via which this definition was imported. */
- void setReference(const char *r);
+ virtual void setReference(const char *r) = 0;
/*! Add the list of anchors that mark the sections that are found in the
* documentation.
*/
- void addSectionsToDefinition(QList<SectionInfo> *anchorList);
+ virtual void addSectionsToDefinition(QList<SectionInfo> *anchorList) = 0;
// source references
- void setBodySegment(int bls,int ble);
- void setBodyDef(FileDef *fd);
- void addSourceReferencedBy(MemberDef *d);
- void addSourceReferences(MemberDef *d);
+ virtual void setBodySegment(int bls,int ble) = 0;
+ virtual void setBodyDef(FileDef *fd) = 0;
+ virtual void addSourceReferencedBy(MemberDef *d) = 0;
+ virtual void addSourceReferences(MemberDef *d) = 0;
- void setRefItems(const QList<ListItemInfo> *sli);
- void mergeRefItems(Definition *d);
- virtual void addInnerCompound(Definition *d);
- virtual void setOuterScope(Definition *d);
+ virtual void setRefItems(const QList<ListItemInfo> *sli) = 0;
+ virtual void mergeRefItems(Definition *d) = 0;
+ virtual void addInnerCompound(Definition *d) = 0;
+ virtual void setOuterScope(Definition *d) = 0;
- virtual void setHidden(bool b);
+ virtual void setHidden(bool b) = 0;
- void setArtificial(bool b);
- void setLanguage(SrcLangExt lang);
+ virtual void setArtificial(bool b) = 0;
+ virtual void setLanguage(SrcLangExt lang) = 0;
//-----------------------------------------------------------------------------------
// --- actions ----
//-----------------------------------------------------------------------------------
- void writeSourceDef(OutputList &ol,const char *scopeName);
- void writeInlineCode(OutputList &ol,const char *scopeName);
- void writeSourceRefs(OutputList &ol,const char *scopeName);
- void writeSourceReffedBy(OutputList &ol,const char *scopeName);
- void makePartOfGroup(GroupDef *gd);
- //void writePathFragment(OutputList &ol) const;
- void writeNavigationPath(OutputList &ol) const;
- QCString navigationPathAsString() const;
- virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const {}
- virtual void writeSummaryLinks(OutputList &) {}
- QCString pathFragment() const;
+ virtual void writeSourceDef(OutputList &ol,const char *scopeName) = 0;
+ virtual void writeInlineCode(OutputList &ol,const char *scopeName) = 0;
+ virtual void writeSourceRefs(OutputList &ol,const char *scopeName) = 0;
+ virtual void writeSourceReffedBy(OutputList &ol,const char *scopeName) = 0;
+ virtual void makePartOfGroup(GroupDef *gd) = 0;
+ virtual void writeNavigationPath(OutputList &ol) const = 0;
+ virtual QCString navigationPathAsString() const = 0;
+ virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const = 0;
+ virtual void writeSummaryLinks(OutputList &) = 0;
+ virtual QCString pathFragment() const = 0;
/*! Writes the documentation anchors of the definition to
* the Doxygen::tagFile stream.
*/
- void writeDocAnchorsToTagFile(FTextStream &);
- void setLocalName(const QCString name);
-
- void addSectionsToIndex();
- void writeToc(OutputList &ol, const LocalToc &lt);
-
- void setCookie(Cookie *cookie) { delete m_cookie; m_cookie = cookie; }
- Cookie *cookie() const { return m_cookie; }
-
- protected:
-
- Definition(const Definition &d);
-
- private:
- static void addToMap(const char *name,Definition *d);
- static void removeFromMap(Definition *d);
-
- void _setSymbolName(const QCString &name);
-
- int _getXRefListId(const char *listName) const;
- void _writeSourceRefList(OutputList &ol,const char *scopeName,
- const QCString &text,MemberSDict *members,bool);
- void _setBriefDescription(const char *b,const char *briefFile,int briefLine);
- void _setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace,bool atTop);
- void _setInbodyDocumentation(const char *d,const char *docFile,int docLine);
- bool _docsAlreadyAdded(const QCString &doc,QCString &sigList);
- DefinitionImpl *m_impl; // internal structure holding all private data
- QCString m_name;
- bool m_isSymbol;
- QCString m_symbolName;
- int m_defLine;
- int m_defColumn;
- Cookie *m_cookie;
+ virtual void writeDocAnchorsToTagFile(FTextStream &) = 0;
+ virtual void setLocalName(const QCString name) = 0;
+
+ virtual void addSectionsToIndex() = 0;
+ virtual void writeToc(OutputList &ol, const LocalToc &lt) = 0;
+
+ virtual void setCookie(Cookie *cookie) = 0;
+ virtual Cookie *cookie() const = 0;
+
+ virtual void _setSymbolName(const QCString &name) = 0;
+ virtual QCString _symbolName() const = 0;
};
/** A list of Definition objects. */
diff --git a/src/definitionimpl.h b/src/definitionimpl.h
new file mode 100644
index 0000000..864d35b
--- /dev/null
+++ b/src/definitionimpl.h
@@ -0,0 +1,144 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2019 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 DEFINITIONIMPL_H
+#define DEFINITIONIMPL_H
+
+#include "definition.h"
+
+class DefinitionImpl : virtual public Definition
+{
+ public:
+ /*! Create a new definition */
+ DefinitionImpl(
+ const char *defFileName,int defLine,int defColumn,
+ const char *name,const char *b=0,const char *d=0,
+ bool isSymbol=TRUE);
+ virtual ~DefinitionImpl();
+
+ virtual QCString name() const;
+ virtual QCString displayName(bool includeScope=TRUE) const = 0;
+ virtual QCString localName() const;
+ virtual QCString qualifiedName() const;
+ virtual QCString symbolName() const;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual QCString getSourceFileBase() const;
+ virtual QCString getSourceAnchor() const;
+ virtual QCString documentation() const;
+ virtual int docLine() const;
+ virtual QCString docFile() const;
+ virtual QCString briefDescription(bool abbreviate=FALSE) const;
+ virtual QCString briefDescriptionAsTooltip() const;
+ virtual int briefLine() const;
+ virtual QCString inbodyDocumentation() const;
+ virtual QCString inbodyFile() const;
+ virtual int inbodyLine() const;
+ virtual QCString briefFile() const;
+ virtual QCString getDefFileName() const;
+ virtual QCString getDefFileExtension() const;
+ virtual int getDefLine() const;
+ virtual int getDefColumn() const;
+ virtual bool hasDocumentation() const;
+ virtual bool hasUserDocumentation() const;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual bool isVisibleInProject() const;
+ virtual bool isVisible() const;
+ virtual bool isHidden() const;
+ virtual bool isArtificial() const;
+ virtual QCString getReference() const;
+ virtual bool isReference() const;
+ virtual QCString externalReference(const QCString &relPath) const;
+ virtual int getStartBodyLine() const;
+ virtual int getEndBodyLine() const;
+ virtual FileDef *getBodyDef() const;
+ virtual SrcLangExt getLanguage() const;
+ virtual GroupList *partOfGroups() const;
+ virtual bool isLinkableViaGroup() const;
+ virtual QList<ListItemInfo> *xrefListItems() const;
+ virtual Definition *findInnerCompound(const char *name) const;
+ virtual Definition *getOuterScope() const;
+ virtual MemberSDict *getReferencesMembers() const;
+ virtual MemberSDict *getReferencedByMembers() const;
+ virtual bool hasSections() const;
+ virtual bool hasSources() const;
+ virtual bool hasBriefDescription() const;
+ virtual QCString id() const;
+ virtual SectionDict * getSectionDict(void);
+ virtual void setName(const char *name);
+ virtual void setId(const char *name);
+ virtual void setDefFile(const QCString& df,int defLine,int defColumn);
+ virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
+ virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine);
+ virtual void setReference(const char *r);
+ virtual void addSectionsToDefinition(QList<SectionInfo> *anchorList);
+ virtual void setBodySegment(int bls,int ble);
+ virtual void setBodyDef(FileDef *fd);
+ virtual void addSourceReferencedBy(MemberDef *d);
+ virtual void addSourceReferences(MemberDef *d);
+ virtual void setRefItems(const QList<ListItemInfo> *sli);
+ virtual void mergeRefItems(Definition *d);
+ virtual void addInnerCompound(Definition *d);
+ virtual void setOuterScope(Definition *d);
+ virtual void setHidden(bool b);
+ virtual void setArtificial(bool b);
+ virtual void setLanguage(SrcLangExt lang);
+ virtual void writeSourceDef(OutputList &ol,const char *scopeName);
+ virtual void writeInlineCode(OutputList &ol,const char *scopeName);
+ virtual void writeSourceRefs(OutputList &ol,const char *scopeName);
+ virtual void writeSourceReffedBy(OutputList &ol,const char *scopeName);
+ virtual void makePartOfGroup(GroupDef *gd);
+ virtual void writeNavigationPath(OutputList &ol) const;
+ virtual QCString navigationPathAsString() const;
+ virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const;
+ virtual void writeSummaryLinks(OutputList &);
+ virtual QCString pathFragment() const;
+ virtual void writeDocAnchorsToTagFile(FTextStream &);
+ virtual void setLocalName(const QCString name);
+ virtual void addSectionsToIndex();
+ virtual void writeToc(OutputList &ol, const LocalToc &lt);
+ virtual void setCookie(Cookie *cookie);
+ virtual Cookie *cookie() const;
+
+ protected:
+
+ DefinitionImpl(const DefinitionImpl &d);
+
+ private:
+ static void addToMap(const char *name,Definition *d);
+ static void removeFromMap(Definition *d);
+
+ virtual void _setSymbolName(const QCString &name);
+ virtual QCString _symbolName() const ;
+
+ int _getXRefListId(const char *listName) const;
+ void _writeSourceRefList(OutputList &ol,const char *scopeName,
+ const QCString &text,MemberSDict *members,bool);
+ void _setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ void _setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace,bool atTop);
+ void _setInbodyDocumentation(const char *d,const char *docFile,int docLine);
+ bool _docsAlreadyAdded(const QCString &doc,QCString &sigList);
+
+ // PIMPL idiom
+ class IMPL;
+ IMPL *m_impl; // internal structure holding all private data
+};
+
+
+#endif
diff --git a/src/diagram.cpp b/src/diagram.cpp
index 7e2fe15..808191e 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -1020,7 +1020,7 @@ void clearVisitFlags()
ClassDef *cd;
for (;(cd=cli.current());++cli)
{
- cd->visited=FALSE;
+ cd->setVisited(FALSE);
}
}
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 7294e4f..ae3a6a3 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -12,13 +12,85 @@
#include "ftextstream.h"
#include "config.h"
#include "docparser.h"
+#include "definitionimpl.h"
+
+//----------------------------------------------------------------------
+
+class DirDefImpl : public DefinitionImpl, public DirDef
+{
+ public:
+ DirDefImpl(const char *path);
+ virtual ~DirDefImpl();
+
+ virtual DefType definitionType() const { return TypeDir; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual QCString displayName(bool=TRUE) const { return m_dispName; }
+ virtual const QCString &shortName() const { return m_shortName; }
+ virtual void addSubDir(DirDef *subdir);
+ virtual FileList * getFiles() const { return m_fileList; }
+ virtual void addFile(FileDef *fd);
+ virtual const DirList &subDirs() const { return m_subdirs; }
+ virtual bool isCluster() const { return m_subdirs.count()>0; }
+ virtual int level() const { return m_level; }
+ virtual DirDef *parent() const { return m_parent; }
+ virtual int dirCount() const { return m_dirCount; }
+ virtual const QDict<UsedDir> *usedDirs() const { return m_usedDirs; }
+ virtual bool isParentOf(DirDef *dir) const;
+ virtual bool depGraphIsTrivial() const;
+ virtual QCString shortTitle() const;
+ virtual bool hasDetailedDescription() const;
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeTagFile(FTextStream &t);
+ virtual void setDiskName(const QCString &name) { m_diskName = name; }
+ virtual void sort();
+ virtual void setParent(DirDef *parent);
+ virtual void setLevel();
+ virtual void addUsesDependency(DirDef *usedDir,FileDef *srcFd,
+ FileDef *dstFd,bool inherited);
+ virtual void computeDependencies();
+
+ public:
+ static DirDef *mergeDirectoryInTree(const QCString &path);
+
+ private:
+
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeDirectoryGraph(OutputList &ol);
+ void writeSubDirList(OutputList &ol);
+ void writeFileList(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+
+ static DirDef *createNewDir(const char *path);
+ static bool matchPath(const QCString &path,QStrList &l);
+
+ DirList m_subdirs;
+ QCString m_dispName;
+ QCString m_shortName;
+ QCString m_diskName;
+ FileList *m_fileList; // list of files in the group
+ int m_dirCount;
+ int m_level;
+ DirDef *m_parent;
+ QDict<UsedDir> *m_usedDirs;
+};
+
+DirDef *createDirDef(const char *path)
+{
+ return new DirDefImpl(path);
+}
+
//----------------------------------------------------------------------
// method implementation
static int g_dirCount=0;
-DirDef::DirDef(const char *path) : Definition(path,1,1,path), visited(FALSE)
+DirDefImpl::DirDefImpl(const char *path) : DefinitionImpl(path,1,1,path)
{
bool fullPathNames = Config_getBool(FULL_PATH_NAMES);
// get display name (stipping the paths mentioned in STRIP_FROM_PATH)
@@ -49,36 +121,41 @@ DirDef::DirDef(const char *path) : Definition(path,1,1,path), visited(FALSE)
m_parent=0;
}
-DirDef::~DirDef()
+DirDefImpl::~DirDefImpl()
{
delete m_fileList;
delete m_usedDirs;
}
-bool DirDef::isLinkableInProject() const
+bool DirDefImpl::isLinkableInProject() const
{
return !isReference();
}
-bool DirDef::isLinkable() const
+bool DirDefImpl::isLinkable() const
{
return isReference() || isLinkableInProject();
}
-void DirDef::addSubDir(DirDef *subdir)
+void DirDefImpl::addSubDir(DirDef *subdir)
{
m_subdirs.append(subdir);
subdir->setOuterScope(this);
- subdir->m_parent=this;
+ subdir->setParent(this);
+}
+
+void DirDefImpl::setParent(DirDef *p)
+{
+ m_parent=p;
}
-void DirDef::addFile(FileDef *fd)
+void DirDefImpl::addFile(FileDef *fd)
{
m_fileList->append(fd);
fd->setDirDef(this);
}
-void DirDef::sort()
+void DirDefImpl::sort()
{
m_subdirs.sort();
m_fileList->sort();
@@ -116,14 +193,14 @@ static QCString encodeDirName(const QCString &anchor)
// return result;
}
-QCString DirDef::getOutputFileBase() const
+QCString DirDefImpl::getOutputFileBase() const
{
- //printf("DirDef::getOutputFileBase() %s->dir_%s\n",
+ //printf("DirDefImpl::getOutputFileBase() %s->dir_%s\n",
// m_diskName.data(),encodeDirName(m_diskName).data());
return "dir_"+encodeDirName(m_diskName);
}
-void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
+void DirDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) ||
!documentation().isEmpty())
@@ -168,7 +245,7 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
}
}
-void DirDef::writeBriefDescription(OutputList &ol)
+void DirDefImpl::writeBriefDescription(OutputList &ol)
{
if (hasBriefDescription())
{
@@ -205,7 +282,7 @@ void DirDef::writeBriefDescription(OutputList &ol)
ol.writeSynopsis();
}
-void DirDef::writeDirectoryGraph(OutputList &ol)
+void DirDefImpl::writeDirectoryGraph(OutputList &ol)
{
// write graph dependency graph
if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT))
@@ -225,7 +302,7 @@ void DirDef::writeDirectoryGraph(OutputList &ol)
}
}
-void DirDef::writeSubDirList(OutputList &ol)
+void DirDefImpl::writeSubDirList(OutputList &ol)
{
int numSubdirs = 0;
QListIterator<DirDef> it(m_subdirs);
@@ -275,7 +352,7 @@ void DirDef::writeSubDirList(OutputList &ol)
}
}
-void DirDef::writeFileList(OutputList &ol)
+void DirDefImpl::writeFileList(OutputList &ol)
{
int numFiles = 0;
QListIterator<FileDef> it(*m_fileList);
@@ -347,28 +424,28 @@ void DirDef::writeFileList(OutputList &ol)
}
}
-void DirDef::startMemberDeclarations(OutputList &ol)
+void DirDefImpl::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
-void DirDef::endMemberDeclarations(OutputList &ol)
+void DirDefImpl::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
-QCString DirDef::shortTitle() const
+QCString DirDefImpl::shortTitle() const
{
return theTranslator->trDirReference(m_shortName);
}
-bool DirDef::hasDetailedDescription() const
+bool DirDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
return (!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty();
}
-void DirDef::writeTagFile(FTextStream &tagFile)
+void DirDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <compound kind=\"dir\">" << endl;
tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl;
@@ -415,7 +492,7 @@ void DirDef::writeTagFile(FTextStream &tagFile)
tagFile << " </compound>" << endl;
}
-void DirDef::writeDocumentation(OutputList &ol)
+void DirDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
ol.pushGeneratorState();
@@ -529,7 +606,7 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState();
}
-void DirDef::setLevel()
+void DirDefImpl::setLevel()
{
if (m_level==-1) // level not set before
{
@@ -549,7 +626,7 @@ void DirDef::setLevel()
/** Add as "uses" dependency between \a this dir and \a dir,
* that was caused by a dependency on file \a fd.
*/
-void DirDef::addUsesDependency(DirDef *dir,FileDef *srcFd,
+void DirDefImpl::addUsesDependency(DirDef *dir,FileDef *srcFd,
FileDef *dstFd,bool inherited)
{
if (this==dir) return; // do not add self-dependencies
@@ -603,7 +680,7 @@ void DirDef::addUsesDependency(DirDef *dir,FileDef *srcFd,
/** Computes the dependencies between directories
*/
-void DirDef::computeDependencies()
+void DirDefImpl::computeDependencies()
{
FileList *fl = m_fileList;
if (fl)
@@ -649,7 +726,7 @@ void DirDef::computeDependencies()
}
}
-bool DirDef::isParentOf(DirDef *dir) const
+bool DirDefImpl::isParentOf(DirDef *dir) const
{
if (dir->parent()==this) // this is a parent of dir
return TRUE;
@@ -659,7 +736,7 @@ bool DirDef::isParentOf(DirDef *dir) const
return FALSE;
}
-bool DirDef::depGraphIsTrivial() const
+bool DirDefImpl::depGraphIsTrivial() const
{
return m_usedDirs->count()==0;
}
@@ -704,21 +781,21 @@ FilePair *UsedDir::findFilePair(const char *name)
return n.isEmpty() ? 0 : m_filePairs.find(n);
}
-DirDef *DirDef::createNewDir(const char *path)
+DirDef *DirDefImpl::createNewDir(const char *path)
{
ASSERT(path!=0);
DirDef *dir = Doxygen::directories->find(path);
if (dir==0) // new dir
{
//printf("Adding new dir %s\n",path);
- dir = new DirDef(path);
+ dir = createDirDef(path);
//printf("createNewDir %s short=%s\n",path,dir->shortName().data());
Doxygen::directories->append(path,dir);
}
return dir;
}
-bool DirDef::matchPath(const QCString &path,QStrList &l)
+bool DirDefImpl::matchPath(const QCString &path,QStrList &l)
{
const char *s=l.first();
while (s)
@@ -736,9 +813,9 @@ bool DirDef::matchPath(const QCString &path,QStrList &l)
/*! strip part of \a path if it matches
* one of the paths in the Config_getList(STRIP_FROM_PATH) list
*/
-DirDef *DirDef::mergeDirectoryInTree(const QCString &path)
+DirDef *DirDefImpl::mergeDirectoryInTree(const QCString &path)
{
- //printf("DirDef::mergeDirectoryInTree(%s)\n",path.data());
+ //printf("DirDefImpl::mergeDirectoryInTree(%s)\n",path.data());
int p=0,i=0;
DirDef *dir=0;
while ((i=path.find('/',p))!=-1)
@@ -941,7 +1018,7 @@ void buildDirectories()
DirDef *dir;
if ((dir=Doxygen::directories->find(fd->getPath()))==0) // new directory
{
- dir = DirDef::mergeDirectoryInTree(fd->getPath());
+ dir = DirDefImpl::mergeDirectoryInTree(fd->getPath());
}
if (dir && !fd->isDocumentationFile()) dir->addFile(fd);
}
@@ -967,7 +1044,7 @@ void buildDirectories()
if (parent)
{
parent->addSubDir(dir);
- //printf("DirDef::addSubdir(): Adding subdir\n%s to\n%s\n",
+ //printf("DirDefImpl::addSubdir(): Adding subdir\n%s to\n%s\n",
// dir->displayName().data(), parent->displayName().data());
}
}
diff --git a/src/dirdef.h b/src/dirdef.h
index 2fb04f5..2bca93e 100644
--- a/src/dirdef.h
+++ b/src/dirdef.h
@@ -41,70 +41,44 @@ class DirList : public QList<DirDef>
};
/** A model of a directory symbol. */
-class DirDef : public Definition
+class DirDef : virtual public Definition
{
public:
- DirDef(const char *path);
- virtual ~DirDef();
+ virtual ~DirDef() {}
// accessors
- DefType definitionType() const { return TypeDir; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- bool isLinkableInProject() const;
- bool isLinkable() const;
- QCString displayName(bool=TRUE) const { return m_dispName; }
- const QCString &shortName() const { return m_shortName; }
- void addSubDir(DirDef *subdir);
- FileList * getFiles() const { return m_fileList; }
- void addFile(FileDef *fd);
- const DirList &subDirs() const { return m_subdirs; }
- bool isCluster() const { return m_subdirs.count()>0; }
- int level() const { return m_level; }
- DirDef *parent() const { return m_parent; }
- int dirCount() const { return m_dirCount; }
- const QDict<UsedDir> *usedDirs() const { return m_usedDirs; }
- bool isParentOf(DirDef *dir) const;
- bool depGraphIsTrivial() const;
- QCString shortTitle() const;
- bool hasDetailedDescription() const;
+ virtual DefType definitionType() const = 0;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual const QCString &shortName() const = 0;
+ virtual void addSubDir(DirDef *subdir) = 0;
+ virtual FileList * getFiles() const = 0;
+ virtual void addFile(FileDef *fd) = 0;
+ virtual const DirList &subDirs() const = 0;
+ virtual bool isCluster() const = 0;
+ virtual int level() const = 0;
+ virtual DirDef *parent() const = 0;
+ virtual int dirCount() const = 0;
+ virtual const QDict<UsedDir> *usedDirs() const = 0;
+ virtual bool isParentOf(DirDef *dir) const = 0;
+ virtual bool depGraphIsTrivial() const = 0;
+ virtual QCString shortTitle() const = 0;
+ virtual bool hasDetailedDescription() const = 0;
// generate output
- void writeDocumentation(OutputList &ol);
- void writeTagFile(FTextStream &t);
-
- static DirDef *mergeDirectoryInTree(const QCString &path);
- bool visited;
- void setDiskName(const QCString &name) { m_diskName = name; }
- void sort();
-
- private:
- friend void computeDirDependencies();
-
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void writeDirectoryGraph(OutputList &ol);
- void writeSubDirList(OutputList &ol);
- void writeFileList(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
-
- void setLevel();
- static DirDef *createNewDir(const char *path);
- static bool matchPath(const QCString &path,QStrList &l);
- void addUsesDependency(DirDef *usedDir,FileDef *srcFd,
- FileDef *dstFd,bool inherited);
- void computeDependencies();
-
- DirList m_subdirs;
- QCString m_dispName;
- QCString m_shortName;
- QCString m_diskName;
- FileList *m_fileList; // list of files in the group
- int m_dirCount;
- int m_level;
- DirDef *m_parent;
- QDict<UsedDir> *m_usedDirs;
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeTagFile(FTextStream &t) = 0;
+
+ virtual void setDiskName(const QCString &name) = 0;
+ virtual void sort() = 0;
+ virtual void setParent(DirDef *parent) = 0;
+ virtual void setLevel() = 0;
+ virtual void addUsesDependency(DirDef *usedDir,FileDef *srcFd,
+ FileDef *dstFd,bool inherited) = 0;
+ virtual void computeDependencies() = 0;
};
/** Class representing a pair of FileDef objects */
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index 011ef12..adf36b0 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -153,7 +153,7 @@ void DocbookCodeGenerator::writeCodeLink(const char *ref,const char *file,
{
Docbook_DB(("(writeCodeLink)\n"));
writeDocbookLink(m_t,ref,file,anchor,name,tooltip);
- m_col+=strlen(name);
+ m_col+=(int)strlen(name);
}
void DocbookCodeGenerator::writeCodeLinkLine(const char *ref,const char *file,
const char *anchor,const char *name,
@@ -164,7 +164,7 @@ void DocbookCodeGenerator::writeCodeLinkLine(const char *ref,const char *file,
m_t << "_1l";
writeDocbookString(m_t,name);
m_t << "\"/>";
- m_col+=strlen(name);
+ m_col+=(int)strlen(name);
}
void DocbookCodeGenerator::writeTooltip(const char *, const DocLinkInfo &, const char *,
const char *, const SourceLinkInfo &, const SourceLinkInfo &
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index c36bb00..64425c6 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -386,13 +386,14 @@ DB_VIS_C
{
m_t << "<literallayout><computeroutput>";
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
- inc->exampleFile(), &fd);
+ inc->exampleFile(), fd);
+ delete fd;
m_t << "</computeroutput></literallayout>";
}
break;
@@ -407,9 +408,8 @@ DB_VIS_C
m_t << "</computeroutput></literallayout>";
break;
case DocInclude::DontInclude:
- break;
+ case DocInclude::DontIncWithLines:
case DocInclude::HtmlInclude:
- break;
case DocInclude::LatexInclude:
break;
case DocInclude::VerbInclude:
@@ -432,7 +432,7 @@ DB_VIS_C
case DocInclude::SnipWithLines:
{
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "<literallayout><computeroutput>";
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
@@ -441,13 +441,14 @@ DB_VIS_C
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
m_t << "</computeroutput></literallayout>";
}
break;
@@ -477,10 +478,25 @@ DB_VIS_C
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),
op->text(),langExt,op->isExample(),
- op->exampleFile());
+ op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
@@ -951,7 +967,7 @@ DB_VIS_C
if (m_hide) return;
m_t << "<informaltable frame=\"all\">" << endl;
m_t << " <tgroup cols=\"" << t->numColumns() << "\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
- for (int i = 0; i <t->numColumns(); i++)
+ for (uint i = 0; i <t->numColumns(); i++)
{
// do something with colwidth based of cell width specification (be aware of possible colspan in the header)?
m_t << " <colspec colname='c" << i+1 << "'/>\n";
diff --git a/src/docparser.cpp b/src/docparser.cpp
index aff7411..1c8479b 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -112,6 +112,8 @@ static QCString g_includeFileName;
static QCString g_includeFileText;
static uint g_includeFileOffset;
static uint g_includeFileLength;
+static uint g_includeFileLine;
+static bool g_includeFileShowLineNo;
/** Parser's context to store all global variables.
@@ -143,6 +145,8 @@ struct DocParserContext
QCString includeFileText;
uint includeFileOffset;
uint includeFileLength;
+ uint includeFileLine;
+ bool includeFileLineNo;
TokenInfo *token;
};
@@ -190,6 +194,8 @@ static void docParserPushContext(bool saveParamInfo=TRUE)
ctx->includeFileText = g_includeFileText;
ctx->includeFileOffset = g_includeFileOffset;
ctx->includeFileLength = g_includeFileLength;
+ ctx->includeFileLine = g_includeFileLine;
+ ctx->includeFileLineNo = g_includeFileShowLineNo;
ctx->token = g_token;
g_token = new TokenInfo;
@@ -228,6 +234,8 @@ static void docParserPopContext(bool keepParamInfo=FALSE)
g_includeFileText = ctx->includeFileText;
g_includeFileOffset = ctx->includeFileOffset;
g_includeFileLength = ctx->includeFileLength;
+ g_includeFileLine = ctx->includeFileLine;
+ g_includeFileShowLineNo = ctx->includeFileLineNo;
delete g_token;
g_token = ctx->token;
@@ -1157,7 +1165,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children,bool ignor
}
else if (compound->definitionType()==Definition::TypeGroup)
{
- name=((GroupDef*)compound)->groupTitle();
+ name=(dynamic_cast<GroupDef*>(compound))->groupTitle();
}
children.append(new
DocLinkedWord(parent,name,
@@ -1169,7 +1177,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children,bool ignor
);
}
else if (compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
+ (dynamic_cast<FileDef*>(compound))->generateSourceFile()
) // undocumented file that has source code we can link to
{
children.append(new
@@ -2004,6 +2012,8 @@ void DocInclude::parse()
DBG(("DocInclude::parse(file=%s,text=%s)\n",qPrint(m_file),qPrint(m_text)));
switch(m_type)
{
+ case DontIncWithLines:
+ // fall through
case IncWithLines:
// fall through
case Include:
@@ -2014,6 +2024,8 @@ void DocInclude::parse()
g_includeFileText = m_text;
g_includeFileOffset = 0;
g_includeFileLength = m_text.length();
+ g_includeFileLine = 0;
+ g_includeFileShowLineNo = (m_type == DontIncWithLines || m_type == IncWithLines);
//printf("g_includeFile=<<%s>>\n",g_includeFileText.data());
break;
case VerbInclude:
@@ -2048,10 +2060,18 @@ void DocInclude::parse()
void DocIncOperator::parse()
{
+ if (g_includeFileName.isEmpty())
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,
+ "No previous '\\include' or \\dontinclude' command for '\\%s' present",
+ typeAsString());
+ }
+
m_includeFileName = g_includeFileName;
const char *p = g_includeFileText;
uint l = g_includeFileLength;
uint o = g_includeFileOffset;
+ uint il = g_includeFileLine;
DBG(("DocIncOperator::parse() text=%s off=%d len=%d\n",qPrint(p),o,l));
uint so = o,bo;
bool nonEmpty = FALSE;
@@ -2063,6 +2083,7 @@ void DocIncOperator::parse()
char c = p[o];
if (c=='\n')
{
+ g_includeFileLine++;
if (nonEmpty) break; // we have a pattern to match
so=o+1; // no pattern, skip empty line
}
@@ -2074,10 +2095,12 @@ void DocIncOperator::parse()
}
if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
{
+ m_line = il;
m_text = g_includeFileText.mid(so,o-so);
DBG(("DocIncOperator::parse() Line: %s\n",qPrint(m_text)));
}
g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
+ m_showLineNo = g_includeFileShowLineNo;
break;
case SkipLine:
while (o<l)
@@ -2088,6 +2111,7 @@ void DocIncOperator::parse()
char c = p[o];
if (c=='\n')
{
+ g_includeFileLine++;
if (nonEmpty) break; // we have a pattern to match
so=o+1; // no pattern, skip empty line
}
@@ -2099,6 +2123,7 @@ void DocIncOperator::parse()
}
if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
{
+ m_line = il;
m_text = g_includeFileText.mid(so,o-so);
DBG(("DocIncOperator::parse() SkipLine: %s\n",qPrint(m_text)));
break;
@@ -2106,6 +2131,7 @@ void DocIncOperator::parse()
o++; // skip new line
}
g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
+ m_showLineNo = g_includeFileShowLineNo;
break;
case Skip:
while (o<l)
@@ -2116,6 +2142,7 @@ void DocIncOperator::parse()
char c = p[o];
if (c=='\n')
{
+ g_includeFileLine++;
if (nonEmpty) break; // we have a pattern to match
so=o+1; // no pattern, skip empty line
}
@@ -2132,6 +2159,7 @@ void DocIncOperator::parse()
o++; // skip new line
}
g_includeFileOffset = so; // set pointer to start of new line
+ m_showLineNo = g_includeFileShowLineNo;
break;
case Until:
bo=o;
@@ -2143,6 +2171,7 @@ void DocIncOperator::parse()
char c = p[o];
if (c=='\n')
{
+ g_includeFileLine++;
if (nonEmpty) break; // we have a pattern to match
so=o+1; // no pattern, skip empty line
}
@@ -2154,6 +2183,7 @@ void DocIncOperator::parse()
}
if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
{
+ m_line = il;
m_text = g_includeFileText.mid(bo,o-bo);
DBG(("DocIncOperator::parse() Until: %s\n",qPrint(m_text)));
break;
@@ -2161,6 +2191,7 @@ void DocIncOperator::parse()
o++; // skip new line
}
g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
+ m_showLineNo = g_includeFileShowLineNo;
break;
}
}
@@ -2569,16 +2600,16 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
{
if (anchor.isEmpty() && /* compound link */
compound->definitionType()==Definition::TypeGroup && /* is group */
- ((GroupDef *)compound)->groupTitle() /* with title */
+ (dynamic_cast<GroupDef *>(compound))->groupTitle() /* with title */
)
{
- m_text=((GroupDef *)compound)->groupTitle(); // use group's title as link
+ m_text=(dynamic_cast<GroupDef *>(compound))->groupTitle(); // use group's title as link
}
else if (compound->definitionType()==Definition::TypeMember &&
- ((MemberDef*)compound)->isObjCMethod())
+ (dynamic_cast<MemberDef*>(compound))->isObjCMethod())
{
// Objective C Method
- MemberDef *member = (MemberDef*)compound;
+ MemberDef *member = dynamic_cast<MemberDef*>(compound);
bool localLink = g_memberDef ? member->getClassDef()==g_memberDef->getClassDef() : FALSE;
m_text = member->objCMethodName(localLink,g_inSeeBlock);
}
@@ -2590,7 +2621,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
return;
}
else if (compound && compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
+ (dynamic_cast<FileDef*>(compound))->generateSourceFile()
) // undocumented file that has source code we can link to
{
m_file = compound->getSourceFileBase();
@@ -2729,8 +2760,8 @@ DocLink::DocLink(DocNode *parent,const QCString &target)
m_file = compound->getOutputFileBase();
m_ref = compound->getReference();
}
- else if (compound && compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
+ else if (compound && compound->definitionType()==Definition::TypeFile &&
+ (dynamic_cast<FileDef*>(compound))->generateSourceFile()
) // undocumented file that has source code we can link to
{
m_file = compound->getSourceFileBase();
@@ -5269,6 +5300,10 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
{
t = DocInclude::SnipWithLines;
}
+ else if (t==DocInclude::DontInclude && optList.contains("lineno"))
+ {
+ t = DocInclude::DontIncWithLines;
+ }
else if (t==DocInclude::Include && optList.contains("doc"))
{
t = DocInclude::IncludeDoc;
@@ -7546,12 +7581,12 @@ DocRoot *validatingParseDoc(const char *fileName,int startLine,
}
else if (ctx && ctx->definitionType()==Definition::TypePage)
{
- Definition *scope = ((PageDef*)ctx)->getPageScope();
+ Definition *scope = (dynamic_cast<PageDef*>(ctx))->getPageScope();
if (scope && scope!=Doxygen::globalScope) g_context = scope->name();
}
else if (ctx && ctx->definitionType()==Definition::TypeGroup)
{
- Definition *scope = ((GroupDef*)ctx)->getGroupScope();
+ Definition *scope = (dynamic_cast<GroupDef*>(ctx))->getGroupScope();
if (scope && scope!=Doxygen::globalScope) g_context = scope->name();
}
else
diff --git a/src/docparser.h b/src/docparser.h
index d36ed6c..15180f9 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -563,7 +563,8 @@ class DocInclude : public DocNode
{
public:
enum Type { Include, DontInclude, VerbInclude, HtmlInclude, LatexInclude,
- IncWithLines, Snippet , IncludeDoc, SnippetDoc, SnipWithLines};
+ IncWithLines, Snippet , IncludeDoc, SnippetDoc, SnipWithLines,
+ DontIncWithLines};
DocInclude(DocNode *parent,const QCString &file,
const QCString context, Type t,
bool isExample,const QCString exampleFile,
@@ -607,11 +608,24 @@ class DocIncOperator : public DocNode
enum Type { Line, SkipLine, Skip, Until };
DocIncOperator(DocNode *parent,Type t,const QCString &pat,
const QCString &context,bool isExample,const QCString &exampleFile) :
- m_type(t), m_pattern(pat), m_context(context),
+ m_type(t), m_pattern(pat), m_context(context),
m_isFirst(FALSE), m_isLast(FALSE),
m_isExample(isExample), m_exampleFile(exampleFile) { m_parent = parent; }
Kind kind() const { return Kind_IncOperator; }
Type type() const { return m_type; }
+ const char *typeAsString() const
+ {
+ switch(m_type)
+ {
+ case Line: return "line";
+ case SkipLine: return "skipline";
+ case Skip: return "skip";
+ case Until: return "until";
+ }
+ return "";
+ }
+ int line() const { return m_line; }
+ bool showLineNo() const { return m_showLineNo; }
QCString text() const { return m_text; }
QCString pattern() const { return m_pattern; }
QCString context() const { return m_context; }
@@ -627,6 +641,8 @@ class DocIncOperator : public DocNode
private:
Type m_type;
+ int m_line;
+ bool m_showLineNo;
QCString m_text;
QCString m_pattern;
QCString m_context;
diff --git a/src/docsets.cpp b/src/docsets.cpp
index 1327d80..1d79c9d 100644
--- a/src/docsets.cpp
+++ b/src/docsets.cpp
@@ -432,15 +432,15 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md,
{
if (fd==0 && context->definitionType()==Definition::TypeFile)
{
- fd = (FileDef*)context;
+ fd = dynamic_cast<FileDef*>(context);
}
if (cd==0 && context->definitionType()==Definition::TypeClass)
{
- cd = (ClassDef*)context;
+ cd = dynamic_cast<ClassDef*>(context);
}
if (nd==0 && context->definitionType()==Definition::TypeNamespace)
{
- nd = (NamespaceDef*)context;
+ nd = dynamic_cast<NamespaceDef*>(context);
}
if (fd)
{
diff --git a/src/dot.cpp b/src/dot.cpp
index 6972005..40a7210 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -2530,10 +2530,10 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
//printf(" inserting %s (%p)\n",bClass->name().data(),bn);
m_usedNodes->insert(bClass->name(),bn); // add node to the used list
}
- if (!bClass->visited && !hideSuper && bClass->subClasses())
+ if (!bClass->isVisited() && !hideSuper && bClass->subClasses())
{
- bool wasVisited=bClass->visited;
- bClass->visited=TRUE;
+ bool wasVisited=bClass->isVisited();
+ bClass->setVisited(TRUE);
addHierarchy(bn,bClass,wasVisited);
}
}
@@ -2583,10 +2583,10 @@ void DotGfxHierarchyTable::addClassList(ClassSDict *cl)
//m_usedNodes->clear();
m_usedNodes->insert(cd->name(),n);
m_rootNodes->insert(0,n);
- if (!cd->visited && cd->subClasses())
+ if (!cd->isVisited() && cd->subClasses())
{
- addHierarchy(n,cd,cd->visited);
- cd->visited=TRUE;
+ addHierarchy(n,cd,cd->isVisited());
+ cd->setVisited(TRUE);
}
}
}
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index caa13a6..99878a5 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -650,12 +650,12 @@ static void buildGroupListFiltered(Entry *root,bool additional, bool includeExte
{
if (root->tagInfo)
{
- gd = new GroupDef(root->fileName,root->startLine,root->name,root->type,root->tagInfo->fileName);
+ gd = createGroupDef(root->fileName,root->startLine,root->name,root->type,root->tagInfo->fileName);
gd->setReference(root->tagInfo->tagName);
}
else
{
- gd = new GroupDef(root->fileName,root->startLine,root->name,root->type);
+ gd = createGroupDef(root->fileName,root->startLine,root->name,root->type);
}
gd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
// allow empty docs for group
@@ -1000,7 +1000,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,
{
// introduce bogus namespace
//printf("++ adding dummy namespace %s to %s tagInfo=%p\n",nsName.data(),prevScope->name().data(),tagInfo);
- nd=new NamespaceDef(
+ nd=createNamespaceDef(
"[generated]",1,1,fullScope,
tagInfo?tagInfo->tagName:QCString(),
tagInfo?tagInfo->fileName:QCString());
@@ -1309,7 +1309,7 @@ static void addClassToContext(Entry *root)
{
tArgList = getTemplateArgumentsFromName(fullName,root->tArgLists);
}
- cd=new ClassDef(tagInfo?tagName:root->fileName,root->startLine,root->startColumn,
+ cd=createClassDef(tagInfo?tagName:root->fileName,root->startLine,root->startColumn,
fullName,sec,tagName,refFileName,TRUE,root->spec&Entry::Enum);
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d tagInfo=%p\n",
qPrint(fullName),sec,root->tArgLists ? (int)root->tArgLists->count() : -1, tagInfo);
@@ -1400,7 +1400,7 @@ static void buildClassDocList(Entry *root)
static void resolveClassNestingRelations()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
bool done=FALSE;
int iteration=0;
@@ -1411,7 +1411,7 @@ static void resolveClassNestingRelations()
ClassDef *cd=0;
for (cli.toFirst();(cd=cli.current());++cli)
{
- if (!cd->visited)
+ if (!cd->isVisited())
{
QCString name = stripAnonymousNamespaceScope(cd->name());
//printf("processing=%s, iteration=%d\n",cd->name().data(),iteration);
@@ -1423,7 +1423,7 @@ static void resolveClassNestingRelations()
//printf("****** adding %s to scope %s in iteration %d\n",cd->name().data(),d->name().data(),iteration);
d->addInnerCompound(cd);
cd->setOuterScope(d);
- cd->visited=TRUE;
+ cd->setVisited(TRUE);
done=FALSE;
}
//else
@@ -1438,7 +1438,7 @@ static void resolveClassNestingRelations()
ClassDef *cd=0;
for (cli.toFirst();(cd=cli.current());++cli)
{
- if (!cd->visited)
+ if (!cd->isVisited())
{
QCString name = stripAnonymousNamespaceScope(cd->name());
//printf("processing unresolved=%s, iteration=%d\n",cd->name().data(),iteration);
@@ -1468,14 +1468,14 @@ void distributeClassGroupRelations()
//printf("** distributeClassGroupRelations()\n");
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
//printf("Checking %s\n",cd->name().data());
// distribute the group to nested classes as well
- if (!cd->visited && cd->partOfGroups()!=0 && cd->getClassSDict())
+ if (!cd->isVisited() && cd->partOfGroups()!=0 && cd->getClassSDict())
{
//printf(" Candidate for merging\n");
ClassSDict::Iterator ncli(*cd->getClassSDict());
@@ -1491,7 +1491,7 @@ void distributeClassGroupRelations()
gd->addClass(ncd);
}
}
- cd->visited=TRUE; // only visit every class once
+ cd->setVisited(TRUE); // only visit every class once
}
}
}
@@ -1503,7 +1503,7 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC
QCString fullName = removeAnonymousScopes(templ->name());
if (fullName.right(2)=="::") fullName=fullName.left(fullName.length()-2);
fullName+="."+fieldName;
- ClassDef *cd = new ClassDef(templ->getDefFileName(),
+ ClassDef *cd = createClassDef(templ->getDefFileName(),
templ->getDefLine(),
templ->getDefColumn(),
fullName,
@@ -1548,7 +1548,7 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC
for (li.toFirst();(md=li.current());++li)
{
//printf(" Member %s type=%s\n",md->name().data(),md->typeString());
- MemberDef *imd = new MemberDef(md->getDefFileName(),md->getDefLine(),md->getDefColumn(),
+ MemberDef *imd = createMemberDef(md->getDefFileName(),md->getDefLine(),md->getDefColumn(),
md->typeString(),md->name(),md->argsString(),md->excpString(),
md->protection(),md->virtualness(),md->isStatic(),Member,
md->memberType(),
@@ -1741,7 +1741,7 @@ static void buildNamespaceList(Entry *root)
tagFileName = tagInfo->fileName;
}
//printf("++ new namespace %s lang=%s tagName=%s\n",fullName.data(),langToString(root->lang).data(),tagName.data());
- NamespaceDef *nd=new NamespaceDef(tagInfo?tagName:root->fileName,root->startLine,
+ NamespaceDef *nd=createNamespaceDef(tagInfo?tagName:root->fileName,root->startLine,
root->startColumn,fullName,tagName,tagFileName,
root->type,root->spec&Entry::Published);
nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
@@ -1879,7 +1879,7 @@ static void findUsingDirectives(Entry *root)
Definition *s = pnd->getOuterScope();
if (s && s->definitionType()==Definition::TypeNamespace)
{
- pnd = (NamespaceDef*)s;
+ pnd = dynamic_cast<NamespaceDef*>(s);
}
else
{
@@ -1913,7 +1913,7 @@ static void findUsingDirectives(Entry *root)
else // unknown namespace, but add it anyway.
{
//printf("++ new unknown namespace %s lang=%s\n",name.data(),langToString(root->lang).data());
- NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,root->startColumn,name);
+ NamespaceDef *nd=createNamespaceDef(root->fileName,root->startLine,root->startColumn,name);
nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
nd->addSectionsToDefinition(root->anchors);
@@ -2026,7 +2026,7 @@ static void findUsingDeclarations(Entry *root)
{
Debug::print(Debug::Classes,0," New using class `%s' (sec=0x%08x)! #tArgLists=%d\n",
qPrint(name),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
- usingCd = new ClassDef(
+ usingCd = createClassDef(
"<using>",1,1,
name,
ClassDef::Class);
@@ -2107,7 +2107,7 @@ static void findUsingDeclImports(Entry *root)
}
ArgumentList *templAl = md->templateArguments();
ArgumentList *al = md->templateArguments();
- newMd = new MemberDef(
+ newMd = createMemberDef(
fileName,root->startLine,root->startColumn,
md->typeString(),memName,md->argsString(),
md->excpString(),root->protection,root->virt,
@@ -2169,7 +2169,7 @@ static void findIncludedUsingDirectives()
FileDef *fd;
for (;(fd=fni.current());++fni)
{
- fd->visited=FALSE;
+ fd->setVisited(FALSE);
}
}
// then recursively add using directives found in #include files
@@ -2180,7 +2180,7 @@ static void findIncludedUsingDirectives()
FileDef *fd;
for (fni.toFirst();(fd=fni.current());++fni)
{
- if (!fd->visited)
+ if (!fd->isVisited())
{
//printf("----- adding using directives for file %s\n",fd->name().data());
fd->addIncludedUsingDirectives();
@@ -2299,7 +2299,7 @@ static MemberDef *addVariableToClass(
}
// new member variable, typedef or enum value
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
prot,Normal,root->stat,related,
@@ -2556,7 +2556,7 @@ static MemberDef *addVariableToFile(
Debug::print(Debug::Variables,0,
" new variable, nd=%s tagInfo=%p!\n",nd?qPrint(nd->name()):"<global>",root->tagInfo);
// new global variable, enum value or typedef
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
fileName,root->startLine,root->startColumn,
root->type,name,root->args,0,
root->protection, Normal,root->stat,Member,
@@ -3117,7 +3117,7 @@ static void addInterfaceOrServiceToServiceOrSingleton(
{
fileName = root->tagInfo->tagName;
}
- MemberDef *const md = new MemberDef(
+ MemberDef *const md = createMemberDef(
fileName, root->startLine, root->startColumn, root->type, rname,
"", "", root->protection, root->virt, root->stat, Member,
type, 0, root->argList, root->metaData);
@@ -3295,7 +3295,7 @@ static void addMethodToClass(Entry *root,ClassDef *cd,
// );
// adding class member
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
root->protection,root->virt,
@@ -3695,7 +3695,7 @@ static void buildFunctionList(Entry *root)
// new global function
ArgumentList *tArgList = root->tArgLists ? root->tArgLists->getLast() : 0;
QCString name=removeRedundantWhiteSpace(rname);
- md=new MemberDef(
+ md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
root->protection,root->virt,root->stat,Member,
@@ -4201,7 +4201,7 @@ static void findUsedClassesForClass(Entry *root,
QDict<int> *templateNames=0
)
{
- masterCd->visited=TRUE;
+ masterCd->setVisited(TRUE);
ArgumentList *formalArgs = masterCd->templateArguments();
if (masterCd->memberNameInfoSDict())
{
@@ -4286,7 +4286,7 @@ static void findUsedClassesForClass(Entry *root,
ClassDef *usedCd = Doxygen::hiddenClasses->find(usedName);
if (usedCd==0)
{
- usedCd = new ClassDef(
+ usedCd = createClassDef(
masterCd->getDefFileName(),masterCd->getDefLine(),
masterCd->getDefColumn(),
usedName,
@@ -4335,7 +4335,7 @@ static void findUsedClassesForClass(Entry *root,
type+=md->argsString();
}
Debug::print(Debug::Classes,0," New undocumented used class `%s'\n", qPrint(type));
- usedCd = new ClassDef(
+ usedCd = createClassDef(
masterCd->getDefFileName(),masterCd->getDefLine(),
masterCd->getDefColumn(),
type,ClassDef::Class);
@@ -4373,7 +4373,7 @@ static void findBaseClassesForClass(
)
{
//if (masterCd->visited) return;
- masterCd->visited=TRUE;
+ masterCd->setVisited(TRUE);
// The base class could ofcouse also be a non-nested class
ArgumentList *formalArgs = masterCd->templateArguments();
QListIterator<BaseInfo> bii(*root->extends);
@@ -4845,7 +4845,7 @@ static bool findClassRelation(
baseClass=Doxygen::hiddenClasses->find(baseClassName);
if (baseClass==0)
{
- baseClass=new ClassDef(root->fileName,root->startLine,root->startColumn,
+ baseClass=createClassDef(root->fileName,root->startLine,root->startColumn,
baseClassName,
ClassDef::Class);
Doxygen::hiddenClasses->append(baseClassName,baseClass);
@@ -4860,7 +4860,7 @@ static bool findClassRelation(
// baseClassName.data(),baseClass,biName.data(),templSpec.data());
if (baseClass==0)
{
- baseClass=new ClassDef(root->fileName,root->startLine,root->startColumn,
+ baseClass=createClassDef(root->fileName,root->startLine,root->startColumn,
baseClassName,
ClassDef::Class);
Doxygen::classSDict->append(baseClassName,baseClass);
@@ -4995,7 +4995,7 @@ static QCString extractClassName(Entry *root)
static void findInheritedTemplateInstances()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
QDictIterator<Entry> edi(g_classEntries);
Entry *root;
for (;(root=edi.current());++edi)
@@ -5014,7 +5014,7 @@ static void findInheritedTemplateInstances()
static void findUsedTemplateInstances()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
QDictIterator<Entry> edi(g_classEntries);
Entry *root;
for (;(root=edi.current());++edi)
@@ -5033,7 +5033,7 @@ static void findUsedTemplateInstances()
static void computeClassRelations()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
QDictIterator<Entry> edi(g_classEntries);
Entry *root;
for (;(root=edi.current());++edi)
@@ -5179,28 +5179,6 @@ static void computeMemberReferences()
static void addListReferences()
{
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- md->visited=FALSE;
- }
- }
- MemberNameSDict::Iterator fmnli(*Doxygen::functionNameSDict);
- for (fmnli.toFirst();(mn=fmnli.current());++fmnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- md->visited=FALSE;
- }
- }
-
ClassSDict::Iterator cli(*Doxygen::classSDict);
ClassDef *cd=0;
for (cli.toFirst();(cd=cli.current());++cli)
@@ -5614,7 +5592,7 @@ static bool scopeIsTemplate(Definition *d)
bool result=FALSE;
if (d && d->definitionType()==Definition::TypeClass)
{
- result = ((ClassDef*)d)->templateArguments() || scopeIsTemplate(d->getOuterScope());
+ result = (dynamic_cast<ClassDef*>(d))->templateArguments() || scopeIsTemplate(d->getOuterScope());
}
return result;
}
@@ -6410,7 +6388,7 @@ static void findMember(Entry *root,
MemberType mtype=MemberType_Function;
ArgumentList *tArgList = new ArgumentList;
// getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
- md=new MemberDef(
+ md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
declMd ? declMd->protection() : root->protection,
@@ -6480,7 +6458,7 @@ static void findMember(Entry *root,
ArgumentList *tArgList =
getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
//printf("new related member %s args=`%s'\n",md->name().data(),funcArgs.data());
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,Related,
@@ -6616,7 +6594,7 @@ static void findMember(Entry *root,
// this accurately reflects the template arguments of
// the related function, which don't have to do with
// those of the related class.
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,
@@ -6760,7 +6738,7 @@ localObjCMethod:
Debug::print(Debug::FindMembers,0,"4. Local objective C method %s\n"
" scopeName=%s className=%s\n",qPrint(root->name),qPrint(scopeName),qPrint(className));
//printf("Local objective C method `%s' of class `%s' found\n",root->name.data(),cd->name().data());
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,Member,
@@ -7083,7 +7061,7 @@ static void findEnums(Entry *root)
if (!name.isEmpty())
{
// new enum type
- md = new MemberDef(
+ md = createMemberDef(
root->fileName,root->startLine,root->startColumn,
0,name,0,0,
root->protection,Normal,FALSE,
@@ -7303,7 +7281,7 @@ static void addEnumValuesToEnums(Entry *root)
{
fileName = e->tagInfo->tagName;
}
- MemberDef *fmd=new MemberDef(
+ MemberDef *fmd=createMemberDef(
fileName,e->startLine,e->startColumn,
e->type,e->name,e->args,0,
e->protection, Normal,e->stat,Member,
@@ -8165,7 +8143,7 @@ static void combineUsingRelations()
FileDef *fd;
for (fni.toFirst();(fd=fni.current());++fni)
{
- fd->visited=FALSE;
+ fd->setVisited(FALSE);
}
}
for (fnli.toFirst();(fn=fnli.current());++fnli)
@@ -8183,7 +8161,7 @@ static void combineUsingRelations()
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) ; ++nli )
{
- nd->visited=FALSE;
+ nd->setVisited(FALSE);
}
for (nli.toFirst() ; (nd=nli.current()) ; ++nli )
{
@@ -8425,7 +8403,7 @@ static void findDefineDocumentation(Entry *root)
if (root->tagInfo && !root->name.isEmpty()) // define read from a tag file
{
- MemberDef *md=new MemberDef(root->tagInfo->tagName,1,1,
+ MemberDef *md=createMemberDef(root->tagInfo->tagName,1,1,
"#define",root->name,root->args,0,
Public,Normal,FALSE,Member,MemberType_Define,0,0,"");
md->setTagInfo(root->tagInfo);
@@ -8653,7 +8631,7 @@ static void findMainPage(Entry *root)
QCString title=root->args.stripWhiteSpace();
//QCString indexName=Config_getBool(GENERATE_TREEVIEW)?"main":"index";
QCString indexName="index";
- Doxygen::mainPage = new PageDef(root->docFile,root->docLine,
+ Doxygen::mainPage = createPageDef(root->docFile,root->docLine,
indexName, root->brief+root->doc+root->inbodyDocs,title);
//setFileNameForSections(root->anchors,"index",Doxygen::mainPage);
Doxygen::mainPage->setBriefDescription(root->brief,root->briefFile,root->briefLine);
@@ -8727,7 +8705,14 @@ static void computePageRelations(Entry *root)
for (bii.toFirst();(bi=bii.current());++bii)
{
PageDef *subPd = Doxygen::pageSDict->find(bi->name);
- if (subPd)
+ if (pd==subPd)
+ {
+ err("page defined at line %d of file %s with label %s is a direct "
+ "subpage of itself! Please remove this cyclic dependency.\n",
+ pd->docLine(),pd->docFile().data(),pd->name().data());
+ exit(1);
+ }
+ else if (subPd)
{
pd->addInnerCompound(subPd);
//printf("*** Added subpage relation: %s->%s\n",
@@ -8810,7 +8795,7 @@ static void resolveUserReferences()
GroupDef *gd=0;
if (si->definition->definitionType()==Definition::TypeMember)
{
- gd = ((MemberDef *)si->definition)->getGroupDef();
+ gd = (dynamic_cast<MemberDef *>(si->definition))->getGroupDef();
}
if (gd)
@@ -8869,7 +8854,7 @@ static void buildExampleList(Entry *root)
}
else
{
- PageDef *pd=new PageDef(root->fileName,root->startLine,
+ PageDef *pd=createPageDef(root->fileName,root->startLine,
root->name,root->brief+root->doc+root->inbodyDocs,root->args);
pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE));
@@ -9577,7 +9562,7 @@ int readDir(QFileInfo *fi,
//printf("New file %s\n",name.data());
if (fnDict)
{
- FileDef *fd=new FileDef(cfi->dirPath().utf8()+"/",name);
+ FileDef *fd=createFileDef(cfi->dirPath().utf8()+"/",name);
FileName *fn=0;
if (!name.isEmpty() && (fn=(*fnDict)[name]))
{
@@ -9676,7 +9661,7 @@ int readFileOrDirectory(const char *s,
//printf("New file %s\n",name.data());
if (fnDict)
{
- FileDef *fd=new FileDef(dirPath+"/",name);
+ FileDef *fd=createFileDef(dirPath+"/",name);
FileName *fn=0;
if (!name.isEmpty() && (fn=(*fnDict)[name]))
{
@@ -9824,7 +9809,7 @@ static void escapeAliases()
while ((in=value.find("^^",p))!=-1)
{
newValue+=value.mid(p,in-p);
- newValue+="\\\\_linebr";
+ newValue+="\\\\_linebr ";
p=in+2;
}
newValue+=value.mid(p,value.length()-p);
@@ -9879,7 +9864,7 @@ static void dumpSymbol(FTextStream &t,Definition *d)
QCString anchor;
if (d->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef *)d;
+ MemberDef *md = dynamic_cast<MemberDef *>(d);
anchor=":"+md->anchor();
}
QCString scope;
@@ -10544,7 +10529,7 @@ void checkConfiguration()
/** adjust globals that depend on configuration settings. */
void adjustConfiguration()
{
- Doxygen::globalScope = new NamespaceDef("<globalScope>",1,1,"<globalScope>");
+ Doxygen::globalScope = createNamespaceDef("<globalScope>",1,1,"<globalScope>");
Doxygen::inputNameDict = new FileNameDict(10007);
Doxygen::includeNameDict = new FileNameDict(10007);
Doxygen::exampleNameDict = new FileNameDict(1009);
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 187b665..130679e 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -43,6 +43,144 @@
#include "config.h"
#include "clangparser.h"
#include "settings.h"
+#include "definitionimpl.h"
+
+//---------------------------------------------------------------------------
+
+class FileDefImpl : public DefinitionImpl, public FileDef
+{
+ public:
+ FileDefImpl(const char *p,const char *n,const char *ref=0,const char *dn=0);
+ virtual ~FileDefImpl();
+
+ virtual DefType definitionType() const { return TypeFile; }
+ virtual QCString name() const;
+ virtual QCString displayName(bool=TRUE) const { return name(); }
+ virtual QCString fileName() const { return m_fileName; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual QCString getSourceFileBase() const;
+ virtual QCString includeName() const;
+ virtual QCString includeDependencyGraphFileName() const;
+ virtual QCString includedByDependencyGraphFileName() const;
+ virtual QCString absFilePath() const { return m_filePath; }
+ virtual const QCString &docName() const { return m_docname; }
+ virtual bool isSource() const { return m_isSource; }
+ virtual bool isDocumentationFile() const;
+ virtual Definition *getSourceDefinition(int lineNr) const;
+ virtual MemberDef *getSourceMember(int lineNr) const;
+ virtual QCString getPath() const { return m_path; }
+ virtual QCString getVersion() const { return m_fileVersion; }
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const { return isLinkableInProject() || isReference(); }
+ virtual bool isIncluded(const QCString &name) const;
+ virtual PackageDef *packageDef() const { return m_package; }
+ virtual DirDef *getDirDef() const { return m_dir; }
+ virtual NamespaceSDict *getUsedNamespaces() const;
+ virtual SDict<Definition> *getUsedClasses() const { return m_usingDeclList; }
+ virtual QList<IncludeInfo> *includeFileList() const { return m_includeList; }
+ virtual QList<IncludeInfo> *includedByFileList() const { return m_includedByList; }
+ virtual void getAllIncludeFilesRecursively(QStrList &incFiles) const;
+ virtual MemberList *getMemberList(MemberListType lt) const;
+ virtual const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+ virtual MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
+ virtual NamespaceSDict *getNamespaceSDict() const { return m_namespaceSDict; }
+ virtual ClassSDict *getClassSDict() const { return m_classSDict; }
+ virtual QCString title() const;
+ virtual bool hasDetailedDescription() const;
+ virtual QCString fileVersion() const;
+ virtual bool subGrouping() const { return m_subGrouping; }
+ virtual void addSourceRef(int line,Definition *d,MemberDef *md);
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeMemberPages(OutputList &ol);
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
+ virtual void writeSummaryLinks(OutputList &ol);
+ virtual void writeTagFile(FTextStream &t);
+ virtual void startParsing();
+ virtual void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
+ virtual void parseSource(bool sameTu,QStrList &filesInSameTu);
+ virtual void finishParsing();
+ virtual void setDiskName(const QCString &name);
+ virtual void insertMember(MemberDef *md);
+ virtual void insertClass(ClassDef *cd);
+ virtual void insertNamespace(NamespaceDef *nd);
+ virtual void computeAnchors();
+ virtual void setPackageDef(PackageDef *pd) { m_package=pd; }
+ virtual void setDirDef(DirDef *dd) { m_dir=dd; }
+ virtual void addUsingDirective(NamespaceDef *nd);
+ virtual void addUsingDeclaration(Definition *def);
+ virtual void combineUsingRelations();
+ virtual bool generateSourceFile() const;
+ virtual void sortMemberLists();
+ virtual void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
+ virtual void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
+ virtual void addMembersToMemberGroup();
+ virtual void distributeMemberGroupDocumentation();
+ virtual void findSectionsInDocumentation();
+ virtual void addIncludedUsingDirectives();
+ virtual void addListReferences();
+ virtual void setVisited(bool v) { m_visited = v; }
+ virtual bool isVisited() const { return m_visited; }
+
+ private:
+ bool m_visited;
+ void acquireFileVersion();
+ MemberList *createMemberList(MemberListType lt);
+ void addMemberToList(MemberListType lt,MemberDef *md);
+ void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeIncludeFiles(OutputList &ol);
+ void writeIncludeGraph(OutputList &ol);
+ void writeIncludedByGraph(OutputList &ol);
+ void writeMemberGroups(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void writeSourceLink(OutputList &ol);
+ void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
+ bool isConstantGroup);
+ void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d);
+ void writeInlineClasses(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeClassesToTagFile(FTextStream &t,ClassSDict *d);
+
+ QDict<IncludeInfo> *m_includeDict;
+ QList<IncludeInfo> *m_includeList;
+ QDict<IncludeInfo> *m_includedByDict;
+ QList<IncludeInfo> *m_includedByList;
+ NamespaceSDict *m_usingDirList;
+ SDict<Definition> *m_usingDeclList;
+ QCString m_path;
+ QCString m_filePath;
+ QCString m_inclDepFileName;
+ QCString m_inclByDepFileName;
+ QCString m_outputDiskName;
+ QCString m_fileName;
+ QCString m_docname;
+ QIntDict<Definition> *m_srcDefDict;
+ QIntDict<MemberDef> *m_srcMemberDict;
+ bool m_isSource;
+ QCString m_fileVersion;
+ PackageDef *m_package;
+ DirDef *m_dir;
+ QList<MemberList> m_memberLists;
+ MemberGroupSDict *m_memberGroupSDict;
+ NamespaceSDict *m_namespaceSDict;
+ ClassSDict *m_classSDict;
+ ClassSDict *m_interfaceSDict;
+ ClassSDict *m_structSDict;
+ ClassSDict *m_exceptionSDict;
+ bool m_subGrouping;
+};
+
+FileDef *createFileDef(const char *p,const char *n,const char *ref,const char *dn)
+{
+ return new FileDefImpl(p,n,ref,dn);
+}
+
//---------------------------------------------------------------------------
@@ -75,9 +213,9 @@ class DevNullCodeDocInterface : public CodeOutputInterface
\a nm the file name, and \a lref is an HTML anchor name if the
file was read from a tag file or 0 otherwise
*/
-FileDef::FileDef(const char *p,const char *nm,
+FileDefImpl::FileDefImpl(const char *p,const char *nm,
const char *lref,const char *dn)
- : Definition((QCString)p+nm,1,1,nm)
+ : DefinitionImpl((QCString)p+nm,1,1,nm)
{
m_path=p;
m_filePath=m_path+nm;
@@ -101,6 +239,7 @@ FileDef::FileDef(const char *p,const char *nm,
m_isSource = guessSection(nm)==Entry::SOURCE_SEC;
m_docname = nm;
m_dir = 0;
+ m_visited = FALSE;
if (Config_getBool(FULL_PATH_NAMES))
{
m_docname.prepend(stripFromPath(m_path.copy()));
@@ -112,7 +251,7 @@ FileDef::FileDef(const char *p,const char *nm,
}
/*! destroy the file definition */
-FileDef::~FileDef()
+FileDefImpl::~FileDefImpl()
{
delete m_classSDict;
delete m_interfaceSDict;
@@ -130,7 +269,7 @@ FileDef::~FileDef()
delete m_memberGroupSDict;
}
-void FileDef::setDiskName(const QCString &name)
+void FileDefImpl::setDiskName(const QCString &name)
{
if (isReference())
{
@@ -147,15 +286,15 @@ void FileDef::setDiskName(const QCString &name)
}
/*! Compute the HTML anchor names for all members in the class */
-void FileDef::computeAnchors()
+void FileDefImpl::computeAnchors()
{
MemberList *ml = getMemberList(MemberListType_allMembersList);
if (ml) setAnchors(ml);
}
-void FileDef::distributeMemberGroupDocumentation()
+void FileDefImpl::distributeMemberGroupDocumentation()
{
- //printf("FileDef::distributeMemberGroupDocumentation()\n");
+ //printf("FileDefImpl::distributeMemberGroupDocumentation()\n");
if (m_memberGroupSDict)
{
MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
@@ -167,7 +306,7 @@ void FileDef::distributeMemberGroupDocumentation()
}
}
-void FileDef::findSectionsInDocumentation()
+void FileDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
if (m_memberGroupSDict)
@@ -191,7 +330,7 @@ void FileDef::findSectionsInDocumentation()
}
}
-bool FileDef::hasDetailedDescription() const
+bool FileDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
@@ -201,7 +340,7 @@ bool FileDef::hasDetailedDescription() const
);
}
-void FileDef::writeTagFile(FTextStream &tagFile)
+void FileDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <compound kind=\"file\">" << endl;
tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
@@ -314,7 +453,7 @@ void FileDef::writeTagFile(FTextStream &tagFile)
tagFile << " </compound>" << endl;
}
-void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
+void FileDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if (hasDetailedDescription())
{
@@ -393,7 +532,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
}
}
-void FileDef::writeBriefDescription(OutputList &ol)
+void FileDefImpl::writeBriefDescription(OutputList &ol)
{
if (hasBriefDescription())
{
@@ -430,7 +569,7 @@ void FileDef::writeBriefDescription(OutputList &ol)
ol.writeSynopsis();
}
-void FileDef::writeClassesToTagFile(FTextStream &tagFile, ClassSDict *d)
+void FileDefImpl::writeClassesToTagFile(FTextStream &tagFile, ClassSDict *d)
{
SDict<ClassDef>::Iterator ci(*d);
ClassDef *cd;
@@ -444,7 +583,7 @@ void FileDef::writeClassesToTagFile(FTextStream &tagFile, ClassSDict *d)
}
}
-void FileDef::writeIncludeFiles(OutputList &ol)
+void FileDefImpl::writeIncludeFiles(OutputList &ol)
{
if (m_includeList && m_includeList->count()>0)
{
@@ -513,7 +652,7 @@ void FileDef::writeIncludeFiles(OutputList &ol)
}
}
-void FileDef::writeIncludeGraph(OutputList &ol)
+void FileDefImpl::writeIncludeGraph(OutputList &ol)
{
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(INCLUDE_GRAPH)*/)
{
@@ -537,7 +676,7 @@ void FileDef::writeIncludeGraph(OutputList &ol)
}
}
-void FileDef::writeIncludedByGraph(OutputList &ol)
+void FileDefImpl::writeIncludedByGraph(OutputList &ol)
{
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(INCLUDED_BY_GRAPH)*/)
{
@@ -562,7 +701,7 @@ void FileDef::writeIncludedByGraph(OutputList &ol)
}
-void FileDef::writeSourceLink(OutputList &ol)
+void FileDefImpl::writeSourceLink(OutputList &ol)
{
//printf("%s: generateSourceFile()=%d\n",name().data(),generateSourceFile());
if (generateSourceFile())
@@ -577,20 +716,20 @@ void FileDef::writeSourceLink(OutputList &ol)
}
}
-void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
+void FileDefImpl::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
bool const isConstantGroup)
{
// write list of namespaces
if (m_namespaceSDict) m_namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
}
-void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d)
+void FileDefImpl::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d)
{
// write list of classes
if (d) d->writeDeclaration(ol,0,title,FALSE);
}
-void FileDef::writeInlineClasses(OutputList &ol)
+void FileDefImpl::writeInlineClasses(OutputList &ol)
{
// temporarily undo the disbling could be done by startMemberDocumentation()
// as a result of setting SEPARATE_MEMBER_PAGES to YES; see bug730512
@@ -603,17 +742,17 @@ void FileDef::writeInlineClasses(OutputList &ol)
if (!isEnabled) ol.disable(OutputGenerator::Html);
}
-void FileDef::startMemberDeclarations(OutputList &ol)
+void FileDefImpl::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
-void FileDef::endMemberDeclarations(OutputList &ol)
+void FileDefImpl::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
-void FileDef::startMemberDocumentation(OutputList &ol)
+void FileDefImpl::startMemberDocumentation(OutputList &ol)
{
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
@@ -622,7 +761,7 @@ void FileDef::startMemberDocumentation(OutputList &ol)
}
}
-void FileDef::endMemberDocumentation(OutputList &ol)
+void FileDefImpl::endMemberDocumentation(OutputList &ol)
{
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
@@ -631,7 +770,7 @@ void FileDef::endMemberDocumentation(OutputList &ol)
}
}
-void FileDef::writeMemberGroups(OutputList &ol)
+void FileDefImpl::writeMemberGroups(OutputList &ol)
{
/* write user defined member groups */
if (m_memberGroupSDict)
@@ -650,7 +789,7 @@ void FileDef::writeMemberGroups(OutputList &ol)
}
}
-void FileDef::writeAuthorSection(OutputList &ol)
+void FileDefImpl::writeAuthorSection(OutputList &ol)
{
// write Author section (Man only)
ol.pushGeneratorState();
@@ -662,7 +801,7 @@ void FileDef::writeAuthorSection(OutputList &ol)
ol.popGeneratorState();
}
-void FileDef::writeSummaryLinks(OutputList &ol)
+void FileDefImpl::writeSummaryLinks(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -729,7 +868,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
/*! Write the documentation page for this file to the file of output
generators \a ol.
*/
-void FileDef::writeDocumentation(OutputList &ol)
+void FileDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
//funcList->countDecMembers();
@@ -946,7 +1085,7 @@ void FileDef::writeDocumentation(OutputList &ol)
}
}
-void FileDef::writeMemberPages(OutputList &ol)
+void FileDefImpl::writeMemberPages(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -964,7 +1103,7 @@ void FileDef::writeMemberPages(OutputList &ol)
ol.popGeneratorState();
}
-void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
+void FileDefImpl::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
{
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
@@ -1008,7 +1147,7 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
}
/*! Write a source listing of this file to the output */
-void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
+void FileDefImpl::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES);
@@ -1126,7 +1265,7 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
ol.enableAll();
}
-void FileDef::parseSource(bool sameTu,QStrList &filesInSameTu)
+void FileDefImpl::parseSource(bool sameTu,QStrList &filesInSameTu)
{
static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES);
DevNullCodeDocInterface devNullIntf;
@@ -1161,16 +1300,16 @@ void FileDef::parseSource(bool sameTu,QStrList &filesInSameTu)
}
}
-void FileDef::startParsing()
+void FileDefImpl::startParsing()
{
}
-void FileDef::finishParsing()
+void FileDefImpl::finishParsing()
{
ClangParser::instance()->finish();
}
-void FileDef::addMembersToMemberGroup()
+void FileDefImpl::addMembersToMemberGroup()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1199,10 +1338,10 @@ void FileDef::addMembersToMemberGroup()
}
/*! Adds member definition \a md to the list of all members of this file */
-void FileDef::insertMember(MemberDef *md)
+void FileDefImpl::insertMember(MemberDef *md)
{
if (md->isHidden()) return;
- //printf("%s:FileDef::insertMember(%s (=%p) list has %d elements)\n",
+ //printf("%s:FileDefImpl::insertMember(%s (=%p) list has %d elements)\n",
// name().data(),md->name().data(),md,allMemberList.count());
MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
if (allMemberList && allMemberList->findRef(md)!=-1) // TODO optimize the findRef!
@@ -1251,7 +1390,7 @@ void FileDef::insertMember(MemberDef *md)
addMemberToList(MemberListType_docDefineMembers,md);
break;
default:
- err("FileDef::insertMembers(): "
+ err("FileDefImpl::insertMembers(): "
"member `%s' with class scope `%s' inserted in file scope `%s'!\n",
md->name().data(),
md->getClassDef() ? md->getClassDef()->name().data() : "<global>",
@@ -1261,7 +1400,7 @@ void FileDef::insertMember(MemberDef *md)
}
/*! Adds compound definition \a cd to the list of all compounds of this file */
-void FileDef::insertClass(ClassDef *cd)
+void FileDefImpl::insertClass(ClassDef *cd)
{
if (cd->isHidden()) return;
@@ -1298,7 +1437,7 @@ void FileDef::insertClass(ClassDef *cd)
}
/*! Adds namespace definition \a nd to the list of all compounds of this file */
-void FileDef::insertNamespace(NamespaceDef *nd)
+void FileDefImpl::insertNamespace(NamespaceDef *nd)
{
if (nd->isHidden()) return;
if (!nd->name().isEmpty() &&
@@ -1319,17 +1458,17 @@ void FileDef::insertNamespace(NamespaceDef *nd)
}
}
-QCString FileDef::name() const
+QCString FileDefImpl::name() const
{
if (Config_getBool(FULL_PATH_NAMES))
return m_fileName;
else
- return Definition::name();
+ return DefinitionImpl::name();
}
-void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
+void FileDefImpl::addSourceRef(int line,Definition *d,MemberDef *md)
{
- //printf("FileDef::addSourceDef(%d,%p,%p)\n",line,d,md);
+ //printf("FileDefImpl::addSourceDef(%d,%p,%p)\n",line,d,md);
if (d)
{
if (m_srcDefDict==0) m_srcDefDict = new QIntDict<Definition>(257);
@@ -1341,7 +1480,7 @@ void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
}
}
-Definition *FileDef::getSourceDefinition(int lineNr) const
+Definition *FileDefImpl::getSourceDefinition(int lineNr) const
{
Definition *result=0;
if (m_srcDefDict)
@@ -1352,7 +1491,7 @@ Definition *FileDef::getSourceDefinition(int lineNr) const
return result;
}
-MemberDef *FileDef::getSourceMember(int lineNr) const
+MemberDef *FileDefImpl::getSourceMember(int lineNr) const
{
MemberDef *result=0;
if (m_srcMemberDict)
@@ -1364,7 +1503,7 @@ MemberDef *FileDef::getSourceMember(int lineNr) const
}
-void FileDef::addUsingDirective(NamespaceDef *nd)
+void FileDefImpl::addUsingDirective(NamespaceDef *nd)
{
if (m_usingDirList==0)
{
@@ -1374,16 +1513,16 @@ void FileDef::addUsingDirective(NamespaceDef *nd)
{
m_usingDirList->append(nd->qualifiedName(),nd);
}
- //printf("%p: FileDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
+ //printf("%p: FileDefImpl::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
}
-NamespaceSDict *FileDef::getUsedNamespaces() const
+NamespaceSDict *FileDefImpl::getUsedNamespaces() const
{
- //printf("%p: FileDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
+ //printf("%p: FileDefImpl::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
return m_usingDirList;
}
-void FileDef::addUsingDeclaration(Definition *d)
+void FileDefImpl::addUsingDeclaration(Definition *d)
{
if (m_usingDeclList==0)
{
@@ -1395,10 +1534,10 @@ void FileDef::addUsingDeclaration(Definition *d)
}
}
-void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
+void FileDefImpl::addIncludeDependency(FileDef *fd,const char *incName,bool local,
bool imported,bool indirect)
{
- //printf("FileDef::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
+ //printf("FileDefImpl::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
QCString iName = fd ? fd->absFilePath().data() : incName;
if (!iName.isEmpty() && (!m_includeDict || m_includeDict->find(iName)==0))
{
@@ -1419,11 +1558,11 @@ void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
}
}
-void FileDef::addIncludedUsingDirectives()
+void FileDefImpl::addIncludedUsingDirectives()
{
- if (visited) return;
- visited=TRUE;
- //printf("( FileDef::addIncludedUsingDirectives for file %s\n",name().data());
+ if (m_visited) return;
+ m_visited=TRUE;
+ //printf("( FileDefImpl::addIncludedUsingDirectives for file %s\n",name().data());
if (m_includeList) // file contains #includes
{
@@ -1432,7 +1571,7 @@ void FileDef::addIncludedUsingDirectives()
IncludeInfo *ii;
for (iii.toFirst();(ii=iii.current());++iii) // foreach #include...
{
- if (ii->fileDef && !ii->fileDef->visited) // ...that is a known file
+ if (ii->fileDef && !ii->fileDef->isVisited()) // ...that is a known file
{
// recurse into this file
ii->fileDef->addIncludedUsingDirectives();
@@ -1448,7 +1587,7 @@ void FileDef::addIncludedUsingDirectives()
if (ii->fileDef && ii->fileDef!=this)
{
// add using directives
- NamespaceSDict *unl = ii->fileDef->m_usingDirList;
+ NamespaceSDict *unl = ii->fileDef->getUsedNamespaces();
if (unl)
{
NamespaceSDict::Iterator nli(*unl);
@@ -1466,7 +1605,7 @@ void FileDef::addIncludedUsingDirectives()
}
}
// add using declarations
- SDict<Definition> *udl = ii->fileDef->m_usingDeclList;
+ SDict<Definition> *udl = ii->fileDef->getUsedClasses();
if (udl)
{
SDict<Definition>::Iterator udi(*udl);
@@ -1488,14 +1627,14 @@ void FileDef::addIncludedUsingDirectives()
}
}
}
- //printf(") end FileDef::addIncludedUsingDirectives for file %s\n",name().data());
+ //printf(") end FileDefImpl::addIncludedUsingDirectives for file %s\n",name().data());
}
-void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
+void FileDefImpl::addIncludedByDependency(FileDef *fd,const char *incName,
bool local,bool imported)
{
- //printf("FileDef::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
+ //printf("FileDefImpl::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
QCString iName = fd ? fd->absFilePath().data() : incName;
if (!iName.isEmpty() && (m_includedByDict==0 || m_includedByDict->find(iName)==0))
{
@@ -1516,13 +1655,13 @@ void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
}
}
-bool FileDef::isIncluded(const QCString &name) const
+bool FileDefImpl::isIncluded(const QCString &name) const
{
if (name.isEmpty()) return FALSE;
return m_includeDict!=0 && m_includeDict->find(name)!=0;
}
-bool FileDef::generateSourceFile() const
+bool FileDefImpl::generateSourceFile() const
{
static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
static bool verbatimHeaders = Config_getBool(VERBATIM_HEADERS);
@@ -1534,7 +1673,7 @@ bool FileDef::generateSourceFile() const
}
-void FileDef::addListReferences()
+void FileDefImpl::addListReferences()
{
{
QList<ListItemInfo> *xrefItems = xrefListItems();
@@ -1762,7 +1901,7 @@ static void addDirsAsGroups(Directory *root,GroupDef *parent,int level)
GroupDef *gd=0;
if (root->kind()==DirEntry::Dir)
{
- gd = new GroupDef("[generated]",
+ gd = createGroupDef("[generated]",
1,
root->path(), // name
root->name() // title
@@ -1812,10 +1951,10 @@ void generateFileTree()
//-------------------------------------------------------------------
-void FileDef::combineUsingRelations()
+void FileDefImpl::combineUsingRelations()
{
- if (visited) return; // already done
- visited=TRUE;
+ if (m_visited) return; // already done
+ m_visited=TRUE;
if (m_usingDirList)
{
NamespaceSDict::Iterator nli(*m_usingDirList);
@@ -1852,7 +1991,7 @@ void FileDef::combineUsingRelations()
}
}
-bool FileDef::isDocumentationFile() const
+bool FileDefImpl::isDocumentationFile() const
{
return name().right(4)==".doc" ||
name().right(4)==".txt" ||
@@ -1861,7 +2000,7 @@ bool FileDef::isDocumentationFile() const
name().right(9)==".markdown";
}
-void FileDef::acquireFileVersion()
+void FileDefImpl::acquireFileVersion()
{
QCString vercmd = Config_getString(FILE_VERSION_FILTER);
if (!vercmd.isEmpty() && !m_filePath.isEmpty() &&
@@ -1895,7 +2034,7 @@ void FileDef::acquireFileVersion()
}
-QCString FileDef::getSourceFileBase() const
+QCString FileDefImpl::getSourceFileBase() const
{
if (Htags::useHtags)
{
@@ -1907,18 +2046,18 @@ QCString FileDef::getSourceFileBase() const
}
}
-QCString FileDef::getOutputFileBase() const
+QCString FileDefImpl::getOutputFileBase() const
{
return m_outputDiskName;
}
/*! Returns the name of the verbatim copy of this file (if any). */
-QCString FileDef::includeName() const
+QCString FileDefImpl::includeName() const
{
return getSourceFileBase();
}
-MemberList *FileDef::createMemberList(MemberListType lt)
+MemberList *FileDefImpl::createMemberList(MemberListType lt)
{
m_memberLists.setAutoDelete(TRUE);
QListIterator<MemberList> mli(m_memberLists);
@@ -1936,7 +2075,7 @@ MemberList *FileDef::createMemberList(MemberListType lt)
return ml;
}
-void FileDef::addMemberToList(MemberListType lt,MemberDef *md)
+void FileDefImpl::addMemberToList(MemberListType lt,MemberDef *md)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
@@ -1958,7 +2097,7 @@ void FileDef::addMemberToList(MemberListType lt,MemberDef *md)
if (ml->listType()&MemberListType_declarationLists) md->setSectionList(this,ml);
}
-void FileDef::sortMemberLists()
+void FileDefImpl::sortMemberLists()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1980,7 +2119,7 @@ void FileDef::sortMemberLists()
}
-MemberList *FileDef::getMemberList(MemberListType lt) const
+MemberList *FileDefImpl::getMemberList(MemberListType lt) const
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1994,7 +2133,7 @@ MemberList *FileDef::getMemberList(MemberListType lt) const
return 0;
}
-void FileDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
+void FileDefImpl::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
{
static bool optVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
MemberList * ml = getMemberList(lt);
@@ -2012,13 +2151,13 @@ void FileDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCS
}
}
-void FileDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
+void FileDefImpl::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDocumentation(ol,name(),this,title);
}
-bool FileDef::isLinkableInProject() const
+bool FileDefImpl::isLinkableInProject() const
{
static bool showFiles = Config_getBool(SHOW_FILES);
return hasDocumentation() && !isReference() && (showFiles || isLinkableViaGroup());
@@ -2036,7 +2175,7 @@ static void getAllIncludeFilesRecursively(
if (ii->fileDef && !ii->fileDef->isReference() &&
!filesVisited->find(ii->fileDef->absFilePath()))
{
- //printf("FileDef::addIncludeDependency(%s)\n",ii->fileDef->absFilePath().data());
+ //printf("FileDefImpl::addIncludeDependency(%s)\n",ii->fileDef->absFilePath().data());
incFiles.append(ii->fileDef->absFilePath());
filesVisited->insert(ii->fileDef->absFilePath(),(void*)0x8);
getAllIncludeFilesRecursively(filesVisited,ii->fileDef,incFiles);
@@ -2045,28 +2184,28 @@ static void getAllIncludeFilesRecursively(
}
}
-void FileDef::getAllIncludeFilesRecursively(QStrList &incFiles) const
+void FileDefImpl::getAllIncludeFilesRecursively(QStrList &incFiles) const
{
QDict<void> includes(257);
::getAllIncludeFilesRecursively(&includes,this,incFiles);
}
-QCString FileDef::title() const
+QCString FileDefImpl::title() const
{
return theTranslator->trFileReference(name());
}
-QCString FileDef::fileVersion() const
+QCString FileDefImpl::fileVersion() const
{
return m_fileVersion;
}
-QCString FileDef::includeDependencyGraphFileName() const
+QCString FileDefImpl::includeDependencyGraphFileName() const
{
return m_inclDepFileName;
}
-QCString FileDef::includedByDependencyGraphFileName() const
+QCString FileDefImpl::includedByDependencyGraphFileName() const
{
return m_inclByDepFileName;
}
diff --git a/src/filedef.h b/src/filedef.h
index fe3c81d..63cacf5 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -61,185 +61,127 @@ struct IncludeInfo
* The member writeDocumentation() can be used to generate the page of
* documentation to HTML and LaTeX.
*/
-class FileDef : public Definition
+class FileDef : virtual public Definition
{
public:
- //enum FileType { Source, Header, Unknown };
-
- FileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
- ~FileDef();
+ ~FileDef() {}
// ----------------------------------------------------------------------
- DefType definitionType() const { return TypeFile; }
+ virtual DefType definitionType() const = 0;
/*! Returns the unique file name (this may include part of the path). */
- QCString name() const;
- QCString displayName(bool=TRUE) const { return name(); }
- QCString fileName() const { return m_fileName; }
-
- QCString getOutputFileBase() const;
+ virtual QCString name() const = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual QCString fileName() const = 0;
+
+ virtual QCString getOutputFileBase() const = 0;
+
+ virtual QCString anchor() const = 0;
- QCString anchor() const { return QCString(); }
+ virtual QCString getSourceFileBase() const = 0;
- QCString getSourceFileBase() const;
-
/*! Returns the name of the verbatim copy of this file (if any). */
- QCString includeName() const;
+ virtual QCString includeName() const = 0;
- QCString includeDependencyGraphFileName() const;
+ virtual QCString includeDependencyGraphFileName() const = 0;
+
+ virtual QCString includedByDependencyGraphFileName() const = 0;
- QCString includedByDependencyGraphFileName() const;
-
/*! Returns the absolute path including the file name. */
- QCString absFilePath() const { return m_filePath; }
-
+ virtual QCString absFilePath() const = 0;
+
/*! Returns the name as it is used in the documentation */
- const QCString &docName() const { return m_docname; }
+ virtual const QCString &docName() const = 0;
/*! Returns TRUE if this file is a source file. */
- bool isSource() const { return m_isSource; }
+ virtual bool isSource() const = 0;
- bool isDocumentationFile() const;
-
- Definition *getSourceDefinition(int lineNr) const;
- MemberDef *getSourceMember(int lineNr) const;
+ virtual bool isDocumentationFile() const = 0;
- /*! Returns the absolute path of this file. */
- QCString getPath() const { return m_path; }
+ virtual Definition *getSourceDefinition(int lineNr) const = 0;
+ virtual MemberDef *getSourceMember(int lineNr) const = 0;
+
+ /*! Returns the absolute path of this file. */
+ virtual QCString getPath() const = 0;
/*! Returns version of this file. */
- QCString getVersion() const { return m_fileVersion; }
-
- bool isLinkableInProject() const;
+ virtual QCString getVersion() const = 0;
+
+ virtual bool isLinkableInProject() const = 0;
- bool isLinkable() const { return isLinkableInProject() || isReference(); }
- bool isIncluded(const QCString &name) const;
+ virtual bool isLinkable() const = 0;
+ virtual bool isIncluded(const QCString &name) const = 0;
- PackageDef *packageDef() const { return m_package; }
- DirDef *getDirDef() const { return m_dir; }
- NamespaceSDict *getUsedNamespaces() const;
- SDict<Definition> *getUsedClasses() const { return m_usingDeclList; }
- QList<IncludeInfo> *includeFileList() const { return m_includeList; }
- QList<IncludeInfo> *includedByFileList() const { return m_includedByList; }
- void getAllIncludeFilesRecursively(QStrList &incFiles) const;
+ virtual PackageDef *packageDef() const = 0;
+ virtual DirDef *getDirDef() const = 0;
+ virtual NamespaceSDict *getUsedNamespaces() const = 0;
+ virtual SDict<Definition> *getUsedClasses() const = 0;
+ virtual QList<IncludeInfo> *includeFileList() const = 0;
+ virtual QList<IncludeInfo> *includedByFileList() const = 0;
+ virtual void getAllIncludeFilesRecursively(QStrList &incFiles) const = 0;
- MemberList *getMemberList(MemberListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+ virtual MemberList *getMemberList(MemberListType lt) const = 0;
+ virtual const QList<MemberList> &getMemberLists() const = 0;
/* user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
- NamespaceSDict *getNamespaceSDict() const { return m_namespaceSDict; }
- ClassSDict *getClassSDict() const { return m_classSDict; }
+ virtual MemberGroupSDict *getMemberGroupSDict() const = 0;
+ virtual NamespaceSDict *getNamespaceSDict() const = 0;
+ virtual ClassSDict *getClassSDict() const = 0;
+
+ virtual QCString title() const = 0;
+ virtual bool hasDetailedDescription() const = 0;
+ virtual QCString fileVersion() const = 0;
- QCString title() const;
- bool hasDetailedDescription() const;
- QCString fileVersion() const;
+ virtual bool subGrouping() const = 0;
- bool subGrouping() const { return m_subGrouping; }
-
//---------------------------------
- void addSourceRef(int line,Definition *d,MemberDef *md);
+ virtual void addSourceRef(int line,Definition *d,MemberDef *md) = 0;
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
- void writeSummaryLinks(OutputList &ol);
- void writeTagFile(FTextStream &t);
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeMemberPages(OutputList &ol) = 0;
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const = 0;
+ virtual void writeSummaryLinks(OutputList &ol) = 0;
+ virtual void writeTagFile(FTextStream &t) = 0;
- void startParsing();
- void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
- void parseSource(bool sameTu,QStrList &filesInSameTu);
- void finishParsing();
- void setDiskName(const QCString &name);
+ virtual void startParsing() = 0;
+ virtual void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu) = 0;
+ virtual void parseSource(bool sameTu,QStrList &filesInSameTu) = 0;
+ virtual void finishParsing() = 0;
+ virtual void setDiskName(const QCString &name) = 0;
- void insertMember(MemberDef *md);
- void insertClass(ClassDef *cd);
- void insertNamespace(NamespaceDef *nd);
- void computeAnchors();
+ virtual void insertMember(MemberDef *md) = 0;
+ virtual void insertClass(ClassDef *cd) = 0;
+ virtual void insertNamespace(NamespaceDef *nd) = 0;
+ virtual void computeAnchors() = 0;
- void setPackageDef(PackageDef *pd) { m_package=pd; }
- void setDirDef(DirDef *dd) { m_dir=dd; }
+ virtual void setPackageDef(PackageDef *pd) = 0;
+ virtual void setDirDef(DirDef *dd) = 0;
- void addUsingDirective(NamespaceDef *nd);
- void addUsingDeclaration(Definition *def);
- void combineUsingRelations();
+ virtual void addUsingDirective(NamespaceDef *nd) = 0;
+ virtual void addUsingDeclaration(Definition *def) = 0;
+ virtual void combineUsingRelations() = 0;
- bool generateSourceFile() const;
- void sortMemberLists();
+ virtual bool generateSourceFile() const = 0;
+ virtual void sortMemberLists() = 0;
- void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
- void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
+ virtual void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect) = 0;
+ virtual void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported) = 0;
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
- void addIncludedUsingDirectives();
+ virtual void addMembersToMemberGroup() = 0;
+ virtual void distributeMemberGroupDocumentation() = 0;
+ virtual void findSectionsInDocumentation() = 0;
+ virtual void addIncludedUsingDirectives() = 0;
- void addListReferences();
- //bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
- //bool includesByName(const QCString &name) const;
- bool visited;
+ virtual void addListReferences() = 0;
- protected:
- /**
- * Retrieves the file version from version control system.
- */
- void acquireFileVersion();
-
- private:
- MemberList *createMemberList(MemberListType lt);
- void addMemberToList(MemberListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
- void writeIncludeFiles(OutputList &ol);
- void writeIncludeGraph(OutputList &ol);
- void writeIncludedByGraph(OutputList &ol);
- void writeMemberGroups(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeSourceLink(OutputList &ol);
- void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
- bool isConstantGroup);
- void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d);
- void writeInlineClasses(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void writeClassesToTagFile(FTextStream &t,ClassSDict *d);
-
- QDict<IncludeInfo> *m_includeDict;
- QList<IncludeInfo> *m_includeList;
- QDict<IncludeInfo> *m_includedByDict;
- QList<IncludeInfo> *m_includedByList;
- NamespaceSDict *m_usingDirList;
- SDict<Definition> *m_usingDeclList;
- QCString m_path;
- QCString m_filePath;
- QCString m_inclDepFileName;
- QCString m_inclByDepFileName;
- QCString m_outputDiskName;
- QCString m_fileName;
- QCString m_docname;
- QIntDict<Definition> *m_srcDefDict;
- QIntDict<MemberDef> *m_srcMemberDict;
- bool m_isSource;
- QCString m_fileVersion;
- PackageDef *m_package;
- DirDef *m_dir;
- QList<MemberList> m_memberLists;
- MemberGroupSDict *m_memberGroupSDict;
- NamespaceSDict *m_namespaceSDict;
- ClassSDict *m_classSDict;
- ClassSDict *m_interfaceSDict;
- ClassSDict *m_structSDict;
- ClassSDict *m_exceptionSDict;
- bool m_subGrouping;
+ virtual void setVisited(bool v) = 0;
+ virtual bool isVisited() const = 0;
};
+FileDef *createFileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
+
/** Class representing a list of FileDef objects. */
class FileList : public QList<FileDef>
{
diff --git a/src/formula.cpp b/src/formula.cpp
index c252e07..1c5042e 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -71,6 +71,7 @@ void FormulaList::generateBitmaps(const char *path)
t << "\\documentclass{article}" << endl;
t << "\\usepackage{ifthen}" << endl;
t << "\\usepackage{epsfig}" << endl; // for those who want to include images
+ t << "\\usepackage[utf8]{inputenc}" << endl; // looks like some older distributions with newunicode package 1.1 need this option.
writeExtraLatexPackages(t);
writeLatexSpecialFormulaChars(t);
t << "\\pagestyle{empty}" << endl;
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 616df5b..31924fa 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -934,7 +934,7 @@ LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")
yy_pop_state();
YY_FTN_RESET
}
-<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"enum"|"type"|"interface")?{BS} { // Fortran subroutine or function ends
+<Start>"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"enum"|"type"|"interface")?{BS} { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl;
endScope();
startFontClass("keyword");
@@ -943,11 +943,11 @@ LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")
yy_push_state(YY_START);
BEGIN(Subprogend);
}
-<Subprogend>{ID}/{BS}(\n|!) {
+<Subprogend>{ID}/{BS}(\n|!|;) {
generateLink(*g_code,yytext);
yy_pop_state();
}
-<Start>^{BS}"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"enum"|"type"|"interface"){BS}/(\n|!) { // Fortran subroutine or function ends
+<Start>"end"{BS}("block"{BS}"data"|{SUBPROG}|"module"|"program"|"enum"|"type"|"interface"){BS}/(\n|!|;) { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl;
endScope();
startFontClass("keyword");
@@ -1357,7 +1357,7 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",exName);
+ g_sourceFileDef = createFileDef("",exName);
}
if (g_sourceFileDef)
{
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 1f0c356..7d7437d 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -66,6 +66,7 @@
#include "fortrancode.h"
#include "pre.h"
#include "arguments.h"
+#include "debug.h"
// Toggle for some debugging info
//#define DBG_CTX(x) fprintf x
@@ -522,16 +523,16 @@ SCOPENAME ({ID}{BS}"::"{BS})*
<InterfaceBody>. {}
/*-- Contains handling --*/
-<Start>^{BS}{CONTAINS}/({BS}|\n|!) {
+<Start>^{BS}{CONTAINS}/({BS}|\n|!|;) {
if(YY_START == Start)
{
addModule(NULL);
yy_push_state(ModuleBodyContains); //anon program
}
}
-<ModuleBody>^{BS}{CONTAINS}/({BS}|\n|!) { BEGIN(ModuleBodyContains); }
-<SubprogBody>^{BS}{CONTAINS}/({BS}|\n|!) { BEGIN(SubprogBodyContains); }
-<TypedefBody>^{BS}{CONTAINS}/({BS}|\n|!) { BEGIN(TypedefBodyContains); }
+<ModuleBody>^{BS}{CONTAINS}/({BS}|\n|!|;) { BEGIN(ModuleBodyContains); }
+<SubprogBody>^{BS}{CONTAINS}/({BS}|\n|!|;) { BEGIN(SubprogBodyContains); }
+<TypedefBody>^{BS}{CONTAINS}/({BS}|\n|!|;) { BEGIN(TypedefBodyContains); }
/*------ module handling ------------------------------------------------------------*/
<Start>block{BS}data{BS}{ID_} { //
@@ -547,13 +548,13 @@ SCOPENAME ({ID}{BS}"::"{BS})*
yy_push_state(Program);
defaultProtection = Public;
}
-<BlockData>^{BS}"end"({BS}(block{BS}data)({BS_}{ID})?)?{BS}/(\n|!) { // end block data
+<BlockData>^{BS}"end"({BS}(block{BS}data)({BS_}{ID})?)?{BS}/(\n|!|;) { // end block data
//if (!endScope(current_root))
// yyterminate();
defaultProtection = Public;
yy_pop_state();
}
-<Start,ModuleBody,ModuleBodyContains>^{BS}"end"({BS}(module|program)({BS_}{ID})?)?{BS}/(\n|!) { // end module
+<Start,ModuleBody,ModuleBodyContains>"end"({BS}(module|program)({BS_}{ID})?)?{BS}/(\n|!|;) { // end module
resolveModuleProcedures(moduleProcedures, current_root);
if (!endScope(current_root))
yyterminate();
@@ -690,7 +691,7 @@ private {
<TypedefBody,TypedefBodyContains>{
-^{BS}"end"{BS}"type"({BS_}{ID})?{BS}/(\n|!) { /* end type definition */
+^{BS}"end"{BS}"type"({BS_}{ID})?{BS}/(\n|!|;) { /* end type definition */
last_entry->parent()->endBodyLine = yyLineNr;
if (!endScope(current_root))
yyterminate();
@@ -701,7 +702,7 @@ private {
/*------- module/global/typedef variable ---------------------------------------------------*/
-<SubprogBody,SubprogBodyContains>^{BS}[0-9]*{BS}"end"({BS}{SUBPROG}({BS_}{ID})?)?{BS}/(\n|!) {
+<SubprogBody,SubprogBodyContains>^{BS}[0-9]*{BS}"end"({BS}{SUBPROG}({BS_}{ID})?)?{BS}/(\n|!|;) {
//
// ABSTRACT and specific interfaces are stored
// in a scope of their own, even if multiple
@@ -1513,6 +1514,7 @@ const char* prepassFixedForm(const char* contents, int *hasContLine)
int column=0;
int prevLineLength=0;
int prevLineAmpOrExclIndex=-1;
+ int skipped = 0;
char prevQuote = '\0';
char thisQuote = '\0';
bool emptyLabel=TRUE;
@@ -1521,18 +1523,41 @@ const char* prepassFixedForm(const char* contents, int *hasContLine)
bool inDouble=FALSE;
bool inBackslash=FALSE;
bool fullCommentLine=TRUE;
+ bool artificialComment=FALSE;
+ bool spaces=TRUE;
int newContentsSize = strlen(contents)+3; // \000, \n (when necessary) and one spare character (to avoid reallocation)
char* newContents = (char*)malloc(newContentsSize);
int curLine = 1;
- for(int i=0, j=0;;i++,j++) {
+ int j = -1;
+ for(int i=0;;i++) {
+ column++;
+ char c = contents[i];
+ if (artificialComment && c != '\n')
+ {
+ if (c == '!' && spaces)
+ {
+ newContents[j++] = c;
+ artificialComment = FALSE;
+ spaces = FALSE;
+ skipped = 0;
+ continue;
+ }
+ else if (c == ' ' || c == '\t') continue;
+ else
+ {
+ spaces = FALSE;
+ skipped++;
+ continue;
+ }
+ }
+
+ j++;
if(j>=newContentsSize-3) { // check for spare characters, which may be eventually used below (by & and '! ')
newContents = (char*)realloc(newContents, newContentsSize+1000);
newContentsSize = newContentsSize+1000;
}
- column++;
- char c = contents[i];
switch(c) {
case '\n':
if (!fullCommentLine)
@@ -1540,6 +1565,11 @@ const char* prepassFixedForm(const char* contents, int *hasContLine)
prevLineLength=column;
prevLineAmpOrExclIndex=getAmpOrExclAtTheEnd(&contents[i-prevLineLength+1], prevLineLength,prevQuote);
if (prevLineAmpOrExclIndex == -1) prevLineAmpOrExclIndex = column - 1;
+ if (skipped)
+ {
+ prevLineAmpOrExclIndex = -1;
+ skipped = 0;
+ }
}
else
{
@@ -1550,6 +1580,8 @@ const char* prepassFixedForm(const char* contents, int *hasContLine)
hasContLine[curLine - 1] = 1;
}
}
+ artificialComment=FALSE;
+ spaces=TRUE;
fullCommentLine=TRUE;
column=0;
emptyLabel=TRUE;
@@ -1654,7 +1686,8 @@ const char* prepassFixedForm(const char* contents, int *hasContLine)
j++;
} else { // add & just before end of previous line comment
/* first line is not a continuation line in code, just in snippets etc. */
- if (curLine != 1) insertCharacter(newContents, j+1, (j+1)-6-prevLineLength+prevLineAmpOrExclIndex, '&');
+ if (curLine != 1) insertCharacter(newContents, j+1, (j+1)-6-prevLineLength+prevLineAmpOrExclIndex+skipped, '&');
+ skipped = 0;
j++;
}
if (hasContLine) hasContLine[curLine - 1] = 1;
@@ -1664,13 +1697,20 @@ const char* prepassFixedForm(const char* contents, int *hasContLine)
prevLineLength=0;
} else if ((column > fixedCommentAfter) && !commented) {
// first non commented non blank character after position fixedCommentAfter
- if (c != '!') {
+ if (c == '&') {
+ newContents[j]=' ';
+ }
+ else if (c != '!') {
// I'm not a possible start of doxygen comment
- newContents[j++]='!';
- newContents[j++]=' '; // so that '<' and '>' as first character are not converted to doxygen comment
+ newContents[j]=' ';
+ artificialComment = TRUE;
+ spaces=TRUE;
+ skipped = 0;
+ }
+ else {
+ newContents[j]=c;
+ commented = TRUE;
}
- newContents[j]=c;
- commented = TRUE;
} else {
if (!commented) fullCommentLine=FALSE;
newContents[j]=c;
@@ -2640,6 +2680,8 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt, Fortra
//printf("Input fixed form string:\n%s\n", fileBuf);
//printf("===========================\n");
inputString = prepassFixedForm(fileBuf, NULL);
+ Debug::print(Debug::FortranFixed2Free,0,"======== Fixed to Free format =========\n---- Input fixed form string ------- \n%s\n", fileBuf);
+ Debug::print(Debug::FortranFixed2Free,0,"---- Resulting free form string ------- \n%s\n", inputString);
//printf("Resulting free form string:\n%s\n", inputString);
//printf("===========================\n");
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 9e58591..d66a935 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -223,7 +223,7 @@ static QCString node2URL(FTVNode *n,bool overruleFile=FALSE,bool srcLink=FALSE)
{
if (overruleFile && n->def && n->def->definitionType()==Definition::TypeFile)
{
- FileDef *fd = (FileDef*)n->def;
+ FileDef *fd = dynamic_cast<FileDef*>(n->def);
if (srcLink)
{
url = fd->getSourceFileBase();
@@ -417,9 +417,9 @@ void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level,in
{
FileDef *srcRef=0;
if (n->def && n->def->definitionType()==Definition::TypeFile &&
- ((FileDef*)n->def)->generateSourceFile())
+ (dynamic_cast<FileDef*>(n->def))->generateSourceFile())
{
- srcRef = (FileDef*)n->def;
+ srcRef = dynamic_cast<FileDef*>(n->def);
}
if (srcRef)
{
@@ -560,7 +560,7 @@ static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t,
{
if (n->def && n->def->definitionType()==Definition::TypeFile)
{
- FileDef *fd = (FileDef*)n->def;
+ FileDef *fd = dynamic_cast<FileDef*>(n->def);
bool doc,src;
doc = fileVisibleInIndex(fd,src);
if (doc)
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 397b254..31eb7fe 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -40,11 +40,129 @@
#include "membername.h"
#include "dirdef.h"
#include "config.h"
+#include "definitionimpl.h"
//---------------------------------------------------------------------------
-GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
- const char *refFileName) : Definition(df,dl,1,na)
+class GroupDefImpl : public DefinitionImpl, public GroupDef
+{
+ public:
+ GroupDefImpl(const char *fileName,int line,const char *name,const char *title,const char *refFileName=0);
+ virtual ~GroupDefImpl();
+
+ virtual DefType definitionType() const { return TypeGroup; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual QCString displayName(bool=TRUE) const { return hasGroupTitle() ? title : DefinitionImpl::name(); }
+ virtual const char *groupTitle() const { return title; }
+ virtual void setGroupTitle( const char *newtitle );
+ virtual bool hasGroupTitle( ) const { return titleSet; }
+ virtual void addFile(const FileDef *def);
+ virtual bool addClass(const ClassDef *def);
+ virtual bool addNamespace(const NamespaceDef *def);
+ virtual void addGroup(const GroupDef *def);
+ virtual void addPage(PageDef *def);
+ virtual void addExample(const PageDef *def);
+ virtual void addDir(const DirDef *dd);
+ virtual bool insertMember(MemberDef *def,bool docOnly=FALSE);
+ virtual void removeMember(MemberDef *md);
+ virtual bool findGroup(const GroupDef *def) const; // true if def is a subgroup of this group
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeMemberPages(OutputList &ol);
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
+ virtual void writeTagFile(FTextStream &);
+ virtual int countMembers() const;
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual bool isASubGroup() const;
+ virtual void computeAnchors();
+
+ virtual void addMembersToMemberGroup();
+ virtual void distributeMemberGroupDocumentation();
+ virtual void findSectionsInDocumentation();
+
+ virtual void addListReferences();
+ virtual void sortMemberLists();
+ virtual bool subGrouping() const { return m_subGrouping; }
+
+ virtual void setGroupScope(Definition *d) { groupScope = d; }
+ virtual Definition *getGroupScope() const { return groupScope; }
+
+ virtual MemberList *getMemberList(MemberListType lt) const;
+ virtual const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+
+ /* user defined member groups */
+ virtual MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
+
+ virtual FileList * getFiles() const { return fileList; }
+ virtual ClassSDict * getClasses() const { return classSDict; }
+ virtual NamespaceSDict * getNamespaces() const { return namespaceSDict; }
+ virtual GroupList * getSubGroups() const { return groupList; }
+ virtual PageSDict * getPages() const { return pageDict; }
+ virtual DirList * getDirs() const { return dirList; }
+ virtual PageSDict * getExamples() const { return exampleDict; }
+ virtual bool hasDetailedDescription() const;
+ virtual void sortSubGroups();
+
+ private:
+ void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
+ MemberList *createMemberList(MemberListType lt);
+ void addMemberToList(MemberListType lt,MemberDef *md);
+ void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
+ void removeMemberFromList(MemberListType lt,MemberDef *md);
+ void writeGroupGraph(OutputList &ol);
+ void writeFiles(OutputList &ol,const QCString &title);
+ void writeNamespaces(OutputList &ol,const QCString &title);
+ void writeNestedGroups(OutputList &ol,const QCString &title);
+ void writeDirs(OutputList &ol,const QCString &title);
+ void writeClasses(OutputList &ol,const QCString &title);
+ void writeInlineClasses(OutputList &ol);
+ void writePageDocumentation(OutputList &ol);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeMemberGroups(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void writeSummaryLinks(OutputList &ol);
+ void updateLanguage(const Definition *);
+
+ QCString title; // title of the group
+ bool titleSet; // true if title is not the same as the name
+ QCString fileName; // base name of the generated file
+ FileList *fileList; // list of files in the group
+ ClassSDict *classSDict; // list of classes in the group
+ NamespaceSDict *namespaceSDict; // list of namespaces in the group
+ GroupList *groupList; // list of sub groups.
+ PageSDict *pageDict; // list of pages in the group
+ PageSDict *exampleDict; // list of examples in the group
+ DirList *dirList; // list of directories in the group
+
+ MemberList *allMemberList;
+ MemberNameInfoSDict *allMemberNameInfoSDict;
+
+ Definition *groupScope;
+
+ QList<MemberList> m_memberLists;
+ MemberGroupSDict *memberGroupSDict;
+ bool m_subGrouping;
+
+};
+
+GroupDef *createGroupDef(const char *fileName,int line,const char *name,
+ const char *title,const char *refFileName)
+{
+ return new GroupDefImpl(fileName,line,name,title,refFileName);
+}
+
+
+//---------------------------------------------------------------------------
+
+GroupDefImpl::GroupDefImpl(const char *df,int dl,const char *na,const char *t,
+ const char *refFileName) : DefinitionImpl(df,dl,1,na)
{
fileList = new FileList;
classSDict = new ClassSDict(17);
@@ -69,12 +187,12 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
allMemberList = new MemberList(MemberListType_allMembersList);
- visited = 0;
+ //visited = 0;
groupScope = 0;
m_subGrouping=Config_getBool(SUBGROUPING);
}
-GroupDef::~GroupDef()
+GroupDefImpl::~GroupDefImpl()
{
delete fileList;
delete classSDict;
@@ -88,7 +206,7 @@ GroupDef::~GroupDef()
delete dirList;
}
-void GroupDef::setGroupTitle( const char *t )
+void GroupDefImpl::setGroupTitle( const char *t )
{
if ( t && qstrlen(t) )
{
@@ -104,7 +222,7 @@ void GroupDef::setGroupTitle( const char *t )
}
-void GroupDef::distributeMemberGroupDocumentation()
+void GroupDefImpl::distributeMemberGroupDocumentation()
{
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
@@ -114,7 +232,7 @@ void GroupDef::distributeMemberGroupDocumentation()
}
}
-void GroupDef::findSectionsInDocumentation()
+void GroupDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
@@ -135,7 +253,7 @@ void GroupDef::findSectionsInDocumentation()
}
}
-void GroupDef::addFile(const FileDef *def)
+void GroupDefImpl::addFile(const FileDef *def)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
if (def->isHidden()) return;
@@ -146,7 +264,7 @@ void GroupDef::addFile(const FileDef *def)
fileList->append(def);
}
-bool GroupDef::addClass(const ClassDef *cd)
+bool GroupDefImpl::addClass(const ClassDef *cd)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
if (cd->isHidden()) return FALSE;
@@ -194,7 +312,7 @@ bool GroupDef::addClass(const ClassDef *cd)
return FALSE;
}
-bool GroupDef::addNamespace(const NamespaceDef *def)
+bool GroupDefImpl::addNamespace(const NamespaceDef *def)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
if (def->isHidden()) return FALSE;
@@ -210,7 +328,7 @@ bool GroupDef::addNamespace(const NamespaceDef *def)
return FALSE;
}
-void GroupDef::addDir(const DirDef *def)
+void GroupDefImpl::addDir(const DirDef *def)
{
if (def->isHidden()) return;
if (Config_getBool(SORT_BRIEF_DOCS))
@@ -219,7 +337,7 @@ void GroupDef::addDir(const DirDef *def)
dirList->append(def);
}
-void GroupDef::addPage(PageDef *def)
+void GroupDefImpl::addPage(PageDef *def)
{
if (def->isHidden()) return;
//printf("Making page %s part of a group\n",def->name.data());
@@ -227,14 +345,14 @@ void GroupDef::addPage(PageDef *def)
def->makePartOfGroup(this);
}
-void GroupDef::addExample(const PageDef *def)
+void GroupDefImpl::addExample(const PageDef *def)
{
if (def->isHidden()) return;
exampleDict->append(def->name(),def);
}
-void GroupDef::addMembersToMemberGroup()
+void GroupDefImpl::addMembersToMemberGroup()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -246,7 +364,7 @@ void GroupDef::addMembersToMemberGroup()
}
}
- //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());
+ //printf("GroupDefImpl::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
@@ -256,7 +374,7 @@ void GroupDef::addMembersToMemberGroup()
}
-bool GroupDef::insertMember(MemberDef *md,bool docOnly)
+bool GroupDefImpl::insertMember(MemberDef *md,bool docOnly)
{
if (md->isHidden()) return FALSE;
updateLanguage(md);
@@ -412,7 +530,7 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
addMemberToList(MemberListType_docFriendMembers,md);
break;
default:
- err("GroupDef::insertMembers(): "
+ err("GroupDefImpl::insertMembers(): "
"member `%s' (typeid=%d) with scope `%s' inserted in group scope `%s'!\n",
md->name().data(),md->memberType(),
md->getClassDef() ? md->getClassDef()->name().data() : "",
@@ -421,7 +539,7 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
return TRUE;
}
-void GroupDef::removeMember(MemberDef *md)
+void GroupDefImpl::removeMember(MemberDef *md)
{
// fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data());
MemberNameInfo *mni = allMemberNameInfoSDict->find(md->name());
@@ -503,12 +621,12 @@ void GroupDef::removeMember(MemberDef *md)
removeMemberFromList(MemberListType_docFriendMembers,md);
break;
default:
- err("GroupDef::removeMember(): unexpected member remove in file!\n");
+ err("GroupDefImpl::removeMember(): unexpected member remove in file!\n");
}
}
}
-bool GroupDef::findGroup(const GroupDef *def) const
+bool GroupDefImpl::findGroup(const GroupDef *def) const
{
if (this==def)
{
@@ -529,7 +647,7 @@ bool GroupDef::findGroup(const GroupDef *def) const
return FALSE;
}
-void GroupDef::addGroup(const GroupDef *def)
+void GroupDefImpl::addGroup(const GroupDef *def)
{
//printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
//if (Config_getBool(SORT_MEMBER_DOCS))
@@ -538,13 +656,13 @@ void GroupDef::addGroup(const GroupDef *def)
groupList->append(def);
}
-bool GroupDef::isASubGroup() const
+bool GroupDefImpl::isASubGroup() const
{
GroupList *groups = partOfGroups();
return groups!=0 && groups->count()!=0;
}
-int GroupDef::countMembers() const
+int GroupDefImpl::countMembers() const
{
return fileList->count()+
classSDict->count()+
@@ -556,13 +674,13 @@ int GroupDef::countMembers() const
}
/*! Compute the HTML anchor names for all members in the group */
-void GroupDef::computeAnchors()
+void GroupDefImpl::computeAnchors()
{
- //printf("GroupDef::computeAnchors()\n");
+ //printf("GroupDefImpl::computeAnchors()\n");
setAnchors(allMemberList);
}
-void GroupDef::writeTagFile(FTextStream &tagFile)
+void GroupDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <compound kind=\"group\">" << endl;
tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
@@ -705,7 +823,7 @@ void GroupDef::writeTagFile(FTextStream &tagFile)
tagFile << " </compound>" << endl;
}
-void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF))
|| !documentation().isEmpty() || !inbodyDocumentation().isEmpty()
@@ -766,7 +884,7 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
}
}
-void GroupDef::writeBriefDescription(OutputList &ol)
+void GroupDefImpl::writeBriefDescription(OutputList &ol)
{
if (hasBriefDescription())
{
@@ -802,7 +920,7 @@ void GroupDef::writeBriefDescription(OutputList &ol)
ol.writeSynopsis();
}
-void GroupDef::writeGroupGraph(OutputList &ol)
+void GroupDefImpl::writeGroupGraph(OutputList &ol)
{
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(GROUP_GRAPHS)*/ )
{
@@ -822,7 +940,7 @@ void GroupDef::writeGroupGraph(OutputList &ol)
}
}
-void GroupDef::writeFiles(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeFiles(OutputList &ol,const QCString &title)
{
// write list of files
if (fileList->count()>0)
@@ -854,13 +972,13 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
}
}
-void GroupDef::writeNamespaces(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeNamespaces(OutputList &ol,const QCString &title)
{
// write list of namespaces
namespaceSDict->writeDeclaration(ol,title);
}
-void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeNestedGroups(OutputList &ol,const QCString &title)
{
// write list of groups
int count=0;
@@ -910,7 +1028,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
}
}
-void GroupDef::writeDirs(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeDirs(OutputList &ol,const QCString &title)
{
// write list of directories
if (dirList->count()>0)
@@ -943,18 +1061,18 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
}
}
-void GroupDef::writeClasses(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeClasses(OutputList &ol,const QCString &title)
{
// write list of classes
classSDict->writeDeclaration(ol,0,title,FALSE);
}
-void GroupDef::writeInlineClasses(OutputList &ol)
+void GroupDefImpl::writeInlineClasses(OutputList &ol)
{
classSDict->writeDocumentation(ol);
}
-void GroupDef::writePageDocumentation(OutputList &ol)
+void GroupDefImpl::writePageDocumentation(OutputList &ol)
{
PageDef *pd=0;
PageSDict::Iterator pdi(*pageDict);
@@ -977,7 +1095,7 @@ void GroupDef::writePageDocumentation(OutputList &ol)
}
}
-void GroupDef::writeMemberGroups(OutputList &ol)
+void GroupDefImpl::writeMemberGroups(OutputList &ol)
{
/* write user defined member groups */
if (memberGroupSDict)
@@ -993,19 +1111,19 @@ void GroupDef::writeMemberGroups(OutputList &ol)
}
}
-void GroupDef::startMemberDeclarations(OutputList &ol)
+void GroupDefImpl::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
-void GroupDef::endMemberDeclarations(OutputList &ol)
+void GroupDefImpl::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
-void GroupDef::startMemberDocumentation(OutputList &ol)
+void GroupDefImpl::startMemberDocumentation(OutputList &ol)
{
- //printf("** GroupDef::startMemberDocumentation()\n");
+ //printf("** GroupDefImpl::startMemberDocumentation()\n");
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
ol.pushGeneratorState();
@@ -1014,9 +1132,9 @@ void GroupDef::startMemberDocumentation(OutputList &ol)
}
}
-void GroupDef::endMemberDocumentation(OutputList &ol)
+void GroupDefImpl::endMemberDocumentation(OutputList &ol)
{
- //printf("** GroupDef::endMemberDocumentation()\n");
+ //printf("** GroupDefImpl::endMemberDocumentation()\n");
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
ol.popGeneratorState();
@@ -1024,7 +1142,7 @@ void GroupDef::endMemberDocumentation(OutputList &ol)
}
}
-void GroupDef::writeAuthorSection(OutputList &ol)
+void GroupDefImpl::writeAuthorSection(OutputList &ol)
{
// write Author section (Man only)
ol.pushGeneratorState();
@@ -1036,7 +1154,7 @@ void GroupDef::writeAuthorSection(OutputList &ol)
ol.popGeneratorState();
}
-void GroupDef::writeSummaryLinks(OutputList &ol)
+void GroupDefImpl::writeSummaryLinks(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1081,7 +1199,7 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
ol.popGeneratorState();
}
-void GroupDef::writeDocumentation(OutputList &ol)
+void GroupDefImpl::writeDocumentation(OutputList &ol)
{
//static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
ol.pushGeneratorState();
@@ -1258,7 +1376,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
-void GroupDef::writeMemberPages(OutputList &ol)
+void GroupDefImpl::writeMemberPages(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1276,7 +1394,7 @@ void GroupDef::writeMemberPages(OutputList &ol)
ol.popGeneratorState();
}
-void GroupDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
+void GroupDefImpl::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
{
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
@@ -1525,12 +1643,12 @@ void addExampleToGroups(Entry *root,PageDef *eg)
}
}
-QCString GroupDef::getOutputFileBase() const
+QCString GroupDefImpl::getOutputFileBase() const
{
return fileName;
}
-void GroupDef::addListReferences()
+void GroupDefImpl::addListReferences()
{
{
QList<ListItemInfo> *xrefItems = xrefListItems();
@@ -1559,7 +1677,7 @@ void GroupDef::addListReferences()
}
}
-MemberList *GroupDef::createMemberList(MemberListType lt)
+MemberList *GroupDefImpl::createMemberList(MemberListType lt)
{
m_memberLists.setAutoDelete(TRUE);
QListIterator<MemberList> mli(m_memberLists);
@@ -1578,7 +1696,7 @@ MemberList *GroupDef::createMemberList(MemberListType lt)
return ml;
}
-void GroupDef::addMemberToList(MemberListType lt,MemberDef *md)
+void GroupDefImpl::addMemberToList(MemberListType lt,MemberDef *md)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
@@ -1589,7 +1707,7 @@ void GroupDef::addMemberToList(MemberListType lt,MemberDef *md)
ml->append(md);
}
-void GroupDef::sortMemberLists()
+void GroupDefImpl::sortMemberLists()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1599,7 +1717,7 @@ void GroupDef::sortMemberLists()
}
}
-MemberList *GroupDef::getMemberList(MemberListType lt) const
+MemberList *GroupDefImpl::getMemberList(MemberListType lt) const
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1613,7 +1731,7 @@ MemberList *GroupDef::getMemberList(MemberListType lt) const
return 0;
}
-void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
+void GroupDefImpl::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
{
static bool optimizeVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
@@ -1629,36 +1747,36 @@ void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
}
}
-void GroupDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
+void GroupDefImpl::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDocumentation(ol,name(),this,title);
}
-void GroupDef::removeMemberFromList(MemberListType lt,MemberDef *md)
+void GroupDefImpl::removeMemberFromList(MemberListType lt,MemberDef *md)
{
MemberList *ml = getMemberList(lt);
if (ml) ml->remove(md);
}
-void GroupDef::sortSubGroups()
+void GroupDefImpl::sortSubGroups()
{
groupList->sort();
}
-bool GroupDef::isLinkableInProject() const
+bool GroupDefImpl::isLinkableInProject() const
{
return !isReference() && isLinkable();
}
-bool GroupDef::isLinkable() const
+bool GroupDefImpl::isLinkable() const
{
return hasUserDocumentation();
}
// let the "programming language" for a group depend on what is inserted into it.
// First item that has an associated languages determines the language for the whole group.
-void GroupDef::updateLanguage(const Definition *d)
+void GroupDefImpl::updateLanguage(const Definition *d)
{
if (getLanguage()==SrcLangExt_Unknown && d->getLanguage()!=SrcLangExt_Unknown)
{
@@ -1666,7 +1784,7 @@ void GroupDef::updateLanguage(const Definition *d)
}
}
-bool GroupDef::hasDetailedDescription() const
+bool GroupDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
return ((!briefDescription().isEmpty() && repeatBrief) ||
diff --git a/src/groupdef.h b/src/groupdef.h
index be4475f..2649de7 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -42,122 +42,70 @@ class MemberDef;
class FTextStream;
/** A model of a group of symbols. */
-class GroupDef : public Definition
+class GroupDef : virtual public Definition
{
public:
- GroupDef(const char *fileName,int line,const char *name,const char *title,const char *refFileName=0);
- ~GroupDef();
- DefType definitionType() const { return TypeGroup; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- QCString displayName(bool=TRUE) const { return hasGroupTitle() ? title : Definition::name(); }
- const char *groupTitle() const { return title; }
- void setGroupTitle( const char *newtitle );
- bool hasGroupTitle( ) const { return titleSet; }
- void addFile(const FileDef *def);
- bool addClass(const ClassDef *def);
- bool addNamespace(const NamespaceDef *def);
- void addGroup(const GroupDef *def);
- void addParentGroup(const GroupDef *def);
- void addPage(PageDef *def);
- void addExample(const PageDef *def);
- void addDir(const DirDef *dd);
- bool insertMember(MemberDef *def,bool docOnly=FALSE);
- void removeMember(MemberDef *md);
- bool findGroup(const GroupDef *def) const; // true if def is a subgroup of this group
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
- void writeTagFile(FTextStream &);
- int countMembers() const;
- bool isLinkableInProject() const;
- bool isLinkable() const;
- bool isASubGroup() const;
- void computeAnchors();
-
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
-
- void addListReferences();
- void sortMemberLists();
- bool subGrouping() const { return m_subGrouping; }
-
- bool visited; // number of times accessed for output - KPW
-
- //friend void writeGroupTreeNode(OutputList&, GroupDef*, int, FTVHelp*);
- // make accessible for writing tree view of group in index.cpp - KPW
-
- void setGroupScope(Definition *d) { groupScope = d; }
- Definition *getGroupScope() const { return groupScope; }
-
- MemberList *getMemberList(MemberListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+ ~GroupDef() {}
+
+ virtual DefType definitionType() const = 0;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual const char *groupTitle() const = 0;
+ virtual void setGroupTitle( const char *newtitle ) = 0;
+ virtual bool hasGroupTitle( ) const = 0;
+ virtual void addFile(const FileDef *def) = 0;
+ virtual bool addClass(const ClassDef *def) = 0;
+ virtual bool addNamespace(const NamespaceDef *def) = 0;
+ virtual void addGroup(const GroupDef *def) = 0;
+ virtual void addPage(PageDef *def) = 0;
+ virtual void addExample(const PageDef *def) = 0;
+ virtual void addDir(const DirDef *dd) = 0;
+ virtual bool insertMember(MemberDef *def,bool docOnly=FALSE) = 0;
+ virtual void removeMember(MemberDef *md) = 0;
+ virtual bool findGroup(const GroupDef *def) const = 0;
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeMemberPages(OutputList &ol) = 0;
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+ virtual int countMembers() const = 0;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual bool isASubGroup() const = 0;
+ virtual void computeAnchors() = 0;
+
+ virtual void addMembersToMemberGroup() = 0;
+ virtual void distributeMemberGroupDocumentation() = 0;
+ virtual void findSectionsInDocumentation() = 0;
+
+ virtual void addListReferences() = 0;
+ virtual void sortMemberLists() = 0;
+ virtual bool subGrouping() const = 0;
+
+ virtual void setGroupScope(Definition *d) = 0;
+ virtual Definition *getGroupScope() const = 0;
+
+ virtual MemberList *getMemberList(MemberListType lt) const = 0;
+ virtual const QList<MemberList> &getMemberLists() const = 0;
/* user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
-
- FileList * getFiles() const { return fileList; }
- ClassSDict * getClasses() const { return classSDict; }
- NamespaceSDict * getNamespaces() const { return namespaceSDict; }
- GroupList * getSubGroups() const { return groupList; }
- PageSDict * getPages() const { return pageDict; }
- DirList * getDirs() const { return dirList; }
- PageSDict * getExamples() const { return exampleDict; }
- bool hasDetailedDescription() const;
- //MemberList* getMembers() const { return allMemberList; }
- void sortSubGroups();
-
- protected:
- void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
-
- private:
- MemberList *createMemberList(MemberListType lt);
- void addMemberToList(MemberListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
- void removeMemberFromList(MemberListType lt,MemberDef *md);
- void writeGroupGraph(OutputList &ol);
- void writeFiles(OutputList &ol,const QCString &title);
- void writeNamespaces(OutputList &ol,const QCString &title);
- void writeNestedGroups(OutputList &ol,const QCString &title);
- void writeDirs(OutputList &ol,const QCString &title);
- void writeClasses(OutputList &ol,const QCString &title);
- void writeInlineClasses(OutputList &ol);
- void writePageDocumentation(OutputList &ol);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void writeMemberGroups(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeSummaryLinks(OutputList &ol);
- void updateLanguage(const Definition *);
-
- QCString title; // title of the group
- bool titleSet; // true if title is not the same as the name
- QCString fileName; // base name of the generated file
- FileList *fileList; // list of files in the group
- ClassSDict *classSDict; // list of classes in the group
- NamespaceSDict *namespaceSDict; // list of namespaces in the group
- GroupList *groupList; // list of sub groups.
- PageSDict *pageDict; // list of pages in the group
- PageSDict *exampleDict; // list of examples in the group
- DirList *dirList; // list of directories in the group
-
- MemberList *allMemberList;
- MemberNameInfoSDict *allMemberNameInfoSDict;
-
- Definition *groupScope;
-
- QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
- bool m_subGrouping;
+ virtual MemberGroupSDict *getMemberGroupSDict() const = 0;
+
+ virtual FileList * getFiles() const = 0;
+ virtual ClassSDict * getClasses() const = 0;
+ virtual NamespaceSDict * getNamespaces() const = 0;
+ virtual GroupList * getSubGroups() const = 0;
+ virtual PageSDict * getPages() const = 0;
+ virtual DirList * getDirs() const = 0;
+ virtual PageSDict * getExamples() const = 0;
+ virtual bool hasDetailedDescription() const = 0;
+ virtual void sortSubGroups() = 0;
};
+GroupDef *createGroupDef(const char *fileName,int line,const char *name,
+ const char *title,const char *refFileName=0);
+
/** A sorted dictionary of GroupDef objects. */
class GroupSDict : public SDict<GroupDef>
{
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index ee8aab3..37f6bd0 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -211,6 +211,34 @@ static bool isInvisibleNode(DocNode *node)
;
}
+static void mergeHtmlAttributes(const HtmlAttribList &attribs, HtmlAttribList *mergeInto)
+{
+ HtmlAttribListIterator li(attribs);
+ HtmlAttrib *att;
+ for (li.toFirst();(att=li.current());++li)
+ {
+ HtmlAttribListIterator ml(*mergeInto);
+ HtmlAttrib *opt;
+ bool found = false;
+ for (ml.toFirst();(opt=ml.current());++ml)
+ {
+ if (opt->name == att -> name)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found)
+ {
+ opt->value = opt->value + " " + att->value;
+ }
+ else
+ {
+ mergeInto->append(att);
+ }
+ }
+}
+
static QCString htmlAttribsToString(const HtmlAttribList &attribs, QCString *pAltValue = 0)
{
QCString result;
@@ -649,7 +677,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
forceEndParagraph(inc);
m_t << PREFRAG_START;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -657,7 +685,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
@@ -665,11 +693,14 @@ void HtmlDocVisitor::visit(DocInclude *inc)
TRUE, // show line numbers
m_ctx // search context
);
+ delete fd;
m_t << PREFRAG_END;
forceStartParagraph(inc);
}
break;
- case DocInclude::DontInclude:
+ case DocInclude::DontInclude:
+ case DocInclude::LatexInclude:
+ case DocInclude::DontIncWithLines:
break;
case DocInclude::HtmlInclude:
{
@@ -678,8 +709,6 @@ void HtmlDocVisitor::visit(DocInclude *inc)
if (inc->isBlock()) forceStartParagraph(inc);
}
break;
- case DocInclude::LatexInclude:
- break;
case DocInclude::VerbInclude:
forceEndParagraph(inc);
m_t << /*PREFRAG_START <<*/ "<pre class=\"fragment\">";
@@ -715,7 +744,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
forceEndParagraph(inc);
m_t << PREFRAG_START;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -723,7 +752,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
@@ -731,6 +760,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
TRUE, // show line number
m_ctx // search context
);
+ delete fd;
m_t << PREFRAG_END;
forceStartParagraph(inc);
}
@@ -760,6 +790,12 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
Doxygen::parserManager->getParser(m_langExt)
->parseCode(
m_ci,
@@ -768,14 +804,15 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
langExt,
op->isExample(),
op->exampleFile(),
- 0, // fileDef
- -1, // startLine
+ fd, // fileDef
+ op->line(), // startLine
-1, // endLine
FALSE, // inline fragment
0, // memberDef
- TRUE, // show line numbers
+ op->showLineNo(), // show line numbers
m_ctx // search context
);
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
@@ -1651,8 +1688,18 @@ void HtmlDocVisitor::visitPre(DocImage *img)
sizeAttribs+=" height=\""+img->height()+"\"";
}
// 16 cases: url.isEmpty() | typeSVG | inlineImage | img->hasCaption()
+
+ HtmlAttribList extraAttribs;
+ if (typeSVG)
+ {
+ HtmlAttrib opt;
+ opt.name = "style";
+ opt.value = "pointer-events: none;";
+ extraAttribs.append(&opt);
+ }
QCString alt;
- QCString attrs = htmlAttribsToString(img->attribs(),&alt);
+ mergeHtmlAttributes(img->attribs(),&extraAttribs);
+ QCString attrs = htmlAttribsToString(extraAttribs,&alt);
QCString src;
if (url.isEmpty())
{
@@ -1664,7 +1711,7 @@ void HtmlDocVisitor::visitPre(DocImage *img)
}
if (typeSVG)
{
- m_t << "<object type=\"image/svg+xml\" style=\"pointer-events: none;\" data=\"" << src
+ m_t << "<object type=\"image/svg+xml\" data=\"" << src
<< "\"" << sizeAttribs << attrs;
if (inlineImage)
{
@@ -1871,8 +1918,8 @@ void HtmlDocVisitor::visitPre(DocSecRefList *s)
{
if (m_hide) return;
forceEndParagraph(s);
- m_t << "<div class=\"multicol\">" << endl;
- m_t << "<ul>" << endl;
+ m_t << "<div>" << endl;
+ m_t << "<ul class=\"multicol\">" << endl;
}
void HtmlDocVisitor::visitPost(DocSecRefList *s)
@@ -2375,16 +2422,14 @@ void HtmlDocVisitor::forceEndParagraph(DocNode *n)
DocPara *para = (DocPara*)n->parent();
int nodeIndex = para->children().findRef(n);
nodeIndex--;
- if (nodeIndex<0) return; // first node
+ if (nodeIndex<0) return; // first node in paragraph
while (nodeIndex>=0 && isInvisibleNode(para->children().at(nodeIndex)))
{
nodeIndex--;
}
- if (nodeIndex>=0)
- {
- DocNode *n = para->children().at(nodeIndex);
- if (mustBeOutsideParagraph(n)) return;
- }
+ if (nodeIndex<0) return; // first visible node in paragraph
+ DocNode *n = para->children().at(nodeIndex);
+ if (mustBeOutsideParagraph(n)) return; // previous node already outside paragraph context
nodeIndex--;
bool styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,nodeIndex);
bool isFirst;
diff --git a/src/index.cpp b/src/index.cpp
index 913f31b..b401a0a 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -490,7 +490,7 @@ static void writeClassTree(OutputList &ol,const BaseClassList *bcl,bool hideSupe
}
ol.startIndexListItem();
//printf("Passed...\n");
- bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
+ bool hasChildren = !cd->isVisited() && !hideSuper && classHasVisibleChildren(cd);
//printf("tree4: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
@@ -537,8 +537,8 @@ static void writeClassTree(OutputList &ol,const BaseClassList *bcl,bool hideSupe
if (hasChildren)
{
//printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
- bool wasVisited=cd->visited;
- cd->visited=TRUE;
+ bool wasVisited=cd->isVisited();
+ cd->setVisited(TRUE);
if (cd->getLanguage()==SrcLangExt_VHDL)
{
writeClassTree(ol,cd->baseClasses(),wasVisited,level+1,ftv,addToIndex);
@@ -872,7 +872,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
started=TRUE;
}
ol.startIndexListItem();
- bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
+ bool hasChildren = !cd->isVisited() && classHasVisibleChildren(cd);
//printf("list: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
@@ -913,13 +913,13 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
}
if (cd->getLanguage()==SrcLangExt_VHDL && hasChildren)
{
- writeClassTree(ol,cd->baseClasses(),cd->visited,1,ftv,addToIndex);
- cd->visited=TRUE;
+ writeClassTree(ol,cd->baseClasses(),cd->isVisited(),1,ftv,addToIndex);
+ cd->setVisited(TRUE);
}
else if (hasChildren)
{
- writeClassTree(ol,cd->subClasses(),cd->visited,1,ftv,addToIndex);
- cd->visited=TRUE;
+ writeClassTree(ol,cd->subClasses(),cd->isVisited(),1,ftv,addToIndex);
+ cd->setVisited(TRUE);
}
ol.endIndexListItem();
}
@@ -3889,7 +3889,7 @@ static int countGroups()
{
if (!gd->isReference())
{
- gd->visited=FALSE;
+ //gd->visited=FALSE;
count++;
}
}
@@ -3907,7 +3907,6 @@ static int countDirs()
{
if (dd->isLinkableInProject())
{
- dd->visited=FALSE;
count++;
}
}
@@ -3947,8 +3946,9 @@ void writeGraphInfo(OutputList &ol)
legendDocs = legendDocs.left(s+8) + "[!-- SVG 0 --]\n" + legendDocs.mid(e);
//printf("legendDocs=%s\n",legendDocs.data());
}
- FileDef fd("","graph_legend");
- ol.generateDoc("graph_legend",1,&fd,0,legendDocs,FALSE,FALSE);
+ FileDef *fd = createFileDef("","graph_legend");
+ ol.generateDoc("graph_legend",1,fd,0,legendDocs,FALSE,FALSE);
+ delete fd;
// restore config settings
stripCommentsStateRef = oldStripCommentsState;
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index dd2da64..2e979bd 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -458,20 +458,21 @@ void LatexDocVisitor::visit(DocInclude *inc)
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
0, // memberDef
TRUE // show line numbers
);
+ delete fd;
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
@@ -493,9 +494,9 @@ void LatexDocVisitor::visit(DocInclude *inc)
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}\n";
break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
+ case DocInclude::DontInclude:
+ case DocInclude::DontIncWithLines:
+ case DocInclude::HtmlInclude:
break;
case DocInclude::LatexInclude:
m_t << inc->text();
@@ -524,7 +525,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
case DocInclude::SnipWithLines:
{
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(inc->extension())
@@ -534,13 +535,14 @@ void LatexDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
@@ -570,9 +572,24 @@ void LatexDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),op->text(),langExt,
- op->isExample(),op->exampleFile());
+ op->isExample(),op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index beef632..5c98c6f 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -254,20 +254,21 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".PP" << endl;
m_t << ".nf" << endl;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
0, // memberDef
TRUE
);
+ delete fd;
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
@@ -296,10 +297,9 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".PP" << endl;
m_firstCol=TRUE;
break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- break;
+ case DocInclude::DontInclude:
+ case DocInclude::DontIncWithLines:
+ case DocInclude::HtmlInclude:
case DocInclude::LatexInclude:
break;
case DocInclude::VerbInclude:
@@ -335,7 +335,7 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".PP" << endl;
m_t << ".nf" << endl;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -343,13 +343,14 @@ void ManDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
@@ -385,9 +386,24 @@ void ManDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),op->text(),langExt,
- op->isExample(),op->exampleFile());
+ op->isExample(),op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
diff --git a/src/markdown.cpp b/src/markdown.cpp
index 56d160b..dea2476 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -524,7 +524,7 @@ static int processQuoted(GrowBuf &out,const char *data,int,int size)
/** Process a HTML tag. Note that <pre>..</pre> are treated specially, in
* the sense that all code inside is written unprocessed
*/
-static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size)
+static int processHtmlTagWrite(GrowBuf &out,const char *data,int offset,int size,bool doWrite)
{
if (offset>0 && data[-1]=='\\') return 0; // escaped <
@@ -547,7 +547,7 @@ static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size)
tolower(data[i+2])=='p' && tolower(data[i+3])=='r' &&
tolower(data[i+4])=='e' && tolower(data[i+5])=='>')
{ // found </pre> tag, copy from start to end of tag
- out.addStr(data,i+6);
+ if (doWrite) out.addStr(data,i+6);
//printf("found <pre>..</pre> [%d..%d]\n",0,i+6);
return i+6;
}
@@ -570,13 +570,13 @@ static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size)
if (data[i]=='/' && i<size-1 && data[i+1]=='>') // <bla/>
{
//printf("Found htmlTag={%s}\n",QCString(data).left(i+2).data());
- out.addStr(data,i+2);
+ if (doWrite) out.addStr(data,i+2);
return i+2;
}
else if (data[i]=='>') // <bla>
{
//printf("Found htmlTag={%s}\n",QCString(data).left(i+1).data());
- out.addStr(data,i+1);
+ if (doWrite) out.addStr(data,i+1);
return i+1;
}
else if (data[i]==' ') // <bla attr=...
@@ -596,7 +596,7 @@ static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size)
else if (!insideAttr && data[i]=='>') // found end of tag
{
//printf("Found htmlTag={%s}\n",QCString(data).left(i+1).data());
- out.addStr(data,i+1);
+ if (doWrite) out.addStr(data,i+1);
return i+1;
}
i++;
@@ -607,6 +607,10 @@ static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size)
//printf("Not a valid html tag\n");
return 0;
}
+static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size)
+{
+ return processHtmlTagWrite(out,data,offset,size,true);
+}
static int processEmphasis(GrowBuf &out,const char *data,int offset,int size)
{
@@ -2093,17 +2097,9 @@ static void findEndOfLine(GrowBuf &out,const char *data,int size,
{
if (qstrncmp(&data[end+1],endBlockName,l)==0)
{
- if (pi!=-1) // output previous line if available
- {
- //printf("feol out={%s}\n",QCString(data+pi).left(i-pi).data());
- out.addStr(data+pi,i-pi);
- }
// found end marker, skip over this block
//printf("feol.block out={%s}\n",QCString(data+i).left(end+l+1-i).data());
- out.addStr(data+i,end+l+1-i);
- pi=-1;
- i=end+l+1; // continue after block
- end=i+1;
+ end = end + l + 2;
break;
}
}
@@ -2117,16 +2113,8 @@ static void findEndOfLine(GrowBuf &out,const char *data,int size,
if (tolower(data[end])=='p' && tolower(data[end+1])=='r' &&
tolower(data[end+2])=='e' && data[end+3]=='>') // <pre> tag
{
- if (pi!=-1) // output previous line if available
- {
- out.addStr(data+pi,i-pi);
- }
- // output part until <pre>
- out.addStr(data+i,end-1-i);
- // output part until </pre>
- i = end-1 + processHtmlTag(out,data+end-1,end-1,size-end+1);
- pi=-1;
- end = i+1;
+ // skip part until including </pre>
+ end = end + processHtmlTagWrite(out,data+end-1,end-1,size-end+1,false) + 2;
break;
}
else
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 683f8c3..995901a 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -43,10 +43,334 @@
#include "namespacedef.h"
#include "filedef.h"
#include "config.h"
+#include "definitionimpl.h"
//-----------------------------------------------------------------------------
-int MemberDef::s_indentLevel = 0;
+class MemberDefImpl : public DefinitionImpl, public MemberDef
+{
+ public:
+ MemberDefImpl(const char *defFileName,int defLine,int defColumn,
+ const char *type,const char *name,const char *args,
+ const char *excp,Protection prot,Specifier virt,bool stat,
+ Relationship related,MemberType t,const ArgumentList *tal,
+ const ArgumentList *al,const char *metaData);
+ virtual ~MemberDefImpl();
+
+ virtual DefType definitionType() const { return TypeMember; }
+ virtual MemberDef *deepCopy() const;
+ virtual void moveTo(Definition *);
+ virtual QCString getOutputFileBase() const;
+ virtual QCString getReference() const;
+ virtual QCString anchor() const;
+ virtual const char *declaration() const;
+ virtual const char *definition() const;
+ virtual const char *typeString() const;
+ virtual const char *argsString() const;
+ virtual const char *excpString() const;
+ virtual const char *bitfieldString() const;
+ virtual const char *extraTypeChars() const;
+ virtual const QCString &initializer() const;
+ virtual int initializerLines() const;
+ virtual uint64 getMemberSpecifiers() const;
+ virtual MemberList *getSectionList(Definition *d) const;
+ virtual QCString displayDefinition() const;
+ virtual ClassDef *getClassDef() const;
+ virtual FileDef *getFileDef() const;
+ virtual NamespaceDef* getNamespaceDef() const;
+ virtual ClassDef *accessorClass() const;
+ virtual const char *getReadAccessor() const;
+ virtual const char *getWriteAccessor() const;
+ virtual GroupDef *getGroupDef() const;
+ virtual Grouping::GroupPri_t getGroupPri() const;
+ virtual const char *getGroupFileName() const;
+ virtual int getGroupStartLine() const;
+ virtual bool getGroupHasDocs() const;
+ virtual QCString qualifiedName() const;
+ virtual QCString objCMethodName(bool localLink,bool showStatic) const;
+ virtual Protection protection() const;
+ virtual Specifier virtualness(int count=0) const;
+ virtual MemberType memberType() const;
+ virtual QCString memberTypeName() const;
+ virtual bool isSignal() const;
+ virtual bool isSlot() const;
+ virtual bool isVariable() const;
+ virtual bool isEnumerate() const;
+ virtual bool isEnumValue() const;
+ virtual bool isTypedef() const;
+ virtual bool isSequence() const;
+ virtual bool isDictionary() const;
+ virtual bool isFunction() const;
+ virtual bool isFunctionPtr() const;
+ virtual bool isDefine() const;
+ virtual bool isFriend() const;
+ virtual bool isDCOP() const;
+ virtual bool isProperty() const;
+ virtual bool isEvent() const;
+ virtual bool isRelated() const;
+ virtual bool isForeign() const;
+ virtual bool isStatic() const;
+ virtual bool isInline() const;
+ virtual bool isExplicit() const;
+ virtual bool isMutable() const;
+ virtual bool isGettable() const;
+ virtual bool isPrivateGettable() const;
+ virtual bool isProtectedGettable() const;
+ virtual bool isSettable() const;
+ virtual bool isPrivateSettable() const;
+ virtual bool isProtectedSettable() const;
+ virtual bool isReadable() const;
+ virtual bool isWritable() const;
+ virtual bool isAddable() const;
+ virtual bool isRemovable() const;
+ virtual bool isRaisable() const;
+ virtual bool isFinal() const;
+ virtual bool isAbstract() const;
+ virtual bool isOverride() const;
+ virtual bool isInitonly() const;
+ virtual bool isOptional() const;
+ virtual bool isRequired() const;
+ virtual bool isNonAtomic() const;
+ virtual bool isCopy() const;
+ virtual bool isAssign() const;
+ virtual bool isRetain() const;
+ virtual bool isWeak() const;
+ virtual bool isStrong() const;
+ virtual bool isUnretained() const;
+ virtual bool isNew() const;
+ virtual bool isSealed() const;
+ virtual bool isImplementation() const;
+ virtual bool isExternal() const;
+ virtual bool isAlias() const;
+ virtual bool isDefault() const;
+ virtual bool isDelete() const;
+ virtual bool isNoExcept() const;
+ virtual bool isAttribute() const;
+ virtual bool isUNOProperty() const;
+ virtual bool isReadonly() const;
+ virtual bool isBound() const;
+ virtual bool isConstrained() const;
+ virtual bool isTransient() const;
+ virtual bool isMaybeVoid() const;
+ virtual bool isMaybeDefault() const;
+ virtual bool isMaybeAmbiguous() const;
+ virtual bool isPublished() const;
+ virtual bool isTemplateSpecialization() const;
+ virtual bool hasDocumentedParams() const;
+ virtual bool hasDocumentedReturnType() const;
+ virtual bool isObjCMethod() const;
+ virtual bool isObjCProperty() const;
+ virtual bool isConstructor() const;
+ virtual bool isDestructor() const;
+ virtual bool hasOneLineInitializer() const;
+ virtual bool hasMultiLineInitializer() const;
+ virtual bool showInCallGraph() const;
+ virtual bool isStrongEnumValue() const;
+ virtual bool livesInsideEnum() const;
+ virtual bool isSliceLocal() const;
+ virtual bool isConstExpr() const;
+ virtual bool isFriendToHide() const;
+ virtual bool isNotFriend() const;
+ virtual bool isFunctionOrSignalSlot() const;
+ virtual bool isRelatedOrFriend() const;
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual bool hasDocumentation() const;
+ virtual bool isDeleted() const;
+ virtual bool isBriefSectionVisible() const;
+ virtual bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
+ virtual bool isDetailedSectionLinkable() const;
+ virtual bool isFriendClass() const;
+ virtual bool isDocumentedFriendClass() const;
+ virtual MemberDef *reimplements() const;
+ virtual MemberList *reimplementedBy() const;
+ virtual bool isReimplementedBy(ClassDef *cd) const;
+ virtual ClassDef *relatedAlso() const;
+ virtual bool hasDocumentedEnumValues() const;
+ virtual MemberDef *getAnonymousEnumType() const;
+ virtual bool isDocsForDefinition() const;
+ virtual MemberDef *getEnumScope() const;
+ virtual MemberList *enumFieldList() const;
+ virtual void setEnumBaseType(const QCString &type);
+ virtual QCString enumBaseType() const;
+ virtual bool hasExamples();
+ virtual ExampleSDict *getExamples() const;
+ virtual bool isPrototype() const;
+ virtual ArgumentList *argumentList() const;
+ virtual ArgumentList *declArgumentList() const;
+ virtual ArgumentList *templateArguments() const;
+ virtual QList<ArgumentList> *definitionTemplateParameterLists() const;
+ virtual int getMemberGroupId() const;
+ virtual MemberGroup *getMemberGroup() const;
+ virtual bool fromAnonymousScope() const;
+ virtual bool anonymousDeclShown() const;
+ virtual MemberDef *fromAnonymousMember() const;
+ virtual bool hasCallGraph() const;
+ virtual bool hasCallerGraph() const;
+ virtual bool visibleMemberGroup(bool hideNoHeader);
+ virtual bool hasReferencesRelation() const;
+ virtual bool hasReferencedByRelation() const;
+ virtual MemberDef *templateMaster() const;
+ virtual QCString getScopeString() const;
+ virtual ClassDef *getClassDefOfAnonymousType();
+ virtual bool isTypedefValCached() const;
+ virtual ClassDef *getCachedTypedefVal() const;
+ virtual QCString getCachedTypedefTemplSpec() const;
+ virtual QCString getCachedResolvedTypedef() const;
+ virtual MemberDef *memberDefinition() const;
+ virtual MemberDef *memberDeclaration() const;
+ virtual MemberDef *inheritsDocsFrom() const;
+ virtual MemberDef *getGroupAlias() const;
+ virtual ClassDef *category() const;
+ virtual MemberDef *categoryRelation() const;
+ virtual QCString displayName(bool=TRUE) const;
+ virtual QCString getDeclType() const;
+ virtual void getLabels(QStrList &sl,Definition *container) const;
+ virtual const ArgumentList *typeConstraints() const;
+ virtual QCString documentation() const;
+ virtual QCString briefDescription(bool abbr=FALSE) const;
+ virtual QCString fieldType() const;
+ virtual bool isReference() const;
+ virtual QCString getDeclFileName() const;
+ virtual int getDeclLine() const;
+ virtual int getDeclColumn() const;
+ virtual void setMemberType(MemberType t);
+ virtual void setDefinition(const char *d);
+ virtual void setFileDef(FileDef *fd);
+ virtual void setAnchor();
+ virtual void setProtection(Protection p);
+ virtual void setMemberSpecifiers(uint64 s);
+ virtual void mergeMemberSpecifiers(uint64 s);
+ virtual void setInitializer(const char *i);
+ virtual void setBitfields(const char *s);
+ virtual void setMaxInitLines(int lines);
+ virtual void setMemberClass(ClassDef *cd);
+ virtual void setSectionList(Definition *d,MemberList *sl);
+ virtual void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
+ const QCString &fileName,int startLine,bool hasDocs,
+ MemberDef *member=0);
+ virtual void setReadAccessor(const char *r);
+ virtual void setWriteAccessor(const char *w);
+ virtual void setTemplateSpecialization(bool b);
+ virtual void makeRelated();
+ virtual void makeForeign();
+ virtual void setHasDocumentedParams(bool b);
+ virtual void setHasDocumentedReturnType(bool b);
+ virtual void setInheritsDocsFrom(MemberDef *md);
+ virtual void setTagInfo(TagInfo *i);
+ virtual void setArgsString(const char *as);
+ virtual void setReimplements(MemberDef *md);
+ virtual void insertReimplementedBy(MemberDef *md);
+ virtual void setRelatedAlso(ClassDef *cd);
+ virtual void insertEnumField(MemberDef *md);
+ virtual void setEnumScope(MemberDef *md,bool livesInsideEnum=FALSE);
+ virtual void setEnumClassScope(ClassDef *cd);
+ virtual void setDocumentedEnumValues(bool value);
+ virtual void setAnonymousEnumType(MemberDef *md);
+ virtual bool addExample(const char *anchor,const char *name,const char *file);
+ virtual void setPrototype(bool p,const QCString &df,int line, int column);
+ virtual void setExplicitExternal(bool b,const QCString &df,int line,int column);
+ virtual void setDeclFile(const QCString &df,int line,int column);
+ virtual void setArgumentList(ArgumentList *al);
+ virtual void setDeclArgumentList(ArgumentList *al);
+ virtual void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
+ virtual void setTypeConstraints(ArgumentList *al);
+ virtual void setType(const char *t);
+ virtual void setAccessorType(ClassDef *cd,const char *t);
+ virtual void setNamespace(NamespaceDef *nd);
+ virtual void setMemberGroup(MemberGroup *grp);
+ virtual void setMemberGroupId(int id);
+ virtual void makeImplementationDetail();
+ virtual void setFromAnonymousScope(bool b);
+ virtual void setFromAnonymousMember(MemberDef *m);
+ virtual void enableCallGraph(bool e);
+ virtual void enableCallerGraph(bool e);
+ virtual void enableReferencedByRelation(bool e);
+ virtual void enableReferencesRelation(bool e);
+ virtual void setTemplateMaster(MemberDef *mt);
+ virtual void addListReference(Definition *d);
+ virtual void setDocsForDefinition(bool b);
+ virtual void setGroupAlias(MemberDef *md);
+ virtual void cacheTypedefVal(ClassDef *val,const QCString &templSpec,const QCString &resolvedType);
+ virtual void invalidateTypedefValCache();
+ virtual void invalidateCachedArgumentTypes();
+ virtual void setMemberDefinition(MemberDef *md);
+ virtual void setMemberDeclaration(MemberDef *md);
+ virtual void setAnonymousUsed();
+ virtual void copyArgumentNames(MemberDef *bmd);
+ virtual void setCategory(ClassDef *);
+ virtual void setCategoryRelation(MemberDef *);
+ virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
+ virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ virtual void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine);
+ virtual void setHidden(bool b);
+ virtual void writeDeclaration(OutputList &ol,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
+ bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0);
+ virtual void writeDocumentation(MemberList *ml,int memCount,int memTotal,OutputList &ol,
+ const char *scopeName,Definition *container,
+ bool inGroup,bool showEnumValues=FALSE,bool
+ showInline=FALSE);
+ virtual void writeMemberDocSimple(OutputList &ol,Definition *container);
+ virtual void writeEnumDeclaration(OutputList &typeDecl,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
+ virtual void writeTagFile(FTextStream &);
+ virtual void warnIfUndocumented();
+ virtual void warnIfUndocumentedParams();
+ virtual MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
+ ArgumentList *actualArgs);
+ virtual void findSectionsInDocumentation();
+ virtual void writeLink(OutputList &ol,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
+ bool onlyText=FALSE);
+ virtual void addToSearchIndex();
+
+ private:
+ void _computeLinkableInProject();
+ void _computeIsConstructor();
+ void _computeIsDestructor();
+ void _writeGroupInclude(OutputList &ol,bool inGroup);
+ void _writeCallGraph(OutputList &ol);
+ void _writeCallerGraph(OutputList &ol);
+ void _writeReimplements(OutputList &ol);
+ void _writeReimplementedBy(OutputList &ol);
+ void _writeExamples(OutputList &ol);
+ void _writeTypeConstraints(OutputList &ol);
+ void _writeEnumValues(OutputList &ol,Definition *container,
+ const QCString &cfname,const QCString &ciname,
+ const QCString &cname);
+ void _writeCategoryRelation(OutputList &ol);
+ void _writeTagData(const DefType);
+
+ static int s_indentLevel;
+
+ // disable copying of member defs
+ MemberDefImpl(const MemberDefImpl &);
+ MemberDefImpl &operator=(const MemberDefImpl &);
+
+
+ // PIMPL idiom
+ class IMPL;
+ IMPL *m_impl;
+ uchar m_isLinkableCached; // 0 = not cached, 1=FALSE, 2=TRUE
+ uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
+ uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
+};
+
+MemberDef *createMemberDef(const char *defFileName,int defLine,int defColumn,
+ const char *type,const char *name,const char *args,
+ const char *excp,Protection prot,Specifier virt,bool stat,
+ Relationship related,MemberType t,const ArgumentList *tal,
+ const ArgumentList *al,const char *metaData)
+{
+ return new MemberDefImpl(defFileName,defLine,defColumn,type,name,args,excp,prot,virt,
+ stat,related,t,tal,al,metaData);
+}
+
+
+//-----------------------------------------------------------------------------
+
+int MemberDefImpl::s_indentLevel = 0;
//-----------------------------------------------------------------------------
@@ -193,9 +517,9 @@ static bool writeDefArgumentList(OutputList &ol,Definition *scope,MemberDef *md)
cName=cName.mid(il,ir-il+1);
//printf("1. cName=%s\n",cName.data());
}
- else if (scope->definitionType()==Definition::TypeClass && ((ClassDef*)scope)->templateArguments())
+ else if (scope->definitionType()==Definition::TypeClass && (dynamic_cast<ClassDef*>(scope))->templateArguments())
{
- cName=tempArgListToString(((ClassDef*)scope)->templateArguments(),scope->getLanguage());
+ cName=tempArgListToString((dynamic_cast<ClassDef*>(scope))->templateArguments(),scope->getLanguage());
//printf("2. cName=%s\n",cName.data());
}
else // no template specifier
@@ -475,11 +799,11 @@ static void writeTemplatePrefix(OutputList &ol,ArgumentList *al)
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
-class MemberDefImpl
+class MemberDefImpl::IMPL
{
public:
- MemberDefImpl();
- ~MemberDefImpl();
+ IMPL();
+ ~IMPL();
void init(Definition *def,const char *t,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,
MemberType mt,const ArgumentList *tal,
@@ -600,7 +924,7 @@ class MemberDefImpl
int declColumn;
};
-MemberDefImpl::MemberDefImpl() :
+MemberDefImpl::IMPL::IMPL() :
enumFields(0),
redefinedBy(0),
exampleSDict(0),
@@ -617,7 +941,7 @@ MemberDefImpl::MemberDefImpl() :
{
}
-MemberDefImpl::~MemberDefImpl()
+MemberDefImpl::IMPL::~IMPL()
{
delete redefinedBy;
delete exampleSDict;
@@ -630,7 +954,7 @@ MemberDefImpl::~MemberDefImpl()
delete declArgList;
}
-void MemberDefImpl::init(Definition *def,
+void MemberDefImpl::IMPL::init(Definition *def,
const char *t,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,
MemberType mt,const ArgumentList *tal,
@@ -762,32 +1086,32 @@ void MemberDefImpl::init(Definition *def,
* \param meta Slice metadata.
*/
-MemberDef::MemberDef(const char *df,int dl,int dc,
+MemberDefImpl::MemberDefImpl(const char *df,int dl,int dc,
const char *t,const char *na,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,MemberType mt,
const ArgumentList *tal,const ArgumentList *al,const char *meta
- ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na)), visited(FALSE)
+ ) : DefinitionImpl(df,dl,dc,removeRedundantWhiteSpace(na))
{
- //printf("MemberDef::MemberDef(%s)\n",na);
- m_impl = new MemberDefImpl;
+ //printf("MemberDefImpl::MemberDef(%s)\n",na);
+ m_impl = new MemberDefImpl::IMPL;
m_impl->init(this,t,a,e,p,v,s,r,mt,tal,al,meta);
m_isLinkableCached = 0;
m_isConstructorCached = 0;
m_isDestructorCached = 0;
}
-MemberDef::MemberDef(const MemberDef &md) : Definition(md), visited(FALSE)
+MemberDefImpl::MemberDefImpl(const MemberDefImpl &md) : DefinitionImpl(md)
{
- m_impl = new MemberDefImpl;
+ m_impl = new MemberDefImpl::IMPL;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
m_isDestructorCached = 0;
}
-MemberDef *MemberDef::deepCopy() const
+MemberDef *MemberDefImpl::deepCopy() const
{
//MemberDef *result = new MemberDef(getDefFileName(),getDefLine(),name());
- MemberDef *result = new MemberDef(*this);
+ MemberDefImpl *result = new MemberDefImpl(*this);
// first copy everything by reference
*result->m_impl = *m_impl;
// clear pointers owned by object
@@ -858,20 +1182,20 @@ MemberDef *MemberDef::deepCopy() const
return result;
}
-void MemberDef::moveTo(Definition *scope)
+void MemberDefImpl::moveTo(Definition *scope)
{
setOuterScope(scope);
if (scope->definitionType()==Definition::TypeClass)
{
- m_impl->classDef = (ClassDef*)scope;
+ m_impl->classDef = dynamic_cast<ClassDef*>(scope);
}
else if (scope->definitionType()==Definition::TypeFile)
{
- m_impl->fileDef = (FileDef*)scope;
+ m_impl->fileDef = dynamic_cast<FileDef*>(scope);
}
else if (scope->definitionType()==Definition::TypeNamespace)
{
- m_impl->nspace = (NamespaceDef*)scope;
+ m_impl->nspace = dynamic_cast<NamespaceDef*>(scope);
}
m_isLinkableCached = 0;
m_isConstructorCached = 0;
@@ -879,19 +1203,19 @@ void MemberDef::moveTo(Definition *scope)
/*! Destroys the member definition. */
-MemberDef::~MemberDef()
+MemberDefImpl::~MemberDefImpl()
{
delete m_impl;
//printf("%p: ~MemberDef()\n",this);
m_impl=0;
}
-void MemberDef::setReimplements(MemberDef *md)
+void MemberDefImpl::setReimplements(MemberDef *md)
{
m_impl->redefines = md;
}
-void MemberDef::insertReimplementedBy(MemberDef *md)
+void MemberDefImpl::insertReimplementedBy(MemberDef *md)
{
if (m_impl->templateMaster)
{
@@ -904,17 +1228,17 @@ void MemberDef::insertReimplementedBy(MemberDef *md)
}
}
-MemberDef *MemberDef::reimplements() const
+MemberDef *MemberDefImpl::reimplements() const
{
return m_impl->redefines;
}
-MemberList *MemberDef::reimplementedBy() const
+MemberList *MemberDefImpl::reimplementedBy() const
{
return m_impl->redefinedBy;
}
-bool MemberDef::isReimplementedBy(ClassDef *cd) const
+bool MemberDefImpl::isReimplementedBy(ClassDef *cd) const
{
if (cd && m_impl->redefinedBy)
{
@@ -935,13 +1259,13 @@ bool MemberDef::isReimplementedBy(ClassDef *cd) const
return FALSE;
}
-void MemberDef::insertEnumField(MemberDef *md)
+void MemberDefImpl::insertEnumField(MemberDef *md)
{
if (m_impl->enumFields==0) m_impl->enumFields=new MemberList(MemberListType_enumFields);
m_impl->enumFields->append(md);
}
-bool MemberDef::addExample(const char *anchor,const char *nameStr,
+bool MemberDefImpl::addExample(const char *anchor,const char *nameStr,
const char *file)
{
//printf("%s::addExample(%s,%s,%s)\n",name().data(),anchor,nameStr,file);
@@ -959,7 +1283,7 @@ bool MemberDef::addExample(const char *anchor,const char *nameStr,
return FALSE;
}
-bool MemberDef::hasExamples()
+bool MemberDefImpl::hasExamples()
{
if (m_impl->exampleSDict==0)
return FALSE;
@@ -967,7 +1291,7 @@ bool MemberDef::hasExamples()
return m_impl->exampleSDict->count()>0;
}
-QCString MemberDef::getOutputFileBase() const
+QCString MemberDefImpl::getOutputFileBase() const
{
static bool separateMemberPages = Config_getBool(SEPARATE_MEMBER_PAGES);
static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
@@ -1027,9 +1351,9 @@ QCString MemberDef::getOutputFileBase() const
return baseName;
}
-QCString MemberDef::getReference() const
+QCString MemberDefImpl::getReference() const
{
- QCString ref = Definition::getReference();
+ QCString ref = DefinitionImpl::getReference();
if (!ref.isEmpty())
{
return ref;
@@ -1057,7 +1381,7 @@ QCString MemberDef::getReference() const
return "";
}
-QCString MemberDef::anchor() const
+QCString MemberDefImpl::anchor() const
{
QCString result=m_impl->anc;
if (m_impl->groupAlias) return m_impl->groupAlias->anchor();
@@ -1080,12 +1404,12 @@ QCString MemberDef::anchor() const
return result;
}
-void MemberDef::_computeLinkableInProject()
+void MemberDefImpl::_computeLinkableInProject()
{
static bool extractStatic = Config_getBool(EXTRACT_STATIC);
static bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
m_isLinkableCached = 2; // linkable
- //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data());
+ //printf("MemberDefImpl::isLinkableInProject(name=%s)\n",name().data());
if (isHidden())
{
//printf("is hidden\n");
@@ -1154,42 +1478,42 @@ void MemberDef::_computeLinkableInProject()
return; // linkable!
}
-void MemberDef::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
+void MemberDefImpl::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
{
- Definition::setDocumentation(d,docFile,docLine,stripWhiteSpace);
+ DefinitionImpl::setDocumentation(d,docFile,docLine,stripWhiteSpace);
m_isLinkableCached = 0;
}
-void MemberDef::setBriefDescription(const char *b,const char *briefFile,int briefLine)
+void MemberDefImpl::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
- Definition::setBriefDescription(b,briefFile,briefLine);
+ DefinitionImpl::setBriefDescription(b,briefFile,briefLine);
m_isLinkableCached = 0;
}
-void MemberDef::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
+void MemberDefImpl::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
{
- Definition::setInbodyDocumentation(d,inbodyFile,inbodyLine);
+ DefinitionImpl::setInbodyDocumentation(d,inbodyFile,inbodyLine);
m_isLinkableCached = 0;
}
-void MemberDef::setHidden(bool b)
+void MemberDefImpl::setHidden(bool b)
{
- Definition::setHidden(b);
+ DefinitionImpl::setHidden(b);
m_isLinkableCached = 0;
}
-bool MemberDef::isLinkableInProject() const
+bool MemberDefImpl::isLinkableInProject() const
{
if (m_isLinkableCached==0)
{
- MemberDef *that = (MemberDef*)this;
+ MemberDefImpl *that = (MemberDefImpl*)this;
that->_computeLinkableInProject();
}
ASSERT(m_isLinkableCached>0);
return m_isLinkableCached==2;
}
-bool MemberDef::isLinkable() const
+bool MemberDefImpl::isLinkable() const
{
if (m_impl->templateMaster)
{
@@ -1202,7 +1526,7 @@ bool MemberDef::isLinkable() const
}
-void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
+void MemberDefImpl::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
{
if (lists)
{
@@ -1211,7 +1535,7 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
}
}
-void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
+void MemberDefImpl::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
FileDef *fd,GroupDef *gd,bool onlyText)
{
SrcLangExt lang = getLanguage();
@@ -1264,7 +1588,7 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
/*! If this member has an anonymous class/struct/union as its type, then
* this method will return the ClassDef that describes this return type.
*/
-ClassDef *MemberDef::getClassDefOfAnonymousType()
+ClassDef *MemberDefImpl::getClassDefOfAnonymousType()
{
if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType;
@@ -1317,7 +1641,7 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
/*! This methods returns TRUE iff the brief section (also known as
* declaration section) is visible in the documentation.
*/
-bool MemberDef::isBriefSectionVisible() const
+bool MemberDefImpl::isBriefSectionVisible() const
{
static bool extractStatic = Config_getBool(EXTRACT_STATIC);
static bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
@@ -1411,11 +1735,11 @@ bool MemberDef::isBriefSectionVisible() const
/*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor &&
visibleIfFriendCompound &&
!m_impl->annScope && !isHidden();
- //printf("MemberDef::isBriefSectionVisible() %d\n",visible);
+ //printf("MemberDefImpl::isBriefSectionVisible() %d\n",visible);
return visible;
}
-QCString MemberDef::getDeclType() const
+QCString MemberDefImpl::getDeclType() const
{
QCString ltype(m_impl->type);
if (isTypedef() && getLanguage() != SrcLangExt_Slice)
@@ -1443,11 +1767,11 @@ QCString MemberDef::getDeclType() const
return ltype;
}
-void MemberDef::writeDeclaration(OutputList &ol,
+void MemberDefImpl::writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup, ClassDef *inheritedFrom,const char *inheritId)
{
- //printf("%s MemberDef::writeDeclaration() inGroup=%d\n",qualifiedName().data(),inGroup);
+ //printf("%s MemberDefImpl::writeDeclaration() inGroup=%d\n",qualifiedName().data(),inGroup);
// hide enum value, since they appear already as part of the enum, unless they
// are explicitly grouped.
@@ -1465,7 +1789,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
//_writeTagData(compoundType);
- _addToSearchIndex();
+ addToSearchIndex();
QCString cname = d->name();
QCString cdname = d->displayName();
@@ -1898,7 +2222,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
warnIfUndocumented();
}
-bool MemberDef::isDetailedSectionLinkable() const
+bool MemberDefImpl::isDetailedSectionLinkable() const
{
static bool extractAll = Config_getBool(EXTRACT_ALL);
static bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
@@ -1968,7 +2292,7 @@ bool MemberDef::isDetailedSectionLinkable() const
return result;
}
-bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
+bool MemberDefImpl::isDetailedSectionVisible(bool inGroup,bool inFile) const
{
static bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
static bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
@@ -1986,7 +2310,7 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
return result;
}
-void MemberDef::getLabels(QStrList &sl,Definition *container) const
+void MemberDefImpl::getLabels(QStrList &sl,Definition *container) const
{
static bool inlineInfo = Config_getBool(INLINE_INFO);
@@ -2104,7 +2428,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
}
}
-void MemberDef::_writeCallGraph(OutputList &ol)
+void MemberDefImpl::_writeCallGraph(OutputList &ol)
{
// write call graph
if (m_impl->hasCallGraph
@@ -2128,7 +2452,7 @@ void MemberDef::_writeCallGraph(OutputList &ol)
}
}
-void MemberDef::_writeCallerGraph(OutputList &ol)
+void MemberDefImpl::_writeCallerGraph(OutputList &ol)
{
if (m_impl->hasCallerGraph
&& (isFunction() || isSlot() || isSignal()) && Config_getBool(HAVE_DOT)
@@ -2151,7 +2475,7 @@ void MemberDef::_writeCallerGraph(OutputList &ol)
}
}
-void MemberDef::_writeReimplements(OutputList &ol)
+void MemberDefImpl::_writeReimplements(OutputList &ol)
{
MemberDef *bmd=reimplements();
ClassDef *bcd=0;
@@ -2210,7 +2534,7 @@ void MemberDef::_writeReimplements(OutputList &ol)
}
}
-void MemberDef::_writeReimplementedBy(OutputList &ol)
+void MemberDefImpl::_writeReimplementedBy(OutputList &ol)
{
MemberList *bml=reimplementedBy();
if (bml)
@@ -2285,7 +2609,7 @@ void MemberDef::_writeReimplementedBy(OutputList &ol)
}
}
-void MemberDef::_writeCategoryRelation(OutputList &ol)
+void MemberDefImpl::_writeCategoryRelation(OutputList &ol)
{
if (m_impl->classDef) // this should be a member of a class/category
{
@@ -2338,7 +2662,7 @@ void MemberDef::_writeCategoryRelation(OutputList &ol)
}
}
-void MemberDef::_writeExamples(OutputList &ol)
+void MemberDefImpl::_writeExamples(OutputList &ol)
{
// write the list of examples that use this member
if (hasExamples())
@@ -2351,7 +2675,7 @@ void MemberDef::_writeExamples(OutputList &ol)
}
}
-void MemberDef::_writeTypeConstraints(OutputList &ol)
+void MemberDefImpl::_writeTypeConstraints(OutputList &ol)
{
if (m_impl->typeConstraints)
{
@@ -2359,7 +2683,7 @@ void MemberDef::_writeTypeConstraints(OutputList &ol)
}
}
-void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
+void MemberDefImpl::_writeEnumValues(OutputList &ol,Definition *container,
const QCString &cfname,const QCString &ciname,
const QCString &cname)
{
@@ -2433,7 +2757,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
}
}
-QCString MemberDef::displayDefinition() const
+QCString MemberDefImpl::displayDefinition() const
{
QCString ldef = definition();
QCString title = name();
@@ -2516,7 +2840,7 @@ QCString MemberDef::displayDefinition() const
return substitute(ldef,"::",sep);
}
-void MemberDef::_writeGroupInclude(OutputList &ol,bool inGroup)
+void MemberDefImpl::_writeGroupInclude(OutputList &ol,bool inGroup)
{
// only write out the include file if this is not part of a class or file
// definition
@@ -2560,7 +2884,7 @@ void MemberDef::_writeGroupInclude(OutputList &ol,bool inGroup)
/*! Writes the "detailed documentation" section of this member to
* all active output formats.
*/
-void MemberDef::writeDocumentation(MemberList *ml,
+void MemberDefImpl::writeDocumentation(MemberList *ml,
int memCount,int memTotal,
OutputList &ol,
const char *scName,
@@ -2575,7 +2899,7 @@ void MemberDef::writeDocumentation(MemberList *ml,
bool inFile = container->definitionType()==Definition::TypeFile;
bool hasDocs = isDetailedSectionVisible(inGroup,inFile);
- //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d sectionLinkable=%d\n",
+ //printf("MemberDefImpl::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d sectionLinkable=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup,isDetailedSectionLinkable());
//if ( !hasDocs ) return;
@@ -2595,7 +2919,7 @@ void MemberDef::writeDocumentation(MemberList *ml,
if (getClassDef()) { scopeName=getClassDef()->displayName(); scopedContainer=getClassDef(); }
else if (getNamespaceDef()) { scopeName=getNamespaceDef()->displayName(); scopedContainer=getNamespaceDef(); }
else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); }
- ciname = ((GroupDef *)container)->groupTitle();
+ ciname = (dynamic_cast<GroupDef *>(container))->groupTitle();
}
else if (container->definitionType()==TypeFile && getNamespaceDef() && lang != SrcLangExt_Python)
{ // member is in a namespace, but is written as part of the file documentation
@@ -3139,7 +3463,7 @@ static Definition *getClassFromType(Definition *scope,const QCString &type,SrcLa
}
#endif
-QCString MemberDef::fieldType() const
+QCString MemberDefImpl::fieldType() const
{
QCString type = m_impl->accessorType;
if (type.isEmpty())
@@ -3151,7 +3475,7 @@ QCString MemberDef::fieldType() const
return simplifyTypeForTable(type);
}
-void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
+void MemberDefImpl::writeMemberDocSimple(OutputList &ol, Definition *container)
{
Definition *scope = getOuterScope();
QCString doxyName = name();
@@ -3169,7 +3493,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
//printf("===> %s::anonymous: %s\n",name().data(),cd?cd->name().data():"<none>");
if (container && container->definitionType()==Definition::TypeClass &&
- !((ClassDef*)container)->isJavaEnum())
+ !(dynamic_cast<ClassDef*>(container))->isJavaEnum())
{
ol.startInlineMemberType();
ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
@@ -3246,7 +3570,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
ol.endInlineMemberDoc();
}
-QCString MemberDef::memberTypeName() const
+QCString MemberDefImpl::memberTypeName() const
{
switch (m_impl->mtype)
{
@@ -3270,7 +3594,7 @@ QCString MemberDef::memberTypeName() const
}
}
-void MemberDef::warnIfUndocumented()
+void MemberDefImpl::warnIfUndocumented()
{
/*
* Removed bug_303020:
@@ -3318,7 +3642,7 @@ void MemberDef::warnIfUndocumented()
}
-void MemberDef::warnIfUndocumentedParams()
+void MemberDefImpl::warnIfUndocumentedParams()
{
if (!Config_getBool(EXTRACT_ALL) &&
Config_getBool(WARN_IF_UNDOCUMENTED) &&
@@ -3342,14 +3666,14 @@ void MemberDef::warnIfUndocumentedParams()
}
}
-bool MemberDef::isFriendClass() const
+bool MemberDefImpl::isFriendClass() const
{
return (isFriend() &&
(m_impl->type=="friend class" || m_impl->type=="friend struct" ||
m_impl->type=="friend union"));
}
-bool MemberDef::isDocumentedFriendClass() const
+bool MemberDefImpl::isDocumentedFriendClass() const
{
ClassDef *fcd=0;
QCString baseName=name();
@@ -3359,39 +3683,39 @@ bool MemberDef::isDocumentedFriendClass() const
(fcd=getClass(baseName)) && fcd->isLinkable());
}
-bool MemberDef::isDeleted() const
+bool MemberDefImpl::isDeleted() const
{
return m_impl->defArgList && m_impl->defArgList->isDeleted;
}
-bool MemberDef::hasDocumentation() const
+bool MemberDefImpl::hasDocumentation() const
{
- return Definition::hasDocumentation() ||
+ return DefinitionImpl::hasDocumentation() ||
(m_impl->mtype==MemberType_Enumeration && m_impl->docEnumValues) || // has enum values
(m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()); // has doc arguments
}
#if 0
-bool MemberDef::hasUserDocumentation() const
+bool MemberDefImpl::hasUserDocumentation() const
{
- bool hasDocs = Definition::hasUserDocumentation();
+ bool hasDocs = DefinitionImpl::hasUserDocumentation();
return hasDocs;
}
#endif
-void MemberDef::setMemberGroup(MemberGroup *grp)
+void MemberDefImpl::setMemberGroup(MemberGroup *grp)
{
m_impl->memberGroup = grp;
}
-bool MemberDef::visibleMemberGroup(bool hideNoHeader)
+bool MemberDefImpl::visibleMemberGroup(bool hideNoHeader)
{
return m_impl->memberGroup!=0 &&
(!hideNoHeader || m_impl->memberGroup->header()!="[NOHEADER]");
}
-QCString MemberDef::getScopeString() const
+QCString MemberDefImpl::getScopeString() const
{
QCString result;
if (getClassDef()) result=getClassDef()->displayName();
@@ -3424,7 +3748,7 @@ static QCString escapeAnchor(const QCString &anchor)
}
#endif
-void MemberDef::setAnchor()
+void MemberDefImpl::setAnchor()
{
QCString memAnchor = name();
if (!m_impl->args.isEmpty()) memAnchor+=m_impl->args;
@@ -3453,11 +3777,11 @@ void MemberDef::setAnchor()
m_impl->anc = "a"+sigStr;
}
-void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
+void MemberDefImpl::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,
bool hasDocs,MemberDef *member)
{
- //printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data());
+ //printf("%s MemberDefImpl::setGroupDef(%s)\n",name().data(),gd->name().data());
m_impl->group=gd;
m_impl->grouppri=pri;
m_impl->groupFileName=fileName;
@@ -3467,7 +3791,7 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
m_isLinkableCached = 0;
}
-void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
+void MemberDefImpl::setEnumScope(MemberDef *md,bool livesInsideEnum)
{
m_impl->enumScope=md;
m_impl->livesInsideEnum=livesInsideEnum;
@@ -3482,7 +3806,7 @@ void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
}
}
-void MemberDef::setMemberClass(ClassDef *cd)
+void MemberDefImpl::setMemberClass(ClassDef *cd)
{
m_impl->classDef=cd;
m_isLinkableCached = 0;
@@ -3490,13 +3814,13 @@ void MemberDef::setMemberClass(ClassDef *cd)
setOuterScope(cd);
}
-void MemberDef::setNamespace(NamespaceDef *nd)
+void MemberDefImpl::setNamespace(NamespaceDef *nd)
{
m_impl->nspace=nd;
setOuterScope(nd);
}
-MemberDef *MemberDef::createTemplateInstanceMember(
+MemberDef *MemberDefImpl::createTemplateInstanceMember(
ArgumentList *formalArgs,ArgumentList *actualArgs)
{
//printf(" Member %s %s %s\n",typeString(),name().data(),argsString());
@@ -3522,7 +3846,7 @@ MemberDef *MemberDef::createTemplateInstanceMember(
methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs);
}
- MemberDef *imd = new MemberDef(
+ MemberDef *imd = createMemberDef(
getDefFileName(),getDefLine(),getDefColumn(),
substituteTemplateArgumentsInString(m_impl->type,formalArgs,actualArgs),
methodName,
@@ -3541,7 +3865,7 @@ MemberDef *MemberDef::createTemplateInstanceMember(
return imd;
}
-bool MemberDef::hasOneLineInitializer() const
+bool MemberDefImpl::hasOneLineInitializer() const
{
//printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
// name().data(),m_impl->initializer.data(),m_impl->initLines,
@@ -3550,7 +3874,7 @@ bool MemberDef::hasOneLineInitializer() const
((m_impl->maxInitLines>0 && m_impl->userInitLines==-1) || m_impl->userInitLines>0); // enabled by default or explicitly
}
-bool MemberDef::hasMultiLineInitializer() const
+bool MemberDefImpl::hasMultiLineInitializer() const
{
//printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
// initLines,userInitLines,maxInitLines);
@@ -3560,7 +3884,7 @@ bool MemberDef::hasMultiLineInitializer() const
);
}
-void MemberDef::setInitializer(const char *initializer)
+void MemberDefImpl::setInitializer(const char *initializer)
{
m_impl->initializer=initializer;
int l=m_impl->initializer.length();
@@ -3571,14 +3895,13 @@ void MemberDef::setInitializer(const char *initializer)
//printf("%s::setInitializer(%s)\n",name().data(),m_impl->initializer.data());
}
-void MemberDef::addListReference(Definition *)
+void MemberDefImpl::addListReference(Definition *)
{
static bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
//static bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES);
//static bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
//static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
SrcLangExt lang = getLanguage();
- visited=TRUE;
if (!isLinkableInProject()) return;
QCString memLabel;
if (optimizeOutputForC)
@@ -3596,7 +3919,7 @@ void MemberDef::addListReference(Definition *)
QCString memName = name();
Definition *pd=getOuterScope();
QCString pdName = pd->definitionType()==Definition::TypeClass ?
- ((ClassDef*)pd)->displayName() : pd->name();
+ (dynamic_cast<ClassDef*>(pd))->displayName() : pd->name();
QCString sep = getLanguageSpecificSeparator(lang,TRUE);
QCString memArgs;
if (!isRelated()
@@ -3631,16 +3954,16 @@ void MemberDef::addListReference(Definition *)
}
}
-MemberList *MemberDef::getSectionList(Definition *d) const
+MemberList *MemberDefImpl::getSectionList(Definition *d) const
{
char key[20];
sprintf(key,"%p",d);
return (d!=0 && m_impl->classSectionSDict) ? m_impl->classSectionSDict->find(key) : 0;
}
-void MemberDef::setSectionList(Definition *d, MemberList *sl)
+void MemberDefImpl::setSectionList(Definition *d, MemberList *sl)
{
- //printf("MemberDef::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
+ //printf("MemberDefImpl::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
char key[20];
sprintf(key,"%p",d);
if (m_impl->classSectionSDict==0)
@@ -3650,7 +3973,7 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl)
m_impl->classSectionSDict->append(key,sl);
}
-Specifier MemberDef::virtualness(int count) const
+Specifier MemberDefImpl::virtualness(int count) const
{
if (count>25)
{
@@ -3670,7 +3993,7 @@ Specifier MemberDef::virtualness(int count) const
return v;
}
-void MemberDef::writeTagFile(FTextStream &tagFile)
+void MemberDefImpl::writeTagFile(FTextStream &tagFile)
{
if (!isLinkableInProject()) return;
tagFile << " <member kind=\"";
@@ -3751,7 +4074,7 @@ void MemberDef::writeTagFile(FTextStream &tagFile)
tagFile << " </member>" << endl;
}
-void MemberDef::_computeIsConstructor()
+void MemberDefImpl::_computeIsConstructor()
{
m_isConstructorCached=1; // FALSE
if (m_impl->classDef)
@@ -3794,11 +4117,11 @@ void MemberDef::_computeIsConstructor()
}
}
-bool MemberDef::isConstructor() const
+bool MemberDefImpl::isConstructor() const
{
if (m_isConstructorCached==0)
{
- MemberDef *that = (MemberDef*)this;
+ MemberDefImpl *that = (MemberDefImpl*)this;
that->_computeIsConstructor();
}
ASSERT(m_isConstructorCached>0);
@@ -3806,7 +4129,7 @@ bool MemberDef::isConstructor() const
}
-void MemberDef::_computeIsDestructor()
+void MemberDefImpl::_computeIsDestructor()
{
bool isDestructor;
if (m_impl->isDMember) // for D
@@ -3835,18 +4158,18 @@ void MemberDef::_computeIsDestructor()
m_isDestructorCached = isDestructor ? 2 : 1;
}
-bool MemberDef::isDestructor() const
+bool MemberDefImpl::isDestructor() const
{
if (m_isDestructorCached==0)
{
- MemberDef *that=(MemberDef*)this;
+ MemberDefImpl *that=(MemberDefImpl*)this;
that->_computeIsDestructor();
}
ASSERT(m_isDestructorCached>0);
return m_isDestructorCached==2;
}
-void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
+void MemberDefImpl::writeEnumDeclaration(OutputList &typeDecl,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd)
{
int enumMemCount=0;
@@ -3875,7 +4198,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
if (isLinkableInProject() || hasDocumentedEnumValues())
{
//_writeTagData(compoundType);
- _addToSearchIndex();
+ addToSearchIndex();
writeLink(typeDecl,cd,nd,fd,gd);
}
else
@@ -3926,7 +4249,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
if (fmd->hasDocumentation()) // enum value has docs
{
//fmd->_writeTagData(compoundType);
- fmd->_addToSearchIndex();
+ fmd->addToSearchIndex();
fmd->writeLink(typeDecl,cd,nd,fd,gd);
}
else // no docs for this enum value
@@ -3970,19 +4293,19 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
}
}
-void MemberDef::setArgumentList(ArgumentList *al)
+void MemberDefImpl::setArgumentList(ArgumentList *al)
{
if (m_impl->defArgList) delete m_impl->defArgList;
m_impl->defArgList = al;
}
-void MemberDef::setDeclArgumentList(ArgumentList *al)
+void MemberDefImpl::setDeclArgumentList(ArgumentList *al)
{
if (m_impl->declArgList) delete m_impl->declArgList;
m_impl->declArgList = al;
}
-void MemberDef::setTypeConstraints(ArgumentList *al)
+void MemberDefImpl::setTypeConstraints(ArgumentList *al)
{
if (al==0) return;
if (m_impl->typeConstraints) delete m_impl->typeConstraints;
@@ -3996,53 +4319,53 @@ void MemberDef::setTypeConstraints(ArgumentList *al)
}
}
-void MemberDef::setType(const char *t)
+void MemberDefImpl::setType(const char *t)
{
m_impl->type = t;
}
-void MemberDef::setAccessorType(ClassDef *cd,const char *t)
+void MemberDefImpl::setAccessorType(ClassDef *cd,const char *t)
{
m_impl->accessorClass = cd;
m_impl->accessorType = t;
}
-ClassDef *MemberDef::accessorClass() const
+ClassDef *MemberDefImpl::accessorClass() const
{
return m_impl->accessorClass;
}
-void MemberDef::findSectionsInDocumentation()
+void MemberDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
}
-void MemberDef::enableCallGraph(bool e)
+void MemberDefImpl::enableCallGraph(bool e)
{
m_impl->hasCallGraph=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
-void MemberDef::enableCallerGraph(bool e)
+void MemberDefImpl::enableCallerGraph(bool e)
{
m_impl->hasCallerGraph=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
-void MemberDef::enableReferencedByRelation(bool e)
+void MemberDefImpl::enableReferencedByRelation(bool e)
{
m_impl->hasReferencedByRelation=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
-void MemberDef::enableReferencesRelation(bool e)
+void MemberDefImpl::enableReferencesRelation(bool e)
{
m_impl->hasReferencesRelation=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
#if 0
-bool MemberDef::protectionVisible() const
+bool MemberDefImpl::protectionVisible() const
{
return m_impl->prot==Public ||
(m_impl->prot==Private && Config_getBool(EXTRACT_PRIVATE)) ||
@@ -4052,7 +4375,7 @@ bool MemberDef::protectionVisible() const
#endif
#if 0
-void MemberDef::setInbodyDocumentation(const char *docs,
+void MemberDefImpl::setInbodyDocumentation(const char *docs,
const char *docFile,int docLine)
{
m_impl->inbodyDocs = docs;
@@ -4062,19 +4385,19 @@ void MemberDef::setInbodyDocumentation(const char *docs,
}
#endif
-bool MemberDef::isObjCMethod() const
+bool MemberDefImpl::isObjCMethod() const
{
if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isFunction()) return TRUE;
return FALSE;
}
-bool MemberDef::isObjCProperty() const
+bool MemberDefImpl::isObjCProperty() const
{
if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isProperty()) return TRUE;
return FALSE;
}
-QCString MemberDef::qualifiedName() const
+QCString MemberDefImpl::qualifiedName() const
{
if (isObjCMethod())
{
@@ -4094,11 +4417,11 @@ QCString MemberDef::qualifiedName() const
}
else
{
- return Definition::qualifiedName();
+ return DefinitionImpl::qualifiedName();
}
}
-void MemberDef::setTagInfo(TagInfo *ti)
+void MemberDefImpl::setTagInfo(TagInfo *ti)
{
if (ti)
{
@@ -4109,7 +4432,7 @@ void MemberDef::setTagInfo(TagInfo *ti)
}
}
-QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
+QCString MemberDefImpl::objCMethodName(bool localLink,bool showStatic) const
{
QCString qm;
if (showStatic)
@@ -4126,455 +4449,455 @@ QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
return qm;
}
-const char *MemberDef::declaration() const
+const char *MemberDefImpl::declaration() const
{
return m_impl->decl;
}
-const char *MemberDef::definition() const
+const char *MemberDefImpl::definition() const
{
return m_impl->def;
}
-const char *MemberDef::extraTypeChars() const
+const char *MemberDefImpl::extraTypeChars() const
{
return m_impl->extraTypeChars;
}
-const char *MemberDef::typeString() const
+const char *MemberDefImpl::typeString() const
{
return m_impl->type;
}
-const char *MemberDef::argsString() const
+const char *MemberDefImpl::argsString() const
{
return m_impl->args;
}
-const char *MemberDef::excpString() const
+const char *MemberDefImpl::excpString() const
{
return m_impl->exception;
}
-const char *MemberDef::bitfieldString() const
+const char *MemberDefImpl::bitfieldString() const
{
return m_impl->bitfields;
}
-const QCString &MemberDef::initializer() const
+const QCString &MemberDefImpl::initializer() const
{
return m_impl->initializer;
}
-int MemberDef::initializerLines() const
+int MemberDefImpl::initializerLines() const
{
return m_impl->initLines;
}
-uint64 MemberDef::getMemberSpecifiers() const
+uint64 MemberDefImpl::getMemberSpecifiers() const
{
return m_impl->memSpec;
}
-ClassDef *MemberDef::getClassDef() const
+ClassDef *MemberDefImpl::getClassDef() const
{
return m_impl->classDef;
}
-FileDef *MemberDef::getFileDef() const
+FileDef *MemberDefImpl::getFileDef() const
{
return m_impl->fileDef;
}
-NamespaceDef* MemberDef::getNamespaceDef() const
+NamespaceDef* MemberDefImpl::getNamespaceDef() const
{
return m_impl->nspace;
}
-const char *MemberDef::getReadAccessor() const
+const char *MemberDefImpl::getReadAccessor() const
{
return m_impl->read;
}
-const char *MemberDef::getWriteAccessor() const
+const char *MemberDefImpl::getWriteAccessor() const
{
return m_impl->write;
}
-GroupDef *MemberDef::getGroupDef() const
+GroupDef *MemberDefImpl::getGroupDef() const
{
return m_impl->group;
}
-Grouping::GroupPri_t MemberDef::getGroupPri() const
+Grouping::GroupPri_t MemberDefImpl::getGroupPri() const
{
return m_impl->grouppri;
}
-const char *MemberDef::getGroupFileName() const
+const char *MemberDefImpl::getGroupFileName() const
{
return m_impl->groupFileName;
}
-int MemberDef::getGroupStartLine() const
+int MemberDefImpl::getGroupStartLine() const
{
return m_impl->groupStartLine;
}
-bool MemberDef::getGroupHasDocs() const
+bool MemberDefImpl::getGroupHasDocs() const
{
return m_impl->groupHasDocs;
}
-Protection MemberDef::protection() const
+Protection MemberDefImpl::protection() const
{
return m_impl->prot;
}
-MemberType MemberDef::memberType() const
+MemberType MemberDefImpl::memberType() const
{
return m_impl->mtype;
}
-bool MemberDef::isSignal() const
+bool MemberDefImpl::isSignal() const
{
return m_impl->mtype==MemberType_Signal;
}
-bool MemberDef::isSlot() const
+bool MemberDefImpl::isSlot() const
{
return m_impl->mtype==MemberType_Slot;
}
-bool MemberDef::isVariable() const
+bool MemberDefImpl::isVariable() const
{
return m_impl->mtype==MemberType_Variable;
}
-bool MemberDef::isEnumerate() const
+bool MemberDefImpl::isEnumerate() const
{
return m_impl->mtype==MemberType_Enumeration;
}
-bool MemberDef::isEnumValue() const
+bool MemberDefImpl::isEnumValue() const
{
return m_impl->mtype==MemberType_EnumValue;
}
-bool MemberDef::isTypedef() const
+bool MemberDefImpl::isTypedef() const
{
return m_impl->mtype==MemberType_Typedef;
}
-bool MemberDef::isSequence() const
+bool MemberDefImpl::isSequence() const
{
return m_impl->mtype==MemberType_Sequence;
}
-bool MemberDef::isDictionary() const
+bool MemberDefImpl::isDictionary() const
{
return m_impl->mtype==MemberType_Dictionary;
}
-bool MemberDef::isFunction() const
+bool MemberDefImpl::isFunction() const
{
return m_impl->mtype==MemberType_Function;
}
-bool MemberDef::isFunctionPtr() const
+bool MemberDefImpl::isFunctionPtr() const
{
return m_impl->mtype==MemberType_Variable && QCString(argsString()).find(")(")!=-1;
}
-bool MemberDef::isDefine() const
+bool MemberDefImpl::isDefine() const
{
return m_impl->mtype==MemberType_Define;
}
-bool MemberDef::isFriend() const
+bool MemberDefImpl::isFriend() const
{
return m_impl->mtype==MemberType_Friend;
}
-bool MemberDef::isDCOP() const
+bool MemberDefImpl::isDCOP() const
{
return m_impl->mtype==MemberType_DCOP;
}
-bool MemberDef::isProperty() const
+bool MemberDefImpl::isProperty() const
{
return m_impl->mtype==MemberType_Property;
}
-bool MemberDef::isEvent() const
+bool MemberDefImpl::isEvent() const
{
return m_impl->mtype==MemberType_Event;
}
-bool MemberDef::isRelated() const
+bool MemberDefImpl::isRelated() const
{
return m_impl->related == Related;
}
-bool MemberDef::isForeign() const
+bool MemberDefImpl::isForeign() const
{
return m_impl->related == Foreign;
}
-bool MemberDef::isStatic() const
+bool MemberDefImpl::isStatic() const
{
return m_impl->stat;
}
-bool MemberDef::isInline() const
+bool MemberDefImpl::isInline() const
{
return (m_impl->memSpec&Entry::Inline)!=0;
}
-bool MemberDef::isExplicit() const
+bool MemberDefImpl::isExplicit() const
{
return (m_impl->memSpec&Entry::Explicit)!=0;
}
-bool MemberDef::isMutable() const
+bool MemberDefImpl::isMutable() const
{
return (m_impl->memSpec&Entry::Mutable)!=0;
}
-bool MemberDef::isGettable() const
+bool MemberDefImpl::isGettable() const
{
return (m_impl->memSpec&Entry::Gettable)!=0;
}
-bool MemberDef::isPrivateGettable() const
+bool MemberDefImpl::isPrivateGettable() const
{
return (m_impl->memSpec&Entry::PrivateGettable)!=0;
}
-bool MemberDef::isProtectedGettable() const
+bool MemberDefImpl::isProtectedGettable() const
{
return (m_impl->memSpec&Entry::ProtectedGettable)!=0;
}
-bool MemberDef::isSettable() const
+bool MemberDefImpl::isSettable() const
{
return (m_impl->memSpec&Entry::Settable)!=0;
}
-bool MemberDef::isPrivateSettable() const
+bool MemberDefImpl::isPrivateSettable() const
{
return (m_impl->memSpec&Entry::PrivateSettable)!=0;
}
-bool MemberDef::isProtectedSettable() const
+bool MemberDefImpl::isProtectedSettable() const
{
return (m_impl->memSpec&Entry::ProtectedSettable)!=0;
}
-bool MemberDef::isAddable() const
+bool MemberDefImpl::isAddable() const
{
return (m_impl->memSpec&Entry::Addable)!=0;
}
-bool MemberDef::isRemovable() const
+bool MemberDefImpl::isRemovable() const
{
return (m_impl->memSpec&Entry::Removable)!=0;
}
-bool MemberDef::isRaisable() const
+bool MemberDefImpl::isRaisable() const
{
return (m_impl->memSpec&Entry::Raisable)!=0;
}
-bool MemberDef::isReadable() const
+bool MemberDefImpl::isReadable() const
{
return (m_impl->memSpec&Entry::Readable)!=0;
}
-bool MemberDef::isWritable() const
+bool MemberDefImpl::isWritable() const
{
return (m_impl->memSpec&Entry::Writable)!=0;
}
-bool MemberDef::isFinal() const
+bool MemberDefImpl::isFinal() const
{
return (m_impl->memSpec&Entry::Final)!=0;
}
-bool MemberDef::isNew() const
+bool MemberDefImpl::isNew() const
{
return (m_impl->memSpec&Entry::New)!=0;
}
-bool MemberDef::isSealed() const
+bool MemberDefImpl::isSealed() const
{
return (m_impl->memSpec&Entry::Sealed)!=0;
}
-bool MemberDef::isOverride() const
+bool MemberDefImpl::isOverride() const
{
return (m_impl->memSpec&Entry::Override)!=0;
}
-bool MemberDef::isInitonly() const
+bool MemberDefImpl::isInitonly() const
{
return (m_impl->memSpec&Entry::Initonly)!=0;
}
-bool MemberDef::isAbstract() const
+bool MemberDefImpl::isAbstract() const
{
return (m_impl->memSpec&Entry::Abstract)!=0;
}
-bool MemberDef::isOptional() const
+bool MemberDefImpl::isOptional() const
{
return (m_impl->memSpec&Entry::Optional)!=0;
}
-bool MemberDef::isRequired() const
+bool MemberDefImpl::isRequired() const
{
return (m_impl->memSpec&Entry::Required)!=0;
}
-bool MemberDef::isNonAtomic() const
+bool MemberDefImpl::isNonAtomic() const
{
return (m_impl->memSpec&Entry::NonAtomic)!=0;
}
-bool MemberDef::isCopy() const
+bool MemberDefImpl::isCopy() const
{
return (m_impl->memSpec&Entry::Copy)!=0;
}
-bool MemberDef::isAssign() const
+bool MemberDefImpl::isAssign() const
{
return (m_impl->memSpec&Entry::Assign)!=0;
}
-bool MemberDef::isRetain() const
+bool MemberDefImpl::isRetain() const
{
return (m_impl->memSpec&Entry::Retain)!=0;
}
-bool MemberDef::isWeak() const
+bool MemberDefImpl::isWeak() const
{
return (m_impl->memSpec&Entry::Weak)!=0;
}
-bool MemberDef::isStrong() const
+bool MemberDefImpl::isStrong() const
{
return (m_impl->memSpec&Entry::Strong)!=0;
}
-bool MemberDef::isStrongEnumValue() const
+bool MemberDefImpl::isStrongEnumValue() const
{
return m_impl->mtype==MemberType_EnumValue &&
m_impl->enumScope &&
m_impl->enumScope->isStrong();
}
-bool MemberDef::isUnretained() const
+bool MemberDefImpl::isUnretained() const
{
return (m_impl->memSpec&Entry::Unretained)!=0;
}
-bool MemberDef::isAlias() const
+bool MemberDefImpl::isAlias() const
{
return (m_impl->memSpec&Entry::Alias)!=0;
}
-bool MemberDef::isDefault() const
+bool MemberDefImpl::isDefault() const
{
return (m_impl->memSpec&Entry::Default)!=0;
}
-bool MemberDef::isDelete() const
+bool MemberDefImpl::isDelete() const
{
return (m_impl->memSpec&Entry::Delete)!=0;
}
-bool MemberDef::isNoExcept() const
+bool MemberDefImpl::isNoExcept() const
{
return (m_impl->memSpec&Entry::NoExcept)!=0;
}
-bool MemberDef::isAttribute() const
+bool MemberDefImpl::isAttribute() const
{
return (m_impl->memSpec&Entry::Attribute)!=0;
}
-bool MemberDef::isUNOProperty() const
+bool MemberDefImpl::isUNOProperty() const
{
return (m_impl->memSpec&Entry::Property)!=0;
}
-bool MemberDef::isReadonly() const
+bool MemberDefImpl::isReadonly() const
{
return (m_impl->memSpec&Entry::Readonly)!=0;
}
-bool MemberDef::isBound() const
+bool MemberDefImpl::isBound() const
{
return (m_impl->memSpec&Entry::Bound)!=0;
}
-bool MemberDef::isConstrained() const
+bool MemberDefImpl::isConstrained() const
{
return (m_impl->memSpec&Entry::Constrained)!=0;
}
-bool MemberDef::isTransient() const
+bool MemberDefImpl::isTransient() const
{
return (m_impl->memSpec&Entry::Transient)!=0;
}
-bool MemberDef::isMaybeVoid() const
+bool MemberDefImpl::isMaybeVoid() const
{
return (m_impl->memSpec&Entry::MaybeVoid)!=0;
}
-bool MemberDef::isMaybeDefault() const
+bool MemberDefImpl::isMaybeDefault() const
{
return (m_impl->memSpec&Entry::MaybeDefault)!=0;
}
-bool MemberDef::isMaybeAmbiguous() const
+bool MemberDefImpl::isMaybeAmbiguous() const
{
return (m_impl->memSpec&Entry::MaybeAmbiguous)!=0;
}
-bool MemberDef::isPublished() const
+bool MemberDefImpl::isPublished() const
{
return (m_impl->memSpec&Entry::Published)!=0;
}
-bool MemberDef::isImplementation() const
+bool MemberDefImpl::isImplementation() const
{
return m_impl->implOnly;
}
-bool MemberDef::isExternal() const
+bool MemberDefImpl::isExternal() const
{
return m_impl->explExt;
}
-bool MemberDef::isTemplateSpecialization() const
+bool MemberDefImpl::isTemplateSpecialization() const
{
return m_impl->tspec;
}
-bool MemberDef::hasDocumentedParams() const
+bool MemberDefImpl::hasDocumentedParams() const
{
return m_impl->hasDocumentedParams;
}
-bool MemberDef::hasDocumentedReturnType() const
+bool MemberDefImpl::hasDocumentedReturnType() const
{
return m_impl->hasDocumentedReturnType;
}
-bool MemberDef::showInCallGraph() const
+bool MemberDefImpl::showInCallGraph() const
{
return isFunction() ||
isSlot() ||
@@ -4583,183 +4906,183 @@ bool MemberDef::showInCallGraph() const
isObjCMethod();
}
-ClassDef *MemberDef::relatedAlso() const
+ClassDef *MemberDefImpl::relatedAlso() const
{
return m_impl->relatedAlso;
}
-bool MemberDef::hasDocumentedEnumValues() const
+bool MemberDefImpl::hasDocumentedEnumValues() const
{
return m_impl->docEnumValues;
}
-MemberDef *MemberDef::getAnonymousEnumType() const
+MemberDef *MemberDefImpl::getAnonymousEnumType() const
{
return m_impl->annEnumType;
}
-bool MemberDef::isDocsForDefinition() const
+bool MemberDefImpl::isDocsForDefinition() const
{
return m_impl->docsForDefinition;
}
-MemberDef *MemberDef::getEnumScope() const
+MemberDef *MemberDefImpl::getEnumScope() const
{
return m_impl->enumScope;
}
-bool MemberDef::livesInsideEnum() const
+bool MemberDefImpl::livesInsideEnum() const
{
return m_impl->livesInsideEnum;
}
-bool MemberDef::isSliceLocal() const
+bool MemberDefImpl::isSliceLocal() const
{
return (m_impl->memSpec&Entry::Local)!=0;
}
-bool MemberDef::isConstExpr() const
+bool MemberDefImpl::isConstExpr() const
{
return (m_impl->memSpec&Entry::ConstExpr)!=0;
}
-MemberList *MemberDef::enumFieldList() const
+MemberList *MemberDefImpl::enumFieldList() const
{
return m_impl->enumFields;
}
-ExampleSDict *MemberDef::getExamples() const
+ExampleSDict *MemberDefImpl::getExamples() const
{
return m_impl->exampleSDict;
}
-bool MemberDef::isPrototype() const
+bool MemberDefImpl::isPrototype() const
{
return m_impl->proto;
}
-ArgumentList *MemberDef::argumentList() const
+ArgumentList *MemberDefImpl::argumentList() const
{
return m_impl->defArgList;
}
-ArgumentList *MemberDef::declArgumentList() const
+ArgumentList *MemberDefImpl::declArgumentList() const
{
return m_impl->declArgList;
}
-ArgumentList *MemberDef::templateArguments() const
+ArgumentList *MemberDefImpl::templateArguments() const
{
return m_impl->tArgList;
}
-QList<ArgumentList> *MemberDef::definitionTemplateParameterLists() const
+QList<ArgumentList> *MemberDefImpl::definitionTemplateParameterLists() const
{
return m_impl->defTmpArgLists;
}
-int MemberDef::getMemberGroupId() const
+int MemberDefImpl::getMemberGroupId() const
{
return m_impl->grpId;
}
-MemberGroup *MemberDef::getMemberGroup() const
+MemberGroup *MemberDefImpl::getMemberGroup() const
{
return m_impl->memberGroup;
}
-bool MemberDef::fromAnonymousScope() const
+bool MemberDefImpl::fromAnonymousScope() const
{
return m_impl->annScope;
}
-bool MemberDef::anonymousDeclShown() const
+bool MemberDefImpl::anonymousDeclShown() const
{
return m_impl->annUsed;
}
-void MemberDef::setAnonymousUsed()
+void MemberDefImpl::setAnonymousUsed()
{
m_impl->annUsed = TRUE;
}
-bool MemberDef::hasCallGraph() const
+bool MemberDefImpl::hasCallGraph() const
{
return m_impl->hasCallGraph;
}
-bool MemberDef::hasCallerGraph() const
+bool MemberDefImpl::hasCallerGraph() const
{
return m_impl->hasCallerGraph;
}
-bool MemberDef::hasReferencedByRelation() const
+bool MemberDefImpl::hasReferencedByRelation() const
{
return m_impl->hasReferencedByRelation;
}
-bool MemberDef::hasReferencesRelation() const
+bool MemberDefImpl::hasReferencesRelation() const
{
return m_impl->hasReferencesRelation;
}
-MemberDef *MemberDef::templateMaster() const
+MemberDef *MemberDefImpl::templateMaster() const
{
return m_impl->templateMaster;
}
-bool MemberDef::isTypedefValCached() const
+bool MemberDefImpl::isTypedefValCached() const
{
return m_impl->isTypedefValCached;
}
-ClassDef *MemberDef::getCachedTypedefVal() const
+ClassDef *MemberDefImpl::getCachedTypedefVal() const
{
return m_impl->cachedTypedefValue;
}
-QCString MemberDef::getCachedTypedefTemplSpec() const
+QCString MemberDefImpl::getCachedTypedefTemplSpec() const
{
return m_impl->cachedTypedefTemplSpec;
}
-QCString MemberDef::getCachedResolvedTypedef() const
+QCString MemberDefImpl::getCachedResolvedTypedef() const
{
- //printf("MemberDef::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
+ //printf("MemberDefImpl::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
return m_impl->cachedResolvedType;
}
-MemberDef *MemberDef::memberDefinition() const
+MemberDef *MemberDefImpl::memberDefinition() const
{
return m_impl->memDef;
}
-MemberDef *MemberDef::memberDeclaration() const
+MemberDef *MemberDefImpl::memberDeclaration() const
{
return m_impl->memDec;
}
-MemberDef *MemberDef::inheritsDocsFrom() const
+MemberDef *MemberDefImpl::inheritsDocsFrom() const
{
return m_impl->docProvider;
}
-MemberDef *MemberDef::getGroupAlias() const
+MemberDef *MemberDefImpl::getGroupAlias() const
{
return m_impl->groupAlias;
}
-QCString MemberDef::getDeclFileName() const
+QCString MemberDefImpl::getDeclFileName() const
{
return m_impl->declFileName;
}
-int MemberDef::getDeclLine() const
+int MemberDefImpl::getDeclLine() const
{
return m_impl->declLine;
}
-int MemberDef::getDeclColumn() const
+int MemberDefImpl::getDeclColumn() const
{
return m_impl->declColumn;
}
@@ -4767,18 +5090,18 @@ int MemberDef::getDeclColumn() const
//----------------------------------------------
-void MemberDef::setMemberType(MemberType t)
+void MemberDefImpl::setMemberType(MemberType t)
{
m_impl->mtype=t;
m_isLinkableCached = 0;
}
-void MemberDef::setDefinition(const char *d)
+void MemberDefImpl::setDefinition(const char *d)
{
m_impl->def=d;
}
-void MemberDef::setFileDef(FileDef *fd)
+void MemberDefImpl::setFileDef(FileDef *fd)
{
m_impl->fileDef=fd;
m_isLinkableCached = 0;
@@ -4786,28 +5109,28 @@ void MemberDef::setFileDef(FileDef *fd)
m_isDestructorCached = 0;
}
-void MemberDef::setProtection(Protection p)
+void MemberDefImpl::setProtection(Protection p)
{
m_impl->prot=p;
m_isLinkableCached = 0;
}
-void MemberDef::setMemberSpecifiers(uint64 s)
+void MemberDefImpl::setMemberSpecifiers(uint64 s)
{
m_impl->memSpec=s;
}
-void MemberDef::mergeMemberSpecifiers(uint64 s)
+void MemberDefImpl::mergeMemberSpecifiers(uint64 s)
{
m_impl->memSpec|=s;
}
-void MemberDef::setBitfields(const char *s)
+void MemberDefImpl::setBitfields(const char *s)
{
m_impl->bitfields = QCString(s).simplifyWhiteSpace();
}
-void MemberDef::setMaxInitLines(int lines)
+void MemberDefImpl::setMaxInitLines(int lines)
{
if (lines!=-1)
{
@@ -4815,76 +5138,76 @@ void MemberDef::setMaxInitLines(int lines)
}
}
-void MemberDef::setReadAccessor(const char *r)
+void MemberDefImpl::setReadAccessor(const char *r)
{
m_impl->read=r;
}
-void MemberDef::setWriteAccessor(const char *w)
+void MemberDefImpl::setWriteAccessor(const char *w)
{
m_impl->write=w;
}
-void MemberDef::setTemplateSpecialization(bool b)
+void MemberDefImpl::setTemplateSpecialization(bool b)
{
m_impl->tspec=b;
}
-void MemberDef::makeRelated()
+void MemberDefImpl::makeRelated()
{
m_impl->related = Related;
m_isLinkableCached = 0;
}
-void MemberDef::makeForeign()
+void MemberDefImpl::makeForeign()
{
m_impl->related = Foreign;
m_isLinkableCached = 0;
}
-void MemberDef::setHasDocumentedParams(bool b)
+void MemberDefImpl::setHasDocumentedParams(bool b)
{
m_impl->hasDocumentedParams = b;
}
-void MemberDef::setHasDocumentedReturnType(bool b)
+void MemberDefImpl::setHasDocumentedReturnType(bool b)
{
m_impl->hasDocumentedReturnType = b;
}
-void MemberDef::setInheritsDocsFrom(MemberDef *md)
+void MemberDefImpl::setInheritsDocsFrom(MemberDef *md)
{
m_impl->docProvider = md;
}
-void MemberDef::setArgsString(const char *as)
+void MemberDefImpl::setArgsString(const char *as)
{
m_impl->args = as;
}
-void MemberDef::setRelatedAlso(ClassDef *cd)
+void MemberDefImpl::setRelatedAlso(ClassDef *cd)
{
m_impl->relatedAlso=cd;
}
-void MemberDef::setEnumClassScope(ClassDef *cd)
+void MemberDefImpl::setEnumClassScope(ClassDef *cd)
{
m_impl->classDef = cd;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
}
-void MemberDef::setDocumentedEnumValues(bool value)
+void MemberDefImpl::setDocumentedEnumValues(bool value)
{
m_impl->docEnumValues=value;
}
-void MemberDef::setAnonymousEnumType(MemberDef *md)
+void MemberDefImpl::setAnonymousEnumType(MemberDef *md)
{
m_impl->annEnumType = md;
}
-void MemberDef::setPrototype(bool p,const QCString &df,int line,int column)
+void MemberDefImpl::setPrototype(bool p,const QCString &df,int line,int column)
{
m_impl->proto=p;
if (p)
@@ -4897,7 +5220,7 @@ void MemberDef::setPrototype(bool p,const QCString &df,int line,int column)
}
}
-void MemberDef::setExplicitExternal(bool b,const QCString &df,int line,int column)
+void MemberDefImpl::setExplicitExternal(bool b,const QCString &df,int line,int column)
{
m_impl->explExt=b;
if (b)
@@ -4911,110 +5234,110 @@ void MemberDef::setExplicitExternal(bool b,const QCString &df,int line,int colum
}
-void MemberDef::setDeclFile(const QCString &df,int line,int column)
+void MemberDefImpl::setDeclFile(const QCString &df,int line,int column)
{
m_impl->declFileName = df;
m_impl->declLine = line;
m_impl->declColumn = column;
}
-void MemberDef::setMemberGroupId(int id)
+void MemberDefImpl::setMemberGroupId(int id)
{
m_impl->grpId=id;
}
-void MemberDef::makeImplementationDetail()
+void MemberDefImpl::makeImplementationDetail()
{
m_impl->implOnly=TRUE;
}
-void MemberDef::setFromAnonymousScope(bool b)
+void MemberDefImpl::setFromAnonymousScope(bool b)
{
m_impl->annScope=b;
}
-void MemberDef::setFromAnonymousMember(MemberDef *m)
+void MemberDefImpl::setFromAnonymousMember(MemberDef *m)
{
m_impl->annMemb=m;
}
-MemberDef *MemberDef::fromAnonymousMember() const
+MemberDef *MemberDefImpl::fromAnonymousMember() const
{
return m_impl->annMemb;
}
-void MemberDef::setTemplateMaster(MemberDef *mt)
+void MemberDefImpl::setTemplateMaster(MemberDef *mt)
{
m_impl->templateMaster=mt;
m_isLinkableCached = 0;
}
-void MemberDef::setDocsForDefinition(bool b)
+void MemberDefImpl::setDocsForDefinition(bool b)
{
m_impl->docsForDefinition = b;
}
-void MemberDef::setGroupAlias(MemberDef *md)
+void MemberDefImpl::setGroupAlias(MemberDef *md)
{
m_impl->groupAlias = md;
}
-void MemberDef::invalidateTypedefValCache()
+void MemberDefImpl::invalidateTypedefValCache()
{
m_impl->isTypedefValCached=FALSE;
}
-void MemberDef::setMemberDefinition(MemberDef *md)
+void MemberDefImpl::setMemberDefinition(MemberDef *md)
{
m_impl->memDef=md;
}
-void MemberDef::setMemberDeclaration(MemberDef *md)
+void MemberDefImpl::setMemberDeclaration(MemberDef *md)
{
m_impl->memDec=md;
}
-ClassDef *MemberDef::category() const
+ClassDef *MemberDefImpl::category() const
{
return m_impl->category;
}
-void MemberDef::setCategory(ClassDef *def)
+void MemberDefImpl::setCategory(ClassDef *def)
{
m_impl->category = def;
}
-MemberDef *MemberDef::categoryRelation() const
+MemberDef *MemberDefImpl::categoryRelation() const
{
return m_impl->categoryRelation;
}
-void MemberDef::setCategoryRelation(MemberDef *md)
+void MemberDefImpl::setCategoryRelation(MemberDef *md)
{
m_impl->categoryRelation = md;
}
-void MemberDef::setEnumBaseType(const QCString &type)
+void MemberDefImpl::setEnumBaseType(const QCString &type)
{
m_impl->enumBaseType = type;
}
-QCString MemberDef::enumBaseType() const
+QCString MemberDefImpl::enumBaseType() const
{
return m_impl->enumBaseType;
}
-void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const QCString &resolvedType)
+void MemberDefImpl::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const QCString &resolvedType)
{
m_impl->isTypedefValCached=TRUE;
m_impl->cachedTypedefValue=val;
m_impl->cachedTypedefTemplSpec=templSpec;
m_impl->cachedResolvedType=resolvedType;
- //printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
+ //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
}
-void MemberDef::copyArgumentNames(MemberDef *bmd)
+void MemberDefImpl::copyArgumentNames(MemberDef *bmd)
{
{
ArgumentList *arguments = bmd->argumentList();
@@ -5057,7 +5380,7 @@ static void invalidateCachedTypesInArgumentList(ArgumentList *al)
}
}
-void MemberDef::invalidateCachedArgumentTypes()
+void MemberDefImpl::invalidateCachedArgumentTypes()
{
invalidateCachedTypesInArgumentList(m_impl->defArgList);
invalidateCachedTypesInArgumentList(m_impl->declArgList);
@@ -5065,12 +5388,12 @@ void MemberDef::invalidateCachedArgumentTypes()
//----------------
-QCString MemberDef::displayName(bool) const
+QCString MemberDefImpl::displayName(bool) const
{
- return Definition::name();
+ return DefinitionImpl::name();
}
-void MemberDef::_addToSearchIndex()
+void MemberDefImpl::addToSearchIndex()
{
// write search index info
if (Doxygen::searchIndex && isLinkableInProject())
@@ -5249,14 +5572,14 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
mdec->enableCallerGraph(mdec->hasCallerGraph() || mdef->hasCallerGraph());
mdef->enableReferencedByRelation(mdec->hasReferencedByRelation() || mdef->hasReferencedByRelation());
- mdef->enableCallerGraph(mdec->hasReferencesRelation() || mdef->hasReferencesRelation());
+ mdef->enableReferencesRelation(mdec->hasReferencesRelation() || mdef->hasReferencesRelation());
mdec->enableReferencedByRelation(mdec->hasReferencedByRelation() || mdef->hasReferencedByRelation());
- mdec->enableCallerGraph(mdec->hasReferencesRelation() || mdef->hasReferencesRelation());
+ mdec->enableReferencesRelation(mdec->hasReferencesRelation() || mdef->hasReferencesRelation());
}
}
}
-QCString MemberDef::briefDescription(bool abbr) const
+QCString MemberDefImpl::briefDescription(bool abbr) const
{
if (m_impl->templateMaster)
{
@@ -5264,11 +5587,11 @@ QCString MemberDef::briefDescription(bool abbr) const
}
else
{
- return Definition::briefDescription(abbr);
+ return DefinitionImpl::briefDescription(abbr);
}
}
-QCString MemberDef::documentation() const
+QCString MemberDefImpl::documentation() const
{
if (m_impl->templateMaster)
{
@@ -5276,16 +5599,16 @@ QCString MemberDef::documentation() const
}
else
{
- return Definition::documentation();
+ return DefinitionImpl::documentation();
}
}
-const ArgumentList *MemberDef::typeConstraints() const
+const ArgumentList *MemberDefImpl::typeConstraints() const
{
return m_impl->typeConstraints;
}
-bool MemberDef::isFriendToHide() const
+bool MemberDefImpl::isFriendToHide() const
{
static bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
bool isFriendToHide = hideFriendCompounds &&
@@ -5295,24 +5618,24 @@ bool MemberDef::isFriendToHide() const
return isFriendToHide;
}
-bool MemberDef::isNotFriend() const
+bool MemberDefImpl::isNotFriend() const
{
return !(isFriend() && isFriendToHide());
}
-bool MemberDef::isFunctionOrSignalSlot() const
+bool MemberDefImpl::isFunctionOrSignalSlot() const
{
return isFunction() || isSlot() || isSignal();
}
-bool MemberDef::isRelatedOrFriend() const
+bool MemberDefImpl::isRelatedOrFriend() const
{
return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
}
-bool MemberDef::isReference() const
+bool MemberDefImpl::isReference() const
{
- return Definition::isReference() ||
+ return DefinitionImpl::isReference() ||
(m_impl->templateMaster && m_impl->templateMaster->isReference());
}
diff --git a/src/memberdef.h b/src/memberdef.h
index d96b9c9..555935a 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -35,424 +35,379 @@ class OutputList;
class GroupDef;
class QTextStream;
class ArgumentList;
-class MemberDefImpl;
class QStrList;
struct TagInfo;
/** A model of a class/file/namespace member symbol. */
-class MemberDef : public Definition
+class MemberDef : virtual public Definition
{
public:
-
- MemberDef(const char *defFileName,int defLine,int defColumn,
- const char *type,const char *name,const char *args,
- const char *excp,Protection prot,Specifier virt,bool stat,
- Relationship related,MemberType t,const ArgumentList *tal,
- const ArgumentList *al,const char *metaData);
- ~MemberDef();
- DefType definitionType() const { return TypeMember; }
+ virtual ~MemberDef() {}
+ virtual DefType definitionType() const = 0;
// move this member into a different scope
- MemberDef *deepCopy() const;
- void moveTo(Definition *);
+ virtual MemberDef *deepCopy() const =0;
+ virtual void moveTo(Definition *) = 0;
//-----------------------------------------------------------------------------------
// ---- getters -----
//-----------------------------------------------------------------------------------
// link id
- QCString getOutputFileBase() const;
- QCString getReference() const;
- QCString anchor() const;
-
- const char *declaration() const;
- const char *definition() const;
- const char *typeString() const;
- const char *argsString() const;
- const char *excpString() const;
- const char *bitfieldString() const;
- const char *extraTypeChars() const;
- const QCString &initializer() const;
- int initializerLines() const;
- uint64 getMemberSpecifiers() const;
- MemberList *getSectionList(Definition *d) const;
- QCString displayDefinition() const;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString getReference() const = 0;
+ virtual QCString anchor() const = 0;
+
+ virtual const char *declaration() const = 0;
+ virtual const char *definition() const = 0;
+ virtual const char *typeString() const = 0;
+ virtual const char *argsString() const = 0;
+ virtual const char *excpString() const = 0;
+ virtual const char *bitfieldString() const = 0;
+ virtual const char *extraTypeChars() const = 0;
+ virtual const QCString &initializer() const = 0;
+ virtual int initializerLines() const = 0;
+ virtual uint64 getMemberSpecifiers() const = 0;
+ virtual MemberList *getSectionList(Definition *d) const = 0;
+ virtual QCString displayDefinition() const = 0;
// scope query members
- ClassDef *getClassDef() const;
- FileDef *getFileDef() const;
- NamespaceDef* getNamespaceDef() const;
- ClassDef *accessorClass() const;
+ virtual ClassDef *getClassDef() const = 0;
+ virtual FileDef *getFileDef() const = 0;
+ virtual NamespaceDef* getNamespaceDef() const = 0;
+ virtual ClassDef *accessorClass() const = 0;
// grabbing the property read/write accessor names
- const char *getReadAccessor() const;
- const char *getWriteAccessor() const;
+ virtual const char *getReadAccessor() const = 0;
+ virtual const char *getWriteAccessor() const = 0;
// querying the grouping definition
- GroupDef *getGroupDef() const;
- Grouping::GroupPri_t getGroupPri() const;
- const char *getGroupFileName() const;
- int getGroupStartLine() const;
- bool getGroupHasDocs() const;
- QCString qualifiedName() const;
- QCString objCMethodName(bool localLink,bool showStatic) const;
+ virtual GroupDef *getGroupDef() const = 0;
+ virtual Grouping::GroupPri_t getGroupPri() const = 0;
+ virtual const char *getGroupFileName() const = 0;
+ virtual int getGroupStartLine() const = 0;
+ virtual bool getGroupHasDocs() const = 0;
+ virtual QCString qualifiedName() const = 0;
+ virtual QCString objCMethodName(bool localLink,bool showStatic) const = 0;
// direct kind info
- Protection protection() const;
- Specifier virtualness(int count=0) const;
- MemberType memberType() const;
- QCString memberTypeName() const;
+ virtual Protection protection() const = 0;
+ virtual Specifier virtualness(int count=0) const = 0;
+ virtual MemberType memberType() const = 0;
+ virtual QCString memberTypeName() const = 0;
// getter methods
- bool isSignal() const;
- bool isSlot() const;
- bool isVariable() const;
- bool isEnumerate() const;
- bool isEnumValue() const;
- bool isTypedef() const;
- bool isSequence() const;
- bool isDictionary() const;
- bool isFunction() const;
- bool isFunctionPtr() const;
- bool isDefine() const;
- bool isFriend() const;
- bool isDCOP() const;
- bool isProperty() const;
- bool isEvent() const;
- bool isRelated() const;
- bool isForeign() const;
- bool isStatic() const;
- bool isInline() const;
- bool isExplicit() const;
- bool isMutable() const;
- bool isGettable() const;
- bool isPrivateGettable() const;
- bool isProtectedGettable() const;
- bool isSettable() const;
- bool isPrivateSettable() const;
- bool isProtectedSettable() const;
- bool isReadable() const;
- bool isWritable() const;
- bool isAddable() const;
- bool isRemovable() const;
- bool isRaisable() const;
- bool isFinal() const;
- bool isAbstract() const;
- bool isOverride() const;
- bool isInitonly() const;
- bool isOptional() const;
- bool isRequired() const;
- bool isNonAtomic() const;
- bool isCopy() const;
- bool isAssign() const;
- bool isRetain() const;
- bool isWeak() const;
- bool isStrong() const;
- bool isUnretained() const;
- bool isNew() const;
- bool isSealed() const;
- bool isImplementation() const;
- bool isExternal() const;
- bool isAlias() const;
- bool isDefault() const;
- bool isDelete() const;
- bool isNoExcept() const;
- bool isAttribute() const; // UNO IDL attribute
- bool isUNOProperty() const; // UNO IDL property
- bool isReadonly() const;
- bool isBound() const;
- bool isConstrained() const;
- bool isTransient() const;
- bool isMaybeVoid() const;
- bool isMaybeDefault() const;
- bool isMaybeAmbiguous() const;
- bool isPublished() const; // UNO IDL published
- bool isTemplateSpecialization() const;
- bool hasDocumentedParams() const;
- bool hasDocumentedReturnType() const;
- bool isObjCMethod() const;
- bool isObjCProperty() const;
- bool isConstructor() const;
- bool isDestructor() const;
- bool hasOneLineInitializer() const;
- bool hasMultiLineInitializer() const;
- bool protectionVisible() const;
- bool showInCallGraph() const;
- bool isStrongEnumValue() const;
- bool livesInsideEnum() const;
- bool isSliceLocal() const;
- bool isConstExpr() const;
+ virtual bool isSignal() const = 0;
+ virtual bool isSlot() const = 0;
+ virtual bool isVariable() const = 0;
+ virtual bool isEnumerate() const = 0;
+ virtual bool isEnumValue() const = 0;
+ virtual bool isTypedef() const = 0;
+ virtual bool isSequence() const = 0;
+ virtual bool isDictionary() const = 0;
+ virtual bool isFunction() const = 0;
+ virtual bool isFunctionPtr() const = 0;
+ virtual bool isDefine() const = 0;
+ virtual bool isFriend() const = 0;
+ virtual bool isDCOP() const = 0;
+ virtual bool isProperty() const = 0;
+ virtual bool isEvent() const = 0;
+ virtual bool isRelated() const = 0;
+ virtual bool isForeign() const = 0;
+ virtual bool isStatic() const = 0;
+ virtual bool isInline() const = 0;
+ virtual bool isExplicit() const = 0;
+ virtual bool isMutable() const = 0;
+ virtual bool isGettable() const = 0;
+ virtual bool isPrivateGettable() const = 0;
+ virtual bool isProtectedGettable() const = 0;
+ virtual bool isSettable() const = 0;
+ virtual bool isPrivateSettable() const = 0;
+ virtual bool isProtectedSettable() const = 0;
+ virtual bool isReadable() const = 0;
+ virtual bool isWritable() const = 0;
+ virtual bool isAddable() const = 0;
+ virtual bool isRemovable() const = 0;
+ virtual bool isRaisable() const = 0;
+ virtual bool isFinal() const = 0;
+ virtual bool isAbstract() const = 0;
+ virtual bool isOverride() const = 0;
+ virtual bool isInitonly() const = 0;
+ virtual bool isOptional() const = 0;
+ virtual bool isRequired() const = 0;
+ virtual bool isNonAtomic() const = 0;
+ virtual bool isCopy() const = 0;
+ virtual bool isAssign() const = 0;
+ virtual bool isRetain() const = 0;
+ virtual bool isWeak() const = 0;
+ virtual bool isStrong() const = 0;
+ virtual bool isUnretained() const = 0;
+ virtual bool isNew() const = 0;
+ virtual bool isSealed() const = 0;
+ virtual bool isImplementation() const = 0;
+ virtual bool isExternal() const = 0;
+ virtual bool isAlias() const = 0;
+ virtual bool isDefault() const = 0;
+ virtual bool isDelete() const = 0;
+ virtual bool isNoExcept() const = 0;
+ virtual bool isAttribute() const = 0; // UNO IDL attribute
+ virtual bool isUNOProperty() const = 0; // UNO IDL property
+ virtual bool isReadonly() const = 0;
+ virtual bool isBound() const = 0;
+ virtual bool isConstrained() const = 0;
+ virtual bool isTransient() const = 0;
+ virtual bool isMaybeVoid() const = 0;
+ virtual bool isMaybeDefault() const = 0;
+ virtual bool isMaybeAmbiguous() const = 0;
+ virtual bool isPublished() const = 0; // UNO IDL published
+ virtual bool isTemplateSpecialization() const = 0;
+ virtual bool hasDocumentedParams() const = 0;
+ virtual bool hasDocumentedReturnType() const = 0;
+ virtual bool isObjCMethod() const = 0;
+ virtual bool isObjCProperty() const = 0;
+ virtual bool isConstructor() const = 0;
+ virtual bool isDestructor() const = 0;
+ virtual bool hasOneLineInitializer() const = 0;
+ virtual bool hasMultiLineInitializer() const = 0;
+ virtual bool showInCallGraph() const = 0;
+ virtual bool isStrongEnumValue() const = 0;
+ virtual bool livesInsideEnum() const = 0;
+ virtual bool isSliceLocal() const = 0;
+ virtual bool isConstExpr() const = 0;
// derived getters
- bool isFriendToHide() const;
- bool isNotFriend() const;
- bool isFunctionOrSignalSlot() const;
- bool isRelatedOrFriend() const;
+ virtual bool isFriendToHide() const = 0;
+ virtual bool isNotFriend() const = 0;
+ virtual bool isFunctionOrSignalSlot() const = 0;
+ virtual bool isRelatedOrFriend() const = 0;
// output info
- bool isLinkableInProject() const;
- bool isLinkable() const;
- bool hasDocumentation() const; // overrides hasDocumentation in definition.h
- //bool hasUserDocumentation() const; // overrides hasUserDocumentation
- bool isDeleted() const;
- bool isBriefSectionVisible() const;
- bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
- bool isDetailedSectionLinkable() const;
- bool isFriendClass() const;
- bool isDocumentedFriendClass() const;
-
- MemberDef *reimplements() const;
- MemberList *reimplementedBy() const;
- bool isReimplementedBy(ClassDef *cd) const;
-
- //int inbodyLine() const;
- //QCString inbodyFile() const;
- //const QCString &inbodyDocumentation() const;
-
- ClassDef *relatedAlso() const;
-
- bool hasDocumentedEnumValues() const;
- MemberDef *getAnonymousEnumType() const;
- bool isDocsForDefinition() const;
- MemberDef *getEnumScope() const;
- MemberList *enumFieldList() const;
- void setEnumBaseType(const QCString &type);
- QCString enumBaseType() const;
-
- bool hasExamples();
- ExampleSDict *getExamples() const;
- bool isPrototype() const;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual bool hasDocumentation() const = 0; // overrides hasDocumentation in definition.h
+ //bool hasUserDocumentation() const = 0; // overrides hasUserDocumentation
+ virtual bool isDeleted() const = 0;
+ virtual bool isBriefSectionVisible() const = 0;
+ virtual bool isDetailedSectionVisible(bool inGroup,bool inFile) const = 0;
+ virtual bool isDetailedSectionLinkable() const = 0;
+ virtual bool isFriendClass() const = 0;
+ virtual bool isDocumentedFriendClass() const = 0;
+
+ virtual MemberDef *reimplements() const = 0;
+ virtual MemberList *reimplementedBy() const = 0;
+ virtual bool isReimplementedBy(ClassDef *cd) const = 0;
+
+ virtual ClassDef *relatedAlso() const = 0;
+
+ virtual bool hasDocumentedEnumValues() const = 0;
+ virtual MemberDef *getAnonymousEnumType() const = 0;
+ virtual bool isDocsForDefinition() const = 0;
+ virtual MemberDef *getEnumScope() const = 0;
+ virtual MemberList *enumFieldList() const = 0;
+ virtual void setEnumBaseType(const QCString &type) = 0;
+ virtual QCString enumBaseType() const = 0;
+
+ virtual bool hasExamples() = 0;
+ virtual ExampleSDict *getExamples() const = 0;
+ virtual bool isPrototype() const = 0;
// argument related members
- ArgumentList *argumentList() const;
- ArgumentList *declArgumentList() const;
- ArgumentList *templateArguments() const;
- QList<ArgumentList> *definitionTemplateParameterLists() const;
+ virtual ArgumentList *argumentList() const = 0;
+ virtual ArgumentList *declArgumentList() const = 0;
+ virtual ArgumentList *templateArguments() const = 0;
+ virtual QList<ArgumentList> *definitionTemplateParameterLists() const = 0;
// member group related members
- int getMemberGroupId() const;
- MemberGroup *getMemberGroup() const;
+ virtual int getMemberGroupId() const = 0;
+ virtual MemberGroup *getMemberGroup() const = 0;
- bool fromAnonymousScope() const;
- bool anonymousDeclShown() const;
- MemberDef *fromAnonymousMember() const;
+ virtual bool fromAnonymousScope() const = 0;
+ virtual bool anonymousDeclShown() const = 0;
+ virtual MemberDef *fromAnonymousMember() const = 0;
// callgraph related members
- bool hasCallGraph() const;
- bool hasCallerGraph() const;
- bool visibleMemberGroup(bool hideNoHeader);
+ virtual bool hasCallGraph() const = 0;
+ virtual bool hasCallerGraph() const = 0;
+ virtual bool visibleMemberGroup(bool hideNoHeader) = 0;
// refrenced related members
- bool hasReferencesRelation() const;
- bool hasReferencedByRelation() const;
+ virtual bool hasReferencesRelation() const = 0;
+ virtual bool hasReferencedByRelation() const = 0;
- MemberDef *templateMaster() const;
- QCString getScopeString() const;
- ClassDef *getClassDefOfAnonymousType();
+ virtual MemberDef *templateMaster() const = 0;
+ virtual QCString getScopeString() const = 0;
+ virtual ClassDef *getClassDefOfAnonymousType() = 0;
// cached typedef functions
- bool isTypedefValCached() const;
- ClassDef *getCachedTypedefVal() const;
- QCString getCachedTypedefTemplSpec() const;
- QCString getCachedResolvedTypedef() const;
+ virtual bool isTypedefValCached() const = 0;
+ virtual ClassDef *getCachedTypedefVal() const = 0;
+ virtual QCString getCachedTypedefTemplSpec() const = 0;
+ virtual QCString getCachedResolvedTypedef() const = 0;
- MemberDef *memberDefinition() const;
- MemberDef *memberDeclaration() const;
- MemberDef *inheritsDocsFrom() const;
- MemberDef *getGroupAlias() const;
+ virtual MemberDef *memberDefinition() const = 0;
+ virtual MemberDef *memberDeclaration() const = 0;
+ virtual MemberDef *inheritsDocsFrom() const = 0;
+ virtual MemberDef *getGroupAlias() const = 0;
- ClassDef *category() const;
- MemberDef *categoryRelation() const;
+ virtual ClassDef *category() const = 0;
+ virtual MemberDef *categoryRelation() const = 0;
- QCString displayName(bool=TRUE) const;
- QCString getDeclType() const;
- void getLabels(QStrList &sl,Definition *container) const;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual QCString getDeclType() const = 0;
+ virtual void getLabels(QStrList &sl,Definition *container) const = 0;
- const ArgumentList *typeConstraints() const;
+ virtual const ArgumentList *typeConstraints() const = 0;
// overrules
- QCString documentation() const;
- QCString briefDescription(bool abbr=FALSE) const;
- QCString fieldType() const;
- bool isReference() const;
+ virtual QCString documentation() const = 0;
+ virtual QCString briefDescription(bool abbr=FALSE) const = 0;
+ virtual QCString fieldType() const = 0;
+ virtual bool isReference() const = 0;
- QCString getDeclFileName() const;
- int getDeclLine() const;
- int getDeclColumn() const;
+ virtual QCString getDeclFileName() const = 0;
+ virtual int getDeclLine() const = 0;
+ virtual int getDeclColumn() const = 0;
//-----------------------------------------------------------------------------------
// ---- setters -----
//-----------------------------------------------------------------------------------
// set functions
- void setMemberType(MemberType t);
- void setDefinition(const char *d);
- void setFileDef(FileDef *fd);
- void setAnchor();
- void setProtection(Protection p);
- void setMemberSpecifiers(uint64 s);
- void mergeMemberSpecifiers(uint64 s);
- void setInitializer(const char *i);
- void setBitfields(const char *s);
- void setMaxInitLines(int lines);
- void setMemberClass(ClassDef *cd);
- void setSectionList(Definition *d,MemberList *sl);
- void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
+ virtual void setMemberType(MemberType t) = 0;
+ virtual void setDefinition(const char *d) = 0;
+ virtual void setFileDef(FileDef *fd) = 0;
+ virtual void setAnchor() = 0;
+ virtual void setProtection(Protection p) = 0;
+ virtual void setMemberSpecifiers(uint64 s) = 0;
+ virtual void mergeMemberSpecifiers(uint64 s) = 0;
+ virtual void setInitializer(const char *i) = 0;
+ virtual void setBitfields(const char *s) = 0;
+ virtual void setMaxInitLines(int lines) = 0;
+ virtual void setMemberClass(ClassDef *cd) = 0;
+ virtual void setSectionList(Definition *d,MemberList *sl) = 0;
+ virtual void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,bool hasDocs,
- MemberDef *member=0);
- void setReadAccessor(const char *r);
- void setWriteAccessor(const char *w);
- void setTemplateSpecialization(bool b);
+ MemberDef *member=0) = 0;
+ virtual void setReadAccessor(const char *r) = 0;
+ virtual void setWriteAccessor(const char *w) = 0;
+ virtual void setTemplateSpecialization(bool b) = 0;
- void makeRelated();
- void makeForeign();
- void setHasDocumentedParams(bool b);
- void setHasDocumentedReturnType(bool b);
- void setInheritsDocsFrom(MemberDef *md);
- void setTagInfo(TagInfo *i);
- void setArgsString(const char *as);
+ virtual void makeRelated() = 0;
+ virtual void makeForeign() = 0;
+ virtual void setHasDocumentedParams(bool b) = 0;
+ virtual void setHasDocumentedReturnType(bool b) = 0;
+ virtual void setInheritsDocsFrom(MemberDef *md) = 0;
+ virtual void setTagInfo(TagInfo *i) = 0;
+ virtual void setArgsString(const char *as) = 0;
// relation to other members
- void setReimplements(MemberDef *md);
- void insertReimplementedBy(MemberDef *md);
-
- // in-body documentation
- //void setInbodyDocumentation(const char *docs,const char *file,int line);
+ virtual void setReimplements(MemberDef *md) = 0;
+ virtual void insertReimplementedBy(MemberDef *md) = 0;
- void setRelatedAlso(ClassDef *cd);
+ virtual void setRelatedAlso(ClassDef *cd) = 0;
// enumeration specific members
- void insertEnumField(MemberDef *md);
- void setEnumScope(MemberDef *md,bool livesInsideEnum=FALSE);
- void setEnumClassScope(ClassDef *cd);
- void setDocumentedEnumValues(bool value);
- void setAnonymousEnumType(MemberDef *md);
+ virtual void insertEnumField(MemberDef *md) = 0;
+ virtual void setEnumScope(MemberDef *md,bool livesInsideEnum=FALSE) = 0;
+ virtual void setEnumClassScope(ClassDef *cd) = 0;
+ virtual void setDocumentedEnumValues(bool value) = 0;
+ virtual void setAnonymousEnumType(MemberDef *md) = 0;
// example related members
- bool addExample(const char *anchor,const char *name,const char *file);
+ virtual bool addExample(const char *anchor,const char *name,const char *file) = 0;
// prototype related members
- void setPrototype(bool p,const QCString &df,int line, int column);
- void setExplicitExternal(bool b,const QCString &df,int line,int column);
- void setDeclFile(const QCString &df,int line,int column);
+ virtual void setPrototype(bool p,const QCString &df,int line, int column) = 0;
+ virtual void setExplicitExternal(bool b,const QCString &df,int line,int column) = 0;
+ virtual void setDeclFile(const QCString &df,int line,int column) = 0;
// argument related members
- void setArgumentList(ArgumentList *al);
- void setDeclArgumentList(ArgumentList *al);
- void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
- void setTypeConstraints(ArgumentList *al);
- void setType(const char *t);
- void setAccessorType(ClassDef *cd,const char *t);
+ virtual void setArgumentList(ArgumentList *al) = 0;
+ virtual void setDeclArgumentList(ArgumentList *al) = 0;
+ virtual void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) = 0;
+ virtual void setTypeConstraints(ArgumentList *al) = 0;
+ virtual void setType(const char *t) = 0;
+ virtual void setAccessorType(ClassDef *cd,const char *t) = 0;
// namespace related members
- void setNamespace(NamespaceDef *nd);
+ virtual void setNamespace(NamespaceDef *nd) = 0;
// member group related members
- void setMemberGroup(MemberGroup *grp);
- void setMemberGroupId(int id);
- void makeImplementationDetail();
+ virtual void setMemberGroup(MemberGroup *grp) = 0;
+ virtual void setMemberGroupId(int id) = 0;
+ virtual void makeImplementationDetail() = 0;
// anonymous scope members
- void setFromAnonymousScope(bool b);
- void setFromAnonymousMember(MemberDef *m);
+ virtual void setFromAnonymousScope(bool b) = 0;
+ virtual void setFromAnonymousMember(MemberDef *m) = 0;
- void enableCallGraph(bool e);
- void enableCallerGraph(bool e);
+ virtual void enableCallGraph(bool e) = 0;
+ virtual void enableCallerGraph(bool e) = 0;
- void enableReferencedByRelation(bool e);
- void enableReferencesRelation(bool e);
+ virtual void enableReferencedByRelation(bool e) = 0;
+ virtual void enableReferencesRelation(bool e) = 0;
- void setTemplateMaster(MemberDef *mt);
- void addListReference(Definition *d);
- void setDocsForDefinition(bool b);
- void setGroupAlias(MemberDef *md);
+ virtual void setTemplateMaster(MemberDef *mt) = 0;
+ virtual void addListReference(Definition *d) = 0;
+ virtual void setDocsForDefinition(bool b) = 0;
+ virtual void setGroupAlias(MemberDef *md) = 0;
- void cacheTypedefVal(ClassDef *val,const QCString &templSpec,const QCString &resolvedType);
- void invalidateTypedefValCache();
+ virtual void cacheTypedefVal(ClassDef *val,const QCString &templSpec,const QCString &resolvedType) = 0;
+ virtual void invalidateTypedefValCache() = 0;
- void invalidateCachedArgumentTypes();
+ virtual void invalidateCachedArgumentTypes() = 0;
// declaration <-> definition relation
- void setMemberDefinition(MemberDef *md);
- void setMemberDeclaration(MemberDef *md);
+ virtual void setMemberDefinition(MemberDef *md) = 0;
+ virtual void setMemberDeclaration(MemberDef *md) = 0;
- void setAnonymousUsed();
- void copyArgumentNames(MemberDef *bmd);
+ virtual void setAnonymousUsed() = 0;
+ virtual void copyArgumentNames(MemberDef *bmd) = 0;
- void setCategory(ClassDef *);
- void setCategoryRelation(MemberDef *);
+ virtual void setCategory(ClassDef *) = 0;
+ virtual void setCategoryRelation(MemberDef *) = 0;
- void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
- void setBriefDescription(const char *b,const char *briefFile,int briefLine);
- void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine);
+ virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE) = 0;
+ virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine) = 0;
+ virtual void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine) = 0;
- void setHidden(bool b);
+ virtual void setHidden(bool b) = 0;
//-----------------------------------------------------------------------------------
// --- actions ----
//-----------------------------------------------------------------------------------
// output generation
- void writeDeclaration(OutputList &ol,
+ virtual void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0);
- void writeDocumentation(MemberList *ml,int memCount,int memTotal,OutputList &ol,
+ bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0) = 0;
+ virtual void writeDocumentation(MemberList *ml,int memCount,int memTotal,OutputList &ol,
const char *scopeName,Definition *container,
bool inGroup,bool showEnumValues=FALSE,bool
- showInline=FALSE);
- void writeMemberDocSimple(OutputList &ol,Definition *container);
- void writeEnumDeclaration(OutputList &typeDecl,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
- void writeTagFile(FTextStream &);
- void warnIfUndocumented();
- void warnIfUndocumentedParams();
-
- MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
- ArgumentList *actualArgs);
-
- void findSectionsInDocumentation();
-
- bool visited;
-
- protected:
- void flushToDisk() const;
- void loadFromDisk() const;
- private:
- void lock() const;
- void unlock() const;
- void saveToDisk() const;
- void makeResident() const;
- void _computeLinkableInProject();
- void _computeIsConstructor();
- void _computeIsDestructor();
- void _writeGroupInclude(OutputList &ol,bool inGroup);
- void _writeCallGraph(OutputList &ol);
- void _writeCallerGraph(OutputList &ol);
- void _writeReimplements(OutputList &ol);
- void _writeReimplementedBy(OutputList &ol);
- void _writeExamples(OutputList &ol);
- void _writeTypeConstraints(OutputList &ol);
- void _writeEnumValues(OutputList &ol,Definition *container,
- const QCString &cfname,const QCString &ciname,
- const QCString &cname);
- void _writeCategoryRelation(OutputList &ol);
- void _writeTagData(const DefType);
- void _addToSearchIndex();
-
- static int s_indentLevel;
-
- // disable copying of member defs
- MemberDef(const MemberDef &);
- MemberDef &operator=(const MemberDef &);
-
- void writeLink(OutputList &ol,
+ showInline=FALSE) = 0;
+ virtual void writeMemberDocSimple(OutputList &ol,Definition *container) = 0;
+ virtual void writeEnumDeclaration(OutputList &typeDecl,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd) = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+ virtual void warnIfUndocumented() = 0;
+ virtual void warnIfUndocumentedParams() = 0;
+
+ virtual MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
+ ArgumentList *actualArgs) = 0;
+
+ virtual void findSectionsInDocumentation() = 0;
+ virtual void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool onlyText=FALSE);
+ bool onlyText=FALSE) = 0;
+ virtual void addToSearchIndex() = 0;
- MemberDefImpl *m_impl;
- uchar m_isLinkableCached; // 0 = not cached, 1=FALSE, 2=TRUE
- uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
- uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
};
+/** Factory method to create a new instance of a MemberDef */
+MemberDef *createMemberDef(const char *defFileName,int defLine,int defColumn,
+ const char *type,const char *name,const char *args,
+ const char *excp,Protection prot,Specifier virt,bool stat,
+ Relationship related,MemberType t,const ArgumentList *tal,
+ const ArgumentList *al,const char *metaData);
+
void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef);
#endif
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 8d88863..418b24a 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -767,7 +767,7 @@ void MemberList::writeSimpleDocumentation(OutputList &ol,
ClassDef *cd = 0;
if (container && container->definitionType()==Definition::TypeClass)
{
- cd = (ClassDef*)container;
+ cd = dynamic_cast<ClassDef*>(container);
}
ol.startMemberDocSimple(cd && cd->isJavaEnum());
MemberListIterator mli(*this);
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index bc8bb47..0740512 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -30,14 +30,131 @@
#include "layout.h"
#include "membergroup.h"
#include "config.h"
+#include "definitionimpl.h"
//------------------------------------------------------------------
-NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
+class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef
+{
+ public:
+ NamespaceDefImpl(const char *defFileName,int defLine,int defColumn,
+ const char *name,const char *ref=0,
+ const char *refFile=0,const char*type=0,
+ bool isPublished=false);
+ virtual ~NamespaceDefImpl();
+ virtual DefType definitionType() const { return TypeNamespace; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual void insertUsedFile(FileDef *fd);
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeMemberPages(OutputList &ol);
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
+ virtual void writeTagFile(FTextStream &);
+ virtual void insertClass(ClassDef *cd);
+ virtual void insertNamespace(NamespaceDef *nd);
+ virtual void insertMember(MemberDef *md);
+ virtual void computeAnchors();
+ virtual int countMembers();
+ virtual void addUsingDirective(NamespaceDef *nd);
+ virtual NamespaceSDict *getUsedNamespaces() const;
+ virtual void addUsingDeclaration(Definition *def);
+ virtual SDict<Definition> *getUsedClasses() const { return usingDeclList; }
+ virtual void combineUsingRelations();
+ virtual QCString displayName(bool=TRUE) const;
+ virtual QCString localName() const;
+ virtual void setInline(bool isInline) { m_inline = isInline; }
+ virtual bool isConstantGroup() const { return CONSTANT_GROUP == m_type; }
+ virtual bool isModule() const { return MODULE == m_type; }
+ virtual bool isLibrary() const { return LIBRARY == m_type; }
+ virtual bool isInline() const { return m_inline; }
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual bool hasDetailedDescription() const;
+ virtual void addMembersToMemberGroup();
+ virtual void distributeMemberGroupDocumentation();
+ virtual void findSectionsInDocumentation();
+ virtual void sortMemberLists();
+ virtual Definition *findInnerCompound(const char *name) const;
+ virtual void addInnerCompound(Definition *d);
+ virtual void addListReferences();
+ virtual void setFileName(const QCString &fn);
+ virtual bool subGrouping() const { return m_subGrouping; }
+ virtual MemberList *getMemberList(MemberListType lt) const;
+ virtual const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+ virtual MemberDef *getMemberByName(const QCString &) const;
+ virtual MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
+ virtual ClassSDict *getClassSDict() const { return classSDict; }
+ virtual ClassSDict *getInterfaceSDict() const { return interfaceSDict; }
+ virtual ClassSDict *getStructSDict() const { return structSDict; }
+ virtual ClassSDict *getExceptionSDict() const { return exceptionSDict; }
+ virtual NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
+
+ virtual QCString title() const;
+ virtual QCString compoundTypeString() const;
+
+ virtual void setMetaData(const QCString &m);
+ void setVisited(bool v) { m_visited = v; }
+ bool isVisited() const { return m_visited; }
+
+ private:
+ bool m_visited;
+ MemberList *createMemberList(MemberListType lt);
+ void addMemberToList(MemberListType lt,MemberDef *md);
+ void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d);
+ void writeInlineClasses(OutputList &ol);
+ void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
+ bool isConstantGroup=false);
+ void writeMemberGroups(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeSummaryLinks(OutputList &ol);
+ void addNamespaceAttributes(OutputList &ol);
+ void writeClassesToTagFile(FTextStream &,ClassSDict *d);
+
+ QCString fileName;
+ FileList files;
+
+ NamespaceSDict *usingDirList;
+ SDict<Definition> *usingDeclList;
+ SDict<Definition> *m_innerCompounds;
+
+ MemberSDict *m_allMembersDict;
+ QList<MemberList> m_memberLists;
+ MemberGroupSDict *memberGroupSDict;
+ ClassSDict *classSDict;
+ ClassSDict *interfaceSDict;
+ ClassSDict *structSDict;
+ ClassSDict *exceptionSDict;
+ NamespaceSDict *namespaceSDict;
+ bool m_subGrouping;
+ enum { NAMESPACE, MODULE, CONSTANT_GROUP, LIBRARY } m_type;
+ bool m_isPublished;
+ QCString metaData;
+ bool m_inline;
+};
+
+NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColumn,
+ const char *name,const char *ref,
+ const char *refFile,const char*type,
+ bool isPublished)
+{
+ return new NamespaceDefImpl(defFileName,defLine,defColumn,name,ref,refFile,type,isPublished);
+}
+
+//------------------------------------------------------------------
+
+NamespaceDefImpl::NamespaceDefImpl(const char *df,int dl,int dc,
const char *name,const char *lref,
const char *fName, const char*type,
bool isPublished) :
- Definition(df,dl,dc,name)
+ DefinitionImpl(df,dl,dc,name)
,m_isPublished(isPublished)
{
if (fName)
@@ -67,7 +184,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
setReference(lref);
memberGroupSDict = new MemberGroupSDict;
memberGroupSDict->setAutoDelete(TRUE);
- visited=FALSE;
+ m_visited=FALSE;
m_subGrouping=Config_getBool(SUBGROUPING);
if (type && !strcmp("module", type))
{
@@ -87,7 +204,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
}
}
-NamespaceDef::~NamespaceDef()
+NamespaceDefImpl::~NamespaceDefImpl()
{
delete classSDict;
delete interfaceSDict;
@@ -101,7 +218,7 @@ NamespaceDef::~NamespaceDef()
delete m_allMembersDict;
}
-void NamespaceDef::setFileName(const QCString &fn)
+void NamespaceDefImpl::setFileName(const QCString &fn)
{
if (isReference())
{
@@ -113,7 +230,7 @@ void NamespaceDef::setFileName(const QCString &fn)
}
}
-void NamespaceDef::distributeMemberGroupDocumentation()
+void NamespaceDefImpl::distributeMemberGroupDocumentation()
{
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
@@ -123,7 +240,7 @@ void NamespaceDef::distributeMemberGroupDocumentation()
}
}
-void NamespaceDef::findSectionsInDocumentation()
+void NamespaceDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
@@ -143,7 +260,7 @@ void NamespaceDef::findSectionsInDocumentation()
}
}
-void NamespaceDef::insertUsedFile(FileDef *fd)
+void NamespaceDefImpl::insertUsedFile(FileDef *fd)
{
if (fd==0) return;
if (files.find(fd)==-1)
@@ -155,20 +272,20 @@ void NamespaceDef::insertUsedFile(FileDef *fd)
}
}
-void NamespaceDef::addInnerCompound(Definition *d)
+void NamespaceDefImpl::addInnerCompound(Definition *d)
{
m_innerCompounds->append(d->localName(),d);
if (d->definitionType()==Definition::TypeNamespace)
{
- insertNamespace((NamespaceDef *)d);
+ insertNamespace(dynamic_cast<NamespaceDef *>(d));
}
else if (d->definitionType()==Definition::TypeClass)
{
- insertClass((ClassDef *)d);
+ insertClass(dynamic_cast<ClassDef *>(d));
}
}
-void NamespaceDef::insertClass(ClassDef *cd)
+void NamespaceDefImpl::insertClass(ClassDef *cd)
{
ClassSDict *d = classSDict;
@@ -201,7 +318,7 @@ void NamespaceDef::insertClass(ClassDef *cd)
}
}
-void NamespaceDef::insertNamespace(NamespaceDef *nd)
+void NamespaceDefImpl::insertNamespace(NamespaceDef *nd)
{
if (namespaceSDict->find(nd->name())==0)
{
@@ -213,7 +330,7 @@ void NamespaceDef::insertNamespace(NamespaceDef *nd)
}
-void NamespaceDef::addMembersToMemberGroup()
+void NamespaceDefImpl::addMembersToMemberGroup()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -241,7 +358,7 @@ void NamespaceDef::addMembersToMemberGroup()
}
}
-void NamespaceDef::insertMember(MemberDef *md)
+void NamespaceDefImpl::insertMember(MemberDef *md)
{
if (md->isHidden()) return;
MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
@@ -292,7 +409,7 @@ void NamespaceDef::insertMember(MemberDef *md)
addMemberToList(MemberListType_docDefineMembers,md);
break;
default:
- err("NamespaceDef::insertMembers(): "
+ err("NamespaceDefImpl::insertMembers(): "
"member `%s' with class scope `%s' inserted in namespace scope `%s'!\n",
md->name().data(),
md->getClassDef() ? md->getClassDef()->name().data() : "",
@@ -300,20 +417,20 @@ void NamespaceDef::insertMember(MemberDef *md)
}
}
-void NamespaceDef::computeAnchors()
+void NamespaceDefImpl::computeAnchors()
{
MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
if (allMemberList) setAnchors(allMemberList);
}
-bool NamespaceDef::hasDetailedDescription() const
+bool NamespaceDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
return ((!briefDescription().isEmpty() && repeatBrief) ||
!documentation().isEmpty());
}
-void NamespaceDef::writeTagFile(FTextStream &tagFile)
+void NamespaceDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <compound kind=\"namespace\">" << endl;
tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
@@ -401,7 +518,7 @@ void NamespaceDef::writeTagFile(FTextStream &tagFile)
tagFile << " </compound>" << endl;
}
-void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title)
+void NamespaceDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if (hasDetailedDescription())
{
@@ -443,7 +560,7 @@ void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title
}
}
-void NamespaceDef::writeBriefDescription(OutputList &ol)
+void NamespaceDefImpl::writeBriefDescription(OutputList &ol)
{
if (hasBriefDescription())
{
@@ -501,17 +618,17 @@ void NamespaceDef::writeBriefDescription(OutputList &ol)
ol.writeSynopsis();
}
-void NamespaceDef::startMemberDeclarations(OutputList &ol)
+void NamespaceDefImpl::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
-void NamespaceDef::endMemberDeclarations(OutputList &ol)
+void NamespaceDefImpl::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
-void NamespaceDef::startMemberDocumentation(OutputList &ol)
+void NamespaceDefImpl::startMemberDocumentation(OutputList &ol)
{
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
@@ -520,7 +637,7 @@ void NamespaceDef::startMemberDocumentation(OutputList &ol)
}
}
-void NamespaceDef::endMemberDocumentation(OutputList &ol)
+void NamespaceDefImpl::endMemberDocumentation(OutputList &ol)
{
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
@@ -529,23 +646,23 @@ void NamespaceDef::endMemberDocumentation(OutputList &ol)
}
}
-void NamespaceDef::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d)
+void NamespaceDefImpl::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d)
{
if (d) d->writeDeclaration(ol,0,title,TRUE);
}
-void NamespaceDef::writeInlineClasses(OutputList &ol)
+void NamespaceDefImpl::writeInlineClasses(OutputList &ol)
{
if (classSDict) classSDict->writeDocumentation(ol,this);
}
-void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
+void NamespaceDefImpl::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
bool const isConstantGroup)
{
if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup,TRUE);
}
-void NamespaceDef::writeMemberGroups(OutputList &ol)
+void NamespaceDefImpl::writeMemberGroups(OutputList &ol)
{
/* write user defined member groups */
if (memberGroupSDict)
@@ -564,7 +681,7 @@ void NamespaceDef::writeMemberGroups(OutputList &ol)
}
}
-void NamespaceDef::writeAuthorSection(OutputList &ol)
+void NamespaceDefImpl::writeAuthorSection(OutputList &ol)
{
// write Author section (Man only)
ol.pushGeneratorState();
@@ -576,7 +693,7 @@ void NamespaceDef::writeAuthorSection(OutputList &ol)
ol.popGeneratorState();
}
-void NamespaceDef::writeSummaryLinks(OutputList &ol)
+void NamespaceDefImpl::writeSummaryLinks(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -640,7 +757,7 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
ol.popGeneratorState();
}
-void NamespaceDef::addNamespaceAttributes(OutputList &ol)
+void NamespaceDefImpl::addNamespaceAttributes(OutputList &ol)
{
// UNO IDL constant groups may be published
if (getLanguage()==SrcLangExt_IDL && isConstantGroup() && m_isPublished)
@@ -654,7 +771,7 @@ void NamespaceDef::addNamespaceAttributes(OutputList &ol)
}
}
-void NamespaceDef::writeClassesToTagFile(FTextStream &tagFile,ClassSDict *d)
+void NamespaceDefImpl::writeClassesToTagFile(FTextStream &tagFile,ClassSDict *d)
{
SDict<ClassDef>::Iterator ci(*d);
ClassDef *cd;
@@ -668,7 +785,7 @@ void NamespaceDef::writeClassesToTagFile(FTextStream &tagFile,ClassSDict *d)
}
}
-void NamespaceDef::writeDocumentation(OutputList &ol)
+void NamespaceDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
//static bool outputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
@@ -838,7 +955,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
}
}
-void NamespaceDef::writeMemberPages(OutputList &ol)
+void NamespaceDefImpl::writeMemberPages(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -855,7 +972,7 @@ void NamespaceDef::writeMemberPages(OutputList &ol)
ol.popGeneratorState();
}
-void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
+void NamespaceDefImpl::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
{
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
@@ -898,7 +1015,7 @@ void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) co
ol.writeString(" </div>\n");
}
-int NamespaceDef::countMembers()
+int NamespaceDefImpl::countMembers()
{
MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
if (allMemberList) allMemberList->countDocMembers();
@@ -906,7 +1023,7 @@ int NamespaceDef::countMembers()
classSDict->count() + interfaceSDict->count() + structSDict->count() + exceptionSDict->count();
}
-void NamespaceDef::addUsingDirective(NamespaceDef *nd)
+void NamespaceDefImpl::addUsingDirective(NamespaceDef *nd)
{
if (usingDirList==0)
{
@@ -916,16 +1033,16 @@ void NamespaceDef::addUsingDirective(NamespaceDef *nd)
{
usingDirList->append(nd->qualifiedName(),nd);
}
- //printf("%p: NamespaceDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
+ //printf("%p: NamespaceDefImpl::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
}
-NamespaceSDict *NamespaceDef::getUsedNamespaces() const
+NamespaceSDict *NamespaceDefImpl::getUsedNamespaces() const
{
- //printf("%p: NamespaceDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
+ //printf("%p: NamespaceDefImpl::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
return usingDirList;
}
-void NamespaceDef::addUsingDeclaration(Definition *d)
+void NamespaceDefImpl::addUsingDeclaration(Definition *d)
{
if (usingDeclList==0)
{
@@ -937,12 +1054,12 @@ void NamespaceDef::addUsingDeclaration(Definition *d)
}
}
-QCString NamespaceDef::getOutputFileBase() const
+QCString NamespaceDefImpl::getOutputFileBase() const
{
return fileName;
}
-Definition *NamespaceDef::findInnerCompound(const char *n) const
+Definition *NamespaceDefImpl::findInnerCompound(const char *n) const
{
if (n==0) return 0;
Definition *d = m_innerCompounds->find(n);
@@ -960,7 +1077,7 @@ Definition *NamespaceDef::findInnerCompound(const char *n) const
return d;
}
-void NamespaceDef::addListReferences()
+void NamespaceDefImpl::addListReferences()
{
//bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
{
@@ -992,7 +1109,7 @@ void NamespaceDef::addListReferences()
}
}
-QCString NamespaceDef::displayName(bool includeScope) const
+QCString NamespaceDefImpl::displayName(bool includeScope) const
{
QCString result=includeScope ? name() : localName();
SrcLangExt lang = getLanguage();
@@ -1001,11 +1118,11 @@ QCString NamespaceDef::displayName(bool includeScope) const
{
result = substitute(result,"::",sep);
}
- //printf("NamespaceDef::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang);
+ //printf("NamespaceDefImpl::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang);
return result;
}
-QCString NamespaceDef::localName() const
+QCString NamespaceDefImpl::localName() const
{
QCString result=name();
int i=result.findRev("::");
@@ -1016,10 +1133,10 @@ QCString NamespaceDef::localName() const
return result;
}
-void NamespaceDef::combineUsingRelations()
+void NamespaceDefImpl::combineUsingRelations()
{
- if (visited) return; // already done
- visited=TRUE;
+ if (m_visited) return; // already done
+ m_visited=TRUE;
if (usingDirList)
{
NamespaceSDict::Iterator nli(*usingDirList);
@@ -1152,7 +1269,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
ol.endMemberList();
}
-MemberList *NamespaceDef::createMemberList(MemberListType lt)
+MemberList *NamespaceDefImpl::createMemberList(MemberListType lt)
{
m_memberLists.setAutoDelete(TRUE);
QListIterator<MemberList> mli(m_memberLists);
@@ -1170,7 +1287,7 @@ MemberList *NamespaceDef::createMemberList(MemberListType lt)
return ml;
}
-void NamespaceDef::addMemberToList(MemberListType lt,MemberDef *md)
+void NamespaceDefImpl::addMemberToList(MemberListType lt,MemberDef *md)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
@@ -1190,7 +1307,7 @@ void NamespaceDef::addMemberToList(MemberListType lt,MemberDef *md)
if (ml->listType()&MemberListType_declarationLists) md->setSectionList(this,ml);
}
-void NamespaceDef::sortMemberLists()
+void NamespaceDefImpl::sortMemberLists()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1220,7 +1337,7 @@ void NamespaceDef::sortMemberLists()
}
}
-MemberList *NamespaceDef::getMemberList(MemberListType lt) const
+MemberList *NamespaceDefImpl::getMemberList(MemberListType lt) const
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1234,20 +1351,20 @@ MemberList *NamespaceDef::getMemberList(MemberListType lt) const
return 0;
}
-void NamespaceDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
+void NamespaceDefImpl::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0);
}
-void NamespaceDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
+void NamespaceDefImpl::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDocumentation(ol,displayName(),this,title);
}
-bool NamespaceDef::isLinkableInProject() const
+bool NamespaceDefImpl::isLinkableInProject() const
{
int i = name().findRev("::");
if (i==-1) i=0; else i+=2;
@@ -1265,12 +1382,12 @@ bool NamespaceDef::isLinkableInProject() const
!isArtificial(); // or artificial
}
-bool NamespaceDef::isLinkable() const
+bool NamespaceDefImpl::isLinkable() const
{
return isLinkableInProject() || isReference();
}
-MemberDef * NamespaceDef::getMemberByName(const QCString &n) const
+MemberDef * NamespaceDefImpl::getMemberByName(const QCString &n) const
{
MemberDef *md = 0;
if (m_allMembersDict && !n.isEmpty())
@@ -1281,7 +1398,7 @@ MemberDef * NamespaceDef::getMemberByName(const QCString &n) const
return md;
}
-QCString NamespaceDef::title() const
+QCString NamespaceDefImpl::title() const
{
SrcLangExt lang = getLanguage();
QCString pageTitle;
@@ -1306,7 +1423,7 @@ QCString NamespaceDef::title() const
return pageTitle;
}
-QCString NamespaceDef::compoundTypeString() const
+QCString NamespaceDefImpl::compoundTypeString() const
{
SrcLangExt lang = getLanguage();
if (lang==SrcLangExt_Java)
@@ -1343,7 +1460,7 @@ QCString NamespaceDef::compoundTypeString() const
return "";
}
-void NamespaceDef::setMetaData(const QCString &m)
+void NamespaceDefImpl::setMetaData(const QCString &m)
{
metaData = m;
}
diff --git a/src/namespacedef.h b/src/namespacedef.h
index 6f406d8..bfa8c42 100644
--- a/src/namespacedef.h
+++ b/src/namespacedef.h
@@ -26,142 +26,99 @@
class MemberList;
class ClassDef;
-class ClassList;
class OutputList;
class ClassSDict;
class MemberDef;
-class NamespaceList;
class MemberGroupSDict;
class NamespaceSDict;
class FTextStream;
-/** A model of a namespace symbol. */
-class NamespaceDef : public Definition
+/** An abstract interface of a namespace symbol. */
+class NamespaceDef : virtual public Definition
{
public:
- NamespaceDef(const char *defFileName,int defLine,int defColumn,
- const char *name,const char *ref=0,
- const char *refFile=0,const char*type=0,
- bool isPublished=false);
- ~NamespaceDef();
- DefType definitionType() const { return TypeNamespace; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- void insertUsedFile(FileDef *fd);
-
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
- void writeTagFile(FTextStream &);
-
- void insertClass(ClassDef *cd);
- void insertNamespace(NamespaceDef *nd);
- void insertMember(MemberDef *md);
-
- void computeAnchors();
- int countMembers();
- void addUsingDirective(NamespaceDef *nd);
- NamespaceSDict *getUsedNamespaces() const;
- void addUsingDeclaration(Definition *def);
- SDict<Definition> *getUsedClasses() const { return usingDeclList; }
- void combineUsingRelations();
- QCString displayName(bool=TRUE) const;
- QCString localName() const;
- void setInline(bool isInline) { m_inline = isInline; }
-
- bool isConstantGroup() const { return CONSTANT_GROUP == m_type; }
- bool isModule() const { return MODULE == m_type; }
- bool isLibrary() const { return LIBRARY == m_type; }
- bool isInline() const { return m_inline; }
-
- bool isLinkableInProject() const;
- bool isLinkable() const;
- bool hasDetailedDescription() const;
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
- void sortMemberLists();
-
- virtual Definition *findInnerCompound(const char *name) const;
- void addInnerCompound(Definition *d);
- void addListReferences();
- void setFileName(const QCString &fn);
-
- bool subGrouping() const { return m_subGrouping; }
-
- MemberList *getMemberList(MemberListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
- MemberDef *getMemberByName(const QCString &) const;
+ virtual ~NamespaceDef() {}
+ virtual DefType definitionType() const = 0;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual void insertUsedFile(FileDef *fd) = 0;
+
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeMemberPages(OutputList &ol) = 0;
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+
+ virtual void insertClass(ClassDef *cd) = 0;
+ virtual void insertNamespace(NamespaceDef *nd) = 0;
+ virtual void insertMember(MemberDef *md) = 0;
+
+ virtual void computeAnchors() = 0;
+ virtual int countMembers() = 0;
+ virtual void addUsingDirective(NamespaceDef *nd) = 0;
+ virtual NamespaceSDict *getUsedNamespaces() const = 0;
+ virtual void addUsingDeclaration(Definition *def) = 0;
+ virtual SDict<Definition> *getUsedClasses() const = 0;
+ virtual void combineUsingRelations() = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual QCString localName() const = 0;
+ virtual void setInline(bool isInline) = 0;
+
+ virtual bool isConstantGroup() const = 0;
+ virtual bool isModule() const = 0;
+ virtual bool isLibrary() const = 0;
+ virtual bool isInline() const = 0;
+
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual bool hasDetailedDescription() const = 0;
+ virtual void addMembersToMemberGroup() = 0;
+ virtual void distributeMemberGroupDocumentation() = 0;
+ virtual void findSectionsInDocumentation() = 0;
+ virtual void sortMemberLists() = 0;
+
+ virtual Definition *findInnerCompound(const char *name) const = 0;
+ virtual void addInnerCompound(Definition *d) = 0;
+ virtual void addListReferences() = 0;
+ virtual void setFileName(const QCString &fn) = 0;
+
+ virtual bool subGrouping() const = 0;
+
+ virtual MemberList *getMemberList(MemberListType lt) const = 0;
+ virtual const QList<MemberList> &getMemberLists() const = 0;
+ virtual MemberDef *getMemberByName(const QCString &) const = 0;
/*! Returns the user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
+ virtual MemberGroupSDict *getMemberGroupSDict() const = 0;
/*! Returns the classes contained in this namespace */
- ClassSDict *getClassSDict() const { return classSDict; }
+ virtual ClassSDict *getClassSDict() const = 0;
/*! Returns the Slice interfaces contained in this namespace */
- ClassSDict *getInterfaceSDict() const { return interfaceSDict; }
+ virtual ClassSDict *getInterfaceSDict() const = 0;
/*! Returns the Slice structs contained in this namespace */
- ClassSDict *getStructSDict() const { return structSDict; }
+ virtual ClassSDict *getStructSDict() const = 0;
/*! Returns the Slice exceptions contained in this namespace */
- ClassSDict *getExceptionSDict() const { return exceptionSDict; }
+ virtual ClassSDict *getExceptionSDict() const = 0;
/*! Returns the namespaces contained in this namespace */
- NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
-
-
- QCString title() const;
- QCString compoundTypeString() const;
-
- void setMetaData(const QCString &m);
+ virtual NamespaceSDict *getNamespaceSDict() const = 0;
- bool visited;
+ virtual QCString title() const = 0;
+ virtual QCString compoundTypeString() const = 0;
- private:
- MemberList *createMemberList(MemberListType lt);
- void addMemberToList(MemberListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d);
- void writeInlineClasses(OutputList &ol);
- void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
- bool isConstantGroup=false);
- void writeMemberGroups(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeSummaryLinks(OutputList &ol);
- void addNamespaceAttributes(OutputList &ol);
- void writeClassesToTagFile(FTextStream &,ClassSDict *d);
-
- QCString fileName;
- FileList files;
-
- NamespaceSDict *usingDirList;
- SDict<Definition> *usingDeclList;
- SDict<Definition> *m_innerCompounds;
-
- MemberSDict *m_allMembersDict;
- QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
- ClassSDict *classSDict;
- ClassSDict *interfaceSDict;
- ClassSDict *structSDict;
- ClassSDict *exceptionSDict;
- NamespaceSDict *namespaceSDict;
- bool m_subGrouping;
- enum { NAMESPACE, MODULE, CONSTANT_GROUP, LIBRARY } m_type;
- bool m_isPublished;
- QCString metaData;
- bool m_inline;
+ virtual void setMetaData(const QCString &m) = 0;
+ virtual void setVisited(bool v) = 0;
+ virtual bool isVisited() const = 0;
};
+/** Factory method to create new NamespaceDef instance */
+NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColumn,
+ const char *name,const char *ref=0,
+ const char *refFile=0,const char*type=0,
+ bool isPublished=false);
+
/** A list of NamespaceDef objects. */
class NamespaceList : public QList<NamespaceDef>
{
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index 93d5817..8272cf6 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -25,10 +25,64 @@
#include "language.h"
#include "namespacedef.h"
#include "reflist.h"
+#include "definitionimpl.h"
-PageDef::PageDef(const char *f,int l,const char *n,
+//------------------------------------------------------------------------------------------
+
+class PageDefImpl : public DefinitionImpl, public PageDef
+{
+ public:
+ PageDefImpl(const char *f,int l,const char *n,const char *d,const char *t);
+ virtual ~PageDefImpl();
+
+ virtual void setFileName(const char *name);
+ virtual void setLocalToc(const LocalToc &tl);
+ virtual void setShowLineNo(bool);
+ virtual DefType definitionType() const { return TypePage; }
+ virtual bool isLinkableInProject() const { return /*hasDocumentation() &&*/ !isReference(); }
+ virtual bool isLinkable() const { return isLinkableInProject() || isReference(); }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual void findSectionsInDocumentation();
+ virtual QCString title() const { return m_title; }
+ virtual GroupDef * getGroupDef() const;
+ virtual PageSDict * getSubPages() const { return m_subPageDict; }
+ virtual void addInnerCompound(Definition *d);
+ virtual bool visibleInIndex() const;
+ virtual bool documentedPage() const;
+ virtual bool hasSubPages() const;
+ virtual bool hasParentPage() const;
+ virtual bool hasTitle() const;
+ virtual LocalToc localToc() const { return m_localToc; }
+ virtual void setPageScope(Definition *d){ m_pageScope = d; }
+ virtual Definition *getPageScope() const { return m_pageScope; }
+ virtual QCString displayName(bool=TRUE) const { return hasTitle() ? m_title : DefinitionImpl::name(); }
+ virtual bool showLineNo() const;
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeTagFile(FTextStream &);
+ virtual void setNestingLevel(int l);
+ virtual void writePageDocumentation(OutputList &ol);
+
+ private:
+ QCString m_fileName;
+ QCString m_title;
+ PageSDict *m_subPageDict; // list of pages in the group
+ Definition *m_pageScope;
+ int m_nestingLevel;
+ LocalToc m_localToc;
+ bool m_showLineNo;
+};
+
+PageDef *createPageDef(const char *f,int l,const char *n,const char *d,const char *t)
+{
+ return new PageDefImpl(f,l,n,d,t);
+}
+
+//------------------------------------------------------------------------------------------
+
+PageDefImpl::PageDefImpl(const char *f,int l,const char *n,
const char *d,const char *t)
- : Definition(f,l,1,n), m_title(t)
+ : DefinitionImpl(f,l,1,n), m_title(t)
{
setDocumentation(d,f,l);
m_subPageDict = new PageSDict(7);
@@ -38,23 +92,23 @@ PageDef::PageDef(const char *f,int l,const char *n,
m_showLineNo = FALSE;
}
-PageDef::~PageDef()
+PageDefImpl::~PageDefImpl()
{
delete m_subPageDict;
}
-void PageDef::findSectionsInDocumentation()
+void PageDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
}
-GroupDef *PageDef::getGroupDef() const
+GroupDef *PageDefImpl::getGroupDef() const
{
GroupList *groups = partOfGroups();
return groups!=0 ? groups->getFirst() : 0;
}
-QCString PageDef::getOutputFileBase() const
+QCString PageDefImpl::getOutputFileBase() const
{
if (getGroupDef())
return getGroupDef()->getOutputFileBase();
@@ -62,16 +116,16 @@ QCString PageDef::getOutputFileBase() const
return m_fileName;
}
-void PageDef::setFileName(const char *name)
+void PageDefImpl::setFileName(const char *name)
{
m_fileName = name;
}
-void PageDef::addInnerCompound(Definition *def)
+void PageDefImpl::addInnerCompound(Definition *def)
{
if (def->definitionType()==Definition::TypePage)
{
- PageDef *pd = (PageDef*)def;
+ PageDef *pd = dynamic_cast<PageDef*>(def);
m_subPageDict->append(pd->name(),pd);
def->setOuterScope(this);
if (this==Doxygen::mainPage)
@@ -85,13 +139,13 @@ void PageDef::addInnerCompound(Definition *def)
}
}
-bool PageDef::hasParentPage() const
+bool PageDefImpl::hasParentPage() const
{
return getOuterScope() &&
getOuterScope()->definitionType()==Definition::TypePage;
}
-void PageDef::writeTagFile(FTextStream &tagFile)
+void PageDefImpl::writeTagFile(FTextStream &tagFile)
{
bool found = name()=="citelist";
QDictIterator<RefList> rli(*Doxygen::xrefLists);
@@ -115,7 +169,7 @@ void PageDef::writeTagFile(FTextStream &tagFile)
}
}
-void PageDef::writeDocumentation(OutputList &ol)
+void PageDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
@@ -124,7 +178,7 @@ void PageDef::writeDocumentation(OutputList &ol)
pageName = escapeCharsInString(name(),FALSE,TRUE);
manPageName = escapeCharsInString(name(),TRUE,TRUE);
- //printf("PageDef::writeDocumentation: %s\n",getOutputFileBase().data());
+ //printf("PageDefImpl::writeDocumentation: %s\n",getOutputFileBase().data());
ol.pushGeneratorState();
//1.{
@@ -232,7 +286,7 @@ void PageDef::writeDocumentation(OutputList &ol)
Doxygen::indexList->addIndexItem(this,0,0,filterTitle(title()));
}
-void PageDef::writePageDocumentation(OutputList &ol)
+void PageDefImpl::writePageDocumentation(OutputList &ol)
{
bool markdownEnabled = Doxygen::markdownSupport;
@@ -300,7 +354,7 @@ void PageDef::writePageDocumentation(OutputList &ol)
}
}
-bool PageDef::visibleInIndex() const
+bool PageDefImpl::visibleInIndex() const
{
static bool externalPages = Config_getBool(EXTERNAL_PAGES);
return // not part of a group
@@ -310,7 +364,7 @@ bool PageDef::visibleInIndex() const
;
}
-bool PageDef::documentedPage() const
+bool PageDefImpl::documentedPage() const
{
return // not part of a group
!getGroupDef() &&
@@ -318,32 +372,32 @@ bool PageDef::documentedPage() const
!isReference();
}
-bool PageDef::hasSubPages() const
+bool PageDefImpl::hasSubPages() const
{
return m_subPageDict->count()>0;
}
-void PageDef::setNestingLevel(int l)
+void PageDefImpl::setNestingLevel(int l)
{
m_nestingLevel = l;
}
-void PageDef::setLocalToc(const LocalToc &lt)
+void PageDefImpl::setLocalToc(const LocalToc &lt)
{
m_localToc = lt;
}
-void PageDef::setShowLineNo(bool b)
+void PageDefImpl::setShowLineNo(bool b)
{
m_showLineNo = b;
}
-bool PageDef::showLineNo() const
+bool PageDefImpl::showLineNo() const
{
return m_showLineNo;
}
-bool PageDef::hasTitle() const
+bool PageDefImpl::hasTitle() const
{
return !m_title.isEmpty() && m_title.lower()!="notitle";
}
diff --git a/src/pagedef.h b/src/pagedef.h
index e958617..f0b68d1 100644
--- a/src/pagedef.h
+++ b/src/pagedef.h
@@ -26,63 +26,47 @@ class OutputList;
class FTextStream;
/** @brief A model of a page symbol. */
-class PageDef : public Definition
+class PageDef : virtual public Definition
{
public:
- PageDef(const char *f,int l,const char *n,const char *d,const char *t);
- ~PageDef();
+ virtual ~PageDef() {}
// setters
- void setFileName(const char *name);
- void setLocalToc(const LocalToc &tl);
- void setShowLineNo(bool);
+ virtual void setFileName(const char *name) = 0;
+ virtual void setLocalToc(const LocalToc &tl) = 0;
+ virtual void setShowLineNo(bool) = 0;
// getters
- DefType definitionType() const { return TypePage; }
- bool isLinkableInProject() const
- {
- return /*hasDocumentation() &&*/ !isReference();
- }
- bool isLinkable() const
- {
- return isLinkableInProject() || isReference();
- }
-
- // functions to get a uniform interface with Definitions
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- void findSectionsInDocumentation();
- QCString title() const { return m_title; }
- GroupDef * getGroupDef() const;
- PageSDict * getSubPages() const { return m_subPageDict; }
- void addInnerCompound(Definition *d);
- bool visibleInIndex() const;
- bool documentedPage() const;
- bool hasSubPages() const;
- bool hasParentPage() const;
- bool hasTitle() const;
- LocalToc localToc() const { return m_localToc; }
- void setPageScope(Definition *d){ m_pageScope = d; }
- Definition *getPageScope() const { return m_pageScope; }
- QCString displayName(bool=TRUE) const
- { return hasTitle() ? m_title : Definition::name(); }
- bool showLineNo() const;
+ virtual DefType definitionType() const = 0;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual void findSectionsInDocumentation() = 0;
+ virtual QCString title() const = 0;
+ virtual GroupDef * getGroupDef() const = 0;
+ virtual PageSDict * getSubPages() const = 0;
+ virtual void addInnerCompound(Definition *d) = 0;
+ virtual bool visibleInIndex() const = 0;
+ virtual bool documentedPage() const = 0;
+ virtual bool hasSubPages() const = 0;
+ virtual bool hasParentPage() const = 0;
+ virtual bool hasTitle() const = 0;
+ virtual LocalToc localToc() const = 0;
+ virtual void setPageScope(Definition *d) = 0;
+ virtual Definition *getPageScope() const = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual bool showLineNo() const = 0;
- void writeDocumentation(OutputList &ol);
- void writeTagFile(FTextStream &);
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+ virtual void setNestingLevel(int l) = 0;
+ virtual void writePageDocumentation(OutputList &ol) = 0;
- private:
- void setNestingLevel(int l);
- void writePageDocumentation(OutputList &ol);
- QCString m_fileName;
- QCString m_title;
- PageSDict *m_subPageDict; // list of pages in the group
- Definition *m_pageScope;
- int m_nestingLevel;
- LocalToc m_localToc;
- bool m_showLineNo;
};
+PageDef *createPageDef(const char *f,int l,const char *n,const char *d,const char *t);
+
class PageSDict : public SDict<PageDef>
{
public:
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index fcc7ef5..1ec4bf3 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -729,6 +729,7 @@ void PerlModDocVisitor::visit(DocInclude *inc)
#endif
return;
case DocInclude::DontInclude: return;
+ case DocInclude::DontIncWithLines: return;
case DocInclude::HtmlInclude: type = "htmlonly"; break;
case DocInclude::LatexInclude: type = "latexonly"; break;
case DocInclude::VerbInclude: type = "preformatted"; break;
diff --git a/src/pre.l b/src/pre.l
index 18061f6..6edc766 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -879,6 +879,21 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
arg+=c;
}
}
+ else if (c=='/') // possible start of a comment
+ {
+ char prevChar = '\0';
+ arg+=c;
+ if ((cc=getCurrentChar(expr,rest,j)) == '*') // we have a comment
+ {
+ while ((cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
+ {
+ c=(char)cc;
+ arg+=c;
+ if (c == '/' && prevChar == '*') break; // we have an end of comment
+ prevChar = c;
+ }
+ }
+ }
else // append other characters
{
arg+=c;
@@ -1107,7 +1122,6 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
if (replaced) // expand the macro and rescan the expression
{
-
//printf("replacing `%s'->`%s'\n",expr.mid(p,len).data(),expMacro.data());
QCString resultExpr=expMacro;
QCString restExpr=expr.right(expr.length()-len-p);
@@ -1144,6 +1158,44 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
}
}
+/*! @brief Process string or character literal.
+ *
+ * \a inputStr should point to the start of a string or character literal.
+ * the routine will return a pointer to just after the end of the literal
+ * the character making up the literal will be added to \a result.
+ */
+const char *processUntilMatchingTerminator(const char *inputStr,QCString &result)
+{
+ if (inputStr==0) return inputStr;
+ char term = *inputStr; // capture start character of the literal
+ if (term!='\'' && term!='"') return inputStr; // not a valid literal
+ char c=term;
+ // output start character
+ result+=c;
+ inputStr++;
+ while ((c=*inputStr)) // while inside the literal
+ {
+ if (c==term) // found end marker of the literal
+ {
+ // output end character and stop
+ result+=c;
+ inputStr++;
+ break;
+ }
+ else if (c=='\\') // escaped character, process next character
+ // as well without checking for end marker.
+ {
+ result+=c;
+ inputStr++;
+ c=*inputStr;
+ if (c==0) break; // unexpected end of string after escape character
+ }
+ result+=c;
+ inputStr++;
+ }
+ return inputStr;
+}
+
/*! replaces all occurrences of @@@@ in \a s by @@
* and removes all occurrences of @@E.
* All identifiers found are replaced by 0L
@@ -1177,6 +1229,10 @@ QCString removeIdsAndMarkers(const char *s)
p++;
inNum=TRUE;
}
+ else if (c=='\'') // quoted character
+ {
+ p = processUntilMatchingTerminator(p,result);
+ }
else if (c=='d' && !inNum) // identifier starting with a `d'
{
if (qstrncmp(p,"defined ",8)==0 || qstrncmp(p,"defined(",8)==0)
@@ -1303,30 +1359,8 @@ QCString removeMarkers(const char *s)
}
break;
case '"': // skip string literals
- {
- result+=c;
- char pc=c;
- c=*++p;
- while (*p && (c!='"' || pc=='\\')) // no end quote
- {
- result+=c;
- c=*++p;
- }
- if (*p) result+=c,p++;
- }
- break;
case '\'': // skip char literals
- {
- result+=c;
- char pc=c;
- c=*++p;
- while (*p && (c!='\'' || pc=='\\')) // no end quote
- {
- result+=c;
- c=*++p;
- }
- if (*p) result+=c,p++;
- }
+ p = processUntilMatchingTerminator(p,result);
break;
default:
{
@@ -1399,7 +1433,7 @@ void addDefine()
//printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
//ArgumentList *al = new ArgumentList;
//stringToArgumentList(g_defArgsStr,al);
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
g_yyFileName,g_yyLineNr-g_yyMLines,g_yyColNr,
"#define",g_defName,g_defArgsStr,0,
Public,Normal,FALSE,Member,MemberType_Define,0,0,"");
@@ -2182,6 +2216,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(DefinedExpr1);
}
<Guard>{ID} { g_guardExpr+=yytext; }
+<Guard>"@" { g_guardExpr+="@@"; }
<Guard>. { g_guardExpr+=*yytext; }
<Guard>\n {
unput(*yytext);
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 8d375fc..26bb3e7 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -187,6 +187,7 @@ class PrintDocVisitor : public DocVisitor
case DocInclude::Include: printf("include"); break;
case DocInclude::IncWithLines: printf("incwithlines"); break;
case DocInclude::DontInclude: printf("dontinclude"); break;
+ case DocInclude::DontIncWithLines: printf("dontinwithlines"); break;
case DocInclude::HtmlInclude:
printf("htmlinclude");
if (inc->isBlock()) printf(" block=\"yes\"");
diff --git a/src/pycode.l b/src/pycode.l
index 8f2279e..4fb27f1 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -786,13 +786,13 @@ static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s
sym->getOuterScope()->definitionType()==Definition::TypeClass &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ClassDef *cd = (ClassDef*)sym->getOuterScope();
- ClassDef *thisCd = (ClassDef *)g_currentDefinition;
+ ClassDef *cd = dynamic_cast<ClassDef*>(sym->getOuterScope());
+ ClassDef *thisCd = dynamic_cast<ClassDef *>(g_currentDefinition);
if (sym->definitionType()==Definition::TypeMember)
{
if (g_currentMemberDef && g_collectXRefs)
{
- addDocCrossReference(g_currentMemberDef,(MemberDef*)sym);
+ addDocCrossReference(g_currentMemberDef,dynamic_cast<MemberDef*>(sym));
}
}
DBG_CTX((stderr,"cd=%s thisCd=%s\n",cd?cd->name().data():"<none>",thisCd?thisCd->name().data():"<none>"));
@@ -1086,7 +1086,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT
// Push a class scope
- ClassDef *classDefToAdd = new ClassDef("<code>",1,1,g_curClassName,ClassDef::Class,0,0,FALSE);
+ ClassDef *classDefToAdd = createClassDef("<code>",1,1,g_curClassName,ClassDef::Class,0,0,FALSE);
g_codeClassSDict.append(g_curClassName,classDefToAdd);
char *s=g_curClassBases.first();
while (s)
@@ -1594,7 +1594,7 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
+ g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
if (g_sourceFileDef)
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index f44da77..55c03a5 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -429,20 +429,21 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
0, // memberDef
TRUE // show line numbers
);
+ delete fd;
m_t << "\\par";
m_t << "}" << endl;
}
@@ -465,10 +466,9 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "\\par";
m_t << "}" << endl;
break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- break;
+ case DocInclude::DontInclude:
+ case DocInclude::DontIncWithLines:
+ case DocInclude::HtmlInclude:
case DocInclude::LatexInclude:
break;
case DocInclude::VerbInclude:
@@ -496,7 +496,7 @@ void RTFDocVisitor::visit(DocInclude *inc)
case DocInclude::SnipWithLines:
{
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "{" << endl;
if (!m_lastIsPara) m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
@@ -507,13 +507,14 @@ void RTFDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
m_t << "}";
}
break;
@@ -548,9 +549,24 @@ void RTFDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),op->text(),langExt,
- op->isExample(),op->exampleFile());
+ op->isExample(),op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index 52378cd..cfa8ed2 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -91,7 +91,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
if (ctx==0) return;
assert(!isSourceFile || ctx->definitionType()==Definition::TypeFile);
//printf("SearchIndex::setCurrentDoc(%s,%s,%s)\n",name,baseName,anchor);
- QCString url=isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
+ QCString url=isSourceFile ? (dynamic_cast<FileDef*>(ctx))->getSourceFileBase() : ctx->getOutputFileBase();
url+=Config_getString(HTML_FILE_EXTENSION);
QCString baseUrl = url;
if (anchor) url+=QCString("#")+anchor;
@@ -99,7 +99,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
QCString name=ctx->qualifiedName();
if (ctx->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef *)ctx;
+ MemberDef *md = dynamic_cast<MemberDef *>(ctx);
name.prepend((md->getLanguage()==SrcLangExt_Fortran ?
theTranslator->trSubprogram(TRUE,TRUE) :
theTranslator->trMember(TRUE,TRUE))+" ");
@@ -116,7 +116,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
{
case Definition::TypePage:
{
- PageDef *pd = (PageDef *)ctx;
+ PageDef *pd = dynamic_cast<PageDef *>(ctx);
if (pd->hasTitle())
{
name = theTranslator->trPage(TRUE,TRUE)+" "+pd->title();
@@ -129,7 +129,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
break;
case Definition::TypeClass:
{
- ClassDef *cd = (ClassDef *)ctx;
+ ClassDef *cd = dynamic_cast<ClassDef *>(ctx);
name.prepend(cd->compoundTypeString()+" ");
}
break;
@@ -151,7 +151,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
break;
case Definition::TypeGroup:
{
- GroupDef *gd = (GroupDef *)ctx;
+ GroupDef *gd = dynamic_cast<GroupDef *>(ctx);
if (gd->groupTitle())
{
name = theTranslator->trGroup(TRUE,TRUE)+" "+gd->groupTitle();
@@ -446,7 +446,7 @@ static QCString definitionToName(Definition *ctx)
{
if (ctx && ctx->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef*)ctx;
+ MemberDef *md = dynamic_cast<MemberDef*>(ctx);
if (md->isFunction())
return "function";
else if (md->isSlot())
@@ -477,7 +477,7 @@ static QCString definitionToName(Definition *ctx)
switch(ctx->definitionType())
{
case Definition::TypeClass:
- return ((ClassDef*)ctx)->compoundTypeString();
+ return (dynamic_cast<ClassDef*>(ctx))->compoundTypeString();
case Definition::TypeFile:
return "file";
case Definition::TypeNamespace:
@@ -500,7 +500,7 @@ static QCString definitionToName(Definition *ctx)
void SearchIndexExternal::setCurrentDoc(Definition *ctx,const char *anchor,bool isSourceFile)
{
QCString extId = stripPath(Config_getString(EXTERNAL_SEARCH_ID));
- QCString baseName = isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
+ QCString baseName = isSourceFile ? (dynamic_cast<FileDef*>(ctx))->getSourceFileBase() : ctx->getOutputFileBase();
QCString url = baseName + Doxygen::htmlFileExtension;
if (anchor) url+=QCString("#")+anchor;
QCString key = extId+";"+url;
@@ -514,7 +514,7 @@ void SearchIndexExternal::setCurrentDoc(Definition *ctx,const char *anchor,bool
e->name = ctx->qualifiedName();
if (ctx->definitionType()==Definition::TypeMember)
{
- e->args = ((MemberDef*)ctx)->argsString();
+ e->args = (dynamic_cast<MemberDef*>(ctx))->argsString();
}
e->extId = extId;
e->url = url;
@@ -1047,9 +1047,7 @@ void writeJavascriptSearchIndex()
if (dl->count()==1) // item with a unique name
{
- MemberDef *md = 0;
- bool isMemberDef = d->definitionType()==Definition::TypeMember;
- if (isMemberDef) md = (MemberDef*)d;
+ MemberDef *md = dynamic_cast<MemberDef*>(d);
QCString anchor = d->anchor();
ti << "'" << externalRef("../",d->getReference(),TRUE)
@@ -1101,9 +1099,7 @@ void writeJavascriptSearchIndex()
Definition *scope = d->getOuterScope();
Definition *next = di.current();
Definition *nextScope = 0;
- MemberDef *md = 0;
- bool isMemberDef = d->definitionType()==Definition::TypeMember;
- if (isMemberDef) md = (MemberDef*)d;
+ MemberDef *md = dynamic_cast<MemberDef*>(d);
if (next) nextScope = next->getOuterScope();
QCString anchor = d->anchor();
@@ -1147,12 +1143,12 @@ void writeJavascriptSearchIndex()
QCString name;
if (d->definitionType()==Definition::TypeClass)
{
- name = convertToXML(((ClassDef*)d)->displayName());
+ name = convertToXML((dynamic_cast<ClassDef*>(d))->displayName());
found = TRUE;
}
else if (d->definitionType()==Definition::TypeNamespace)
{
- name = convertToXML(((NamespaceDef*)d)->displayName());
+ name = convertToXML((dynamic_cast<NamespaceDef*>(d))->displayName());
found = TRUE;
}
else if (scope==0 || scope==Doxygen::globalScope) // in global scope
@@ -1327,11 +1323,11 @@ void SearchIndexList::append(Definition *d)
{
if (d->definitionType()==Definition::TypeGroup)
{
- dispName = ((GroupDef*)d)->groupTitle();
+ dispName = (dynamic_cast<GroupDef*>(d))->groupTitle();
}
else if (d->definitionType()==Definition::TypePage)
{
- dispName = ((PageDef*)d)->title();
+ dispName = (dynamic_cast<PageDef*>(d))->title();
}
l=new SearchDefinitionList(searchId(dispName),dispName);
SDict< SearchDefinitionList >::append(dispName,l);
diff --git a/src/sqlcode.l b/src/sqlcode.l
index cbc6c3a..5e45083 100644
--- a/src/sqlcode.l
+++ b/src/sqlcode.l
@@ -381,7 +381,7 @@ void parseSqlCode(
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
+ g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 45543de..da2f3f1 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -1393,8 +1393,8 @@ void TagFileParser::buildLists(Entry *root)
QCString fullName = m_tagName+":"+tfi->path+stripPath(tfi->name);
fe->fileName = fullName;
- //printf("new FileDef() filename=%s\n",tfi->filename.data());
- FileDef *fd = new FileDef(m_tagName+":"+tfi->path,
+ //printf("createFileDef() filename=%s\n",tfi->filename.data());
+ FileDef *fd = createFileDef(m_tagName+":"+tfi->path,
tfi->name,m_tagName,
tfi->filename
);
diff --git a/src/tooltip.cpp b/src/tooltip.cpp
index 91da583..2c6f6e1 100644
--- a/src/tooltip.cpp
+++ b/src/tooltip.cpp
@@ -114,7 +114,7 @@ void TooltipManager::writeTooltips(CodeOutputInterface &ol)
QCString decl;
if (d->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef*)d;
+ MemberDef *md = dynamic_cast<MemberDef*>(d);
decl = md->declaration();
if (!decl.isEmpty() && decl.at(0)=='@') // hide enum values
{
diff --git a/src/util.cpp b/src/util.cpp
index 035bef3..f92df68 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -689,7 +689,7 @@ static QCString substTypedef(const Definition *scope,const FileDef *fileScope,co
if (d->definitionType()==Definition::TypeMember)
{
// that are also typedefs
- MemberDef *md = (MemberDef *)d;
+ MemberDef *md = dynamic_cast<MemberDef *>(d);
if (md->isTypedef()) // d is a typedef
{
// test accessibility of typedef within scope.
@@ -708,7 +708,7 @@ static QCString substTypedef(const Definition *scope,const FileDef *fileScope,co
{
Definition *d = (Definition*)di;
// that are also typedefs
- MemberDef *md = (MemberDef *)di;
+ MemberDef *md = dynamic_cast<MemberDef *>(di);
if (md->isTypedef()) // d is a typedef
{
// test accessibility of typedef within scope.
@@ -786,12 +786,12 @@ static const Definition *followPath(const Definition *start,const FileDef *fileS
if (current->definitionType()==Definition::TypeNamespace)
{
next = endOfPathIsUsedClass(
- ((NamespaceDef *)current)->getUsedClasses(),qualScopePart);
+ (dynamic_cast<const NamespaceDef *>(current))->getUsedClasses(),qualScopePart);
}
else if (current->definitionType()==Definition::TypeFile)
{
next = endOfPathIsUsedClass(
- ((FileDef *)current)->getUsedClasses(),qualScopePart);
+ (dynamic_cast<const FileDef *>(current))->getUsedClasses(),qualScopePart);
}
current = next;
if (current==0) break;
@@ -968,13 +968,13 @@ int isAccessibleFrom(const Definition *scope,const FileDef *fileScope,const Defi
(item->definitionType()==Definition::TypeMember && // a member
itemScope && itemScope->definitionType()==Definition::TypeClass && // of a class
scope->definitionType()==Definition::TypeClass && // accessible
- ((ClassDef*)scope)->isAccessibleMember((MemberDef *)item) // from scope
+ (dynamic_cast<const ClassDef*>(scope))->isAccessibleMember(dynamic_cast<const MemberDef *>(item)) // from scope
);
bool nestedClassInsideBaseClass =
(item->definitionType()==Definition::TypeClass && // a nested class
itemScope && itemScope->definitionType()==Definition::TypeClass && // inside a base
scope->definitionType()==Definition::TypeClass && // class of scope
- ((ClassDef*)scope)->isBaseClass((ClassDef*)itemScope,TRUE)
+ (dynamic_cast<const ClassDef*>(scope))->isBaseClass(dynamic_cast<ClassDef*>(itemScope),TRUE)
);
if (itemScope==scope || memberAccessibleFromScope || nestedClassInsideBaseClass)
@@ -1009,7 +1009,7 @@ int isAccessibleFrom(const Definition *scope,const FileDef *fileScope,const Defi
// check if scope is a namespace, which is using other classes and namespaces
if (scope->definitionType()==Definition::TypeNamespace)
{
- NamespaceDef *nscope = (NamespaceDef*)scope;
+ const NamespaceDef *nscope = dynamic_cast<const NamespaceDef*>(scope);
//printf(" %s is namespace with %d used classes\n",nscope->name().data(),nscope->getUsedClasses());
SDict<Definition> *cl = nscope->getUsedClasses();
if (accessibleViaUsingClass(cl,fileScope,item))
@@ -1089,7 +1089,7 @@ int isAccessibleFromWithExpScope(const Definition *scope,const FileDef *fileScop
else if (itemScope && newScope &&
itemScope->definitionType()==Definition::TypeClass &&
newScope->definitionType()==Definition::TypeClass &&
- ((ClassDef*)newScope)->isBaseClass((ClassDef*)itemScope,TRUE,0)
+ (dynamic_cast<const ClassDef*>(newScope))->isBaseClass(dynamic_cast<const ClassDef*>(itemScope),TRUE,0)
)
{
// inheritance is also ok. Example: looking for B::I, where
@@ -1114,7 +1114,7 @@ int isAccessibleFromWithExpScope(const Definition *scope,const FileDef *fileScop
// A::B::C but is explicit referenced as A::C, where B is imported
// in A via a using directive.
//printf("newScope is a namespace: %s!\n",newScope->name().data());
- NamespaceDef *nscope = (NamespaceDef*)newScope;
+ const NamespaceDef *nscope = dynamic_cast<const NamespaceDef*>(newScope);
SDict<Definition> *cl = nscope->getUsedClasses();
if (cl)
{
@@ -1165,7 +1165,7 @@ int isAccessibleFromWithExpScope(const Definition *scope,const FileDef *fileScop
//printf(" failed to resolve: scope=%s\n",scope->name().data());
if (scope->definitionType()==Definition::TypeNamespace)
{
- NamespaceDef *nscope = (NamespaceDef*)scope;
+ const NamespaceDef *nscope = dynamic_cast<const NamespaceDef*>(scope);
NamespaceSDict *nl = nscope->getUsedNamespaces();
if (accessibleViaUsingNamespace(nl,fileScope,item,explicitScopePart))
{
@@ -1227,7 +1227,7 @@ static void getResolvedSymbol(const Definition *scope,
// only look at classes and members that are enums or typedefs
if (d->definitionType()==Definition::TypeClass ||
(d->definitionType()==Definition::TypeMember &&
- (((MemberDef*)d)->isTypedef() || ((MemberDef*)d)->isEnumerate())
+ ((dynamic_cast<MemberDef*>(d))->isTypedef() || (dynamic_cast<MemberDef*>(d))->isEnumerate())
)
)
{
@@ -1240,7 +1240,7 @@ static void getResolvedSymbol(const Definition *scope,
// see if we are dealing with a class or a typedef
if (d->definitionType()==Definition::TypeClass) // d is a class
{
- ClassDef *cd = (ClassDef *)d;
+ ClassDef *cd = dynamic_cast<ClassDef *>(d);
//printf("cd=%s\n",cd->name().data());
if (!cd->isTemplateArgument()) // skip classes that
// are only there to
@@ -1285,7 +1285,7 @@ static void getResolvedSymbol(const Definition *scope,
}
else if (d->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef *)d;
+ MemberDef *md = dynamic_cast<MemberDef *>(d);
//printf(" member isTypedef()=%d\n",md->isTypedef());
if (md->isTypedef()) // d is a typedef
{
@@ -1707,7 +1707,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
// improve the performance of this function
static char *growBuf = 0;
static int growBufLen = 0;
- if (s.length()*3>growBufLen) // For input character we produce at most 3 output characters,
+ if ((int)s.length()*3>growBufLen) // For input character we produce at most 3 output characters,
{
growBufLen = s.length()*3;
growBuf = (char *)realloc(growBuf,growBufLen+1); // add 1 for 0-terminator
@@ -5002,7 +5002,7 @@ bool generateLink(OutputDocInterface &od,const char *clName,
compound->definitionType()==Definition::TypeGroup /* is group */
)
{
- linkText=((GroupDef *)compound)->groupTitle(); // use group's title as link
+ linkText=(dynamic_cast<GroupDef *>(compound))->groupTitle(); // use group's title as link
}
else if (compound->definitionType()==Definition::TypeFile)
{
@@ -5374,7 +5374,7 @@ static void initBaseClassHierarchy(BaseClassList *bcl)
{
initBaseClassHierarchy(cd->baseClasses());
}
- cd->visited=FALSE;
+ cd->setVisited(FALSE);
}
}
//----------------------------------------------------------------------------
@@ -5414,7 +5414,7 @@ void initClassHierarchy(ClassSDict *cl)
ClassDef *cd;
for ( ; (cd=cli.current()); ++cli)
{
- cd->visited=FALSE;
+ cd->setVisited(FALSE);
initBaseClassHierarchy(cd->baseClasses());
}
}
@@ -6683,7 +6683,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
baseName=baseName.left(baseName.length()-Doxygen::htmlFileExtension.length());
QCString title=ptitle.stripWhiteSpace();
- pd=new PageDef(fileName,startLine,baseName,doc,title);
+ pd=createPageDef(fileName,startLine,baseName,doc,title);
pd->setRefItems(sli);
pd->setLanguage(lang);
@@ -7481,7 +7481,7 @@ MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
if (distance!=-1 && distance<minDistance)
{
minDistance = distance;
- bestMatch = (MemberDef *)d;
+ bestMatch = dynamic_cast<MemberDef *>(d);
//printf("new best match %s distance=%d\n",bestMatch->qualifiedName().data(),distance);
}
}
@@ -7496,7 +7496,7 @@ MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
if (distance!=-1 && distance<minDistance)
{
minDistance = distance;
- bestMatch = (MemberDef *)d;
+ bestMatch = dynamic_cast<MemberDef *>(d);
//printf("new best match %s distance=%d\n",bestMatch->qualifiedName().data(),distance);
}
}
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index 18ae755..9e296cc 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -544,7 +544,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
Definition *d = cd->getOuterScope();
if (d && d->definitionType()==Definition::TypeClass)
{
- cd = (ClassDef*)d;
+ cd = dynamic_cast<ClassDef*>(d);
}
else
{
@@ -1582,7 +1582,7 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",exName);
+ g_sourceFileDef = createFileDef("",exName);
cleanupSourceDef = TRUE;
}
if (g_sourceFileDef)
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index 808b32b..e70f099 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -1798,7 +1798,7 @@ static void setGlobalType(MemberList *ml)
/* writes a vhdl type documentation */
bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition *d, OutputList &ol)
{
- ClassDef *cd=(ClassDef*)d;
+ const ClassDef *cd=dynamic_cast<const ClassDef*>(d);
bool hasParams = FALSE;
if (cd==0) return hasParams;
@@ -2984,7 +2984,7 @@ static void addInstance(ClassDef* classEntity, ClassDef* ar,
ferr:
QCString uu=cur->name;
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
ar->getDefFileName(), cur->startLine,cur->startColumn,
n1,uu,uu, 0,
Public, Normal, cur->stat,Member,
diff --git a/src/xmlcode.l b/src/xmlcode.l
index c6e01e8..c9529d6 100644
--- a/src/xmlcode.l
+++ b/src/xmlcode.l
@@ -365,7 +365,7 @@ void parseXmlCode(
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
+ g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 01e0a6d..1005719 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -299,20 +299,21 @@ void XmlDocVisitor::visit(DocInclude *inc)
{
m_t << "<programlisting filename=\"" << inc->file() << "\">";
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
0, // memberDef
TRUE // show line numbers
);
+ delete fd;
m_t << "</programlisting>";
}
break;
@@ -334,6 +335,7 @@ void XmlDocVisitor::visit(DocInclude *inc)
m_t << "</programlisting>";
break;
case DocInclude::DontInclude:
+ case DocInclude::DontIncWithLines:
break;
case DocInclude::HtmlInclude:
if (inc->isBlock())
@@ -373,7 +375,7 @@ void XmlDocVisitor::visit(DocInclude *inc)
{
m_t << "<programlisting filename=\"" << inc->file() << "\">";
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -381,13 +383,14 @@ void XmlDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
m_t << "</programlisting>";
}
break;
@@ -418,10 +421,25 @@ void XmlDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),
op->text(),langExt,op->isExample(),
- op->exampleFile());
+ op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 420a653..568e488 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -360,8 +360,8 @@ static void writeTemplateArgumentList(ArgumentList *al,
}
if (!a->name.isEmpty())
{
- t << indentStr << " <declname>" << a->name << "</declname>" << endl;
- t << indentStr << " <defname>" << a->name << "</defname>" << endl;
+ t << indentStr << " <declname>" << convertToXML(a->name) << "</declname>" << endl;
+ t << indentStr << " <defname>" << convertToXML(a->name) << "</defname>" << endl;
}
if (!a->defval.isEmpty())
{
diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css
index 92a662a..09b7aad 100644
--- a/templates/html/doxygen.css
+++ b/templates/html/doxygen.css
@@ -53,11 +53,13 @@ dt {
font-weight: bold;
}
-div.multicol {
+ul.multicol {
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
+ column-gap: 1em;
-moz-column-count: 3;
-webkit-column-count: 3;
+ column-count: 3;
}
p.startli, p.startdd {
diff --git a/testing/runtests.py b/testing/runtests.py
index 358fb91..d132da5 100755
--- a/testing/runtests.py
+++ b/testing/runtests.py
@@ -91,7 +91,7 @@ class Tester:
if 'config' in self.config:
for option in self.config['config']:
print(option, file=f)
- if (self.args.xml):
+ if (self.args.xml or self.args.xmlxsd):
print('GENERATE_XML=YES', file=f)
print('XML_OUTPUT=%s/out' % self.test_out, file=f)
else:
@@ -182,11 +182,13 @@ class Tester:
failed_latex=False
failed_docbook=False
failed_rtf=False
+ failed_xmlxsd=False
msg = ()
# look for files to check against the reference
- if self.args.xml:
- failed_xml=True
- if 'check' in self.config:
+ if self.args.xml or self.args.xmlxsd:
+ failed_xml=False
+ if 'check' in self.config and self.args.xml:
+ failed_xml=True
for check in self.config['check']:
check_file='%s/out/%s' % (self.test_out,check)
# check if the file we need to check is actually generated
@@ -215,9 +217,62 @@ class Tester:
if failed_xml:
msg+= (xml_msg,)
break
- if not failed_xml and not self.args.keep:
- xml_output='%s/out' % self.test_out
- shutil.rmtree(xml_output,ignore_errors=True)
+ failed_xmlxsd=False
+ if self.args.xmlxsd:
+ xmlxsd_output='%s/out' % self.test_out
+ if (sys.platform == 'win32'):
+ redirx=' 2> %s/temp >nul:'%xmlxsd_output
+ else:
+ redirx='2>%s/temp >/dev/null'%xmlxsd_output
+ #
+ index_xml = []
+ index_xml.append(glob.glob('%s/index.xml' % (xmlxsd_output)))
+ index_xml.append(glob.glob('%s/*/*/index.xml' % (xmlxsd_output)))
+ index_xml = ' '.join(list(itertools.chain.from_iterable(index_xml))).replace(self.args.outputdir +'/','').replace('\\','/')
+ index_xsd = []
+ index_xsd.append(glob.glob('%s/index.xsd' % (xmlxsd_output)))
+ index_xsd.append(glob.glob('%s/*/*/index.xsd' % (xmlxsd_output)))
+ index_xsd = ' '.join(list(itertools.chain.from_iterable(index_xsd))).replace(self.args.outputdir +'/','').replace('\\','/')
+ exe_string = '%s --noout --schema %s %s %s' % (self.args.xmllint,index_xsd,index_xml,redirx)
+ exe_string += ' %s more "%s/temp"' % (separ,xmlxsd_output)
+
+ xmllint_out = os.popen(exe_string).read()
+ if xmllint_out:
+ xmllint_out = re.sub(r'.*validates','',xmllint_out).rstrip('\n')
+ else:
+ msg += ('Failed to run %s with schema %s for files: %s' % (self.args.xmllint,index_xsd,index_xml),)
+ failed_xmlxsd=True
+ if xmllint_out:
+ msg += (xmllint_out,)
+ failed_xmlxsd=True
+ #
+ compound_xml = []
+ compound_xml.append(glob.glob('%s/*.xml' % (xmlxsd_output)))
+ compound_xml.append(glob.glob('%s/*/*/*.xml' % (xmlxsd_output)))
+ compound_xml = ' '.join(list(itertools.chain.from_iterable(compound_xml))).replace(self.args.outputdir +'/','').replace('\\','/')
+ compound_xml = re.sub(r' [^ ]*/index.xml','',compound_xml)
+ compound_xml = re.sub(r'[^ ]*/index.xml ','',compound_xml)
+
+ compound_xsd = []
+ compound_xsd.append(glob.glob('%s/compound.xsd' % (xmlxsd_output)))
+ compound_xsd.append(glob.glob('%s/*/*/compound.xsd' % (xmlxsd_output)))
+ compound_xsd = ' '.join(list(itertools.chain.from_iterable(compound_xsd))).replace(self.args.outputdir +'/','').replace('\\','/')
+ exe_string = '%s --noout --schema %s %s %s' % (self.args.xmllint,compound_xsd,compound_xml,redirx)
+ exe_string += ' %s more "%s/temp"' % (separ,xmlxsd_output)
+
+ xmllint_out = os.popen(exe_string).read()
+ if xmllint_out:
+ xmllint_out = re.sub(r'.*validates','',xmllint_out).rstrip('\n')
+ else:
+ msg += ('Failed to run %s with schema %s for files: %s' % (self.args.xmllint,compound_xsd,compound_xml),)
+ failed_xmlxsd=True
+ if xmllint_out:
+ msg += (xmllint_out,)
+ failed_xmlxsd=True
+
+ if not failed_xml and not failed_xmlxsd and not self.args.keep:
+ xml_output='%s/out' % self.test_out
+ shutil.rmtree(xml_output,ignore_errors=True)
if (self.args.rtf):
# no tests defined yet
@@ -282,7 +337,7 @@ class Tester:
elif not self.args.keep:
shutil.rmtree(latex_output,ignore_errors=True)
- if failed_xml or failed_html or failed_latex or failed_docbook or failed_rtf:
+ if failed_xml or failed_html or failed_latex or failed_docbook or failed_rtf or failed_xmlxsd:
testmgr.ok(False,self.test_name,msg)
return
@@ -374,6 +429,8 @@ def main():
'create docbook output and check with xmllint',action="store_true")
parser.add_argument('--xhtml',help=
'create xhtml output and check with xmllint',action="store_true")
+ parser.add_argument('--xmlxsd',help=
+ 'create xml output and check with xmllint against xsd',action="store_true")
parser.add_argument('--pdf',help='create LaTeX output and create pdf from it',
action="store_true")
parser.add_argument('--subdirs',help='use the configuration parameter CREATE_SUBDIRS=YES',
@@ -387,7 +444,7 @@ def main():
args = parser.parse_args(test_flags + sys.argv[1:])
# sanity check
- if (not args.xml) and (not args.pdf) and (not args.xhtml) and (not args.docbook and (not args.rtf)):
+ if (not args.xml) and (not args.pdf) and (not args.xhtml) and (not args.docbook and (not args.rtf) and (not args.xmlxsd)):
args.xml=True
if (not args.updateref is None) and (args.ids is None) and (args.all is None):
parser.error('--updateref requires either --id or --all')