summaryrefslogtreecommitdiffstats
path: root/Tools/msi/pip
ModeNameSize
-rw-r--r--pip.wixproj670logstatsplain
-rw-r--r--pip.wxs2069logstatsplain
-rw-r--r--pip_en-US.wxl335logstatsplain
da56d164b3944fd54d3d68f89'>6709ddc7b1764dc3b20bbac7eb36c05edcc91e03 /src parent1983c30b71bf92b3fa6bfedbb98451c3b7f74498 (diff)downloadDoxygen-0ce3aea886f4e95da56d164b3944fd54d3d68f89.zip
Doxygen-0ce3aea886f4e95da56d164b3944fd54d3d68f89.tar.gz
Doxygen-0ce3aea886f4e95da56d164b3944fd54d3d68f89.tar.bz2
Release-1.8.1.1
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp61
-rw-r--r--src/classdef.h114
-rw-r--r--src/classlist.h4
-rw-r--r--src/cmdmapper.cpp26
-rw-r--r--src/cmdmapper.h28
-rw-r--r--src/commentcnv.l5
-rw-r--r--src/commentscan.l30
-rw-r--r--src/compound.xsd2
-rw-r--r--src/compound_xsd.h2
-rw-r--r--src/config.h26
-rw-r--r--src/config.xml4
-rw-r--r--src/configoptions.cpp4
-rw-r--r--src/cppvalue.h3
-rw-r--r--src/dbusxmlscanner.cpp1
-rw-r--r--src/dbusxmlscanner.h2
-rw-r--r--src/debug.cpp2
-rw-r--r--src/debug.h1
-rw-r--r--src/define.h7
-rw-r--r--src/definition.cpp25
-rw-r--r--src/definition.h27
-rw-r--r--src/diagram.cpp102
-rw-r--r--src/diagram.h102
-rw-r--r--src/dirdef.cpp72
-rw-r--r--src/dirdef.h13
-rw-r--r--src/docparser.cpp35
-rw-r--r--src/docparser.h126
-rw-r--r--src/docsets.h3
-rw-r--r--src/doctokenizer.h1
-rw-r--r--src/doctokenizer.l2
-rw-r--r--src/dot.cpp2
-rw-r--r--src/dot.h24
-rw-r--r--src/doxygen.cpp101
-rw-r--r--src/doxygen.css27
-rw-r--r--src/doxygen.md59
-rw-r--r--src/doxygen_css.h27
-rw-r--r--src/eclipsehelp.h3
-rw-r--r--src/entry.h23
-rw-r--r--src/example.h2
-rw-r--r--src/filedef.cpp1
-rw-r--r--src/filedef.h28
-rw-r--r--src/filename.h5
-rw-r--r--src/formula.h4
-rw-r--r--src/fortrancode.l16
-rw-r--r--src/ftvhelp.cpp107
-rw-r--r--src/ftvhelp.h2
-rw-r--r--src/groupdef.h6
-rw-r--r--src/growbuf.h1
-rw-r--r--src/htags.h1
-rw-r--r--src/htmldocvisitor.cpp4
-rw-r--r--src/htmlgen.cpp20
-rw-r--r--src/htmlgen.h7
-rw-r--r--src/htmlhelp.cpp6
-rw-r--r--src/htmlhelp.h3
-rw-r--r--src/image.cpp1
-rw-r--r--src/image.h2
-rw-r--r--src/index.cpp158
-rw-r--r--src/index.h24
-rw-r--r--src/latexdocvisitor.cpp134
-rw-r--r--src/latexgen.h4
-rw-r--r--src/mangen.h4
-rw-r--r--src/markdown.cpp10
-rw-r--r--src/memberdef.cpp27
-rw-r--r--src/memberdef.h11
-rw-r--r--src/membergroup.h21
-rw-r--r--src/memberlist.cpp7
-rw-r--r--src/memberlist.h4
-rw-r--r--src/membername.h8
-rw-r--r--src/namespacedef.cpp4
-rw-r--r--src/namespacedef.h7
-rw-r--r--src/navtree.js48
-rw-r--r--src/navtree_js.h48
-rw-r--r--src/outputgen.h15
-rw-r--r--src/outputlist.cpp13
-rw-r--r--src/outputlist.h16
-rw-r--r--src/pagedef.h3
-rw-r--r--src/reflist.h6
-rw-r--r--src/rtfgen.h4
-rw-r--r--src/scanner.l78
-rw-r--r--src/searchindex.cpp5
-rw-r--r--src/section.h2
-rw-r--r--src/sortdict.h8
-rw-r--r--src/tagreader.cpp26
-rw-r--r--src/translator.h1
-rw-r--r--src/translator_adapter.h23
-rw-r--r--src/translator_id.h2
-rw-r--r--src/translator_sr.h2
-rw-r--r--src/translatordecoder.h1
-rw-r--r--src/util.cpp9
-rw-r--r--src/util.h5
-rw-r--r--src/vhdldocgen.cpp481
-rw-r--r--src/vhdldocgen.h21
-rw-r--r--src/vhdlparser.y36
-rw-r--r--src/vhdlscanner.h25
-rw-r--r--src/vhdlscanner.l127
-rw-r--r--src/xmlgen.cpp13
95 files changed, 1705 insertions, 1048 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 43ffdb5..1aa20e1 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -42,12 +42,7 @@
//-----------------------------------------------------------------------------
-//static inline MemberList *createNewMemberList(MemberList::ListType lt)
-//{
-// MemberList *result = new MemberList(lt);
-// return result;
-//}
-
+/** Private data associated with a ClassDef object. */
class ClassDefImpl
{
public:
@@ -296,7 +291,7 @@ QCString ClassDef::getMemberListFileName() const
return convertNameToFile(compoundTypeString()+name()+"-members");
}
-QCString ClassDef::displayName() const
+QCString ClassDef::displayName(bool includeScope) const
{
//static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
SrcLangExt lang = getLanguage();
@@ -308,7 +303,14 @@ QCString ClassDef::displayName() const
}
else
{
- n=qualifiedNameWithTemplateParameters();
+ if (includeScope)
+ {
+ n=qualifiedNameWithTemplateParameters();
+ }
+ else
+ {
+ n=className();
+ }
}
QCString sep=getLanguageSpecificSeparator(lang);
if (sep!="::")
@@ -3819,9 +3821,8 @@ int ClassDef::countInheritedDecMembersRec(MemberList::ListType lt,
MemberList *ml = icd->getMemberList((MemberList::ListType)lt1);
if (ml)
{
- //ml->countDecMembers();
- //count+=ml->numDecMembers();
- count+=ml->countInheritableMembers(inheritedFrom);
+ //count+=ml->countInheritableMembers(inheritedFrom);
+ count+=icd->countMembersIncludingGrouped((MemberList::ListType)lt1,inheritedFrom,TRUE);
count+=icd->countInheritedDecMembersRec((MemberList::ListType)lt1,inheritedFrom);
}
if (lt2!=-1)
@@ -3829,15 +3830,15 @@ int ClassDef::countInheritedDecMembersRec(MemberList::ListType lt,
ml = icd->getMemberList((MemberList::ListType)lt2);
if (ml)
{
- //ml->countDecMembers();
- //count+=ml->numDecMembers();
- count+=ml->countInheritableMembers(inheritedFrom);
+ //count+=ml->countInheritableMembers(inheritedFrom);
+ count+=icd->countMembersIncludingGrouped((MemberList::ListType)lt2,inheritedFrom,TRUE);
count+=icd->countInheritedDecMembersRec((MemberList::ListType)lt2,inheritedFrom);
}
}
ibcd=m_impl->inherits->next();
}
}
+#if 0
if (m_impl->memberGroupSDict)
{
MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
@@ -3850,6 +3851,7 @@ int ClassDef::countInheritedDecMembersRec(MemberList::ListType lt,
}
}
}
+#endif
return count;
}
@@ -3859,11 +3861,11 @@ int ClassDef::countInheritedDecMembers(MemberList::ListType lt)
MemberList *ml = getMemberList(lt);
if (ml)
{
- //ml->countDecMembers();
- //count = ml->numDecMembers();
- count=ml->countInheritableMembers(this);
+ count = ml->countInheritableMembers(this);
}
if (count==0) // for this class the member list is empty
+ // see if we need to create a section for it under
+ // Additional Inherited Members
{
count = countInheritedDecMembersRec(lt,this);
}
@@ -3897,7 +3899,7 @@ int ClassDef::countAdditionalInheritedMembers()
void ClassDef::writeAdditionalInheritedMembers(OutputList &ol)
{
- //printf("writeAdditionalInheritedMembers()\n");
+ //printf("**** writeAdditionalInheritedMembers()\n");
QListIterator<LayoutDocEntry> eli(
LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
LayoutDocEntry *lde;
@@ -3917,30 +3919,31 @@ void ClassDef::writeAdditionalInheritedMembers(OutputList &ol)
}
int ClassDef::countMembersIncludingGrouped(MemberList::ListType lt,
- ClassDef *inheritedFrom)
+ ClassDef *inheritedFrom,bool additional)
{
int count=0;
MemberList *ml = getMemberList(lt);
if (ml)
{
- //ml->countDecMembers();
- //count=ml->numDecMembers();
count=ml->countInheritableMembers(inheritedFrom);
}
+ //printf("%s:countMembersIncludingGrouped: count=%d\n",name().data(),count);
if (m_impl->memberGroupSDict)
{
MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
- if (!mg->allMembersInSameSection() || !m_impl->subGrouping) // group is in its own section
+ bool hasOwnSection = !mg->allMembersInSameSection() ||
+ !m_impl->subGrouping; // group is in its own section
+ if ((additional && hasOwnSection) || (!additional && !hasOwnSection))
{
count+=mg->countGroupedInheritedMembers(lt);
}
}
}
- //printf("%s:countMembersIncludingGrouped(%s)=%d\n",
- // name().data(),ml?ml->listTypeAsString().data():"<none>",count);
+ //printf("%s:countMembersIncludingGrouped(lt=%d,%s)=%d\n",
+ // name().data(),lt,ml?ml->listTypeAsString().data():"<none>",count);
return count;
}
@@ -3951,7 +3954,9 @@ void ClassDef::writeInheritedMemberDeclarations(OutputList &ol,
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- bool process = countMembersIncludingGrouped(lt,inheritedFrom)>0;
+ bool process = countMembersIncludingGrouped(lt,inheritedFrom,FALSE)>0;
+ //printf("%s: writeInheritedMemberDec: lt=%d process=%d invert=%d\n",
+ // name().data(),lt,process,invert);
if (process^invert)
{
if (m_impl->inherits)
@@ -3964,7 +3969,10 @@ void ClassDef::writeInheritedMemberDeclarations(OutputList &ol,
int lt1,lt2;
convertProtectionLevel(lt,ibcd->prot,&lt1,&lt2);
//printf("%s:convert %d->(%d,%d)\n",icd->name().data(),lt,lt1,lt2);
- if (visitedClasses->find(icd)!=0) return;
+ if (visitedClasses->find(icd)!=0)
+ {
+ return; // already processed before (in case of multiple inheritance)
+ }
visitedClasses->insert(icd,icd);
if (lt1!=-1)
{
@@ -4024,7 +4032,6 @@ void ClassDef::addGroupedInheritedMembers(OutputList &ol,MemberList::ListType lt
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
- //printf(" candidate %s\n",mg->header().data());
if (!mg->allMembersInSameSection() || !m_impl->subGrouping) // group is in its own section
{
mg->addGroupedInheritedMembers(ol,this,lt,inheritedFrom,inheritId);
diff --git a/src/classdef.h b/src/classdef.h
index 246404c..e7d5fb5 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -48,7 +48,7 @@ class StringDict;
struct IncludeInfo;
class ClassDefImpl;
-/*! \brief This class contains all information about a compound.
+/** A model of a compound symbol.
*
* A compound can be a class, struct, union, interface, or exception.
* \note This class should be renamed to CompoundDef
@@ -56,7 +56,7 @@ class ClassDefImpl;
class ClassDef : public Definition
{
public:
- /*! The various compound types */
+ /** The various compound types */
enum CompoundType { Class, //=Entry::CLASS_SEC,
Struct, //=Entry::STRUCT_SEC,
Union, //=Entry::UNION_SEC,
@@ -66,7 +66,7 @@ class ClassDef : public Definition
Exception //=Entry::EXCEPTION_SEC
};
- /*! Creates a new compound definition.
+ /** 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
@@ -88,121 +88,121 @@ class ClassDef : public Definition
const char *name,CompoundType ct,
const char *ref=0,const char *fName=0,
bool isSymbol=TRUE,bool isJavaEnum=FALSE);
- /*! Destroys a compound definition. */
+ /** Destroys a compound definition. */
~ClassDef();
//-----------------------------------------------------------------------------------
// --- getters
//-----------------------------------------------------------------------------------
- /*! Used for RTTI, this is a class */
+ /** Used for RTTI, this is a class */
DefType definitionType() const { return TypeClass; }
- /*! Returns the unique base name (without extension) of the class's file on disk */
+ /** Returns the unique base name (without extension) of the class's file on disk */
QCString getOutputFileBase() const;
QCString getInstanceOutputFileBase() const;
QCString getFileBase() const;
- /*! Returns the base name for the source code file */
+ /** Returns the base name for the source code file */
QCString getSourceFileBase() const;
- /*! If this class originated from a tagfile, this will return the tag file reference */
+ /** If this class originated from a tagfile, this will return the tag file reference */
QCString getReference() const;
- /*! Returns TRUE if this class is imported via a tag file */
+ /** Returns TRUE if this class is imported via a tag file */
bool isReference() const;
- /*! Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES */
+ /** Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES */
bool isLocal() const;
- /*! returns the classes nested into this class */
+ /** returns the classes nested into this class */
ClassSDict *getClassSDict();
- /*! returns TRUE if this class has documentation */
+ /** returns TRUE if this class has documentation */
bool hasDocumentation() const;
- /*! Returns the name as it is appears in the documentation */
- QCString displayName() const;
+ /** Returns the name as it is appears in the documentation */
+ QCString displayName(bool includeScope=TRUE) const;
- /*! Returns the type of compound this is, i.e. class/struct/union/.. */
+ /** Returns the type of compound this is, i.e. class/struct/union/.. */
CompoundType compoundType() const;
- /*! Returns the type of compound as a string */
+ /** Returns the type of compound as a string */
QCString compoundTypeString() const;
- /*! Returns the list of base classes from which this class directly
+ /** Returns the list of base classes from which this class directly
* inherits.
*/
BaseClassList *baseClasses() const;
- /*! Returns the list of sub classes that directly derive from this class
+ /** Returns the list of sub classes that directly derive from this class
*/
BaseClassList *subClasses() const;
- /*! 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;
- /*! 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;
- /*! returns TRUE iff a link is possible to this item within this project.
+ /** returns TRUE iff a link is possible to this item within this project.
*/
bool isLinkableInProject() const;
- /*! 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;
- /*! the class is visible in a class diagram, or class hierarchy */
+ /** the class is visible in a class diagram, or class hierarchy */
bool isVisibleInHierarchy();
- /*! Returns the template arguments of this class
+ /** Returns the template arguments of this class
* Will return 0 if not applicable.
*/
ArgumentList *templateArguments() const;
- /*! Returns the namespace this compound is in, or 0 if it has a global
+ /** Returns the namespace this compound is in, or 0 if it has a global
* scope.
*/
NamespaceDef *getNamespaceDef() const;
- /*! Returns the file in which this compound's definition can be found.
+ /** 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;
- /*! 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.
*/
MemberDef *getMemberByName(const QCString &) const;
- /*! Returns TRUE iff \a bcd is a direct or indirect base class of this
+ /** Returns TRUE iff \a bcd is a direct or indirect base class of this
* class. This function will recusively traverse all branches of the
* inheritance tree.
*/
bool isBaseClass(ClassDef *bcd,bool followInstances,int level=0);
- /*! returns TRUE iff \a md is a member of this class or of the
+ /** returns TRUE iff \a md is a member of this class or of the
* the public/protected members of a base class
*/
bool isAccessibleMember(MemberDef *md);
- /*! Returns a sorted dictionary with all template instances found for
+ /** 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;
- /*! Returns the template master of which this class is an instance.
+ /** Returns the template master of which this class is an instance.
* Returns 0 if not applicable.
*/
ClassDef *templateMaster() const;
- /*! Returns TRUE if this class is a template */
+ /** Returns TRUE if this class is a template */
bool isTemplate() const;
IncludeInfo *includeInfo() const;
@@ -215,13 +215,13 @@ class ClassDef : public Definition
bool isTemplateArgument() const;
- /*! Returns the definition of a nested compound if
+ /** 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);
- /*! Returns the template parameter lists that form the template
+ /** Returns the template parameter lists that form the template
* declaration of this class.
*
* Example: <code>template<class T> class TC {};</code>
@@ -233,32 +233,32 @@ class ClassDef : public Definition
QCString qualifiedNameWithTemplateParameters(
QList<ArgumentList> *actualParams=0) const;
- /*! Returns TRUE if there is at least one pure virtual member in this
+ /** Returns TRUE if there is at least one pure virtual member in this
* class.
*/
bool isAbstract() const;
- /*! Returns TRUE if this class is implemented in Objective-C */
+ /** Returns TRUE if this class is implemented in Objective-C */
bool isObjectiveC() const;
- /*! Returns TRUE if this class is implemented in C# */
+ /** Returns TRUE if this class is implemented in C# */
bool isCSharp() const;
- /*! Returns the class of which this is a category (Objective-C only) */
+ /** Returns the class of which this is a category (Objective-C only) */
ClassDef *categoryOf() const;
- /*! Returns the name of the class including outer classes, but not
+ /** Returns the name of the class including outer classes, but not
* including namespaces.
*/
QCString className() const;
- /*! Returns the members in the list identified by \a lt */
+ /** Returns the members in the list identified by \a lt */
MemberList *getMemberList(MemberList::ListType lt);
- /*! Returns the list containing the list of members sorted per type */
+ /** Returns the list containing the list of members sorted per type */
const QList<MemberList> &getMemberLists() const;
- /*! Returns the member groups defined for this class */
+ /** Returns the member groups defined for this class */
MemberGroupSDict *getMemberGroupSDict() const;
QDict<int> *getTemplateBaseClassNames() const;
@@ -342,6 +342,7 @@ class ClassDef : public Definition
void removeMemberFromLists(MemberDef *md);
void addGroupedInheritedMembers(OutputList &ol,MemberList::ListType lt,
ClassDef *inheritedFrom,const QCString &inheritId);
+ int countMembersIncludingGrouped(MemberList::ListType lt,ClassDef *inheritedFrom,bool additional);
bool visited;
@@ -386,13 +387,12 @@ class ClassDef : public Definition
int countInheritedDecMembers(MemberList::ListType lt);
int countAdditionalInheritedMembers();
void writeAdditionalInheritedMembers(OutputList &ol);
- int countMembersIncludingGrouped(MemberList::ListType lt,ClassDef *inheritedFrom);
ClassDefImpl *m_impl;
};
-/*! \brief Class that contains information about a usage relation.
+/** Class that contains information about a usage relation.
*/
struct UsesClassDef
{
@@ -412,21 +412,21 @@ struct UsesClassDef
accessors->insert(s,(void *)666);
}
}
- /*! Class definition that this relation uses. */
+ /** Class definition that this relation uses. */
ClassDef *classDef;
- /*! Dictionary of member variable names that form the edge labels of the
+ /** Dictionary of member variable names that form the edge labels of the
* usage relation.
*/
QDict<void> *accessors;
- /*! Template arguments used for the base class */
+ /** Template arguments used for the base class */
QCString templSpecifiers;
bool containment;
};
-/*! \brief Dictionary of usage relations.
+/** Dictionary of usage relations.
*/
class UsesClassDict : public QDict<UsesClassDef>
{
@@ -435,7 +435,7 @@ class UsesClassDict : public QDict<UsesClassDef>
~UsesClassDict() {}
};
-/*! \brief Iterator class to iterate over a dictionary of usage relations.
+/** Iterator class to iterate over a dictionary of usage relations.
*/
class UsesClassDictIterator : public QDictIterator<UsesClassDef>
{
@@ -445,7 +445,7 @@ class UsesClassDictIterator : public QDictIterator<UsesClassDef>
~UsesClassDictIterator() {}
};
-/*! \brief Class that contains information about an inheritance relation.
+/** Class that contains information about an inheritance relation.
*/
struct BaseClassDef
{
@@ -453,29 +453,29 @@ struct BaseClassDef
Specifier v,const char *t) :
classDef(cd), usedName(n), prot(p), virt(v), templSpecifiers(t) {}
- /*! Class definition that this relation inherits from. */
+ /** Class definition that this relation inherits from. */
ClassDef *classDef;
- /*! name used in the inheritance list
+ /** name used in the inheritance list
* (may be a typedef name instead of the class name)
*/
QCString usedName;
- /*! Protection level of the inheritance relation:
+ /** Protection level of the inheritance relation:
* Public, Protected, or Private
*/
Protection prot;
- /*! Virtualness of the inheritance relation:
+ /** Virtualness of the inheritance relation:
* Normal, or Virtual
*/
Specifier virt;
- /*! Template arguments used for the base class */
+ /** Template arguments used for the base class */
QCString templSpecifiers;
};
-/*! \brief list of base classes
+/** List of base classes.
*
* The classes are alphabetically sorted on name if inSort() is used.
*/
@@ -494,7 +494,7 @@ class BaseClassList : public QList<BaseClassDef>
}
};
-/*! \brief Iterator for a list of base classes
+/** Iterator for a list of base classes.
*/
class BaseClassListIterator : public QListIterator<BaseClassDef>
{
diff --git a/src/classlist.h b/src/classlist.h
index 9b76c39..71a62b6 100644
--- a/src/classlist.h
+++ b/src/classlist.h
@@ -26,6 +26,7 @@
class Definition;
+/** A list of ClassDef objects. */
class ClassList : public QList<ClassDef>
{
public:
@@ -35,12 +36,14 @@ class ClassList : public QList<ClassDef>
int compareItems(GCI item1,GCI item2);
};
+/** An iterator for ClassDef objects in a ClassList. */
class ClassListIterator : public QListIterator<ClassDef>
{
public:
ClassListIterator(const ClassList &list);
};
+/** An unsorted dictionary of ClassDef objects. */
class ClassDict : public QDict<ClassDef>
{
public:
@@ -48,6 +51,7 @@ class ClassDict : public QDict<ClassDef>
~ClassDict() {}
};
+/** A sorted dictionary of ClassDef objects. */
class ClassSDict : public SDict<ClassDef>
{
public:
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index c4379e3..9a723c2 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -18,6 +18,13 @@
#include "cmdmapper.h"
+/** Call representing a mapping from a command name to a command ID. */
+struct CommandMap
+{
+ const char *cmdName;
+ int cmdId;
+};
+
CommandMap cmdMap[] =
{
{ "a", CMD_EMPHASIS },
@@ -198,6 +205,25 @@ CommandMap htmlTagMap[] =
Mapper *Mappers::cmdMapper = new Mapper(cmdMap,TRUE);
Mapper *Mappers::htmlTagMapper = new Mapper(htmlTagMap,FALSE);
+int Mapper::map(const char *n)
+{
+ QCString name=n;
+ if (!m_cs) name=name.lower();
+ int *result;
+ return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
+}
+
+Mapper::Mapper(const CommandMap *cm,bool caseSensitive) : m_map(89), m_cs(caseSensitive)
+{
+ m_map.setAutoDelete(TRUE);
+ const CommandMap *p = cm;
+ while (p->cmdName)
+ {
+ m_map.insert(p->cmdName,new int(p->cmdId));
+ p++;
+ }
+}
+
void Mappers::freeMappers()
{
delete cmdMapper; cmdMapper = 0;
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index deb5f50..c53e2b1 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -21,11 +21,7 @@
#include <qdict.h>
-struct CommandMap
-{
- const char *cmdName;
- int cmdId;
-};
+struct CommandMap;
const int SIMPLESECT_BIT = 0x1000;
@@ -187,32 +183,18 @@ enum HtmlTagType
XML_INHERITDOC = XML_CmdMask + 22
};
+/** Class representing a mapping from command names to command IDs. */
class Mapper
{
public:
- int map(const char *n)
- {
- QCString name=n;
- if (!m_cs) name=name.lower();
- int *result;
- return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
- }
-
- Mapper(const CommandMap *cm,bool caseSensitive) : m_map(89), m_cs(caseSensitive)
- {
- m_map.setAutoDelete(TRUE);
- const CommandMap *p = cm;
- while (p->cmdName)
- {
- m_map.insert(p->cmdName,new int(p->cmdId));
- p++;
- }
- }
+ int map(const char *n);
+ Mapper(const CommandMap *cm,bool caseSensitive);
private:
QDict<int> m_map;
bool m_cs;
};
+/** Class representing a namespace for the doxygen and HTML command mappers. */
struct Mappers
{
static void freeMappers();
diff --git a/src/commentcnv.l b/src/commentcnv.l
index f986531..689c274 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -107,12 +107,13 @@ static void replaceCommentMarker(const char *s,int len)
}
if (blanks>0)
{
- while (blanks>1)
+ while (blanks>2)
{
ADDCHAR(' ');
blanks--;
}
- ADDCHAR('*');
+ if (blanks>1) ADDCHAR('*');
+ ADDCHAR(' ');
}
// copy comment line to output
ADDARRAY(p,len-(p-s));
diff --git a/src/commentscan.l b/src/commentscan.l
index c7e36a5..26c381f 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -957,11 +957,18 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
<Comment>"<summary>" { // start of a .NET XML style brief description
setOutput(OutputBrief);
+ addOutput(yytext);
+ }
+<Comment>"<remarks>" { // start of a .NET XML style detailed description
+ setOutput(OutputDoc);
+ addOutput(yytext);
}
-<Comment>"<remarks>"|"</summary>" { // start of a .NET XML style detailed description
+<Comment>"</summary>" { // start of a .NET XML style detailed description
+ addOutput(yytext);
setOutput(OutputDoc);
}
<Comment>"</remarks>" { // end of a brief or detailed description
+ addOutput(yytext);
}
<Comment>{RCSTAG} { // RCS tag which end a brief description
setOutput(OutputDoc);
@@ -988,6 +995,9 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
// this command forces the end of brief description
setOutput(OutputDoc);
}
+ int i=0;
+ while (yytext[i]==' ' || yytext[i]=='\t') i++;
+ if (i>0) addOutput(QCString(yytext).left(i));
if (cmdPtr->func && cmdPtr->func(cmdName))
{
// implicit split of the comment block into two
@@ -1010,7 +1020,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
{
// command without handler, to be processed
// later by parsedoc.cpp
- addOutput(yytext);
+ addOutput(yytext+i);
}
}
else // command not relevant
@@ -1315,7 +1325,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<ClassDocArg2>. { // ignore other stuff
}
-<ClassDocArg3>[<]?{FILE}?[>]? { // third argument; include file name
+<ClassDocArg3>[<"]?{FILE}?[">]? { // third argument; include file name
current->includeName = yytext;
BEGIN( Comment );
}
@@ -2331,7 +2341,7 @@ static bool handleMemberOf(const QCString &)
static bool handleRefItem(const QCString &)
{
- addOutput(" @refitem ");
+ addOutput("@refitem ");
BEGIN(LineParam);
return FALSE;
}
@@ -2339,7 +2349,7 @@ static bool handleRefItem(const QCString &)
static bool handleSection(const QCString &s)
{
setOutput(OutputDoc);
- addOutput(" @"+s+" ");
+ addOutput("@"+s+" ");
BEGIN(SectionLabel);
if (s=="section") g_sectionLevel=1;
else if (s=="subsection") g_sectionLevel=2;
@@ -2358,28 +2368,28 @@ static bool handleSubpage(const QCString &s)
warn(yyFileName,yyLineNr,
"warning: found \\subpage command in a comment block that is not marked as a page!");
}
- addOutput(" @"+s+" ");
+ addOutput("@"+s+" ");
BEGIN(SubpageLabel);
return FALSE;
}
static bool handleAnchor(const QCString &s)
{
- addOutput(" @"+s+" ");
+ addOutput("@"+s+" ");
BEGIN(AnchorLabel);
return FALSE;
}
static bool handleCite(const QCString &s)
{
- addOutput(" @"+s+" ");
+ addOutput("@"+s+" ");
BEGIN(CiteLabel);
return FALSE;
}
static bool handleFormatBlock(const QCString &s)
{
- addOutput(" @"+s+" ");
+ addOutput("@"+s+" ");
//printf("handleFormatBlock(%s)\n",s.data());
blockName=s;
g_commentCount=0;
@@ -2389,7 +2399,7 @@ static bool handleFormatBlock(const QCString &s)
static bool handleAddIndex(const QCString &)
{
- addOutput(" @addindex ");
+ addOutput("@addindex ");
BEGIN(LineParam);
return FALSE;
}
diff --git a/src/compound.xsd b/src/compound.xsd
index 406f6f5..4007382 100644
--- a/src/compound.xsd
+++ b/src/compound.xsd
@@ -825,6 +825,8 @@
<xsd:enumeration value="retain"/>
<xsd:enumeration value="copy"/>
<xsd:enumeration value="assign"/>
+ <xsd:enumeration value="weak"/>
+ <xsd:enumeration value="strong"/>
</xsd:restriction>
</xsd:simpleType>
diff --git a/src/compound_xsd.h b/src/compound_xsd.h
index 5e04417..eb4d978 100644
--- a/src/compound_xsd.h
+++ b/src/compound_xsd.h
@@ -825,6 +825,8 @@
" <xsd:enumeration value=\"retain\"/>\n"
" <xsd:enumeration value=\"copy\"/>\n"
" <xsd:enumeration value=\"assign\"/>\n"
+" <xsd:enumeration value=\"weak\"/>\n"
+" <xsd:enumeration value=\"strong\"/>\n"
" </xsd:restriction>\n"
" </xsd:simpleType>\n"
"\n"
diff --git a/src/config.h b/src/config.h
index ccbf713..d18e87d 100644
--- a/src/config.h
+++ b/src/config.h
@@ -27,8 +27,7 @@
#include "ftextstream.h"
-/*! \brief Abstract base class for any configuration option.
- *
+/** Abstract base class for any configuration option.
*/
class ConfigOption
{
@@ -92,8 +91,7 @@ class ConfigOption
OptionType m_kind;
};
-/*! \brief Section marker for grouping the configuration options
- *
+/** Section marker for grouping the configuration options.
*/
class ConfigInfo : public ConfigOption
{
@@ -117,8 +115,7 @@ class ConfigInfo : public ConfigOption
void substEnvVars() {}
};
-/*! \brief Option of the list type.
- *
+/** Class respresenting a list type option.
*/
class ConfigList : public ConfigOption
{
@@ -155,8 +152,7 @@ class ConfigList : public ConfigOption
WidgetType m_widgetType;
};
-/*! \brief Option of the enum type.
- *
+/** Class representing an enum type option.
*/
class ConfigEnum : public ConfigOption
{
@@ -197,8 +193,7 @@ class ConfigEnum : public ConfigOption
QCString m_defValue;
};
-/*! \brief Option of the string type.
- *
+/** Class representing a string type option.
*/
class ConfigString : public ConfigOption
{
@@ -240,8 +235,7 @@ class ConfigString : public ConfigOption
WidgetType m_widgetType;
};
-/*! \brief Option of the integer type.
- *
+/** Class representing an integer type option.
*/
class ConfigInt : public ConfigOption
{
@@ -291,8 +285,7 @@ class ConfigInt : public ConfigOption
QCString m_valueString;
};
-/*! \brief Option of the boolean type.
- *
+/** Class representing a Boolean type option.
*/
class ConfigBool : public ConfigOption
{
@@ -337,8 +330,7 @@ class ConfigBool : public ConfigOption
QCString m_valueString;
};
-/*! \brief Section marker for obsolete options
- *
+/** Section marker for obsolete options
*/
class ConfigObsolete : public ConfigOption
{
@@ -358,7 +350,7 @@ class ConfigObsolete : public ConfigOption
#define Config_getEnum(val) Config::instance()->getEnum(__FILE__,__LINE__,val)
#define Config_getBool(val) Config::instance()->getBool(__FILE__,__LINE__,val)
-/*! \brief Singleton for configuration variables.
+/** Singleton for configuration variables.
*
* This object holds the global static variables
* read from a user-supplied configuration file.
diff --git a/src/config.xml b/src/config.xml
index e455ffd..b59b213 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -541,7 +541,7 @@ is used as the file version. See the manual for examples.
<option type='string' id='LAYOUT_FILE' format='file' docs='
The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
by doxygen. The layout file controls the global structure of the generated
-output files in an output format independent way. The create the layout file
+output files in an output format independent way. To create the layout file
that represents doxygen&apos;s defaults, run doxygen with the -l option.
You can optionally specify a file name after the option, if omitted
DoxygenLayout.xml will be used as the name of the layout file.
@@ -763,7 +763,7 @@ of functions and classes directly in the documentation.
<option type='bool' id='STRIP_CODE_COMMENTS' docs='
Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
doxygen to hide any special comment blocks from generated source code
-fragments. Normal C and C++ comments will always remain visible.
+fragments. Normal C, C++ and Fortran comments will always remain visible.
' defval='1'/>
<option type='bool' id='REFERENCED_BY_RELATION' docs='
If the REFERENCED_BY_RELATION tag is set to YES
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index 9ae97af..462de19 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -778,7 +778,7 @@ void addConfigOptions(Config *cfg)
"LAYOUT_FILE",
"The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n"
"by doxygen. The layout file controls the global structure of the generated\n"
- "output files in an output format independent way. The create the layout file\n"
+ "output files in an output format independent way. To create the layout file\n"
"that represents doxygen's defaults, run doxygen with the -l option.\n"
"You can optionally specify a file name after the option, if omitted\n"
"DoxygenLayout.xml will be used as the name of the layout file."
@@ -1076,7 +1076,7 @@ void addConfigOptions(Config *cfg)
"STRIP_CODE_COMMENTS",
"Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct\n"
"doxygen to hide any special comment blocks from generated source code\n"
- "fragments. Normal C and C++ comments will always remain visible.",
+ "fragments. Normal C, C++ and Fortran comments will always remain visible.",
TRUE
);
//----
diff --git a/src/cppvalue.h b/src/cppvalue.h
index d3e2a1d..7289ce0 100644
--- a/src/cppvalue.h
+++ b/src/cppvalue.h
@@ -22,11 +22,10 @@
#include <stdio.h>
#include <qglobal.h>
+/** A class representing a C-preprocessor value. */
class CPPValue
{
public:
-
-
enum Type { Int, Float };
CPPValue(long val=0) : type(Int) { v.l = val; }
diff --git a/src/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp
index f116d5e..ddfe9ac 100644
--- a/src/dbusxmlscanner.cpp
+++ b/src/dbusxmlscanner.cpp
@@ -64,6 +64,7 @@
const QString EXTENSION_URI("http://psiamp.org/dtd/doxygen_dbusxml.dtd");
+/** DBus implementation of the generic QXmlDefaultHandler. */
class DBusXMLHandler : public QXmlDefaultHandler
{
public:
diff --git a/src/dbusxmlscanner.h b/src/dbusxmlscanner.h
index fd48cbc..545071c 100644
--- a/src/dbusxmlscanner.h
+++ b/src/dbusxmlscanner.h
@@ -20,7 +20,7 @@
#include "parserintf.h"
-/** \brief D-Bus XML parser.
+/** D-Bus XML parser.
*
* This is the D-Bus XML parser for doxygen.
*/
diff --git a/src/debug.cpp b/src/debug.cpp
index 1c3c1c1..8757be2 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -25,6 +25,7 @@
//------------------------------------------------------------------------
+/** Helper struct representing a mapping from debug label to a debug ID */
struct LabelMap
{
const char *name;
@@ -49,6 +50,7 @@ static LabelMap s_labels[] =
{ 0, (Debug::DebugMask)0 }
};
+/** Class representing a mapping from debug labels to debug IDs. */
class LabelMapper
{
public:
diff --git a/src/debug.h b/src/debug.h
index f624628..c3d78de 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -19,6 +19,7 @@
#ifndef _DEBUG_H
#define _DEBUG_H
+/** Class containing a print function for diagnostics. */
class Debug
{
public:
diff --git a/src/define.h b/src/define.h
index b5e4f6e..6579403 100644
--- a/src/define.h
+++ b/src/define.h
@@ -24,6 +24,7 @@
class FileDef;
+/** A class representing a macro definition. */
class Define
{
public:
@@ -47,6 +48,7 @@ class Define
bool nonRecursive;
};
+/** A list of Define objects. */
class DefineList : public QList<Define>
{
public:
@@ -58,6 +60,7 @@ class DefineList : public QList<Define>
}
};
+/** A list of Define objects associated with a specific name. */
class DefineName : public QList<Define>
{
public:
@@ -73,6 +76,7 @@ class DefineName : public QList<Define>
QCString name;
};
+/** A list of DefineName objects. */
class DefineNameList : public QList<DefineName>
{
public:
@@ -85,7 +89,10 @@ class DefineNameList : public QList<DefineName>
}
};
+/** An unsorted dictionary of Define objects. */
typedef QDict<Define> DefineDict;
+
+/** A sorted dictionary of DefineName object. */
typedef QDict<DefineName> DefineNameDict;
#endif
diff --git a/src/definition.cpp b/src/definition.cpp
index e1f7d60..1631c16 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -44,6 +44,8 @@
//-----------------------------------------------------------------------------------------
+
+/** Private data associated with a Definition object. */
class DefinitionImpl
{
public:
@@ -669,6 +671,7 @@ static bool readCodeFragment(const char *fileName,
int &startLine,int &endLine,QCString &result)
{
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
+ static int tabSize = Config_getInt("TAB_SIZE");
//printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
QCString filter = getFileFilter(fileName,TRUE);
@@ -717,7 +720,7 @@ static bool readCodeFragment(const char *fileName,
}
else if (c=='\t')
{
- col+=Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
+ col+=tabSize - (col%tabSize);
}
else if (pc=='/' && c=='/') // skip single line comment
{
@@ -1448,12 +1451,12 @@ QCString Definition::navigationPathAsString() const
{
if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
{
- result+="<a class=\"el\" href=\""+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
+ result+="<a class=\"el\" href=\"$relpath$"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
((const GroupDef*)this)->groupTitle()+"</a>";
}
else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty())
{
- result+="<a class=\"el\" href=\""+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
+ result+="<a class=\"el\" href=\"$relpath$"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
((const PageDef*)this)->title()+"</a>";
}
else if (definitionType()==Definition::TypeClass)
@@ -1463,13 +1466,13 @@ QCString Definition::navigationPathAsString() const
{
name = name.left(name.length()-2);
}
- result+="<a class=\"el\" href=\""+getOutputFileBase()+Doxygen::htmlFileExtension;
+ result+="<a class=\"el\" href=\"$relpath$"+getOutputFileBase()+Doxygen::htmlFileExtension;
if (!anchor().isEmpty()) result+="#"+anchor();
result+="\">"+name+"</a>";
}
else
{
- result+="<a class=\"el\" href=\""+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
+ result+="<a class=\"el\" href=\"$relpath$"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
m_impl->localName+"</a>";
}
}
@@ -1486,11 +1489,13 @@ void Definition::writeNavigationPath(OutputList &ol) const
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- ol.writeString("<div id=\"nav-path\" class=\"navpath\">\n");
- ol.writeString(" <ul>\n");
- ol.writeString(navigationPathAsString());
- ol.writeString(" </ul>\n");
- ol.writeString("</div>\n");
+ QCString navPath;
+ navPath += "<div id=\"nav-path\" class=\"navpath\">\n"
+ " <ul>\n";
+ navPath += navigationPathAsString();
+ navPath += " </ul>\n"
+ "</div>\n";
+ ol.writeNavigationPath(navPath);
ol.popGeneratorState();
}
diff --git a/src/definition.h b/src/definition.h
index 116208c..33a5bbb 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -38,15 +38,7 @@ struct SectionInfo;
class Definition;
class DefinitionImpl;
-#if 0
-struct ReachableDefinition
-{
- ReachableDefinition(Definition *d,int dist) : def(d), distance(dist) {}
- Definition *def;
- int distance;
-};
-#endif
-
+/** Data associated with a detailed description. */
struct DocInfo
{
QCString doc;
@@ -54,6 +46,7 @@ struct DocInfo
QCString file;
};
+/** Data associated with a brief description. */
struct BriefInfo
{
QCString doc;
@@ -62,14 +55,15 @@ struct BriefInfo
QCString file;
};
+/** Data associated with description found in the body. */
struct BodyInfo
{
- int startLine; // line number of the start of the definition
- int endLine; // line number of the end of the definition
- FileDef *fileDef; // file definition containing the function body
+ int startLine; //!< line number of the start of the definition
+ int endLine; //!< line number of the end of the definition
+ FileDef *fileDef; //!< file definition containing the function body
};
-/*! Abstract interface for a Definition or DefinitionList */
+/** Abstract interface for a Definition or DefinitionList */
class DefinitionIntf
{
public:
@@ -92,7 +86,8 @@ class DefinitionIntf
virtual DefType definitionType() const = 0;
};
-/*! The common base class of all entity definitions found in the sources.
+/** The common base class of all entity definitions found in the sources.
+ *
* This can be a class or a member function, or a file, or a namespace, etc.
* Use definitionType() to find which type of definition this is.
*/
@@ -117,7 +112,7 @@ class Definition : public DefinitionIntf, public LockableObj
const QCString& name() const { return m_name; }
/*! Returns the name of the definition as it appears in the output */
- virtual QCString displayName() const = 0;
+ virtual QCString displayName(bool includeScope=TRUE) const = 0;
/*! Returns the local name without any scope qualifiers. */
QCString localName() const;
@@ -362,6 +357,7 @@ class Definition : public DefinitionIntf, public LockableObj
int m_defLine;
};
+/** A list of Definition objects. */
class DefinitionList : public QList<Definition>, public DefinitionIntf
{
public:
@@ -376,6 +372,7 @@ class DefinitionList : public QList<Definition>, public DefinitionIntf
};
+/** An iterator for Definition objects in a DefinitionList. */
class DefinitionListIterator : public QListIterator<Definition>
{
public:
diff --git a/src/diagram.cpp b/src/diagram.cpp
index 07fb4aa..fe6f1f5 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -36,6 +36,108 @@
//-----------------------------------------------------------------------------
+class DiagramItemList;
+
+/** Class representing a single node in the built-in class diagram */
+class DiagramItem
+{
+ public:
+ DiagramItem(DiagramItem *p,int number,ClassDef *cd,
+ Protection prot,Specifier virt,const char *ts);
+ ~DiagramItem();
+ QCString label() const;
+ QCString fileName() const;
+ DiagramItem *parentItem() { return parent; }
+ DiagramItemList *getChildren() { return children; }
+ void move(int dx,int dy) { x+=dx; y+=dy; }
+ int xPos() const { return x; }
+ int yPos() const { return y; }
+ int avgChildPos() const;
+ int numChildren() const;
+ void addChild(DiagramItem *di);
+ int number() const { return num; }
+ Protection protection() const { return prot; }
+ Specifier virtualness() const { return virt; }
+ void putInList() { inList=TRUE; }
+ bool isInList() const { return inList; }
+ ClassDef *getClassDef() const { return classDef; }
+ private:
+ DiagramItemList *children;
+ DiagramItem *parent;
+ int x,y;
+ int num;
+ Protection prot;
+ Specifier virt;
+ QCString templSpec;
+ bool inList;
+ ClassDef *classDef;
+};
+
+/** Class representing a list of DiagramItem object. */
+class DiagramItemList : public QList<DiagramItem>
+{
+ public:
+ DiagramItemList() : QList<DiagramItem>() {}
+ ~DiagramItemList() {}
+};
+
+/** Class representing a row in the built-in class diagram */
+class DiagramRow : public QList<DiagramItem>
+{
+ public:
+ DiagramRow(TreeDiagram *d,int l) : QList<DiagramItem>()
+ {
+ diagram=d;
+ level=l;
+ setAutoDelete(TRUE);
+ }
+ void insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
+ Protection prot,Specifier virt,const char *ts);
+ uint number() { return level; }
+ private:
+ TreeDiagram *diagram;
+ uint level;
+};
+
+/** Class representing iterator for the rows in the built-in class diagram. */
+class DiagramRowIterator : public QListIterator<DiagramRow>
+{
+ public:
+ DiagramRowIterator(const QList<DiagramRow> &d)
+ : QListIterator<DiagramRow>(d) {}
+};
+
+/** Class represeting the tree layout for the built-in class diagram. */
+class TreeDiagram : public QList<DiagramRow>
+{
+ public:
+ TreeDiagram(ClassDef *root,bool doBases);
+ ~TreeDiagram();
+ void computeLayout();
+ uint computeRows();
+ //uint computeCols();
+ void moveChildren(DiagramItem *root,int dx);
+ void computeExtremes(uint *labelWidth,uint *xpos);
+ void drawBoxes(FTextStream &t,Image *image,
+ bool doBase,bool bitmap,
+ uint baseRows,uint superRows,
+ uint cellWidth,uint cellHeight,
+ QCString relPath="",
+ bool generateMap=TRUE);
+ void drawConnectors(FTextStream &t,Image *image,
+ bool doBase,bool bitmap,
+ uint baseRows,uint superRows,
+ uint cellWidth,uint cellheight);
+ private:
+ bool layoutTree(DiagramItem *root,int row);
+ TreeDiagram &operator=(const TreeDiagram &);
+ TreeDiagram(const TreeDiagram &);
+};
+
+
+
+//-----------------------------------------------------------------------------
+
const uint maxTreeWidth = 8;
const int gridWidth = 100;
const int gridHeight = 100;
diff --git a/src/diagram.h b/src/diagram.h
index 3e2cac2..e26f16c 100644
--- a/src/diagram.h
+++ b/src/diagram.h
@@ -16,108 +16,17 @@
*
*/
+#ifndef DIAGRAM_H
+#define DIAGRAM_H
+
#include "qtbc.h"
#include "types.h"
class ClassDef;
-class DiagramRow;
class TreeDiagram;
-class ClassDiagram;
-class DiagramItemList;
-class Image;
class FTextStream;
-class DiagramItem
-{
- public:
- DiagramItem(DiagramItem *p,int number,ClassDef *cd,
- Protection prot,Specifier virt,const char *ts);
- ~DiagramItem();
- QCString label() const;
- QCString fileName() const;
- DiagramItem *parentItem() { return parent; }
- DiagramItemList *getChildren() { return children; }
- void move(int dx,int dy) { x+=dx; y+=dy; }
- int xPos() const { return x; }
- int yPos() const { return y; }
- int avgChildPos() const;
- int numChildren() const;
- void addChild(DiagramItem *di);
- int number() const { return num; }
- Protection protection() const { return prot; }
- Specifier virtualness() const { return virt; }
- void putInList() { inList=TRUE; }
- bool isInList() const { return inList; }
- ClassDef *getClassDef() const { return classDef; }
- private:
- DiagramItemList *children;
- DiagramItem *parent;
- int x,y;
- int num;
- Protection prot;
- Specifier virt;
- QCString templSpec;
- bool inList;
- ClassDef *classDef;
-};
-
-class DiagramItemList : public QList<DiagramItem>
-{
- public:
- DiagramItemList() : QList<DiagramItem>() {}
- ~DiagramItemList() {}
-};
-
-class DiagramRow : public QList<DiagramItem>
-{
- public:
- DiagramRow(TreeDiagram *d,int l) : QList<DiagramItem>()
- {
- diagram=d;
- level=l;
- setAutoDelete(TRUE);
- }
- void insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
- Protection prot,Specifier virt,const char *ts);
- uint number() { return level; }
- private:
- TreeDiagram *diagram;
- uint level;
-};
-
-class DiagramRowIterator : public QListIterator<DiagramRow>
-{
- public:
- DiagramRowIterator(const QList<DiagramRow> &d)
- : QListIterator<DiagramRow>(d) {}
-};
-
-class TreeDiagram : public QList<DiagramRow>
-{
- public:
- TreeDiagram(ClassDef *root,bool doBases);
- ~TreeDiagram();
- void computeLayout();
- uint computeRows();
- //uint computeCols();
- void moveChildren(DiagramItem *root,int dx);
- void computeExtremes(uint *labelWidth,uint *xpos);
- void drawBoxes(FTextStream &t,Image *image,
- bool doBase,bool bitmap,
- uint baseRows,uint superRows,
- uint cellWidth,uint cellHeight,
- QCString relPath="",
- bool generateMap=TRUE);
- void drawConnectors(FTextStream &t,Image *image,
- bool doBase,bool bitmap,
- uint baseRows,uint superRows,
- uint cellWidth,uint cellheight);
- private:
- bool layoutTree(DiagramItem *root,int row);
- TreeDiagram &operator=(const TreeDiagram &);
- TreeDiagram(const TreeDiagram &);
-};
-
+/** Class representing a built-in class diagram. */
class ClassDiagram
{
public:
@@ -131,3 +40,6 @@ class ClassDiagram
TreeDiagram *base;
TreeDiagram *super;
};
+
+#endif
+
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 4ee4a9a..1114bb8 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -887,79 +887,7 @@ void computeDirDependencies()
dir->computeDependencies();
}
-#if 0
- printf("-------------------------------------------------------------\n");
- // print dependencies (for debugging)
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- if (dir->usedDirs())
- {
- QDictIterator<UsedDir> udi(*dir->usedDirs());
- UsedDir *usedDir;
- for (udi.toFirst();(usedDir=udi.current());++udi)
- {
- printf("%s depends on %s due to ",
- dir->shortName().data(),usedDir->dir()->shortName().data());
- QDictIterator<FileDef> fdi(usedDir->files());
- FileDef *fd;
- for (fdi.toFirst();(fd=fdi.current());++fdi)
- {
- printf("%s ",fd->name().data());
- }
- printf("\n");
- }
- }
- }
- printf("^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^\n");
-#endif
-}
-
-#if 0
-void writeDirDependencyGraph(const char *dirName)
-{
- QString path;
- DirDef *dir;
- DirSDict::Iterator sdi(*Doxygen::directories);
- QFile htmlPage(QCString(dirName)+"/dirdeps.html");
- if (htmlPage.open(IO_WriteOnly))
- {
- QTextStream out(&htmlPage);
- out << "<html><body>";
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- path=dirName;
- path+="/";
- path+=dir->getOutputFileBase();
- path+="_dep.dot";
- out << "<h4>" << dir->displayName() << "</h4>" << endl;
- out << "<img src=\"" << dir->getOutputFileBase() << "_dep.gif\">" << endl;
- QFile f(path);
- if (f.open(IO_WriteOnly))
- {
- QTextStream t(&f);
- dir->writeDepGraph(t);
- }
- f.close();
-
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString outFile = QCString(dirName)+"/"+
- dir->getOutputFileBase()+"_dep."+imgExt;
- DotRunner dotRun(path);
- dotRun.addJob(imgExt,outFile);
- dotRun.run();
-
- //QCString dotArgs(4096);
- //dotArgs.sprintf("%s -Tgif -o %s",path.data(),outFile.data());
- //if (portable_system(Config_getString("DOT_PATH")+"dot",dotArgs,FALSE)!=0)
- //{
- // err("Problems running dot. Check your installation!\n");
- //}
- }
- out << "</body></html>";
- }
- htmlPage.close();
}
-#endif
void generateDirDocs(OutputList &ol)
{
diff --git a/src/dirdef.h b/src/dirdef.h
index e7a6b0e..9a5346c 100644
--- a/src/dirdef.h
+++ b/src/dirdef.h
@@ -34,14 +34,14 @@ class FTextStream;
class DirDef;
-/** A list of directories */
+/** A list of directories. */
class DirList : public QList<DirDef>
{
public:
int compareItems(GCI item1,GCI item2);
};
-/** A directory */
+/** A model of a directory symbol. */
class DirDef : public Definition
{
public:
@@ -54,7 +54,7 @@ class DirDef : public Definition
QCString anchor() const { return QCString(); }
bool isLinkableInProject() const;
bool isLinkable() const;
- QCString displayName() const { return m_dispName; }
+ QCString displayName(bool=TRUE) const { return m_dispName; }
QCString shortName() const { return m_shortName; }
void addSubDir(DirDef *subdir);
FileList * getFiles() const { return m_fileList; }
@@ -105,6 +105,7 @@ class DirDef : public Definition
QDict<UsedDir> *m_usedDirs;
};
+/** Class representing a pair of FileDef objects */
class FilePair
{
public:
@@ -116,6 +117,7 @@ class FilePair
FileDef *m_dst;
};
+/** A sorted dictionary of FilePair objects. */
class FilePairDict : public SDict<FilePair>
{
public:
@@ -123,7 +125,7 @@ class FilePairDict : public SDict<FilePair>
int compareItems(GCI item1,GCI item2);
};
-/** Usage information of a directory . */
+/** Usage information of a directory. */
class UsedDir
{
public:
@@ -141,7 +143,7 @@ class UsedDir
bool m_inherited;
};
-/** A usage relation between two direction. */
+/** A usage relation between two directories. */
class DirRelation
{
public:
@@ -163,6 +165,7 @@ inline int DirList::compareItems(GCI item1,GCI item2)
return stricmp(((DirDef *)item1)->shortName(),((DirDef *)item2)->shortName());
}
+/** A sorted dictionary of DirDef objects. */
class DirSDict : public SDict<DirDef>
{
public:
diff --git a/src/docparser.cpp b/src/docparser.cpp
index abf0943..4beb405 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -74,6 +74,7 @@ static const char *sectionLevelToName[] =
static Definition * g_scope;
static QCString g_context;
static bool g_inSeeBlock;
+static bool g_xmlComment;
static bool g_insideHtmlLink;
static QStack<DocNode> g_nodeStack;
static QStack<DocStyleChange> g_styleStack;
@@ -95,12 +96,15 @@ static QCString g_includeFileText;
static uint g_includeFileOffset;
static uint g_includeFileLength;
-// parser's context to store all global variables
+
+/** Parser's context to store all global variables.
+ */
struct DocParserContext
{
Definition *scope;
QCString context;
bool inSeeBlock;
+ bool xmlComment;
bool insideHtmlLink;
QStack<DocNode> nodeStack;
QStack<DocStyleChange> styleStack;
@@ -140,6 +144,7 @@ static void docParserPushContext(bool saveParamInfo=TRUE)
ctx->scope = g_scope;
ctx->context = g_context;
ctx->inSeeBlock = g_inSeeBlock;
+ ctx->xmlComment = g_xmlComment;
ctx->insideHtmlLink = g_insideHtmlLink;
ctx->nodeStack = g_nodeStack;
ctx->styleStack = g_styleStack;
@@ -177,6 +182,7 @@ static void docParserPopContext(bool keepParamInfo=FALSE)
g_scope = ctx->scope;
g_context = ctx->context;
g_inSeeBlock = ctx->inSeeBlock;
+ g_xmlComment = ctx->xmlComment;
g_insideHtmlLink = ctx->insideHtmlLink;
g_nodeStack = ctx->nodeStack;
g_styleStack = ctx->styleStack;
@@ -646,20 +652,6 @@ static bool insideTable(DocNode *n)
//---------------------------------------------------------------------------
-///*! Returns TRUE iff node n is a child of a language node */
-//static bool insideLang(DocNode *n)
-//{
-// while (n)
-// {
-// if (n->kind()==DocNode::Kind_Language) return TRUE;
-// n=n->parent();
-// }
-// return FALSE;
-//}
-
-
-//---------------------------------------------------------------------------
-
/*! Looks for a documentation block with name commandName in the current
* context (g_context). The resulting documentation string is
* put in pDoc, the definition in which the documentation was found is
@@ -3593,13 +3585,15 @@ int DocHtmlTable::parseXml()
return retval==RetVal_EndTable ? RetVal_OK : retval;
}
+/** Helper class to compute the grid for an HTML style table */
struct ActiveRowSpan
{
ActiveRowSpan(int rows,int col) : rowsLeft(rows), column(col) {}
int rowsLeft;
- int column;
+ int column;
};
+/** List of ActiveRowSpan classes. */
typedef QList<ActiveRowSpan> RowSpanList;
/** determines the location of all cells in a grid, resolving row and
@@ -5577,8 +5571,9 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
handleStyleEnter(this,m_children,DocStyleChange::Bold,&g_token->attribs);
break;
case HTML_CODE:
- if (getLanguageFromFileName(g_fileName)==SrcLangExt_CSharp)
- // for C# code we treat <code> as an XML tag
+ if (getLanguageFromFileName(g_fileName)==SrcLangExt_CSharp || g_xmlComment)
+ // for C# source or inside a <summary> or <remark> section we
+ // treat <code> as an XML tag (so similar to @code)
{
doctokenizerYYsetStateXmlCode();
retval = handleStartCode();
@@ -5719,6 +5714,8 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
case XML_SUMMARY:
case XML_REMARKS:
+ g_xmlComment=TRUE;
+ // fall through
case XML_VALUE:
case XML_PARA:
if (!m_children.isEmpty())
@@ -6860,6 +6857,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_styleStack.clear();
g_initialStyleStack.clear();
g_inSeeBlock = FALSE;
+ g_xmlComment = FALSE;
g_insideHtmlLink = FALSE;
g_includeFileText = "";
g_includeFileOffset = 0;
@@ -6923,6 +6921,7 @@ DocNode *validatingParseText(const char *input)
g_styleStack.clear();
g_initialStyleStack.clear();
g_inSeeBlock = FALSE;
+ g_xmlComment = FALSE;
g_insideHtmlLink = FALSE;
g_includeFileText = "";
g_includeFileOffset = 0;
diff --git a/src/docparser.h b/src/docparser.h
index ad5dd03..ab7c523 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -79,7 +79,7 @@ void docFindSections(const char *input,
//---------------------------------------------------------------------------
-/*! @brief Abstract node interface with type information. */
+/** Abstract node interface with type information. */
class DocNode
{
public:
@@ -167,7 +167,7 @@ class DocNode
bool m_insidePre;
};
-/*! @brief Default accept implementation for compound nodes in the abstract
+/** Default accept implementation for compound nodes in the abstract
* syntax tree.
*/
template<class T> class CompAccept
@@ -191,7 +191,7 @@ template<class T> class CompAccept
};
-/*! @brief Node representing a word
+/** Node representing a word
*/
class DocWord : public DocNode
{
@@ -205,7 +205,7 @@ class DocWord : public DocNode
QCString m_word;
};
-/*! @brief Node representing a word that can be linked to something
+/** Node representing a word that can be linked to something
*/
class DocLinkedWord : public DocNode
{
@@ -231,7 +231,7 @@ class DocLinkedWord : public DocNode
QCString m_tooltip;
};
-/*! @brief Node representing an URL (or email address) */
+/** Node representing an URL (or email address) */
class DocURL : public DocNode
{
public:
@@ -247,7 +247,7 @@ class DocURL : public DocNode
bool m_isEmail;
};
-/*! @brief Node representing a line break */
+/** Node representing a line break */
class DocLineBreak : public DocNode
{
public:
@@ -258,7 +258,7 @@ class DocLineBreak : public DocNode
private:
};
-/*! @brief Node representing a horizonal ruler */
+/** Node representing a horizonal ruler */
class DocHorRuler : public DocNode
{
public:
@@ -269,7 +269,7 @@ class DocHorRuler : public DocNode
private:
};
-/*! @brief Node representing an anchor */
+/** Node representing an anchor */
class DocAnchor : public DocNode
{
public:
@@ -284,7 +284,7 @@ class DocAnchor : public DocNode
QCString m_file;
};
-/*! @brief Node representing a citation of some bibliographic reference */
+/** Node representing a citation of some bibliographic reference */
class DocCite : public DocNode
{
public:
@@ -306,7 +306,7 @@ class DocCite : public DocNode
};
-/*! @brief Node representing a style change */
+/** Node representing a style change */
class DocStyleChange : public DocNode
{
public:
@@ -333,7 +333,7 @@ class DocStyleChange : public DocNode
HtmlAttribList m_attribs;
};
-/*! @brief Node representing a special symbol */
+/** Node representing a special symbol */
class DocSymbol : public DocNode
{
public:
@@ -355,7 +355,7 @@ class DocSymbol : public DocNode
char m_letter;
};
-/*! @brief Node representing some amount of white space */
+/** Node representing some amount of white space */
class DocWhiteSpace : public DocNode
{
public:
@@ -368,7 +368,7 @@ class DocWhiteSpace : public DocNode
QCString m_chars;
};
-/*! @brief Node representing a verbatim, unparsed text fragment */
+/** Node representing a verbatim, unparsed text fragment */
class DocVerbatim : public DocNode
{
public:
@@ -397,7 +397,7 @@ class DocVerbatim : public DocNode
};
-/*! @brief Node representing an included text block from file */
+/** Node representing an included text block from file */
class DocInclude : public DocNode
{
public:
@@ -436,7 +436,7 @@ class DocInclude : public DocNode
QCString m_blockId;
};
-/*! @brief Node representing a include/dontinclude operator block */
+/** Node representing a include/dontinclude operator block */
class DocIncOperator : public DocNode
{
public:
@@ -471,7 +471,7 @@ class DocIncOperator : public DocNode
QCString m_exampleFile;
};
-/*! @brief Node representing an item of a cross-referenced list */
+/** Node representing an item of a cross-referenced list */
class DocFormula : public DocNode
{
public:
@@ -491,7 +491,7 @@ class DocFormula : public DocNode
int m_id;
};
-/*! @brief Node representing an entry in the index. */
+/** Node representing an entry in the index. */
class DocIndexEntry : public DocNode
{
public:
@@ -512,8 +512,8 @@ class DocIndexEntry : public DocNode
//-----------------------------------------------------------------------
-/*! @brief Node representing a copy of documentation block. */
-class DocCopy : /*public CompAccept<DocCopy>,*/ public DocNode
+/** Node representing a copy of documentation block. */
+class DocCopy : public DocNode
{
public:
DocCopy(DocNode *parent,const QCString &link,bool copyBrief,bool copyDetails)
@@ -530,7 +530,7 @@ class DocCopy : /*public CompAccept<DocCopy>,*/ public DocNode
bool m_copyDetails;
};
-/*! @brief Node representing an auto List */
+/** Node representing an auto List */
class DocAutoList : public CompAccept<DocAutoList>, public DocNode
{
public:
@@ -548,7 +548,7 @@ class DocAutoList : public CompAccept<DocAutoList>, public DocNode
int m_depth;
};
-/*! @brief Node representing an item of a auto list */
+/** Node representing an item of a auto list */
class DocAutoListItem : public CompAccept<DocAutoListItem>, public DocNode
{
public:
@@ -565,7 +565,7 @@ class DocAutoListItem : public CompAccept<DocAutoListItem>, public DocNode
-/*! @brief Node representing a simple section title */
+/** Node representing a simple section title */
class DocTitle : public CompAccept<DocTitle>, public DocNode
{
public:
@@ -578,11 +578,10 @@ class DocTitle : public CompAccept<DocTitle>, public DocNode
private:
};
-/*! @brief Node representing an item of a cross-referenced list */
+/** Node representing an item of a cross-referenced list */
class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
{
public:
- //enum Type { Bug, Test, Todo, Deprecated };
DocXRefItem(DocNode *parent,int id,const char *key);
Kind kind() const { return Kind_XRefItem; }
QCString file() const { return m_file; }
@@ -602,7 +601,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
QCString m_relPath;
};
-/*! @brief Node representing an image */
+/** Node representing an image */
class DocImage : public CompAccept<DocImage>, public DocNode
{
public:
@@ -631,7 +630,7 @@ class DocImage : public CompAccept<DocImage>, public DocNode
QCString m_url;
};
-/*! @brief Node representing a dot file */
+/** Node representing a dot file */
class DocDotFile : public CompAccept<DocDotFile>, public DocNode
{
public:
@@ -655,7 +654,7 @@ class DocDotFile : public CompAccept<DocDotFile>, public DocNode
QCString m_context;
};
-/*! @brief Node representing a msc file */
+/** Node representing a msc file */
class DocMscFile : public CompAccept<DocMscFile>, public DocNode
{
public:
@@ -680,7 +679,7 @@ class DocMscFile : public CompAccept<DocMscFile>, public DocNode
};
-/*! @brief Node representing a link to some item */
+/** Node representing a link to some item */
class DocLink : public CompAccept<DocLink>, public DocNode
{
public:
@@ -701,7 +700,7 @@ class DocLink : public CompAccept<DocLink>, public DocNode
QCString m_refText;
};
-/*! @brief Node representing a reference to some item */
+/** Node representing a reference to some item */
class DocRef : public CompAccept<DocRef>, public DocNode
{
public:
@@ -730,7 +729,7 @@ class DocRef : public CompAccept<DocRef>, public DocNode
QCString m_text;
};
-/*! @brief Node representing an internal reference to some item */
+/** Node representing an internal reference to some item */
class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode
{
public:
@@ -748,24 +747,7 @@ class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode
QCString m_anchor;
};
-/*! @brief Node representing a Language specific section */
-//class DocLanguage : public CompAccept<DocLanguage>, public DocNode
-//{
-// public:
-// DocLanguage(DocNode *parent,const QCString &id) :
-// m_parent(parent), m_id(id) {}
-// QCString id() const { return m_id; }
-// Kind kind() const { return Kind_Language; }
-// DocNode *parent() const { return m_parent; }
-// void accept(DocVisitor *v) { CompAccept<DocLanguage>::accept(this,v); }
-// int parse();
-//
-// private:
-// DocNode * m_parent;
-// QCString m_id;
-//};
-
-/*! @brief Node representing a Hypertext reference */
+/** Node representing a Hypertext reference */
class DocHRef : public CompAccept<DocHRef>, public DocNode
{
public:
@@ -785,7 +767,7 @@ class DocHRef : public CompAccept<DocHRef>, public DocNode
QCString m_relPath;
};
-/*! @brief Node Html heading */
+/** Node Html heading */
class DocHtmlHeader : public CompAccept<DocHtmlHeader>, public DocNode
{
public:
@@ -802,7 +784,7 @@ class DocHtmlHeader : public CompAccept<DocHtmlHeader>, public DocNode
HtmlAttribList m_attribs;
};
-/*! @brief Node representing a Html description item */
+/** Node representing a Html description item */
class DocHtmlDescTitle : public CompAccept<DocHtmlDescTitle>, public DocNode
{
public:
@@ -817,7 +799,7 @@ class DocHtmlDescTitle : public CompAccept<DocHtmlDescTitle>, public DocNode
HtmlAttribList m_attribs;
};
-/*! @brief Node representing a Html description list */
+/** Node representing a Html description list */
class DocHtmlDescList : public CompAccept<DocHtmlDescList>, public DocNode
{
public:
@@ -832,7 +814,7 @@ class DocHtmlDescList : public CompAccept<DocHtmlDescList>, public DocNode
HtmlAttribList m_attribs;
};
-/*! @brief Node representing a normal section */
+/** Node representing a normal section */
class DocSection : public CompAccept<DocSection>, public DocNode
{
public:
@@ -855,7 +837,7 @@ class DocSection : public CompAccept<DocSection>, public DocNode
QCString m_file;
};
-/*! @brief Node representing a reference to a section */
+/** Node representing a reference to a section */
class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode
{
public:
@@ -874,7 +856,7 @@ class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode
QCString m_anchor;
};
-/*! @brief Node representing a list of section references */
+/** Node representing a list of section references */
class DocSecRefList : public CompAccept<DocSecRefList>, public DocNode
{
public:
@@ -886,7 +868,7 @@ class DocSecRefList : public CompAccept<DocSecRefList>, public DocNode
private:
};
-/*! @brief Node representing an internal section of documentation */
+/** Node representing an internal section of documentation */
class DocInternal : public CompAccept<DocInternal>, public DocNode
{
public:
@@ -898,7 +880,7 @@ class DocInternal : public CompAccept<DocInternal>, public DocNode
private:
};
-/*! @brief Node representing a simple list */
+/** Node representing a simple list */
class DocSimpleList : public CompAccept<DocSimpleList>, public DocNode
{
public:
@@ -910,7 +892,7 @@ class DocSimpleList : public CompAccept<DocSimpleList>, public DocNode
private:
};
-/*! @brief Node representing a Html list */
+/** Node representing a Html list */
class DocHtmlList : public CompAccept<DocHtmlList>, public DocNode
{
public:
@@ -929,7 +911,7 @@ class DocHtmlList : public CompAccept<DocHtmlList>, public DocNode
HtmlAttribList m_attribs;
};
-/*! Node representing a simple section */
+/** Node representing a simple section */
class DocSimpleSect : public CompAccept<DocSimpleSect>, public DocNode
{
public:
@@ -954,7 +936,7 @@ class DocSimpleSect : public CompAccept<DocSimpleSect>, public DocNode
DocTitle * m_title;
};
-/*! Node representing a separator between two simple sections of the
+/** Node representing a separator between two simple sections of the
* same type.
*/
class DocSimpleSectSep : public DocNode
@@ -967,7 +949,7 @@ class DocSimpleSectSep : public DocNode
private:
};
-/*! Node representing a parameter section */
+/** Node representing a parameter section */
class DocParamSect : public CompAccept<DocParamSect>, public DocNode
{
friend class DocParamList;
@@ -998,7 +980,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode
bool m_hasTypeSpecifier;
};
-/*! Node representing a paragraph in the documentation tree */
+/** Node representing a paragraph in the documentation tree */
class DocPara : public CompAccept<DocPara>, public DocNode
{
public:
@@ -1042,7 +1024,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
bool m_isLast;
};
-/*! @brief Node representing a parameter list. */
+/** Node representing a parameter list. */
class DocParamList : public DocNode
{
public:
@@ -1084,7 +1066,7 @@ class DocParamList : public DocNode
bool m_isLast;
};
-/*! @brief Node representing a simple list item */
+/** Node representing a simple list item */
class DocSimpleListItem : public DocNode
{
public:
@@ -1104,7 +1086,7 @@ class DocSimpleListItem : public DocNode
DocPara *m_paragraph;
};
-/*! @brief Node representing a HTML list item */
+/** Node representing a HTML list item */
class DocHtmlListItem : public CompAccept<DocHtmlListItem>, public DocNode
{
public:
@@ -1122,7 +1104,7 @@ class DocHtmlListItem : public CompAccept<DocHtmlListItem>, public DocNode
int m_itemNum;
};
-/*! @brief Node representing a HTML description data */
+/** Node representing a HTML description data */
class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode
{
public:
@@ -1136,7 +1118,7 @@ class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode
HtmlAttribList m_attribs;
};
-/*! @brief Node representing a HTML table cell */
+/** Node representing a HTML table cell */
class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode
{
friend class DocHtmlTable;
@@ -1173,7 +1155,7 @@ class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode
int m_colIdx;
};
-/*! @brief Node representing a HTML table caption */
+/** Node representing a HTML table caption */
class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode
{
public:
@@ -1189,7 +1171,7 @@ class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode
bool m_atTop;
};
-/*! @brief Node representing a HTML table row */
+/** Node representing a HTML table row */
class DocHtmlRow : public CompAccept<DocHtmlRow>, public DocNode
{
friend class DocHtmlTable;
@@ -1216,7 +1198,7 @@ class DocHtmlRow : public CompAccept<DocHtmlRow>, public DocNode
int m_rowIdx;
};
-/*! @brief Node representing a HTML table */
+/** Node representing a HTML table */
class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
{
public:
@@ -1239,7 +1221,7 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
int m_numCols;
};
-/*! @brief Node representing an HTML blockquote */
+/** Node representing an HTML blockquote */
class DocHtmlBlockQuote : public CompAccept<DocHtmlBlockQuote>, public DocNode
{
public:
@@ -1254,7 +1236,7 @@ class DocHtmlBlockQuote : public CompAccept<DocHtmlBlockQuote>, public DocNode
HtmlAttribList m_attribs;
};
-/*! @brief Root node of a text fragment */
+/** Root node of a text fragment */
class DocText : public CompAccept<DocText>, public DocNode
{
public:
@@ -1264,7 +1246,7 @@ class DocText : public CompAccept<DocText>, public DocNode
void parse();
};
-/*! @brief Root node of documentation tree */
+/** Root node of documentation tree */
class DocRoot : public CompAccept<DocRoot>, public DocNode
{
public:
diff --git a/src/docsets.h b/src/docsets.h
index 977991e..799e289 100644
--- a/src/docsets.h
+++ b/src/docsets.h
@@ -25,7 +25,8 @@
class QFile;
class Definition;
-/*! A class that generates docset files.
+/** A class that generates docset files.
+ *
* These files can be used to create context help
* for use within Apple's Xcode 3.0 development environment
*/
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index 35fdbe2..5036f19 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -63,6 +63,7 @@ enum Tokens
RetVal_EndBlockQuote = 0x10014
};
+/** @brief Data associated with a token used by the comment block parser. */
struct TokenInfo
{
// unknown token
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index d9f845a..ae4c173 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -490,7 +490,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
return TK_LISTITEM;
}
}
-<St_Para>({BLANK}*\n)+{OLISTITEM} { /* list item on next line */
+<St_Para>{BLANK}*\n{OLISTITEM} { /* list item on next line */
if (!Doxygen::markdownSupport)
{
REJECT;
diff --git a/src/dot.cpp b/src/dot.cpp
index a4cef13..9deae32 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -195,6 +195,7 @@ static const char *umlEdgeStyleMap[] =
"solid" // usage
};
+/** Helper struct holding the properties of a edge in a dot graph. */
struct EdgeProperties
{
const char * const *edgeColorMap;
@@ -746,6 +747,7 @@ static bool checkDeliverables(const QCString &file1,
//--------------------------------------------------------------------
+/** Class representing a list of DotNode objects. */
class DotNodeList : public QList<DotNode>
{
public:
diff --git a/src/dot.h b/src/dot.h
index e4acd5a..ddcd1c3 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -42,7 +42,7 @@ class DotRunnerQueue;
enum GraphOutputFormat { BITMAP , EPS };
-/** @brief Attributes of an edge of a dot graph */
+/** Attributes of an edge of a dot graph */
struct EdgeInfo
{
enum Colors { Blue=0, Green=1, Red=2, Purple=3, Grey=4, Orange=5 };
@@ -56,7 +56,7 @@ struct EdgeInfo
int m_labColor;
};
-/** @brief A node in a dot graph */
+/** A node in a dot graph */
class DotNode
{
public:
@@ -138,7 +138,7 @@ inline int DotNode::findParent( DotNode *n )
return m_parents->find(n);
}
-/** @brief Represents a graphical class hierarchy */
+/** Represents a graphical class hierarchy */
class DotGfxHierarchyTable
{
public:
@@ -156,7 +156,7 @@ class DotGfxHierarchyTable
DotNodeList *m_rootSubgraphs;
};
-/** @brief Representation of a class inheritance or dependency graph */
+/** Representation of a class inheritance or dependency graph */
class DotClassGraph
{
public:
@@ -188,7 +188,7 @@ class DotClassGraph
bool m_lrRank;
};
-/** @brief Representation of an include dependency graph */
+/** Representation of an include dependency graph */
class DotInclDepGraph
{
public:
@@ -215,7 +215,7 @@ class DotInclDepGraph
bool m_inverse;
};
-/** @brief Representation of an call graph */
+/** Representation of an call graph */
class DotCallGraph
{
public:
@@ -242,7 +242,7 @@ class DotCallGraph
Definition * m_scope;
};
-/** @brief Representation of an directory dependency graph */
+/** Representation of an directory dependency graph */
class DotDirDeps
{
public:
@@ -260,7 +260,7 @@ class DotDirDeps
DirDef *m_dir;
};
-/** @brief Representation of a group collaboration graph */
+/** Representation of a group collaboration graph */
class DotGroupCollaboration
{
public :
@@ -318,7 +318,7 @@ class DotGroupCollaboration
QList<Edge> m_edges;
};
-/** @brief Helper class to run dot from doxygen.
+/** Helper class to run dot from doxygen.
*/
class DotRunner
{
@@ -358,7 +358,7 @@ class DotRunner
CleanupItem m_cleanupItem;
};
-/** @brief Helper class to insert a set of map file into an output file */
+/** Helper class to insert a set of map file into an output file */
class DotFilePatcher
{
public:
@@ -389,6 +389,7 @@ class DotFilePatcher
QCString m_patchFile;
};
+/** Queue of dot jobs to run. */
class DotRunnerQueue
{
public:
@@ -401,6 +402,7 @@ class DotRunnerQueue
mutable QMutex m_mutex;
};
+/** Worker thread to execute a dot run */
class DotWorkerThread : public QThread
{
public:
@@ -413,7 +415,7 @@ class DotWorkerThread : public QThread
QList<DotRunner::CleanupItem> m_cleanupItems;
};
-/** @brief singleton that manages dot relation actions */
+/** Singleton that manages dot relation actions */
class DotManager
{
public:
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index fad7102..d942656 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -235,7 +235,7 @@ static void findMember(EntryNav *rootNav,
bool isFunc
);
-
+/** A struct contained the data for an STL class */
struct STLInfo
{
const char *className;
@@ -821,6 +821,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
if (!iName.isEmpty()) // user specified include file
{
if (iName.at(0)=='<') local=FALSE; // explicit override
+ else if (iName.at(0)=='"') local=TRUE;
if (iName.at(0)=='"' || iName.at(0)=='<')
{
iName=iName.mid(1,iName.length()-2); // strip quotes or brackets
@@ -2356,12 +2357,16 @@ static MemberDef *addVariableToFile(
)
// variable already in the scope
{
+ bool isPHPArray = md->getLanguage()==SrcLangExt_PHP &&
+ md->argsString()!=root->args &&
+ root->args.find('[')!=-1;
+ bool staticsInDifferentFiles =
+ root->stat && md->isStatic() &&
+ root->fileName!=md->getDefFileName();
+
if (md->getFileDef() &&
- ! // not a php array
- (
- (md->getLanguage()==SrcLangExt_PHP) &&
- (md->argsString()!=root->args && root->args.find('[')!=-1)
- )
+ !isPHPArray && // not a php array
+ !staticsInDifferentFiles
)
// not a php array variable
{
@@ -2835,7 +2840,7 @@ static void buildTypedefList(EntryNav *rootNav)
static void buildVarList(EntryNav *rootNav)
{
- //printf("buildVarList(%s)\n",rootNav->name().data());
+ //printf("buildVarList(%s) section=%08x\n",rootNav->name().data(),rootNav->section());
int isFuncPtr=-1;
if (!rootNav->name().isEmpty() &&
(rootNav->type().isEmpty() || g_compoundKeywordDict.find(rootNav->type())==0) &&
@@ -2877,11 +2882,18 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
Entry *root = rootNav->entry();
FileDef *fd=rootNav->fileDef();
- int l,i=-1;
+ int l;
static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*");
+ int ts=root->type.find('<');
+ int te=root->type.findRev('>');
+ int i=re.match(root->type,0,&l);
+ if (i!=-1 && ts!=-1 && ts<te && ts<i && i<te) // avoid changing A<int(int*)>, see bug 677315
+ {
+ i=-1;
+ }
if (cd->getLanguage()==SrcLangExt_Cpp && // only C has pointers
- !root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable
+ !root->type.isEmpty() && i!=-1) // function variable
{
root->args+=root->type.right(root->type.length()-i-l);
root->type=root->type.left(i+l);
@@ -3113,12 +3125,17 @@ static void buildFunctionList(EntryNav *rootNav)
}
static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*");
+ int ts=root->type.find('<');
+ int te=root->type.findRev('>');
+ int ti;
if (!rootNav->parent()->name().isEmpty() &&
(rootNav->parent()->section() & Entry::COMPOUND_MASK) &&
cd &&
// do some fuzzy things to exclude function pointers
(root->type.isEmpty() ||
- (root->type.find(re,0)==-1 || root->args.find(")[")!=-1) || // type contains ..(..* and args not )[.. -> function pointer
+ ((ti=root->type.find(re,0))==-1 || // type does not contain ..(..*
+ (ts!=-1 && ts<te && ts<ti && ti<te) || // outside of < ... >
+ root->args.find(")[")!=-1) || // and args not )[.. -> function pointer
root->type.find(")(")!=-1 || root->type.find("operator")!=-1 || // type contains ..)(.. and not "operator"
cd->getLanguage()!=SrcLangExt_Cpp // language other than C
)
@@ -3181,11 +3198,16 @@ static void buildFunctionList(EntryNav *rootNav)
sameNumTemplateArgs = FALSE;
}
}
+
+ bool staticsInDifferentFiles =
+ root->stat && md->isStatic() && root->fileName!=md->getDefFileName();
+
if (
matchArguments2(md->getOuterScope(),mfd,mdAl.pointer(),
rnd ? rnd : Doxygen::globalScope,rfd,root->argList,
FALSE) &&
- sameNumTemplateArgs
+ sameNumTemplateArgs &&
+ !staticsInDifferentFiles
)
{
GroupDef *gd=0;
@@ -5231,7 +5253,6 @@ static bool findGlobalMember(EntryNav *rootNav,
}
}
-
//printf("%s<->%s\n",
// argListToString(md->argumentList()).data(),
// argListToString(root->argList).data());
@@ -5255,7 +5276,7 @@ static bool findGlobalMember(EntryNav *rootNav,
}
}
}
- if (!found && root->relatesType != Duplicate) // no match
+ if (!found && root->relatesType != Duplicate && root->section==Entry::FUNCTION_SEC) // no match
{
QCString fullFuncDecl=decl;
if (root->argList) fullFuncDecl+=argListToString(root->argList,TRUE);
@@ -5263,12 +5284,13 @@ static bool findGlobalMember(EntryNav *rootNav,
QCString("warning: no matching file member found for \n")+substitute(fullFuncDecl,"%","%%");
if (mn->count()>0)
{
- warnMsg+="Possible candidates:\n";
+ warnMsg+="\nPossible candidates:\n";
for (mni.toFirst();(md=mni.current());++mni)
{
- warnMsg+=" ";
+ warnMsg+=" '";
warnMsg+=substitute(md->declaration(),"%","%%");
- warnMsg+='\n';
+ warnMsg+="' at line "+QCString().setNum(md->getDefLine())+
+ " of file"+md->getDefFileName()+"\n";
}
}
warn(root->fileName,root->startLine,warnMsg);
@@ -6003,7 +6025,7 @@ static void findMember(EntryNav *rootNav,
LockingPtr<ArgumentList> templAl = md->templateArguments();
if (templAl!=0)
{
- warnMsg+=" template ";
+ warnMsg+=" 'template ";
warnMsg+=tempArgListToString(templAl.pointer());
warnMsg+='\n';
}
@@ -6020,9 +6042,8 @@ static void findMember(EntryNav *rootNav,
warnMsg+=md->argsString();
if (noMatchCount>1)
{
- QCString lineFile;
- lineFile.sprintf(" at line %d of file ",md->getDefLine());
- warnMsg+=lineFile+md->getDefFileName();
+ warnMsg+="' at line "+QCString().setNum(md->getDefLine()) +
+ " of file "+md->getDefFileName();
}
warnMsg+='\n';
@@ -8785,20 +8806,6 @@ static void copyExtraFiles()
//! parse the list of input files
static void parseFiles(Entry *root,EntryNav *rootNav)
{
-#if 0
- void *cd = 0;
- QCString inpEncoding = Config_getString("INPUT_ENCODING");
- bool needsTranscoding = !inpEncoding.isEmpty();
- if (needsTranscoding)
- {
- if (!(cd = portable_iconv_open("UTF-8", inpEncoding)))
- {
- err("error: unsupported character enconding: '%s'",inpEncoding.data());
- exit(1);
- }
- }
-#endif
-
QCString *s=g_inputFiles.first();
while (s)
{
@@ -10293,18 +10300,6 @@ void parseInput()
* Parse source files *
**************************************************************************/
- //printNavTree(rootNav,0);
-
- // we are done with input scanning now, so free up the buffers used by flex
- // (can be around 4MB)
- preFreeScanner();
- scanFreeScanner();
- pyscanFreeScanner();
-
- //delete rootNav;
- //g_storage.close();
- //exit(1);
-
if (Config_getBool("BUILTIN_STL_SUPPORT"))
{
addSTLClasses(rootNav);
@@ -10312,6 +10307,13 @@ void parseInput()
parseFiles(root,rootNav);
g_storage->close();
+
+ // we are done with input scanning now, so free up the buffers used by flex
+ // (can be around 4MB)
+ preFreeScanner();
+ scanFreeScanner();
+ pyscanFreeScanner();
+
if (!g_storage->open(IO_ReadOnly))
{
err("Failed to open temporary storage file %s for reading",
@@ -10530,6 +10532,13 @@ void parseInput()
msg("Adding members to index pages...\n");
addMembersToIndex();
+
+ if (Config_getBool("OPTIMIZE_OUTPUT_VHDL") &&
+ Config_getBool("HAVE_DOT") &&
+ Config_getEnum("DOT_IMAGE_FORMAT")=="svg")
+ {
+ VhdlDocGen::writeOverview();
+ }
}
void generateOutput()
diff --git a/src/doxygen.css b/src/doxygen.css
index 32d4d9c..6ce8bb9 100644
--- a/src/doxygen.css
+++ b/src/doxygen.css
@@ -184,8 +184,24 @@ div.line {
padding-left: 53px;
padding-bottom: 0px;
margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
}
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
span.lineno {
padding-right: 4px;
text-align: right;
@@ -486,6 +502,8 @@ table.memberdecls {
-ms-transition: box-shadow 0.5s linear;
-o-transition: box-shadow 0.5s linear;
transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
}
.memitem.glow {
@@ -575,6 +593,9 @@ dl.reflist dd {
.paramname em {
font-style: normal;
}
+.paramname code {
+ line-height: 14px;
+}
.params, .retval, .exception, .tparams {
margin-left: 0px;
@@ -662,6 +683,10 @@ div.directory {
outline:none;
}
+.directory td.entry a img {
+ border: none;
+}
+
.directory td.desc {
width: 100%;
padding-left: 6px;
@@ -857,9 +882,7 @@ div.summary a
div.ingroups
{
- margin-left: 5px;
font-size: 8pt;
- padding-left: 5px;
width: 50%;
text-align: left;
}
diff --git a/src/doxygen.md b/src/doxygen.md
new file mode 100644
index 0000000..6931329
--- /dev/null
+++ b/src/doxygen.md
@@ -0,0 +1,59 @@
+Doxygen Internals {#mainpage}
+=================
+
+Introduction
+------------
+
+This page provides a high-level overview of the internals of doxygen, with
+links to the relevant parts of the code.
+
+The generic starting point of the application is ofcource the main() function.
+
+Configuration options
+---------------------
+
+Configuration file data is stored in singleton class Config and can be
+accessed using wrapper macros
+Config_getString(), Config_getInt(), Config_getList(),
+Config_getEnum(), and Config_getBool() depending on the type of the
+option.
+
+The format of the configuration file (options and types) is defined
+by the file `config.xml`. As part of the build process,
+the python script `configgen.py` will create a file configoptions.cpp
+from this, which serves as the input for the configuration file parser
+that is invoked using Config::parse()
+
+Gathering Input files
+---------------------
+
+After the configuration is known, the input files are searched using
+searchInputFiles() and any tag files are read using readTagFile()
+
+Parsing Input files
+-------------------
+
+The function parseFiles() takes care of parsing all files.
+It uses the ParserManager singleton factory to create a suitable parser object
+for each file. Each parser implements the abstract interface ParserInterface.
+
+If the parser indicates it needs preprocessing
+via ParserInterface::needsPreprocessing(), doxygen will call preprocessFile()
+on the file before calling ParserInterface::parseInput().
+
+The result of parsing is a tree of Entry objects
+These Entry objects are wrapped in a EntryNav object and stored on disk using
+Entry::createNavigationIndex() on the root node of the tree.
+
+Each Entry object roughly contains the raw data for a symbol and is later
+converted into a Definition object.
+
+When a parser finds a special comment block in the input, it will do a first
+pass parsing via parseCommentBlock(). During this pass the comment block
+is split into multiple parts if needed. Some data that is later needed is
+extracted like section labels, xref items, and formulas.
+Also Markdown markup is processed using processMarkdown() during this pass.
+
+
+
+
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
index e883f8e..0c4f9c1 100644
--- a/src/doxygen_css.h
+++ b/src/doxygen_css.h
@@ -184,8 +184,24 @@
" padding-left: 53px;\n"
" padding-bottom: 0px;\n"
" margin: 0px;\n"
+" -webkit-transition-property: background-color, box-shadow;\n"
+" -webkit-transition-duration: 0.5s;\n"
+" -moz-transition-property: background-color, box-shadow;\n"
+" -moz-transition-duration: 0.5s;\n"
+" -ms-transition-property: background-color, box-shadow;\n"
+" -ms-transition-duration: 0.5s;\n"
+" -o-transition-property: background-color, box-shadow;\n"
+" -o-transition-duration: 0.5s;\n"
+" transition-property: background-color, box-shadow;\n"
+" transition-duration: 0.5s;\n"
"}\n"
"\n"
+"div.line.glow {\n"
+" background-color: cyan;\n"
+" box-shadow: 0 0 10px cyan;\n"
+"}\n"
+"\n"
+"\n"
"span.lineno {\n"
" padding-right: 4px;\n"
" text-align: right;\n"
@@ -486,6 +502,8 @@
" -ms-transition: box-shadow 0.5s linear;\n"
" -o-transition: box-shadow 0.5s linear;\n"
" transition: box-shadow 0.5s linear;\n"
+" display: table !important;\n"
+" width: 100%;\n"
"}\n"
"\n"
".memitem.glow {\n"
@@ -575,6 +593,9 @@
".paramname em {\n"
" font-style: normal;\n"
"}\n"
+".paramname code {\n"
+" line-height: 14px;\n"
+"}\n"
"\n"
".params, .retval, .exception, .tparams {\n"
" margin-left: 0px;\n"
@@ -662,6 +683,10 @@
" outline:none;\n"
"}\n"
"\n"
+".directory td.entry a img {\n"
+" border: none;\n"
+"}\n"
+"\n"
".directory td.desc {\n"
" width: 100%;\n"
" padding-left: 6px;\n"
@@ -857,9 +882,7 @@
"\n"
"div.ingroups\n"
"{\n"
-" margin-left: 5px;\n"
" font-size: 8pt;\n"
-" padding-left: 5px;\n"
" width: 50%;\n"
" text-align: left;\n"
"}\n"
diff --git a/src/eclipsehelp.h b/src/eclipsehelp.h
index cbae366..2531a9f 100644
--- a/src/eclipsehelp.h
+++ b/src/eclipsehelp.h
@@ -32,8 +32,7 @@
class QFile;
class Definition;
-/*!
- * \brief Generator of Eclipse help files
+/** Generator for Eclipse help files.
*
* This class generates the Eclipse specific help files.
* These files can be used to generate a help plugin readable
diff --git a/src/entry.h b/src/entry.h
index d312cec..9a39963 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -33,7 +33,7 @@ class StorageIntf;
class ArgumentList;
struct ListItemInfo;
-/*! \brief This class stores information about an inheritance relation
+/** This class stores information about an inheritance relation
*/
struct BaseInfo
{
@@ -45,8 +45,8 @@ struct BaseInfo
Specifier virt; //!< virtualness
};
-/*! \brief This struct is used to capture the tag file information
- * for an Entry.
+/** This struct is used to capture the tag file information
+ * for an Entry.
*/
struct TagInfo
{
@@ -55,8 +55,8 @@ struct TagInfo
QCString anchor;
};
-/*! \brief Represents an unstructured piece of information, about an
- * entity found in the sources.
+/** Represents an unstructured piece of information, about an
+ * entity found in the sources.
*
* parseMain() in scanner.l will generate a tree of these
* entries.
@@ -137,9 +137,11 @@ class Entry
Copy = 0x00080000,
Retain = 0x00100000,
Assign = 0x00200000,
- Composition = 0x00400000,
- Aggregation = 0x00800000,
- Association = 0x01000000
+ Strong = 0x00400000,
+ Weak = 0x00800000,
+ Composition = 0x01000000,
+ Aggregation = 0x02000000,
+ Association = 0x04000000
};
enum ClassSpecifier
{
@@ -299,6 +301,11 @@ class Entry
Entry &operator=(const Entry &);
};
+/** Wrapper for a node in the Entry tree.
+ *
+ * Allows navigating through the Entry tree and load and storing Entry
+ * objects persistently to disk.
+ */
class EntryNav
{
public:
diff --git a/src/example.h b/src/example.h
index a780326..2ee1429 100644
--- a/src/example.h
+++ b/src/example.h
@@ -24,6 +24,7 @@
class ClassDef;
class MemberName;
+/** Data associated with an example. */
struct Example
{
QCString anchor;
@@ -31,6 +32,7 @@ struct Example
QCString file;
};
+/** A sorted dictionary of Example objects. */
class ExampleSDict : public SDict<Example>
{
public:
diff --git a/src/filedef.cpp b/src/filedef.cpp
index c0aa4cf..674cc89 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -40,6 +40,7 @@
//---------------------------------------------------------------------------
+/** Class implementing CodeOutputInterface by throwing away everything. */
class DevNullCodeDocInterface : public CodeOutputInterface
{
public:
diff --git a/src/filedef.h b/src/filedef.h
index 08b8480..2368b36 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -40,6 +40,7 @@ class MemberGroupSDict;
class PackageDef;
class DirDef;
+/** Class representing the data associated with a \#include statement. */
struct IncludeInfo
{
IncludeInfo() { fileDef=0; local=FALSE; indirect=FALSE; }
@@ -51,16 +52,14 @@ struct IncludeInfo
bool indirect;
};
-/*! \class FileDef filedef.h
- \brief A File definition.
-
- An object of this class contains all file information that is gathered.
- This includes the members and compounds defined in the file.
-
- The member writeDocumentation() can be used to generate the page of
- documentation to HTML and LaTeX.
-*/
-
+/** A model of a file symbol.
+ *
+ * An object of this class contains all file information that is gathered.
+ * This includes the members and compounds defined in the file.
+ *
+ * The member writeDocumentation() can be used to generate the page of
+ * documentation to HTML and LaTeX.
+ */
class FileDef : public Definition
{
friend class FileName;
@@ -80,7 +79,7 @@ class FileDef : public Definition
else
return Definition::name();
}
- QCString displayName() const { return name(); }
+ QCString displayName(bool=TRUE) const { return name(); }
QCString fileName() const { return filename; }
QCString getOutputFileBase() const
@@ -221,8 +220,6 @@ class FileDef : public Definition
QIntDict<Definition> *srcDefDict;
QIntDict<MemberDef> *srcMemberDict;
bool isSource;
- //bool m_isJava;
- //bool m_isCSharp;
QCString fileVersion;
PackageDef *package;
DirDef *dir;
@@ -233,7 +230,7 @@ class FileDef : public Definition
bool m_subGrouping;
};
-
+/** Class representing a list of FileDef objects. */
class FileList : public QList<FileDef>
{
public:
@@ -273,6 +270,7 @@ class OutputNameDict : public QDict<FileList>
class Directory;
+/** Class representing an entry (file or sub directory) in a directory */
class DirEntry
{
public:
@@ -303,6 +301,7 @@ class DirEntry
bool m_isLast;
};
+/** Class representing a directory tree of DirEntry objects. */
class Directory : public DirEntry
{
public:
@@ -319,7 +318,6 @@ class Directory : public DirEntry
QList<DirEntry> m_children;
};
-//void generateFileTree(QTextStream &t);
void generateFileTree();
#endif
diff --git a/src/filename.h b/src/filename.h
index 29e90c0..e305e0e 100644
--- a/src/filename.h
+++ b/src/filename.h
@@ -22,6 +22,7 @@
#include <qdict.h>
#include "filedef.h"
+/** Class representing all files with a certain base name */
class FileName : public FileList
{
public:
@@ -37,12 +38,14 @@ class FileName : public FileList
QCString fName;
};
+/** Iterator for FileDef objects in a FileName list. */
class FileNameIterator : public QListIterator<FileDef>
{
public:
FileNameIterator(const FileName &list);
};
+/** Class representing a list of FileName objects. */
class FileNameList : public QList<FileName>
{
public:
@@ -52,12 +55,14 @@ class FileNameList : public QList<FileName>
int compareItems(GCI item1,GCI item2);
};
+/** Iterator for FileName objects in a FileNameList. */
class FileNameListIterator : public QListIterator<FileName>
{
public:
FileNameListIterator( const FileNameList &list );
};
+/** Unsorted dictionary of FileName objects. */
class FileNameDict : public QDict<FileName>
{
public:
diff --git a/src/formula.h b/src/formula.h
index ca68e6e..a912b76 100644
--- a/src/formula.h
+++ b/src/formula.h
@@ -22,6 +22,7 @@
#include <qlist.h>
#include <qdict.h>
+/** Class representing a formula in the output. */
class Formula
{
public:
@@ -35,12 +36,14 @@ class Formula
QCString form;
};
+/** A list of Formula objects. */
class FormulaList : public QList<Formula>
{
public:
void generateBitmaps(const char *path);
};
+/** Iterator for Formula objects in a FormulaList. */
class FormulaListIterator : public QListIterator<Formula>
{
public:
@@ -48,6 +51,7 @@ class FormulaListIterator : public QListIterator<Formula>
QListIterator<Formula>(l) {}
};
+/** Unsorted dictionary of Formula objects. */
class FormulaDict : public QDict<Formula>
{
public:
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 4de3bf2..d8c788e 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -270,6 +270,7 @@ static void codifyLines(char *text)
char *p=text,*sp=p;
char c;
bool done=FALSE;
+ const char * tmp_currentFontClass = g_currentFontClass;
while (!done)
{
sp=p;
@@ -284,6 +285,10 @@ static void codifyLines(char *text)
{
startCodeLine();
}
+ if (tmp_currentFontClass)
+ {
+ startFontClass(tmp_currentFontClass);
+ }
}
else
{
@@ -923,7 +928,12 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
}
/*-------- comments ---------------------------------------------------*/
-<Start>\n?{BS}"!>" { // start comment line or comment block
+<Start>\n?{BS}"!>"|"!<" { // start comment line or comment block
+ yy_push_state(YY_START);
+ BEGIN(DocBlock);
+ docBlock=yytext;
+ }
+<Declaration>{BS}"!<" { // start comment line or comment block
yy_push_state(YY_START);
BEGIN(DocBlock);
docBlock=yytext;
@@ -932,7 +942,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
<DocBlock>.* { // contents of current comment line
docBlock+=yytext;
}
-<DocBlock>"\n"{BS}("!>"|"!"+) { //| comment block (next line is also comment line)
+<DocBlock>"\n"{BS}("!>"|"!<"|"!!") { //| comment block (next line is also comment line)
docBlock+=yytext;
}
<DocBlock>"\n" { // comment block ends at the end of this line
@@ -956,7 +966,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
yy_pop_state();
}
-<*>"!"[^>\n].*|"!"$ { // normal comment
+<*>"!"[^><\n].*|"!"$ { // normal comment
if(YY_START == String) REJECT; // ignore in strings
startFontClass("comment");
codifyLines(yytext);
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 85caa36..c180c4e 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -722,7 +722,7 @@ void FTVHelp::addContentsItem(bool isDir,
Definition *def
)
{
- //printf("addContentsItem(%s,%s,%s,%s)\n",name,ref,file,anchor);
+ //printf("%p: m_indent=%d addContentsItem(%s,%s,%s,%s)\n",this,m_indent,name,ref,file,anchor);
QList<FTVNode> *nl = &m_indentNodes[m_indent];
FTVNode *newNode = new FTVNode(isDir,ref,file,anchor,name,separateIndex,addToNavIndex,def);
if (!nl->isEmpty())
@@ -1053,9 +1053,18 @@ static void generateJSLink(FTextStream &t,FTVNode *n)
}
}
+static QCString convertFileId2Var(const QCString &fileId)
+{
+ QCString varId = fileId;
+ int i=varId.findRev('/');
+ if (i>=0) varId = varId.mid(i+1);
+ return substitute(varId,"-","_");
+}
+
static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t,
const QList<FTVNode> &nl,int level,bool &first)
{
+ static QCString htmlOutput = Config_getString("HTML_OUTPUT");
QCString indentStr;
indentStr.fill(' ',level*2);
bool found=FALSE;
@@ -1088,18 +1097,14 @@ static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t,
{
QCString fileId = n->file;
if (dupOfParent(n)) fileId+="_dup";
- QFile f(Config_getString("HTML_OUTPUT")+"/"+fileId+".js");
+ QFile f(htmlOutput+"/"+fileId+".js");
if (f.open(IO_WriteOnly))
{
FTextStream tt(&f);
- QCString varId = fileId;
- int i=fileId.findRev('/');
- if (i>=0) varId = varId.mid(i+1);
- tt << "var " << varId << " =" << endl;
+ tt << "var " << convertFileId2Var(fileId) << " =" << endl;
generateJSTree(navIndex,tt,n->children,1,firstChild);
tt << endl << "];";
}
- // write file name without extension as marker
t << "\"" << fileId << "\" ]";
}
else // no children
@@ -1167,54 +1172,54 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
t << "]" << endl;
else
t << endl << " ] ]" << endl;
- t << "];" << endl;
- t << endl << navtree_script;
- }
-
- // write the navigation index (and sub-indices)
- navIndex.sort();
- int subIndex=0;
- int elemCount=0;
- const int maxElemCount=250;
- QFile fidx(htmlOutput+"/navtreeindex.js");
- QFile fsidx(htmlOutput+"/navtreeindex0.js");
- if (fidx.open(IO_WriteOnly) && fsidx.open(IO_WriteOnly))
- {
- FTextStream tidx(&fidx);
- FTextStream tsidx(&fsidx);
- tidx << "var NAVTREEINDEX =" << endl;
- tidx << "[" << endl;
- tsidx << "var NAVTREEINDEX" << subIndex << " =" << endl;
- tsidx << "{" << endl;
- QListIterator<NavIndexEntry> li(navIndex);
- NavIndexEntry *e;
- for (li.toFirst();(e=li.current());) // for each entry
+ t << "];" << endl << endl;
+
+ // write the navigation index (and sub-indices)
+ navIndex.sort();
+ int subIndex=0;
+ int elemCount=0;
+ const int maxElemCount=250;
+ //QFile fidx(htmlOutput+"/navtreeindex.js");
+ QFile fsidx(htmlOutput+"/navtreeindex0.js");
+ if (/*fidx.open(IO_WriteOnly) &&*/ fsidx.open(IO_WriteOnly))
{
- if (elemCount==0)
- {
- tidx << "\"" << e->url << "\"," << endl;
- }
- tsidx << "\"" << e->url << "\":[" << e->path << "]";
- ++li;
- if (li.current()) tsidx << ","; // not last entry
- tsidx << endl;
-
- elemCount++;
- if (li.current() && elemCount>=maxElemCount) // switch to new sub-index
+ //FTextStream tidx(&fidx);
+ FTextStream tsidx(&fsidx);
+ t << "var NAVTREEINDEX =" << endl;
+ t << "[" << endl;
+ tsidx << "var NAVTREEINDEX" << subIndex << " =" << endl;
+ tsidx << "{" << endl;
+ QListIterator<NavIndexEntry> li(navIndex);
+ NavIndexEntry *e;
+ for (li.toFirst();(e=li.current());) // for each entry
{
- tsidx << "};" << endl;
- elemCount=0;
- fsidx.close();
- subIndex++;
- fsidx.setName(htmlOutput+"/navtreeindex"+QCString().setNum(subIndex)+".js");
- if (!fsidx.open(IO_WriteOnly)) break;
- tsidx.setDevice(&fsidx);
- tsidx << "var NAVTREEINDEX" << subIndex << " =" << endl;
- tsidx << "{" << endl;
+ if (elemCount==0)
+ {
+ t << "\"" << e->url << "\"," << endl;
+ }
+ tsidx << "\"" << e->url << "\":[" << e->path << "]";
+ ++li;
+ if (li.current()) tsidx << ","; // not last entry
+ tsidx << endl;
+
+ elemCount++;
+ if (li.current() && elemCount>=maxElemCount) // switch to new sub-index
+ {
+ tsidx << "};" << endl;
+ elemCount=0;
+ fsidx.close();
+ subIndex++;
+ fsidx.setName(htmlOutput+"/navtreeindex"+QCString().setNum(subIndex)+".js");
+ if (!fsidx.open(IO_WriteOnly)) break;
+ tsidx.setDevice(&fsidx);
+ tsidx << "var NAVTREEINDEX" << subIndex << " =" << endl;
+ tsidx << "{" << endl;
+ }
}
+ tsidx << "};" << endl;
+ t << "];" << endl;
}
- tsidx << "};" << endl;
- tidx << "];" << endl;
+ t << endl << navtree_script;
}
}
diff --git a/src/ftvhelp.h b/src/ftvhelp.h
index 1169238..8f24b3d 100644
--- a/src/ftvhelp.h
+++ b/src/ftvhelp.h
@@ -34,7 +34,7 @@ class Definition;
struct FTVNode;
class FTextStream;
-/*! A class that generates a dynamic tree view side panel.
+/** A class that generates a dynamic tree view side panel.
*/
class FTVHelp : public IndexIntf
{
diff --git a/src/groupdef.h b/src/groupdef.h
index 5c83b81..6b41979 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -42,6 +42,7 @@ class DirList;
class FTVHelp;
class Entry;
+/** A model of a group of symbols. */
class GroupDef : public Definition
{
public:
@@ -50,7 +51,7 @@ class GroupDef : public Definition
DefType definitionType() const { return TypeGroup; }
QCString getOutputFileBase() const;
QCString anchor() const { return QCString(); }
- QCString displayName() const { return hasGroupTitle() ? title : Definition::name(); }
+ 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; }
@@ -153,6 +154,7 @@ class GroupDef : public Definition
};
+/** A sorted dictionary of GroupDef objects. */
class GroupSDict : public SDict<GroupDef>
{
public:
@@ -164,6 +166,7 @@ class GroupSDict : public SDict<GroupDef>
}
};
+/** A list of GroupDef objects. */
class GroupList : public QList<GroupDef>
{
public:
@@ -173,6 +176,7 @@ class GroupList : public QList<GroupDef>
}
};
+/** An iterator for GroupDef objects in a GroupList. */
class GroupListIterator : public QListIterator<GroupDef>
{
public:
diff --git a/src/growbuf.h b/src/growbuf.h
index 6798692..f1bf315 100644
--- a/src/growbuf.h
+++ b/src/growbuf.h
@@ -4,6 +4,7 @@
#include <stdlib.h>
#include <string.h>
+/** Class representing a string buffer optimised for growing. */
class GrowBuf
{
public:
diff --git a/src/htags.h b/src/htags.h
index 458adec..4a164a6 100644
--- a/src/htags.h
+++ b/src/htags.h
@@ -17,6 +17,7 @@
class QCString;
+/** This class is a namespace for HTAGS related functions */
struct Htags
{
static bool useHtags;
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index c3bdd9f..e048858 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -572,8 +572,8 @@ void HtmlDocVisitor::visit(DocFormula *f)
m_t << "\" alt=\"";
filterQuotedCdataAttr(f->text());
m_t << "\"";
- /// @todo cache image dimensions on formula generation and give height/width
- /// for faster preloading and better rendering of the page
+ // TODO: cache image dimensions on formula generation and give height/width
+ // for faster preloading and better rendering of the page
m_t << " src=\"" << f->relPath() << f->name() << ".png\"/>";
}
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 63bff45..6cf31ad 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -2722,6 +2722,11 @@ void HtmlGenerator::writeSplitBar(const char *name)
t << writeSplitBarAsString(name,relPath);
}
+void HtmlGenerator::writeNavigationPath(const char *s)
+{
+ t << substitute(s,"$relpath$",relPath);
+}
+
void HtmlGenerator::startContents()
{
t << "<div class=\"contents\">" << endl;
@@ -3037,14 +3042,21 @@ void HtmlGenerator::endLabels()
t << "</span>";
}
-void HtmlGenerator::writeInheritedSectionTitle(const char *id,
- const char *file,const char *anchor,const char *title,
- const char *name)
+void HtmlGenerator::writeInheritedSectionTitle(
+ const char *id, const char *ref,
+ const char *file, const char *anchor,
+ const char *title, const char *name)
{
DBG_HTML(t << "<!-- writeInheritedSectionTitle -->" << endl;)
QCString a = anchor;
if (!a.isEmpty()) a.prepend("#");
- QCString classLink = QCString("<a class=\"el\" href=\"")+correctURL(file,relPath)+Doxygen::htmlFileExtension+a+"\">"+name+"</a>";
+ QCString classLink = QCString("<a class=\"el\" href=\"");
+ if (ref)
+ {
+ classLink+= externalLinkTarget() + externalRef(relPath,ref,TRUE);
+ }
+ classLink+=file+Doxygen::htmlFileExtension+a;
+ classLink+=QCString("\">")+name+"</a>";
t << "<tr class=\"inherit_header " << id << "\">"
<< "<td colspan=\"2\" onclick=\"javascript:toggleInherit('" << id << "')\">"
<< "<img src=\"" << relPath << "closed.png\" alt=\"-\"/>&nbsp;"
diff --git a/src/htmlgen.h b/src/htmlgen.h
index 58c534c..83599f4 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -29,6 +29,7 @@
class QFile;
class FTextStream;
+/** Generator for HTML output */
class HtmlGenerator : public OutputGenerator
{
public:
@@ -137,8 +138,9 @@ class HtmlGenerator : public OutputGenerator
void insertMemberAlign(bool);
void startMemberDescription(const char *anchor,const char *inheritId);
void endMemberDescription();
- void writeInheritedSectionTitle(const char *id,const char *file,
- const char *anchor,const char *title,const char *name);
+ void writeInheritedSectionTitle(const char *id, const char *ref,
+ const char *file, const char *anchor,
+ const char *title,const char *name);
void writeRuler() { t << "<hr/>"; }
void writeAnchor(const char *,const char *name)
@@ -200,6 +202,7 @@ class HtmlGenerator : public OutputGenerator
void startQuickIndices() {}
void endQuickIndices();
void writeSplitBar(const char *name);
+ void writeNavigationPath(const char *s);
void writeLogo();
void writeQuickLinks(bool compact,HighlightedItem hli,const char *file);
void startContents();
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index 2860296..86d4e42 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -34,6 +34,7 @@
//----------------------------------------------------------------------------
+/** Class representing a field in the HTML help index. */
struct IndexField
{
QCString name;
@@ -43,6 +44,7 @@ struct IndexField
bool reversed;
};
+/** Sorted dictionary of IndexField objects. */
class IndexFieldSDict : public SDict<IndexField>
{
public:
@@ -54,8 +56,8 @@ class IndexFieldSDict : public SDict<IndexField>
}
};
-/*! A helper class for HtmlHelp that manages a two level index in
- * alphabetical order
+/** A helper class for HtmlHelp that manages a two level index in
+ * alphabetical order.
*/
class HtmlHelpIndex
{
diff --git a/src/htmlhelp.h b/src/htmlhelp.h
index 669dd24..524f8f1 100644
--- a/src/htmlhelp.h
+++ b/src/htmlhelp.h
@@ -30,7 +30,8 @@ class QFile;
class Definition;
class HtmlHelpIndex;
-/*! A class that generated the HTML Help specific files.
+/** A class that generated the HTML Help specific files.
+ *
* These files can be used with the Microsoft HTML Help workshop
* to generate compressed HTML files (.chm).
*/
diff --git a/src/image.cpp b/src/image.cpp
index 20fa868..8afab58 100644
--- a/src/image.cpp
+++ b/src/image.cpp
@@ -25,6 +25,7 @@
typedef unsigned char Byte;
+/** Helper struct representing a RGBA color */
struct Color
{
Byte red;
diff --git a/src/image.h b/src/image.h
index a73be0d..5fb98e6 100644
--- a/src/image.h
+++ b/src/image.h
@@ -20,6 +20,7 @@
#define _IMAGE_H
#include <qglobal.h>
+/** Class representing a bitmap image generated by doxygen. */
class Image
{
public:
@@ -49,6 +50,7 @@ class Image
uchar *data;
};
+/** Class representing a bitmap image colored based on hue/sat/gamma settings. */
class ColoredImage
{
public:
diff --git a/src/index.cpp b/src/index.cpp
index ea240f4..b2301a2 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -288,10 +288,16 @@ void endFileWithNavPath(Definition *d,OutputList &ol)
}
//----------------------------------------------------------------------
-template<class T> void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,const QCString &name,const QCString &anchor,bool addToIndex=TRUE)
+template<class T>
+void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
+ const QCString &name,const QCString &anchor,
+ bool addToIndex=TRUE,bool preventSeparateIndex=FALSE)
{
bool hasMembers = def->getMemberLists().count()>0 || def->getMemberGroupSDict()!=0;
- Doxygen::indexList.addContentsItem(hasMembers,name,def->getReference(),def->getOutputFileBase(),anchor,hasMembers,addToIndex);
+ Doxygen::indexList.addContentsItem(hasMembers,name,
+ def->getReference(),def->getOutputFileBase(),anchor,
+ hasMembers && !preventSeparateIndex,
+ addToIndex);
int numClasses=0;
ClassSDict *classes = def->getClassSDict();
if (classes)
@@ -321,19 +327,41 @@ template<class T> void addMembersToIndex(T *def,LayoutDocManager::LayoutPart par
MemberDef *md;
for (mi.toFirst();(md=mi.current());++mi)
{
+ LockingPtr<MemberList> enumList = md->enumFieldList();
+ bool isDir = enumList!=0 && md->isEnumerate();
if (md->name().find('@')==-1)
{
if (md->getOuterScope()==def)
{
- Doxygen::indexList.addContentsItem(FALSE,
+ Doxygen::indexList.addContentsItem(isDir,
md->name(),md->getReference(),md->getOutputFileBase(),md->anchor(),FALSE,addToIndex);
}
else // inherited member
{
- Doxygen::indexList.addContentsItem(FALSE,
+ Doxygen::indexList.addContentsItem(isDir,
md->name(),def->getReference(),def->getOutputFileBase(),md->anchor(),FALSE,addToIndex);
}
}
+ if (isDir)
+ {
+ Doxygen::indexList.incContentsDepth();
+ MemberListIterator emli(*enumList);
+ MemberDef *emd;
+ for (emli.toFirst();(emd=emli.current());++emli)
+ {
+ if (emd->getOuterScope()==def)
+ {
+ Doxygen::indexList.addContentsItem(FALSE,
+ emd->name(),emd->getReference(),emd->getOutputFileBase(),emd->anchor(),FALSE,addToIndex);
+ }
+ else // inherited member
+ {
+ Doxygen::indexList.addContentsItem(FALSE,
+ emd->name(),def->getReference(),def->getOutputFileBase(),emd->anchor(),FALSE,addToIndex);
+ }
+ }
+ Doxygen::indexList.decContentsDepth();
+ }
}
}
}
@@ -351,8 +379,8 @@ template<class T> void addMembersToIndex(T *def,LayoutDocManager::LayoutPart par
if (cd->isLinkable())
{
bool isNestedClass = def->definitionType()==Definition::TypeClass;
- addMembersToIndex(cd,LayoutDocManager::Class,cd->className(),cd->anchor(),
- addToIndex && isNestedClass);
+ addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(FALSE),cd->anchor(),
+ addToIndex && isNestedClass,preventSeparateIndex);
}
}
}
@@ -526,6 +554,12 @@ static bool fileVisibleInIndex(FileDef *fd,bool &genSourceFile)
);
}
+static bool classVisibleInIndex(ClassDef *cd)
+{
+ static bool allExternals = Config_getBool("ALLEXTERNALS");
+ return (allExternals && cd->isLinkable()) || cd->isLinkableInProject();
+}
+
//----------------------------------------------------------------------------
static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv,bool addToIndex)
{
@@ -616,7 +650,7 @@ static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv
ol.parseText(fd->displayName());
ol.endIndexItem(reference,outputBase);
ol.endIndexListItem();
- if (ftv)
+ if (ftv && doc)
{
ftv->addContentsItem(FALSE,
fd->displayName(),
@@ -705,7 +739,7 @@ static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex)
ftv->addContentsItem(FALSE,fd->displayName(),
reference, outputBase, 0,
FALSE,FALSE,fd);
- if (addToIndex)
+ if (addToIndex && doc)
{
addMembersToIndex(fd,LayoutDocManager::File,
fd->displayName(),QCString());
@@ -918,9 +952,11 @@ static void writeHierarchicalIndex(OutputList &ol)
ol.pushGeneratorState();
//2.{
ol.disable(OutputGenerator::Html);
+ Doxygen::indexList.disable();
writeClassHierarchy(ol,0,addToIndex);
+ Doxygen::indexList.enable();
ol.popGeneratorState();
//2.}
@@ -1256,9 +1292,9 @@ void writeClassTree(ClassSDict *clDict,FTVHelp *ftv,bool addToIndex,bool globalO
}
if (!globalOnly ||
- cd->getOuterScope()==0 ||
- cd->getOuterScope()==Doxygen::globalScope
- )
+ cd->getOuterScope()==0 ||
+ cd->getOuterScope()==Doxygen::globalScope
+ )
{
int count=0;
if (cd->getClassSDict())
@@ -1273,14 +1309,18 @@ void writeClassTree(ClassSDict *clDict,FTVHelp *ftv,bool addToIndex,bool globalO
}
}
}
- if (cd->isLinkableInProject() && cd->templateMaster()==0)
+ if (classVisibleInIndex(cd) && cd->templateMaster()==0)
{
- ftv->addContentsItem(count>0,cd->className(),cd->getReference(),
- cd->getOutputFileBase(),0,FALSE,TRUE,cd);
+ ftv->addContentsItem(count>0,cd->displayName(FALSE),cd->getReference(),
+ cd->getOutputFileBase(),cd->anchor(),FALSE,TRUE,cd);
if (addToIndex &&
- (cd->getOuterScope()==0 || cd->getOuterScope()->definitionType()!=Definition::TypeClass))
+ !cd->isEmbeddedInOuterScope() &&
+ (cd->getOuterScope()==0 ||
+ cd->getOuterScope()->definitionType()!=Definition::TypeClass
+ )
+ )
{
- addMembersToIndex(cd,LayoutDocManager::Class,cd->className(),cd->anchor());
+ addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(FALSE),cd->anchor());
}
if (count>0)
{
@@ -1303,8 +1343,8 @@ static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
- if (!rootOnly || (nd->isLinkableInProject() &&
- nd->getOuterScope()==Doxygen::globalScope))
+ if (/*nd->isLinkableInProject() && */
+ (!rootOnly || nd->getOuterScope()==Doxygen::globalScope))
{
int count=0;
if (nd->getNamespaceSDict())
@@ -1337,30 +1377,29 @@ static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
count+=classCount;
}
- if (nd->getLanguage()==SrcLangExt_VHDL)
+
+ QCString ref;
+ QCString file;
+ if (nd->isLinkableInProject())
{
- QCString q=nd->getOutputFileBase().replace(0,strlen("namespace"),"class");
- ftv->addContentsItem(count>0,nd->localName(),nd->getReference(),q,0,FALSE,TRUE,nd);
- }
- else
- {
- ftv->addContentsItem(count>0,nd->localName(),nd->getReference(),
- nd->getOutputFileBase(),0,FALSE,TRUE,nd);
+ ref = nd->getReference();
+ file = nd->getOutputFileBase();
+ if (nd->getLanguage()==SrcLangExt_VHDL) // UGLY HACK
+ {
+ file=file.replace(0,strlen("namespace"),"class");
+ }
}
+ ftv->addContentsItem(count>0,nd->localName(),ref,file,0,FALSE,TRUE,nd);
+
if (addToIndex)
{
- if (nd->getLanguage()==SrcLangExt_VHDL) // UGLY HACK
- {
- QCString q=nd->getOutputFileBase().replace(0,strlen("namespace"),"class");
- Doxygen::indexList.addContentsItem(count>0,nd->localName(),nd->getReference(),q,QCString(),count>0,showClasses);
- }
- else
- {
- Doxygen::indexList.addContentsItem(count>0,nd->localName(),nd->getReference(),nd->getOutputFileBase(),QCString(),count>0,showClasses);
- }
+ Doxygen::indexList.addContentsItem(count>0,nd->localName(),ref,file,QCString(),
+ count>0 && !file.isEmpty(),addToIndex);
}
+ //printf("*** writeNamespaceTree count=%d addToIndex=%d showClasses=%d classCount=%d\n",
+ // count,addToIndex,showClasses,classCount);
if (count>0)
{
if (addToIndex) Doxygen::indexList.incContentsDepth();
@@ -1594,6 +1633,7 @@ static QCString letterToLabel(char startLetter)
//----------------------------------------------------------------------------
+/** Special class list where sorting takes IGNORE_PREFIX into account. */
class PrefixIgnoreClassList : public ClassList
{
public:
@@ -1608,6 +1648,7 @@ public:
}
};
+/** Class representing a cell in the alphabetical class index. */
class AlphaIndexTableCell
{
public:
@@ -1629,12 +1670,14 @@ class AlphaIndexTableCell
int m_col;
};
+/** Class representing a row in the alphabetical class index. */
class AlphaIndexTableRows : public QList<AlphaIndexTableCell>
{
public:
AlphaIndexTableRows() { setAutoDelete(TRUE); }
};
+/** Iterator for the cells in a row of the alphabetical class index. */
class AlphaIndexTableRowsIterator : public QListIterator<AlphaIndexTableCell>
{
public:
@@ -1642,6 +1685,7 @@ class AlphaIndexTableRowsIterator : public QListIterator<AlphaIndexTableCell>
QListIterator<AlphaIndexTableCell>(list) {}
};
+/** Class representing the columns in the alphabetical class index. */
class AlphaIndexTableColumns : public QList<AlphaIndexTableRows>
{
public:
@@ -1839,10 +1883,6 @@ static void writeAlphabeticalClassList(OutputList &ol)
{
nsDispName=namesp;
}
- if (cname.right(2)=="-g" || cname.right(2)=="-p")
- {
- cname = cname.left(cname.length()-2);
- }
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),cd->anchor(),cname);
@@ -1909,7 +1949,7 @@ static void writeAlphabeticalIndex(OutputList &ol)
if (addToIndex)
{
- Doxygen::indexList.addContentsItem(TRUE,title,0,"classes",0,TRUE,TRUE);
+ Doxygen::indexList.addContentsItem(FALSE,title,0,"classes",0,FALSE,TRUE);
}
ol.startContents();
@@ -1961,9 +2001,11 @@ static void writeAnnotatedIndex(OutputList &ol)
// ---------------
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
+ Doxygen::indexList.disable();
writeAnnotatedClassList(ol);
+ Doxygen::indexList.enable();
ol.popGeneratorState();
// ---------------
@@ -2380,6 +2422,7 @@ static void writeQuickMemberIndex(OutputList &ol,
//----------------------------------------------------------------------------
+/** Helper class representing a class member in the navigation menu. */
struct CmhlInfo
{
CmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
@@ -2559,6 +2602,7 @@ static void writeClassMemberIndex(OutputList &ol)
//----------------------------------------------------------------------------
+/** Helper class representing a file member in the navigation menu. */
struct FmhlInfo
{
FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
@@ -2729,6 +2773,7 @@ static void writeFileMemberIndex(OutputList &ol)
//----------------------------------------------------------------------------
+/** Helper class representing a namespace member in the navigation menu. */
struct NmhlInfo
{
NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
@@ -3418,11 +3463,29 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
MemberDef *md;
for (mi.toFirst();(md=mi.current());++mi)
{
+ LockingPtr<MemberList> enumList = md->enumFieldList();
+ bool isDir = enumList!=0 && md->isEnumerate();
if (md->isVisible() && md->name().find('@')==-1)
{
- Doxygen::indexList.addContentsItem(FALSE,
+ Doxygen::indexList.addContentsItem(isDir,
md->name(),md->getReference(),
- md->getOutputFileBase(),md->anchor(),FALSE);
+ md->getOutputFileBase(),md->anchor(),FALSE,addToIndex);
+ }
+ if (isDir)
+ {
+ Doxygen::indexList.incContentsDepth();
+ MemberListIterator emli(*enumList);
+ MemberDef *emd;
+ for (emli.toFirst();(emd=emli.current());++emli)
+ {
+ if (emd->isVisible())
+ {
+ Doxygen::indexList.addContentsItem(FALSE,
+ emd->name(),emd->getReference(),emd->getOutputFileBase(),
+ emd->anchor(),FALSE,addToIndex);
+ }
+ }
+ Doxygen::indexList.decContentsDepth();
}
}
}
@@ -3435,9 +3498,16 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
{
if (cd->isVisible())
{
- Doxygen::indexList.addContentsItem(FALSE,
+ if (cd->isLinkable() && cd->isEmbeddedInOuterScope())
+ {
+ addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(FALSE),cd->anchor(),addToIndex,TRUE);
+ }
+ else // only index the class, not its members
+ {
+ Doxygen::indexList.addContentsItem(FALSE,
cd->localName(),cd->getReference(),
cd->getOutputFileBase(),cd->anchor(),FALSE,FALSE);
+ }
}
}
}
@@ -3634,9 +3704,11 @@ static void writeGroupIndex(OutputList &ol)
// 2.{
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
+ Doxygen::indexList.disable();
writeGroupHierarchy(ol,0,FALSE);
+ Doxygen::indexList.enable();
ol.popGeneratorState();
// 2.}
diff --git a/src/index.h b/src/index.h
index 9bb98b6..050350f 100644
--- a/src/index.h
+++ b/src/index.h
@@ -107,10 +107,16 @@ class IndexList : public IndexIntf
public:
/** Creates a list of indexes */
- IndexList() { m_intfs.setAutoDelete(TRUE); }
+ IndexList() { m_intfs.setAutoDelete(TRUE); m_enabled=TRUE; }
/** Add an index generator to the list */
void addIndex(IndexIntf *intf)
{ m_intfs.append(intf); }
+ void disable()
+ { m_enabled = FALSE; }
+ void enable()
+ { m_enabled = TRUE; }
+ bool isEnabled() const
+ { return m_enabled; }
// IndexIntf implementation
void initialize()
@@ -118,24 +124,26 @@ class IndexList : public IndexIntf
void finalize()
{ foreach(&IndexIntf::finalize); }
void incContentsDepth()
- { foreach(&IndexIntf::incContentsDepth); }
+ { if (m_enabled) foreach(&IndexIntf::incContentsDepth); }
void decContentsDepth()
- { foreach(&IndexIntf::decContentsDepth); }
+ { if (m_enabled) foreach(&IndexIntf::decContentsDepth); }
void addContentsItem(bool isDir, const char *name, const char *ref,
const char *file, const char *anchor,bool separateIndex=FALSE,bool addToNavIndex=FALSE,
Definition *def=0)
- { foreach<bool,const char *,const char *,const char *,const char*,bool,bool,Definition *>
+ { if (m_enabled) foreach<bool,const char *,const char *,const char *,const char*,bool,bool,Definition *>
(&IndexIntf::addContentsItem,isDir,name,ref,file,anchor,separateIndex,addToNavIndex,def); }
void addIndexItem(Definition *context,MemberDef *md,const char *title=0)
- { foreach<Definition *,MemberDef *>
+ { if (m_enabled) foreach<Definition *,MemberDef *>
(&IndexIntf::addIndexItem,context,md,title); }
void addIndexFile(const char *name)
- { foreach<const char *>(&IndexIntf::addIndexFile,name); }
+ { if (m_enabled) foreach<const char *>(&IndexIntf::addIndexFile,name); }
void addImageFile(const char *name)
- { foreach<const char *>(&IndexIntf::addImageFile,name); }
+ { if (m_enabled) foreach<const char *>(&IndexIntf::addImageFile,name); }
void addStyleSheetFile(const char *name)
- { foreach<const char *>(&IndexIntf::addStyleSheetFile,name); }
+ { if (m_enabled) foreach<const char *>(&IndexIntf::addStyleSheetFile,name); }
+ private:
+ bool m_enabled;
};
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index d86b5fc..7d326cb 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -60,121 +60,6 @@ static const char *getSectionName(int level)
return secLabels[QMIN(maxLevels-1,l)];
}
-#if 0
-static int rowspan(DocHtmlCell *cell)
-{
- int retval = 0;
- HtmlAttribList attrs = cell->attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="rowspan")
- {
- retval = attrs.at(i)->value.toInt();
- break;
- }
- }
- return retval;
-}
-
-static int colspan(DocHtmlCell *cell)
-{
- int retval = 1;
- HtmlAttribList attrs = cell->attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="colspan")
- {
- retval = QMAX(1,attrs.at(i)->value.toInt());
- break;
- }
- }
- return retval;
-}
-
-static int align(DocHtmlCell *cell)
-{
- HtmlAttribList attrs = cell->attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="align")
- {
- if (attrs.at(i)->value.lower()=="center")
- return 1;
- else if (attrs.at(i)->value.lower()=="right")
- return 2;
- else return 0;
- }
- }
- return 0;
-}
-
-struct ActiveRowSpan
-{
- ActiveRowSpan(int rows,int col) : rowsLeft(rows), column(col) {}
- int rowsLeft;
- int column;
-};
-
-typedef QList<ActiveRowSpan> RowSpanList;
-
-static int determineNumCols(DocHtmlTable *table)
-{
- RowSpanList rowSpans;
- rowSpans.setAutoDelete(TRUE);
- int maxCols=0;
- int rowIdx=1;
- QListIterator<DocNode> li(table->children());
- DocNode *rowNode;
- for (li.toFirst();(rowNode=li.current());++li)
- {
- int colIdx=1;
- int cells=0;
- if (rowNode->kind()==DocNode::Kind_HtmlRow)
- {
- uint i;
- DocHtmlRow *row = (DocHtmlRow*)rowNode;
- QListIterator<DocNode> rli(row->children());
- DocNode *cellNode;
- for (rli.toFirst();(cellNode=rli.current());++rli)
- {
- if (cellNode->kind()==DocNode::Kind_HtmlCell)
- {
- DocHtmlCell *cell = (DocHtmlCell*)cellNode;
- int rs = rowspan(cell);
- int cs = colspan(cell);
-
- for (i=0;i<rowSpans.count();i++)
- {
- if (rowSpans.at(i)->rowsLeft>0 &&
- rowSpans.at(i)->column==colIdx)
- {
- colIdx=rowSpans.at(i)->column+1;
- cells++;
- }
- }
- if (rs>0) rowSpans.append(new ActiveRowSpan(rs,colIdx));
- cell->setRowIndex(rowIdx);
- cell->setColumnIndex(colIdx);
- colIdx+=cs;
- cells++;
- }
- }
- for (i=0;i<rowSpans.count();i++)
- {
- if (rowSpans.at(i)->rowsLeft>0) rowSpans.at(i)->rowsLeft--;
- }
- row->setVisibleCells(cells);
- rowIdx++;
- }
- if (colIdx-1>maxCols) maxCols=colIdx-1;
- }
- return maxCols;
-}
-#endif
-
QCString LatexDocVisitor::escapeMakeIndexChars(const char *s)
{
QCString result;
@@ -1363,25 +1248,6 @@ void LatexDocVisitor::visitPost(DocSecRefList *)
m_t << "\\normalsize" << endl;
}
-//void LatexDocVisitor::visitPre(DocLanguage *l)
-//{
-// QCString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// pushEnabled();
-// m_hide = TRUE;
-// }
-//}
-//
-//void LatexDocVisitor::visitPost(DocLanguage *l)
-//{
-// QCString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// popEnabled();
-// }
-//}
-
void LatexDocVisitor::visitPre(DocParamSect *s)
{
if (m_hide) return;
diff --git a/src/latexgen.h b/src/latexgen.h
index 254632f..cd47ac3 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -22,6 +22,7 @@
class QFile;
+/** Generator for LaTeX output. */
class LatexGenerator : public OutputGenerator
{
public:
@@ -164,7 +165,7 @@ class LatexGenerator : public OutputGenerator
void endSmall() { t << "\\normalsize "; }
void startMemberDescription(const char *,const char *);
void endMemberDescription();
- void writeInheritedSectionTitle(const char *,const char *,
+ void writeInheritedSectionTitle(const char *,const char *,const char *,
const char *,const char *,const char *) {}
void startDescList(SectionTypes) { t << "\\begin{Desc}\n\\item["; }
void endDescList() { t << "\\end{Desc}" << endl; }
@@ -187,6 +188,7 @@ class LatexGenerator : public OutputGenerator
void startQuickIndices() {}
void endQuickIndices() {}
void writeSplitBar(const char *) {}
+ void writeNavigationPath(const char *) {}
void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem,const char*) {}
void startContents() {}
diff --git a/src/mangen.h b/src/mangen.h
index 7187e5d..fe951ad 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -22,6 +22,7 @@
class QFile;
+/** Generator for Man page output. */
class ManGenerator : public OutputGenerator
{
public:
@@ -160,7 +161,7 @@ class ManGenerator : public OutputGenerator
void endSmall() {}
void startMemberDescription(const char *,const char *) { t << "\n.RI \"\\fI"; firstCol=FALSE; }
void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; }
- void writeInheritedSectionTitle(const char *,const char *,
+ void writeInheritedSectionTitle(const char *,const char *,const char *,
const char *,const char *,const char *) {}
void startDescList(SectionTypes);
void endDescList() {}
@@ -184,6 +185,7 @@ class ManGenerator : public OutputGenerator
void startQuickIndices() {}
void endQuickIndices() {}
void writeSplitBar(const char *) {}
+ void writeNavigationPath(const char *) {}
void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem,const char *) {}
void startContents() {}
diff --git a/src/markdown.cpp b/src/markdown.cpp
index bb1a5a3..559828f 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -1339,6 +1339,11 @@ static bool isCodeBlock(const char *data,int offset,int size,int &indent)
//printf(">isCodeBlock: line is not indented enough %d<4\n",indent0);
return FALSE;
}
+ if (indent0>=size || data[indent0]=='\n') // empty line does not start a code block
+ {
+ //printf("only spaces at the end of a comment block\n");
+ return FALSE;
+ }
i=offset;
int nl=0;
@@ -1382,8 +1387,8 @@ static bool isCodeBlock(const char *data,int offset,int size,int &indent)
{
return FALSE;
}
- //printf(">isCodeBlock global indent %d>=%d+4=%d\n",
- // indent0,indent,indent0>=indent+4);
+ //printf(">isCodeBlock global indent %d>=%d+4=%d nl=%d\n",
+ // indent0,indent,indent0>=indent+4,nl);
return indent0>=indent+codeBlockIndent;
}
}
@@ -2121,6 +2126,7 @@ static QCString detab(const QCString &s,int &refIndent)
}
if (minIndent!=maxIndent) refIndent=minIndent; else refIndent=0;
out.addChar(0);
+ //printf("detab refIndent=%d\n",refIndent);
return out.get();
}
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 539b621..8591ca3 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -1837,9 +1837,16 @@ void MemberDef::_getLabels(QStrList &sl,Definition *container) const
if (isNew()) sl.append("new");
if (isOptional()) sl.append("optional");
if (isRequired()) sl.append("required");
+
+ if (isNonAtomic()) sl.append("nonatomic");
+ else if (isObjCProperty()) sl.append("atomic");
+
+ // mutual exclusive Objective 2.0 property attributes
if (isAssign()) sl.append("assign");
else if (isCopy()) sl.append("copy");
else if (isRetain()) sl.append("retain");
+ else if (isWeak()) sl.append("weak");
+ else if (isStrong()) sl.append("strong");
if (!isObjCMethod())
{
@@ -2774,8 +2781,9 @@ void MemberDef::warnIfUndocumented()
// name().data(),prot);
if ((!hasUserDocumentation() && !extractAll) &&
!isFriendClass() &&
- name().find('@')==-1 && d->name().find('@')==-1 &&
- protectionLevelVisible(m_impl->prot)
+ name().find('@')==-1 && d && d->name().find('@')==-1 &&
+ protectionLevelVisible(m_impl->prot) &&
+ !isReference()
)
{
warn_undoc(getDefFileName(),getDefLine(),"warning: Member %s%s (%s) of %s %s is not documented.",
@@ -3854,6 +3862,17 @@ bool MemberDef::isRetain() const
return (m_impl->memSpec&Entry::Retain)!=0;
}
+bool MemberDef::isWeak() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::Weak)!=0;
+}
+
+bool MemberDef::isStrong() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::Strong)!=0;
+}
bool MemberDef::isImplementation() const
{
@@ -4613,3 +4632,7 @@ void MemberDef::unlock() const
}
}
+QCString MemberDef::displayName(bool) const
+{
+ return Definition::name();
+}
diff --git a/src/memberdef.h b/src/memberdef.h
index 8c916cb..3658ac3 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -40,12 +40,7 @@ class QTextStream;
class ArgumentList;
class MemberDefImpl;
-struct SourceReference
-{
- FileDef *fd;
- QCString anchor;
-};
-
+/** A model of a class/file/namespace member symbol. */
class MemberDef : public Definition
{
public:
@@ -157,6 +152,8 @@ class MemberDef : public Definition
bool isCopy() const;
bool isAssign() const;
bool isRetain() const;
+ bool isWeak() const;
+ bool isStrong() const;
bool isNew() const;
bool isSealed() const;
bool isImplementation() const;
@@ -238,7 +235,7 @@ class MemberDef : public Definition
ClassDef *category() const;
- QCString displayName() const { return Definition::name(); }
+ QCString displayName(bool=TRUE) const;
//-----------------------------------------------------------------------------------
// ---- setters -----
diff --git a/src/membergroup.h b/src/membergroup.h
index fdd219b..6f0aa43 100644
--- a/src/membergroup.h
+++ b/src/membergroup.h
@@ -36,6 +36,7 @@ class Definition;
class StorageIntf;
struct ListItemInfo;
+/** A class representing a group of members. */
class MemberGroup
{
public:
@@ -106,10 +107,12 @@ class MemberGroup
QList<ListItemInfo> *m_xrefListItems;
};
+/** A list of MemberGroup objects. */
class MemberGroupList : public QList<MemberGroup>
{
};
+/** An iterator for MemberGroup objects in a MemberGroupList. */
class MemberGroupListIterator : public QListIterator<MemberGroup>
{
public:
@@ -117,6 +120,7 @@ class MemberGroupListIterator : public QListIterator<MemberGroup>
QListIterator<MemberGroup>(l) {}
};
+/** A sorted dictionary of MemberGroup objects. */
class MemberGroupSDict : public SIntDict<MemberGroup>
{
public:
@@ -128,7 +132,7 @@ class MemberGroupSDict : public SIntDict<MemberGroup>
}
};
-
+/** Data collected for a member group */
struct MemberGroupInfo
{
MemberGroupInfo() : m_sli(0) {}
@@ -141,19 +145,4 @@ struct MemberGroupInfo
QList<ListItemInfo> *m_sli;
};
-//class MemberGroupDict : public QIntDict<MemberGroup>
-//{
-// public:
-// MemberGroupDict(int size) : QIntDict<MemberGroup>(size) {}
-// ~MemberGroupDict() {}
-//};
-
-//class MemberGroupDictIterator : public QIntDictIterator<MemberGroup>
-//{
-// public:
-// MemberGroupDictIterator(const MemberGroupDict &d) :
-// QIntDictIterator<MemberGroup>(d) {}
-// ~MemberGroupDictIterator() {}
-//};
-
#endif
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index c11c6b4..0d74cd6 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -491,7 +491,9 @@ void MemberList::writeDeclarations(OutputList &ol,
int num = numDecMembers();
if (inheritedFrom)
{
- if ( cd && !optimizeVhdl && countInheritableMembers(inheritedFrom)>0 )
+ //if ( cd && !optimizeVhdl && countInheritableMembers(inheritedFrom)>0 )
+ if ( cd && !optimizeVhdl && cd->countMembersIncludingGrouped(
+ m_listType,inheritedFrom,TRUE)>0 )
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -499,7 +501,8 @@ void MemberList::writeDeclarations(OutputList &ol,
stripPath(cd->getOutputFileBase());
if (title)
{
- ol.writeInheritedSectionTitle(inheritId,cd->getOutputFileBase(),
+ ol.writeInheritedSectionTitle(inheritId,cd->getReference(),
+ cd->getOutputFileBase(),
cd->anchor(),title,cd->displayName());
}
ol.popGeneratorState();
diff --git a/src/memberlist.h b/src/memberlist.h
index facf54f..2c46f02 100644
--- a/src/memberlist.h
+++ b/src/memberlist.h
@@ -27,6 +27,7 @@ class MemberGroup;
class MemberGroupList;
class StorageIntf;
+/** A list of MemberDef objects. */
class MemberList : public QList<MemberDef>
{
public:
@@ -180,6 +181,7 @@ class MemberList : public QList<MemberDef>
bool m_needsSorting;
};
+/** An iterator for MemberDef objects in a MemberList. */
class MemberListIterator : public QListIterator<MemberDef>
{
public:
@@ -187,6 +189,7 @@ class MemberListIterator : public QListIterator<MemberDef>
virtual ~MemberListIterator() {}
};
+/** An unsorted dictionary of MemberDef objects. */
class MemberDict : public QDict<MemberDef>
{
public:
@@ -194,6 +197,7 @@ class MemberDict : public QDict<MemberDef>
virtual ~MemberDict() {}
};
+/** A sorted dictionary of MemberDef objects. */
class MemberSDict : public SDict<MemberDef>
{
public:
diff --git a/src/membername.h b/src/membername.h
index e5fbaa3..68a5293 100644
--- a/src/membername.h
+++ b/src/membername.h