summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/arguments.cpp65
-rw-r--r--src/arguments.h3
-rw-r--r--src/clangparser.cpp2
-rw-r--r--src/classdef.cpp661
-rw-r--r--src/classdef.h414
-rw-r--r--src/code.l39
-rw-r--r--src/commentscan.l4
-rw-r--r--src/config.h2
-rw-r--r--src/config.xml2
-rw-r--r--src/context.cpp55
-rw-r--r--src/debug.cpp1
-rw-r--r--src/debug.h3
-rw-r--r--src/defargs.l16
-rw-r--r--src/definition.cpp321
-rw-r--r--src/definition.h209
-rw-r--r--src/definitionimpl.h144
-rw-r--r--src/diagram.cpp4
-rw-r--r--src/dirdef.cpp143
-rw-r--r--src/dirdef.h90
-rw-r--r--src/docbookgen.cpp4
-rw-r--r--src/docbookvisitor.cpp42
-rw-r--r--src/docparser.cpp115
-rw-r--r--src/docparser.h39
-rw-r--r--src/docsets.cpp6
-rw-r--r--src/doctokenizer.l2
-rw-r--r--src/dot.cpp15
-rw-r--r--src/doxygen.cpp1452
-rw-r--r--src/doxygen.md20
-rw-r--r--src/emoji.cpp4
-rw-r--r--src/entry.cpp126
-rw-r--r--src/entry.h63
-rw-r--r--src/filedef.cpp327
-rw-r--r--src/filedef.h218
-rw-r--r--src/filestorage.h135
-rw-r--r--src/fortrancode.l7
-rw-r--r--src/fortranscanner.l3
-rw-r--r--src/ftvhelp.cpp27
-rw-r--r--src/ftvhelp.h16
-rw-r--r--src/groupdef.cpp242
-rw-r--r--src/groupdef.h166
-rw-r--r--src/htmldocvisitor.cpp105
-rw-r--r--src/htmlgen.cpp22
-rw-r--r--src/index.cpp56
-rw-r--r--src/latexdocvisitor.cpp35
-rw-r--r--src/latexgen.cpp86
-rw-r--r--src/logos.cpp1985
-rw-r--r--src/logos.h27
-rw-r--r--src/mandocvisitor.cpp34
-rw-r--r--src/markdown.cpp13
-rw-r--r--src/marshal.cpp857
-rw-r--r--src/marshal.h97
-rw-r--r--src/memberdef.cpp977
-rw-r--r--src/memberdef.h610
-rw-r--r--src/membergroup.cpp38
-rw-r--r--src/membergroup.h3
-rw-r--r--src/memberlist.cpp73
-rw-r--r--src/memberlist.h3
-rw-r--r--src/namespacedef.cpp243
-rw-r--r--src/namespacedef.h175
-rw-r--r--src/pagedef.cpp98
-rw-r--r--src/pagedef.h78
-rw-r--r--src/perlmodgen.cpp1
-rw-r--r--src/pre.l2
-rw-r--r--src/printdocvisitor.h1
-rw-r--r--src/pycode.l15
-rw-r--r--src/rtfdocvisitor.cpp38
-rw-r--r--src/scanner.l9
-rw-r--r--src/searchindex.cpp34
-rw-r--r--src/sqlcode.l8
-rw-r--r--src/store.cpp484
-rw-r--r--src/store.h123
-rw-r--r--src/tagreader.cpp4
-rw-r--r--src/tooltip.cpp2
-rw-r--r--src/translator_br.h363
-rw-r--r--src/translator_pt.h363
-rw-r--r--src/util.cpp52
-rw-r--r--src/vhdlcode.l15
-rw-r--r--src/vhdldocgen.cpp4
-rw-r--r--src/xmlcode.l8
-rw-r--r--src/xmldocvisitor.cpp28
81 files changed, 4706 insertions, 7673 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4dc31fa..92a302a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -204,12 +204,10 @@ add_library(_doxygen STATIC
latexgen.cpp
layout.cpp
lodepng.cpp
- logos.cpp
mandocvisitor.cpp
mangen.cpp
sqlite3gen.cpp
markdown.cpp
- marshal.cpp
memberdef.cpp
membergroup.cpp
memberlist.cpp
@@ -230,7 +228,6 @@ add_library(_doxygen STATIC
rtfgen.cpp
rtfstyle.cpp
searchindex.cpp
- store.cpp
tagreader.cpp
template.cpp
textdocvisitor.cpp
diff --git a/src/arguments.cpp b/src/arguments.cpp
index a828dab..6d3e13b 100644
--- a/src/arguments.cpp
+++ b/src/arguments.cpp
@@ -1,5 +1,4 @@
#include "arguments.h"
-#include "marshal.h"
#include <assert.h>
/*! the argument list is documented if one of its
@@ -38,67 +37,3 @@ ArgumentList *ArgumentList::deepCopy() const
return argList;
}
-ArgumentList *ArgumentList::unmarshal(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- ArgumentList *result = new ArgumentList;
- assert(count<1000000);
- //printf("unmarshalArgumentList: %d\n",count);
- for (i=0;i<count;i++)
- {
- Argument *a = new Argument;
- a->attrib = unmarshalQCString(s);
- a->type = unmarshalQCString(s);
- a->canType = unmarshalQCString(s);
- a->name = unmarshalQCString(s);
- a->array = unmarshalQCString(s);
- a->defval = unmarshalQCString(s);
- a->docs = unmarshalQCString(s);
- a->typeConstraint = unmarshalQCString(s);
- result->append(a);
- }
- result->constSpecifier = unmarshalBool(s);
- result->volatileSpecifier = unmarshalBool(s);
- result->pureSpecifier = unmarshalBool(s);
- result->trailingReturnType = unmarshalQCString(s);
- result->isDeleted = unmarshalBool(s);
- result->refQualifier = (RefQualifierType)unmarshalInt(s);
- return result;
-}
-
-void ArgumentList::marshal(StorageIntf *s,ArgumentList *argList)
-{
- if (argList==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,argList->count());
- if (argList->count()>0)
- {
- ArgumentListIterator ali(*argList);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- marshalQCString(s,a->attrib);
- marshalQCString(s,a->type);
- marshalQCString(s,a->canType);
- marshalQCString(s,a->name);
- marshalQCString(s,a->array);
- marshalQCString(s,a->defval);
- marshalQCString(s,a->docs);
- marshalQCString(s,a->typeConstraint);
- }
- }
- marshalBool(s,argList->constSpecifier);
- marshalBool(s,argList->volatileSpecifier);
- marshalBool(s,argList->pureSpecifier);
- marshalQCString(s,argList->trailingReturnType);
- marshalBool(s,argList->isDeleted);
- marshalInt(s,(int)argList->refQualifier);
- }
-}
-
diff --git a/src/arguments.h b/src/arguments.h
index 3af7134..7ef9642 100644
--- a/src/arguments.h
+++ b/src/arguments.h
@@ -115,9 +115,6 @@ class ArgumentList : public QList<Argument>
bool isDeleted;
/*! C++11 ref qualifier */
RefQualifierType refQualifier;
-
- static ArgumentList *unmarshal(StorageIntf *s);
- static void marshal(StorageIntf *s,ArgumentList *argList);
};
typedef QListIterator<Argument> ArgumentListIterator;
diff --git a/src/clangparser.cpp b/src/clangparser.cpp
index c22d5c5..f24ec0a 100644
--- a/src/clangparser.cpp
+++ b/src/clangparser.cpp
@@ -825,7 +825,6 @@ static void detectFunctionBody(const char *s)
void ClangParser::writeSources(CodeOutputInterface &ol,FileDef *fd)
{
- TooltipManager::instance()->clearTooltips();
// (re)set global parser state
g_currentDefinition=0;
g_currentMemberDef=0;
@@ -934,7 +933,6 @@ void ClangParser::writeSources(CodeOutputInterface &ol,FileDef *fd)
clang_disposeString(tokenString);
}
ol.endCodeLine();
- TooltipManager::instance()->writeTooltips(ol);
}
ClangParser::ClangParser()
diff --git a/src/classdef.cpp b/src/classdef.cpp
index a48df76..5ea8cea 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -45,15 +45,235 @@
#include "filedef.h"
#include "namespacedef.h"
#include "membergroup.h"
+#include "definitionimpl.h"
//-----------------------------------------------------------------------------
-/** Private data associated with a ClassDef object. */
-class ClassDefImpl
+
+/** Implementation of the ClassDef interface */
+class ClassDefImpl : public DefinitionImpl, public ClassDef
{
public:
- ClassDefImpl();
+ ClassDefImpl(const char *fileName,int startLine,int startColumn,
+ const char *name,CompoundType ct,
+ const char *ref=0,const char *fName=0,
+ bool isSymbol=TRUE,bool isJavaEnum=FALSE);
+ /** Destroys a compound definition. */
~ClassDefImpl();
+
+ virtual DefType definitionType() const { return TypeClass; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString getInstanceOutputFileBase() const;
+ virtual QCString getSourceFileBase() const;
+ virtual QCString getReference() const;
+ virtual bool isReference() const;
+ virtual bool isLocal() const;
+ virtual ClassSDict *getClassSDict() const;
+ virtual bool hasDocumentation() const;
+ virtual bool hasDetailedDescription() const;
+ virtual QCString collaborationGraphFileName() const;
+ virtual QCString inheritanceGraphFileName() const;
+ virtual QCString displayName(bool includeScope=TRUE) const;
+ virtual CompoundType compoundType() const;
+ virtual QCString compoundTypeString() const;
+ virtual BaseClassList *baseClasses() const;
+ virtual BaseClassList *subClasses() const;
+ virtual MemberNameInfoSDict *memberNameInfoSDict() const;
+ virtual Protection protection() const;
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual bool isVisibleInHierarchy() const;
+ virtual bool visibleInParentsDeclList() const;
+ virtual ArgumentList *templateArguments() const;
+ virtual NamespaceDef *getNamespaceDef() const;
+ virtual FileDef *getFileDef() const;
+ virtual MemberDef *getMemberByName(const QCString &) const;
+ virtual bool isBaseClass(const ClassDef *bcd,bool followInstances,int level=0) const;
+ virtual bool isSubClass(ClassDef *bcd,int level=0) const;
+ virtual bool isAccessibleMember(const MemberDef *md) const;
+ virtual QDict<ClassDef> *getTemplateInstances() const;
+ virtual ClassDef *templateMaster() const;
+ virtual bool isTemplate() const;
+ virtual IncludeInfo *includeInfo() const;
+ virtual UsesClassDict *usedImplementationClasses() const;
+ virtual UsesClassDict *usedByImplementationClasses() const;
+ virtual UsesClassDict *usedInterfaceClasses() const;
+ virtual ConstraintClassDict *templateTypeConstraints() const;
+ virtual bool isTemplateArgument() const;
+ virtual Definition *findInnerCompound(const char *name) const;
+ virtual void getTemplateParameterLists(QList<ArgumentList> &lists) const;
+ virtual QCString qualifiedNameWithTemplateParameters(
+ QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const;
+ virtual bool isAbstract() const;
+ virtual bool isObjectiveC() const;
+ virtual bool isFortran() const;
+ virtual bool isCSharp() const;
+ virtual bool isFinal() const;
+ virtual bool isSealed() const;
+ virtual bool isPublished() const;
+ virtual bool isExtension() const;
+ virtual bool isForwardDeclared() const;
+ virtual bool isInterface() const;
+ virtual ClassDef *categoryOf() const;
+ virtual QCString className() const;
+ virtual MemberList *getMemberList(MemberListType lt) const;
+ virtual const QList<MemberList> &getMemberLists() const;
+ virtual MemberGroupSDict *getMemberGroupSDict() const;
+ virtual QDict<int> *getTemplateBaseClassNames() const;
+ virtual ClassDef *getVariableInstance(const char *templSpec);
+ virtual bool isUsedOnly() const;
+ virtual QCString anchor() const;
+ virtual bool isEmbeddedInOuterScope() const;
+ virtual bool isSimple() const;
+ virtual const ClassList *taggedInnerClasses() const;
+ virtual ClassDef *tagLessReference() const;
+ virtual MemberDef *isSmartPointer() const;
+ virtual bool isJavaEnum() const;
+ virtual bool isGeneric() const;
+ virtual bool isAnonymous() const;
+ virtual const ClassSDict *innerClasses() const;
+ virtual QCString title() const;
+ virtual QCString generatedFromFiles() const;
+ virtual const FileList &usedFiles() const;
+ virtual const ArgumentList *typeConstraints() const;
+ virtual const ExampleSDict *exampleList() const;
+ virtual bool hasExamples() const;
+ virtual QCString getMemberListFileName() const;
+ virtual bool subGrouping() const;
+ virtual bool isSliceLocal() const;
+ virtual void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0);
+ virtual void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0);
+ virtual void setIncludeFile(FileDef *fd,const char *incName,bool local,bool force);
+ virtual void insertMember(MemberDef *);
+ virtual void insertUsedFile(FileDef *);
+ virtual bool addExample(const char *anchor,const char *name, const char *file);
+ virtual void mergeCategory(ClassDef *category);
+ virtual void setNamespace(NamespaceDef *nd);
+ virtual void setFileDef(FileDef *fd);
+ virtual void setSubGrouping(bool enabled);
+ virtual void setProtection(Protection p);
+ virtual void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
+ virtual void addInnerCompound(Definition *d);
+ virtual ClassDef *insertTemplateInstance(const QCString &fileName,int startLine,int startColumn,
+ const QCString &templSpec,bool &freshInstance);
+ virtual void addUsedClass(ClassDef *cd,const char *accessName,Protection prot);
+ virtual void addUsedByClass(ClassDef *cd,const char *accessName,Protection prot);
+ virtual void setIsStatic(bool b);
+ virtual void setCompoundType(CompoundType t);
+ virtual void setClassName(const char *name);
+ virtual void setClassSpecifier(uint64 spec);
+ virtual void setTemplateArguments(ArgumentList *al);
+ virtual void setTemplateBaseClassNames(QDict<int> *templateNames);
+ virtual void setTemplateMaster(ClassDef *tm);
+ virtual void setTypeConstraints(ArgumentList *al);
+ virtual void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
+ virtual void makeTemplateArgument(bool b=TRUE);
+ virtual void setCategoryOf(ClassDef *cd);
+ virtual void setUsedOnly(bool b);
+ virtual void addTaggedInnerClass(ClassDef *cd);
+ virtual void setTagLessReference(ClassDef *cd);
+ virtual void setName(const char *name);
+ virtual void setMetaData(const char *md);
+ virtual void findSectionsInDocumentation();
+ virtual void addMembersToMemberGroup();
+ virtual void addListReferences();
+ virtual void addTypeConstraints();
+ virtual void computeAnchors();
+ virtual void mergeMembers();
+ virtual void sortMemberLists();
+ virtual void distributeMemberGroupDocumentation();
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeDocumentationForInnerClasses(OutputList &ol);
+ virtual void writeMemberPages(OutputList &ol);
+ virtual void writeMemberList(OutputList &ol);
+ virtual void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
+ ClassDef *inheritedFrom,const char *inheritId);
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const;
+ virtual void writeSummaryLinks(OutputList &ol);
+ virtual void reclassifyMember(MemberDef *md,MemberType t);
+ virtual void writeInlineDocumentation(OutputList &ol);
+ virtual void writeDeclarationLink(OutputList &ol,bool &found,
+ const char *header,bool localNames);
+ virtual void removeMemberFromLists(MemberDef *md);
+ virtual void addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
+ ClassDef *inheritedFrom,const QCString &inheritId);
+ virtual int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional);
+ virtual int countInheritanceNodes();
+ virtual void writeTagFile(FTextStream &);
+
+ virtual void setVisited(bool visited) { m_visited = visited; }
+ virtual bool isVisited() const { return m_visited; }
+ virtual bool hasNonReferenceSuperClass() const;
+ virtual int countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
+ int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
+ virtual void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
+ const char *subTitle=0,bool showInline=FALSE,ClassDef *inheritedFrom=0,
+ int lt2=-1,bool invert=FALSE,bool showAlways=FALSE,
+ QPtrDict<void> *visitedClasses=0);
+
+ private:
+ bool m_visited;
+ void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
+ void showUsedFiles(OutputList &ol);
+
+ void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
+ void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
+ void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief);
+ MemberList *createMemberList(MemberListType lt);
+ void writeInheritedMemberDeclarations(OutputList &ol,MemberListType lt,int lt2,const QCString &title,ClassDef *inheritedFrom,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
+ void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title,bool showInline=FALSE);
+ void writeSimpleMemberDocumentation(OutputList &ol,MemberListType lt);
+ void writePlainMemberDeclaration(OutputList &ol,MemberListType lt,bool inGroup,ClassDef *inheritedFrom,const char *inheritId);
+ void writeBriefDescription(OutputList &ol,bool exampleFlag);
+ void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
+ const QCString &title,const QCString &anchor=QCString());
+ void writeIncludeFiles(OutputList &ol);
+ void writeIncludeFilesForSlice(OutputList &ol);
+ //void writeAllMembersLink(OutputList &ol);
+ void writeInheritanceGraph(OutputList &ol);
+ void writeCollaborationGraph(OutputList &ol);
+ void writeMemberGroups(OutputList &ol,bool showInline=FALSE);
+ void writeNestedClasses(OutputList &ol,const QCString &title);
+ void writeInlineClasses(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void writeMoreLink(OutputList &ol,const QCString &anchor);
+ void writeDetailedDocumentationBody(OutputList &ol);
+
+ int countAdditionalInheritedMembers();
+ void writeAdditionalInheritedMembers(OutputList &ol);
+ void addClassAttributes(OutputList &ol);
+ int countInheritedDecMembers(MemberListType lt,
+ ClassDef *inheritedFrom,bool invert,bool showAlways,
+ QPtrDict<void> *visitedClasses);
+ void getTitleForMemberListType(MemberListType type,
+ QCString &title,QCString &subtitle);
+ QCString includeStatement() const;
+ void addTypeConstraint(const QCString &typeConstraint,const QCString &type);
+
+ // PIMPL idiom
+ class IMPL;
+ IMPL *m_impl;
+};
+
+ClassDef *createClassDef(
+ const char *fileName,int startLine,int startColumn,
+ const char *name,ClassDef::CompoundType ct,
+ const char *ref,const char *fName,
+ bool isSymbol,bool isJavaEnum)
+{
+ return new ClassDefImpl(fileName,startLine,startColumn,name,ct,ref,fName,isSymbol,isJavaEnum);
+}
+
+/** Private data associated with a ClassDef object. */
+class ClassDefImpl::IMPL
+{
+ public:
+ IMPL();
+ ~IMPL();
void init(const char *defFileName, const char *name,
const QCString &ctStr, const char *fName);
@@ -206,7 +426,7 @@ class ClassDefImpl
QCString metaData;
};
-void ClassDefImpl::init(const char *defFileName, const char *name,
+void ClassDefImpl::IMPL::init(const char *defFileName, const char *name,
const QCString &ctStr, const char *fName)
{
if (fName)
@@ -268,12 +488,12 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
isAnonymous = QCString(name).find('@')!=-1;
}
-ClassDefImpl::ClassDefImpl() : vhdlSummaryTitles(17)
+ClassDefImpl::IMPL::IMPL() : vhdlSummaryTitles(17)
{
vhdlSummaryTitles.setAutoDelete(TRUE);
}
-ClassDefImpl::~ClassDefImpl()
+ClassDefImpl::IMPL::~IMPL()
{
delete inherits;
delete inheritedBy;
@@ -294,17 +514,19 @@ ClassDefImpl::~ClassDefImpl()
delete taggedInnerClasses;
}
+//-------------------------------------------------------------------------------------------
+
// constructs a new class definition
-ClassDef::ClassDef(
+ClassDefImpl::ClassDefImpl(
const char *defFileName,int defLine,int defColumn,
const char *nm,CompoundType ct,
const char *lref,const char *fName,
bool isSymbol,bool isJavaEnum)
- : Definition(defFileName,defLine,defColumn,removeRedundantWhiteSpace(nm),0,0,isSymbol)
+ : DefinitionImpl(defFileName,defLine,defColumn,removeRedundantWhiteSpace(nm),0,0,isSymbol)
{
- visited=FALSE;
+ m_visited=FALSE;
setReference(lref);
- m_impl = new ClassDefImpl;
+ m_impl = new ClassDefImpl::IMPL;
m_impl->compType = ct;
m_impl->isJavaEnum = isJavaEnum;
m_impl->init(defFileName,name(),compoundTypeString(),fName);
@@ -318,17 +540,17 @@ ClassDef::ClassDef(
}
// destroy the class definition
-ClassDef::~ClassDef()
+ClassDefImpl::~ClassDefImpl()
{
delete m_impl;
}
-QCString ClassDef::getMemberListFileName() const
+QCString ClassDefImpl::getMemberListFileName() const
{
return m_impl->memberListFileName;
}
-QCString ClassDef::displayName(bool includeScope) const
+QCString ClassDefImpl::displayName(bool includeScope) const
{
//static bool optimizeOutputForJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
SrcLangExt lang = getLanguage();
@@ -362,7 +584,7 @@ QCString ClassDef::displayName(bool includeScope) const
//{
// n = n.left(n.length()-2);
//}
- //printf("ClassDef::displayName()=%s\n",n.data());
+ //printf("ClassDefImpl::displayName()=%s\n",n.data());
if (n.find('@')!=-1)
{
return removeAnonymousScopes(n);
@@ -374,7 +596,7 @@ QCString ClassDef::displayName(bool includeScope) const
}
// inserts a base/super class in the inheritance list
-void ClassDef::insertBaseClass(ClassDef *cd,const char *n,Protection p,
+void ClassDefImpl::insertBaseClass(ClassDef *cd,const char *n,Protection p,
Specifier s,const char *t)
{
//printf("*** insert base class %s into %s\n",cd->name().data(),name().data());
@@ -389,7 +611,7 @@ void ClassDef::insertBaseClass(ClassDef *cd,const char *n,Protection p,
}
// inserts a derived/sub class in the inherited-by list
-void ClassDef::insertSubClass(ClassDef *cd,Protection p,
+void ClassDefImpl::insertSubClass(ClassDef *cd,Protection p,
Specifier s,const char *t)
{
//printf("*** insert sub class %s into %s\n",cd->name().data(),name().data());
@@ -404,7 +626,7 @@ void ClassDef::insertSubClass(ClassDef *cd,Protection p,
m_impl->isSimple = FALSE;
}
-void ClassDef::addMembersToMemberGroup()
+void ClassDefImpl::addMembersToMemberGroup()
{
QListIterator<MemberList> mli(m_impl->memberLists);
MemberList *ml;
@@ -433,7 +655,7 @@ void ClassDef::addMembersToMemberGroup()
}
// adds new member definition to the class
-void ClassDef::internalInsertMember(MemberDef *md,
+void ClassDefImpl::internalInsertMember(MemberDef *md,
Protection prot,
bool addToAllList
)
@@ -739,13 +961,13 @@ void ClassDef::internalInsertMember(MemberDef *md,
}
}
-void ClassDef::insertMember(MemberDef *md)
+void ClassDefImpl::insertMember(MemberDef *md)
{
internalInsertMember(md,md->protection(),TRUE);
}
// compute the anchors for all members
-void ClassDef::computeAnchors()
+void ClassDefImpl::computeAnchors()
{
//ClassDef *context = Config_getBool(INLINE_INHERITED_MEMB) ? this : 0;
//const char *letters = "abcdefghijklmnopqrstuvwxyz0123456789";
@@ -771,7 +993,7 @@ void ClassDef::computeAnchors()
}
}
-void ClassDef::distributeMemberGroupDocumentation()
+void ClassDefImpl::distributeMemberGroupDocumentation()
{
if (m_impl->memberGroupSDict)
{
@@ -784,7 +1006,7 @@ void ClassDef::distributeMemberGroupDocumentation()
}
}
-void ClassDef::findSectionsInDocumentation()
+void ClassDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
if (m_impl->memberGroupSDict)
@@ -809,7 +1031,7 @@ void ClassDef::findSectionsInDocumentation()
// add a file name to the used files set
-void ClassDef::insertUsedFile(FileDef *fd)
+void ClassDefImpl::insertUsedFile(FileDef *fd)
{
if (fd==0) return;
if (m_impl->files.find(fd)==-1) m_impl->files.append(fd);
@@ -846,10 +1068,10 @@ static void writeInheritanceSpecifier(OutputList &ol,BaseClassDef *bcd)
}
}
-void ClassDef::setIncludeFile(FileDef *fd,
+void ClassDefImpl::setIncludeFile(FileDef *fd,
const char *includeName,bool local, bool force)
{
- //printf("ClassDef::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
+ //printf("ClassDefImpl::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
if (!m_impl->incInfo) m_impl->incInfo=new IncludeInfo;
if ((includeName && m_impl->incInfo->includeName.isEmpty()) ||
(fd!=0 && m_impl->incInfo->fileDef==0)
@@ -868,7 +1090,7 @@ void ClassDef::setIncludeFile(FileDef *fd,
}
// TODO: fix this: a nested template class can have multiple outer templates
-//ArgumentList *ClassDef::outerTemplateArguments() const
+//ArgumentList *ClassDefImpl::outerTemplateArguments() const
//{
// int ti;
// ClassDef *pcd=0;
@@ -896,7 +1118,7 @@ static void searchTemplateSpecs(/*in*/ Definition *d,
{
searchTemplateSpecs(d->getOuterScope(),result,name,lang);
}
- ClassDef *cd=(ClassDef *)d;
+ ClassDef *cd=dynamic_cast<ClassDef *>(d);
if (!name.isEmpty()) name+="::";
QCString clName = d->localName();
if (/*clName.right(2)=="-g" ||*/ clName.right(2)=="-p")
@@ -962,7 +1184,7 @@ static void writeTemplateSpec(OutputList &ol,Definition *d,
}
}
-void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
+void ClassDefImpl::writeBriefDescription(OutputList &ol,bool exampleFlag)
{
if (hasBriefDescription())
{
@@ -989,7 +1211,7 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
ol.writeSynopsis();
}
-void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
+void ClassDefImpl::writeDetailedDocumentationBody(OutputList &ol)
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
@@ -1037,7 +1259,7 @@ void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
ol.endTextBlock();
}
-bool ClassDef::hasDetailedDescription() const
+bool ClassDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
@@ -1047,7 +1269,7 @@ bool ClassDef::hasDetailedDescription() const
}
// write the detailed description for this class
-void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &/*pageType*/, bool exampleFlag,
+void ClassDefImpl::writeDetailedDescription(OutputList &ol, const QCString &/*pageType*/, bool exampleFlag,
const QCString &title,const QCString &anchor)
{
if (hasDetailedDescription() || exampleFlag)
@@ -1083,7 +1305,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &/*pageTy
}
}
-QCString ClassDef::generatedFromFiles() const
+QCString ClassDefImpl::generatedFromFiles() const
{
QCString result;
SrcLangExt lang = getLanguage();
@@ -1114,7 +1336,7 @@ QCString ClassDef::generatedFromFiles() const
return result;
}
-void ClassDef::showUsedFiles(OutputList &ol)
+void ClassDefImpl::showUsedFiles(OutputList &ol)
{
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
@@ -1194,7 +1416,7 @@ void ClassDef::showUsedFiles(OutputList &ol)
ol.popGeneratorState();
}
-int ClassDef::countInheritanceNodes()
+int ClassDefImpl::countInheritanceNodes()
{
int count=0;
BaseClassDef *ibcd;
@@ -1219,7 +1441,7 @@ int ClassDef::countInheritanceNodes()
return count;
}
-void ClassDef::writeInheritanceGraph(OutputList &ol)
+void ClassDefImpl::writeInheritanceGraph(OutputList &ol)
{
// count direct inheritance relations
const int count=countInheritanceNodes();
@@ -1344,7 +1566,7 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)
}
}
-void ClassDef::writeCollaborationGraph(OutputList &ol)
+void ClassDefImpl::writeCollaborationGraph(OutputList &ol)
{
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(COLLABORATION_GRAPH)*/)
{
@@ -1361,7 +1583,7 @@ void ClassDef::writeCollaborationGraph(OutputList &ol)
}
}
-QCString ClassDef::includeStatement() const
+QCString ClassDefImpl::includeStatement() const
{
SrcLangExt lang = getLanguage();
bool isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
@@ -1379,7 +1601,7 @@ QCString ClassDef::includeStatement() const
}
}
-void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
+void ClassDefImpl::writeIncludeFilesForSlice(OutputList &ol)
{
if (m_impl->incInfo)
{
@@ -1489,15 +1711,15 @@ void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
else
{
// Must be a class.
- bool implements = false;
+ bool implements = FALSE;
BaseClassListIterator it(*m_impl->inherits);
BaseClassDef *ibcd;
for (;(ibcd=it.current());++it)
{
ClassDef *icd = ibcd->classDef;
- if (icd->m_impl->spec & Entry::Interface)
+ if (icd->isInterface())
{
- implements = true;
+ implements = TRUE;
}
else
{
@@ -1508,11 +1730,11 @@ void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
if (implements)
{
ol.docify(" implements ");
- bool first = true;
+ bool first = TRUE;
for (ibcd=it.toFirst();(ibcd=it.current());++it)
{
ClassDef *icd = ibcd->classDef;
- if (icd->m_impl->spec & Entry::Interface)
+ if (icd->isInterface())
{
if (!first)
{
@@ -1520,7 +1742,7 @@ void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
}
else
{
- first = false;
+ first = FALSE;
}
ol.docify(icd->name());
}
@@ -1533,7 +1755,7 @@ void ClassDef::writeIncludeFilesForSlice(OutputList &ol)
ol.endParagraph();
}
-void ClassDef::writeIncludeFiles(OutputList &ol)
+void ClassDefImpl::writeIncludeFiles(OutputList &ol)
{
if (m_impl->incInfo /*&& Config_getBool(SHOW_INCLUDE_FILES)*/)
{
@@ -1580,7 +1802,7 @@ void ClassDef::writeIncludeFiles(OutputList &ol)
}
#if 0
-void ClassDef::writeAllMembersLink(OutputList &ol)
+void ClassDefImpl::writeAllMembersLink(OutputList &ol)
{
// write link to list of all members (HTML only)
if (m_impl->allMemberNameInfoSDict &&
@@ -1600,7 +1822,7 @@ void ClassDef::writeAllMembersLink(OutputList &ol)
}
#endif
-void ClassDef::writeMemberGroups(OutputList &ol,bool showInline)
+void ClassDefImpl::writeMemberGroups(OutputList &ol,bool showInline)
{
// write user defined member groups
if (m_impl->memberGroupSDict)
@@ -1623,7 +1845,7 @@ void ClassDef::writeMemberGroups(OutputList &ol,bool showInline)
}
}
-void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title)
+void ClassDefImpl::writeNestedClasses(OutputList &ol,const QCString &title)
{
// nested classes
if (m_impl->innerClasses)
@@ -1632,7 +1854,7 @@ void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title)
}
}
-void ClassDef::writeInlineClasses(OutputList &ol)
+void ClassDefImpl::writeInlineClasses(OutputList &ol)
{
if (m_impl->innerClasses)
{
@@ -1640,9 +1862,9 @@ void ClassDef::writeInlineClasses(OutputList &ol)
}
}
-void ClassDef::startMemberDocumentation(OutputList &ol)
+void ClassDefImpl::startMemberDocumentation(OutputList &ol)
{
- //printf("%s: ClassDef::startMemberDocumentation()\n",name().data());
+ //printf("%s: ClassDefImpl::startMemberDocumentation()\n",name().data());
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
ol.disable(OutputGenerator::Html);
@@ -1650,9 +1872,9 @@ void ClassDef::startMemberDocumentation(OutputList &ol)
}
}
-void ClassDef::endMemberDocumentation(OutputList &ol)
+void ClassDefImpl::endMemberDocumentation(OutputList &ol)
{
- //printf("%s: ClassDef::endMemberDocumentation()\n",name().data());
+ //printf("%s: ClassDefImpl::endMemberDocumentation()\n",name().data());
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
ol.enable(OutputGenerator::Html);
@@ -1660,15 +1882,15 @@ void ClassDef::endMemberDocumentation(OutputList &ol)
}
}
-void ClassDef::startMemberDeclarations(OutputList &ol)
+void ClassDefImpl::startMemberDeclarations(OutputList &ol)
{
- //printf("%s: ClassDef::startMemberDeclarations()\n",name().data());
+ //printf("%s: ClassDefImpl::startMemberDeclarations()\n",name().data());
ol.startMemberSections();
}
-void ClassDef::endMemberDeclarations(OutputList &ol)
+void ClassDefImpl::endMemberDeclarations(OutputList &ol)
{
- //printf("%s: ClassDef::endMemberDeclarations()\n",name().data());
+ //printf("%s: ClassDefImpl::endMemberDeclarations()\n",name().data());
static bool inlineInheritedMembers = Config_getBool(INLINE_INHERITED_MEMB);
if (!inlineInheritedMembers && countAdditionalInheritedMembers()>0)
{
@@ -1680,7 +1902,7 @@ void ClassDef::endMemberDeclarations(OutputList &ol)
ol.endMemberSections();
}
-void ClassDef::writeAuthorSection(OutputList &ol)
+void ClassDefImpl::writeAuthorSection(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Man);
@@ -1693,7 +1915,7 @@ void ClassDef::writeAuthorSection(OutputList &ol)
}
-void ClassDef::writeSummaryLinks(OutputList &ol)
+void ClassDefImpl::writeSummaryLinks(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1752,7 +1974,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeTagFile(FTextStream &tagFile)
+void ClassDefImpl::writeTagFile(FTextStream &tagFile)
{
if (!isLinkableInProject()) return;
tagFile << " <compound kind=\"";
@@ -1871,12 +2093,12 @@ void ClassDef::writeTagFile(FTextStream &tagFile)
}
/** Write class documentation inside another container (i.e. a group) */
-void ClassDef::writeInlineDocumentation(OutputList &ol)
+void ClassDefImpl::writeInlineDocumentation(OutputList &ol)
{
bool isSimple = m_impl->isSimple;
ol.addIndexItem(name(),0);
- //printf("ClassDef::writeInlineDocumentation(%s)\n",name().data());
+ //printf("ClassDefImpl::writeInlineDocumentation(%s)\n",name().data());
QListIterator<LayoutDocEntry> eli(
LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
LayoutDocEntry *lde;
@@ -1988,7 +2210,7 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
+void ClassDefImpl::writeMoreLink(OutputList &ol,const QCString &anchor)
{
// TODO: clean up this mess by moving it to
// the output generators...
@@ -2032,7 +2254,7 @@ void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
}
}
-bool ClassDef::visibleInParentsDeclList() const
+bool ClassDefImpl::visibleInParentsDeclList() const
{
static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
static bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
@@ -2044,7 +2266,7 @@ bool ClassDef::visibleInParentsDeclList() const
);
}
-void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *header,bool localNames)
+void ClassDefImpl::writeDeclarationLink(OutputList &ol,bool &found,const char *header,bool localNames)
{
//static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
//static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
@@ -2153,7 +2375,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
}
}
-void ClassDef::addClassAttributes(OutputList &ol)
+void ClassDefImpl::addClassAttributes(OutputList &ol)
{
QStrList sl;
if (isFinal()) sl.append("final");
@@ -2178,7 +2400,7 @@ void ClassDef::addClassAttributes(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*pageTitle*/)
+void ClassDefImpl::writeDocumentationContents(OutputList &ol,const QCString & /*pageTitle*/)
{
ol.startContents();
@@ -2313,7 +2535,7 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
ol.endContents();
}
-QCString ClassDef::title() const
+QCString ClassDefImpl::title() const
{
QCString pageTitle;
SrcLangExt lang = getLanguage();
@@ -2363,7 +2585,7 @@ QCString ClassDef::title() const
}
// write all documentation for this class
-void ClassDef::writeDocumentation(OutputList &ol)
+void ClassDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
//static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
@@ -2421,7 +2643,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
}
-void ClassDef::writeMemberPages(OutputList &ol)
+void ClassDefImpl::writeMemberPages(OutputList &ol)
{
///////////////////////////////////////////////////////////////////////////
//// Member definitions on separate pages
@@ -2444,7 +2666,7 @@ void ClassDef::writeMemberPages(OutputList &ol)
ol.popGeneratorState();
}
-void ClassDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
+void ClassDefImpl::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
{
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
@@ -2494,7 +2716,7 @@ void ClassDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
-void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
+void ClassDefImpl::writeDocumentationForInnerClasses(OutputList &ol)
{
// write inner classes after the parent, so the tag files contain
// the definition in proper order!
@@ -2519,7 +2741,7 @@ void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
}
// write the list of all (inherited) members for this class
-void ClassDef::writeMemberList(OutputList &ol)
+void ClassDefImpl::writeMemberList(OutputList &ol)
{
static bool cOpt = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
//static bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
@@ -2804,7 +3026,7 @@ void ClassDef::writeMemberList(OutputList &ol)
// add a reference to an example
-bool ClassDef::addExample(const char *anchor,const char *nameStr,
+bool ClassDefImpl::addExample(const char *anchor,const char *nameStr,
const char *file)
{
if (m_impl->exampleSDict==0)
@@ -2825,7 +3047,7 @@ bool ClassDef::addExample(const char *anchor,const char *nameStr,
}
// returns TRUE if this class is used in an example
-bool ClassDef::hasExamples() const
+bool ClassDefImpl::hasExamples() const
{
bool result=FALSE;
if (m_impl->exampleSDict)
@@ -2833,7 +3055,7 @@ bool ClassDef::hasExamples() const
return result;
}
-void ClassDef::addTypeConstraint(const QCString &typeConstraint,const QCString &type)
+void ClassDefImpl::addTypeConstraint(const QCString &typeConstraint,const QCString &type)
{
//printf("addTypeContraint(%s,%s)\n",type.data(),typeConstraint.data());
static bool hideUndocRelation = Config_getBool(HIDE_UNDOC_RELATIONS);
@@ -2841,7 +3063,7 @@ void ClassDef::addTypeConstraint(const QCString &typeConstraint,const QCString &
ClassDef *cd = getResolvedClass(this,getFileDef(),typeConstraint);
if (cd==0 && !hideUndocRelation)
{
- cd = new ClassDef(getDefFileName(),getDefLine(),getDefColumn(),typeConstraint,ClassDef::Class);
+ cd = new ClassDefImpl(getDefFileName(),getDefLine(),getDefColumn(),typeConstraint,ClassDef::Class);
cd->setUsedOnly(TRUE);
cd->setLanguage(getLanguage());
Doxygen::hiddenClasses->append(typeConstraint,cd);
@@ -2868,7 +3090,7 @@ void ClassDef::addTypeConstraint(const QCString &typeConstraint,const QCString &
}
// Java Type Constrains: A<T extends C & I>
-void ClassDef::addTypeConstraints()
+void ClassDefImpl::addTypeConstraints()
{
if (m_impl->tempArgs)
{
@@ -2894,7 +3116,7 @@ void ClassDef::addTypeConstraints()
}
// C# Type Constraints: D<T> where T : C, I
-void ClassDef::setTypeConstraints(ArgumentList *al)
+void ClassDefImpl::setTypeConstraints(ArgumentList *al)
{
if (al==0) return;
if (!m_impl->typeConstraints) delete m_impl->typeConstraints;
@@ -2907,7 +3129,7 @@ void ClassDef::setTypeConstraints(ArgumentList *al)
}
}
-void ClassDef::setTemplateArguments(ArgumentList *al)
+void ClassDefImpl::setTemplateArguments(ArgumentList *al)
{
if (al==0) return;
if (m_impl->tempArgs) delete m_impl->tempArgs; // delete old list if needed
@@ -2924,7 +3146,7 @@ void ClassDef::setTemplateArguments(ArgumentList *al)
/*! Returns \c TRUE iff this class or a class inheriting from this class
* is \e not defined in an external tag file.
*/
-bool ClassDef::hasNonReferenceSuperClass()
+bool ClassDefImpl::hasNonReferenceSuperClass() const
{
bool found=!isReference() && isLinkableInProject() && !isHidden();
if (found)
@@ -2961,7 +3183,7 @@ bool ClassDef::hasNonReferenceSuperClass()
/*! called from MemberDef::writeDeclaration() to (recursively) write the
* definition of an anonymous struct, union or class.
*/
-void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
+void ClassDefImpl::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
ClassDef *inheritedFrom,const char *inheritId)
{
//printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup);
@@ -3011,7 +3233,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
}
/*! a link to this class is possible within this project */
-bool ClassDef::isLinkableInProject() const
+bool ClassDefImpl::isLinkableInProject() const
{
static bool extractLocal = Config_getBool(EXTRACT_LOCAL_CLASSES);
static bool extractStatic = Config_getBool(EXTRACT_STATIC);
@@ -3033,7 +3255,7 @@ bool ClassDef::isLinkableInProject() const
}
}
-bool ClassDef::isLinkable() const
+bool ClassDefImpl::isLinkable() const
{
if (m_impl->templateMaster)
{
@@ -3047,7 +3269,7 @@ bool ClassDef::isLinkable() const
/*! the class is visible in a class diagram, or class hierarchy */
-bool ClassDef::isVisibleInHierarchy()
+bool ClassDefImpl::isVisibleInHierarchy() const
{
static bool allExternals = Config_getBool(ALLEXTERNALS);
static bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
@@ -3071,9 +3293,9 @@ bool ClassDef::isVisibleInHierarchy()
(!m_impl->isStatic || extractStatic);
}
-bool ClassDef::hasDocumentation() const
+bool ClassDefImpl::hasDocumentation() const
{
- return Definition::hasDocumentation();
+ return DefinitionImpl::hasDocumentation();
}
//----------------------------------------------------------------------
@@ -3081,7 +3303,7 @@ bool ClassDef::hasDocumentation() const
// returns TRUE iff class definition `bcd' represents an (in)direct base
// class of class definition `cd'.
-bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level)
+bool ClassDefImpl::isBaseClass(const ClassDef *bcd, bool followInstances,int level) const
{
bool found=FALSE;
//printf("isBaseClass(cd=%s) looking for %s\n",name().data(),bcd->name().data());
@@ -3111,7 +3333,7 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level)
//----------------------------------------------------------------------
-bool ClassDef::isSubClass(ClassDef *cd,int level)
+bool ClassDefImpl::isSubClass(ClassDef *cd,int level) const
{
bool found=FALSE;
if (level>256)
@@ -3148,7 +3370,7 @@ static bool isStandardFunc(MemberDef *md)
* with that of this class. Must only be called for classes without
* subclasses!
*/
-void ClassDef::mergeMembers()
+void ClassDefImpl::mergeMembers()
{
if (m_impl->membersMerged) return;
@@ -3399,7 +3621,7 @@ void ClassDef::mergeMembers()
/*! Merges the members of a Objective-C category into this class.
*/
-void ClassDef::mergeCategory(ClassDef *category)
+void ClassDefImpl::mergeCategory(ClassDef *category)
{
static bool extractLocalMethods = Config_getBool(EXTRACT_LOCAL_METHODS);
bool makePrivate = category->isLocal();
@@ -3537,7 +3759,7 @@ void ClassDef::mergeCategory(ClassDef *category)
//----------------------------------------------------------------------------
-void ClassDef::addUsedClass(ClassDef *cd,const char *accessName,
+void ClassDefImpl::addUsedClass(ClassDef *cd,const char *accessName,
Protection prot)
{
static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
@@ -3571,7 +3793,7 @@ void ClassDef::addUsedClass(ClassDef *cd,const char *accessName,
ucd->addAccessor(acc);
}
-void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
+void ClassDefImpl::addUsedByClass(ClassDef *cd,const char *accessName,
Protection prot)
{
static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
@@ -3612,7 +3834,7 @@ void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
* Must be called before mergeMembers() is called!
*/
-void ClassDef::determineImplUsageRelation()
+void ClassDefImpl::determineImplUsageRelation()
{
MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoSDict);
MemberNameInfo *mni;
@@ -3726,7 +3948,7 @@ void ClassDef::determineImplUsageRelation()
// I have disabled this code because the graphs it renders quickly become
// too large to be of practical use.
-void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
+void ClassDefImpl::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
{
QCString type = typeStr;
static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
@@ -3757,7 +3979,7 @@ void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
}
}
-void ClassDef::determineIntfUsageRelation()
+void ClassDefImpl::determineIntfUsageRelation()
{
MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoList);
MemberNameInfo *mni;
@@ -3803,7 +4025,7 @@ void ClassDef::determineIntfUsageRelation()
}
#endif
-QCString ClassDef::compoundTypeString() const
+QCString ClassDefImpl::compoundTypeString() const
{
if (getLanguage()==SrcLangExt_Fortran)
{
@@ -3837,7 +4059,7 @@ QCString ClassDef::compoundTypeString() const
}
}
-QCString ClassDef::getOutputFileBase() const
+QCString ClassDefImpl::getOutputFileBase() const
{
static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
@@ -3874,12 +4096,12 @@ QCString ClassDef::getOutputFileBase() const
return m_impl->fileName;
}
-QCString ClassDef::getInstanceOutputFileBase() const
+QCString ClassDefImpl::getInstanceOutputFileBase() const
{
return m_impl->fileName;
}
-QCString ClassDef::getSourceFileBase() const
+QCString ClassDefImpl::getSourceFileBase() const
{
if (m_impl->templateMaster)
{
@@ -3887,14 +4109,14 @@ QCString ClassDef::getSourceFileBase() const
}
else
{
- return Definition::getSourceFileBase();
+ return DefinitionImpl::getSourceFileBase();
}
}
-void ClassDef::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
+void ClassDefImpl::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
{
gd->addClass(this);
- //printf("ClassDef::setGroupDefForAllMembers(%s)\n",gd->name().data());
+ //printf("ClassDefImpl::setGroupDefForAllMembers(%s)\n",gd->name().data());
if (m_impl->allMemberNameInfoSDict==0) return;
MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoSDict);
MemberNameInfo *mni;
@@ -3913,7 +4135,7 @@ void ClassDef::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,co
}
}
-void ClassDef::addInnerCompound(Definition *d)
+void ClassDefImpl::addInnerCompound(Definition *d)
{
//printf("**** %s::addInnerCompound(%s)\n",name().data(),d->name().data());
if (d->definitionType()==Definition::TypeClass) // only classes can be
@@ -3923,11 +4145,11 @@ void ClassDef::addInnerCompound(Definition *d)
{
m_impl->innerClasses = new ClassSDict(17);
}
- m_impl->innerClasses->inSort(d->localName(),(ClassDef *)d);
+ m_impl->innerClasses->inSort(d->localName(),dynamic_cast<ClassDef *>(d));
}
}
-Definition *ClassDef::findInnerCompound(const char *name) const
+Definition *ClassDefImpl::findInnerCompound(const char *name) const
{
Definition *result=0;
if (name==0) return 0;
@@ -3938,7 +4160,7 @@ Definition *ClassDef::findInnerCompound(const char *name) const
return result;
}
-//void ClassDef::initTemplateMapping()
+//void ClassDefImpl::initTemplateMapping()
//{
// m_impl->templateMapping->clear();
// ArgumentList *al = templateArguments();
@@ -3952,9 +4174,9 @@ Definition *ClassDef::findInnerCompound(const char *name) const
// }
// }
//}
-//void ClassDef::setTemplateArgumentMapping(const char *formal,const char *actual)
+//void ClassDefImpl::setTemplateArgumentMapping(const char *formal,const char *actual)
//{
-// //printf("ClassDef::setTemplateArgumentMapping(%s,%s)\n",formal,actual);
+// //printf("ClassDefImpl::setTemplateArgumentMapping(%s,%s)\n",formal,actual);
// if (m_impl->templateMapping && formal)
// {
// if (m_impl->templateMapping->find(formal))
@@ -3965,7 +4187,7 @@ Definition *ClassDef::findInnerCompound(const char *name) const
// }
//}
//
-//QCString ClassDef::getTemplateArgumentMapping(const char *formal) const
+//QCString ClassDefImpl::getTemplateArgumentMapping(const char *formal) const
//{
// if (m_impl->templateMapping && formal)
// {
@@ -3978,7 +4200,7 @@ Definition *ClassDef::findInnerCompound(const char *name) const
// return "";
//}
-ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
+ClassDef *ClassDefImpl::insertTemplateInstance(const QCString &fileName,
int startLine, int startColumn, const QCString &templSpec,bool &freshInstance)
{
freshInstance = FALSE;
@@ -3991,7 +4213,7 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
{
Debug::print(Debug::Classes,0," New template instance class `%s'`%s'\n",qPrint(name()),qPrint(templSpec));
QCString tcname = removeRedundantWhiteSpace(localName()+templSpec);
- templateClass = new ClassDef(
+ templateClass = new ClassDefImpl(
fileName,startLine,startColumn,tcname,ClassDef::Class);
templateClass->setTemplateMaster(this);
templateClass->setOuterScope(getOuterScope());
@@ -4002,7 +4224,7 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
return templateClass;
}
-ClassDef *ClassDef::getVariableInstance(const char *templSpec)
+ClassDef *ClassDefImpl::getVariableInstance(const char *templSpec)
{
if (m_impl->variableInstances==0)
{
@@ -4014,7 +4236,7 @@ ClassDef *ClassDef::getVariableInstance(const char *templSpec)
{
Debug::print(Debug::Classes,0," New template variable instance class `%s'`%s'\n",qPrint(name()),qPrint(templSpec));
QCString tcname = removeRedundantWhiteSpace(name()+templSpec);
- templateClass = new ClassDef("<code>",1,1,tcname,
+ templateClass = new ClassDefImpl("<code>",1,1,tcname,
ClassDef::Class,0,0,FALSE);
templateClass->addMembersToTemplateInstance( this, templSpec );
templateClass->setTemplateMaster(this);
@@ -4023,7 +4245,7 @@ ClassDef *ClassDef::getVariableInstance(const char *templSpec)
return templateClass;
}
-void ClassDef::setTemplateBaseClassNames(QDict<int> *templateNames)
+void ClassDefImpl::setTemplateBaseClassNames(QDict<int> *templateNames)
{
if (templateNames==0) return;
if (m_impl->templBaseClassNames==0)
@@ -4042,12 +4264,12 @@ void ClassDef::setTemplateBaseClassNames(QDict<int> *templateNames)
}
}
-QDict<int> *ClassDef::getTemplateBaseClassNames() const
+QDict<int> *ClassDefImpl::getTemplateBaseClassNames() const
{
return m_impl->templBaseClassNames;
}
-void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
+void ClassDefImpl::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
{
//printf("%s::addMembersToTemplateInstance(%s,%s)\n",name().data(),cd->name().data(),templSpec);
if (cd->memberNameInfoSDict()==0) return;
@@ -4090,7 +4312,7 @@ void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
}
}
-QCString ClassDef::getReference() const
+QCString ClassDefImpl::getReference() const
{
if (m_impl->templateMaster)
{
@@ -4098,11 +4320,11 @@ QCString ClassDef::getReference() const
}
else
{
- return Definition::getReference();
+ return DefinitionImpl::getReference();
}
}
-bool ClassDef::isReference() const
+bool ClassDefImpl::isReference() const
{
if (m_impl->templateMaster)
{
@@ -4110,18 +4332,18 @@ bool ClassDef::isReference() const
}
else
{
- return Definition::isReference();
+ return DefinitionImpl::isReference();
}
}
-void ClassDef::getTemplateParameterLists(QList<ArgumentList> &lists) const
+void ClassDefImpl::getTemplateParameterLists(QList<ArgumentList> &lists) const
{
Definition *d=getOuterScope();
if (d)
{
if (d->definitionType()==Definition::TypeClass)
{
- ClassDef *cd=(ClassDef *)d;
+ ClassDef *cd=dynamic_cast<ClassDef *>(d);
cd->getTemplateParameterLists(lists);
}
}
@@ -4131,7 +4353,7 @@ void ClassDef::getTemplateParameterLists(QList<ArgumentList> &lists) const
}
}
-QCString ClassDef::qualifiedNameWithTemplateParameters(
+QCString ClassDefImpl::qualifiedNameWithTemplateParameters(
QList<ArgumentList> *actualParams,int *actualParamIndex) const
{
//static bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
@@ -4143,7 +4365,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
{
if (d->definitionType()==Definition::TypeClass)
{
- ClassDef *cd=(ClassDef *)d;
+ ClassDef *cd=dynamic_cast<ClassDef *>(d);
scName = cd->qualifiedNameWithTemplateParameters(actualParams,actualParamIndex);
}
else if (!hideScopeNames)
@@ -4190,7 +4412,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
return scName;
}
-QCString ClassDef::className() const
+QCString ClassDefImpl::className() const
{
if (m_impl->className.isEmpty())
{
@@ -4202,12 +4424,12 @@ QCString ClassDef::className() const
}
};
-void ClassDef::setClassName(const char *name)
+void ClassDefImpl::setClassName(const char *name)
{
m_impl->className = name;
}
-void ClassDef::addListReferences()
+void ClassDefImpl::addListReferences()
{
SrcLangExt lang = getLanguage();
if (!isLinkableInProject()) return;
@@ -4244,7 +4466,7 @@ void ClassDef::addListReferences()
}
}
-MemberDef *ClassDef::getMemberByName(const QCString &name) const
+MemberDef *ClassDefImpl::getMemberByName(const QCString &name) const
{
MemberDef *xmd = 0;
if (m_impl->allMemberNameInfoSDict)
@@ -4274,12 +4496,12 @@ MemberDef *ClassDef::getMemberByName(const QCString &name) const
return xmd;
}
-bool ClassDef::isAccessibleMember(MemberDef *md)
+bool ClassDefImpl::isAccessibleMember(const MemberDef *md) const
{
return md->getClassDef() && isBaseClass(md->getClassDef(),TRUE);
}
-MemberList *ClassDef::createMemberList(MemberListType lt)
+MemberList *ClassDefImpl::createMemberList(MemberListType lt)
{
m_impl->memberLists.setAutoDelete(TRUE);
QListIterator<MemberList> mli(m_impl->memberLists);
@@ -4297,7 +4519,7 @@ MemberList *ClassDef::createMemberList(MemberListType lt)
return ml;
}
-MemberList *ClassDef::getMemberList(MemberListType lt)
+MemberList *ClassDefImpl::getMemberList(MemberListType lt) const
{
QListIterator<MemberList> mli(m_impl->memberLists);
MemberList *ml;
@@ -4311,7 +4533,7 @@ MemberList *ClassDef::getMemberList(MemberListType lt)
return 0;
}
-void ClassDef::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief)
+void ClassDefImpl::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
@@ -4323,7 +4545,7 @@ void ClassDef::addMemberToList(MemberListType lt,MemberDef *md,bool isBrief)
if ((ml->listType()&MemberListType_detailedLists)==0) md->setSectionList(this,ml);
}
-void ClassDef::sortMemberLists()
+void ClassDefImpl::sortMemberLists()
{
QListIterator<MemberList> mli(m_impl->memberLists);
MemberList *ml;
@@ -4337,7 +4559,7 @@ void ClassDef::sortMemberLists()
}
}
-int ClassDef::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
+int ClassDefImpl::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses)
{
//printf("%s: countMemberDeclarations for %d and %d\n",name().data(),lt,lt2);
@@ -4380,7 +4602,7 @@ int ClassDef::countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
}
-int ClassDef::countInheritedDecMembers(MemberListType lt,
+int ClassDefImpl::countInheritedDecMembers(MemberListType lt,
ClassDef *inheritedFrom,bool invert,bool showAlways,
QPtrDict<void> *visitedClasses)
{
@@ -4419,7 +4641,7 @@ int ClassDef::countInheritedDecMembers(MemberListType lt,
return inhCount;
}
-void ClassDef::getTitleForMemberListType(MemberListType type,
+void ClassDefImpl::getTitleForMemberListType(MemberListType type,
QCString &title,QCString &subtitle)
{
SrcLangExt lang = getLanguage();
@@ -4443,7 +4665,7 @@ void ClassDef::getTitleForMemberListType(MemberListType type,
subtitle="";
}
-int ClassDef::countAdditionalInheritedMembers()
+int ClassDefImpl::countAdditionalInheritedMembers()
{
int totalCount=0;
QListIterator<LayoutDocEntry> eli(
@@ -4469,7 +4691,7 @@ int ClassDef::countAdditionalInheritedMembers()
return totalCount;
}
-void ClassDef::writeAdditionalInheritedMembers(OutputList &ol)
+void ClassDefImpl::writeAdditionalInheritedMembers(OutputList &ol)
{
//printf("**** writeAdditionalInheritedMembers()\n");
QListIterator<LayoutDocEntry> eli(
@@ -4489,7 +4711,7 @@ void ClassDef::writeAdditionalInheritedMembers(OutputList &ol)
}
}
-int ClassDef::countMembersIncludingGrouped(MemberListType lt,
+int ClassDefImpl::countMembersIncludingGrouped(MemberListType lt,
ClassDef *inheritedFrom,bool additional)
{
int count=0;
@@ -4518,7 +4740,7 @@ int ClassDef::countMembersIncludingGrouped(MemberListType lt,
return count;
}
-void ClassDef::writeInheritedMemberDeclarations(OutputList &ol,
+void ClassDefImpl::writeInheritedMemberDeclarations(OutputList &ol,
MemberListType lt,int lt2,const QCString &title,
ClassDef *inheritedFrom,bool invert,bool showAlways,
QPtrDict<void> *visitedClasses)
@@ -4567,11 +4789,11 @@ void ClassDef::writeInheritedMemberDeclarations(OutputList &ol,
ol.popGeneratorState();
}
-void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
+void ClassDefImpl::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
const char *subTitle,bool showInline,ClassDef *inheritedFrom,int lt2,
bool invert,bool showAlways,QPtrDict<void> *visitedClasses)
{
- //printf("%s: ClassDef::writeMemberDeclarations lt=%d lt2=%d\n",name().data(),lt,lt2);
+ //printf("%s: ClassDefImpl::writeMemberDeclarations lt=%d lt2=%d\n",name().data(),lt,lt2);
MemberList * ml = getMemberList(lt);
MemberList * ml2 = getMemberList((MemberListType)lt2);
if (getLanguage()==SrcLangExt_VHDL) // use specific declarations function
@@ -4615,7 +4837,7 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
}
}
-void ClassDef::addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
+void ClassDefImpl::addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
ClassDef *inheritedFrom,const QCString &inheritId)
{
//printf("** %s::addGroupedInheritedMembers(%p) inheritId=%s\n",name().data(),m_impl->memberGroupSDict,inheritId.data());
@@ -4633,25 +4855,25 @@ void ClassDef::addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
}
}
-void ClassDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title,bool showInline)
+void ClassDefImpl::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title,bool showInline)
{
- //printf("%s: ClassDef::writeMemberDocumentation()\n",name().data());
+ //printf("%s: ClassDefImpl::writeMemberDocumentation()\n",name().data());
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDocumentation(ol,displayName(),this,title,FALSE,showInline);
}
-void ClassDef::writeSimpleMemberDocumentation(OutputList &ol,MemberListType lt)
+void ClassDefImpl::writeSimpleMemberDocumentation(OutputList &ol,MemberListType lt)
{
- //printf("%s: ClassDef::writeSimpleMemberDocumentation()\n",name().data());
+ //printf("%s: ClassDefImpl::writeSimpleMemberDocumentation()\n",name().data());
MemberList * ml = getMemberList(lt);
if (ml) ml->writeSimpleDocumentation(ol,this);
}
-void ClassDef::writePlainMemberDeclaration(OutputList &ol,
+void ClassDefImpl::writePlainMemberDeclaration(OutputList &ol,
MemberListType lt,bool inGroup,
ClassDef *inheritedFrom,const char *inheritId)
{
- //printf("%s: ClassDef::writePlainMemberDeclaration()\n",name().data());
+ //printf("%s: ClassDefImpl::writePlainMemberDeclaration()\n",name().data());
MemberList * ml = getMemberList(lt);
if (ml)
{
@@ -4660,222 +4882,227 @@ void ClassDef::writePlainMemberDeclaration(OutputList &ol,
}
}
-bool ClassDef::isLocal() const
+bool ClassDefImpl::isLocal() const
{
return m_impl->isLocal;
}
-ClassSDict *ClassDef::getClassSDict() const
+ClassSDict *ClassDefImpl::getClassSDict() const
{
return m_impl->innerClasses;
}
-ClassDef::CompoundType ClassDef::compoundType() const
+ClassDefImpl::CompoundType ClassDefImpl::compoundType() const
{
return m_impl->compType;
}
-BaseClassList *ClassDef::baseClasses() const
+BaseClassList *ClassDefImpl::baseClasses() const
{
return m_impl->inherits;
}
-BaseClassList *ClassDef::subClasses() const
+BaseClassList *ClassDefImpl::subClasses() const
{
return m_impl->inheritedBy;
}
-MemberNameInfoSDict *ClassDef::memberNameInfoSDict() const
+MemberNameInfoSDict *ClassDefImpl::memberNameInfoSDict() const
{
return m_impl->allMemberNameInfoSDict;
}
-Protection ClassDef::protection() const
+Protection ClassDefImpl::protection() const
{
return m_impl->prot;
}
-ArgumentList *ClassDef::templateArguments() const
+ArgumentList *ClassDefImpl::templateArguments() const
{
return m_impl->tempArgs;
}
-NamespaceDef *ClassDef::getNamespaceDef() const
+NamespaceDef *ClassDefImpl::getNamespaceDef() const
{
return m_impl->nspace;
}
-FileDef *ClassDef::getFileDef() const
+FileDef *ClassDefImpl::getFileDef() const
{
return m_impl->fileDef;
}
-QDict<ClassDef> *ClassDef::getTemplateInstances() const
+QDict<ClassDef> *ClassDefImpl::getTemplateInstances() const
{
return m_impl->templateInstances;
}
-ClassDef *ClassDef::templateMaster() const
+ClassDef *ClassDefImpl::templateMaster() const
{
return m_impl->templateMaster;
}
-bool ClassDef::isTemplate() const
+bool ClassDefImpl::isTemplate() const
{
return m_impl->tempArgs!=0;
}
-IncludeInfo *ClassDef::includeInfo() const
+IncludeInfo *ClassDefImpl::includeInfo() const
{
return m_impl->incInfo;
}
-UsesClassDict *ClassDef::usedImplementationClasses() const
+UsesClassDict *ClassDefImpl::usedImplementationClasses() const
{
return m_impl->usesImplClassDict;
}
-UsesClassDict *ClassDef::usedByImplementationClasses() const
+UsesClassDict *ClassDefImpl::usedByImplementationClasses() const
{
return m_impl->usedByImplClassDict;
}
-UsesClassDict *ClassDef::usedInterfaceClasses() const
+UsesClassDict *ClassDefImpl::usedInterfaceClasses() const
{
return m_impl->usesIntfClassDict;
}
-ConstraintClassDict *ClassDef::templateTypeConstraints() const
+ConstraintClassDict *ClassDefImpl::templateTypeConstraints() const
{
return m_impl->constraintClassDict;
}
-bool ClassDef::isTemplateArgument() const
+bool ClassDefImpl::isTemplateArgument() const
{
return m_impl->isTemplArg;
}
-bool ClassDef::isAbstract() const
+bool ClassDefImpl::isAbstract() const
{
return m_impl->isAbstract || (m_impl->spec&Entry::Abstract);
}
-bool ClassDef::isFinal() const
+bool ClassDefImpl::isFinal() const
{
return m_impl->spec&Entry::Final;
}
-bool ClassDef::isSealed() const
+bool ClassDefImpl::isSealed() const
{
return m_impl->spec&Entry::Sealed;
}
-bool ClassDef::isPublished() const
+bool ClassDefImpl::isPublished() const
{
return m_impl->spec&Entry::Published;
}
-bool ClassDef::isForwardDeclared() const
+bool ClassDefImpl::isForwardDeclared() const
{
return m_impl->spec&Entry::ForwardDecl;
}
-bool ClassDef::isObjectiveC() const
+bool ClassDefImpl::isInterface() const
+{
+ return m_impl->spec&Entry::Interface;
+}
+
+bool ClassDefImpl::isObjectiveC() const
{
return getLanguage()==SrcLangExt_ObjC;
}
-bool ClassDef::isFortran() const
+bool ClassDefImpl::isFortran() const
{
return getLanguage()==SrcLangExt_Fortran;
}
-bool ClassDef::isCSharp() const
+bool ClassDefImpl::isCSharp() const
{
return getLanguage()==SrcLangExt_CSharp;
}
-ClassDef *ClassDef::categoryOf() const
+ClassDef *ClassDefImpl::categoryOf() const
{
return m_impl->categoryOf;
}
-const QList<MemberList> &ClassDef::getMemberLists() const
+const QList<MemberList> &ClassDefImpl::getMemberLists() const
{
return m_impl->memberLists;
}
-MemberGroupSDict *ClassDef::getMemberGroupSDict() const
+MemberGroupSDict *ClassDefImpl::getMemberGroupSDict() const
{
return m_impl->memberGroupSDict;
}
-void ClassDef::setNamespace(NamespaceDef *nd)
+void ClassDefImpl::setNamespace(NamespaceDef *nd)
{
m_impl->nspace = nd;
}
-void ClassDef::setFileDef(FileDef *fd)
+void ClassDefImpl::setFileDef(FileDef *fd)
{
m_impl->fileDef=fd;
}
-void ClassDef::setSubGrouping(bool enabled)
+void ClassDefImpl::setSubGrouping(bool enabled)
{
m_impl->subGrouping = enabled;
}
-void ClassDef::setProtection(Protection p)
+void ClassDefImpl::setProtection(Protection p)
{
m_impl->prot=p;
}
-void ClassDef::setIsStatic(bool b)
+void ClassDefImpl::setIsStatic(bool b)
{
m_impl->isStatic=b;
}
-void ClassDef::setCompoundType(CompoundType t)
+void ClassDefImpl::setCompoundType(CompoundType t)
{
m_impl->compType = t;
}
-void ClassDef::setTemplateMaster(ClassDef *tm)
+void ClassDefImpl::setTemplateMaster(ClassDef *tm)
{
m_impl->templateMaster=tm;
}
-void ClassDef::makeTemplateArgument(bool b)
+void ClassDefImpl::makeTemplateArgument(bool b)
{
m_impl->isTemplArg = b;
}
-void ClassDef::setCategoryOf(ClassDef *cd)
+void ClassDefImpl::setCategoryOf(ClassDef *cd)
{
m_impl->categoryOf = cd;
}
-void ClassDef::setUsedOnly(bool b)
+void ClassDefImpl::setUsedOnly(bool b)
{
m_impl->usedOnly = b;
}
-bool ClassDef::isUsedOnly() const
+bool ClassDefImpl::isUsedOnly() const
{
return m_impl->usedOnly;
}
-bool ClassDef::isSimple() const
+bool ClassDefImpl::isSimple() const
{
return m_impl->isSimple;
}
-MemberDef *ClassDef::isSmartPointer() const
+MemberDef *ClassDefImpl::isSmartPointer() const
{
return m_impl->arrowOperator;
}
-void ClassDef::reclassifyMember(MemberDef *md,MemberType t)
+void ClassDefImpl::reclassifyMember(MemberDef *md,MemberType t)
{
md->setMemberType(t);
QListIterator<MemberList> mli(m_impl->memberLists);
@@ -4887,7 +5114,7 @@ void ClassDef::reclassifyMember(MemberDef *md,MemberType t)
insertMember(md);
}
-QCString ClassDef::anchor() const
+QCString ClassDefImpl::anchor() const
{
QCString anc;
if (isEmbeddedInOuterScope() && !Doxygen::generatingXmlOutput)
@@ -4905,7 +5132,7 @@ QCString ClassDef::anchor() const
return anc;
}
-bool ClassDef::isEmbeddedInOuterScope() const
+bool ClassDefImpl::isEmbeddedInOuterScope() const
{
static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
@@ -4935,12 +5162,12 @@ bool ClassDef::isEmbeddedInOuterScope() const
return b1 || b2; // either reason will do
}
-const ClassList *ClassDef::taggedInnerClasses() const
+const ClassList *ClassDefImpl::taggedInnerClasses() const
{
return m_impl->taggedInnerClasses;
}
-void ClassDef::addTaggedInnerClass(ClassDef *cd)
+void ClassDefImpl::addTaggedInnerClass(ClassDef *cd)
{
if (m_impl->taggedInnerClasses==0)
{
@@ -4949,17 +5176,17 @@ void ClassDef::addTaggedInnerClass(ClassDef *cd)
m_impl->taggedInnerClasses->append(cd);
}
-ClassDef *ClassDef::tagLessReference() const
+ClassDef *ClassDefImpl::tagLessReference() const
{
return m_impl->tagLessRef;
}
-void ClassDef::setTagLessReference(ClassDef *cd)
+void ClassDefImpl::setTagLessReference(ClassDef *cd)
{
m_impl->tagLessRef = cd;
}
-void ClassDef::removeMemberFromLists(MemberDef *md)
+void ClassDefImpl::removeMemberFromLists(MemberDef *md)
{
QListIterator<MemberList> mli(m_impl->memberLists);
MemberList *ml;
@@ -4969,22 +5196,22 @@ void ClassDef::removeMemberFromLists(MemberDef *md)
}
}
-bool ClassDef::isJavaEnum() const
+bool ClassDefImpl::isJavaEnum() const
{
return m_impl->isJavaEnum;
}
-bool ClassDef::isGeneric() const
+bool ClassDefImpl::isGeneric() const
{
return m_impl->isGeneric;
}
-void ClassDef::setClassSpecifier(uint64 spec)
+void ClassDefImpl::setClassSpecifier(uint64 spec)
{
m_impl->spec = spec;
}
-bool ClassDef::isExtension() const
+bool ClassDefImpl::isExtension() const
{
QCString n = name();
int si = n.find('(');
@@ -4993,58 +5220,58 @@ bool ClassDef::isExtension() const
return b;
}
-const ClassSDict *ClassDef::innerClasses() const
+const ClassSDict *ClassDefImpl::innerClasses() const
{
return m_impl->innerClasses;
}
-const FileList &ClassDef::usedFiles() const
+const FileList &ClassDefImpl::usedFiles() const
{
return m_impl->files;
}
-const ArgumentList *ClassDef::typeConstraints() const
+const ArgumentList *ClassDefImpl::typeConstraints() const
{
return m_impl->typeConstraints;
}
-const ExampleSDict *ClassDef::exampleList() const
+const ExampleSDict *ClassDefImpl::exampleList() const
{
return m_impl->exampleSDict;
}
-bool ClassDef::subGrouping() const
+bool ClassDefImpl::subGrouping() const
{
return m_impl->subGrouping;
}
-bool ClassDef::isSliceLocal() const
+bool ClassDefImpl::isSliceLocal() const
{
return m_impl->spec&Entry::Local;
}
-void ClassDef::setName(const char *name)
+void ClassDefImpl::setName(const char *name)
{
m_impl->isAnonymous = QCString(name).find('@')!=-1;
- Definition::setName(name);
+ DefinitionImpl::setName(name);
}
-void ClassDef::setMetaData(const char *md)
+void ClassDefImpl::setMetaData(const char *md)
{
m_impl->metaData = md;
}
-bool ClassDef::isAnonymous() const
+bool ClassDefImpl::isAnonymous() const
{
return m_impl->isAnonymous;
}
-QCString ClassDef::collaborationGraphFileName() const
+QCString ClassDefImpl::collaborationGraphFileName() const
{
return m_impl->collabFileName;
}
-QCString ClassDef::inheritanceGraphFileName() const
+QCString ClassDefImpl::inheritanceGraphFileName() const
{
return m_impl->inheritFileName;
}
diff --git a/src/classdef.h b/src/classdef.h
index 14f9fc8..58a3dee 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -50,13 +50,12 @@ class ClassDefImpl;
class ArgumentList;
class FTextStream;
-/** A class representing of a compound symbol.
+/** A abstract class representing of a compound symbol.
*
* A compound can be a class, struct, union, interface, service, singleton,
* or exception.
- * \note This class should be renamed to CompoundDef
*/
-class ClassDef : public Definition
+class ClassDef : virtual public Definition
{
public:
/** The various compound types */
@@ -71,398 +70,341 @@ class ClassDef : public Definition
Singleton, //=Entry::CLASS_SEC
};
- /** Creates a new compound definition.
- * \param fileName full path and file name in which this compound was
- * found.
- * \param startLine line number where the definition of this compound
- * starts.
- * \param startColumn column number where the definition of this compound
- * starts.
- * \param name the name of this compound (including scope)
- * \param ct the kind of Compound
- * \param ref the tag file from which this compound is extracted
- * or 0 if the compound doesn't come from a tag file
- * \param fName the file name as found in the tag file.
- * This overwrites the file that doxygen normally
- * generates based on the compound type & name.
- * \param isSymbol If TRUE this class name is added as a publicly
- * visible (and referencable) symbol.
- * \param isJavaEnum If TRUE this class is actually a Java enum.
- * I didn't add this to CompoundType to avoid having
- * to adapt all translators.
- */
- ClassDef(const char *fileName,int startLine,int startColumn,
- const char *name,CompoundType ct,
- const char *ref=0,const char *fName=0,
- bool isSymbol=TRUE,bool isJavaEnum=FALSE);
- /** Destroys a compound definition. */
- ~ClassDef();
+ virtual ~ClassDef() {}
//-----------------------------------------------------------------------------------
// --- getters
//-----------------------------------------------------------------------------------
/** Used for RTTI, this is a class */
- DefType definitionType() const { return TypeClass; }
+ virtual DefType definitionType() const = 0;
/** Returns the unique base name (without extension) of the class's file on disk */
- QCString getOutputFileBase() const;
- QCString getInstanceOutputFileBase() const;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString getInstanceOutputFileBase() const = 0;
/** Returns the base name for the source code file */
- QCString getSourceFileBase() const;
+ virtual QCString getSourceFileBase() const = 0;
/** If this class originated from a tagfile, this will return the tag file reference */
- QCString getReference() const;
+ virtual QCString getReference() const = 0;
/** Returns TRUE if this class is imported via a tag file */
- bool isReference() const;
+ virtual bool isReference() const = 0;
/** Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES */
- bool isLocal() const;
+ virtual bool isLocal() const = 0;
/** returns the classes nested into this class */
- ClassSDict *getClassSDict() const;
+ virtual ClassSDict *getClassSDict() const = 0;
/** returns TRUE if this class has documentation */
- bool hasDocumentation() const;
+ virtual bool hasDocumentation() const = 0;
/** returns TRUE if this class has a non-empty detailed description */
- bool hasDetailedDescription() const;
-
+ virtual bool hasDetailedDescription() const = 0;
+
/** returns the file name to use for the collaboration graph */
- QCString collaborationGraphFileName() const;
+ virtual QCString collaborationGraphFileName() const = 0;
/** returns the file name to use for the inheritance graph */
- QCString inheritanceGraphFileName() const;
+ virtual QCString inheritanceGraphFileName() const = 0;
/** Returns the name as it is appears in the documentation */
- QCString displayName(bool includeScope=TRUE) const;
+ virtual QCString displayName(bool includeScope=TRUE) const = 0;
/** Returns the type of compound this is, i.e. class/struct/union/.. */
- CompoundType compoundType() const;
+ virtual CompoundType compoundType() const = 0;
/** Returns the type of compound as a string */
- QCString compoundTypeString() const;
+ virtual QCString compoundTypeString() const = 0;
/** Returns the list of base classes from which this class directly
* inherits.
*/
- BaseClassList *baseClasses() const;
-
+ virtual BaseClassList *baseClasses() const = 0;
+
/** Returns the list of sub classes that directly derive from this class
*/
- BaseClassList *subClasses() const;
+ virtual BaseClassList *subClasses() const = 0;
- /** Returns a dictionary of all members. This includes any inherited
+ /** Returns a dictionary of all members. This includes any inherited
* members. Members are sorted alphabetically.
- */
- MemberNameInfoSDict *memberNameInfoSDict() const;
+ */
+ virtual MemberNameInfoSDict *memberNameInfoSDict() const = 0;
- /** Return the protection level (Public,Protected,Private) in which
+ /** Return the protection level (Public,Protected,Private) in which
* this compound was found.
*/
- Protection protection() const;
+ virtual Protection protection() const = 0;
/** returns TRUE iff a link is possible to this item within this project.
*/
- bool isLinkableInProject() const;
+ virtual bool isLinkableInProject() const = 0;
- /** return TRUE iff a link to this class is possible (either within
+ /** return TRUE iff a link to this class is possible (either within
* this project, or as a cross-reference to another project).
*/
- bool isLinkable() const;
+ virtual bool isLinkable() const = 0;
/** the class is visible in a class diagram, or class hierarchy */
- bool isVisibleInHierarchy();
-
+ virtual bool isVisibleInHierarchy() const = 0;
+
/** show this class in the declaration section of its parent? */
- bool visibleInParentsDeclList() const;
+ virtual bool visibleInParentsDeclList() const = 0;
/** Returns the template arguments of this class
* Will return 0 if not applicable.
*/
- ArgumentList *templateArguments() const;
+ virtual ArgumentList *templateArguments() const = 0;
/** Returns the namespace this compound is in, or 0 if it has a global
* scope.
*/
- NamespaceDef *getNamespaceDef() const;
+ virtual NamespaceDef *getNamespaceDef() const = 0;
/** Returns the file in which this compound's definition can be found.
* Should not return 0 (but it might be a good idea to check anyway).
*/
- FileDef *getFileDef() const;
+ virtual FileDef *getFileDef() const = 0;
- /** Returns the Java package this class is in or 0 if not applicable.
- */
+ /** Returns the Java package this class is in or 0 if not applicable.
+ */
+
+ virtual MemberDef *getMemberByName(const QCString &) const = 0;
- MemberDef *getMemberByName(const QCString &) const;
-
/** Returns TRUE iff \a bcd is a direct or indirect base class of this
* class. This function will recursively traverse all branches of the
* inheritance tree.
*/
- bool isBaseClass(ClassDef *bcd,bool followInstances,int level=0);
+ virtual bool isBaseClass(const ClassDef *bcd,bool followInstances,int level=0) const = 0;
/** Returns TRUE iff \a bcd is a direct or indirect sub class of this
* class.
*/
- bool isSubClass(ClassDef *bcd,int level=0);
+ virtual bool isSubClass(ClassDef *bcd,int level=0) const = 0;
/** returns TRUE iff \a md is a member of this class or of the
- * the public/protected members of a base class
+ * the public/protected members of a base class
*/
- bool isAccessibleMember(MemberDef *md);
+ virtual bool isAccessibleMember(const MemberDef *md) const = 0;
/** Returns a sorted dictionary with all template instances found for
* this template class. Returns 0 if not a template or no instances.
*/
- QDict<ClassDef> *getTemplateInstances() const;
+ virtual QDict<ClassDef> *getTemplateInstances() const = 0;
/** Returns the template master of which this class is an instance.
* Returns 0 if not applicable.
*/
- ClassDef *templateMaster() const;
+ virtual ClassDef *templateMaster() const = 0;
/** Returns TRUE if this class is a template */
- bool isTemplate() const;
+ virtual bool isTemplate() const = 0;
- IncludeInfo *includeInfo() const;
-
- UsesClassDict *usedImplementationClasses() const;
+ virtual IncludeInfo *includeInfo() const = 0;
- UsesClassDict *usedByImplementationClasses() const;
+ virtual UsesClassDict *usedImplementationClasses() const = 0;
- UsesClassDict *usedInterfaceClasses() const;
+ virtual UsesClassDict *usedByImplementationClasses() const = 0;
- ConstraintClassDict *templateTypeConstraints() const;
+ virtual UsesClassDict *usedInterfaceClasses() const = 0;
- bool isTemplateArgument() const;
+ virtual ConstraintClassDict *templateTypeConstraints() const = 0;
+
+ virtual bool isTemplateArgument() const = 0;
/** Returns the definition of a nested compound if
* available, or 0 otherwise.
* @param name The name of the nested compound
*/
- virtual Definition *findInnerCompound(const char *name) const;
+ virtual Definition *findInnerCompound(const char *name) const = 0;
/** Returns the template parameter lists that form the template
* declaration of this class.
- *
- * Example: <code>template<class T> class TC {};</code>
+ *
+ * Example: <code>template<class T> class TC {} = 0;</code>
* will return a list with one ArgumentList containing one argument
* with type="class" and name="T".
*/
- void getTemplateParameterLists(QList<ArgumentList> &lists) const;
+ virtual void getTemplateParameterLists(QList<ArgumentList> &lists) const = 0;
- QCString qualifiedNameWithTemplateParameters(
- QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const;
+ virtual QCString qualifiedNameWithTemplateParameters(
+ QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const = 0;
/** Returns TRUE if there is at least one pure virtual member in this
* class.
*/
- bool isAbstract() const;
+ virtual bool isAbstract() const = 0;
/** Returns TRUE if this class is implemented in Objective-C */
- bool isObjectiveC() const;
+ virtual bool isObjectiveC() const = 0;
/** Returns TRUE if this class is implemented in Fortran */
- bool isFortran() const;
+ virtual bool isFortran() const = 0;
/** Returns TRUE if this class is implemented in C# */
- bool isCSharp() const;
+ virtual bool isCSharp() const = 0;
/** Returns TRUE if this class is marked as final */
- bool isFinal() const;
+ virtual bool isFinal() const = 0;
/** Returns TRUE if this class is marked as sealed */
- bool isSealed() const;
+ virtual bool isSealed() const = 0;
/** Returns TRUE if this class is marked as published */
- bool isPublished() const;
+ virtual bool isPublished() const = 0;
/** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */
- bool isExtension() const;
+ virtual bool isExtension() const = 0;
/** Returns TRUE if this class represents a forward declaration of a template class */
- bool isForwardDeclared() const;
+ virtual bool isForwardDeclared() const = 0;
+
+ /** Returns TRUE if this class represents an interface */
+ virtual bool isInterface() const = 0;
/** Returns the class of which this is a category (Objective-C only) */
- ClassDef *categoryOf() const;
+ virtual ClassDef *categoryOf() const = 0;
/** Returns the name of the class including outer classes, but not
* including namespaces.
*/
- QCString className() const;
+ virtual QCString className() const = 0;
/** Returns the members in the list identified by \a lt */
- MemberList *getMemberList(MemberListType lt);
+ virtual MemberList *getMemberList(MemberListType lt) const = 0;
/** Returns the list containing the list of members sorted per type */
- const QList<MemberList> &getMemberLists() const;
+ virtual const QList<MemberList> &getMemberLists() const = 0;
/** Returns the member groups defined for this class */
- MemberGroupSDict *getMemberGroupSDict() const;
+ virtual MemberGroupSDict *getMemberGroupSDict() const = 0;
- QDict<int> *getTemplateBaseClassNames() const;
+ virtual QDict<int> *getTemplateBaseClassNames() const = 0;
- ClassDef *getVariableInstance(const char *templSpec);
+ virtual ClassDef *getVariableInstance(const char *templSpec) = 0;
- bool isUsedOnly() const;
+ virtual bool isUsedOnly() const = 0;
- QCString anchor() const;
- bool isEmbeddedInOuterScope() const;
+ virtual QCString anchor() const = 0;
+ virtual bool isEmbeddedInOuterScope() const = 0;
- bool isSimple() const;
+ virtual bool isSimple() const = 0;
- const ClassList *taggedInnerClasses() const;
- ClassDef *tagLessReference() const;
+ virtual const ClassList *taggedInnerClasses() const = 0;
+ virtual ClassDef *tagLessReference() const = 0;
- MemberDef *isSmartPointer() const;
+ virtual MemberDef *isSmartPointer() const = 0;
- bool isJavaEnum() const;
+ virtual bool isJavaEnum() const = 0;
- bool isGeneric() const;
- bool isAnonymous() const;
- const ClassSDict *innerClasses() const;
- QCString title() const;
+ virtual bool isGeneric() const = 0;
+ virtual bool isAnonymous() const = 0;
+ virtual const ClassSDict *innerClasses() const = 0;
+ virtual QCString title() const = 0;
- QCString generatedFromFiles() const;
- const FileList &usedFiles() const;
+ virtual QCString generatedFromFiles() const = 0;
+ virtual const FileList &usedFiles() const = 0;
- const ArgumentList *typeConstraints() const;
- const ExampleSDict *exampleList() const;
- bool hasExamples() const;
- QCString getMemberListFileName() const;
- bool subGrouping() const;
+ virtual const ArgumentList *typeConstraints() const = 0;
+ virtual const ExampleSDict *exampleList() const = 0;
+ virtual bool hasExamples() const = 0;
+ virtual QCString getMemberListFileName() const = 0;
+ virtual bool subGrouping() const = 0;
- bool isSliceLocal() const;
+ virtual bool isSliceLocal() const = 0;
//-----------------------------------------------------------------------------------
// --- setters ----
//-----------------------------------------------------------------------------------
- void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0);
- void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0);
- void setIncludeFile(FileDef *fd,const char *incName,bool local,bool force);
- void insertMember(MemberDef *);
- void insertUsedFile(FileDef *);
- bool addExample(const char *anchor,const char *name, const char *file);
- void mergeCategory(ClassDef *category);
- void setNamespace(NamespaceDef *nd);
- void setFileDef(FileDef *fd);
- void setSubGrouping(bool enabled);
- void setProtection(Protection p);
- void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
- void addInnerCompound(Definition *d);
- ClassDef *insertTemplateInstance(const QCString &fileName,int startLine,int startColumn,
- const QCString &templSpec,bool &freshInstance);
- void addUsedClass(ClassDef *cd,const char *accessName,Protection prot);
- void addUsedByClass(ClassDef *cd,const char *accessName,Protection prot);
- void setIsStatic(bool b);
- void setCompoundType(CompoundType t);
- void setClassName(const char *name);
- void setClassSpecifier(uint64 spec);
-
- void setTemplateArguments(ArgumentList *al);
- void setTemplateBaseClassNames(QDict<int> *templateNames);
- void setTemplateMaster(ClassDef *tm);
- void setTypeConstraints(ArgumentList *al);
- void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
- void makeTemplateArgument(bool b=TRUE);
- void setCategoryOf(ClassDef *cd);
- void setUsedOnly(bool b);
-
- void addTaggedInnerClass(ClassDef *cd);
- void setTagLessReference(ClassDef *cd);
- void setName(const char *name);
-
- void setMetaData(const char *md);
+ virtual void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0) = 0;
+ virtual void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0) = 0;
+ virtual void setIncludeFile(FileDef *fd,const char *incName,bool local,bool force) = 0;
+ virtual void insertMember(MemberDef *) = 0;
+ virtual void insertUsedFile(FileDef *) = 0;
+ virtual bool addExample(const char *anchor,const char *name, const char *file) = 0;
+ virtual void mergeCategory(ClassDef *category) = 0;
+ virtual void setNamespace(NamespaceDef *nd) = 0;
+ virtual void setFileDef(FileDef *fd) = 0;
+ virtual void setSubGrouping(bool enabled) = 0;
+ virtual void setProtection(Protection p) = 0;
+ virtual void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs) = 0;
+ virtual void addInnerCompound(Definition *d) = 0;
+ virtual ClassDef *insertTemplateInstance(const QCString &fileName,int startLine,int startColumn,
+ const QCString &templSpec,bool &freshInstance) = 0;
+ virtual void addUsedClass(ClassDef *cd,const char *accessName,Protection prot) = 0;
+ virtual void addUsedByClass(ClassDef *cd,const char *accessName,Protection prot) = 0;
+ virtual void setIsStatic(bool b) = 0;
+ virtual void setCompoundType(CompoundType t) = 0;
+ virtual void setClassName(const char *name) = 0;
+ virtual void setClassSpecifier(uint64 spec) = 0;
+
+ virtual void setTemplateArguments(ArgumentList *al) = 0;
+ virtual void setTemplateBaseClassNames(QDict<int> *templateNames) = 0;
+ virtual void setTemplateMaster(ClassDef *tm) = 0;
+ virtual void setTypeConstraints(ArgumentList *al) = 0;
+ virtual void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec) = 0;
+ virtual void makeTemplateArgument(bool b=TRUE) = 0;
+ virtual void setCategoryOf(ClassDef *cd) = 0;
+ virtual void setUsedOnly(bool b) = 0;
+
+ virtual void addTaggedInnerClass(ClassDef *cd) = 0;
+ virtual void setTagLessReference(ClassDef *cd) = 0;
+ virtual void setName(const char *name) = 0;
+
+ virtual void setMetaData(const char *md) = 0;
//-----------------------------------------------------------------------------------
// --- actions ----
//-----------------------------------------------------------------------------------
- void findSectionsInDocumentation();
- void addMembersToMemberGroup();
- void addListReferences();
- void addTypeConstraints();
- void computeAnchors();
- void mergeMembers();
- void sortMemberLists();
- void distributeMemberGroupDocumentation();
- void writeDocumentation(OutputList &ol);
- void writeDocumentationForInnerClasses(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeMemberList(OutputList &ol);
- void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
- ClassDef *inheritedFrom,const char *inheritId);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const;
- void writeSummaryLinks(OutputList &ol);
- void reclassifyMember(MemberDef *md,MemberType t);
- void writeInlineDocumentation(OutputList &ol);
- void writeDeclarationLink(OutputList &ol,bool &found,
- const char *header,bool localNames);
- void removeMemberFromLists(MemberDef *md);
- void addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
- ClassDef *inheritedFrom,const QCString &inheritId);
- int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional);
- int countInheritanceNodes();
- void writeTagFile(FTextStream &);
-
- bool visited;
-
- protected:
- void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
- bool hasNonReferenceSuperClass();
- void showUsedFiles(OutputList &ol);
-
- private:
- void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
- void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
- void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief);
- MemberList *createMemberList(MemberListType lt);
- void writeInheritedMemberDeclarations(OutputList &ol,MemberListType lt,int lt2,const QCString &title,ClassDef *inheritedFrom,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
- void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
- const char *subTitle=0,bool showInline=FALSE,ClassDef *inheritedFrom=0,int lt2=-1,bool invert=FALSE,bool showAlways=FALSE,QPtrDict<void> *visitedClasses=0);
- void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title,bool showInline=FALSE);
- void writeSimpleMemberDocumentation(OutputList &ol,MemberListType lt);
- void writePlainMemberDeclaration(OutputList &ol,MemberListType lt,bool inGroup,ClassDef *inheritedFrom,const char *inheritId);
- void writeBriefDescription(OutputList &ol,bool exampleFlag);
- void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
- const QCString &title,const QCString &anchor=QCString());
- void writeIncludeFiles(OutputList &ol);
- void writeIncludeFilesForSlice(OutputList &ol);
- //void writeAllMembersLink(OutputList &ol);
- void writeInheritanceGraph(OutputList &ol);
- void writeCollaborationGraph(OutputList &ol);
- void writeMemberGroups(OutputList &ol,bool showInline=FALSE);
- void writeNestedClasses(OutputList &ol,const QCString &title);
- void writeInlineClasses(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeMoreLink(OutputList &ol,const QCString &anchor);
- void writeDetailedDocumentationBody(OutputList &ol);
-
- int countAdditionalInheritedMembers();
- void writeAdditionalInheritedMembers(OutputList &ol);
- void addClassAttributes(OutputList &ol);
- int countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
- int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses);
- int countInheritedDecMembers(MemberListType lt,
- ClassDef *inheritedFrom,bool invert,bool showAlways,
- QPtrDict<void> *visitedClasses);
- void getTitleForMemberListType(MemberListType type,
- QCString &title,QCString &subtitle);
- QCString includeStatement() const;
- void addTypeConstraint(const QCString &typeConstraint,const QCString &type);
-
- ClassDefImpl *m_impl;
+ virtual void findSectionsInDocumentation() = 0;
+ virtual void addMembersToMemberGroup() = 0;
+ virtual void addListReferences() = 0;
+ virtual void addTypeConstraints() = 0;
+ virtual void computeAnchors() = 0;
+ virtual void mergeMembers() = 0;
+ virtual void sortMemberLists() = 0;
+ virtual void distributeMemberGroupDocumentation() = 0;
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeDocumentationForInnerClasses(OutputList &ol) = 0;
+ virtual void writeMemberPages(OutputList &ol) = 0;
+ virtual void writeMemberList(OutputList &ol) = 0;
+ virtual void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
+ ClassDef *inheritedFrom,const char *inheritId) = 0;
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const = 0;
+ virtual void writeSummaryLinks(OutputList &ol) = 0;
+ virtual void reclassifyMember(MemberDef *md,MemberType t) = 0;
+ virtual void writeInlineDocumentation(OutputList &ol) = 0;
+ virtual void writeDeclarationLink(OutputList &ol,bool &found,
+ const char *header,bool localNames) = 0;
+ virtual void removeMemberFromLists(MemberDef *md) = 0;
+ virtual void addGroupedInheritedMembers(OutputList &ol,MemberListType lt,
+ ClassDef *inheritedFrom,const QCString &inheritId) = 0;
+ virtual int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional) = 0;
+ virtual int countInheritanceNodes() = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+
+ virtual void setVisited(bool visited) = 0;
+ virtual bool isVisited() const = 0;
+ virtual bool hasNonReferenceSuperClass() const = 0;
+ virtual int countMemberDeclarations(MemberListType lt,ClassDef *inheritedFrom,
+ int lt2,bool invert,bool showAlways,QPtrDict<void> *visitedClasses) = 0;
+ virtual void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title,
+ const char *subTitle=0,bool showInline=FALSE,ClassDef *inheritedFrom=0,
+ int lt2=-1,bool invert=FALSE,bool showAlways=FALSE,
+ QPtrDict<void> *visitedClasses=0) = 0;
};
+/** Factory method to create a new ClassDef object */
+ClassDef *createClassDef(
+ const char *fileName,int startLine,int startColumn,
+ const char *name,ClassDef::CompoundType ct,
+ const char *ref=0,const char *fName=0,
+ bool isSymbol=TRUE,bool isJavaEnum=FALSE);
+
//------------------------------------------------------------------------
/** Class that contains information about a usage relation.
diff --git a/src/code.l b/src/code.l
index 558c439..b2dacba 100644
--- a/src/code.l
+++ b/src/code.l
@@ -841,7 +841,7 @@ static void updateCallContextForSmartPointer()
Definition *d = g_theCallContext.getScope();
//printf("updateCallContextForSmartPointer() cd=%s\n",cd ? d->name().data() : "<none>");
MemberDef *md;
- if (d && d->definitionType()==Definition::TypeClass && (md=((ClassDef*)d)->isSmartPointer()))
+ if (d && d->definitionType()==Definition::TypeClass && (md=(dynamic_cast<ClassDef*>(d))->isSmartPointer()))
{
ClassDef *ncd = stripClassName(md->typeString(),md->getOuterScope());
if (ncd)
@@ -1176,7 +1176,7 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,Definition *def,cons
{
if (def && def->definitionType()==Definition::TypeClass)
{
- ClassDef *cd = (ClassDef*)def;
+ ClassDef *cd = dynamic_cast<ClassDef*>(def);
MemberDef *xmd = cd->getMemberByName(memName);
//printf("generateClassMemberLink(class=%s,member=%s)=%p\n",def->name().data(),memName,xmd);
if (xmd)
@@ -1197,7 +1197,7 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,Definition *def,cons
}
else if (def && def->definitionType()==Definition::TypeNamespace)
{
- NamespaceDef *nd = (NamespaceDef*)def;
+ NamespaceDef *nd = dynamic_cast<NamespaceDef*>(def);
//printf("Looking for %s inside namespace %s\n",memName,nd->name().data());
Definition *innerDef = nd->findInnerCompound(memName);
if (innerDef)
@@ -1483,7 +1483,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectType = (ClassDef *)g_currentDefinition;
+ ctx->objectType = dynamic_cast<ClassDef *>(g_currentDefinition);
}
}
else
@@ -1507,7 +1507,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectVar = ((ClassDef *)g_currentDefinition)->getMemberByName(ctx->objectTypeOrName);
+ ctx->objectVar = (dynamic_cast<ClassDef *>(g_currentDefinition))->getMemberByName(ctx->objectTypeOrName);
//printf(" ctx->objectVar=%p\n",ctx->objectVar);
if (ctx->objectVar)
{
@@ -1589,7 +1589,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectType = (ClassDef *)g_currentDefinition;
+ ctx->objectType = dynamic_cast<ClassDef *>(g_currentDefinition);
if (ctx->objectType->categoryOf())
{
ctx->objectType = ctx->objectType->categoryOf();
@@ -1608,7 +1608,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ClassDef *cd = (ClassDef *)g_currentDefinition;
+ ClassDef *cd = dynamic_cast<ClassDef *>(g_currentDefinition);
if (cd->categoryOf())
{
cd = cd->categoryOf();
@@ -2295,7 +2295,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
if (getResolvedClass(g_currentDefinition,g_sourceFileDef,g_curClassName)==0)
{
DBG_CTX((stderr,"Adding new class %s\n",g_curClassName.data()));
- ClassDef *ncd=new ClassDef("<code>",1,1,
+ ClassDef *ncd=createClassDef("<code>",1,1,
g_curClassName,ClassDef::Class,0,0,FALSE);
g_codeClassSDict->append(g_curClassName,ncd);
// insert base classes.
@@ -2473,10 +2473,6 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
BEGIN(FuncCall);
}
<Body>{FLOWCONDITION}/{BN}*"(" {
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- {
- g_currentMemberDef->addFlowKeyWord();
- }
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
@@ -2494,10 +2490,6 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
}
<Body>{FLOWCONDITION}/([^a-z_A-Z0-9]) {
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- {
- g_currentMemberDef->addFlowKeyWord();
- }
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
@@ -2512,10 +2504,6 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
endFontClass();
}
<Body>{FLOWCONDITION}/{B}* {
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- {
- g_currentMemberDef->addFlowKeyWord();
- }
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
@@ -3051,10 +3039,6 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
endFontClass();
}
<MemberCall2,FuncCall>{FLOWCONDITION}/([^a-z_A-Z0-9]) {
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- {
- g_currentMemberDef->addFlowKeyWord();
- }
addParmType();
g_parmName=yytext;
startFontClass("keywordflow");
@@ -3745,7 +3729,6 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
- TooltipManager::instance()->clearTooltips();
if (g_codeClassSDict==0)
{
resetCCodeParserState();
@@ -3786,7 +3769,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
if (fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
+ g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
g_insideObjC = lang==SrcLangExt_ObjC;
@@ -3828,10 +3811,6 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
DBG_CTX((stderr,"endCodeLine(%d)\n",g_yyLineNr));
g_code->endCodeLine();
}
- if (fd)
- {
- TooltipManager::instance()->writeTooltips(*g_code);
- }
if (cleanupSourceDef)
{
// delete the temporary file definition used for this example
diff --git a/src/commentscan.l b/src/commentscan.l
index c656c9e..0ca293c 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -1181,7 +1181,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
addOutput(yytext);
}
}
-<Comment>{B}*("\\\\"|"@@")"f"[$\[{] { // escaped formula command
+<Comment>{B}*({CMD}{CMD})"f"[$\[{] { // escaped formula command
addOutput(yytext);
}
<Comment>{B}*{CMD}"~"[a-z_A-Z-]* { // language switch command
@@ -1805,7 +1805,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
g_sectionTitle+=yytext;
addOutput(yytext);
}
-<SectionTitle>("\\\\"|"@@"){ID} { // unescape escaped command
+<SectionTitle>({CMD}{CMD}){ID} { // unescape escaped command
g_sectionTitle+=&yytext[1];
addOutput(yytext);
}
diff --git a/src/config.h b/src/config.h
index 102774e..1b79b1e 100644
--- a/src/config.h
+++ b/src/config.h
@@ -65,6 +65,8 @@ namespace Config
/*! Post processed the parsed data. Replaces raw string values by the actual values.
* and replaces environment variables.
* \param clearHeaderAndFooter set to TRUE when writing header and footer templates.
+ * \param compare signals if we in Doxyfile compare (`-x`) mode are or not. Influences
+ * setting of the default value.
*/
void postProcess(bool clearHeaderAndFooter, bool compare = FALSE);
diff --git a/src/config.xml b/src/config.xml
index a62040b..8820fe7 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -667,7 +667,7 @@ Go to the <a href="commands.html">next</a> section or return to the
]]>
</docs>
</option>
- <option type='int' id='TOC_INCLUDE_HEADINGS' minval='0' maxval='99' defval='0' depends='MARKDOWN_SUPPORT'>
+ <option type='int' id='TOC_INCLUDE_HEADINGS' minval='0' maxval='99' defval='5' depends='MARKDOWN_SUPPORT'>
<docs>
<![CDATA[
When the \c TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings
diff --git a/src/context.cpp b/src/context.cpp
index 8a3a784..7b7c725 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -1582,9 +1582,9 @@ class DefinitionContext
{
fillPath(outerScope,list);
}
- else if (type==Definition::TypeFile && ((const FileDef*)def)->getDirDef())
+ else if (type==Definition::TypeFile && (dynamic_cast<const FileDef*>(def))->getDirDef())
{
- fillPath(((const FileDef*)def)->getDirDef(),list);
+ fillPath((dynamic_cast<const FileDef*>(def))->getDirDef(),list);
}
list->append(NavPathElemContext::alloc(def));
}
@@ -1598,9 +1598,9 @@ class DefinitionContext
{
fillPath(m_def->getOuterScope(),list);
}
- else if (m_def->definitionType()==Definition::TypeFile && ((const FileDef *)m_def)->getDirDef())
+ else if (m_def->definitionType()==Definition::TypeFile && (dynamic_cast<const FileDef *>(m_def))->getDirDef())
{
- fillPath(((const FileDef *)m_def)->getDirDef(),list);
+ fillPath((dynamic_cast<const FileDef *>(m_def))->getDirDef(),list);
}
cache.navPath.reset(list);
}
@@ -2374,7 +2374,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
addTemplateDecls(parent,tl);
}
- ClassDef *cd=(ClassDef *)d;
+ ClassDef *cd=dynamic_cast<ClassDef *>(d);
if (cd->templateArguments())
{
ArgumentListContext *al = ArgumentListContext::alloc(cd->templateArguments(),cd,relPathAsString());
@@ -3854,7 +3854,7 @@ class TextGeneratorHtml : public TextGeneratorIntf
if (ref)
{
m_ts << "<a class=\"elRef\" ";
- m_ts << externalLinkTarget() << externalRef(m_relPath,ref,FALSE);
+ m_ts << externalLinkTarget();
}
else
{
@@ -6278,7 +6278,7 @@ class NestingNodeContext::Private
{
if (!m_cache.classContext && m_def->definitionType()==Definition::TypeClass)
{
- m_cache.classContext.reset(ClassContext::alloc((ClassDef*)m_def));
+ m_cache.classContext.reset(ClassContext::alloc(dynamic_cast<ClassDef*>(m_def)));
}
if (m_cache.classContext)
{
@@ -6293,7 +6293,7 @@ class NestingNodeContext::Private
{
if (!m_cache.namespaceContext && m_def->definitionType()==Definition::TypeNamespace)
{
- m_cache.namespaceContext.reset(NamespaceContext::alloc((NamespaceDef*)m_def));
+ m_cache.namespaceContext.reset(NamespaceContext::alloc(dynamic_cast<NamespaceDef*>(m_def)));
}
if (m_cache.namespaceContext)
{
@@ -6308,7 +6308,7 @@ class NestingNodeContext::Private
{
if (!m_cache.dirContext && m_def->definitionType()==Definition::TypeDir)
{
- m_cache.dirContext.reset(DirContext::alloc((DirDef*)m_def));
+ m_cache.dirContext.reset(DirContext::alloc(dynamic_cast<DirDef*>(m_def)));
}
if (m_cache.dirContext)
{
@@ -6323,7 +6323,7 @@ class NestingNodeContext::Private
{
if (!m_cache.fileContext && m_def->definitionType()==Definition::TypeFile)
{
- m_cache.fileContext.reset(FileContext::alloc((FileDef*)m_def));
+ m_cache.fileContext.reset(FileContext::alloc(dynamic_cast<FileDef*>(m_def)));
}
if (m_cache.fileContext)
{
@@ -6338,7 +6338,7 @@ class NestingNodeContext::Private
{
if (!m_cache.pageContext && m_def->definitionType()==Definition::TypePage)
{
- m_cache.pageContext.reset(PageContext::alloc((PageDef*)m_def,FALSE,FALSE));
+ m_cache.pageContext.reset(PageContext::alloc(dynamic_cast<PageDef*>(m_def),FALSE,FALSE));
}
if (m_cache.pageContext)
{
@@ -6353,7 +6353,7 @@ class NestingNodeContext::Private
{
if (!m_cache.moduleContext && m_def->definitionType()==Definition::TypeGroup)
{
- m_cache.moduleContext.reset(ModuleContext::alloc((GroupDef*)m_def));
+ m_cache.moduleContext.reset(ModuleContext::alloc(dynamic_cast<GroupDef*>(m_def)));
}
if (m_cache.moduleContext)
{
@@ -6425,14 +6425,14 @@ class NestingNodeContext::Private
void addClasses(bool inherit, bool hideSuper)
{
- ClassDef *cd = m_def->definitionType()==Definition::TypeClass ? (ClassDef*)m_def : 0;
+ ClassDef *cd = dynamic_cast<ClassDef*>(m_def);
if (cd && inherit)
{
- bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
+ bool hasChildren = !cd->isVisited() && !hideSuper && classHasVisibleChildren(cd);
if (hasChildren)
{
- bool wasVisited=cd->visited;
- cd->visited=TRUE;
+ bool wasVisited=cd->isVisited();
+ cd->setVisited(TRUE);
if (cd->getLanguage()==SrcLangExt_VHDL)
{
m_children->addDerivedClasses(cd->baseClasses(),wasVisited);
@@ -6453,7 +6453,7 @@ class NestingNodeContext::Private
}
void addNamespaces(bool addClasses)
{
- NamespaceDef *nd = m_def->definitionType()==Definition::TypeNamespace ? (NamespaceDef*)m_def : 0;
+ NamespaceDef *nd = dynamic_cast<NamespaceDef*>(m_def);
if (nd && nd->getNamespaceSDict())
{
m_children->addNamespaces(*nd->getNamespaceSDict(),FALSE,addClasses);
@@ -6465,7 +6465,7 @@ class NestingNodeContext::Private
}
void addDirFiles()
{
- DirDef *dd = m_def->definitionType()==Definition::TypeDir ? (DirDef*)m_def : 0;
+ DirDef *dd = dynamic_cast<DirDef*>(m_def);
if (dd)
{
m_children->addDirs(dd->subDirs());
@@ -6477,7 +6477,7 @@ class NestingNodeContext::Private
}
void addPages()
{
- PageDef *pd = m_def->definitionType()==Definition::TypePage ? (PageDef*)m_def : 0;
+ PageDef *pd = dynamic_cast<PageDef*>(m_def);
if (pd && pd->getSubPages())
{
m_children->addPages(*pd->getSubPages(),FALSE);
@@ -6485,7 +6485,7 @@ class NestingNodeContext::Private
}
void addModules()
{
- GroupDef *gd = m_def->definitionType()==Definition::TypeGroup ? (GroupDef*)m_def : 0;
+ GroupDef *gd = dynamic_cast<GroupDef*>(m_def);
if (gd && gd->getSubGroups())
{
m_children->addModules(*gd->getSubGroups());
@@ -6744,7 +6744,7 @@ class NestingContext::Private : public GenericNodeListContext
if (cd->isVisibleInHierarchy()) // should it be visible
{
// new root level class
- NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,TRUE,cd->visited);
+ NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,cd,m_index,m_level,TRUE,TRUE,cd->isVisited());
append(nnc);
m_index++;
}
@@ -7805,11 +7805,11 @@ class NavPathElemContext::Private
QCString text = m_def->localName();
if (type==Definition::TypeGroup)
{
- text = ((const GroupDef*)m_def)->groupTitle();
+ text = (dynamic_cast<const GroupDef*>(m_def))->groupTitle();
}
- else if (type==Definition::TypePage && (((const PageDef*)m_def)->hasTitle()))
+ else if (type==Definition::TypePage && ((dynamic_cast<const PageDef*>(m_def))->hasTitle()))
{
- text = ((const PageDef*)m_def)->title();
+ text = (dynamic_cast<const PageDef*>(m_def))->title();
}
else if (type==Definition::TypeClass)
{
@@ -9102,7 +9102,7 @@ class MemberListInfoContext::Private
m_def->definitionType()==Definition::TypeClass)
{
InheritedMemberInfoListContext *ctx = InheritedMemberInfoListContext::alloc();
- ctx->addMemberList((ClassDef*)m_def,m_memberList->listType(),m_title,FALSE);
+ ctx->addMemberList(dynamic_cast<ClassDef*>(m_def),m_memberList->listType(),m_title,FALSE);
m_cache.inherited.reset(ctx);
}
if (m_cache.inherited)
@@ -9614,8 +9614,7 @@ class SymbolContext::Private
const Definition *prev = m_prevDef;
const Definition *nextScope = next ? next->getOuterScope() : 0;
const Definition *prevScope = prev ? prev->getOuterScope() : 0;
- bool isMemberDef = m_def->definitionType()==Definition::TypeMember;
- const MemberDef *md = isMemberDef ? (const MemberDef*)m_def : 0;
+ const MemberDef *md = dynamic_cast<const MemberDef*>(m_def);
bool isFunctionLike = md && (md->isFunction() || md->isSlot() || md->isSignal());
bool overloadedFunction = isFunctionLike &&
((prevScope!=0 && scope==prevScope) || (scope && scope==nextScope));
@@ -10300,7 +10299,7 @@ void generateOutputViaTemplate()
else
{
// TODO: for LaTeX output index should be main... => solve in template
- Doxygen::mainPage = new PageDef("[generated]",1,"index","",theTranslator->trMainPage());
+ Doxygen::mainPage = createPageDef("[generated]",1,"index","",theTranslator->trMainPage());
Doxygen::mainPage->setFileName("index");
SharedPtr<PageContext> mainPage(PageContext::alloc(Doxygen::mainPage,TRUE,FALSE));
ctx->set("mainPage",mainPage.get());
diff --git a/src/debug.cpp b/src/debug.cpp
index 2f343ac..4c7afb3 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -49,6 +49,7 @@ static LabelMap s_labels[] =
{ "filteroutput", Debug::FilterOutput },
{ "lex", Debug::Lex },
{ "plantuml", Debug::Plantuml },
+ { "fortranfixed2free", Debug::FortranFixed2Free },
{ 0, (Debug::DebugMask)0 }
};
diff --git a/src/debug.h b/src/debug.h
index 9a2070c..79bc3d8 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -38,7 +38,8 @@ class Debug
Markdown = 0x00000800,
FilterOutput = 0x00001000,
Lex = 0x00002000,
- Plantuml = 0x00004000
+ Plantuml = 0x00004000,
+ FortranFixed2Free = 0x00008000
};
static void print(DebugMask mask,int prio,const char *fmt,...);
static int setFlag(const char *label);
diff --git a/src/defargs.l b/src/defargs.l
index 7e9ccca..e49ef2e 100644
--- a/src/defargs.l
+++ b/src/defargs.l
@@ -282,6 +282,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
<CopyArgSharp>"<<" {
if (g_argRoundCount>0)
{
+ // for e.g. < typename A = (i<<3) >
*g_copyArgValue += yytext;
}
else
@@ -289,17 +290,10 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
REJECT;
}
}
-<CopyArgSharp>">>)" { // combined token (see bug 790320)
- *g_copyArgValue += yytext;
- if (g_argSharpCount>0) g_argSharpCount--;
- else BEGIN( g_readArgContext );
- if (g_argSharpCount>0) g_argSharpCount--;
- else BEGIN( g_readArgContext );
- g_argRoundCount--;
- }
<CopyArgSharp>">>" {
if (g_argRoundCount>0)
{
+ // for e.g. < typename A = (i>>3) >
*g_copyArgValue += yytext;
}
else
@@ -308,12 +302,14 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
}
<CopyArgSharp>"<" {
- g_argSharpCount++;
+ // don't count < inside (, e.g. for things like: < typename A=(i<6) >
+ if (g_argRoundCount==0) g_argSharpCount++;
*g_copyArgValue += *yytext;
}
<CopyArgSharp>">" {
*g_copyArgValue += *yytext;
- if (g_argSharpCount>0) g_argSharpCount--;
+ // don't count > inside )
+ if (g_argSharpCount>0 && g_argRoundCount==0) g_argSharpCount--;
else BEGIN( g_readArgContext );
}
<CopyArgSharp>"(" {
diff --git a/src/definition.cpp b/src/definition.cpp
index ae229ad..1233add 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -22,10 +22,11 @@
#include <stdlib.h>
#include <assert.h>
#include "config.h"
-#include "definition.h"
+#include "definitionimpl.h"
#include "doxygen.h"
#include "language.h"
#include "message.h"
+#include "portable.h"
#include "outputlist.h"
#include "code.h"
#include "util.h"
@@ -34,7 +35,6 @@
#include "section.h"
#include "htags.h"
#include "parserintf.h"
-#include "marshal.h"
#include "debug.h"
#include "vhdldocgen.h"
#include "memberlist.h"
@@ -44,18 +44,14 @@
#include "pagedef.h"
#include "bufstr.h"
-#define START_MARKER 0x4445465B // DEF[
-#define END_MARKER 0x4445465D // DEF]
-
//-----------------------------------------------------------------------------------------
-
-/** Private data associated with a Symbol Definition object. */
-class DefinitionImpl
+/** Private data associated with a Symbol DefinitionImpl object. */
+class DefinitionImpl::IMPL
{
public:
- DefinitionImpl();
- ~DefinitionImpl();
+ IMPL();
+ ~IMPL();
void init(const char *df, const char *n);
void setDefFileName(const QCString &df);
@@ -90,9 +86,16 @@ class DefinitionImpl
SrcLangExt lang;
QCString id; // clang unique id
+
+ QCString name;
+ bool isSymbol;
+ QCString symbolName;
+ int defLine;
+ int defColumn;
+ Cookie *cookie;
};
-DefinitionImpl::DefinitionImpl()
+DefinitionImpl::IMPL::IMPL()
: sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
xrefListItems(0), partOfGroups(0),
details(0), inbodyDocs(0), brief(0), body(0), hidden(FALSE), isArtificial(FALSE),
@@ -100,7 +103,7 @@ DefinitionImpl::DefinitionImpl()
{
}
-DefinitionImpl::~DefinitionImpl()
+DefinitionImpl::IMPL::~IMPL()
{
delete sectionDict;
delete sourceRefByDict;
@@ -113,7 +116,7 @@ DefinitionImpl::~DefinitionImpl()
delete inbodyDocs;
}
-void DefinitionImpl::setDefFileName(const QCString &df)
+void DefinitionImpl::IMPL::setDefFileName(const QCString &df)
{
defFileName = df;
int lastDot = defFileName.findRev('.');
@@ -123,7 +126,7 @@ void DefinitionImpl::setDefFileName(const QCString &df)
}
}
-void DefinitionImpl::init(const char *df, const char *n)
+void DefinitionImpl::IMPL::init(const char *df, const char *n)
{
setDefFileName(df);
QCString name = n;
@@ -151,13 +154,14 @@ void DefinitionImpl::init(const char *df, const char *n)
hidden = FALSE;
isArtificial = FALSE;
lang = SrcLangExt_Unknown;
+ cookie = 0;
}
-void Definition::setDefFile(const QCString &df,int defLine,int defCol)
+void DefinitionImpl::setDefFile(const QCString &df,int defLine,int defCol)
{
m_impl->setDefFileName(df);
- m_defLine = defLine;
- m_defColumn = defCol;
+ m_impl->defLine = defLine;
+ m_impl->defColumn = defCol;
}
//-----------------------------------------------------------------------------------------
@@ -219,7 +223,7 @@ static bool matchExcludedSymbols(const char *name)
return FALSE;
}
-void Definition::addToMap(const char *name,Definition *d)
+void DefinitionImpl::addToMap(const char *name,Definition *d)
{
bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
QCString symbolName = name;
@@ -266,9 +270,9 @@ void Definition::addToMap(const char *name,Definition *d)
}
}
-void Definition::removeFromMap(Definition *d)
+void DefinitionImpl::removeFromMap(Definition *d)
{
- QCString symbolName = d->m_symbolName;
+ QCString symbolName = d->_symbolName();
if (!symbolName.isEmpty())
{
//printf("******* removing symbol `%s' (%p)\n",symbolName.data(),d);
@@ -296,16 +300,16 @@ void Definition::removeFromMap(Definition *d)
}
}
-Definition::Definition(const char *df,int dl,int dc,
+DefinitionImpl::DefinitionImpl(const char *df,int dl,int dc,
const char *name,const char *b,
- const char *d,bool isSymbol) : m_cookie(0)
+ const char *d,bool isSymbol)
{
- m_name = name;
- m_defLine = dl;
- m_defColumn = dc;
- m_impl = new DefinitionImpl;
+ m_impl = new DefinitionImpl::IMPL;
+ m_impl->name = name;
+ m_impl->defLine = dl;
+ m_impl->defColumn = dc;
m_impl->init(df,name);
- m_isSymbol = isSymbol;
+ m_impl->isSymbol = isSymbol;
if (isSymbol) addToMap(name,this);
_setBriefDescription(b,df,dl);
_setDocumentation(d,df,dl,TRUE,FALSE);
@@ -315,12 +319,9 @@ Definition::Definition(const char *df,int dl,int dc,
}
}
-Definition::Definition(const Definition &d) : DefinitionIntf(), m_cookie(0)
+DefinitionImpl::DefinitionImpl(const DefinitionImpl &d)
{
- m_name = d.m_name;
- m_defLine = d.m_defLine;
- m_defColumn = d.m_defColumn;
- m_impl = new DefinitionImpl;
+ m_impl = new DefinitionImpl::IMPL;
*m_impl = *d.m_impl;
m_impl->sectionDict = 0;
m_impl->sourceRefByDict = 0;
@@ -391,13 +392,12 @@ Definition::Definition(const Definition &d) : DefinitionIntf(), m_cookie(0)
m_impl->inbodyDocs = new DocInfo(*d.m_impl->inbodyDocs);
}
- m_isSymbol = d.m_isSymbol;
- if (m_isSymbol) addToMap(m_name,this);
+ if (m_impl->isSymbol) addToMap(m_impl->name,this);
}
-Definition::~Definition()
+DefinitionImpl::~DefinitionImpl()
{
- if (m_isSymbol)
+ if (m_impl->isSymbol)
{
removeFromMap(this);
}
@@ -406,33 +406,31 @@ Definition::~Definition()
delete m_impl;
m_impl=0;
}
- delete m_cookie;
- m_cookie=0;
}
-void Definition::setName(const char *name)
+void DefinitionImpl::setName(const char *name)
{
if (name==0) return;
- m_name = name;
+ m_impl->name = name;
}
-void Definition::setId(const char *id)
+void DefinitionImpl::setId(const char *id)
{
if (id==0) return;
m_impl->id = id;
if (Doxygen::clangUsrMap)
{
- //printf("Definition::setId '%s'->'%s'\n",id,m_name.data());
+ //printf("DefinitionImpl::setId '%s'->'%s'\n",id,m_name.data());
Doxygen::clangUsrMap->insert(id,this);
}
}
-QCString Definition::id() const
+QCString DefinitionImpl::id() const
{
return m_impl->id;
}
-void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
+void DefinitionImpl::addSectionsToDefinition(QList<SectionInfo> *anchorList)
{
if (!anchorList) return;
//printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
@@ -461,9 +459,9 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
}
}
-bool Definition::hasSections() const
+bool DefinitionImpl::hasSections() const
{
- //printf("Definition::hasSections(%s) #sections=%d\n",name().data(),
+ //printf("DefinitionImpl::hasSections(%s) #sections=%d\n",name().data(),
// m_impl->sectionDict ? m_impl->sectionDict->count() : 0);
if (m_impl->sectionDict==0) return FALSE;
SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
@@ -481,10 +479,10 @@ bool Definition::hasSections() const
return FALSE;
}
-void Definition::addSectionsToIndex()
+void DefinitionImpl::addSectionsToIndex()
{
if (m_impl->sectionDict==0) return;
- //printf("Definition::addSectionsToIndex()\n");
+ //printf("DefinitionImpl::addSectionsToIndex()\n");
SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
SectionInfo *si;
int level=1;
@@ -534,7 +532,7 @@ void Definition::addSectionsToIndex()
}
}
-void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile)
+void DefinitionImpl::writeDocAnchorsToTagFile(FTextStream &tagFile)
{
if (m_impl->sectionDict)
{
@@ -558,7 +556,7 @@ void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile)
}
}
-bool Definition::_docsAlreadyAdded(const QCString &doc,QCString &sigList)
+bool DefinitionImpl::_docsAlreadyAdded(const QCString &doc,QCString &sigList)
{
uchar md5_sig[16];
QCString sigStr(33);
@@ -580,7 +578,7 @@ bool Definition::_docsAlreadyAdded(const QCString &doc,QCString &sigList)
}
}
-void Definition::_setDocumentation(const char *d,const char *docFile,int docLine,
+void DefinitionImpl::_setDocumentation(const char *d,const char *docFile,int docLine,
bool stripWhiteSpace,bool atTop)
{
//printf("%s::setDocumentation(%s,%s,%d,%d)\n",name().data(),d,docFile,docLine,stripWhiteSpace);
@@ -626,7 +624,7 @@ void Definition::_setDocumentation(const char *d,const char *docFile,int docLine
}
}
-void Definition::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
+void DefinitionImpl::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
{
if (d==0) return;
_setDocumentation(d,docFile,docLine,stripWhiteSpace,FALSE);
@@ -646,7 +644,7 @@ static bool lastCharIsMultibyte(const QCString &s)
return TRUE;
}
-void Definition::_setBriefDescription(const char *b,const char *briefFile,int briefLine)
+void DefinitionImpl::_setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
static QCString outputLanguage = Config_getEnum(OUTPUT_LANGUAGE);
static bool needsDot = outputLanguage!="Japanese" &&
@@ -677,7 +675,7 @@ void Definition::_setBriefDescription(const char *b,const char *briefFile,int br
}
else
{
- //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
+ //fprintf(stderr,"DefinitionImpl::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
if (m_impl->brief==0)
{
m_impl->brief = new BriefInfo;
@@ -701,13 +699,13 @@ void Definition::_setBriefDescription(const char *b,const char *briefFile,int br
}
}
-void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine)
+void DefinitionImpl::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
if (b==0) return;
_setBriefDescription(b,briefFile,briefLine);
}
-void Definition::_setInbodyDocumentation(const char *doc,const char *inbodyFile,int inbodyLine)
+void DefinitionImpl::_setInbodyDocumentation(const char *doc,const char *inbodyFile,int inbodyLine)
{
if (m_impl->inbodyDocs==0)
{
@@ -725,7 +723,7 @@ void Definition::_setInbodyDocumentation(const char *doc,const char *inbodyFile,
}
}
-void Definition::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
+void DefinitionImpl::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
{
if (d==0) return;
_setInbodyDocumentation(d,inbodyFile,inbodyLine);
@@ -1016,7 +1014,7 @@ bool readCodeFragment(const char *fileName,
return found;
}
-QCString Definition::getSourceFileBase() const
+QCString DefinitionImpl::getSourceFileBase() const
{
ASSERT(definitionType()!=Definition::TypeFile); // file overloads this method
QCString fn;
@@ -1029,7 +1027,7 @@ QCString Definition::getSourceFileBase() const
return fn;
}
-QCString Definition::getSourceAnchor() const
+QCString DefinitionImpl::getSourceAnchor() const
{
const int maxAnchorStrLen = 20;
char anchorStr[maxAnchorStrLen];
@@ -1049,13 +1047,13 @@ QCString Definition::getSourceAnchor() const
}
/*! Write a reference to the source code defining this definition */
-void Definition::writeSourceDef(OutputList &ol,const char *)
+void DefinitionImpl::writeSourceDef(OutputList &ol,const char *)
{
static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE);
static bool rtfSourceCode = Config_getBool(RTF_SOURCE_CODE);
static bool docbookSourceCode = Config_getBool(DOCBOOK_PROGRAMLISTING);
ol.pushGeneratorState();
- //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
+ //printf("DefinitionImpl::writeSourceRef %d %p\n",bodyLine,bodyDef);
QCString fn = getSourceFileBase();
if (!fn.isEmpty())
{
@@ -1239,7 +1237,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.popGeneratorState();
}
-void Definition::setBodySegment(int bls,int ble)
+void DefinitionImpl::setBodySegment(int bls,int ble)
{
//printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
if (m_impl->body==0) m_impl->body = new BodyInfo;
@@ -1247,13 +1245,13 @@ void Definition::setBodySegment(int bls,int ble)
m_impl->body->endLine=ble;
}
-void Definition::setBodyDef(FileDef *fd)
+void DefinitionImpl::setBodyDef(FileDef *fd)
{
if (m_impl->body==0) m_impl->body = new BodyInfo;
m_impl->body->fileDef=fd;
}
-bool Definition::hasSources() const
+bool DefinitionImpl::hasSources() const
{
return m_impl->body && m_impl->body->startLine!=-1 &&
m_impl->body->endLine>=m_impl->body->startLine &&
@@ -1261,7 +1259,7 @@ bool Definition::hasSources() const
}
/*! Write code of this definition into the documentation */
-void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
+void DefinitionImpl::writeInlineCode(OutputList &ol,const char *scopeName)
{
static bool inlineSources = Config_getBool(INLINE_SOURCES);
ol.pushGeneratorState();
@@ -1281,7 +1279,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
pIntf->resetCodeParserState();
//printf("Read:\n`%s'\n\n",codeFragment.data());
MemberDef *thisMd = 0;
- if (definitionType()==TypeMember) thisMd = (MemberDef *)this;
+ if (definitionType()==TypeMember) thisMd = dynamic_cast <MemberDef*>(this);
ol.startCodeFragment();
pIntf->parseCode(ol, // codeOutIntf
@@ -1306,7 +1304,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
/*! Write a reference to the source code fragments in which this
* definition is used.
*/
-void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
+void DefinitionImpl::_writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool /*funcOnly*/)
{
static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE);
@@ -1351,7 +1349,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
{
name+="()";
}
- //Definition *d = md->getOutputFileBase();
+ //DefinitionImpl *d = md->getOutputFileBase();
//if (d==Doxygen::globalScope) d=md->getBodyDef();
if (sourceBrowser &&
!(md->isLinkable() && !refLinkSource) &&
@@ -1458,17 +1456,17 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
ol.popGeneratorState();
}
-void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
+void DefinitionImpl::writeSourceReffedBy(OutputList &ol,const char *scopeName)
{
_writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE);
}
-void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
+void DefinitionImpl::writeSourceRefs(OutputList &ol,const char *scopeName)
{
_writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE);
}
-bool Definition::hasDocumentation() const
+bool DefinitionImpl::hasDocumentation() const
{
static bool extractAll = Config_getBool(EXTRACT_ALL);
//static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
@@ -1483,7 +1481,7 @@ bool Definition::hasDocumentation() const
return hasDocs;
}
-bool Definition::hasUserDocumentation() const
+bool DefinitionImpl::hasUserDocumentation() const
{
bool hasDocs =
(m_impl->details && !m_impl->details->doc.isEmpty()) ||
@@ -1493,7 +1491,7 @@ bool Definition::hasUserDocumentation() const
}
-void Definition::addSourceReferencedBy(MemberDef *md)
+void DefinitionImpl::addSourceReferencedBy(MemberDef *md)
{
if (md)
{
@@ -1516,7 +1514,7 @@ void Definition::addSourceReferencedBy(MemberDef *md)
}
}
-void Definition::addSourceReferences(MemberDef *md)
+void DefinitionImpl::addSourceReferences(MemberDef *md)
{
if (md)
{
@@ -1539,17 +1537,17 @@ void Definition::addSourceReferences(MemberDef *md)
}
}
-Definition *Definition::findInnerCompound(const char *) const
+Definition *DefinitionImpl::findInnerCompound(const char *) const
{
return 0;
}
-void Definition::addInnerCompound(Definition *)
+void DefinitionImpl::addInnerCompound(Definition *)
{
- err("Definition::addInnerCompound() called\n");
+ err("DefinitionImpl::addInnerCompound() called\n");
}
-QCString Definition::qualifiedName() const
+QCString DefinitionImpl::qualifiedName() const
{
//static int count=0;
//count++;
@@ -1589,7 +1587,7 @@ QCString Definition::qualifiedName() const
return m_impl->qualifiedName;
}
-void Definition::setOuterScope(Definition *d)
+void DefinitionImpl::setOuterScope(Definition *d)
{
//printf("%s::setOuterScope(%s)\n",name().data(),d?d->name().data():"<none>");
Definition *p = m_impl->outerScope;
@@ -1598,7 +1596,7 @@ void Definition::setOuterScope(Definition *d)
while (p && !found)
{
found = (p==d);
- p = p->m_impl->outerScope;
+ p = p->getOuterScope();
}
if (!found)
{
@@ -1608,18 +1606,18 @@ void Definition::setOuterScope(Definition *d)
m_impl->hidden = m_impl->hidden || d->isHidden();
}
-QCString Definition::localName() const
+QCString DefinitionImpl::localName() const
{
return m_impl->localName;
}
-void Definition::makePartOfGroup(GroupDef *gd)
+void DefinitionImpl::makePartOfGroup(GroupDef *gd)
{
if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList;
m_impl->partOfGroups->append(gd);
}
-void Definition::setRefItems(const QList<ListItemInfo> *sli)
+void DefinitionImpl::setRefItems(const QList<ListItemInfo> *sli)
{
//printf("%s::setRefItems()\n",name().data());
if (sli)
@@ -1639,7 +1637,7 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
}
}
-void Definition::mergeRefItems(Definition *d)
+void DefinitionImpl::mergeRefItems(Definition *d)
{
//printf("%s::mergeRefItems()\n",name().data());
QList<ListItemInfo> *xrefList = d->xrefListItems();
@@ -1671,7 +1669,7 @@ void Definition::mergeRefItems(Definition *d)
}
}
-int Definition::_getXRefListId(const char *listName) const
+int DefinitionImpl::_getXRefListId(const char *listName) const
{
if (m_impl->xrefListItems)
{
@@ -1688,12 +1686,12 @@ int Definition::_getXRefListId(const char *listName) const
return -1;
}
-QList<ListItemInfo> *Definition::xrefListItems() const
+QList<ListItemInfo> *DefinitionImpl::xrefListItems() const
{
return m_impl->xrefListItems;
}
-QCString Definition::pathFragment() const
+QCString DefinitionImpl::pathFragment() const
{
QCString result;
if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope)
@@ -1703,13 +1701,13 @@ QCString Definition::pathFragment() const
if (isLinkable())
{
if (!result.isEmpty()) result+="/";
- if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
+ if (definitionType()==Definition::TypeGroup && (dynamic_cast <const GroupDef*>(this))->groupTitle())
{
- result+=((const GroupDef*)this)->groupTitle();
+ result+=(dynamic_cast <const GroupDef*>(this))->groupTitle();
}
- else if (definitionType()==Definition::TypePage && ((const PageDef*)this)->hasTitle())
+ else if (definitionType()==Definition::TypePage && (dynamic_cast <const PageDef*>(this))->hasTitle())
{
- result+=((const PageDef*)this)->title();
+ result+=(dynamic_cast <const PageDef*>(this))->title();
}
else
{
@@ -1729,7 +1727,7 @@ QCString Definition::pathFragment() const
/*! Returns the string used in the footer for $navpath when
* GENERATE_TREEVIEW is enabled
*/
-QCString Definition::navigationPathAsString() const
+QCString DefinitionImpl::navigationPathAsString() const
{
QCString result;
Definition *outerScope = getOuterScope();
@@ -1738,22 +1736,22 @@ QCString Definition::navigationPathAsString() const
{
result+=outerScope->navigationPathAsString();
}
- else if (definitionType()==Definition::TypeFile && ((const FileDef*)this)->getDirDef())
+ else if (definitionType()==Definition::TypeFile && (dynamic_cast<const FileDef*>(this))->getDirDef())
{
- result+=((const FileDef*)this)->getDirDef()->navigationPathAsString();
+ result+=(dynamic_cast<const FileDef*>(this))->getDirDef()->navigationPathAsString();
}
result+="<li class=\"navelem\">";
if (isLinkable())
{
- if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
+ if (definitionType()==Definition::TypeGroup && (dynamic_cast<const GroupDef*>(this))->groupTitle())
{
result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
- convertToHtml(((const GroupDef*)this)->groupTitle())+"</a>";
+ convertToHtml((dynamic_cast<const GroupDef*>(this))->groupTitle())+"</a>";
}
- else if (definitionType()==Definition::TypePage && ((const PageDef*)this)->hasTitle())
+ else if (definitionType()==Definition::TypePage && (dynamic_cast<const PageDef*>(this))->hasTitle())
{
result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
- convertToHtml(((const PageDef*)this)->title())+"</a>";
+ convertToHtml((dynamic_cast<const PageDef*>(this))->title())+"</a>";
}
else if (definitionType()==Definition::TypeClass)
{
@@ -1781,7 +1779,7 @@ QCString Definition::navigationPathAsString() const
}
// TODO: move to htmlgen
-void Definition::writeNavigationPath(OutputList &ol) const
+void DefinitionImpl::writeNavigationPath(OutputList &ol) const
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1798,7 +1796,7 @@ void Definition::writeNavigationPath(OutputList &ol) const
}
// TODO: move to htmlgen
-void Definition::writeToc(OutputList &ol, const LocalToc &localToc)
+void DefinitionImpl::writeToc(OutputList &ol, const LocalToc &localToc)
{
SectionDict *sectionDict = m_impl->sectionDict;
if (sectionDict==0) return;
@@ -1938,31 +1936,31 @@ void Definition::writeToc(OutputList &ol, const LocalToc &localToc)
//----------------------------------------------------------------------------------------
-SectionDict * Definition::getSectionDict(void)
+SectionDict * DefinitionImpl::getSectionDict(void)
{
return m_impl->sectionDict;
}
-QCString Definition::symbolName() const
+QCString DefinitionImpl::symbolName() const
{
- return m_symbolName;
+ return m_impl->symbolName;
}
//----------------------
-QCString Definition::documentation() const
+QCString DefinitionImpl::documentation() const
{
return m_impl->details ? m_impl->details->doc : QCString("");
}
-int Definition::docLine() const
+int DefinitionImpl::docLine() const
{
return m_impl->details ? m_impl->details->line : 1;
}
-QCString Definition::docFile() const
+QCString DefinitionImpl::docFile() const
{
- return m_impl->details ? m_impl->details->file : QCString("<"+m_name+">");
+ return m_impl->details ? m_impl->details->file : QCString("<"+m_impl->name+">");
}
//----------------------------------------------------------------------------
@@ -2016,7 +2014,7 @@ QCString abbreviate(const char *s,const char *name)
//----------------------
-QCString Definition::briefDescription(bool abbr) const
+QCString DefinitionImpl::briefDescription(bool abbr) const
{
//printf("%s::briefDescription(%d)='%s'\n",name().data(),abbr,m_impl->brief?m_impl->brief->doc.data():"<none>");
return m_impl->brief ?
@@ -2024,7 +2022,7 @@ QCString Definition::briefDescription(bool abbr) const
QCString("");
}
-QCString Definition::briefDescriptionAsTooltip() const
+QCString DefinitionImpl::briefDescriptionAsTooltip() const
{
if (m_impl->brief)
{
@@ -2033,7 +2031,7 @@ QCString Definition::briefDescriptionAsTooltip() const
static bool reentering=FALSE;
if (!reentering)
{
- MemberDef *md = definitionType()==TypeMember ? (MemberDef*)this : 0;
+ const MemberDef *md = definitionType()==TypeMember ? dynamic_cast<const MemberDef*>(this) : 0;
const Definition *scope = definitionType()==TypeMember ? getOuterScope() : this;
reentering=TRUE; // prevent requests for tooltips while parsing a tooltip
m_impl->brief->tooltip = parseCommentAsText(
@@ -2049,97 +2047,97 @@ QCString Definition::briefDescriptionAsTooltip() const
return QCString("");
}
-int Definition::briefLine() const
+int DefinitionImpl::briefLine() const
{
return m_impl->brief ? m_impl->brief->line : 1;
}
-QCString Definition::briefFile() const
+QCString DefinitionImpl::briefFile() const
{
- return m_impl->brief ? m_impl->brief->file : QCString("<"+m_name+">");
+ return m_impl->brief ? m_impl->brief->file : QCString("<"+m_impl->name+">");
}
//----------------------
-QCString Definition::inbodyDocumentation() const
+QCString DefinitionImpl::inbodyDocumentation() const
{
return m_impl->inbodyDocs ? m_impl->inbodyDocs->doc : QCString("");
}
-int Definition::inbodyLine() const
+int DefinitionImpl::inbodyLine() const
{
return m_impl->inbodyDocs ? m_impl->inbodyDocs->line : 1;
}
-QCString Definition::inbodyFile() const
+QCString DefinitionImpl::inbodyFile() const
{
- return m_impl->inbodyDocs ? m_impl->inbodyDocs->file : QCString("<"+m_name+">");
+ return m_impl->inbodyDocs ? m_impl->inbodyDocs->file : QCString("<"+m_impl->name+">");
}
//----------------------
-QCString Definition::getDefFileName() const
+QCString DefinitionImpl::getDefFileName() const
{
return m_impl->defFileName;
}
-QCString Definition::getDefFileExtension() const
+QCString DefinitionImpl::getDefFileExtension() const
{
return m_impl->defFileExt;
}
-bool Definition::isHidden() const
+bool DefinitionImpl::isHidden() const
{
return m_impl->hidden;
}
-bool Definition::isVisibleInProject() const
+bool DefinitionImpl::isVisibleInProject() const
{
return isLinkableInProject() && !m_impl->hidden;
}
-bool Definition::isVisible() const
+bool DefinitionImpl::isVisible() const
{
return isLinkable() && !m_impl->hidden;
}
-bool Definition::isArtificial() const
+bool DefinitionImpl::isArtificial() const
{
return m_impl->isArtificial;
}
-QCString Definition::getReference() const
+QCString DefinitionImpl::getReference() const
{
return m_impl->ref;
}
-bool Definition::isReference() const
+bool DefinitionImpl::isReference() const
{
return !m_impl->ref.isEmpty();
}
-int Definition::getStartBodyLine() const
+int DefinitionImpl::getStartBodyLine() const
{
return m_impl->body ? m_impl->body->startLine : -1;
}
-int Definition::getEndBodyLine() const
+int DefinitionImpl::getEndBodyLine() const
{
return m_impl->body ? m_impl->body->endLine : -1;
}
-FileDef *Definition::getBodyDef() const
+FileDef *DefinitionImpl::getBodyDef() const
{
return m_impl->body ? m_impl->body->fileDef : 0;
}
-GroupList *Definition::partOfGroups() const
+GroupList *DefinitionImpl::partOfGroups() const
{
return m_impl->partOfGroups;
}
-bool Definition::isLinkableViaGroup() const
+bool DefinitionImpl::isLinkableViaGroup() const
{
GroupList *gl = partOfGroups();
if (gl)
@@ -2154,64 +2152,69 @@ bool Definition::isLinkableViaGroup() const
return FALSE;
}
-Definition *Definition::getOuterScope() const
+Definition *DefinitionImpl::getOuterScope() const
{
return m_impl->outerScope;
}
-MemberSDict *Definition::getReferencesMembers() const
+MemberSDict *DefinitionImpl::getReferencesMembers() const
{
return m_impl->sourceRefsDict;
}
-MemberSDict *Definition::getReferencedByMembers() const
+MemberSDict *DefinitionImpl::getReferencedByMembers() const
{
return m_impl->sourceRefByDict;
}
-void Definition::setReference(const char *r)
+void DefinitionImpl::setReference(const char *r)
{
m_impl->ref=r;
}
-SrcLangExt Definition::getLanguage() const
+SrcLangExt DefinitionImpl::getLanguage() const
{
return m_impl->lang;
}
-void Definition::setHidden(bool b)
+void DefinitionImpl::setHidden(bool b)
{
m_impl->hidden = m_impl->hidden || b;
}
-void Definition::setArtificial(bool b)
+void DefinitionImpl::setArtificial(bool b)
{
m_impl->isArtificial = b;
}
-void Definition::setLocalName(const QCString name)
+void DefinitionImpl::setLocalName(const QCString name)
{
m_impl->localName=name;
}
-void Definition::setLanguage(SrcLangExt lang)
+void DefinitionImpl::setLanguage(SrcLangExt lang)
{
m_impl->lang=lang;
}
-void Definition::_setSymbolName(const QCString &name)
+void DefinitionImpl::_setSymbolName(const QCString &name)
{
- m_symbolName=name;
+ m_impl->symbolName=name;
+}
+
+QCString DefinitionImpl::_symbolName() const
+{
+ return m_impl->symbolName;
}
-bool Definition::hasBriefDescription() const
+bool DefinitionImpl::hasBriefDescription() const
{
static bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
return !briefDescription().isEmpty() && briefMemberDesc;
}
-QCString Definition::externalReference(const QCString &relPath) const
+QCString DefinitionImpl::externalReference(const QCString &relPath) const
{
QCString ref = getReference();
if (!ref.isEmpty())
@@ -2233,5 +2236,37 @@ QCString Definition::externalReference(const QCString &relPath) const
return relPath;
}
+QCString DefinitionImpl::name() const
+{
+ return m_impl->name;
+}
+int DefinitionImpl::getDefLine() const
+{
+ return m_impl->defLine;
+}
+
+int DefinitionImpl::getDefColumn() const
+{
+ return m_impl->defColumn;
+}
+
+void DefinitionImpl::setCookie(Cookie *cookie)
+{
+ delete m_impl->cookie;
+ m_impl->cookie = cookie;
+}
+
+Definition::Cookie *DefinitionImpl::cookie() const
+{
+ return m_impl->cookie;
+}
+
+void DefinitionImpl::writeQuickMemberLinks(OutputList &,MemberDef *) const
+{
+}
+
+void DefinitionImpl::writeSummaryLinks(OutputList &)
+{
+}
diff --git a/src/definition.h b/src/definition.h
index c382013..a2307f7 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -23,6 +23,12 @@
#include "types.h"
+#if defined(_WIN32) && !defined(__CYGWIN__)
+// To disable 'inherits via dominance' warnings.
+// See also https://stackoverflow.com/a/14487243/784672
+#pragma warning( disable: 4250 )
+#endif
+
class FileDef;
class OutputList;
class SectionDict;
@@ -33,7 +39,6 @@ class GroupList;
struct ListItemInfo;
struct SectionInfo;
class Definition;
-class DefinitionImpl;
class FTextStream;
/** Data associated with a detailed description. */
@@ -97,35 +102,26 @@ class Definition : public DefinitionIntf
virtual ~Cookie() {}
};
- /*! Create a new definition */
- Definition(
- const char *defFileName,int defLine,int defColumn,
- const char *name,const char *b=0,const char *d=0,
- bool isSymbol=TRUE);
-
- /*! Destroys the definition */
- virtual ~Definition();
-
//-----------------------------------------------------------------------------------
// ---- getters -----
//-----------------------------------------------------------------------------------
/*! Returns the name of the definition */
- const QCString& name() const { return m_name; }
+ virtual QCString name() const = 0;
/*! Returns the name of the definition as it appears in the output */
virtual QCString displayName(bool includeScope=TRUE) const = 0;
/*! Returns the local name without any scope qualifiers. */
- QCString localName() const;
+ virtual QCString localName() const = 0;
/*! Returns the fully qualified name of this definition
*/
- virtual QCString qualifiedName() const;
+ virtual QCString qualifiedName() const = 0;
/*! Returns the name of this definition as it appears in the symbol map.
*/
- QCString symbolName() const;
+ virtual QCString symbolName() const = 0;
/*! Returns the base file name (without extension) of this definition.
* as it is referenced to/written to disk.
@@ -136,68 +132,68 @@ class Definition : public DefinitionIntf
virtual QCString anchor() const = 0;
/*! Returns the name of the source listing of this definition. */
- virtual QCString getSourceFileBase() const;
+ virtual QCString getSourceFileBase() const = 0;
/*! Returns the anchor of the source listing of this definition. */
- virtual QCString getSourceAnchor() const;
+ virtual QCString getSourceAnchor() const = 0;
/*! Returns the detailed description of this definition */
- virtual QCString documentation() const;
+ virtual QCString documentation() const = 0;
/*! Returns the line number at which the detailed documentation was found. */
- int docLine() const;
+ virtual int docLine() const = 0;
/*! Returns the file in which the detailed documentation block was found.
* This can differ from getDefFileName().
*/
- QCString docFile() const;
+ virtual QCString docFile() const = 0;
/*! Returns the brief description of this definition. This can include commands. */
- virtual QCString briefDescription(bool abbreviate=FALSE) const;
+ virtual QCString briefDescription(bool abbreviate=FALSE) const = 0;
/*! Returns a plain text version of the brief description suitable for use
* as a tool tip.
*/
- QCString briefDescriptionAsTooltip() const;
+ virtual QCString briefDescriptionAsTooltip() const = 0;
/*! Returns the line number at which the brief description was found. */
- int briefLine() const;
+ virtual int briefLine() const = 0;
/*! Returns the documentation found inside the body of a member */
- QCString inbodyDocumentation() const;
+ virtual QCString inbodyDocumentation() const = 0;
/*! Returns the file in which the in body documentation was found */
- QCString inbodyFile() const;
+ virtual QCString inbodyFile() const = 0;
/*! Returns the line at which the first in body documentation
part was found */
- int inbodyLine() const;
+ virtual int inbodyLine() const = 0;
/*! Returns the file in which the brief description was found.
* This can differ from getDefFileName().
*/
- QCString briefFile() const;
+ virtual QCString briefFile() const = 0;
/*! returns the file in which this definition was found */
- QCString getDefFileName() const;
+ virtual QCString getDefFileName() const = 0;
/*! returns the extension of the file in which this definition was found */
- QCString getDefFileExtension() const;
+ virtual QCString getDefFileExtension() const = 0;
/*! returns the line number at which the definition was found */
- int getDefLine() const { return m_defLine; }
+ virtual int getDefLine() const = 0;
/*! returns the column number at which the definition was found */
- int getDefColumn() const { return m_defColumn; }
+ virtual int getDefColumn() const = 0;
/*! Returns TRUE iff the definition is documented
* (which could be generated documentation)
* @see hasUserDocumentation()
*/
- virtual bool hasDocumentation() const;
+ virtual bool hasDocumentation() const = 0;
/*! Returns TRUE iff the definition is documented by the user. */
- virtual bool hasUserDocumentation() const;
+ virtual bool hasUserDocumentation() const = 0;
/*! Returns TRUE iff it is possible to link to this item within this
* project.
@@ -212,175 +208,152 @@ class Definition : public DefinitionIntf
/*! Returns TRUE iff the name is part of this project and
* may appear in the output
*/
- virtual bool isVisibleInProject() const;
+ virtual bool isVisibleInProject() const = 0;
/*! Returns TRUE iff the name may appear in the output */
- virtual bool isVisible() const;
+ virtual bool isVisible() const = 0;
/*! Returns TRUE iff this item is supposed to be hidden from the output. */
- bool isHidden() const;
+ virtual bool isHidden() const = 0;
/*! returns TRUE if this entity was artificially introduced, for
* instance because it is used to show a template instantiation relation.
*/
- bool isArtificial() const;
+ virtual bool isArtificial() const = 0;
/*! If this definition was imported via a tag file, this function
* returns the tagfile for the external project. This can be
* translated into an external link target via
* Doxygen::tagDestinationDict
*/
- virtual QCString getReference() const;
+ virtual QCString getReference() const = 0;
/*! Returns TRUE if this definition is imported via a tag file. */
- virtual bool isReference() const;
+ virtual bool isReference() const = 0;
/*! Convenience method to return a resolved external link */
- QCString externalReference(const QCString &relPath) const;
+ virtual QCString externalReference(const QCString &relPath) const = 0;
/*! Returns the first line of the body of this item (applicable to classes and
* functions).
*/
- int getStartBodyLine() const;
+ virtual int getStartBodyLine() const = 0;
/*! Returns the last line of the body of this item (applicable to classes and
* functions).
*/
- int getEndBodyLine() const;
+ virtual int getEndBodyLine() const = 0;
/*! Returns the file in which the body of this item is located or 0 if no
* body is available.
*/
- FileDef *getBodyDef() const;
+ virtual FileDef *getBodyDef() const = 0;
/** Returns the programming language this definition was written in. */
- SrcLangExt getLanguage() const;
+ virtual SrcLangExt getLanguage() const = 0;
- GroupList *partOfGroups() const;
- bool isLinkableViaGroup() const;
+ virtual GroupList *partOfGroups() const = 0;
+ virtual bool isLinkableViaGroup() const = 0;
- QList<ListItemInfo> *xrefListItems() const;
+ virtual QList<ListItemInfo> *xrefListItems() const = 0;
- virtual Definition *findInnerCompound(const char *name) const ;
- virtual Definition *getOuterScope() const;
+ virtual Definition *findInnerCompound(const char *name) const = 0;
+ virtual Definition *getOuterScope() const = 0;
- MemberSDict *getReferencesMembers() const;
- MemberSDict *getReferencedByMembers() const;
+ virtual MemberSDict *getReferencesMembers() const = 0;
+ virtual MemberSDict *getReferencedByMembers() const = 0;
- bool hasSections() const;
- bool hasSources() const;
+ virtual bool hasSections() const = 0;
+ virtual bool hasSources() const = 0;
/** returns TRUE if this class has a brief description */
- bool hasBriefDescription() const;
+ virtual bool hasBriefDescription() const = 0;
- QCString id() const;
+ virtual QCString id() const = 0;
/** returns the section dictionary, only of importance for pagedef */
- SectionDict * getSectionDict(void);
+ virtual SectionDict * getSectionDict(void) = 0;
//-----------------------------------------------------------------------------------
// ---- setters -----
//-----------------------------------------------------------------------------------
/*! Sets a new \a name for the definition */
- virtual void setName(const char *name);
+ virtual void setName(const char *name) = 0;
/*! Sets a unique id for the symbol. Used for libclang integration. */
- void setId(const char *name);
+ virtual void setId(const char *name) = 0;
/*! Set a new file name and position */
- void setDefFile(const QCString& df,int defLine,int defColumn);
+ virtual void setDefFile(const QCString& df,int defLine,int defColumn) = 0;
/*! Sets the documentation of this definition to \a d. */
- virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
+ virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE) = 0;
/*! Sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available.
*/
- virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine) = 0;
/*! Set the documentation that was found inside the body of an item.
* If there was already some documentation set, the new documentation
* will be appended.
*/
- virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine);
+ virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine) = 0;
/*! Sets the tag file id via which this definition was imported. */
- void setReference(const char *r);
+ virtual void setReference(const char *r) = 0;
/*! Add the list of anchors that mark the sections that are found in the
* documentation.
*/
- void addSectionsToDefinition(QList<SectionInfo> *anchorList);
+ virtual void addSectionsToDefinition(QList<SectionInfo> *anchorList) = 0;
// source references
- void setBodySegment(int bls,int ble);
- void setBodyDef(FileDef *fd);
- void addSourceReferencedBy(MemberDef *d);
- void addSourceReferences(MemberDef *d);
+ virtual void setBodySegment(int bls,int ble) = 0;
+ virtual void setBodyDef(FileDef *fd) = 0;
+ virtual void addSourceReferencedBy(MemberDef *d) = 0;
+ virtual void addSourceReferences(MemberDef *d) = 0;
- void setRefItems(const QList<ListItemInfo> *sli);
- void mergeRefItems(Definition *d);
- virtual void addInnerCompound(Definition *d);
- virtual void setOuterScope(Definition *d);
+ virtual void setRefItems(const QList<ListItemInfo> *sli) = 0;
+ virtual void mergeRefItems(Definition *d) = 0;
+ virtual void addInnerCompound(Definition *d) = 0;
+ virtual void setOuterScope(Definition *d) = 0;
- virtual void setHidden(bool b);
+ virtual void setHidden(bool b) = 0;
- void setArtificial(bool b);
- void setLanguage(SrcLangExt lang);
+ virtual void setArtificial(bool b) = 0;
+ virtual void setLanguage(SrcLangExt lang) = 0;
//-----------------------------------------------------------------------------------
// --- actions ----
//-----------------------------------------------------------------------------------
- void writeSourceDef(OutputList &ol,const char *scopeName);
- void writeInlineCode(OutputList &ol,const char *scopeName);
- void writeSourceRefs(OutputList &ol,const char *scopeName);
- void writeSourceReffedBy(OutputList &ol,const char *scopeName);
- void makePartOfGroup(GroupDef *gd);
- //void writePathFragment(OutputList &ol) const;
- void writeNavigationPath(OutputList &ol) const;
- QCString navigationPathAsString() const;
- virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const {}
- virtual void writeSummaryLinks(OutputList &) {}
- QCString pathFragment() const;
+ virtual void writeSourceDef(OutputList &ol,const char *scopeName) = 0;
+ virtual void writeInlineCode(OutputList &ol,const char *scopeName) = 0;
+ virtual void writeSourceRefs(OutputList &ol,const char *scopeName) = 0;
+ virtual void writeSourceReffedBy(OutputList &ol,const char *scopeName) = 0;
+ virtual void makePartOfGroup(GroupDef *gd) = 0;
+ virtual void writeNavigationPath(OutputList &ol) const = 0;
+ virtual QCString navigationPathAsString() const = 0;
+ virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const = 0;
+ virtual void writeSummaryLinks(OutputList &) = 0;
+ virtual QCString pathFragment() const = 0;
/*! Writes the documentation anchors of the definition to
* the Doxygen::tagFile stream.
*/
- void writeDocAnchorsToTagFile(FTextStream &);
- void setLocalName(const QCString name);
-
- void addSectionsToIndex();
- void writeToc(OutputList &ol, const LocalToc &lt);
-
- void setCookie(Cookie *cookie) { delete m_cookie; m_cookie = cookie; }
- Cookie *cookie() const { return m_cookie; }
-
- protected:
-
- Definition(const Definition &d);
-
- private:
- static void addToMap(const char *name,Definition *d);
- static void removeFromMap(Definition *d);
-
- void _setSymbolName(const QCString &name);
-
- int _getXRefListId(const char *listName) const;
- void _writeSourceRefList(OutputList &ol,const char *scopeName,
- const QCString &text,MemberSDict *members,bool);
- void _setBriefDescription(const char *b,const char *briefFile,int briefLine);
- void _setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace,bool atTop);
- void _setInbodyDocumentation(const char *d,const char *docFile,int docLine);
- bool _docsAlreadyAdded(const QCString &doc,QCString &sigList);
- DefinitionImpl *m_impl; // internal structure holding all private data
- QCString m_name;
- bool m_isSymbol;
- QCString m_symbolName;
- int m_defLine;
- int m_defColumn;
- Cookie *m_cookie;
+ virtual void writeDocAnchorsToTagFile(FTextStream &) = 0;
+ virtual void setLocalName(const QCString name) = 0;
+
+ virtual void addSectionsToIndex() = 0;
+ virtual void writeToc(OutputList &ol, const LocalToc &lt) = 0;
+
+ virtual void setCookie(Cookie *cookie) = 0;
+ virtual Cookie *cookie() const = 0;
+
+ virtual void _setSymbolName(const QCString &name) = 0;
+ virtual QCString _symbolName() const = 0;
};
/** A list of Definition objects. */
diff --git a/src/definitionimpl.h b/src/definitionimpl.h
new file mode 100644
index 0000000..864d35b
--- /dev/null
+++ b/src/definitionimpl.h
@@ -0,0 +1,144 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2019 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#ifndef DEFINITIONIMPL_H
+#define DEFINITIONIMPL_H
+
+#include "definition.h"
+
+class DefinitionImpl : virtual public Definition
+{
+ public:
+ /*! Create a new definition */
+ DefinitionImpl(
+ const char *defFileName,int defLine,int defColumn,
+ const char *name,const char *b=0,const char *d=0,
+ bool isSymbol=TRUE);
+ virtual ~DefinitionImpl();
+
+ virtual QCString name() const;
+ virtual QCString displayName(bool includeScope=TRUE) const = 0;
+ virtual QCString localName() const;
+ virtual QCString qualifiedName() const;
+ virtual QCString symbolName() const;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual QCString getSourceFileBase() const;
+ virtual QCString getSourceAnchor() const;
+ virtual QCString documentation() const;
+ virtual int docLine() const;
+ virtual QCString docFile() const;
+ virtual QCString briefDescription(bool abbreviate=FALSE) const;
+ virtual QCString briefDescriptionAsTooltip() const;
+ virtual int briefLine() const;
+ virtual QCString inbodyDocumentation() const;
+ virtual QCString inbodyFile() const;
+ virtual int inbodyLine() const;
+ virtual QCString briefFile() const;
+ virtual QCString getDefFileName() const;
+ virtual QCString getDefFileExtension() const;
+ virtual int getDefLine() const;
+ virtual int getDefColumn() const;
+ virtual bool hasDocumentation() const;
+ virtual bool hasUserDocumentation() const;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual bool isVisibleInProject() const;
+ virtual bool isVisible() const;
+ virtual bool isHidden() const;
+ virtual bool isArtificial() const;
+ virtual QCString getReference() const;
+ virtual bool isReference() const;
+ virtual QCString externalReference(const QCString &relPath) const;
+ virtual int getStartBodyLine() const;
+ virtual int getEndBodyLine() const;
+ virtual FileDef *getBodyDef() const;
+ virtual SrcLangExt getLanguage() const;
+ virtual GroupList *partOfGroups() const;
+ virtual bool isLinkableViaGroup() const;
+ virtual QList<ListItemInfo> *xrefListItems() const;
+ virtual Definition *findInnerCompound(const char *name) const;
+ virtual Definition *getOuterScope() const;
+ virtual MemberSDict *getReferencesMembers() const;
+ virtual MemberSDict *getReferencedByMembers() const;
+ virtual bool hasSections() const;
+ virtual bool hasSources() const;
+ virtual bool hasBriefDescription() const;
+ virtual QCString id() const;
+ virtual SectionDict * getSectionDict(void);
+ virtual void setName(const char *name);
+ virtual void setId(const char *name);
+ virtual void setDefFile(const QCString& df,int defLine,int defColumn);
+ virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
+ virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine);
+ virtual void setReference(const char *r);
+ virtual void addSectionsToDefinition(QList<SectionInfo> *anchorList);
+ virtual void setBodySegment(int bls,int ble);
+ virtual void setBodyDef(FileDef *fd);
+ virtual void addSourceReferencedBy(MemberDef *d);
+ virtual void addSourceReferences(MemberDef *d);
+ virtual void setRefItems(const QList<ListItemInfo> *sli);
+ virtual void mergeRefItems(Definition *d);
+ virtual void addInnerCompound(Definition *d);
+ virtual void setOuterScope(Definition *d);
+ virtual void setHidden(bool b);
+ virtual void setArtificial(bool b);
+ virtual void setLanguage(SrcLangExt lang);
+ virtual void writeSourceDef(OutputList &ol,const char *scopeName);
+ virtual void writeInlineCode(OutputList &ol,const char *scopeName);
+ virtual void writeSourceRefs(OutputList &ol,const char *scopeName);
+ virtual void writeSourceReffedBy(OutputList &ol,const char *scopeName);
+ virtual void makePartOfGroup(GroupDef *gd);
+ virtual void writeNavigationPath(OutputList &ol) const;
+ virtual QCString navigationPathAsString() const;
+ virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const;
+ virtual void writeSummaryLinks(OutputList &);
+ virtual QCString pathFragment() const;
+ virtual void writeDocAnchorsToTagFile(FTextStream &);
+ virtual void setLocalName(const QCString name);
+ virtual void addSectionsToIndex();
+ virtual void writeToc(OutputList &ol, const LocalToc &lt);
+ virtual void setCookie(Cookie *cookie);
+ virtual Cookie *cookie() const;
+
+ protected:
+
+ DefinitionImpl(const DefinitionImpl &d);
+
+ private:
+ static void addToMap(const char *name,Definition *d);
+ static void removeFromMap(Definition *d);
+
+ virtual void _setSymbolName(const QCString &name);
+ virtual QCString _symbolName() const ;
+
+ int _getXRefListId(const char *listName) const;
+ void _writeSourceRefList(OutputList &ol,const char *scopeName,
+ const QCString &text,MemberSDict *members,bool);
+ void _setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ void _setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace,bool atTop);
+ void _setInbodyDocumentation(const char *d,const char *docFile,int docLine);
+ bool _docsAlreadyAdded(const QCString &doc,QCString &sigList);
+
+ // PIMPL idiom
+ class IMPL;
+ IMPL *m_impl; // internal structure holding all private data
+};
+
+
+#endif
diff --git a/src/diagram.cpp b/src/diagram.cpp
index 83e42b3..808191e 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -261,7 +261,7 @@ static void writeMapArea(FTextStream &t,ClassDef *cd,QCString relPath,
t << "<area ";
if (!ref.isEmpty())
{
- t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
+ t << externalLinkTarget();
}
t << "href=\"";
t << externalRef(relPath,ref,TRUE);
@@ -1020,7 +1020,7 @@ void clearVisitFlags()
ClassDef *cd;
for (;(cd=cli.current());++cli)
{
- cd->visited=FALSE;
+ cd->setVisited(FALSE);
}
}
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 7294e4f..ae3a6a3 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -12,13 +12,85 @@
#include "ftextstream.h"
#include "config.h"
#include "docparser.h"
+#include "definitionimpl.h"
+
+//----------------------------------------------------------------------
+
+class DirDefImpl : public DefinitionImpl, public DirDef
+{
+ public:
+ DirDefImpl(const char *path);
+ virtual ~DirDefImpl();
+
+ virtual DefType definitionType() const { return TypeDir; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual QCString displayName(bool=TRUE) const { return m_dispName; }
+ virtual const QCString &shortName() const { return m_shortName; }
+ virtual void addSubDir(DirDef *subdir);
+ virtual FileList * getFiles() const { return m_fileList; }
+ virtual void addFile(FileDef *fd);
+ virtual const DirList &subDirs() const { return m_subdirs; }
+ virtual bool isCluster() const { return m_subdirs.count()>0; }
+ virtual int level() const { return m_level; }
+ virtual DirDef *parent() const { return m_parent; }
+ virtual int dirCount() const { return m_dirCount; }
+ virtual const QDict<UsedDir> *usedDirs() const { return m_usedDirs; }
+ virtual bool isParentOf(DirDef *dir) const;
+ virtual bool depGraphIsTrivial() const;
+ virtual QCString shortTitle() const;
+ virtual bool hasDetailedDescription() const;
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeTagFile(FTextStream &t);
+ virtual void setDiskName(const QCString &name) { m_diskName = name; }
+ virtual void sort();
+ virtual void setParent(DirDef *parent);
+ virtual void setLevel();
+ virtual void addUsesDependency(DirDef *usedDir,FileDef *srcFd,
+ FileDef *dstFd,bool inherited);
+ virtual void computeDependencies();
+
+ public:
+ static DirDef *mergeDirectoryInTree(const QCString &path);
+
+ private:
+
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeDirectoryGraph(OutputList &ol);
+ void writeSubDirList(OutputList &ol);
+ void writeFileList(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+
+ static DirDef *createNewDir(const char *path);
+ static bool matchPath(const QCString &path,QStrList &l);
+
+ DirList m_subdirs;
+ QCString m_dispName;
+ QCString m_shortName;
+ QCString m_diskName;
+ FileList *m_fileList; // list of files in the group
+ int m_dirCount;
+ int m_level;
+ DirDef *m_parent;
+ QDict<UsedDir> *m_usedDirs;
+};
+
+DirDef *createDirDef(const char *path)
+{
+ return new DirDefImpl(path);
+}
+
//----------------------------------------------------------------------
// method implementation
static int g_dirCount=0;
-DirDef::DirDef(const char *path) : Definition(path,1,1,path), visited(FALSE)
+DirDefImpl::DirDefImpl(const char *path) : DefinitionImpl(path,1,1,path)
{
bool fullPathNames = Config_getBool(FULL_PATH_NAMES);
// get display name (stipping the paths mentioned in STRIP_FROM_PATH)
@@ -49,36 +121,41 @@ DirDef::DirDef(const char *path) : Definition(path,1,1,path), visited(FALSE)
m_parent=0;
}
-DirDef::~DirDef()
+DirDefImpl::~DirDefImpl()
{
delete m_fileList;
delete m_usedDirs;
}
-bool DirDef::isLinkableInProject() const
+bool DirDefImpl::isLinkableInProject() const
{
return !isReference();
}
-bool DirDef::isLinkable() const
+bool DirDefImpl::isLinkable() const
{
return isReference() || isLinkableInProject();
}
-void DirDef::addSubDir(DirDef *subdir)
+void DirDefImpl::addSubDir(DirDef *subdir)
{
m_subdirs.append(subdir);
subdir->setOuterScope(this);
- subdir->m_parent=this;
+ subdir->setParent(this);
+}
+
+void DirDefImpl::setParent(DirDef *p)
+{
+ m_parent=p;
}
-void DirDef::addFile(FileDef *fd)
+void DirDefImpl::addFile(FileDef *fd)
{
m_fileList->append(fd);
fd->setDirDef(this);
}
-void DirDef::sort()
+void DirDefImpl::sort()
{
m_subdirs.sort();
m_fileList->sort();
@@ -116,14 +193,14 @@ static QCString encodeDirName(const QCString &anchor)
// return result;
}
-QCString DirDef::getOutputFileBase() const
+QCString DirDefImpl::getOutputFileBase() const
{
- //printf("DirDef::getOutputFileBase() %s->dir_%s\n",
+ //printf("DirDefImpl::getOutputFileBase() %s->dir_%s\n",
// m_diskName.data(),encodeDirName(m_diskName).data());
return "dir_"+encodeDirName(m_diskName);
}
-void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
+void DirDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) ||
!documentation().isEmpty())
@@ -168,7 +245,7 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
}
}
-void DirDef::writeBriefDescription(OutputList &ol)
+void DirDefImpl::writeBriefDescription(OutputList &ol)
{
if (hasBriefDescription())
{
@@ -205,7 +282,7 @@ void DirDef::writeBriefDescription(OutputList &ol)
ol.writeSynopsis();
}
-void DirDef::writeDirectoryGraph(OutputList &ol)
+void DirDefImpl::writeDirectoryGraph(OutputList &ol)
{
// write graph dependency graph
if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT))
@@ -225,7 +302,7 @@ void DirDef::writeDirectoryGraph(OutputList &ol)
}
}
-void DirDef::writeSubDirList(OutputList &ol)
+void DirDefImpl::writeSubDirList(OutputList &ol)
{
int numSubdirs = 0;
QListIterator<DirDef> it(m_subdirs);
@@ -275,7 +352,7 @@ void DirDef::writeSubDirList(OutputList &ol)
}
}
-void DirDef::writeFileList(OutputList &ol)
+void DirDefImpl::writeFileList(OutputList &ol)
{
int numFiles = 0;
QListIterator<FileDef> it(*m_fileList);
@@ -347,28 +424,28 @@ void DirDef::writeFileList(OutputList &ol)
}
}
-void DirDef::startMemberDeclarations(OutputList &ol)
+void DirDefImpl::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
-void DirDef::endMemberDeclarations(OutputList &ol)
+void DirDefImpl::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
-QCString DirDef::shortTitle() const
+QCString DirDefImpl::shortTitle() const
{
return theTranslator->trDirReference(m_shortName);
}
-bool DirDef::hasDetailedDescription() const
+bool DirDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
return (!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty();
}
-void DirDef::writeTagFile(FTextStream &tagFile)
+void DirDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <compound kind=\"dir\">" << endl;
tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl;
@@ -415,7 +492,7 @@ void DirDef::writeTagFile(FTextStream &tagFile)
tagFile << " </compound>" << endl;
}
-void DirDef::writeDocumentation(OutputList &ol)
+void DirDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
ol.pushGeneratorState();
@@ -529,7 +606,7 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState();
}
-void DirDef::setLevel()
+void DirDefImpl::setLevel()
{
if (m_level==-1) // level not set before
{
@@ -549,7 +626,7 @@ void DirDef::setLevel()
/** Add as "uses" dependency between \a this dir and \a dir,
* that was caused by a dependency on file \a fd.
*/
-void DirDef::addUsesDependency(DirDef *dir,FileDef *srcFd,
+void DirDefImpl::addUsesDependency(DirDef *dir,FileDef *srcFd,
FileDef *dstFd,bool inherited)
{
if (this==dir) return; // do not add self-dependencies
@@ -603,7 +680,7 @@ void DirDef::addUsesDependency(DirDef *dir,FileDef *srcFd,
/** Computes the dependencies between directories
*/
-void DirDef::computeDependencies()
+void DirDefImpl::computeDependencies()
{
FileList *fl = m_fileList;
if (fl)
@@ -649,7 +726,7 @@ void DirDef::computeDependencies()
}
}
-bool DirDef::isParentOf(DirDef *dir) const
+bool DirDefImpl::isParentOf(DirDef *dir) const
{
if (dir->parent()==this) // this is a parent of dir
return TRUE;
@@ -659,7 +736,7 @@ bool DirDef::isParentOf(DirDef *dir) const
return FALSE;
}
-bool DirDef::depGraphIsTrivial() const
+bool DirDefImpl::depGraphIsTrivial() const
{
return m_usedDirs->count()==0;
}
@@ -704,21 +781,21 @@ FilePair *UsedDir::findFilePair(const char *name)
return n.isEmpty() ? 0 : m_filePairs.find(n);
}
-DirDef *DirDef::createNewDir(const char *path)
+DirDef *DirDefImpl::createNewDir(const char *path)
{
ASSERT(path!=0);
DirDef *dir = Doxygen::directories->find(path);
if (dir==0) // new dir
{
//printf("Adding new dir %s\n",path);
- dir = new DirDef(path);
+ dir = createDirDef(path);
//printf("createNewDir %s short=%s\n",path,dir->shortName().data());
Doxygen::directories->append(path,dir);
}
return dir;
}
-bool DirDef::matchPath(const QCString &path,QStrList &l)
+bool DirDefImpl::matchPath(const QCString &path,QStrList &l)
{
const char *s=l.first();
while (s)
@@ -736,9 +813,9 @@ bool DirDef::matchPath(const QCString &path,QStrList &l)
/*! strip part of \a path if it matches
* one of the paths in the Config_getList(STRIP_FROM_PATH) list
*/
-DirDef *DirDef::mergeDirectoryInTree(const QCString &path)
+DirDef *DirDefImpl::mergeDirectoryInTree(const QCString &path)
{
- //printf("DirDef::mergeDirectoryInTree(%s)\n",path.data());
+ //printf("DirDefImpl::mergeDirectoryInTree(%s)\n",path.data());
int p=0,i=0;
DirDef *dir=0;
while ((i=path.find('/',p))!=-1)
@@ -941,7 +1018,7 @@ void buildDirectories()
DirDef *dir;
if ((dir=Doxygen::directories->find(fd->getPath()))==0) // new directory
{
- dir = DirDef::mergeDirectoryInTree(fd->getPath());
+ dir = DirDefImpl::mergeDirectoryInTree(fd->getPath());
}
if (dir && !fd->isDocumentationFile()) dir->addFile(fd);
}
@@ -967,7 +1044,7 @@ void buildDirectories()
if (parent)
{
parent->addSubDir(dir);
- //printf("DirDef::addSubdir(): Adding subdir\n%s to\n%s\n",
+ //printf("DirDefImpl::addSubdir(): Adding subdir\n%s to\n%s\n",
// dir->displayName().data(), parent->displayName().data());
}
}
diff --git a/src/dirdef.h b/src/dirdef.h
index 2fb04f5..2bca93e 100644
--- a/src/dirdef.h
+++ b/src/dirdef.h
@@ -41,70 +41,44 @@ class DirList : public QList<DirDef>
};
/** A model of a directory symbol. */
-class DirDef : public Definition
+class DirDef : virtual public Definition
{
public:
- DirDef(const char *path);
- virtual ~DirDef();
+ virtual ~DirDef() {}
// accessors
- DefType definitionType() const { return TypeDir; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- bool isLinkableInProject() const;
- bool isLinkable() const;
- QCString displayName(bool=TRUE) const { return m_dispName; }
- const QCString &shortName() const { return m_shortName; }
- void addSubDir(DirDef *subdir);
- FileList * getFiles() const { return m_fileList; }
- void addFile(FileDef *fd);
- const DirList &subDirs() const { return m_subdirs; }
- bool isCluster() const { return m_subdirs.count()>0; }
- int level() const { return m_level; }
- DirDef *parent() const { return m_parent; }
- int dirCount() const { return m_dirCount; }
- const QDict<UsedDir> *usedDirs() const { return m_usedDirs; }
- bool isParentOf(DirDef *dir) const;
- bool depGraphIsTrivial() const;
- QCString shortTitle() const;
- bool hasDetailedDescription() const;
+ virtual DefType definitionType() const = 0;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual const QCString &shortName() const = 0;
+ virtual void addSubDir(DirDef *subdir) = 0;
+ virtual FileList * getFiles() const = 0;
+ virtual void addFile(FileDef *fd) = 0;
+ virtual const DirList &subDirs() const = 0;
+ virtual bool isCluster() const = 0;
+ virtual int level() const = 0;
+ virtual DirDef *parent() const = 0;
+ virtual int dirCount() const = 0;
+ virtual const QDict<UsedDir> *usedDirs() const = 0;
+ virtual bool isParentOf(DirDef *dir) const = 0;
+ virtual bool depGraphIsTrivial() const = 0;
+ virtual QCString shortTitle() const = 0;
+ virtual bool hasDetailedDescription() const = 0;
// generate output
- void writeDocumentation(OutputList &ol);
- void writeTagFile(FTextStream &t);
-
- static DirDef *mergeDirectoryInTree(const QCString &path);
- bool visited;
- void setDiskName(const QCString &name) { m_diskName = name; }
- void sort();
-
- private:
- friend void computeDirDependencies();
-
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void writeDirectoryGraph(OutputList &ol);
- void writeSubDirList(OutputList &ol);
- void writeFileList(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
-
- void setLevel();
- static DirDef *createNewDir(const char *path);
- static bool matchPath(const QCString &path,QStrList &l);
- void addUsesDependency(DirDef *usedDir,FileDef *srcFd,
- FileDef *dstFd,bool inherited);
- void computeDependencies();
-
- DirList m_subdirs;
- QCString m_dispName;
- QCString m_shortName;
- QCString m_diskName;
- FileList *m_fileList; // list of files in the group
- int m_dirCount;
- int m_level;
- DirDef *m_parent;
- QDict<UsedDir> *m_usedDirs;
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeTagFile(FTextStream &t) = 0;
+
+ virtual void setDiskName(const QCString &name) = 0;
+ virtual void sort() = 0;
+ virtual void setParent(DirDef *parent) = 0;
+ virtual void setLevel() = 0;
+ virtual void addUsesDependency(DirDef *usedDir,FileDef *srcFd,
+ FileDef *dstFd,bool inherited) = 0;
+ virtual void computeDependencies() = 0;
};
/** Class representing a pair of FileDef objects */
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index 011ef12..adf36b0 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -153,7 +153,7 @@ void DocbookCodeGenerator::writeCodeLink(const char *ref,const char *file,
{
Docbook_DB(("(writeCodeLink)\n"));
writeDocbookLink(m_t,ref,file,anchor,name,tooltip);
- m_col+=strlen(name);
+ m_col+=(int)strlen(name);
}
void DocbookCodeGenerator::writeCodeLinkLine(const char *ref,const char *file,
const char *anchor,const char *name,
@@ -164,7 +164,7 @@ void DocbookCodeGenerator::writeCodeLinkLine(const char *ref,const char *file,
m_t << "_1l";
writeDocbookString(m_t,name);
m_t << "\"/>";
- m_col+=strlen(name);
+ m_col+=(int)strlen(name);
}
void DocbookCodeGenerator::writeTooltip(const char *, const DocLinkInfo &, const char *,
const char *, const SourceLinkInfo &, const SourceLinkInfo &
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index 3988390..64425c6 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -386,13 +386,14 @@ DB_VIS_C
{
m_t << "<literallayout><computeroutput>";
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
- inc->exampleFile(), &fd);
+ inc->exampleFile(), fd);
+ delete fd;
m_t << "</computeroutput></literallayout>";
}
break;
@@ -407,9 +408,8 @@ DB_VIS_C
m_t << "</computeroutput></literallayout>";
break;
case DocInclude::DontInclude:
- break;
+ case DocInclude::DontIncWithLines:
case DocInclude::HtmlInclude:
- break;
case DocInclude::LatexInclude:
break;
case DocInclude::VerbInclude:
@@ -432,7 +432,7 @@ DB_VIS_C
case DocInclude::SnipWithLines:
{
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "<literallayout><computeroutput>";
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
@@ -441,13 +441,14 @@ DB_VIS_C
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
m_t << "</computeroutput></literallayout>";
}
break;
@@ -477,10 +478,25 @@ DB_VIS_C
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),
op->text(),langExt,op->isExample(),
- op->exampleFile());
+ op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
@@ -767,15 +783,13 @@ DB_VIS_C
}
break;
case DocSimpleSect::User:
+ case DocSimpleSect::Rcs:
+ case DocSimpleSect::Unknown:
if (s->hasTitle())
m_t << "<formalpara>" << endl;
else
m_t << "<para>" << endl;
break;
- case DocSimpleSect::Rcs:
- case DocSimpleSect::Unknown:
- m_t << "<para>" << endl;
- break;
}
}
@@ -785,11 +799,9 @@ DB_VIS_C
if (m_hide) return;
switch(s->type())
{
+ case DocSimpleSect::User:
case DocSimpleSect::Rcs:
case DocSimpleSect::Unknown:
- m_t << "</para>" << endl;
- break;
- case DocSimpleSect::User:
if (s->hasTitle())
m_t << "</formalpara>" << endl;
else
@@ -955,7 +967,7 @@ DB_VIS_C
if (m_hide) return;
m_t << "<informaltable frame=\"all\">" << endl;
m_t << " <tgroup cols=\"" << t->numColumns() << "\" align=\"left\" colsep=\"1\" rowsep=\"1\">" << endl;
- for (int i = 0; i <t->numColumns(); i++)
+ for (uint i = 0; i <t->numColumns(); i++)
{
// do something with colwidth based of cell width specification (be aware of possible colspan in the header)?
m_t << " <colspec colname='c" << i+1 << "'/>\n";
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 20ee1f0..1c8479b 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -112,6 +112,8 @@ static QCString g_includeFileName;
static QCString g_includeFileText;
static uint g_includeFileOffset;
static uint g_includeFileLength;
+static uint g_includeFileLine;
+static bool g_includeFileShowLineNo;
/** Parser's context to store all global variables.
@@ -143,6 +145,8 @@ struct DocParserContext
QCString includeFileText;
uint includeFileOffset;
uint includeFileLength;
+ uint includeFileLine;
+ bool includeFileLineNo;
TokenInfo *token;
};
@@ -190,6 +194,8 @@ static void docParserPushContext(bool saveParamInfo=TRUE)
ctx->includeFileText = g_includeFileText;
ctx->includeFileOffset = g_includeFileOffset;
ctx->includeFileLength = g_includeFileLength;
+ ctx->includeFileLine = g_includeFileLine;
+ ctx->includeFileLineNo = g_includeFileShowLineNo;
ctx->token = g_token;
g_token = new TokenInfo;
@@ -228,6 +234,8 @@ static void docParserPopContext(bool keepParamInfo=FALSE)
g_includeFileText = ctx->includeFileText;
g_includeFileOffset = ctx->includeFileOffset;
g_includeFileLength = ctx->includeFileLength;
+ g_includeFileLine = ctx->includeFileLine;
+ g_includeFileShowLineNo = ctx->includeFileLineNo;
delete g_token;
g_token = ctx->token;
@@ -335,11 +343,11 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type, bool
"could not write output image %s",qPrint(outputFile));
}
}
- else
- {
- warn(g_fileName,doctokenizerYYlineno,
- "Prevented to copy file %s onto itself!\n",qPrint(inputFile));
- }
+ //else
+ //{
+ // warn(g_fileName,doctokenizerYYlineno,
+ // "Prevented to copy file %s onto itself!\n",qPrint(inputFile));
+ //}
}
else
{
@@ -616,16 +624,28 @@ static void detectNoDocumentedParams()
g_memberDef->setHasDocumentedParams(TRUE);
}
}
- //printf("Member %s hadDocumentedReturnType()=%d hasReturnCommand=%d\n",
+ //printf("Member %s hasDocumentedReturnType()=%d hasReturnCommand=%d\n",
// g_memberDef->name().data(),g_memberDef->hasDocumentedReturnType(),g_hasReturnCommand);
if (!g_memberDef->hasDocumentedReturnType() && // docs not yet found
g_hasReturnCommand)
{
g_memberDef->setHasDocumentedReturnType(TRUE);
}
+ else if ( // see if return type is documented in a function w/o return type
+ g_hasReturnCommand &&
+ (//returnType.isEmpty() || // empty return type
+ returnType.find("void")!=-1 || // void return type
+ returnType.find("subroutine")!=-1 || // fortran subroutine
+ g_memberDef->isConstructor() || // a constructor
+ g_memberDef->isDestructor() // or destructor
+ )
+ )
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"documented empty return type of %s",g_memberDef->qualifiedName().data());
+ }
else if ( // see if return needs to documented
g_memberDef->hasDocumentedReturnType() ||
- returnType.isEmpty() || // empty return type
+ //returnType.isEmpty() || // empty return type
returnType.find("void")!=-1 || // void return type
returnType.find("subroutine")!=-1 || // fortran subroutine
g_memberDef->isConstructor() || // a constructor
@@ -634,18 +654,6 @@ static void detectNoDocumentedParams()
{
g_memberDef->setHasDocumentedReturnType(TRUE);
}
- else if ( // see if return type is documented in a function w/o return type
- g_memberDef->hasDocumentedReturnType() &&
- (returnType.isEmpty() || // empty return type
- returnType.find("void")!=-1 || // void return type
- returnType.find("subroutine")!=-1 || // fortran subroutine
- g_memberDef->isConstructor() || // a constructor
- g_memberDef->isDestructor() // or destructor
- )
- )
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"documented empty return type");
- }
}
}
@@ -1037,6 +1045,11 @@ static int handleAHref(DocNode *parent,QList<DocNode> &children,const HtmlAttrib
{
if (!opt->value.isEmpty())
{
+ // copy attributes
+ HtmlAttribList attrList = tagHtmlAttribs;
+ // and remove the href attribute
+ bool result = attrList.remove(index);
+ ASSERT(result);
DocAnchor *anc = new DocAnchor(parent,opt->value,TRUE);
children.append(anc);
break; // stop looking for other tag attribs
@@ -1152,7 +1165,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children,bool ignor
}
else if (compound->definitionType()==Definition::TypeGroup)
{
- name=((GroupDef*)compound)->groupTitle();
+ name=(dynamic_cast<GroupDef*>(compound))->groupTitle();
}
children.append(new
DocLinkedWord(parent,name,
@@ -1164,7 +1177,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children,bool ignor
);
}
else if (compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
+ (dynamic_cast<FileDef*>(compound))->generateSourceFile()
) // undocumented file that has source code we can link to
{
children.append(new
@@ -1929,7 +1942,7 @@ DocLinkedWord::DocLinkedWord(DocNode *parent,const QCString &word,
//---------------------------------------------------------------------------
-DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
+DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
{
m_parent = parent;
if (id.isEmpty())
@@ -1999,6 +2012,8 @@ void DocInclude::parse()
DBG(("DocInclude::parse(file=%s,text=%s)\n",qPrint(m_file),qPrint(m_text)));
switch(m_type)
{
+ case DontIncWithLines:
+ // fall through
case IncWithLines:
// fall through
case Include:
@@ -2009,6 +2024,8 @@ void DocInclude::parse()
g_includeFileText = m_text;
g_includeFileOffset = 0;
g_includeFileLength = m_text.length();
+ g_includeFileLine = 0;
+ g_includeFileShowLineNo = (m_type == DontIncWithLines || m_type == IncWithLines);
//printf("g_includeFile=<<%s>>\n",g_includeFileText.data());
break;
case VerbInclude:
@@ -2043,10 +2060,18 @@ void DocInclude::parse()
void DocIncOperator::parse()
{
+ if (g_includeFileName.isEmpty())
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,
+ "No previous '\\include' or \\dontinclude' command for '\\%s' present",
+ typeAsString());
+ }
+
m_includeFileName = g_includeFileName;
const char *p = g_includeFileText;
uint l = g_includeFileLength;
uint o = g_includeFileOffset;
+ uint il = g_includeFileLine;
DBG(("DocIncOperator::parse() text=%s off=%d len=%d\n",qPrint(p),o,l));
uint so = o,bo;
bool nonEmpty = FALSE;
@@ -2058,6 +2083,7 @@ void DocIncOperator::parse()
char c = p[o];
if (c=='\n')
{
+ g_includeFileLine++;
if (nonEmpty) break; // we have a pattern to match
so=o+1; // no pattern, skip empty line
}
@@ -2069,10 +2095,12 @@ void DocIncOperator::parse()
}
if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
{
+ m_line = il;
m_text = g_includeFileText.mid(so,o-so);
DBG(("DocIncOperator::parse() Line: %s\n",qPrint(m_text)));
}
g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
+ m_showLineNo = g_includeFileShowLineNo;
break;
case SkipLine:
while (o<l)
@@ -2083,6 +2111,7 @@ void DocIncOperator::parse()
char c = p[o];
if (c=='\n')
{
+ g_includeFileLine++;
if (nonEmpty) break; // we have a pattern to match
so=o+1; // no pattern, skip empty line
}
@@ -2094,6 +2123,7 @@ void DocIncOperator::parse()
}
if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
{
+ m_line = il;
m_text = g_includeFileText.mid(so,o-so);
DBG(("DocIncOperator::parse() SkipLine: %s\n",qPrint(m_text)));
break;
@@ -2101,6 +2131,7 @@ void DocIncOperator::parse()
o++; // skip new line
}
g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
+ m_showLineNo = g_includeFileShowLineNo;
break;
case Skip:
while (o<l)
@@ -2111,6 +2142,7 @@ void DocIncOperator::parse()
char c = p[o];
if (c=='\n')
{
+ g_includeFileLine++;
if (nonEmpty) break; // we have a pattern to match
so=o+1; // no pattern, skip empty line
}
@@ -2127,6 +2159,7 @@ void DocIncOperator::parse()
o++; // skip new line
}
g_includeFileOffset = so; // set pointer to start of new line
+ m_showLineNo = g_includeFileShowLineNo;
break;
case Until:
bo=o;
@@ -2138,6 +2171,7 @@ void DocIncOperator::parse()
char c = p[o];
if (c=='\n')
{
+ g_includeFileLine++;
if (nonEmpty) break; // we have a pattern to match
so=o+1; // no pattern, skip empty line
}
@@ -2149,6 +2183,7 @@ void DocIncOperator::parse()
}
if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
{
+ m_line = il;
m_text = g_includeFileText.mid(bo,o-bo);
DBG(("DocIncOperator::parse() Until: %s\n",qPrint(m_text)));
break;
@@ -2156,6 +2191,7 @@ void DocIncOperator::parse()
o++; // skip new line
}
g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
+ m_showLineNo = g_includeFileShowLineNo;
break;
}
}
@@ -2564,16 +2600,16 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
{
if (anchor.isEmpty() && /* compound link */
compound->definitionType()==Definition::TypeGroup && /* is group */
- ((GroupDef *)compound)->groupTitle() /* with title */
+ (dynamic_cast<GroupDef *>(compound))->groupTitle() /* with title */
)
{
- m_text=((GroupDef *)compound)->groupTitle(); // use group's title as link
+ m_text=(dynamic_cast<GroupDef *>(compound))->groupTitle(); // use group's title as link
}
else if (compound->definitionType()==Definition::TypeMember &&
- ((MemberDef*)compound)->isObjCMethod())
+ (dynamic_cast<MemberDef*>(compound))->isObjCMethod())
{
// Objective C Method
- MemberDef *member = (MemberDef*)compound;
+ MemberDef *member = dynamic_cast<MemberDef*>(compound);
bool localLink = g_memberDef ? member->getClassDef()==g_memberDef->getClassDef() : FALSE;
m_text = member->objCMethodName(localLink,g_inSeeBlock);
}
@@ -2585,7 +2621,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
return;
}
else if (compound && compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
+ (dynamic_cast<FileDef*>(compound))->generateSourceFile()
) // undocumented file that has source code we can link to
{
m_file = compound->getSourceFileBase();
@@ -2724,8 +2760,8 @@ DocLink::DocLink(DocNode *parent,const QCString &target)
m_file = compound->getOutputFileBase();
m_ref = compound->getReference();
}
- else if (compound && compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
+ else if (compound && compound->definitionType()==Definition::TypeFile &&
+ (dynamic_cast<FileDef*>(compound))->generateSourceFile()
) // undocumented file that has source code we can link to
{
m_file = compound->getSourceFileBase();
@@ -3073,7 +3109,7 @@ int DocHtmlHeader::parse()
}
else if (tagId==HTML_BR)
{
- DocLineBreak *lb = new DocLineBreak(this);
+ DocLineBreak *lb = new DocLineBreak(this,g_token->attribs);
m_children.append(lb);
}
else
@@ -5264,6 +5300,10 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
{
t = DocInclude::SnipWithLines;
}
+ else if (t==DocInclude::DontInclude && optList.contains("lineno"))
+ {
+ t = DocInclude::DontIncWithLines;
+ }
else if (t==DocInclude::Include && optList.contains("doc"))
{
t = DocInclude::IncludeDoc;
@@ -6080,13 +6120,13 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
break;
case HTML_BR:
{
- DocLineBreak *lb = new DocLineBreak(this);
+ DocLineBreak *lb = new DocLineBreak(this,tagHtmlAttribs);
m_children.append(lb);
}
break;
case HTML_HR:
{
- DocHorRuler *hr = new DocHorRuler(this);
+ DocHorRuler *hr = new DocHorRuler(this,tagHtmlAttribs);
m_children.append(hr);
}
break;
@@ -6861,6 +6901,11 @@ endparagraph:
DocNode *n = g_nodeStack.pop();
ASSERT(n==this);
DBG(("DocPara::parse() end retval=%x\n",retval));
+ if (!g_token->endTag && n->kind()==DocNode::Kind_Para &&
+ retval==TK_NEWPARA && g_token->name.lower() == "p")
+ {
+ ((DocPara *)n)->setAttribs(g_token->attribs);
+ }
INTERNAL_ASSERT(retval==0 || retval==TK_NEWPARA || retval==TK_LISTITEM ||
retval==TK_ENDLIST || retval>RetVal_OK
);
@@ -7128,7 +7173,7 @@ void DocRoot::parse()
DocPara *par = new DocPara(this);
if (isFirst) { par->markFirst(); isFirst=FALSE; }
retval=par->parse();
- if (!par->isEmpty())
+ if (!par->isEmpty() || par->attribs().count()>0)
{
m_children.append(par);
lastPar=par;
@@ -7536,12 +7581,12 @@ DocRoot *validatingParseDoc(const char *fileName,int startLine,
}
else if (ctx && ctx->definitionType()==Definition::TypePage)
{
- Definition *scope = ((PageDef*)ctx)->getPageScope();
+ Definition *scope = (dynamic_cast<PageDef*>(ctx))->getPageScope();
if (scope && scope!=Doxygen::globalScope) g_context = scope->name();
}
else if (ctx && ctx->definitionType()==Definition::TypeGroup)
{
- Definition *scope = ((GroupDef*)ctx)->getGroupScope();
+ Definition *scope = (dynamic_cast<GroupDef*>(ctx))->getGroupScope();
if (scope && scope!=Doxygen::globalScope) g_context = scope->name();
}
else
diff --git a/src/docparser.h b/src/docparser.h
index 5d2cc89..15180f9 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -300,22 +300,31 @@ class DocURL : public DocNode
class DocLineBreak : public DocNode
{
public:
- DocLineBreak(DocNode *parent) { m_parent=parent; }
+ DocLineBreak(DocNode *parent) { m_parent = parent; }
+ DocLineBreak(DocNode *parent,const HtmlAttribList &attribs)
+ : m_attribs(attribs) { m_parent = parent; }
Kind kind() const { return Kind_LineBreak; }
void accept(DocVisitor *v) { v->visit(this); }
+ const HtmlAttribList &attribs() const { return m_attribs; }
+
private:
+ HtmlAttribList m_attribs;
};
/** Node representing a horizontal ruler */
class DocHorRuler : public DocNode
{
public:
- DocHorRuler(DocNode *parent) { m_parent = parent; }
+ DocHorRuler(DocNode *parent,const HtmlAttribList &attribs)
+ : m_attribs(attribs) { m_parent = parent; }
Kind kind() const { return Kind_HorRuler; }
void accept(DocVisitor *v) { v->visit(this); }
+ const HtmlAttribList &attribs() const { return m_attribs; }
+
private:
+ HtmlAttribList m_attribs;
};
/** Node representing an anchor */
@@ -328,9 +337,12 @@ class DocAnchor : public DocNode
QCString file() const { return m_file; }
void accept(DocVisitor *v) { v->visit(this); }
+ const HtmlAttribList &attribs() const { return m_attribs; }
+
private:
QCString m_anchor;
QCString m_file;
+ HtmlAttribList m_attribs;
};
/** Node representing a citation of some bibliographic reference */
@@ -551,7 +563,8 @@ class DocInclude : public DocNode
{
public:
enum Type { Include, DontInclude, VerbInclude, HtmlInclude, LatexInclude,
- IncWithLines, Snippet , IncludeDoc, SnippetDoc, SnipWithLines};
+ IncWithLines, Snippet , IncludeDoc, SnippetDoc, SnipWithLines,
+ DontIncWithLines};
DocInclude(DocNode *parent,const QCString &file,
const QCString context, Type t,
bool isExample,const QCString exampleFile,
@@ -595,11 +608,24 @@ class DocIncOperator : public DocNode
enum Type { Line, SkipLine, Skip, Until };
DocIncOperator(DocNode *parent,Type t,const QCString &pat,
const QCString &context,bool isExample,const QCString &exampleFile) :
- m_type(t), m_pattern(pat), m_context(context),
+ m_type(t), m_pattern(pat), m_context(context),
m_isFirst(FALSE), m_isLast(FALSE),
m_isExample(isExample), m_exampleFile(exampleFile) { m_parent = parent; }
Kind kind() const { return Kind_IncOperator; }
Type type() const { return m_type; }
+ const char *typeAsString() const
+ {
+ switch(m_type)
+ {
+ case Line: return "line";
+ case SkipLine: return "skipline";
+ case Skip: return "skip";
+ case Until: return "until";
+ }
+ return "";
+ }
+ int line() const { return m_line; }
+ bool showLineNo() const { return m_showLineNo; }
QCString text() const { return m_text; }
QCString pattern() const { return m_pattern; }
QCString context() const { return m_context; }
@@ -615,6 +641,8 @@ class DocIncOperator : public DocNode
private:
Type m_type;
+ int m_line;
+ bool m_showLineNo;
QCString m_text;
QCString m_pattern;
QCString m_context;
@@ -1199,11 +1227,14 @@ class DocPara : public CompAccept<DocPara>
int handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level);
bool injectToken(int tok,const QCString &tokText);
+ const HtmlAttribList &attribs() const { return m_attribs; }
+ void setAttribs(const HtmlAttribList &attribs) { m_attribs = attribs; }
private:
QCString m_sectionId;
bool m_isFirst;
bool m_isLast;
+ HtmlAttribList m_attribs;
};
/** Node representing a parameter list. */
diff --git a/src/docsets.cpp b/src/docsets.cpp
index 1327d80..1d79c9d 100644
--- a/src/docsets.cpp
+++ b/src/docsets.cpp
@@ -432,15 +432,15 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md,
{
if (fd==0 && context->definitionType()==Definition::TypeFile)
{
- fd = (FileDef*)context;
+ fd = dynamic_cast<FileDef*>(context);
}
if (cd==0 && context->definitionType()==Definition::TypeClass)
{
- cd = (ClassDef*)context;
+ cd = dynamic_cast<ClassDef*>(context);
}
if (nd==0 && context->definitionType()==Definition::TypeNamespace)
{
- nd = (NamespaceDef*)context;
+ nd = dynamic_cast<NamespaceDef*>(context);
}
if (fd)
{
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 90f9846..5cf5f02 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -1227,7 +1227,7 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
/* State for the pass used to find the anchors and sections */
<St_Sections>[^\n@\\<]+
-<St_Sections>"@@"|"\\\\"|"@<"|"\\<"
+<St_Sections>{CMD}("<"|{CMD})
<St_Sections>"<"{CAPTION}({WS}+{ATTRIB})*">" {
QCString tag=yytext;
int s=tag.find("id=");
diff --git a/src/dot.cpp b/src/dot.cpp
index 07a1a43..40a7210 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -336,7 +336,6 @@ static QCString replaceRef(const QCString &buf,const QCString relPath,
{
result = externalLinkTarget();
if (result != "") setTarget = TRUE;
- result += externalRef(relPath,ref,FALSE);
}
result+= href+"=\"";
result+=externalRef(relPath,ref,TRUE);
@@ -721,7 +720,7 @@ static bool insertMapFile(FTextStream &out,const QCString &mapFile,
{
QGString tmpstr;
FTextStream tmpout(&tmpstr);
- convertMapFile(tmpout,mapFile,relPath);
+ convertMapFile(tmpout,mapFile,relPath,TRUE);
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapLabel << "\" id=\"" << mapLabel << "\">" << endl;
@@ -2531,10 +2530,10 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
//printf(" inserting %s (%p)\n",bClass->name().data(),bn);
m_usedNodes->insert(bClass->name(),bn); // add node to the used list
}
- if (!bClass->visited && !hideSuper && bClass->subClasses())
+ if (!bClass->isVisited() && !hideSuper && bClass->subClasses())
{
- bool wasVisited=bClass->visited;
- bClass->visited=TRUE;
+ bool wasVisited=bClass->isVisited();
+ bClass->setVisited(TRUE);
addHierarchy(bn,bClass,wasVisited);
}
}
@@ -2584,10 +2583,10 @@ void DotGfxHierarchyTable::addClassList(ClassSDict *cl)
//m_usedNodes->clear();
m_usedNodes->insert(cd->name(),n);
m_rootNodes->insert(0,n);
- if (!cd->visited && cd->subClasses())
+ if (!cd->isVisited() && cd->subClasses())
{
- addHierarchy(n,cd,cd->visited);
- cd->visited=TRUE;
+ addHierarchy(n,cd,cd->isVisited());
+ cd->setVisited(TRUE);
}
}
}
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 08d3bc7..99878a5 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -38,7 +38,6 @@
#include "scanner.h"
#include "entry.h"
#include "index.h"
-#include "logos.h"
#include "message.h"
#include "config.h"
#include "util.h"
@@ -80,14 +79,11 @@
#include "tclscanner.h"
#include "code.h"
#include "objcache.h"
-#include "store.h"
-#include "marshal.h"
#include "portable.h"
#include "vhdljjparser.h"
#include "vhdldocgen.h"
#include "eclipsehelp.h"
#include "cite.h"
-#include "filestorage.h"
#include "markdown.h"
#include "arguments.h"
#include "memberlist.h"
@@ -111,7 +107,7 @@ extern void initResources();
#define RECURSE_ENTRYTREE(func,var) \
do { if (var->children()) { \
- EntryNavListIterator eli(*var->children()); \
+ EntryListIterator eli(*var->children()); \
for (;eli.current();++eli) func(eli.current()); \
} } while(0)
@@ -166,7 +162,7 @@ SDict<DirRelation> Doxygen::dirRelations(257);
ParserManager *Doxygen::parserManager = 0;
QCString Doxygen::htmlFileExtension;
bool Doxygen::suppressDocWarnings = FALSE;
-Store *Doxygen::symbolStorage;
+//Store *Doxygen::symbolStorage;
QCString Doxygen::objDBFileName;
QCString Doxygen::entryDBFileName;
QCString Doxygen::filterDBFileName;
@@ -180,12 +176,11 @@ bool Doxygen::markdownSupport = TRUE;
GenericsSDict *Doxygen::genericsDict;
// locally accessible globals
-static QDict<EntryNav> g_classEntries(1009);
+static QDict<Entry> g_classEntries(1009);
static StringList g_inputFiles;
static QDict<void> g_compoundKeywordDict(7); // keywords recognised as compounds
static OutputList *g_outputList = 0; // list of output generating objects
static QDict<FileDef> g_usingDeclarations(1009); // used classes
-static FileStorage *g_storage = 0;
static bool g_successfulRun = FALSE;
static bool g_dumpSymbolMap = FALSE;
static bool g_useOutputTemplate = FALSE;
@@ -301,9 +296,9 @@ void statistics()
-static void addMemberDocs(EntryNav *rootNav,MemberDef *md, const char *funcDecl,
+static void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
ArgumentList *al,bool over_load,NamespaceSDict *nl=0);
-static void findMember(EntryNav *rootNav,
+static void findMember(Entry *root,
QCString funcDecl,
bool overloaded,
bool isFunc
@@ -317,7 +312,7 @@ enum FindBaseClassRelation_Mode
};
static bool findClassRelation(
- EntryNav *rootNav,
+ Entry *root,
Definition *context,
ClassDef *cd,
BaseInfo *bi,
@@ -424,7 +419,7 @@ static STLInfo g_stlinfo[] =
{ 0, 0, 0, 0, 0, 0, 0, FALSE, FALSE }
};
-static void addSTLMember(EntryNav *rootNav,const char *type,const char *name)
+static void addSTLMember(Entry *root,const char *type,const char *name)
{
Entry *memEntry = new Entry;
memEntry->name = name;
@@ -435,13 +430,13 @@ static void addSTLMember(EntryNav *rootNav,const char *type,const char *name)
memEntry->hidden = FALSE;
memEntry->artificial = TRUE;
//memEntry->parent = root;
- //root->addSubEntry(memEntry);
- EntryNav *memEntryNav = new EntryNav(rootNav,memEntry);
- memEntryNav->setEntry(memEntry);
- rootNav->addChild(memEntryNav);
+ root->addSubEntry(memEntry);
+ //EntryNav *memEntryNav = new EntryNav(root,memEntry);
+ //memEntryNav->setEntry(memEntry);
+ //rootNav->addChild(memEntryNav);
}
-static void addSTLIterator(EntryNav *classEntryNav,const char *name)
+static void addSTLIterator(Entry *classEntry,const char *name)
{
Entry *iteratorClassEntry = new Entry;
iteratorClassEntry->fileName = "[STL]";
@@ -451,13 +446,14 @@ static void addSTLIterator(EntryNav *classEntryNav,const char *name)
iteratorClassEntry->brief = "STL iterator class";
iteratorClassEntry->hidden = FALSE;
iteratorClassEntry->artificial= TRUE;
- EntryNav *iteratorClassEntryNav = new EntryNav(classEntryNav,iteratorClassEntry);
- iteratorClassEntryNav->setEntry(iteratorClassEntry);
- classEntryNav->addChild(iteratorClassEntryNav);
+ classEntry->addSubEntry(iteratorClassEntry);
+ //EntryNav *iteratorClassEntryNav = new EntryNav(classEntryNav,iteratorClassEntry);
+ //iteratorClassEntryNav->setEntry(iteratorClassEntry);
+ //classEntryNav->addChild(iteratorClassEntryNav);
}
-static void addSTLClasses(EntryNav *rootNav)
+static void addSTLClasses(Entry *root)
{
Entry *namespaceEntry = new Entry;
namespaceEntry->fileName = "[STL]";
@@ -468,10 +464,10 @@ static void addSTLClasses(EntryNav *rootNav)
namespaceEntry->brief = "STL namespace";
namespaceEntry->hidden = FALSE;
namespaceEntry->artificial= TRUE;
- //root->addSubEntry(namespaceEntry);
- EntryNav *namespaceEntryNav = new EntryNav(rootNav,namespaceEntry);
- namespaceEntryNav->setEntry(namespaceEntry);
- rootNav->addChild(namespaceEntryNav);
+ root->addSubEntry(namespaceEntry);
+ //EntryNav *namespaceEntryNav = new EntryNav(rootNav,namespaceEntry);
+ //namespaceEntryNav->setEntry(namespaceEntry);
+ //rootNav->addChild(namespaceEntryNav);
STLInfo *info = g_stlinfo;
while (info->className)
@@ -485,15 +481,14 @@ static void addSTLClasses(EntryNav *rootNav)
classEntry->fileName = "[STL]";
classEntry->startLine = 1;
classEntry->name = fullName;
- //classEntry->parent = namespaceEntry;
classEntry->section = Entry::CLASS_SEC;
classEntry->brief = "STL class";
classEntry->hidden = FALSE;
classEntry->artificial= TRUE;
- //namespaceEntry->addSubEntry(classEntry);
- EntryNav *classEntryNav = new EntryNav(namespaceEntryNav,classEntry);
- classEntryNav->setEntry(classEntry);
- namespaceEntryNav->addChild(classEntryNav);
+ namespaceEntry->addSubEntry(classEntry);
+ //EntryNav *classEntryNav = new EntryNav(namespaceEntryNav,classEntry);
+ //classEntryNav->setEntry(classEntry);
+ //namespaceEntryNav->addChild(classEntryNav);
// add template arguments to class
if (info->templType1)
@@ -517,11 +512,11 @@ static void addSTLClasses(EntryNav *rootNav)
// add member variables
if (info->templName1)
{
- addSTLMember(classEntryNav,info->templType1,info->templName1);
+ addSTLMember(classEntry,info->templType1,info->templName1);
}
if (info->templName2)
{
- addSTLMember(classEntryNav,info->templType2,info->templName2);
+ addSTLMember(classEntry,info->templType2,info->templName2);
}
if (fullName=="std::auto_ptr" || fullName=="std::smart_ptr" || fullName=="std::shared_ptr" ||
fullName=="std::unique_ptr" || fullName=="std::weak_ptr")
@@ -535,9 +530,10 @@ static void addSTLClasses(EntryNav *rootNav)
memEntry->brief = "STL member";
memEntry->hidden = FALSE;
memEntry->artificial = FALSE;
- EntryNav *memEntryNav = new EntryNav(classEntryNav,memEntry);
- memEntryNav->setEntry(memEntry);
- classEntryNav->addChild(memEntryNav);
+ classEntry->addSubEntry(memEntry);
+ //EntryNav *memEntryNav = new EntryNav(classEntryNav,memEntry);
+ //memEntryNav->setEntry(memEntry);
+ //classEntryNav->addChild(memEntryNav);
}
if (info->baseClass1)
{
@@ -550,10 +546,10 @@ static void addSTLClasses(EntryNav *rootNav)
if (info->iterators)
{
// add iterator class
- addSTLIterator(classEntryNav,fullName+"::iterator");
- addSTLIterator(classEntryNav,fullName+"::const_iterator");
- addSTLIterator(classEntryNav,fullName+"::reverse_iterator");
- addSTLIterator(classEntryNav,fullName+"::const_reverse_iterator");
+ addSTLIterator(classEntry,fullName+"::iterator");
+ addSTLIterator(classEntry,fullName+"::const_iterator");
+ addSTLIterator(classEntry,fullName+"::reverse_iterator");
+ addSTLIterator(classEntry,fullName+"::const_reverse_iterator");
}
info++;
}
@@ -564,18 +560,18 @@ static void addSTLClasses(EntryNav *rootNav)
static Definition *findScopeFromQualifiedName(Definition *startScope,const QCString &n,
FileDef *fileScope,TagInfo *tagInfo);
-static void addPageToContext(PageDef *pd,EntryNav *rootNav)
+static void addPageToContext(PageDef *pd,Entry *root)
{
- if (rootNav->parent()) // add the page to it's scope
+ if (root->parent()) // add the page to it's scope
{
- QCString scope = rootNav->parent()->name();
- if (rootNav->parent()->section()==Entry::PACKAGEDOC_SEC)
+ QCString scope = root->parent()->name;
+ if (root->parent()->section==Entry::PACKAGEDOC_SEC)
{
scope=substitute(scope,".","::");
}
scope = stripAnonymousNamespaceScope(scope);
scope+="::"+pd->name();
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,rootNav->tagInfo());
+ Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,root->tagInfo);
if (d)
{
pd->setPageScope(d);
@@ -583,9 +579,8 @@ static void addPageToContext(PageDef *pd,EntryNav *rootNav)
}
}
-static void addRelatedPage(EntryNav *rootNav)
+static void addRelatedPage(Entry *root)
{
- Entry *root = rootNav->entry();
GroupDef *gd=0;
QListIterator<Grouping> gli(*root->groups);
Grouping *g;
@@ -606,7 +601,7 @@ static void addRelatedPage(EntryNav *rootNav)
PageDef *pd = addRelatedPage(root->name,root->args,doc,root->anchors,
root->docFile,root->docLine,
root->sli,
- gd,rootNav->tagInfo(),
+ gd,root->tagInfo,
root->lang
);
if (pd)
@@ -614,20 +609,17 @@ static void addRelatedPage(EntryNav *rootNav)
pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
pd->addSectionsToDefinition(root->anchors);
pd->setLocalToc(root->localToc);
- addPageToContext(pd,rootNav);
+ addPageToContext(pd,root);
}
}
-static void buildGroupListFiltered(EntryNav *rootNav,bool additional, bool includeExternal)
+static void buildGroupListFiltered(Entry *root,bool additional, bool includeExternal)
{
- if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty() &&
- ((!includeExternal && rootNav->tagInfo()==0) ||
- ( includeExternal && rootNav->tagInfo()!=0))
+ if (root->section==Entry::GROUPDOC_SEC && !root->name.isEmpty() &&
+ ((!includeExternal && root->tagInfo==0) ||
+ ( includeExternal && root->tagInfo!=0))
)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
if ((root->groupDocType==Entry::GROUPDOC_NORMAL && !additional) ||
(root->groupDocType!=Entry::GROUPDOC_NORMAL && additional))
{
@@ -656,14 +648,14 @@ static void buildGroupListFiltered(EntryNav *rootNav,bool additional, bool inclu
}
else
{
- if (rootNav->tagInfo())
+ if (root->tagInfo)
{
- gd = new GroupDef(root->fileName,root->startLine,root->name,root->type,rootNav->tagInfo()->fileName);
- gd->setReference(rootNav->tagInfo()->tagName);
+ gd = createGroupDef(root->fileName,root->startLine,root->name,root->type,root->tagInfo->fileName);
+ gd->setReference(root->tagInfo->tagName);
}
else
{
- gd = new GroupDef(root->fileName,root->startLine,root->name,root->type);
+ gd = createGroupDef(root->fileName,root->startLine,root->name,root->type);
}
gd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
// allow empty docs for group
@@ -675,13 +667,11 @@ static void buildGroupListFiltered(EntryNav *rootNav,bool additional, bool inclu
gd->setLanguage(root->lang);
}
}
-
- rootNav->releaseEntry();
}
- if (rootNav->children())
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
+ EntryListIterator eli(*root->children());
+ Entry *e;
for (;(e=eli.current());++eli)
{
buildGroupListFiltered(e,additional,includeExternal);
@@ -689,53 +679,50 @@ static void buildGroupListFiltered(EntryNav *rootNav,bool additional, bool inclu
}
}
-static void buildGroupList(EntryNav *rootNav)
+static void buildGroupList(Entry *root)
{
// --- first process only local groups
// first process the @defgroups blocks
- buildGroupListFiltered(rootNav,FALSE,FALSE);
+ buildGroupListFiltered(root,FALSE,FALSE);
// then process the @addtogroup, @weakgroup blocks
- buildGroupListFiltered(rootNav,TRUE,FALSE);
+ buildGroupListFiltered(root,TRUE,FALSE);
// --- then also process external groups
// first process the @defgroups blocks
- buildGroupListFiltered(rootNav,FALSE,TRUE);
+ buildGroupListFiltered(root,FALSE,TRUE);
// then process the @addtogroup, @weakgroup blocks
- buildGroupListFiltered(rootNav,TRUE,TRUE);
+ buildGroupListFiltered(root,TRUE,TRUE);
}
-static void findGroupScope(EntryNav *rootNav)
+static void findGroupScope(Entry *root)
{
- if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty() &&
- rootNav->parent() && !rootNav->parent()->name().isEmpty())
+ if (root->section==Entry::GROUPDOC_SEC && !root->name.isEmpty() &&
+ root->parent() && !root->parent()->name.isEmpty())
{
GroupDef *gd;
- if ((gd=Doxygen::groupSDict->find(rootNav->name())))
+ if ((gd=Doxygen::groupSDict->find(root->name)))
{
- QCString scope = rootNav->parent()->name();
- if (rootNav->parent()->section()==Entry::PACKAGEDOC_SEC)
+ QCString scope = root->parent()->name;
+ if (root->parent()->section==Entry::PACKAGEDOC_SEC)
{
scope=substitute(scope,".","::");
}
scope = stripAnonymousNamespaceScope(scope);
scope+="::"+gd->name();
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,rootNav->tagInfo());
+ Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,root->tagInfo);
if (d)
{
gd->setGroupScope(d);
}
}
}
- RECURSE_ENTRYTREE(findGroupScope,rootNav);
+ RECURSE_ENTRYTREE(findGroupScope,root);
}
-static void organizeSubGroupsFiltered(EntryNav *rootNav,bool additional)
+static void organizeSubGroupsFiltered(Entry *root,bool additional)
{
- if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty())
+ if (root->section==Entry::GROUPDOC_SEC && !root->name.isEmpty())
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
if ((root->groupDocType==Entry::GROUPDOC_NORMAL && !additional) ||
(root->groupDocType!=Entry::GROUPDOC_NORMAL && additional))
{
@@ -746,13 +733,11 @@ static void organizeSubGroupsFiltered(EntryNav *rootNav,bool additional)
addGroupToGroups(root,gd);
}
}
-
- rootNav->releaseEntry();
}
- if (rootNav->children())
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
+ EntryListIterator eli(*root->children());
+ Entry *e;
for (;(e=eli.current());++eli)
{
organizeSubGroupsFiltered(e,additional);
@@ -760,66 +745,48 @@ static void organizeSubGroupsFiltered(EntryNav *rootNav,bool additional)
}
}
-static void organizeSubGroups(EntryNav *rootNav)
+static void organizeSubGroups(Entry *root)
{
//printf("Defining groups\n");
// first process the @defgroups blocks
- organizeSubGroupsFiltered(rootNav,FALSE);
+ organizeSubGroupsFiltered(root,FALSE);
//printf("Additional groups\n");
// then process the @addtogroup, @weakgroup blocks
- organizeSubGroupsFiltered(rootNav,TRUE);
+ organizeSubGroupsFiltered(root,TRUE);
}
//----------------------------------------------------------------------
-static void buildFileList(EntryNav *rootNav)
+static void buildFileList(Entry *root)
{
- if (((rootNav->section()==Entry::FILEDOC_SEC) ||
- ((rootNav->section() & Entry::FILE_MASK) && Config_getBool(EXTRACT_ALL))) &&
- !rootNav->name().isEmpty() && !rootNav->tagInfo() // skip any file coming from tag files
+ if (((root->section==Entry::FILEDOC_SEC) ||
+ ((root->section & Entry::FILE_MASK) && Config_getBool(EXTRACT_ALL))) &&
+ !root->name.isEmpty() && !root->tagInfo // skip any file coming from tag files
)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
bool ambig;
FileDef *fd=findFileDef(Doxygen::inputNameDict,root->name,ambig);
//printf("**************** root->name=%s fd=%p\n",root->name.data(),fd);
if (fd && !ambig)
{
-#if 0
- if ((!root->doc.isEmpty() && !fd->documentation().isEmpty()) ||
- (!root->brief.isEmpty() && !fd->briefDescription().isEmpty()))
+ //printf("Adding documentation!\n");
+ // using FALSE in setDocumentation is small hack to make sure a file
+ // is documented even if a \file command is used without further
+ // documentation
+ fd->setDocumentation(root->doc,root->docFile,root->docLine,FALSE);
+ fd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
+ fd->addSectionsToDefinition(root->anchors);
+ fd->setRefItems(root->sli);
+ QListIterator<Grouping> gli(*root->groups);
+ Grouping *g;
+ for (;(g=gli.current());++gli)
{
- warn(
- root->fileName,root->startLine,
- "file %s already documented. "
- "Skipping documentation.",
- root->name.data()
- );
- }
- else
-#endif
- {
- //printf("Adding documentation!\n");
- // using FALSE in setDocumentation is small hack to make sure a file
- // is documented even if a \file command is used without further
- // documentation
- fd->setDocumentation(root->doc,root->docFile,root->docLine,FALSE);
- fd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- fd->addSectionsToDefinition(root->anchors);
- fd->setRefItems(root->sli);
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ GroupDef *gd=0;
+ if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
{
- GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
- {
- gd->addFile(fd);
- fd->makePartOfGroup(gd);
- //printf("File %s: in group %s\n",fd->name().data(),s->data());
- }
+ gd->addFile(fd);
+ fd->makePartOfGroup(gd);
+ //printf("File %s: in group %s\n",fd->name().data(),s->data());
}
}
}
@@ -843,10 +810,8 @@ static void buildFileList(EntryNav *rootNav)
}
warn(fn,root->startLine,text);
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(buildFileList,rootNav);
+ RECURSE_ENTRYTREE(buildFileList,root);
}
static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
@@ -1035,7 +1000,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,
{
// introduce bogus namespace
//printf("++ adding dummy namespace %s to %s tagInfo=%p\n",nsName.data(),prevScope->name().data(),tagInfo);
- nd=new NamespaceDef(
+ nd=createNamespaceDef(
"[generated]",1,1,fullScope,
tagInfo?tagInfo->tagName:QCString(),
tagInfo?tagInfo->fileName:QCString());
@@ -1242,19 +1207,15 @@ ClassDef::CompoundType convertToCompoundType(int section,uint64 specifier)
}
-static void addClassToContext(EntryNav *rootNav)
+static void addClassToContext(Entry *root)
{
//printf("Loading entry for rootNav=%p name=%s\n",rootNav,rootNav->name().data());
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- //NamespaceDef *nd = 0;
- FileDef *fd = rootNav->fileDef();
+ FileDef *fd = root->fileDef();
QCString scName;
- if (rootNav->parent()->section()&Entry::SCOPE_MASK)
+ if (root->parent()->section&Entry::SCOPE_MASK)
{
- scName=rootNav->parent()->name();
+ scName=root->parent()->name;
}
// name without parent's scope
QCString fullName = root->name;
@@ -1322,7 +1283,7 @@ static void addClassToContext(EntryNav *rootNav)
QCString tagName;
QCString refFileName;
- TagInfo *tagInfo = rootNav->tagInfo();
+ TagInfo *tagInfo = root->tagInfo;
int i;
if (tagInfo)
{
@@ -1348,7 +1309,7 @@ static void addClassToContext(EntryNav *rootNav)
{
tArgList = getTemplateArgumentsFromName(fullName,root->tArgLists);
}
- cd=new ClassDef(tagInfo?tagName:root->fileName,root->startLine,root->startColumn,
+ cd=createClassDef(tagInfo?tagName:root->fileName,root->startLine,root->startColumn,
fullName,sec,tagName,refFileName,TRUE,root->spec&Entry::Enum);
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d tagInfo=%p\n",
qPrint(fullName),sec,root->tArgLists ? (int)root->tArgLists->count() : -1, tagInfo);
@@ -1408,40 +1369,38 @@ static void addClassToContext(EntryNav *rootNav)
}
addClassToGroups(root,cd);
cd->setRefItems(root->sli);
-
- rootNav->releaseEntry();
}
//----------------------------------------------------------------------
// build a list of all classes mentioned in the documentation
// and all classes that have a documentation block before their definition.
-static void buildClassList(EntryNav *rootNav)
+static void buildClassList(Entry *root)
{
if (
- ((rootNav->section() & Entry::COMPOUND_MASK) ||
- rootNav->section()==Entry::OBJCIMPL_SEC) && !rootNav->name().isEmpty()
+ ((root->section & Entry::COMPOUND_MASK) ||
+ root->section==Entry::OBJCIMPL_SEC) && !root->name.isEmpty()
)
{
- addClassToContext(rootNav);
+ addClassToContext(root);
}
- RECURSE_ENTRYTREE(buildClassList,rootNav);
+ RECURSE_ENTRYTREE(buildClassList,root);
}
-static void buildClassDocList(EntryNav *rootNav)
+static void buildClassDocList(Entry *root)
{
if (
- (rootNav->section() & Entry::COMPOUNDDOC_MASK) && !rootNav->name().isEmpty()
+ (root->section & Entry::COMPOUNDDOC_MASK) && !root->name.isEmpty()
)
{
- addClassToContext(rootNav);
+ addClassToContext(root);
}
- RECURSE_ENTRYTREE(buildClassDocList,rootNav);
+ RECURSE_ENTRYTREE(buildClassDocList,root);
}
static void resolveClassNestingRelations()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
bool done=FALSE;
int iteration=0;
@@ -1452,7 +1411,7 @@ static void resolveClassNestingRelations()
ClassDef *cd=0;
for (cli.toFirst();(cd=cli.current());++cli)
{
- if (!cd->visited)
+ if (!cd->isVisited())
{
QCString name = stripAnonymousNamespaceScope(cd->name());
//printf("processing=%s, iteration=%d\n",cd->name().data(),iteration);
@@ -1464,7 +1423,7 @@ static void resolveClassNestingRelations()
//printf("****** adding %s to scope %s in iteration %d\n",cd->name().data(),d->name().data(),iteration);
d->addInnerCompound(cd);
cd->setOuterScope(d);
- cd->visited=TRUE;
+ cd->setVisited(TRUE);
done=FALSE;
}
//else
@@ -1479,7 +1438,7 @@ static void resolveClassNestingRelations()
ClassDef *cd=0;
for (cli.toFirst();(cd=cli.current());++cli)
{
- if (!cd->visited)
+ if (!cd->isVisited())
{
QCString name = stripAnonymousNamespaceScope(cd->name());
//printf("processing unresolved=%s, iteration=%d\n",cd->name().data(),iteration);
@@ -1509,14 +1468,14 @@ void distributeClassGroupRelations()
//printf("** distributeClassGroupRelations()\n");
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
//printf("Checking %s\n",cd->name().data());
// distribute the group to nested classes as well
- if (!cd->visited && cd->partOfGroups()!=0 && cd->getClassSDict())
+ if (!cd->isVisited() && cd->partOfGroups()!=0 && cd->getClassSDict())
{
//printf(" Candidate for merging\n");
ClassSDict::Iterator ncli(*cd->getClassSDict());
@@ -1532,7 +1491,7 @@ void distributeClassGroupRelations()
gd->addClass(ncd);
}
}
- cd->visited=TRUE; // only visit every class once
+ cd->setVisited(TRUE); // only visit every class once
}
}
}
@@ -1544,7 +1503,7 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC
QCString fullName = removeAnonymousScopes(templ->name());
if (fullName.right(2)=="::") fullName=fullName.left(fullName.length()-2);
fullName+="."+fieldName;
- ClassDef *cd = new ClassDef(templ->getDefFileName(),
+ ClassDef *cd = createClassDef(templ->getDefFileName(),
templ->getDefLine(),
templ->getDefColumn(),
fullName,
@@ -1589,7 +1548,7 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC
for (li.toFirst();(md=li.current());++li)
{
//printf(" Member %s type=%s\n",md->name().data(),md->typeString());
- MemberDef *imd = new MemberDef(md->getDefFileName(),md->getDefLine(),md->getDefColumn(),
+ MemberDef *imd = createMemberDef(md->getDefFileName(),md->getDefLine(),md->getDefColumn(),
md->typeString(),md->name(),md->argsString(),md->excpString(),
md->protection(),md->virtualness(),md->isStatic(),Member,
md->memberType(),
@@ -1721,19 +1680,16 @@ static void findTagLessClasses()
//----------------------------------------------------------------------
// build a list of all namespaces mentioned in the documentation
// and all namespaces that have a documentation block before their definition.
-static void buildNamespaceList(EntryNav *rootNav)
+static void buildNamespaceList(Entry *root)
{
if (
- (rootNav->section()==Entry::NAMESPACE_SEC ||
- rootNav->section()==Entry::NAMESPACEDOC_SEC ||
- rootNav->section()==Entry::PACKAGEDOC_SEC
+ (root->section==Entry::NAMESPACE_SEC ||
+ root->section==Entry::NAMESPACEDOC_SEC ||
+ root->section==Entry::PACKAGEDOC_SEC
) &&
- !rootNav->name().isEmpty()
+ !root->name.isEmpty()
)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
//printf("** buildNamespaceList(%s)\n",root->name.data());
QCString fName = root->name;
@@ -1758,7 +1714,7 @@ static void buildNamespaceList(EntryNav *rootNav)
{
nd->setLanguage(root->lang);
}
- if (rootNav->tagInfo()==0) // if we found the namespace in a tag file
+ if (root->tagInfo==0) // if we found the namespace in a tag file
// and also in a project file, then remove
// the tag file reference
{
@@ -1768,7 +1724,7 @@ static void buildNamespaceList(EntryNav *rootNav)
nd->setMetaData(root->metaData);
// file definition containing the namespace nd
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
// insert the namespace in the file definition
if (fd) fd->insertNamespace(nd);
addNamespaceToGroups(root,nd);
@@ -1778,14 +1734,14 @@ static void buildNamespaceList(EntryNav *rootNav)
{
QCString tagName;
QCString tagFileName;
- TagInfo *tagInfo = rootNav->tagInfo();
+ TagInfo *tagInfo = root->tagInfo;
if (tagInfo)
{
tagName = tagInfo->tagName;
tagFileName = tagInfo->fileName;
}
//printf("++ new namespace %s lang=%s tagName=%s\n",fullName.data(),langToString(root->lang).data(),tagName.data());
- NamespaceDef *nd=new NamespaceDef(tagInfo?tagName:root->fileName,root->startLine,
+ NamespaceDef *nd=createNamespaceDef(tagInfo?tagName:root->fileName,root->startLine,
root->startColumn,fullName,tagName,tagFileName,
root->type,root->spec&Entry::Published);
nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
@@ -1802,7 +1758,7 @@ static void buildNamespaceList(EntryNav *rootNav)
nd->setRefItems(root->sli);
// file definition containing the namespace nd
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
// insert the namespace in the file definition
if (fd) fd->insertNamespace(nd);
@@ -1833,10 +1789,8 @@ static void buildNamespaceList(EntryNav *rootNav)
}
}
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(buildNamespaceList,rootNav);
+ RECURSE_ENTRYTREE(buildNamespaceList,root);
}
//----------------------------------------------------------------------
@@ -1860,13 +1814,10 @@ static NamespaceDef *findUsedNamespace(NamespaceSDict *unl,
return usingNd;
}
-static void findUsingDirectives(EntryNav *rootNav)
+static void findUsingDirectives(Entry *root)
{
- if (rootNav->section()==Entry::USINGDIR_SEC)
+ if (root->section==Entry::USINGDIR_SEC)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
//printf("Found using directive %s at line %d of %s\n",
// root->name.data(),root->startLine,root->fileName.data());
QCString name=substitute(root->name,".","::");
@@ -1878,16 +1829,16 @@ static void findUsingDirectives(EntryNav *rootNav)
{
NamespaceDef *usingNd = 0;
NamespaceDef *nd = 0;
- FileDef *fd = rootNav->fileDef();
+ FileDef *fd = root->fileDef();
QCString nsName;
// see if the using statement was found inside a namespace or inside
// the global file scope.
- if (rootNav->parent() && rootNav->parent()->section()==Entry::NAMESPACE_SEC &&
+ if (root->parent() && root->parent()->section==Entry::NAMESPACE_SEC &&
(fd==0 || fd->getLanguage()!=SrcLangExt_Java) // not a .java file
)
{
- nsName=stripAnonymousNamespaceScope(rootNav->parent()->name());
+ nsName=stripAnonymousNamespaceScope(root->parent()->name);
if (!nsName.isEmpty())
{
nd = getResolvedNamespace(nsName);
@@ -1928,7 +1879,7 @@ static void findUsingDirectives(EntryNav *rootNav)
Definition *s = pnd->getOuterScope();
if (s && s->definitionType()==Definition::TypeNamespace)
{
- pnd = (NamespaceDef*)s;
+ pnd = dynamic_cast<NamespaceDef*>(s);
}
else
{
@@ -1962,7 +1913,7 @@ static void findUsingDirectives(EntryNav *rootNav)
else // unknown namespace, but add it anyway.
{
//printf("++ new unknown namespace %s lang=%s\n",name.data(),langToString(root->lang).data());
- NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,root->startColumn,name);
+ NamespaceDef *nd=createNamespaceDef(root->fileName,root->startLine,root->startColumn,name);
nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
nd->addSectionsToDefinition(root->anchors);
@@ -1997,49 +1948,39 @@ static void findUsingDirectives(EntryNav *rootNav)
nd->setRefItems(root->sli);
}
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(findUsingDirectives,rootNav);
+ RECURSE_ENTRYTREE(findUsingDirectives,root);
}
//----------------------------------------------------------------------
-static void buildListOfUsingDecls(EntryNav *rootNav)
+static void buildListOfUsingDecls(Entry *root)
{
- if (rootNav->section()==Entry::USINGDECL_SEC &&
- !(rootNav->parent()->section()&Entry::COMPOUND_MASK) // not a class/struct member
+ if (root->section==Entry::USINGDECL_SEC &&
+ !(root->parent()->section&Entry::COMPOUND_MASK) // not a class/struct member
)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
QCString name = substitute(root->name,".","::");
if (g_usingDeclarations.find(name)==0)
{
- FileDef *fd = rootNav->fileDef();
+ FileDef *fd = root->fileDef();
if (fd)
{
g_usingDeclarations.insert(name,fd);
}
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(buildListOfUsingDecls,rootNav);
+ RECURSE_ENTRYTREE(buildListOfUsingDecls,root);
}
-static void findUsingDeclarations(EntryNav *rootNav)
+static void findUsingDeclarations(Entry *root)
{
- if (rootNav->section()==Entry::USINGDECL_SEC &&
- !(rootNav->parent()->section()&Entry::COMPOUND_MASK) // not a class/struct member
+ if (root->section==Entry::USINGDECL_SEC &&
+ !(root->parent()->section&Entry::COMPOUND_MASK) // not a class/struct member
)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
//printf("Found using declaration %s at line %d of %s inside section %x\n",
// root->name.data(),root->startLine,root->fileName.data(),
// rootNav->parent()->section());
@@ -2047,14 +1988,14 @@ static void findUsingDeclarations(EntryNav *rootNav)
{
ClassDef *usingCd = 0;
NamespaceDef *nd = 0;
- FileDef *fd = rootNav->fileDef();
+ FileDef *fd = root->fileDef();
QCString scName;
// see if the using statement was found inside a namespace or inside
// the global file scope.
- if (rootNav->parent()->section() == Entry::NAMESPACE_SEC)
+ if (root->parent()->section == Entry::NAMESPACE_SEC)
{
- scName=rootNav->parent()->name();
+ scName=root->parent()->name;
if (!scName.isEmpty())
{
nd = getResolvedNamespace(scName);
@@ -2085,7 +2026,7 @@ static void findUsingDeclarations(EntryNav *rootNav)
{
Debug::print(Debug::Classes,0," New using class `%s' (sec=0x%08x)! #tArgLists=%d\n",
qPrint(name),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
- usingCd = new ClassDef(
+ usingCd = createClassDef(
"<using>",1,1,
name,
ClassDef::Class);
@@ -2113,34 +2054,32 @@ static void findUsingDeclarations(EntryNav *rootNav)
fd->addUsingDeclaration(usingCd);
}
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(findUsingDeclarations,rootNav);
+ RECURSE_ENTRYTREE(findUsingDeclarations,root);
}
//----------------------------------------------------------------------
-static void findUsingDeclImports(EntryNav *rootNav)
+static void findUsingDeclImports(Entry *root)
{
- if (rootNav->section()==Entry::USINGDECL_SEC &&
- (rootNav->parent()->section()&Entry::COMPOUND_MASK) // in a class/struct member
+ if (root->section==Entry::USINGDECL_SEC &&
+ (root->parent()->section&Entry::COMPOUND_MASK) // in a class/struct member
)
{
//printf("Found using declaration %s inside section %x\n",
// rootNav->name().data(), rootNav->parent()->section());
- QCString fullName=removeRedundantWhiteSpace(rootNav->parent()->name());
+ QCString fullName=removeRedundantWhiteSpace(root->parent()->name);
fullName=stripAnonymousNamespaceScope(fullName);
fullName=stripTemplateSpecifiersFromScope(fullName);
ClassDef *cd = getClass(fullName);
if (cd)
{
//printf("found class %s\n",cd->name().data());
- int i=rootNav->name().find("::");
+ int i=root->name.find("::");
if (i!=-1)
{
- QCString scope=rootNav->name().left(i);
- QCString memName=rootNav->name().right(rootNav->name().length()-i-2);
+ QCString scope=root->name.left(i);
+ QCString memName=root->name.right(root->name.length()-i-2);
ClassDef *bcd = getResolvedClass(cd,0,scope); // todo: file in fileScope parameter
if (bcd)
{
@@ -2158,21 +2097,17 @@ static void findUsingDeclImports(EntryNav *rootNav)
MemberDef *md = mi->memberDef;
if (md && md->protection()!=Private)
{
-
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
//printf("found member %s\n",mni->memberName());
MemberDef *newMd = 0;
{
QCString fileName = root->fileName;
- if (fileName.isEmpty() && rootNav->tagInfo())
+ if (fileName.isEmpty() && root->tagInfo)
{
- fileName = rootNav->tagInfo()->tagName;
+ fileName = root->tagInfo->tagName;
}
ArgumentList *templAl = md->templateArguments();
ArgumentList *al = md->templateArguments();
- newMd = new MemberDef(
+ newMd = createMemberDef(
fileName,root->startLine,root->startColumn,
md->typeString(),memName,md->argsString(),
md->excpString(),root->protection,root->virt,
@@ -2209,8 +2144,6 @@ static void findUsingDeclImports(EntryNav *rootNav)
newMd->setMemberSpecifiers(md->getMemberSpecifiers());
newMd->setLanguage(root->lang);
newMd->setId(root->id);
-
- rootNav->releaseEntry();
}
}
}
@@ -2220,7 +2153,7 @@ static void findUsingDeclImports(EntryNav *rootNav)
}
}
- RECURSE_ENTRYTREE(findUsingDeclImports,rootNav);
+ RECURSE_ENTRYTREE(findUsingDeclImports,root);
}
//----------------------------------------------------------------------
@@ -2236,7 +2169,7 @@ static void findIncludedUsingDirectives()
FileDef *fd;
for (;(fd=fni.current());++fni)
{
- fd->visited=FALSE;
+ fd->setVisited(FALSE);
}
}
// then recursively add using directives found in #include files
@@ -2247,7 +2180,7 @@ static void findIncludedUsingDirectives()
FileDef *fd;
for (fni.toFirst();(fd=fni.current());++fni)
{
- if (!fd->visited)
+ if (!fd->isVisited())
{
//printf("----- adding using directives for file %s\n",fd->name().data());
fd->addIncludedUsingDirectives();
@@ -2259,7 +2192,7 @@ static void findIncludedUsingDirectives()
//----------------------------------------------------------------------
static MemberDef *addVariableToClass(
- EntryNav *rootNav,
+ Entry *root,
ClassDef *cd,
MemberType mtype,
const QCString &name,
@@ -2268,8 +2201,6 @@ static MemberDef *addVariableToClass(
Protection prot,
Relationship related)
{
- Entry *root = rootNav->entry();
-
QCString qualScope = cd->qualifiedNameWithTemplateParameters();
QCString scopeSeparator="::";
SrcLangExt lang = cd->getLanguage();
@@ -2354,7 +2285,7 @@ static MemberDef *addVariableToClass(
md->setProtection(root->protection);
cd->reclassifyMember(md,MemberType_Property);
}
- addMemberDocs(rootNav,md,def,0,FALSE);
+ addMemberDocs(root,md,def,0,FALSE);
//printf(" Member already found!\n");
return md;
}
@@ -2362,18 +2293,18 @@ static MemberDef *addVariableToClass(
}
QCString fileName = root->fileName;
- if (fileName.isEmpty() && rootNav->tagInfo())
+ if (fileName.isEmpty() && root->tagInfo)
{
- fileName = rootNav->tagInfo()->tagName;
+ fileName = root->tagInfo->tagName;
}
// new member variable, typedef or enum value
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
prot,Normal,root->stat,related,
mtype,root->tArgLists ? root->tArgLists->getLast() : 0,0, root->metaData);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setMemberClass(cd); // also sets outer scope (i.e. getOuterScope())
//md->setDefFile(root->fileName);
//md->setDefLine(root->startLine);
@@ -2407,7 +2338,7 @@ static MemberDef *addVariableToClass(
// printf("memberdef %s in memberGroup %d\n",name.data(),root->mGrpId);
// md->setMemberGroup(memberGroupDict[root->mGrpId]);
//
- md->setBodyDef(rootNav->fileDef());
+ md->setBodyDef(root->fileDef());
//printf(" Adding member=%s\n",md->name().data());
// add the member to the global list
@@ -2430,15 +2361,15 @@ static MemberDef *addVariableToClass(
md->setRefItems(root->sli);
//TODO: insert FileDef instead of filename strings.
- cd->insertUsedFile(rootNav->fileDef());
- rootNav->changeSection(Entry::EMPTY_SEC);
+ cd->insertUsedFile(root->fileDef());
+ root->changeSection(Entry::EMPTY_SEC);
return md;
}
//----------------------------------------------------------------------
static MemberDef *addVariableToFile(
- EntryNav *rootNav,
+ Entry *root,
MemberType mtype,
const QCString &scope,
const QCString &name,
@@ -2446,7 +2377,6 @@ static MemberDef *addVariableToFile(
/*int indentDepth,*/
MemberDef *fromAnnMemb)
{
- Entry *root = rootNav->entry();
Debug::print(Debug::Variables,0,
" global variable:\n"
" file='%s' type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d mtype=%d lang=%d\n",
@@ -2460,7 +2390,7 @@ static MemberDef *addVariableToFile(
root->lang
);
- FileDef *fd = rootNav->fileDef();
+ FileDef *fd = root->fileDef();
// see if we have a typedef that should hide a struct or union
if (mtype==MemberType_Typedef && Config_getBool(TYPEDEF_HIDES_STRUCT))
@@ -2596,7 +2526,7 @@ static MemberDef *addVariableToFile(
{
Debug::print(Debug::Variables,0,
" variable already found: scope=%s\n",qPrint(md->getOuterScope()->name()));
- addMemberDocs(rootNav,md,def,0,FALSE);
+ addMemberDocs(root,md,def,0,FALSE);
md->setRefItems(root->sli);
// if md is a variable forward declaration and root is the definition that
// turn md into the defintion
@@ -2618,20 +2548,20 @@ static MemberDef *addVariableToFile(
}
QCString fileName = root->fileName;
- if (fileName.isEmpty() && rootNav->tagInfo())
+ if (fileName.isEmpty() && root->tagInfo)
{
- fileName = rootNav->tagInfo()->tagName;
+ fileName = root->tagInfo->tagName;
}
Debug::print(Debug::Variables,0,
- " new variable, nd=%s tagInfo=%p!\n",nd?qPrint(nd->name()):"<global>",rootNav->tagInfo());
+ " new variable, nd=%s tagInfo=%p!\n",nd?qPrint(nd->name()):"<global>",root->tagInfo);
// new global variable, enum value or typedef
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
fileName,root->startLine,root->startColumn,
root->type,name,root->args,0,
root->protection, Normal,root->stat,Member,
mtype,root->tArgLists ? root->tArgLists->getLast() : 0,0, root->metaData);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setMemberSpecifiers(root->spec);
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
@@ -2684,7 +2614,7 @@ static MemberDef *addVariableToFile(
mn->append(md);
Doxygen::functionNameSDict->append(name,mn);
}
- rootNav->changeSection(Entry::EMPTY_SEC);
+ root->changeSection(Entry::EMPTY_SEC);
return md;
}
@@ -2725,7 +2655,7 @@ static int findFunctionPtr(const QCString &type,int lang, int *pLength=0)
/*! Returns TRUE iff \a type is a class within scope \a context.
* Used to detect variable declarations that look like function prototypes.
*/
-static bool isVarWithConstructor(EntryNav *rootNav)
+static bool isVarWithConstructor(Entry *root)
{
static QRegExp initChars("[0-9\"'&*!^]+");
static QRegExp idChars("[a-z_A-Z][a-z_A-Z0-9]*");
@@ -2737,15 +2667,12 @@ static bool isVarWithConstructor(EntryNav *rootNav)
int ti;
//printf("isVarWithConstructor(%s)\n",rootNav->name().data());
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- if (rootNav->parent()->section() & Entry::COMPOUND_MASK)
+ if (root->parent()->section & Entry::COMPOUND_MASK)
{ // inside a class
result=FALSE;
goto done;
}
- else if ((fd = rootNav->fileDef()) &&
+ else if ((fd = root->fileDef()) &&
(fd->name().right(2)==".c" || fd->name().right(2)==".h")
)
{ // inside a .c file
@@ -2757,9 +2684,9 @@ static bool isVarWithConstructor(EntryNav *rootNav)
result=FALSE;
goto done;
}
- if (!rootNav->parent()->name().isEmpty())
+ if (!root->parent()->name.isEmpty())
{
- ctx=Doxygen::namespaceSDict->find(rootNav->parent()->name());
+ ctx=Doxygen::namespaceSDict->find(root->parent()->name);
}
type = root->type;
// remove qualifiers
@@ -2844,17 +2771,13 @@ static bool isVarWithConstructor(EntryNav *rootNav)
done:
//printf("isVarWithConstructor(%s,%s)=%d\n",rootNav->parent()->name().data(),
// root->type.data(),result);
- rootNav->releaseEntry();
return result;
}
-static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
+static void addVariable(Entry *root,int isFuncPtr=-1)
{
static bool sliceOpt = Config_getBool(OPTIMIZE_OUTPUT_SLICE);
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
Debug::print(Debug::Variables,0,
"VARIABLE_SEC: \n"
" type=`%s' name=`%s' args=`%s' bodyLine=`%d' mGrpId=%d relates=%s\n",
@@ -2911,10 +2834,10 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
QCString scope,name=removeRedundantWhiteSpace(root->name);
// find the scope of this variable
- EntryNav *p = rootNav->parent();
- while ((p->section() & Entry::SCOPE_MASK))
+ Entry *p = root->parent();
+ while ((p->section & Entry::SCOPE_MASK))
{
- QCString scopeName = p->name();
+ QCString scopeName = p->name;
if (!scopeName.isEmpty())
{
scope.prepend(scopeName);
@@ -2941,7 +2864,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
cd=getClass(scope);
if (cd)
{
- addVariableToClass(rootNav, // entry
+ addVariableToClass(root, // entry
cd, // class to add member to
MemberType_Friend, // type of member
name, // name of the member
@@ -2952,8 +2875,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
);
}
}
- goto nextMember;
- /* skip this member, because it is a
+ return; /* skip this member, because it is a
* static variable definition (always?), which will be
* found in a class scope as well, but then we know the
* correct protection level, so only then it will be
@@ -3017,7 +2939,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
{
if (!pScope.isEmpty() && (pcd=getClass(pScope)))
{
- md=addVariableToClass(rootNav, // entry
+ md=addVariableToClass(root, // entry
pcd, // class to add member to
mtype, // member type
name, // member name
@@ -3032,7 +2954,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
{
if (mtype==MemberType_Variable)
{
- md=addVariableToFile(rootNav,mtype,pScope,name,TRUE,0);
+ md=addVariableToFile(root,mtype,pScope,name,TRUE,0);
}
//added=TRUE;
}
@@ -3042,7 +2964,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
//printf("name=`%s' scope=%s scope.right=%s\n",
// name.data(),scope.data(),
// scope.right(scope.length()-si).data());
- addVariableToClass(rootNav, // entry
+ addVariableToClass(root, // entry
cd, // class to add member to
mtype, // member type
name, // name of the member
@@ -3054,33 +2976,31 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
else if (!name.isEmpty()) // global variable
{
//printf("Inserting member in global scope %s!\n",scope.data());
- addVariableToFile(rootNav,mtype,scope,name,FALSE,/*0,*/0);
+ addVariableToFile(root,mtype,scope,name,FALSE,/*0,*/0);
}
-nextMember:
- rootNav->releaseEntry();
}
//----------------------------------------------------------------------
// Searches the Entry tree for typedef documentation sections.
// If found they are stored in their class or in the global list.
-static void buildTypedefList(EntryNav *rootNav)
+static void buildTypedefList(Entry *root)
{
//printf("buildVarList(%s)\n",rootNav->name().data());
- if (!rootNav->name().isEmpty() &&
- rootNav->section()==Entry::VARIABLE_SEC &&
- rootNav->type().find("typedef ")!=-1 // its a typedef
+ if (!root->name.isEmpty() &&
+ root->section==Entry::VARIABLE_SEC &&
+ root->type.find("typedef ")!=-1 // its a typedef
)
{
- addVariable(rootNav);
+ addVariable(root);
}
- if (rootNav->children())
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
+ EntryListIterator eli(*root->children());
+ Entry *e;
for (;(e=eli.current());++eli)
{
- if (e->section()!=Entry::ENUM_SEC)
+ if (e->section!=Entry::ENUM_SEC)
{
buildTypedefList(e);
}
@@ -3091,22 +3011,22 @@ static void buildTypedefList(EntryNav *rootNav)
//----------------------------------------------------------------------
// Searches the Entry tree for sequence documentation sections.
// If found they are stored in the global list.
-static void buildSequenceList(EntryNav *rootNav)
+static void buildSequenceList(Entry *root)
{
- if (!rootNav->name().isEmpty() &&
- rootNav->section()==Entry::VARIABLE_SEC &&
- rootNav->type().find("sequence<")!=-1 // it's a sequence
+ if (!root->name.isEmpty() &&
+ root->section==Entry::VARIABLE_SEC &&
+ root->type.find("sequence<")!=-1 // it's a sequence
)
{
- addVariable(rootNav);
+ addVariable(root);
}
- if (rootNav->children())
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
+ EntryListIterator eli(*root->children());
+ Entry *e;
for (;(e=eli.current());++eli)
{
- if (e->section()!=Entry::ENUM_SEC)
+ if (e->section!=Entry::ENUM_SEC)
{
buildSequenceList(e);
}
@@ -3117,22 +3037,22 @@ static void buildSequenceList(EntryNav *rootNav)
//----------------------------------------------------------------------
// Searches the Entry tree for dictionary documentation sections.
// If found they are stored in the global list.
-static void buildDictionaryList(EntryNav *rootNav)
+static void buildDictionaryList(Entry *root)
{
- if (!rootNav->name().isEmpty() &&
- rootNav->section()==Entry::VARIABLE_SEC &&
- rootNav->type().find("dictionary<")!=-1 // it's a dictionary
+ if (!root->name.isEmpty() &&
+ root->section==Entry::VARIABLE_SEC &&
+ root->type.find("dictionary<")!=-1 // it's a dictionary
)
{
- addVariable(rootNav);
+ addVariable(root);
}
- if (rootNav->children())
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
+ EntryListIterator eli(*root->children());
+ Entry *e;
for (;(e=eli.current());++eli)
{
- if (e->section()!=Entry::ENUM_SEC)
+ if (e->section!=Entry::ENUM_SEC)
{
buildDictionaryList(e);
}
@@ -3144,33 +3064,33 @@ static void buildDictionaryList(EntryNav *rootNav)
// Searches the Entry tree for Variable documentation sections.
// If found they are stored in their class or in the global list.
-static void buildVarList(EntryNav *rootNav)
+static void buildVarList(Entry *root)
{
//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) &&
+ if (!root->name.isEmpty() &&
+ (root->type.isEmpty() || g_compoundKeywordDict.find(root->type)==0) &&
(
- (rootNav->section()==Entry::VARIABLE_SEC // it's a variable
+ (root->section==Entry::VARIABLE_SEC // it's a variable
) ||
- (rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable
- (isFuncPtr=findFunctionPtr(rootNav->type(),rootNav->lang()))!=-1
+ (root->section==Entry::FUNCTION_SEC && // or maybe a function pointer variable
+ (isFuncPtr=findFunctionPtr(root->type,root->lang))!=-1
) ||
- (rootNav->section()==Entry::FUNCTION_SEC && // class variable initialized by constructor
- isVarWithConstructor(rootNav)
+ (root->section==Entry::FUNCTION_SEC && // class variable initialized by constructor
+ isVarWithConstructor(root)
)
)
) // documented variable
{
- addVariable(rootNav,isFuncPtr);
+ addVariable(root,isFuncPtr);
}
- if (rootNav->children())
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
+ EntryListIterator eli(*root->children());
+ Entry *e;
for (;(e=eli.current());++eli)
{
- if (e->section()!=Entry::ENUM_SEC)
+ if (e->section!=Entry::ENUM_SEC)
{
buildVarList(e);
}
@@ -3184,25 +3104,24 @@ static void buildVarList(EntryNav *rootNav)
//
static void addInterfaceOrServiceToServiceOrSingleton(
- EntryNav *const rootNav,
+ Entry *const root,
ClassDef *const cd,
QCString const& rname)
{
- Entry *const root = rootNav->entry();
- FileDef *const fd = rootNav->fileDef();
- enum MemberType const type = (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC)
+ FileDef *fd = root->fileDef();
+ enum MemberType type = (root->section==Entry::EXPORTED_INTERFACE_SEC)
? MemberType_Interface
: MemberType_Service;
QCString fileName = root->fileName;
- if (fileName.isEmpty() && rootNav->tagInfo())
+ if (fileName.isEmpty() && root->tagInfo)
{
- fileName = rootNav->tagInfo()->tagName;
+ fileName = root->tagInfo->tagName;
}
- MemberDef *const md = new MemberDef(
+ MemberDef *const md = createMemberDef(
fileName, root->startLine, root->startColumn, root->type, rname,
"", "", root->protection, root->virt, root->stat, Member,
type, 0, root->argList, root->metaData);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setMemberClass(cd);
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(false);
@@ -3252,29 +3171,25 @@ static void addInterfaceOrServiceToServiceOrSingleton(
// "optional" interface/service get Protected which turns into dashed line
BaseInfo base(rname,
(root->spec & (Entry::Optional)) ? Protected : Public,Normal);
- findClassRelation(rootNav,cd,cd,&base,0,DocumentedOnly,true)
- || findClassRelation(rootNav,cd,cd,&base,0,Undocumented,true);
+ findClassRelation(root,cd,cd,&base,0,DocumentedOnly,true) || findClassRelation(root,cd,cd,&base,0,Undocumented,true);
// add file to list of used files
cd->insertUsedFile(fd);
addMemberToGroups(root,md);
- rootNav->changeSection(Entry::EMPTY_SEC);
+ root->changeSection(Entry::EMPTY_SEC);
md->setRefItems(root->sli);
}
-static void buildInterfaceAndServiceList(EntryNav *const rootNav)
+static void buildInterfaceAndServiceList(Entry *root)
{
- if (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC ||
- rootNav->section()==Entry::INCLUDED_SERVICE_SEC)
+ if (root->section==Entry::EXPORTED_INTERFACE_SEC ||
+ root->section==Entry::INCLUDED_SERVICE_SEC)
{
- rootNav->loadEntry(g_storage);
- Entry *const root = rootNav->entry();
-
Debug::print(Debug::Functions,0,
"EXPORTED_INTERFACE_SEC:\n"
" `%s' `%s'::`%s' `%s' relates=`%s' relatesType=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d spec=%lld proto=%d docFile=%s\n",
qPrint(root->type),
- qPrint(rootNav->parent()->name()),
+ qPrint(root->parent()->name),
qPrint(root->name),
qPrint(root->args),
qPrint(root->relates),
@@ -3289,18 +3204,18 @@ static void buildInterfaceAndServiceList(EntryNav *const rootNav)
qPrint(root->docFile)
);
- QCString const rname = removeRedundantWhiteSpace(root->name);
+ QCString rname = removeRedundantWhiteSpace(root->name);
if (!rname.isEmpty())
{
- QCString const scope = rootNav->parent()->name();
- ClassDef *const cd = getClass(scope);
+ QCString scope = root->parent()->name;
+ ClassDef *cd = getClass(scope);
assert(cd);
if (cd && ((ClassDef::Interface == cd->compoundType()) ||
(ClassDef::Service == cd->compoundType()) ||
(ClassDef::Singleton == cd->compoundType())))
{
- addInterfaceOrServiceToServiceOrSingleton(rootNav,cd,rname);
+ addInterfaceOrServiceToServiceOrSingleton(root,cd,rname);
}
else
{
@@ -3312,15 +3227,13 @@ static void buildInterfaceAndServiceList(EntryNav *const rootNav)
warn(root->fileName,root->startLine,
"Illegal member name found.");
}
-
- rootNav->releaseEntry();
}
// can only have these in IDL anyway
- switch (rootNav->lang())
+ switch (root->lang)
{
case SrcLangExt_Unknown: // fall through (root node always is Unknown)
case SrcLangExt_IDL:
- RECURSE_ENTRYTREE(buildInterfaceAndServiceList,rootNav);
+ RECURSE_ENTRYTREE(buildInterfaceAndServiceList,root);
break;
default:
return; // nothing to do here
@@ -3332,11 +3245,10 @@ static void buildInterfaceAndServiceList(EntryNav *const rootNav)
// Searches the Entry tree for Function sections.
// If found they are stored in their class or in the global list.
-static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
+static void addMethodToClass(Entry *root,ClassDef *cd,
const QCString &rname,bool isFriend)
{
- Entry *root = rootNav->entry();
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
int l;
static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*");
@@ -3373,9 +3285,9 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
}
QCString fileName = root->fileName;
- if (fileName.isEmpty() && rootNav->tagInfo())
+ if (fileName.isEmpty() && root->tagInfo)
{
- fileName = rootNav->tagInfo()->tagName;
+ fileName = root->tagInfo->tagName;
}
//printf("root->name=`%s; root->args=`%s' root->argList=`%s'\n",
@@ -3383,7 +3295,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
// );
// adding class member
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
root->protection,root->virt,
@@ -3391,7 +3303,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
root->relates.isEmpty() ? Member :
root->relatesType == MemberOf ? Foreign : Related,
mtype,root->tArgLists ? root->tArgLists->getLast() : 0,root->argList, root->metaData);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setMemberClass(cd);
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(!root->proto);
@@ -3509,23 +3421,20 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
cd->insertUsedFile(fd);
addMemberToGroups(root,md);
- rootNav->changeSection(Entry::EMPTY_SEC);
+ root->changeSection(Entry::EMPTY_SEC);
md->setRefItems(root->sli);
}
-static void buildFunctionList(EntryNav *rootNav)
+static void buildFunctionList(Entry *root)
{
- if (rootNav->section()==Entry::FUNCTION_SEC)
+ if (root->section==Entry::FUNCTION_SEC)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
Debug::print(Debug::Functions,0,
"FUNCTION_SEC:\n"
" `%s' `%s'::`%s' `%s' relates=`%s' relatesType=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d spec=%lld proto=%d docFile=%s\n",
qPrint(root->type),
- qPrint(rootNav->parent()->name()),
+ qPrint(root->parent()->name),
qPrint(root->name),
qPrint(root->args),
qPrint(root->relates),
@@ -3544,14 +3453,14 @@ static void buildFunctionList(EntryNav *rootNav)
QCString rname = removeRedundantWhiteSpace(root->name);
//printf("rname=%s\n",rname.data());
- QCString scope=rootNav->parent()->name(); //stripAnonymousNamespaceScope(root->parent->name);
+ QCString scope=root->parent()->name; //stripAnonymousNamespaceScope(root->parent->name);
if (!rname.isEmpty() && scope.find('@')==-1)
{
ClassDef *cd=0;
// check if this function's parent is a class
scope=stripTemplateSpecifiersFromScope(scope,FALSE);
- FileDef *rfd=rootNav->fileDef();
+ FileDef *rfd=root->fileDef();
int memIndex=rname.findRev("::");
@@ -3559,7 +3468,7 @@ static void buildFunctionList(EntryNav *rootNav)
if (cd && scope+"::"==rname.left(scope.length()+2)) // found A::f inside A
{
// strip scope from name
- rname=rname.right(rname.length()-rootNav->parent()->name().length()-2);
+ rname=rname.right(rname.length()-root->parent()->name.length()-2);
}
NamespaceDef *nd = 0;
@@ -3593,8 +3502,8 @@ static void buildFunctionList(EntryNav *rootNav)
int ts=root->type.find('<');
int te=root->type.findRev('>');
int ti;
- if (!rootNav->parent()->name().isEmpty() &&
- (rootNav->parent()->section() & Entry::COMPOUND_MASK) &&
+ if (!root->parent()->name.isEmpty() &&
+ (root->parent()->section & Entry::COMPOUND_MASK) &&
cd &&
// do some fuzzy things to exclude function pointers
(root->type.isEmpty() ||
@@ -3608,10 +3517,10 @@ static void buildFunctionList(EntryNav *rootNav)
{
Debug::print(Debug::Functions,0," --> member %s of class %s!\n",
qPrint(rname),qPrint(cd->name()));
- addMethodToClass(rootNav,cd,rname,isFriend);
+ addMethodToClass(root,cd,rname,isFriend);
}
- else if (!((rootNav->parent()->section() & Entry::COMPOUND_MASK)
- || rootNav->parent()->section()==Entry::OBJCIMPL_SEC
+ else if (!((root->parent()->section & Entry::COMPOUND_MASK)
+ || root->parent()->section==Entry::OBJCIMPL_SEC
) &&
!isMember &&
(root->relates.isEmpty() || root->relatesType == Duplicate) &&
@@ -3636,7 +3545,7 @@ static void buildFunctionList(EntryNav *rootNav)
NamespaceDef *rnd = 0;
//printf("root namespace=%s\n",rootNav->parent()->name().data());
QCString fullScope = scope;
- QCString parentScope = rootNav->parent()->name();
+ QCString parentScope = root->parent()->name;
if (!parentScope.isEmpty() && !leftScopeMatch(parentScope,scope))
{
if (!scope.isEmpty()) fullScope.prepend("::");
@@ -3786,13 +3695,13 @@ static void buildFunctionList(EntryNav *rootNav)
// new global function
ArgumentList *tArgList = root->tArgLists ? root->tArgLists->getLast() : 0;
QCString name=removeRedundantWhiteSpace(rname);
- md=new MemberDef(
+ md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
root->protection,root->virt,root->stat,Member,
MemberType_Function,tArgList,root->argList,root->metaData);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setLanguage(root->lang);
md->setId(root->id);
//md->setDefFile(root->fileName);
@@ -3805,7 +3714,7 @@ static void buildFunctionList(EntryNav *rootNav)
md->setTypeConstraints(root->typeConstr);
//md->setBody(root->body);
md->setBodySegment(root->bodyLine,root->endBodyLine);
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
md->setBodyDef(fd);
md->addSectionsToDefinition(root->anchors);
md->setMemberSpecifiers(root->spec);
@@ -3813,10 +3722,10 @@ static void buildFunctionList(EntryNav *rootNav)
// see if the function is inside a namespace that was not part of
// the name already (in that case nd should be non-zero already)
- if (nd==0 && rootNav->parent()->section() == Entry::NAMESPACE_SEC )
+ if (nd==0 && root->parent()->section == Entry::NAMESPACE_SEC )
{
- //QCString nscope=removeAnonymousScopes(rootNav->parent()->name());
- QCString nscope=rootNav->parent()->name();
+ //QCString nscope=removeAnonymousScopes(root->parent()->name);
+ QCString nscope=root->parent()->name;
if (!nscope.isEmpty())
{
nd = getResolvedNamespace(nscope);
@@ -3861,7 +3770,7 @@ static void buildFunctionList(EntryNav *rootNav)
" `%s' `%s'::`%s' `%s' proto=%d\n"
" def=`%s'\n",
qPrint(root->type),
- qPrint(rootNav->parent()->name()),
+ qPrint(root->parent()->name),
qPrint(rname),
qPrint(root->args),
root->proto,
@@ -3909,14 +3818,14 @@ static void buildFunctionList(EntryNav *rootNav)
if (root->relatesType == Simple) // if this is a relatesalso command,
// allow find Member to pick it up
{
- rootNav->changeSection(Entry::EMPTY_SEC); // Otherwise we have finished
- // with this entry.
+ root->changeSection(Entry::EMPTY_SEC); // Otherwise we have finished
+ // with this entry.
}
}
else
{
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
if (fd)
{
// add member to the file (we do this even if we have already
@@ -3939,10 +3848,8 @@ static void buildFunctionList(EntryNav *rootNav)
"Illegal member name found."
);
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(buildFunctionList,rootNav);
+ RECURSE_ENTRYTREE(buildFunctionList,root);
}
//----------------------------------------------------------------------
@@ -4285,7 +4192,7 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co
}
-static void findUsedClassesForClass(EntryNav *rootNav,
+static void findUsedClassesForClass(Entry *root,
Definition *context,
ClassDef *masterCd,
ClassDef *instanceCd,
@@ -4294,7 +4201,7 @@ static void findUsedClassesForClass(EntryNav *rootNav,
QDict<int> *templateNames=0
)
{
- masterCd->visited=TRUE;
+ masterCd->setVisited(TRUE);
ArgumentList *formalArgs = masterCd->templateArguments();
if (masterCd->memberNameInfoSDict())
{
@@ -4327,7 +4234,7 @@ static void findUsedClassesForClass(EntryNav *rootNav,
}
//printf(" template substitution gives=%s\n",type.data());
- while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec,rootNav->lang())!=-1)
+ while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec,root->lang)!=-1)
{
// find the type (if any) that matches usedClassName
ClassDef *typeCd = getResolvedClass(masterCd,
@@ -4362,7 +4269,7 @@ static void findUsedClassesForClass(EntryNav *rootNav,
delTempNames=TRUE;
}
BaseInfo bi(usedName,Public,Normal);
- findClassRelation(rootNav,context,instanceCd,&bi,templateNames,TemplateInstances,isArtificial);
+ findClassRelation(root,context,instanceCd,&bi,templateNames,TemplateInstances,isArtificial);
if (masterCd->templateArguments())
{
@@ -4379,7 +4286,7 @@ static void findUsedClassesForClass(EntryNav *rootNav,
ClassDef *usedCd = Doxygen::hiddenClasses->find(usedName);
if (usedCd==0)
{
- usedCd = new ClassDef(
+ usedCd = createClassDef(
masterCd->getDefFileName(),masterCd->getDefLine(),
masterCd->getDefColumn(),
usedName,
@@ -4428,7 +4335,7 @@ static void findUsedClassesForClass(EntryNav *rootNav,
type+=md->argsString();
}
Debug::print(Debug::Classes,0," New undocumented used class `%s'\n", qPrint(type));
- usedCd = new ClassDef(
+ usedCd = createClassDef(
masterCd->getDefFileName(),masterCd->getDefLine(),
masterCd->getDefColumn(),
type,ClassDef::Class);
@@ -4455,7 +4362,7 @@ static void findUsedClassesForClass(EntryNav *rootNav,
}
static void findBaseClassesForClass(
- EntryNav *rootNav,
+ Entry *root,
Definition *context,
ClassDef *masterCd,
ClassDef *instanceCd,
@@ -4465,9 +4372,8 @@ static void findBaseClassesForClass(
QDict<int> *templateNames=0
)
{
- Entry *root = rootNav->entry();
//if (masterCd->visited) return;
- masterCd->visited=TRUE;
+ masterCd->setVisited(TRUE);
// The base class could ofcouse also be a non-nested class
ArgumentList *formalArgs = masterCd->templateArguments();
QListIterator<BaseInfo> bii(*root->extends);
@@ -4492,7 +4398,7 @@ static void findBaseClassesForClass(
if (mode==DocumentedOnly)
{
// find a documented base class in the correct scope
- if (!findClassRelation(rootNav,context,instanceCd,&tbi,templateNames,DocumentedOnly,isArtificial))
+ if (!findClassRelation(root,context,instanceCd,&tbi,templateNames,DocumentedOnly,isArtificial))
{
// 1.8.2: decided to show inheritance relations even if not documented,
// we do make them artificial, so they do not appear in the index
@@ -4500,13 +4406,13 @@ static void findBaseClassesForClass(
bool b = Config_getBool(HIDE_UNDOC_RELATIONS) ? TRUE : isArtificial;
//{
// no documented base class -> try to find an undocumented one
- findClassRelation(rootNav,context,instanceCd,&tbi,templateNames,Undocumented,b);
+ findClassRelation(root,context,instanceCd,&tbi,templateNames,Undocumented,b);
//}
}
}
else if (mode==TemplateInstances)
{
- findClassRelation(rootNav,context,instanceCd,&tbi,templateNames,TemplateInstances,isArtificial);
+ findClassRelation(root,context,instanceCd,&tbi,templateNames,TemplateInstances,isArtificial);
}
if (delTempNames)
{
@@ -4558,34 +4464,19 @@ static bool findTemplateInstanceRelation(Entry *root,
// search for new template instances caused by base classes of
// instanceClass
- EntryNav *templateRootNav = g_classEntries.find(templateClass->name());
- if (templateRootNav)
+ Entry *templateRoot = g_classEntries.find(templateClass->name());
+ if (templateRoot)
{
- bool unloadNeeded=FALSE;
- Entry *templateRoot = templateRootNav->entry();
- if (templateRoot==0) // not yet loaded
- {
- templateRootNav->loadEntry(g_storage);
- templateRoot = templateRootNav->entry();
- ASSERT(templateRoot!=0); // now it should really be loaded
- unloadNeeded=TRUE;
- }
-
Debug::print(Debug::Classes,0," template root found %s templSpec=%s!\n",
qPrint(templateRoot->name),qPrint(templSpec));
ArgumentList *templArgs = new ArgumentList;
stringToArgumentList(templSpec,templArgs);
- findBaseClassesForClass(templateRootNav,context,templateClass,instanceClass,
+ findBaseClassesForClass(templateRoot,context,templateClass,instanceClass,
TemplateInstances,isArtificial,templArgs,templateNames);
- findUsedClassesForClass(templateRootNav,context,templateClass,instanceClass,
+ findUsedClassesForClass(templateRoot,context,templateClass,instanceClass,
isArtificial,templArgs,templateNames);
delete templArgs;
-
- if (unloadNeeded) // still cleanup to do
- {
- templateRootNav->releaseEntry();
- }
}
else
{
@@ -4695,7 +4586,7 @@ static int findEndOfTemplate(const QCString &s,int startPos)
}
static bool findClassRelation(
- EntryNav *rootNav,
+ Entry *root,
Definition *context,
ClassDef *cd,
BaseInfo *bi,
@@ -4717,8 +4608,6 @@ static bool findClassRelation(
//}
//printf("\n");
- Entry *root = rootNav->entry();
-
QCString biName=bi->name;
bool explicitGlobalScope=FALSE;
//printf("findClassRelation: biName=`%s'\n",biName.data());
@@ -4728,12 +4617,12 @@ static bool findClassRelation(
explicitGlobalScope=TRUE;
}
- EntryNav *parentNode=rootNav->parent();
+ Entry *parentNode=root->parent();
bool lastParent=FALSE;
do // for each parent scope, starting with the largest scope
// (in case of nested classes)
{
- QCString scopeName= parentNode ? parentNode->name().data() : "";
+ QCString scopeName= parentNode ? parentNode->name.data() : "";
int scopeOffset=explicitGlobalScope ? 0 : scopeName.length();
do // try all parent scope prefixes, starting with the largest scope
{
@@ -4772,18 +4661,18 @@ static bool findClassRelation(
// ) // Check for base class with the same name.
// // If found then look in the outer scope for a match
// // and prevent recursion.
- if (!isRecursiveBaseClass(rootNav->name(),baseClassName)
+ if (!isRecursiveBaseClass(root->name,baseClassName)
|| explicitGlobalScope
// sadly isRecursiveBaseClass always true for UNO IDL ifc/svc members
// (i.e. this is needed for addInterfaceOrServiceToServiceOrSingleton)
- || (rootNav->lang()==SrcLangExt_IDL &&
- (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC ||
- rootNav->section()==Entry::INCLUDED_SERVICE_SEC)))
+ || (root->lang==SrcLangExt_IDL &&
+ (root->section==Entry::EXPORTED_INTERFACE_SEC ||
+ root->section==Entry::INCLUDED_SERVICE_SEC)))
{
Debug::print(
Debug::Classes,0," class relation %s inherited/used by %s found (%s and %s) templSpec='%s'\n",
qPrint(baseClassName),
- qPrint(rootNav->name()),
+ qPrint(root->name),
(bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
(bi->virt==Normal)?"normal":"virtual",
qPrint(templSpec)
@@ -4956,7 +4845,7 @@ static bool findClassRelation(
baseClass=Doxygen::hiddenClasses->find(baseClassName);
if (baseClass==0)
{
- baseClass=new ClassDef(root->fileName,root->startLine,root->startColumn,
+ baseClass=createClassDef(root->fileName,root->startLine,root->startColumn,
baseClassName,
ClassDef::Class);
Doxygen::hiddenClasses->append(baseClassName,baseClass);
@@ -4971,7 +4860,7 @@ static bool findClassRelation(
// baseClassName.data(),baseClass,biName.data(),templSpec.data());
if (baseClass==0)
{
- baseClass=new ClassDef(root->fileName,root->startLine,root->startColumn,
+ baseClass=createClassDef(root->fileName,root->startLine,root->startColumn,
baseClassName,
ClassDef::Class);
Doxygen::classSDict->append(baseClassName,baseClass);
@@ -4980,7 +4869,7 @@ static bool findClassRelation(
int si = baseClassName.findRev("::");
if (si!=-1) // class is nested
{
- Definition *sd = findScopeFromQualifiedName(Doxygen::globalScope,baseClassName.left(si),0,rootNav->tagInfo());
+ Definition *sd = findScopeFromQualifiedName(Doxygen::globalScope,baseClassName.left(si),0,root->tagInfo);
if (sd==0 || sd==Doxygen::globalScope) // outer scope not found
{
baseClass->setArtificial(TRUE); // see bug678139
@@ -4997,7 +4886,7 @@ static bool findClassRelation(
// add this class as super class to the base class
baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
// the undocumented base was found in this file
- baseClass->insertUsedFile(rootNav->fileDef());
+ baseClass->insertUsedFile(root->fileDef());
baseClass->setOuterScope(Doxygen::globalScope);
if (baseClassName.right(2)=="-p")
{
@@ -5051,22 +4940,19 @@ static bool findClassRelation(
//----------------------------------------------------------------------
// Computes the base and super classes for each class in the tree
-static bool isClassSection(EntryNav *rootNav)
+static bool isClassSection(Entry *root)
{
- if ( !rootNav->name().isEmpty() )
+ if ( !root->name.isEmpty() )
{
- if (rootNav->section() & Entry::COMPOUND_MASK)
+ if (root->section & Entry::COMPOUND_MASK)
// is it a compound (class, struct, union, interface ...)
{
return TRUE;
}
- else if (rootNav->section() & Entry::COMPOUNDDOC_MASK)
+ else if (root->section & Entry::COMPOUNDDOC_MASK)
// is it a documentation block with inheritance info.
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
bool extends = root->extends->count()>0;
- rootNav->releaseEntry();
if (extends) return TRUE;
}
}
@@ -5076,22 +4962,22 @@ static bool isClassSection(EntryNav *rootNav)
/*! Builds a dictionary of all entry nodes in the tree starting with \a root
*/
-static void findClassEntries(EntryNav *rootNav)
+static void findClassEntries(Entry *root)
{
- if (isClassSection(rootNav))
+ if (isClassSection(root))
{
- g_classEntries.insert(rootNav->name(),rootNav);
+ g_classEntries.insert(root->name,root);
}
- RECURSE_ENTRYTREE(findClassEntries,rootNav);
+ RECURSE_ENTRYTREE(findClassEntries,root);
}
-static QCString extractClassName(EntryNav *rootNav)
+static QCString extractClassName(Entry *root)
{
// strip any anonymous scopes first
- QCString bName=stripAnonymousNamespaceScope(rootNav->name());
+ QCString bName=stripAnonymousNamespaceScope(root->name);
bName=stripTemplateSpecifiersFromScope(bName);
int i;
- if ((rootNav->lang()==SrcLangExt_CSharp || rootNav->lang()==SrcLangExt_Java) &&
+ if ((root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java) &&
(i=bName.find('<'))!=-1)
{
// a Java/C# generic class looks like a C++ specialization, so we need to strip the
@@ -5109,20 +4995,18 @@ static QCString extractClassName(EntryNav *rootNav)
static void findInheritedTemplateInstances()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
- QDictIterator<EntryNav> edi(g_classEntries);
- EntryNav *rootNav;
- for (;(rootNav=edi.current());++edi)
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
+ QDictIterator<Entry> edi(g_classEntries);
+ Entry *root;
+ for (;(root=edi.current());++edi)
{
ClassDef *cd;
- QCString bName = extractClassName(rootNav);
+ QCString bName = extractClassName(root);
Debug::print(Debug::Classes,0," Inheritance: Class %s : \n",qPrint(bName));
if ((cd=getClass(bName)))
{
- rootNav->loadEntry(g_storage);
//printf("Class %s %d\n",cd->name().data(),root->extends->count());
- findBaseClassesForClass(rootNav,cd,cd,cd,TemplateInstances,FALSE);
- rootNav->releaseEntry();
+ findBaseClassesForClass(root,cd,cd,cd,TemplateInstances,FALSE);
}
}
}
@@ -5130,20 +5014,18 @@ static void findInheritedTemplateInstances()
static void findUsedTemplateInstances()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
- QDictIterator<EntryNav> edi(g_classEntries);
- EntryNav *rootNav;
- for (;(rootNav=edi.current());++edi)
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
+ QDictIterator<Entry> edi(g_classEntries);
+ Entry *root;
+ for (;(root=edi.current());++edi)
{
ClassDef *cd;
- QCString bName = extractClassName(rootNav);
+ QCString bName = extractClassName(root);
Debug::print(Debug::Classes,0," Usage: Class %s : \n",qPrint(bName));
if ((cd=getClass(bName)))
{
- rootNav->loadEntry(g_storage);
- findUsedClassesForClass(rootNav,cd,cd,cd,TRUE);
+ findUsedClassesForClass(root,cd,cd,cd,TRUE);
cd->addTypeConstraints();
- rootNav->releaseEntry();
}
}
}
@@ -5151,20 +5033,18 @@ static void findUsedTemplateInstances()
static void computeClassRelations()
{
ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
- QDictIterator<EntryNav> edi(g_classEntries);
- EntryNav *rootNav;
- for (;(rootNav=edi.current());++edi)
+ for (cli.toFirst();cli.current();++cli) cli.current()->setVisited(FALSE);
+ QDictIterator<Entry> edi(g_classEntries);
+ Entry *root;
+ for (;(root=edi.current());++edi)
{
ClassDef *cd;
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
- QCString bName = extractClassName(rootNav);
+ QCString bName = extractClassName(root);
Debug::print(Debug::Classes,0," Relations: Class %s : \n",qPrint(bName));
if ((cd=getClass(bName)))
{
- findBaseClassesForClass(rootNav,cd,cd,cd,DocumentedOnly,FALSE);
+ findBaseClassesForClass(root,cd,cd,cd,DocumentedOnly,FALSE);
}
int numMembers = cd && cd->memberNameInfoSDict() ? cd->memberNameInfoSDict()->count() : 0;
if ((cd==0 || (!cd->hasDocumentation() && !cd->isReference())) && numMembers>0 &&
@@ -5182,20 +5062,15 @@ static void computeClassRelations()
root->name.data()
);
}
-
- rootNav->releaseEntry();
}
}
static void computeTemplateClassRelations()
{
- QDictIterator<EntryNav> edi(g_classEntries);
- EntryNav *rootNav;
- for (;(rootNav=edi.current());++edi)
+ QDictIterator<Entry> edi(g_classEntries);
+ Entry *root;
+ for (;(root=edi.current());++edi)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
QCString bName=stripAnonymousNamespaceScope(root->name);
bName=stripTemplateSpecifiersFromScope(bName);
ClassDef *cd=getClass(bName);
@@ -5250,10 +5125,10 @@ static void computeTemplateClassRelations()
tbi.name = substituteTemplateArgumentsInString(bi->name,tl,templArgs);
// find a documented base class in the correct scope
- if (!findClassRelation(rootNav,cd,tcd,&tbi,actualTemplateNames,DocumentedOnly,FALSE))
+ if (!findClassRelation(root,cd,tcd,&tbi,actualTemplateNames,DocumentedOnly,FALSE))
{
// no documented base class -> try to find an undocumented one
- findClassRelation(rootNav,cd,tcd,&tbi,actualTemplateNames,Undocumented,TRUE);
+ findClassRelation(root,cd,tcd,&tbi,actualTemplateNames,Undocumented,TRUE);
}
delete actualTemplateNames;
}
@@ -5261,8 +5136,6 @@ static void computeTemplateClassRelations()
delete templArgs;
} // class has no base classes
}
-
- rootNav->releaseEntry();
}
}
@@ -5306,28 +5179,6 @@ static void computeMemberReferences()
static void addListReferences()
{
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- md->visited=FALSE;
- }
- }
- MemberNameSDict::Iterator fmnli(*Doxygen::functionNameSDict);
- for (fmnli.toFirst();(mn=fmnli.current());++fmnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- md->visited=FALSE;
- }
- }
-
ClassSDict::Iterator cli(*Doxygen::classSDict);
ClassDef *cd=0;
for (cli.toFirst();(cd=cli.current());++cli)
@@ -5413,14 +5264,13 @@ static void generateXRefPages()
// set the function declaration of the member to `funcDecl'. If the boolean
// over_load is set the standard overload text is added.
-static void addMemberDocs(EntryNav *rootNav,
+static void addMemberDocs(Entry *root,
MemberDef *md, const char *funcDecl,
ArgumentList *al,
bool over_load,
NamespaceSDict *
)
{
- Entry *root = rootNav->entry();
//printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s' mSpec=%d\n",
// root->parent->name.data(),md->name().data(),md->argsString(),funcDecl,root->spec);
QCString fDecl=funcDecl;
@@ -5441,7 +5291,7 @@ static void addMemberDocs(EntryNav *rootNav,
if (!fullName.isEmpty()) fullName+="::";
fullName+=md->name();
- FileDef *rfd=rootNav->fileDef();
+ FileDef *rfd=root->fileDef();
// TODO determine scope based on root not md
Definition *rscope = md->getOuterScope();
@@ -5488,7 +5338,7 @@ static void addMemberDocs(EntryNav *rootNav,
if (
(md->inbodyDocumentation().isEmpty() ||
- !rootNav->parent()->name().isEmpty()
+ !root->parent()->name.isEmpty()
) && !root->inbodyDocs.isEmpty()
)
{
@@ -5570,7 +5420,7 @@ static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd,
// with name `name' and argument list `args' (for overloading) and
// function declaration `decl' to the corresponding member definition.
-static bool findGlobalMember(EntryNav *rootNav,
+static bool findGlobalMember(Entry *root,
const QCString &namespaceName,
const char *type,
const char *name,
@@ -5578,7 +5428,6 @@ static bool findGlobalMember(EntryNav *rootNav,
const char *,
const char *decl)
{
- Entry *root = rootNav->entry();
Debug::print(Debug::FindMembers,0,
"2. findGlobalMember(namespace=%s,type=%s,name=%s,tempArg=%s,decl=%s)\n",
qPrint(namespaceName),qPrint(type),qPrint(name),qPrint(tempArg),qPrint(decl));
@@ -5604,7 +5453,7 @@ static bool findGlobalMember(EntryNav *rootNav,
//printf("Namespace namespaceName=%s nd=%s\n",
// namespaceName.data(),nd ? nd->name().data() : "<none>");
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
//printf("File %s\n",fd ? fd->name().data() : "<none>");
NamespaceSDict *nl = fd ? fd->getUsedNamespaces() : 0;
//SDict<Definition> *cl = fd ? fd->getUsedClasses() : 0;
@@ -5679,7 +5528,7 @@ static bool findGlobalMember(EntryNav *rootNav,
if (matching) // add docs to the member
{
Debug::print(Debug::FindMembers,0,"5. Match found\n");
- addMemberDocs(rootNav,md,decl,root->argList,FALSE);
+ addMemberDocs(root,md,decl,root->argList,FALSE);
found=TRUE;
}
}
@@ -5743,7 +5592,7 @@ static bool scopeIsTemplate(Definition *d)
bool result=FALSE;
if (d && d->definitionType()==Definition::TypeClass)
{
- result = ((ClassDef*)d)->templateArguments() || scopeIsTemplate(d->getOuterScope());
+ result = (dynamic_cast<ClassDef*>(d))->templateArguments() || scopeIsTemplate(d->getOuterScope());
}
return result;
}
@@ -5889,14 +5738,12 @@ static void substituteTemplatesInArgList(
* The boolean \a isFunc is a hint that indicates that this is a function
* instead of a variable or typedef.
*/
-static void findMember(EntryNav *rootNav,
+static void findMember(Entry *root,
QCString funcDecl,
bool overloaded,
bool isFunc
)
{
- Entry *root = rootNav->entry();
-
Debug::print(Debug::FindMembers,0,
"findMember(root=%p,funcDecl=`%s',related=`%s',overload=%d,"
"isFunc=%d mGrpId=%d tArgList=%p (#=%d) "
@@ -6009,14 +5856,14 @@ static void findMember(EntryNav *rootNav,
}
}
- if (root->relates.isEmpty() && rootNav->parent() &&
- ((rootNav->parent()->section()&Entry::SCOPE_MASK) ||
- (rootNav->parent()->section()==Entry::OBJCIMPL_SEC)
+ if (root->relates.isEmpty() && root->parent() &&
+ ((root->parent()->section&Entry::SCOPE_MASK) ||
+ (root->parent()->section==Entry::OBJCIMPL_SEC)
) &&
- !rootNav->parent()->name().isEmpty()) // see if we can combine scopeName
+ !root->parent()->name.isEmpty()) // see if we can combine scopeName
// with the scope in which it was found
{
- QCString joinedName = rootNav->parent()->name()+"::"+scopeName;
+ QCString joinedName = root->parent()->name+"::"+scopeName;
if (!scopeName.isEmpty() &&
(getClass(joinedName) || Doxygen::namespaceSDict->find(joinedName)))
{
@@ -6024,12 +5871,12 @@ static void findMember(EntryNav *rootNav,
}
else
{
- scopeName = mergeScopes(rootNav->parent()->name(),scopeName);
+ scopeName = mergeScopes(root->parent()->name,scopeName);
}
}
else // see if we can prefix a namespace or class that is used from the file
{
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
if (fd)
{
NamespaceSDict *fnl = fd->getUsedNamespaces();
@@ -6235,7 +6082,7 @@ static void findMember(EntryNav *rootNav,
qPrint(md->argsString()),
qPrint(root->fileName));
//printf("Member %s (member scopeName=%s) (this scopeName=%s) classTempList=%s\n",md->name().data(),cd->name().data(),scopeName.data(),classTempList.data());
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
NamespaceDef *nd=0;
if (!namespaceName.isEmpty()) nd=getResolvedNamespace(namespaceName);
@@ -6377,7 +6224,7 @@ static void findMember(EntryNav *rootNav,
// TODO: copy other aspects?
root->protection=md->protection(); // copy protection level
- addMethodToClass(rootNav,cd,md->name(),isFriend);
+ addMethodToClass(root,cd,md->name(),isFriend);
return;
}
delete argList;
@@ -6385,7 +6232,7 @@ static void findMember(EntryNav *rootNav,
}
if (matching)
{
- addMemberDocs(rootNav,md,funcDecl,0,overloaded,0/* TODO */);
+ addMemberDocs(root,md,funcDecl,0,overloaded,0/* TODO */);
count++;
memFound=TRUE;
}
@@ -6396,8 +6243,8 @@ static void findMember(EntryNav *rootNav,
noMatchCount++;
}
}
- if (count==0 && rootNav->parent() &&
- rootNav->parent()->section()==Entry::OBJCIMPL_SEC)
+ if (count==0 && root->parent() &&
+ root->parent()->section==Entry::OBJCIMPL_SEC)
{
goto localObjCMethod;
}
@@ -6420,7 +6267,7 @@ static void findMember(EntryNav *rootNav,
if (root->tArgLists && templAl!=0 &&
root->tArgLists->getLast()->count()<=templAl->count())
{
- addMethodToClass(rootNav,ccd,md->name(),isFriend);
+ addMethodToClass(root,ccd,md->name(),isFriend);
return;
}
if (md->argsString()==argListToString(root->argList,TRUE,FALSE))
@@ -6450,7 +6297,7 @@ static void findMember(EntryNav *rootNav,
{
// we didn't find an actual match on argument lists, but there is only 1 member with this
// name in the same scope, so that has to be the one.
- addMemberDocs(rootNav,umd,funcDecl,0,overloaded,0);
+ addMemberDocs(root,umd,funcDecl,0,overloaded,0);
return;
}
else if (candidates>1 && ecd && emd)
@@ -6458,7 +6305,7 @@ static void findMember(EntryNav *rootNav,
// we didn't find a unique match using type resolution,
// but one of the matches has the exact same signature so
// we take that one.
- addMemberDocs(rootNav,emd,funcDecl,0,overloaded,0);
+ addMemberDocs(root,emd,funcDecl,0,overloaded,0);
return;
}
}
@@ -6541,14 +6388,14 @@ static void findMember(EntryNav *rootNav,
MemberType mtype=MemberType_Function;
ArgumentList *tArgList = new ArgumentList;
// getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
- md=new MemberDef(
+ md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
declMd ? declMd->protection() : root->protection,
root->virt,root->stat,Member,
mtype,tArgList,root->argList,root->metaData);
//printf("new specialized member %s args=`%s'\n",md->name().data(),funcArgs.data());
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setLanguage(root->lang);
md->setId(root->id);
md->setMemberClass(cd);
@@ -6566,7 +6413,7 @@ static void findMember(EntryNav *rootNav,
md->setPrototype(root->proto,root->fileName,root->startLine,root->startColumn);
md->addSectionsToDefinition(root->anchors);
md->setBodySegment(root->bodyLine,root->endBodyLine);
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
md->setBodyDef(fd);
md->setMemberSpecifiers(root->spec);
md->setMemberGroupId(root->mGrpId);
@@ -6611,12 +6458,12 @@ static void findMember(EntryNav *rootNav,
ArgumentList *tArgList =
getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
//printf("new related member %s args=`%s'\n",md->name().data(),funcArgs.data());
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,Related,
mtype,tArgList,root->argList,root->metaData);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setLanguage(root->lang);
md->setId(root->id);
md->setTypeConstraints(root->typeConstr);
@@ -6636,7 +6483,7 @@ static void findMember(EntryNav *rootNav,
md->setPrototype(root->proto,root->fileName,root->startLine,root->startColumn);
md->addSectionsToDefinition(root->anchors);
md->setBodySegment(root->bodyLine,root->endBodyLine);
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
md->setBodyDef(fd);
md->setMemberSpecifiers(root->spec);
md->setMemberGroupId(root->mGrpId);
@@ -6648,7 +6495,7 @@ static void findMember(EntryNav *rootNav,
}
else // unrelated function with the same name as a member
{
- if (!findGlobalMember(rootNav,namespaceName,funcType,funcName,funcTempList,funcArgs,funcDecl))
+ if (!findGlobalMember(root,namespaceName,funcType,funcName,funcTempList,funcArgs,funcDecl))
{
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
@@ -6686,7 +6533,7 @@ static void findMember(EntryNav *rootNav,
}
}
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
if ((mn=Doxygen::memberNameSDict->find(funcName))==0)
{
@@ -6712,7 +6559,7 @@ static void findMember(EntryNav *rootNav,
{
//printf("addMemberDocs for related member %s\n",root->name.data());
//rmd->setMemberDefTemplateArguments(root->mtArgList);
- addMemberDocs(rootNav,rmd,funcDecl,0,overloaded);
+ addMemberDocs(root,rmd,funcDecl,0,overloaded);
}
}
@@ -6747,7 +6594,7 @@ static void findMember(EntryNav *rootNav,
// this accurately reflects the template arguments of
// the related function, which don't have to do with
// those of the related class.
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,
@@ -6775,7 +6622,7 @@ static void findMember(EntryNav *rootNav,
//
md->setDefinitionTemplateParameterLists(root->tArgLists);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
@@ -6861,7 +6708,7 @@ static void findMember(EntryNav *rootNav,
}
if (root->relatesType == Duplicate)
{
- if (!findGlobalMember(rootNav,namespaceName,funcType,funcName,funcTempList,funcArgs,funcDecl))
+ if (!findGlobalMember(root,namespaceName,funcType,funcName,funcTempList,funcArgs,funcDecl))
{
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
@@ -6881,7 +6728,7 @@ static void findMember(EntryNav *rootNav,
);
}
}
- else if (rootNav->parent() && rootNav->parent()->section()==Entry::OBJCIMPL_SEC)
+ else if (root->parent() && root->parent()->section==Entry::OBJCIMPL_SEC)
{
localObjCMethod:
ClassDef *cd;
@@ -6891,12 +6738,12 @@ localObjCMethod:
Debug::print(Debug::FindMembers,0,"4. Local objective C method %s\n"
" scopeName=%s className=%s\n",qPrint(root->name),qPrint(scopeName),qPrint(className));
//printf("Local objective C method `%s' of class `%s' found\n",root->name.data(),cd->name().data());
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,Member,
MemberType_Function,0,root->argList,root->metaData);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setLanguage(root->lang);
md->setId(root->id);
md->makeImplementationDetail();
@@ -6913,7 +6760,7 @@ localObjCMethod:
md->setPrototype(root->proto,root->fileName,root->startLine,root->startColumn);
md->addSectionsToDefinition(root->anchors);
md->setBodySegment(root->bodyLine,root->endBodyLine);
- FileDef *fd=rootNav->fileDef();
+ FileDef *fd=root->fileDef();
md->setBodyDef(fd);
md->setMemberSpecifiers(root->spec);
md->setMemberGroupId(root->mGrpId);
@@ -6938,7 +6785,7 @@ localObjCMethod:
}
else // unrelated not overloaded member found
{
- bool globMem = findGlobalMember(rootNav,namespaceName,funcType,funcName,funcTempList,funcArgs,funcDecl);
+ bool globMem = findGlobalMember(root,namespaceName,funcType,funcName,funcTempList,funcArgs,funcDecl);
if (className.isEmpty() && !globMem)
{
warn(root->fileName,root->startLine,
@@ -6967,22 +6814,21 @@ localObjCMethod:
// find the members corresponding to the different documentation blocks
// that are extracted from the sources.
-static void filterMemberDocumentation(EntryNav *rootNav)
+static void filterMemberDocumentation(Entry *root)
{
- Entry *root = rootNav->entry();
int i=-1,l;
Debug::print(Debug::FindMembers,0,
"findMemberDocumentation(): root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->spec=%lld root->mGrpId=%d\n",
qPrint(root->type),qPrint(root->inside),qPrint(root->name),qPrint(root->args),root->section,root->spec,root->mGrpId
);
- //printf("rootNav->parent()->name()=%s\n",rootNav->parent()->name().data());
+ //printf("root->parent()->name=%s\n",root->parent()->name.data());
bool isFunc=TRUE;
if (root->relatesType == Duplicate && !root->relates.isEmpty())
{
QCString tmp = root->relates;
root->relates.resize(0);
- filterMemberDocumentation(rootNav);
+ filterMemberDocumentation(root);
root->relates = tmp;
}
@@ -7011,17 +6857,17 @@ static void filterMemberDocumentation(EntryNav *rootNav)
//if (root->relates.length()) printf(" Relates %s\n",root->relates.data());
if (root->type.isEmpty())
{
- findMember(rootNav,root->name+root->args+root->exception,FALSE,isFunc);
+ findMember(root,root->name+root->args+root->exception,FALSE,isFunc);
}
else
{
- findMember(rootNav,root->type+" "+root->name+root->args+root->exception,FALSE,isFunc);
+ findMember(root,root->type+" "+root->name+root->args+root->exception,FALSE,isFunc);
}
}
else if (root->section==Entry::OVERLOADDOC_SEC)
{
//printf("Overloaded member %s found\n",root->name.data());
- findMember(rootNav,root->name,TRUE,isFunc);
+ findMember(root,root->name,TRUE,isFunc);
}
else if
((root->section==Entry::FUNCTION_SEC // function
@@ -7041,7 +6887,7 @@ static void filterMemberDocumentation(EntryNav *rootNav)
if (root->type=="friend class" || root->type=="friend struct" ||
root->type=="friend union")
{
- findMember(rootNav,
+ findMember(root,
root->type+" "+
root->name,
FALSE,FALSE);
@@ -7049,7 +6895,7 @@ static void filterMemberDocumentation(EntryNav *rootNav)
}
else if (!root->type.isEmpty())
{
- findMember(rootNav,
+ findMember(root,
root->type+" "+
root->inside+
root->name+
@@ -7059,7 +6905,7 @@ static void filterMemberDocumentation(EntryNav *rootNav)
}
else
{
- findMember(rootNav,
+ findMember(root,
root->inside+
root->name+
root->args+
@@ -7069,18 +6915,18 @@ static void filterMemberDocumentation(EntryNav *rootNav)
}
else if (root->section==Entry::DEFINE_SEC && !root->relates.isEmpty())
{
- findMember(rootNav,root->name+root->args,FALSE,!root->args.isEmpty());
+ findMember(root,root->name+root->args,FALSE,!root->args.isEmpty());
}
else if (root->section==Entry::VARIABLEDOC_SEC)
{
//printf("Documentation for variable %s found\n",root->name.data());
//if (!root->relates.isEmpty()) printf(" Relates %s\n",root->relates.data());
- findMember(rootNav,root->name,FALSE,FALSE);
+ findMember(root,root->name,FALSE,FALSE);
}
else if (root->section==Entry::EXPORTED_INTERFACE_SEC ||
root->section==Entry::INCLUDED_SERVICE_SEC)
{
- findMember(rootNav,root->type + " " + root->name,FALSE,FALSE);
+ findMember(root,root->type + " " + root->name,FALSE,FALSE);
}
else
{
@@ -7089,62 +6935,53 @@ static void filterMemberDocumentation(EntryNav *rootNav)
}
}
-static void findMemberDocumentation(EntryNav *rootNav)
+static void findMemberDocumentation(Entry *root)
{
- if (rootNav->section()==Entry::MEMBERDOC_SEC ||
- rootNav->section()==Entry::OVERLOADDOC_SEC ||
- rootNav->section()==Entry::FUNCTION_SEC ||
- rootNav->section()==Entry::VARIABLE_SEC ||
- rootNav->section()==Entry::VARIABLEDOC_SEC ||
- rootNav->section()==Entry::DEFINE_SEC ||
- rootNav->section()==Entry::INCLUDED_SERVICE_SEC ||
- rootNav->section()==Entry::EXPORTED_INTERFACE_SEC
+ if (root->section==Entry::MEMBERDOC_SEC ||
+ root->section==Entry::OVERLOADDOC_SEC ||
+ root->section==Entry::FUNCTION_SEC ||
+ root->section==Entry::VARIABLE_SEC ||
+ root->section==Entry::VARIABLEDOC_SEC ||
+ root->section==Entry::DEFINE_SEC ||
+ root->section==Entry::INCLUDED_SERVICE_SEC ||
+ root->section==Entry::EXPORTED_INTERFACE_SEC
)
{
- rootNav->loadEntry(g_storage);
-
- filterMemberDocumentation(rootNav);
-
- rootNav->releaseEntry();
+ filterMemberDocumentation(root);
}
- if (rootNav->children())
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
+ EntryListIterator eli(*root->children());
+ Entry *e;
for (;(e=eli.current());++eli)
{
- if (e->section()!=Entry::ENUM_SEC) findMemberDocumentation(e);
+ if (e->section!=Entry::ENUM_SEC) findMemberDocumentation(e);
}
}
}
//----------------------------------------------------------------------
-static void findObjCMethodDefinitions(EntryNav *rootNav)
+static void findObjCMethodDefinitions(Entry *root)
{
- if (rootNav->children())
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *objCImplNav;
- for (;(objCImplNav=eli.current());++eli)
+ EntryListIterator eli(*root->children());
+ Entry *objCImpl;
+ for (;(objCImpl=eli.current());++eli)
{
- if (objCImplNav->section()==Entry::OBJCIMPL_SEC && objCImplNav->children())
+ if (objCImpl->section==Entry::OBJCIMPL_SEC && objCImpl->children())
{
- EntryNavListIterator seli(*objCImplNav->children());
- EntryNav *objCMethodNav;
- for (;(objCMethodNav=seli.current());++seli)
+ EntryListIterator seli(*objCImpl->children());
+ Entry *objCMethod;
+ for (;(objCMethod=seli.current());++seli)
{
- if (objCMethodNav->section()==Entry::FUNCTION_SEC)
+ if (objCMethod->section==Entry::FUNCTION_SEC)
{
- objCMethodNav->loadEntry(g_storage);
- Entry *objCMethod = objCMethodNav->entry();
-
//Printf(" Found ObjC method definition %s\n",objCMethod->name.data());
- findMember(objCMethodNav, objCMethod->type+" "+objCImplNav->name()+"::"+
+ findMember(objCMethod, objCMethod->type+" "+objCImpl->name+"::"+
objCMethod->name+" "+objCMethod->args, FALSE,TRUE);
objCMethod->section=Entry::EMPTY_SEC;
-
- objCMethodNav->releaseEntry();
}
}
}
@@ -7155,13 +6992,10 @@ static void findObjCMethodDefinitions(EntryNav *rootNav)
//----------------------------------------------------------------------
// find and add the enumeration to their classes, namespaces or files
-static void findEnums(EntryNav *rootNav)
+static void findEnums(Entry *root)
{
- if (rootNav->section()==Entry::ENUM_SEC)
+ if (root->section==Entry::ENUM_SEC)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
MemberDef *md=0;
ClassDef *cd=0;
FileDef *fd=0;
@@ -7184,11 +7018,11 @@ static void findEnums(EntryNav *rootNav)
}
else // no scope, check the scope in which the docs where found
{
- if (( rootNav->parent()->section() & Entry::SCOPE_MASK )
- && !rootNav->parent()->name().isEmpty()
+ if (( root->parent()->section & Entry::SCOPE_MASK )
+ && !root->parent()->name.isEmpty()
) // found enum docs inside a compound
{
- scope=rootNav->parent()->name();
+ scope=root->parent()->name;
if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
}
name=root->name;
@@ -7219,7 +7053,7 @@ static void findEnums(EntryNav *rootNav)
}
else // found a global enum
{
- fd=rootNav->fileDef();
+ fd=root->fileDef();
mnsd=Doxygen::functionNameSDict;
isGlobal=TRUE;
}
@@ -7227,19 +7061,19 @@ static void findEnums(EntryNav *rootNav)
if (!name.isEmpty())
{
// new enum type
- md = new MemberDef(
+ md = createMemberDef(
root->fileName,root->startLine,root->startColumn,
0,name,0,0,
root->protection,Normal,FALSE,
isMemberOf ? Foreign : isRelated ? Related : Member,
MemberType_Enumeration,
0,0,root->metaData);
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setLanguage(root->lang);
md->setId(root->id);
if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(rootNav->fileDef());
+ md->setBodyDef(root->fileDef());
md->setMemberSpecifiers(root->spec);
md->setEnumBaseType(root->args);
//printf("Enum %s definition at line %d of %s: protection=%d scope=%s\n",
@@ -7283,9 +7117,9 @@ static void findEnums(EntryNav *rootNav)
if (isGlobal)
{
if (!defSet) md->setDefinition(name+baseType);
- if (fd==0 && rootNav->parent())
+ if (fd==0 && root->parent())
{
- fd=rootNav->parent()->fileDef();
+ fd=root->parent()->fileDef();
}
if (fd)
{
@@ -7328,24 +7162,20 @@ static void findEnums(EntryNav *rootNav)
}
addMemberToGroups(root,md);
}
- rootNav->releaseEntry();
}
else
{
- RECURSE_ENTRYTREE(findEnums,rootNav);
+ RECURSE_ENTRYTREE(findEnums,root);
}
}
//----------------------------------------------------------------------
-static void addEnumValuesToEnums(EntryNav *rootNav)
+static void addEnumValuesToEnums(Entry *root)
{
- if (rootNav->section()==Entry::ENUM_SEC)
+ if (root->section==Entry::ENUM_SEC)
// non anonymous enumeration
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
ClassDef *cd=0;
FileDef *fd=0;
NamespaceDef *nd=0;
@@ -7366,11 +7196,11 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
}
else // no scope, check the scope in which the docs where found
{
- if (( rootNav->parent()->section() & Entry::SCOPE_MASK )
- && !rootNav->parent()->name().isEmpty()
+ if (( root->parent()->section & Entry::SCOPE_MASK )
+ && !root->parent()->name.isEmpty()
) // found enum docs inside a compound
{
- scope=rootNav->parent()->name();
+ scope=root->parent()->name;
if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
}
name=root->name;
@@ -7401,7 +7231,7 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
}
else // found a global enum
{
- fd=rootNav->fileDef();
+ fd=root->fileDef();
//printf("Enum in file `%s': `%s'\n",fd->name().data(),name.data());
mnsd=Doxygen::functionNameSDict;
isGlobal=TRUE;
@@ -7417,16 +7247,16 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
MemberDef *md;
for (mni.toFirst(); (md=mni.current()) ; ++mni) // for each enum in this list
{
- if (md->isEnumerate() && rootNav->children())
+ if (md->isEnumerate() && root->children())
{
- //printf(" enum with %d children\n",rootNav->children()->count());
- EntryNavListIterator eli(*rootNav->children()); // for each enum value
- EntryNav *e;
+ //printf(" enum with %d children\n",root->children()->count());
+ EntryListIterator eli(*root->children()); // for each enum value
+ Entry *e;
for (;(e=eli.current());++eli)
{
SrcLangExt sle;
if (
- (sle=rootNav->lang())==SrcLangExt_CSharp ||
+ (sle=root->lang)==SrcLangExt_CSharp ||
sle==SrcLangExt_Java ||
sle==SrcLangExt_XML ||
(root->spec&Entry::Strong)
@@ -7435,12 +7265,10 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
// Unlike classic C/C++ enums, for C++11, C# & Java enum
// values are only visible inside the enum scope, so we must create
// them here and only add them to the enum
- e->loadEntry(g_storage);
- Entry *root = e->entry();
- //printf("md->qualifiedName()=%s rootNav->name()=%s tagInfo=%p name=%s\n",
- // md->qualifiedName().data(),rootNav->name().data(),rootNav->tagInfo(),root->name.data());
- QCString qualifiedName = substitute(rootNav->name(),"::",".");
- if (!scope.isEmpty() && rootNav->tagInfo())
+ //printf("md->qualifiedName()=%s e->name=%s tagInfo=%p name=%s\n",
+ // md->qualifiedName().data(),e->name.data(),e->tagInfo,e->name.data());
+ QCString qualifiedName = substitute(root->name,"::",".");
+ if (!scope.isEmpty() && root->tagInfo)
{
qualifiedName=substitute(scope,"::",".")+"."+qualifiedName;
}
@@ -7448,54 +7276,53 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
qualifiedName // enum value scope matches that of the enum
)
{
- QCString fileName = root->fileName;
- if (fileName.isEmpty() && rootNav->tagInfo())
+ QCString fileName = e->fileName;
+ if (fileName.isEmpty() && e->tagInfo)
{
- fileName = rootNav->tagInfo()->tagName;
+ fileName = e->tagInfo->tagName;
}
- MemberDef *fmd=new MemberDef(
- fileName,root->startLine,root->startColumn,
- root->type,root->name,root->args,0,
- root->protection, Normal,root->stat,Member,
- MemberType_EnumValue,0,0,root->metaData);
+ MemberDef *fmd=createMemberDef(
+ fileName,e->startLine,e->startColumn,
+ e->type,e->name,e->args,0,
+ e->protection, Normal,e->stat,Member,
+ MemberType_EnumValue,0,0,e->metaData);
if (md->getClassDef()) fmd->setMemberClass(md->getClassDef());
else if (md->getNamespaceDef()) fmd->setNamespace(md->getNamespaceDef());
else if (md->getFileDef()) fmd->setFileDef(md->getFileDef());
fmd->setOuterScope(md->getOuterScope());
- fmd->setTagInfo(e->tagInfo());
- fmd->setLanguage(root->lang);
- fmd->setId(root->id);
- fmd->setDocumentation(root->doc,root->docFile,root->docLine);
- fmd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- fmd->addSectionsToDefinition(root->anchors);
- fmd->setInitializer(root->initializer);
- fmd->setMaxInitLines(root->initLines);
- fmd->setMemberGroupId(root->mGrpId);
- fmd->setExplicitExternal(root->explicitExternal,fileName,root->startLine,root->startColumn);
- fmd->setRefItems(root->sli);
+ fmd->setTagInfo(e->tagInfo);
+ fmd->setLanguage(e->lang);
+ fmd->setId(e->id);
+ fmd->setDocumentation(e->doc,e->docFile,e->docLine);
+ fmd->setBriefDescription(e->brief,e->briefFile,e->briefLine);
+ fmd->addSectionsToDefinition(e->anchors);
+ fmd->setInitializer(e->initializer);
+ fmd->setMaxInitLines(e->initLines);
+ fmd->setMemberGroupId(e->mGrpId);
+ fmd->setExplicitExternal(e->explicitExternal,fileName,e->startLine,e->startColumn);
+ fmd->setRefItems(e->sli);
fmd->setAnchor();
md->insertEnumField(fmd);
fmd->setEnumScope(md,TRUE);
- MemberName *mn=mnsd->find(root->name);
+ MemberName *mn=mnsd->find(e->name);
if (mn)
{
mn->append(fmd);
}
else
{
- mn = new MemberName(root->name);
+ mn = new MemberName(e->name);
mn->append(fmd);
- mnsd->append(root->name,mn);
+ mnsd->append(e->name,mn);
}
}
- e->releaseEntry();
}
else
{
//printf("e->name=%s isRelated=%d\n",e->name().data(),isRelated);
MemberName *fmn=0;
MemberNameSDict *emnsd = isRelated ? Doxygen::functionNameSDict : mnsd;
- if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()]))
+ if (!e->name.isEmpty() && (fmn=(*emnsd)[e->name]))
// get list of members with the same name as the field
{
MemberNameIterator fmni(*fmn);
@@ -7554,12 +7381,10 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
}
}
}
-
- rootNav->releaseEntry();
}
else
{
- RECURSE_ENTRYTREE(addEnumValuesToEnums,rootNav);
+ RECURSE_ENTRYTREE(addEnumValuesToEnums,root);
}
}
@@ -7567,16 +7392,13 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
//----------------------------------------------------------------------
// find the documentation blocks for the enumerations
-static void findEnumDocumentation(EntryNav *rootNav)
+static void findEnumDocumentation(Entry *root)
{
- if (rootNav->section()==Entry::ENUMDOC_SEC
- && !rootNav->name().isEmpty()
- && rootNav->name().at(0)!='@' // skip anonymous enums
+ if (root->section==Entry::ENUMDOC_SEC
+ && !root->name.isEmpty()
+ && root->name.at(0)!='@' // skip anonymous enums
)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
//printf("Found docs for enum with name `%s' in context %s\n",
// root->name.data(),root->parent->name.data());
int i;
@@ -7592,12 +7414,12 @@ static void findEnumDocumentation(EntryNav *rootNav)
{
name=root->name;
}
- if (( rootNav->parent()->section() & Entry::SCOPE_MASK )
- && !rootNav->parent()->name().isEmpty()
+ if (( root->parent()->section & Entry::SCOPE_MASK )
+ && !root->parent()->name.isEmpty()
) // found enum docs inside a compound
{
if (!scope.isEmpty()) scope.prepend("::");
- scope.prepend(rootNav->parent()->name());
+ scope.prepend(root->parent()->name);
}
ClassDef *cd=getClass(scope);
@@ -7620,7 +7442,7 @@ static void findEnumDocumentation(EntryNav *rootNav)
{
// documentation outside a compound overrides the documentation inside it
#if 0
- if (!md->documentation() || rootNav->parent()->name().isEmpty())
+ if (!md->documentation() || root->parent()->name.isEmpty())
#endif
{
md->setDocumentation(root->doc,root->docFile,root->docLine);
@@ -7630,13 +7452,13 @@ static void findEnumDocumentation(EntryNav *rootNav)
// brief descriptions inside a compound override the documentation
// outside it
#if 0
- if (!md->briefDescription() || !rootNav->parent()->name().isEmpty())
+ if (!md->briefDescription() || !root->parent()->name.isEmpty())
#endif
{
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
}
- if (!md->inbodyDocumentation() || !rootNav->parent()->name().isEmpty())
+ if (!md->inbodyDocumentation() || !root->parent()->name.isEmpty())
{
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
}
@@ -7702,10 +7524,8 @@ static void findEnumDocumentation(EntryNav *rootNav)
);
}
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(findEnumDocumentation,rootNav);
+ RECURSE_ENTRYTREE(findEnumDocumentation,root);
}
// search for each enum (member or function) in mnl if it has documented
@@ -7818,6 +7638,7 @@ static void computeMemberRelations()
// );
if (md!=bmd && bmcd && mcd && bmcd!=mcd &&
(bmd->virtualness()!=Normal || bmd->getLanguage()==SrcLangExt_Python ||
+ bmd->getLanguage()==SrcLangExt_Java || bmd->getLanguage()==SrcLangExt_PHP ||
bmcd->compoundType()==ClassDef::Interface ||
bmcd->compoundType()==ClassDef::Protocol
) &&
@@ -8322,7 +8143,7 @@ static void combineUsingRelations()
FileDef *fd;
for (fni.toFirst();(fd=fni.current());++fni)
{
- fd->visited=FALSE;
+ fd->setVisited(FALSE);
}
}
for (fnli.toFirst();(fn=fnli.current());++fnli)
@@ -8340,7 +8161,7 @@ static void combineUsingRelations()
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) ; ++nli )
{
- nd->visited=FALSE;
+ nd->setVisited(FALSE);
}
for (nli.toFirst() ; (nd=nli.current()) ; ++nli )
{
@@ -8571,27 +8392,24 @@ static void flushUnresolvedRelations()
//----------------------------------------------------------------------------
-static void findDefineDocumentation(EntryNav *rootNav)
+static void findDefineDocumentation(Entry *root)
{
- if ((rootNav->section()==Entry::DEFINEDOC_SEC ||
- rootNav->section()==Entry::DEFINE_SEC) && !rootNav->name().isEmpty()
+ if ((root->section==Entry::DEFINEDOC_SEC ||
+ root->section==Entry::DEFINE_SEC) && !root->name.isEmpty()
)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
//printf("found define `%s' `%s' brief=`%s' doc=`%s'\n",
// root->name.data(),root->args.data(),root->brief.data(),root->doc.data());
- if (rootNav->tagInfo() && !root->name.isEmpty()) // define read from a tag file
+ if (root->tagInfo && !root->name.isEmpty()) // define read from a tag file
{
- MemberDef *md=new MemberDef(rootNav->tagInfo()->tagName,1,1,
+ MemberDef *md=createMemberDef(root->tagInfo->tagName,1,1,
"#define",root->name,root->args,0,
Public,Normal,FALSE,Member,MemberType_Define,0,0,"");
- md->setTagInfo(rootNav->tagInfo());
+ md->setTagInfo(root->tagInfo);
md->setLanguage(root->lang);
//printf("Searching for `%s' fd=%p\n",filePathName.data(),fd);
- md->setFileDef(rootNav->parent()->fileDef());
+ md->setFileDef(root->parent()->fileDef());
//printf("Adding member=%s\n",md->name().data());
MemberName *mn;
if ((mn=Doxygen::functionNameSDict->find(root->name)))
@@ -8629,7 +8447,7 @@ static void findDefineDocumentation(EntryNav *rootNav)
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
}
md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(rootNav->fileDef());
+ md->setBodyDef(root->fileDef());
md->addSectionsToDefinition(root->anchors);
md->setMaxInitLines(root->initLines);
md->setRefItems(root->sli);
@@ -8673,7 +8491,7 @@ static void findDefineDocumentation(EntryNav *rootNav)
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
}
md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(rootNav->fileDef());
+ md->setBodyDef(root->fileDef());
md->addSectionsToDefinition(root->anchors);
md->setRefItems(root->sli);
md->setLanguage(root->lang);
@@ -8707,21 +8525,16 @@ static void findDefineDocumentation(EntryNav *rootNav)
);
}
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(findDefineDocumentation,rootNav);
+ RECURSE_ENTRYTREE(findDefineDocumentation,root);
}
//----------------------------------------------------------------------------
-static void findDirDocumentation(EntryNav *rootNav)
+static void findDirDocumentation(Entry *root)
{
- if (rootNav->section() == Entry::DIRDOC_SEC)
+ if (root->section == Entry::DIRDOC_SEC)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
QCString normalizedName = root->name;
normalizedName = substitute(normalizedName,"\\","/");
//printf("root->docFile=%s normalizedName=%s\n",
@@ -8773,34 +8586,25 @@ static void findDirDocumentation(EntryNav *rootNav)
warn(root->fileName,root->startLine,"No matching "
"directory found for command \\dir %s\n",normalizedName.data());
}
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(findDirDocumentation,rootNav);
+ RECURSE_ENTRYTREE(findDirDocumentation,root);
}
//----------------------------------------------------------------------------
// create a (sorted) list of separate documentation pages
-static void buildPageList(EntryNav *rootNav)
+static void buildPageList(Entry *root)
{
- if (rootNav->section() == Entry::PAGEDOC_SEC)
+ if (root->section == Entry::PAGEDOC_SEC)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
if (!root->name.isEmpty())
{
- addRelatedPage(rootNav);
+ addRelatedPage(root);
}
-
- rootNav->releaseEntry();
}
- else if (rootNav->section() == Entry::MAINPAGEDOC_SEC)
+ else if (root->section == Entry::MAINPAGEDOC_SEC)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
QCString title=root->args.stripWhiteSpace();
if (title.isEmpty()) title=theTranslator->trMainPage();
//QCString name = Config_getBool(GENERATE_TREEVIEW)?"main":"index";
@@ -8812,33 +8616,28 @@ static void buildPageList(EntryNav *rootNav)
title,
0,0
);
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(buildPageList,rootNav);
+ RECURSE_ENTRYTREE(buildPageList,root);
}
// search for the main page defined in this project
-static void findMainPage(EntryNav *rootNav)
+static void findMainPage(Entry *root)
{
- if (rootNav->section() == Entry::MAINPAGEDOC_SEC)
+ if (root->section == Entry::MAINPAGEDOC_SEC)
{
- rootNav->loadEntry(g_storage);
-
- if (Doxygen::mainPage==0 && rootNav->tagInfo()==0)
+ if (Doxygen::mainPage==0 && root->tagInfo==0)
{
- Entry *root = rootNav->entry();
//printf("Found main page! \n======\n%s\n=======\n",root->doc.data());
QCString title=root->args.stripWhiteSpace();
//QCString indexName=Config_getBool(GENERATE_TREEVIEW)?"main":"index";
QCString indexName="index";
- Doxygen::mainPage = new PageDef(root->docFile,root->docLine,
+ Doxygen::mainPage = createPageDef(root->docFile,root->docLine,
indexName, root->brief+root->doc+root->inbodyDocs,title);
//setFileNameForSections(root->anchors,"index",Doxygen::mainPage);
Doxygen::mainPage->setBriefDescription(root->brief,root->briefFile,root->briefLine);
Doxygen::mainPage->setFileName(indexName);
Doxygen::mainPage->setLocalToc(root->localToc);
- addPageToContext(Doxygen::mainPage,rootNav);
+ addPageToContext(Doxygen::mainPage,root);
SectionInfo *si = Doxygen::sectionDict->find(Doxygen::mainPage->name());
if (si)
@@ -8865,46 +8664,37 @@ static void findMainPage(EntryNav *rootNav)
Doxygen::mainPage->addSectionsToDefinition(root->anchors);
}
}
- else if (rootNav->tagInfo()==0)
+ else if (root->tagInfo==0)
{
- Entry *root = rootNav->entry();
warn(root->fileName,root->startLine,
"found more than one \\mainpage comment block! (first occurrence: %s, line %d), Skipping current block!",
Doxygen::mainPage->docFile().data(),Doxygen::mainPage->docLine());
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(findMainPage,rootNav);
+ RECURSE_ENTRYTREE(findMainPage,root);
}
// search for the main page imported via tag files and add only the section labels
-static void findMainPageTagFiles(EntryNav *rootNav)
+static void findMainPageTagFiles(Entry *root)
{
- if (rootNav->section() == Entry::MAINPAGEDOC_SEC)
+ if (root->section == Entry::MAINPAGEDOC_SEC)
{
- rootNav->loadEntry(g_storage);
-
- if (Doxygen::mainPage && rootNav->tagInfo())
+ if (Doxygen::mainPage && root->tagInfo)
{
- Entry *root = rootNav->entry();
Doxygen::mainPage->addSectionsToDefinition(root->anchors);
}
}
- RECURSE_ENTRYTREE(findMainPageTagFiles,rootNav);
+ RECURSE_ENTRYTREE(findMainPageTagFiles,root);
}
-static void computePageRelations(EntryNav *rootNav)
+static void computePageRelations(Entry *root)
{
- if ((rootNav->section()==Entry::PAGEDOC_SEC ||
- rootNav->section()==Entry::MAINPAGEDOC_SEC
+ if ((root->section==Entry::PAGEDOC_SEC ||
+ root->section==Entry::MAINPAGEDOC_SEC
)
- && !rootNav->name().isEmpty()
+ && !root->name.isEmpty()
)
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
PageDef *pd = root->section==Entry::PAGEDOC_SEC ?
Doxygen::pageSDict->find(root->name) :
Doxygen::mainPage;
@@ -8915,7 +8705,14 @@ static void computePageRelations(EntryNav *rootNav)
for (bii.toFirst();(bi=bii.current());++bii)
{
PageDef *subPd = Doxygen::pageSDict->find(bi->name);
- if (subPd)
+ if (pd==subPd)
+ {
+ err("page defined at line %d of file %s with label %s is a direct "
+ "subpage of itself! Please remove this cyclic dependency.\n",
+ pd->docLine(),pd->docFile().data(),pd->name().data());
+ exit(1);
+ }
+ else if (subPd)
{
pd->addInnerCompound(subPd);
//printf("*** Added subpage relation: %s->%s\n",
@@ -8923,10 +8720,8 @@ static void computePageRelations(EntryNav *rootNav)
}
}
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(computePageRelations,rootNav);
+ RECURSE_ENTRYTREE(computePageRelations,root);
}
static void checkPageRelations()
@@ -9000,7 +8795,7 @@ static void resolveUserReferences()
GroupDef *gd=0;
if (si->definition->definitionType()==Definition::TypeMember)
{
- gd = ((MemberDef *)si->definition)->getGroupDef();
+ gd = (dynamic_cast<MemberDef *>(si->definition))->getGroupDef();
}
if (gd)
@@ -9045,13 +8840,10 @@ static void generatePageDocs()
//----------------------------------------------------------------------------
// create a (sorted) list & dictionary of example pages
-static void buildExampleList(EntryNav *rootNav)
+static void buildExampleList(Entry *root)
{
- if ((rootNav->section()==Entry::EXAMPLE_SEC || rootNav->section()==Entry::EXAMPLE_LINENO_SEC) && !rootNav->name().isEmpty())
+ if ((root->section==Entry::EXAMPLE_SEC || root->section==Entry::EXAMPLE_LINENO_SEC) && !root->name.isEmpty())
{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
if (Doxygen::exampleSDict->find(root->name))
{
warn(root->fileName,root->startLine,
@@ -9062,38 +8854,36 @@ static void buildExampleList(EntryNav *rootNav)
}
else
{
- PageDef *pd=new PageDef(root->fileName,root->startLine,
+ PageDef *pd=createPageDef(root->fileName,root->startLine,
root->name,root->brief+root->doc+root->inbodyDocs,root->args);
pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE));
pd->addSectionsToDefinition(root->anchors);
pd->setLanguage(root->lang);
- pd->setShowLineNo(rootNav->section()==Entry::EXAMPLE_LINENO_SEC);
+ pd->setShowLineNo(root->section==Entry::EXAMPLE_LINENO_SEC);
Doxygen::exampleSDict->inSort(root->name,pd);
//we don't add example to groups
//addExampleToGroups(root,pd);
}
-
- rootNav->releaseEntry();
}
- RECURSE_ENTRYTREE(buildExampleList,rootNav);
+ RECURSE_ENTRYTREE(buildExampleList,root);
}
//----------------------------------------------------------------------------
// prints the Entry tree (for debugging)
-void printNavTree(EntryNav *rootNav,int indent)
+void printNavTree(Entry *root,int indent)
{
QCString indentStr;
indentStr.fill(' ',indent);
msg("%s%s (sec=0x%x)\n",
indentStr.isEmpty()?"":indentStr.data(),
- rootNav->name().isEmpty()?"<empty>":rootNav->name().data(),
- rootNav->section());
- if (rootNav->children())
+ root->name.isEmpty()?"<empty>":root->name.data(),
+ root->section);
+ if (root->children())
{
- EntryNavListIterator eli(*rootNav->children());
+ EntryListIterator eli(*root->children());
for (;eli.current();++eli) printNavTree(eli.current(),indent+2);
}
}
@@ -9485,7 +9275,7 @@ static ParserInterface *getParserForFile(const char *fn)
}
static void parseFile(ParserInterface *parser,
- Entry *root,EntryNav *rootNav,FileDef *fd,const char *fn,
+ Entry *root,FileDef *fd,const char *fn,
bool sameTu,QStrList &filesInSameTu)
{
#if USE_LIBCLANG
@@ -9538,17 +9328,15 @@ static void parseFile(ParserInterface *parser,
fd->getAllIncludeFilesRecursively(filesInSameTu);
}
+ Entry *fileRoot = new Entry;
// use language parse to parse the file
- parser->parseInput(fileName,convBuf.data(),root,sameTu,filesInSameTu);
-
- // store the Entry tree in a file and create an index to
- // navigate/load entries
- //printf("root->createNavigationIndex for %s\n",fd->name().data());
- root->createNavigationIndex(rootNav,g_storage,fd);
+ parser->parseInput(fileName,convBuf.data(),fileRoot,sameTu,filesInSameTu);
+ fileRoot->setFileDef(fd);
+ root->addSubEntry(fileRoot);
}
//! parse the list of input files
-static void parseFiles(Entry *root,EntryNav *rootNav)
+static void parseFiles(Entry *root)
{
#if USE_LIBCLANG
static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING);
@@ -9576,7 +9364,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav)
QStrList filesInSameTu;
ParserInterface * parser = getParserForFile(s->data());
parser->startTranslationUnit(s->data());
- parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+ parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
//printf(" got %d extra files in tu\n",filesInSameTu.count());
// Now process any include files in the same translation unit
@@ -9591,7 +9379,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav)
{
QStrList moreFiles;
//printf(" Processing %s in same translation unit as %s\n",incFile,s->data());
- parseFile(parser,root,rootNav,ifd,incFile,TRUE,moreFiles);
+ parseFile(parser,root,ifd,incFile,TRUE,moreFiles);
g_processedFiles.insert(incFile,(void*)0x8);
}
}
@@ -9612,7 +9400,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav)
ASSERT(fd!=0);
ParserInterface * parser = getParserForFile(s->data());
parser->startTranslationUnit(s->data());
- parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+ parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
parser->finishTranslationUnit();
g_processedFiles.insert(*s,(void*)0x8);
}
@@ -9631,7 +9419,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav)
ASSERT(fd!=0);
ParserInterface * parser = getParserForFile(s->data());
parser->startTranslationUnit(s->data());
- parseFile(parser,root,rootNav,fd,s->data(),FALSE,filesInSameTu);
+ parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
}
}
}
@@ -9774,7 +9562,7 @@ int readDir(QFileInfo *fi,
//printf("New file %s\n",name.data());
if (fnDict)
{
- FileDef *fd=new FileDef(cfi->dirPath().utf8()+"/",name);
+ FileDef *fd=createFileDef(cfi->dirPath().utf8()+"/",name);
FileName *fn=0;
if (!name.isEmpty() && (fn=(*fnDict)[name]))
{
@@ -9873,7 +9661,7 @@ int readFileOrDirectory(const char *s,
//printf("New file %s\n",name.data());
if (fnDict)
{
- FileDef *fd=new FileDef(dirPath+"/",name);
+ FileDef *fd=createFileDef(dirPath+"/",name);
FileName *fn=0;
if (!name.isEmpty() && (fn=(*fnDict)[name]))
{
@@ -10021,7 +9809,7 @@ static void escapeAliases()
while ((in=value.find("^^",p))!=-1)
{
newValue+=value.mid(p,in-p);
- newValue+="@_linebr";
+ newValue+="\\\\_linebr ";
p=in+2;
}
newValue+=value.mid(p,value.length()-p);
@@ -10076,7 +9864,7 @@ static void dumpSymbol(FTextStream &t,Definition *d)
QCString anchor;
if (d->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef *)d;
+ MemberDef *md = dynamic_cast<MemberDef *>(d);
anchor=":"+md->anchor();
}
QCString scope;
@@ -10741,7 +10529,7 @@ void checkConfiguration()
/** adjust globals that depend on configuration settings. */
void adjustConfiguration()
{
- Doxygen::globalScope = new NamespaceDef("<globalScope>",1,1,"<globalScope>");
+ Doxygen::globalScope = createNamespaceDef("<globalScope>",1,1,"<globalScope>");
Doxygen::inputNameDict = new FileNameDict(10007);
Doxygen::includeNameDict = new FileNameDict(10007);
Doxygen::exampleNameDict = new FileNameDict(1009);
@@ -11177,7 +10965,7 @@ void parseInput()
* Initialize global lists and dictionaries
**************************************************************************/
- Doxygen::symbolStorage = new Store;
+ //Doxygen::symbolStorage = new Store;
// also scale lookup cache with SYMBOL_CACHE_SIZE
int cacheSize = Config_getInt(LOOKUP_CACHE_SIZE);
@@ -11199,11 +10987,11 @@ void parseInput()
Doxygen::filterDBFileName.sprintf("doxygen_filterdb_%d.tmp",pid);
Doxygen::filterDBFileName.prepend(outputDirectory+"/");
- if (Doxygen::symbolStorage->open(Doxygen::objDBFileName)==-1)
- {
- err("Failed to open temporary file %s\n",Doxygen::objDBFileName.data());
- exit(1);
- }
+// if (Doxygen::symbolStorage->open(Doxygen::objDBFileName)==-1)
+// {
+// err("Failed to open temporary file %s\n",Doxygen::objDBFileName.data());
+// exit(1);
+// }
@@ -11331,17 +11119,7 @@ void parseInput()
* Handle Tag Files *
**************************************************************************/
- g_storage = new FileStorage;
- g_storage->setName(Doxygen::entryDBFileName);
- if (!g_storage->open(IO_WriteOnly))
- {
- err("Failed to create temporary storage file %s\n",
- Doxygen::entryDBFileName.data());
- exit(1);
- }
Entry *root=new Entry;
- EntryNav *rootNav = new EntryNav(0,root);
- rootNav->setEntry(root);
msg("Reading and parsing tag files\n");
QStrList &tagFileList = Config_getList(TAGFILES);
@@ -11349,7 +11127,6 @@ void parseInput()
while (s)
{
readTagFile(root,s);
- root->createNavigationIndex(rootNav,g_storage,0);
s=tagFileList.next();
}
@@ -11359,12 +11136,11 @@ void parseInput()
if (Config_getBool(BUILTIN_STL_SUPPORT))
{
- addSTLClasses(rootNav);
+ addSTLClasses(root);
}
g_s.begin("Parsing files\n");
- parseFiles(root,rootNav);
- g_storage->close();
+ parseFiles(root);
g_s.end();
// we are done with input scanning now, so free up the buffers used by flex
@@ -11373,46 +11149,39 @@ void parseInput()
scanFreeScanner();
pyscanFreeScanner();
- if (!g_storage->open(IO_ReadOnly))
- {
- err("Failed to open temporary storage file %s for reading",
- Doxygen::entryDBFileName.data());
- exit(1);
- }
-
/**************************************************************************
* Gather information *
**************************************************************************/
g_s.begin("Building group list...\n");
- buildGroupList(rootNav);
- organizeSubGroups(rootNav);
+ buildGroupList(root);
+ organizeSubGroups(root);
g_s.end();
g_s.begin("Building directory list...\n");
buildDirectories();
- findDirDocumentation(rootNav);
+ findDirDocumentation(root);
g_s.end();
g_s.begin("Building namespace list...\n");
- buildNamespaceList(rootNav);
- findUsingDirectives(rootNav);
+ buildNamespaceList(root);
+ findUsingDirectives(root);
g_s.end();
g_s.begin("Building file list...\n");
- buildFileList(rootNav);
+ buildFileList(root);
g_s.end();
//generateFileTree();
g_s.begin("Building class list...\n");
- buildClassList(rootNav);
+ buildClassList(root);
g_s.end();
g_s.begin("Associating documentation with classes...\n");
- buildClassDocList(rootNav);
+ buildClassDocList(root);
// build list of using declarations here (global list)
- buildListOfUsingDecls(rootNav);
+ buildListOfUsingDecls(root);
g_s.end();
g_s.begin("Computing nesting relations for classes...\n");
@@ -11429,11 +11198,11 @@ void parseInput()
g_usingDeclarations.clear();
g_s.begin("Building example list...\n");
- buildExampleList(rootNav);
+ buildExampleList(root);
g_s.end();
g_s.begin("Searching for enumerations...\n");
- findEnums(rootNav);
+ findEnums(root);
g_s.end();
// Since buildVarList calls isVarWithConstructor
@@ -11441,24 +11210,24 @@ void parseInput()
// typedefs first so the relations between classes via typedefs
// are properly resolved. See bug 536385 for an example.
g_s.begin("Searching for documented typedefs...\n");
- buildTypedefList(rootNav);
+ buildTypedefList(root);
g_s.end();
if (Config_getBool(OPTIMIZE_OUTPUT_SLICE))
{
g_s.begin("Searching for documented sequences...\n");
- buildSequenceList(rootNav);
+ buildSequenceList(root);
g_s.end();
g_s.begin("Searching for documented dictionaries...\n");
- buildDictionaryList(rootNav);
+ buildDictionaryList(root);
g_s.end();
}
g_s.begin("Searching for members imported via using declarations...\n");
// this should be after buildTypedefList in order to properly import
// used typedefs
- findUsingDeclarations(rootNav);
+ findUsingDeclarations(root);
g_s.end();
g_s.begin("Searching for included using directives...\n");
@@ -11466,14 +11235,14 @@ void parseInput()
g_s.end();
g_s.begin("Searching for documented variables...\n");
- buildVarList(rootNav);
+ buildVarList(root);
g_s.end();
g_s.begin("Building interface member list...\n");
- buildInterfaceAndServiceList(rootNav); // UNO IDL
+ buildInterfaceAndServiceList(root); // UNO IDL
g_s.begin("Building member list...\n"); // using class info only !
- buildFunctionList(rootNav);
+ buildFunctionList(root);
g_s.end();
g_s.begin("Searching for friends...\n");
@@ -11481,11 +11250,11 @@ void parseInput()
g_s.end();
g_s.begin("Searching for documented defines...\n");
- findDefineDocumentation(rootNav);
+ findDefineDocumentation(root);
g_s.end();
g_s.begin("Computing class inheritance relations...\n");
- findClassEntries(rootNav);
+ findClassEntries(root);
findInheritedTemplateInstances();
g_s.end();
@@ -11516,14 +11285,14 @@ void parseInput()
g_s.end();
g_s.begin("Add enum values to enums...\n");
- addEnumValuesToEnums(rootNav);
- findEnumDocumentation(rootNav);
+ addEnumValuesToEnums(root);
+ findEnumDocumentation(root);
g_s.end();
g_s.begin("Searching for member function documentation...\n");
- findObjCMethodDefinitions(rootNav);
- findMemberDocumentation(rootNav); // may introduce new members !
- findUsingDeclImports(rootNav); // may introduce new members !
+ findObjCMethodDefinitions(root);
+ findMemberDocumentation(root); // may introduce new members !
+ findUsingDeclImports(root); // may introduce new members !
transferRelatedFunctionDocumentation();
transferFunctionDocumentation();
@@ -11536,21 +11305,21 @@ void parseInput()
g_s.end();
g_s.begin("Building page list...\n");
- buildPageList(rootNav);
+ buildPageList(root);
g_s.end();
g_s.begin("Search for main page...\n");
- findMainPage(rootNav);
- findMainPageTagFiles(rootNav);
+ findMainPage(root);
+ findMainPageTagFiles(root);
g_s.end();
g_s.begin("Computing page relations...\n");
- computePageRelations(rootNav);
+ computePageRelations(root);
checkPageRelations();
g_s.end();
g_s.begin("Determining the scope of groups...\n");
- findGroupScope(rootNav);
+ findGroupScope(root);
g_s.end();
g_s.begin("Sorting lists...\n");
@@ -11560,12 +11329,6 @@ void parseInput()
Doxygen::classSDict->sort();
g_s.end();
- msg("Freeing entry tree\n");
- delete rootNav;
- g_storage->close();
- delete g_storage;
- g_storage=0;
-
QDir thisDir;
thisDir.remove(Doxygen::entryDBFileName);
@@ -11741,11 +11504,6 @@ void generateOutput()
* Generate documentation *
**************************************************************************/
- if (generateHtml) writeDoxFont(Config_getString(HTML_OUTPUT));
- if (generateLatex) writeDoxFont(Config_getString(LATEX_OUTPUT));
- if (generateDocbook) writeDoxFont(Config_getString(DOCBOOK_OUTPUT));
- if (generateRtf) writeDoxFont(Config_getString(RTF_OUTPUT));
-
g_s.begin("Generating style sheet...\n");
//printf("writing style info\n");
g_outputList->writeStyleInfo(0); // write first part
@@ -11868,18 +11626,6 @@ void generateOutput()
writeTagFile();
g_s.end();
- if (Config_getBool(DOT_CLEANUP))
- {
- if (generateHtml)
- removeDoxFont(Config_getString(HTML_OUTPUT));
- if (generateRtf)
- removeDoxFont(Config_getString(RTF_OUTPUT));
- if (generateLatex)
- removeDoxFont(Config_getString(LATEX_OUTPUT));
- if (generateDocbook)
- removeDoxFont(Config_getString(DOCBOOK_OUTPUT));
- }
-
if (Config_getBool(GENERATE_XML))
{
g_s.begin("Generating XML output...\n");
@@ -12048,7 +11794,7 @@ void generateOutput()
cleanUpDoxygen();
finializeSearchIndexer();
- Doxygen::symbolStorage->close();
+// Doxygen::symbolStorage->close();
QDir thisDir;
thisDir.remove(Doxygen::objDBFileName);
thisDir.remove(Doxygen::filterDBFileName);
@@ -12056,7 +11802,7 @@ void generateOutput()
QTextCodec::deleteAllCodecs();
delete Doxygen::symbolMap;
delete Doxygen::clangUsrMap;
- delete Doxygen::symbolStorage;
+// delete Doxygen::symbolStorage;
g_successfulRun=TRUE;
}
diff --git a/src/doxygen.md b/src/doxygen.md
index 17144ec..7680a94 100644
--- a/src/doxygen.md
+++ b/src/doxygen.md
@@ -2,17 +2,17 @@ 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. This document is intended for
developers who want to work on doxygen. Users of doxygen are referred to the
-[User Manual](http://www.doxygen.org/manual.html).
+[User Manual](http://www.doxygen.nl/manual/index.html).
The generic starting point of the application is of course the main() function.
Configuration options
----------------------
+=====================
Configuration file data is stored in singleton class Config and can be
accessed using wrapper macros
@@ -22,20 +22,20 @@ 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
+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(). The script `configgen.py` will also
create the documentation for the configuration items, creating the file
`config.doc`.
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
@@ -71,7 +71,7 @@ extracted like section labels, xref items, and formulas.
Also Markdown markup is processed using processMarkdown() during this pass.
Resolving relations
--------------------
+===================
The Entry objects created and filled during parsing are stored on disk
(to keep memory needs low). The name, parent/child relation, and
@@ -98,7 +98,7 @@ Finally the data for members of classes, namespaces, and files is stored in
the subclass MemberDef.
Producing debug output
-----------------------
+======================
Within doxygen there are a number of ways to obtain debug output. Besides the
invasive method of putting print statements in the code there are a number of
@@ -174,12 +174,12 @@ easy ways to get debug information.
problem occurs. This makes it easier to select the file to be compiled in `lex` debug mode.
Producing output
-----------------
+================
TODO
Topics TODO
------------
+===========
- Grouping of files in Model / Parser / Generator categories
- Index files based on IndexIntf
- HTML navigation
diff --git a/src/emoji.cpp b/src/emoji.cpp
index c332083..311f748 100644
--- a/src/emoji.cpp
+++ b/src/emoji.cpp
@@ -1578,7 +1578,7 @@ void EmojiEntityMapper::writeEmojiFile(QFile &file)
/*! @brief Access routine to the unicode sequence for the Emoji entity
*
- * @param symb code of the requested Emoji entity returned by symbol2index()
+ * @param index code of the requested Emoji entity returned by symbol2index()
* @return the unicode sequence of the Emoji entity,
*/
const char *EmojiEntityMapper::unicode(int index) const
@@ -1588,7 +1588,7 @@ const char *EmojiEntityMapper::unicode(int index) const
/*! @brief Access routine to the name of the Emoji entity
*
- * @param symb code of the requested Emoji entity returned by symbol2index()
+ * @param index code of the requested Emoji entity returned by symbol2index()
* @return the name of the Emoji entity in GitHub format (i.e. :smile:)
*/
const char *EmojiEntityMapper::name(int index) const
diff --git a/src/entry.cpp b/src/entry.cpp
index b3693cd..e2a21c6 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -18,11 +18,9 @@
#include <stdlib.h>
#include <qfile.h>
#include "entry.h"
-#include "marshal.h"
#include "util.h"
#include "section.h"
#include "doxygen.h"
-#include "filestorage.h"
#include "arguments.h"
#include "config.h"
//------------------------------------------------------------------
@@ -185,6 +183,8 @@ Entry::Entry(const Entry &e)
tArgLists = copyArgumentLists(e.tArgLists);
}
+ m_fileDef = e.m_fileDef;
+
}
Entry::~Entry()
@@ -281,6 +281,7 @@ void Entry::reset()
if (sli) { delete sli; sli=0; }
if (typeConstr) { delete typeConstr; typeConstr=0; }
//if (mtArgList) { delete mtArgList; mtArgList=0; }
+ m_fileDef = 0;
}
@@ -289,31 +290,20 @@ int Entry::getSize()
return sizeof(Entry);
}
-void Entry::createSubtreeIndex(EntryNav *nav,FileStorage *storage,FileDef *fd)
+void Entry::setFileDef(FileDef *fd)
{
- EntryNav *childNav = new EntryNav(nav,this);
- nav->addChild(childNav);
- childNav->setFileDef(fd);
- childNav->saveEntry(this,storage);
+ m_fileDef = fd;
if (m_sublist)
{
- //printf("saveEntry: %d children\n",node->sublist->count());
QListIterator<Entry> eli(*m_sublist);
Entry *childNode;
for (eli.toFirst();(childNode=eli.current());++eli)
{
- childNode->createSubtreeIndex(childNav,storage,fd);
+ childNode->setFileDef(fd);
}
- //m_sublist->setAutoDelete(FALSE);
- m_sublist->clear();
}
}
-void Entry::createNavigationIndex(EntryNav *rootNav,FileStorage *storage,FileDef *fd)
-{
- createSubtreeIndex(rootNav,storage,fd);
-}
-
void Entry::addSpecialListItem(const char *listName,int itemId)
{
if (sli==0)
@@ -334,107 +324,3 @@ Entry *Entry::removeSubEntry(Entry *e)
}
//------------------------------------------------------------------
-
-
-EntryNav::EntryNav(EntryNav *parent, Entry *e)
- : m_parent(parent), m_subList(0), m_section(e->section), m_type(e->type),
- m_name(e->name), m_fileDef(0), m_lang(e->lang),
- m_info(0), m_offset(-1), m_noLoad(FALSE)
-{
- if (e->tagInfo)
- {
- m_tagInfo = new TagInfo;
- m_tagInfo->tagName = e->tagInfo->tagName;
- m_tagInfo->fileName = e->tagInfo->fileName;
- m_tagInfo->anchor = e->tagInfo->anchor;
- if (e->tagInfo)
- {
- //printf("tagInfo %p: tagName=%s fileName=%s anchor=%s\n",
- // e->tagInfo,
- // e->tagInfo->tagName.data(),
- // e->tagInfo->fileName.data(),
- // e->tagInfo->anchor.data());
- }
- }
- else
- {
- m_tagInfo = 0;
- }
-}
-
-EntryNav::~EntryNav()
-{
- delete m_subList;
- delete m_info;
- delete m_tagInfo;
-}
-
-void EntryNav::addChild(EntryNav *e)
-{
- if (m_subList==0)
- {
- m_subList = new QList<EntryNav>;
- m_subList->setAutoDelete(TRUE);
- }
- m_subList->append(e);
-}
-
-bool EntryNav::loadEntry(FileStorage *storage)
-{
- if (m_noLoad)
- {
- return TRUE;
- }
- if (m_offset==-1)
- {
- //printf("offset not set!\n");
- return FALSE;
- }
- //delete m_info;
- //printf("EntryNav::loadEntry: new entry %p: %s\n",m_info,m_name.data());
- //m_info->tagInfo = m_tagInfo;
- //if (m_parent)
- //{
- // m_info->parent = m_parent->m_info;
- //}
- //m_info->parent = 0;
- //printf("load entry: seek to %llx\n",m_offset);
- if (!storage->seek(m_offset))
- {
- //printf("seek failed!\n");
- return FALSE;
- }
- if (m_info) delete m_info;
- m_info = unmarshalEntry(storage);
- m_info->name = m_name;
- m_info->type = m_type;
- m_info->section = m_section;
- return TRUE;
-}
-
-bool EntryNav::saveEntry(Entry *e,FileStorage *storage)
-{
- m_offset = storage->pos();
- //printf("EntryNav::saveEntry offset=%llx\n",m_offset);
- marshalEntry(storage,e);
- return TRUE;
-}
-
-void EntryNav::releaseEntry()
-{
- if (!m_noLoad)
- {
- //printf("EntryNav::releaseEntry %p\n",m_info);
- delete m_info;
- m_info=0;
- }
-}
-
-void EntryNav::setEntry(Entry *e)
-{
- delete m_info;
- m_info = e;
- //printf("EntryNav::setEntry %p\n",e);
- m_noLoad=TRUE;
-}
-
diff --git a/src/entry.h b/src/entry.h
index ad91d0d..8810c18 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -25,7 +25,6 @@
struct SectionInfo;
class QFile;
-class EntryNav;
class FileDef;
class FileStorage;
class StorageIntf;
@@ -199,7 +198,6 @@ class Entry
int getSize();
void addSpecialListItem(const char *listName,int index);
- void createNavigationIndex(EntryNav *rootNav,FileStorage *storage,FileDef *fd);
// while parsing a file these function can be used to navigate/build the tree
void setParent(Entry *parent) { m_parent = parent; }
@@ -226,11 +224,9 @@ class Entry
*/
void reset();
- /*! Serialize this entry to a persistent storage stream. */
- void marshall(StorageIntf *);
-
- /*! Reinitialize this entry from a persistent storage stream. */
- void unmarshall(StorageIntf *);
+ void changeSection(int sec) { section = sec; }
+ void setFileDef(FileDef *fd);
+ FileDef *fileDef() const { return m_fileDef; }
public:
@@ -326,64 +322,13 @@ class Entry
}
private:
- void createSubtreeIndex(EntryNav *nav,FileStorage *storage,FileDef *fd);
Entry *m_parent; //!< parent node in the tree
QList<Entry> *m_sublist; //!< entries that are children of this one
Entry &operator=(const Entry &);
+ FileDef *m_fileDef;
};
-/** 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:
- EntryNav(EntryNav *parent,Entry *e);
- ~EntryNav();
- void addChild(EntryNav *);
- bool loadEntry(FileStorage *storage);
- bool saveEntry(Entry *e,FileStorage *storage);
- void setEntry(Entry *e);
- void releaseEntry();
- void changeSection(int section) { m_section = section; }
- void setFileDef(FileDef *fd) { m_fileDef = fd; }
-
- Entry *entry() const { return m_info; }
- int section() const { return m_section; }
- SrcLangExt lang() const { return m_lang; }
- const QCString &type() const { return m_type; }
- const QCString &name() const { return m_name; }
- TagInfo *tagInfo() const { return m_tagInfo; }
- const QList<EntryNav> *children() const { return m_subList; }
- EntryNav *parent() const { return m_parent; }
- FileDef *fileDef() const { return m_fileDef; }
-
- private:
-
- // navigation
- EntryNav *m_parent; //!< parent node in the tree
- QList<EntryNav> *m_subList; //!< entries that are children of this one
-
- // identification
- int m_section; //!< entry type (see Sections);
- QCString m_type; //!< member type
- QCString m_name; //!< member name
- TagInfo *m_tagInfo; //!< tag file info
- FileDef *m_fileDef;
- SrcLangExt m_lang; //!< programming language in which this entry was found
-
- Entry *m_info;
- int64 m_offset;
- bool m_noLoad;
-};
-
-
typedef QList<Entry> EntryList;
typedef QListIterator<Entry> EntryListIterator;
-typedef QList<EntryNav> EntryNavList;
-typedef QListIterator<EntryNav> EntryNavListIterator;
-
#endif
diff --git a/src/filedef.cpp b/src/filedef.cpp
index f9f68d1..130679e 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -43,6 +43,144 @@
#include "config.h"
#include "clangparser.h"
#include "settings.h"
+#include "definitionimpl.h"
+
+//---------------------------------------------------------------------------
+
+class FileDefImpl : public DefinitionImpl, public FileDef
+{
+ public:
+ FileDefImpl(const char *p,const char *n,const char *ref=0,const char *dn=0);
+ virtual ~FileDefImpl();
+
+ virtual DefType definitionType() const { return TypeFile; }
+ virtual QCString name() const;
+ virtual QCString displayName(bool=TRUE) const { return name(); }
+ virtual QCString fileName() const { return m_fileName; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual QCString getSourceFileBase() const;
+ virtual QCString includeName() const;
+ virtual QCString includeDependencyGraphFileName() const;
+ virtual QCString includedByDependencyGraphFileName() const;
+ virtual QCString absFilePath() const { return m_filePath; }
+ virtual const QCString &docName() const { return m_docname; }
+ virtual bool isSource() const { return m_isSource; }
+ virtual bool isDocumentationFile() const;
+ virtual Definition *getSourceDefinition(int lineNr) const;
+ virtual MemberDef *getSourceMember(int lineNr) const;
+ virtual QCString getPath() const { return m_path; }
+ virtual QCString getVersion() const { return m_fileVersion; }
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const { return isLinkableInProject() || isReference(); }
+ virtual bool isIncluded(const QCString &name) const;
+ virtual PackageDef *packageDef() const { return m_package; }
+ virtual DirDef *getDirDef() const { return m_dir; }
+ virtual NamespaceSDict *getUsedNamespaces() const;
+ virtual SDict<Definition> *getUsedClasses() const { return m_usingDeclList; }
+ virtual QList<IncludeInfo> *includeFileList() const { return m_includeList; }
+ virtual QList<IncludeInfo> *includedByFileList() const { return m_includedByList; }
+ virtual void getAllIncludeFilesRecursively(QStrList &incFiles) const;
+ virtual MemberList *getMemberList(MemberListType lt) const;
+ virtual const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+ virtual MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
+ virtual NamespaceSDict *getNamespaceSDict() const { return m_namespaceSDict; }
+ virtual ClassSDict *getClassSDict() const { return m_classSDict; }
+ virtual QCString title() const;
+ virtual bool hasDetailedDescription() const;
+ virtual QCString fileVersion() const;
+ virtual bool subGrouping() const { return m_subGrouping; }
+ virtual void addSourceRef(int line,Definition *d,MemberDef *md);
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeMemberPages(OutputList &ol);
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
+ virtual void writeSummaryLinks(OutputList &ol);
+ virtual void writeTagFile(FTextStream &t);
+ virtual void startParsing();
+ virtual void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
+ virtual void parseSource(bool sameTu,QStrList &filesInSameTu);
+ virtual void finishParsing();
+ virtual void setDiskName(const QCString &name);
+ virtual void insertMember(MemberDef *md);
+ virtual void insertClass(ClassDef *cd);
+ virtual void insertNamespace(NamespaceDef *nd);
+ virtual void computeAnchors();
+ virtual void setPackageDef(PackageDef *pd) { m_package=pd; }
+ virtual void setDirDef(DirDef *dd) { m_dir=dd; }
+ virtual void addUsingDirective(NamespaceDef *nd);
+ virtual void addUsingDeclaration(Definition *def);
+ virtual void combineUsingRelations();
+ virtual bool generateSourceFile() const;
+ virtual void sortMemberLists();
+ virtual void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
+ virtual void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
+ virtual void addMembersToMemberGroup();
+ virtual void distributeMemberGroupDocumentation();
+ virtual void findSectionsInDocumentation();
+ virtual void addIncludedUsingDirectives();
+ virtual void addListReferences();
+ virtual void setVisited(bool v) { m_visited = v; }
+ virtual bool isVisited() const { return m_visited; }
+
+ private:
+ bool m_visited;
+ void acquireFileVersion();
+ MemberList *createMemberList(MemberListType lt);
+ void addMemberToList(MemberListType lt,MemberDef *md);
+ void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeIncludeFiles(OutputList &ol);
+ void writeIncludeGraph(OutputList &ol);
+ void writeIncludedByGraph(OutputList &ol);
+ void writeMemberGroups(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void writeSourceLink(OutputList &ol);
+ void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
+ bool isConstantGroup);
+ void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d);
+ void writeInlineClasses(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeClassesToTagFile(FTextStream &t,ClassSDict *d);
+
+ QDict<IncludeInfo> *m_includeDict;
+ QList<IncludeInfo> *m_includeList;
+ QDict<IncludeInfo> *m_includedByDict;
+ QList<IncludeInfo> *m_includedByList;
+ NamespaceSDict *m_usingDirList;
+ SDict<Definition> *m_usingDeclList;
+ QCString m_path;
+ QCString m_filePath;
+ QCString m_inclDepFileName;
+ QCString m_inclByDepFileName;
+ QCString m_outputDiskName;
+ QCString m_fileName;
+ QCString m_docname;
+ QIntDict<Definition> *m_srcDefDict;
+ QIntDict<MemberDef> *m_srcMemberDict;
+ bool m_isSource;
+ QCString m_fileVersion;
+ PackageDef *m_package;
+ DirDef *m_dir;
+ QList<MemberList> m_memberLists;
+ MemberGroupSDict *m_memberGroupSDict;
+ NamespaceSDict *m_namespaceSDict;
+ ClassSDict *m_classSDict;
+ ClassSDict *m_interfaceSDict;
+ ClassSDict *m_structSDict;
+ ClassSDict *m_exceptionSDict;
+ bool m_subGrouping;
+};
+
+FileDef *createFileDef(const char *p,const char *n,const char *ref,const char *dn)
+{
+ return new FileDefImpl(p,n,ref,dn);
+}
+
//---------------------------------------------------------------------------
@@ -75,9 +213,9 @@ class DevNullCodeDocInterface : public CodeOutputInterface
\a nm the file name, and \a lref is an HTML anchor name if the
file was read from a tag file or 0 otherwise
*/
-FileDef::FileDef(const char *p,const char *nm,
+FileDefImpl::FileDefImpl(const char *p,const char *nm,
const char *lref,const char *dn)
- : Definition((QCString)p+nm,1,1,nm)
+ : DefinitionImpl((QCString)p+nm,1,1,nm)
{
m_path=p;
m_filePath=m_path+nm;
@@ -101,6 +239,7 @@ FileDef::FileDef(const char *p,const char *nm,
m_isSource = guessSection(nm)==Entry::SOURCE_SEC;
m_docname = nm;
m_dir = 0;
+ m_visited = FALSE;
if (Config_getBool(FULL_PATH_NAMES))
{
m_docname.prepend(stripFromPath(m_path.copy()));
@@ -112,7 +251,7 @@ FileDef::FileDef(const char *p,const char *nm,
}
/*! destroy the file definition */
-FileDef::~FileDef()
+FileDefImpl::~FileDefImpl()
{
delete m_classSDict;
delete m_interfaceSDict;
@@ -130,7 +269,7 @@ FileDef::~FileDef()
delete m_memberGroupSDict;
}
-void FileDef::setDiskName(const QCString &name)
+void FileDefImpl::setDiskName(const QCString &name)
{
if (isReference())
{
@@ -147,15 +286,15 @@ void FileDef::setDiskName(const QCString &name)
}
/*! Compute the HTML anchor names for all members in the class */
-void FileDef::computeAnchors()
+void FileDefImpl::computeAnchors()
{
MemberList *ml = getMemberList(MemberListType_allMembersList);
if (ml) setAnchors(ml);
}
-void FileDef::distributeMemberGroupDocumentation()
+void FileDefImpl::distributeMemberGroupDocumentation()
{
- //printf("FileDef::distributeMemberGroupDocumentation()\n");
+ //printf("FileDefImpl::distributeMemberGroupDocumentation()\n");
if (m_memberGroupSDict)
{
MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
@@ -167,7 +306,7 @@ void FileDef::distributeMemberGroupDocumentation()
}
}
-void FileDef::findSectionsInDocumentation()
+void FileDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
if (m_memberGroupSDict)
@@ -191,7 +330,7 @@ void FileDef::findSectionsInDocumentation()
}
}
-bool FileDef::hasDetailedDescription() const
+bool FileDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
@@ -201,7 +340,7 @@ bool FileDef::hasDetailedDescription() const
);
}
-void FileDef::writeTagFile(FTextStream &tagFile)
+void FileDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <compound kind=\"file\">" << endl;
tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
@@ -314,7 +453,7 @@ void FileDef::writeTagFile(FTextStream &tagFile)
tagFile << " </compound>" << endl;
}
-void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
+void FileDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if (hasDetailedDescription())
{
@@ -393,7 +532,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
}
}
-void FileDef::writeBriefDescription(OutputList &ol)
+void FileDefImpl::writeBriefDescription(OutputList &ol)
{
if (hasBriefDescription())
{
@@ -430,7 +569,7 @@ void FileDef::writeBriefDescription(OutputList &ol)
ol.writeSynopsis();
}
-void FileDef::writeClassesToTagFile(FTextStream &tagFile, ClassSDict *d)
+void FileDefImpl::writeClassesToTagFile(FTextStream &tagFile, ClassSDict *d)
{
SDict<ClassDef>::Iterator ci(*d);
ClassDef *cd;
@@ -444,7 +583,7 @@ void FileDef::writeClassesToTagFile(FTextStream &tagFile, ClassSDict *d)
}
}
-void FileDef::writeIncludeFiles(OutputList &ol)
+void FileDefImpl::writeIncludeFiles(OutputList &ol)
{
if (m_includeList && m_includeList->count()>0)
{
@@ -513,7 +652,7 @@ void FileDef::writeIncludeFiles(OutputList &ol)
}
}
-void FileDef::writeIncludeGraph(OutputList &ol)
+void FileDefImpl::writeIncludeGraph(OutputList &ol)
{
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(INCLUDE_GRAPH)*/)
{
@@ -537,7 +676,7 @@ void FileDef::writeIncludeGraph(OutputList &ol)
}
}
-void FileDef::writeIncludedByGraph(OutputList &ol)
+void FileDefImpl::writeIncludedByGraph(OutputList &ol)
{
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(INCLUDED_BY_GRAPH)*/)
{
@@ -562,7 +701,7 @@ void FileDef::writeIncludedByGraph(OutputList &ol)
}
-void FileDef::writeSourceLink(OutputList &ol)
+void FileDefImpl::writeSourceLink(OutputList &ol)
{
//printf("%s: generateSourceFile()=%d\n",name().data(),generateSourceFile());
if (generateSourceFile())
@@ -577,20 +716,20 @@ void FileDef::writeSourceLink(OutputList &ol)
}
}
-void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
+void FileDefImpl::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
bool const isConstantGroup)
{
// write list of namespaces
if (m_namespaceSDict) m_namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
}
-void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d)
+void FileDefImpl::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d)
{
// write list of classes
if (d) d->writeDeclaration(ol,0,title,FALSE);
}
-void FileDef::writeInlineClasses(OutputList &ol)
+void FileDefImpl::writeInlineClasses(OutputList &ol)
{
// temporarily undo the disbling could be done by startMemberDocumentation()
// as a result of setting SEPARATE_MEMBER_PAGES to YES; see bug730512
@@ -603,17 +742,17 @@ void FileDef::writeInlineClasses(OutputList &ol)
if (!isEnabled) ol.disable(OutputGenerator::Html);
}
-void FileDef::startMemberDeclarations(OutputList &ol)
+void FileDefImpl::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
-void FileDef::endMemberDeclarations(OutputList &ol)
+void FileDefImpl::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
-void FileDef::startMemberDocumentation(OutputList &ol)
+void FileDefImpl::startMemberDocumentation(OutputList &ol)
{
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
@@ -622,7 +761,7 @@ void FileDef::startMemberDocumentation(OutputList &ol)
}
}
-void FileDef::endMemberDocumentation(OutputList &ol)
+void FileDefImpl::endMemberDocumentation(OutputList &ol)
{
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
@@ -631,7 +770,7 @@ void FileDef::endMemberDocumentation(OutputList &ol)
}
}
-void FileDef::writeMemberGroups(OutputList &ol)
+void FileDefImpl::writeMemberGroups(OutputList &ol)
{
/* write user defined member groups */
if (m_memberGroupSDict)
@@ -650,7 +789,7 @@ void FileDef::writeMemberGroups(OutputList &ol)
}
}
-void FileDef::writeAuthorSection(OutputList &ol)
+void FileDefImpl::writeAuthorSection(OutputList &ol)
{
// write Author section (Man only)
ol.pushGeneratorState();
@@ -662,7 +801,7 @@ void FileDef::writeAuthorSection(OutputList &ol)
ol.popGeneratorState();
}
-void FileDef::writeSummaryLinks(OutputList &ol)
+void FileDefImpl::writeSummaryLinks(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -729,7 +868,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
/*! Write the documentation page for this file to the file of output
generators \a ol.
*/
-void FileDef::writeDocumentation(OutputList &ol)
+void FileDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
//funcList->countDecMembers();
@@ -946,7 +1085,7 @@ void FileDef::writeDocumentation(OutputList &ol)
}
}
-void FileDef::writeMemberPages(OutputList &ol)
+void FileDefImpl::writeMemberPages(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -964,7 +1103,7 @@ void FileDef::writeMemberPages(OutputList &ol)
ol.popGeneratorState();
}
-void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
+void FileDefImpl::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
{
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
@@ -1008,7 +1147,7 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
}
/*! Write a source listing of this file to the output */
-void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
+void FileDefImpl::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES);
@@ -1126,7 +1265,7 @@ void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
ol.enableAll();
}
-void FileDef::parseSource(bool sameTu,QStrList &filesInSameTu)
+void FileDefImpl::parseSource(bool sameTu,QStrList &filesInSameTu)
{
static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES);
DevNullCodeDocInterface devNullIntf;
@@ -1161,16 +1300,16 @@ void FileDef::parseSource(bool sameTu,QStrList &filesInSameTu)
}
}
-void FileDef::startParsing()
+void FileDefImpl::startParsing()
{
}
-void FileDef::finishParsing()
+void FileDefImpl::finishParsing()
{
ClangParser::instance()->finish();
}
-void FileDef::addMembersToMemberGroup()
+void FileDefImpl::addMembersToMemberGroup()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1199,10 +1338,10 @@ void FileDef::addMembersToMemberGroup()
}
/*! Adds member definition \a md to the list of all members of this file */
-void FileDef::insertMember(MemberDef *md)
+void FileDefImpl::insertMember(MemberDef *md)
{
if (md->isHidden()) return;
- //printf("%s:FileDef::insertMember(%s (=%p) list has %d elements)\n",
+ //printf("%s:FileDefImpl::insertMember(%s (=%p) list has %d elements)\n",
// name().data(),md->name().data(),md,allMemberList.count());
MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
if (allMemberList && allMemberList->findRef(md)!=-1) // TODO optimize the findRef!
@@ -1251,7 +1390,7 @@ void FileDef::insertMember(MemberDef *md)
addMemberToList(MemberListType_docDefineMembers,md);
break;
default:
- err("FileDef::insertMembers(): "
+ err("FileDefImpl::insertMembers(): "
"member `%s' with class scope `%s' inserted in file scope `%s'!\n",
md->name().data(),
md->getClassDef() ? md->getClassDef()->name().data() : "<global>",
@@ -1261,7 +1400,7 @@ void FileDef::insertMember(MemberDef *md)
}
/*! Adds compound definition \a cd to the list of all compounds of this file */
-void FileDef::insertClass(ClassDef *cd)
+void FileDefImpl::insertClass(ClassDef *cd)
{
if (cd->isHidden()) return;
@@ -1298,7 +1437,7 @@ void FileDef::insertClass(ClassDef *cd)
}
/*! Adds namespace definition \a nd to the list of all compounds of this file */
-void FileDef::insertNamespace(NamespaceDef *nd)
+void FileDefImpl::insertNamespace(NamespaceDef *nd)
{
if (nd->isHidden()) return;
if (!nd->name().isEmpty() &&
@@ -1319,17 +1458,17 @@ void FileDef::insertNamespace(NamespaceDef *nd)
}
}
-QCString FileDef::name() const
+QCString FileDefImpl::name() const
{
if (Config_getBool(FULL_PATH_NAMES))
return m_fileName;
else
- return Definition::name();
+ return DefinitionImpl::name();
}
-void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
+void FileDefImpl::addSourceRef(int line,Definition *d,MemberDef *md)
{
- //printf("FileDef::addSourceDef(%d,%p,%p)\n",line,d,md);
+ //printf("FileDefImpl::addSourceDef(%d,%p,%p)\n",line,d,md);
if (d)
{
if (m_srcDefDict==0) m_srcDefDict = new QIntDict<Definition>(257);
@@ -1341,7 +1480,7 @@ void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
}
}
-Definition *FileDef::getSourceDefinition(int lineNr) const
+Definition *FileDefImpl::getSourceDefinition(int lineNr) const
{
Definition *result=0;
if (m_srcDefDict)
@@ -1352,7 +1491,7 @@ Definition *FileDef::getSourceDefinition(int lineNr) const
return result;
}
-MemberDef *FileDef::getSourceMember(int lineNr) const
+MemberDef *FileDefImpl::getSourceMember(int lineNr) const
{
MemberDef *result=0;
if (m_srcMemberDict)
@@ -1364,7 +1503,7 @@ MemberDef *FileDef::getSourceMember(int lineNr) const
}
-void FileDef::addUsingDirective(NamespaceDef *nd)
+void FileDefImpl::addUsingDirective(NamespaceDef *nd)
{
if (m_usingDirList==0)
{
@@ -1374,16 +1513,16 @@ void FileDef::addUsingDirective(NamespaceDef *nd)
{
m_usingDirList->append(nd->qualifiedName(),nd);
}
- //printf("%p: FileDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
+ //printf("%p: FileDefImpl::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
}
-NamespaceSDict *FileDef::getUsedNamespaces() const
+NamespaceSDict *FileDefImpl::getUsedNamespaces() const
{
- //printf("%p: FileDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
+ //printf("%p: FileDefImpl::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
return m_usingDirList;
}
-void FileDef::addUsingDeclaration(Definition *d)
+void FileDefImpl::addUsingDeclaration(Definition *d)
{
if (m_usingDeclList==0)
{
@@ -1395,10 +1534,10 @@ void FileDef::addUsingDeclaration(Definition *d)
}
}
-void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
+void FileDefImpl::addIncludeDependency(FileDef *fd,const char *incName,bool local,
bool imported,bool indirect)
{
- //printf("FileDef::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
+ //printf("FileDefImpl::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
QCString iName = fd ? fd->absFilePath().data() : incName;
if (!iName.isEmpty() && (!m_includeDict || m_includeDict->find(iName)==0))
{
@@ -1419,11 +1558,11 @@ void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
}
}
-void FileDef::addIncludedUsingDirectives()
+void FileDefImpl::addIncludedUsingDirectives()
{
- if (visited) return;
- visited=TRUE;
- //printf("( FileDef::addIncludedUsingDirectives for file %s\n",name().data());
+ if (m_visited) return;
+ m_visited=TRUE;
+ //printf("( FileDefImpl::addIncludedUsingDirectives for file %s\n",name().data());
if (m_includeList) // file contains #includes
{
@@ -1432,7 +1571,7 @@ void FileDef::addIncludedUsingDirectives()
IncludeInfo *ii;
for (iii.toFirst();(ii=iii.current());++iii) // foreach #include...
{
- if (ii->fileDef && !ii->fileDef->visited) // ...that is a known file
+ if (ii->fileDef && !ii->fileDef->isVisited()) // ...that is a known file
{
// recurse into this file
ii->fileDef->addIncludedUsingDirectives();
@@ -1448,7 +1587,7 @@ void FileDef::addIncludedUsingDirectives()
if (ii->fileDef && ii->fileDef!=this)
{
// add using directives
- NamespaceSDict *unl = ii->fileDef->m_usingDirList;
+ NamespaceSDict *unl = ii->fileDef->getUsedNamespaces();
if (unl)
{
NamespaceSDict::Iterator nli(*unl);
@@ -1466,7 +1605,7 @@ void FileDef::addIncludedUsingDirectives()
}
}
// add using declarations
- SDict<Definition> *udl = ii->fileDef->m_usingDeclList;
+ SDict<Definition> *udl = ii->fileDef->getUsedClasses();
if (udl)
{
SDict<Definition>::Iterator udi(*udl);
@@ -1488,14 +1627,14 @@ void FileDef::addIncludedUsingDirectives()
}
}
}
- //printf(") end FileDef::addIncludedUsingDirectives for file %s\n",name().data());
+ //printf(") end FileDefImpl::addIncludedUsingDirectives for file %s\n",name().data());
}
-void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
+void FileDefImpl::addIncludedByDependency(FileDef *fd,const char *incName,
bool local,bool imported)
{
- //printf("FileDef::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
+ //printf("FileDefImpl::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
QCString iName = fd ? fd->absFilePath().data() : incName;
if (!iName.isEmpty() && (m_includedByDict==0 || m_includedByDict->find(iName)==0))
{
@@ -1516,13 +1655,13 @@ void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
}
}
-bool FileDef::isIncluded(const QCString &name) const
+bool FileDefImpl::isIncluded(const QCString &name) const
{
if (name.isEmpty()) return FALSE;
return m_includeDict!=0 && m_includeDict->find(name)!=0;
}
-bool FileDef::generateSourceFile() const
+bool FileDefImpl::generateSourceFile() const
{
static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
static bool verbatimHeaders = Config_getBool(VERBATIM_HEADERS);
@@ -1534,7 +1673,7 @@ bool FileDef::generateSourceFile() const
}
-void FileDef::addListReferences()
+void FileDefImpl::addListReferences()
{
{
QList<ListItemInfo> *xrefItems = xrefListItems();
@@ -1762,7 +1901,7 @@ static void addDirsAsGroups(Directory *root,GroupDef *parent,int level)
GroupDef *gd=0;
if (root->kind()==DirEntry::Dir)
{
- gd = new GroupDef("[generated]",
+ gd = createGroupDef("[generated]",
1,
root->path(), // name
root->name() // title
@@ -1812,10 +1951,10 @@ void generateFileTree()
//-------------------------------------------------------------------
-void FileDef::combineUsingRelations()
+void FileDefImpl::combineUsingRelations()
{
- if (visited) return; // already done
- visited=TRUE;
+ if (m_visited) return; // already done
+ m_visited=TRUE;
if (m_usingDirList)
{
NamespaceSDict::Iterator nli(*m_usingDirList);
@@ -1852,7 +1991,7 @@ void FileDef::combineUsingRelations()
}
}
-bool FileDef::isDocumentationFile() const
+bool FileDefImpl::isDocumentationFile() const
{
return name().right(4)==".doc" ||
name().right(4)==".txt" ||
@@ -1861,7 +2000,7 @@ bool FileDef::isDocumentationFile() const
name().right(9)==".markdown";
}
-void FileDef::acquireFileVersion()
+void FileDefImpl::acquireFileVersion()
{
QCString vercmd = Config_getString(FILE_VERSION_FILTER);
if (!vercmd.isEmpty() && !m_filePath.isEmpty() &&
@@ -1895,7 +2034,7 @@ void FileDef::acquireFileVersion()
}
-QCString FileDef::getSourceFileBase() const
+QCString FileDefImpl::getSourceFileBase() const
{
if (Htags::useHtags)
{
@@ -1907,18 +2046,18 @@ QCString FileDef::getSourceFileBase() const
}
}
-QCString FileDef::getOutputFileBase() const
+QCString FileDefImpl::getOutputFileBase() const
{
return m_outputDiskName;
}
/*! Returns the name of the verbatim copy of this file (if any). */
-QCString FileDef::includeName() const
+QCString FileDefImpl::includeName() const
{
return getSourceFileBase();
}
-MemberList *FileDef::createMemberList(MemberListType lt)
+MemberList *FileDefImpl::createMemberList(MemberListType lt)
{
m_memberLists.setAutoDelete(TRUE);
QListIterator<MemberList> mli(m_memberLists);
@@ -1936,7 +2075,7 @@ MemberList *FileDef::createMemberList(MemberListType lt)
return ml;
}
-void FileDef::addMemberToList(MemberListType lt,MemberDef *md)
+void FileDefImpl::addMemberToList(MemberListType lt,MemberDef *md)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
@@ -1958,7 +2097,7 @@ void FileDef::addMemberToList(MemberListType lt,MemberDef *md)
if (ml->listType()&MemberListType_declarationLists) md->setSectionList(this,ml);
}
-void FileDef::sortMemberLists()
+void FileDefImpl::sortMemberLists()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1966,9 +2105,21 @@ void FileDef::sortMemberLists()
{
if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
}
+
+ if (m_memberGroupSDict)
+ {
+ MemberGroupSDict::Iterator mgli(*m_memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
+ {
+ MemberList *mlg = mg->members();
+ if (mlg->needsSorting()) { mlg->sort(); mlg->setNeedsSorting(FALSE); }
+ }
+ }
+
}
-MemberList *FileDef::getMemberList(MemberListType lt) const
+MemberList *FileDefImpl::getMemberList(MemberListType lt) const
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1982,7 +2133,7 @@ MemberList *FileDef::getMemberList(MemberListType lt) const
return 0;
}
-void FileDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
+void FileDefImpl::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
{
static bool optVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
MemberList * ml = getMemberList(lt);
@@ -2000,13 +2151,13 @@ void FileDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCS
}
}
-void FileDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
+void FileDefImpl::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDocumentation(ol,name(),this,title);
}
-bool FileDef::isLinkableInProject() const
+bool FileDefImpl::isLinkableInProject() const
{
static bool showFiles = Config_getBool(SHOW_FILES);
return hasDocumentation() && !isReference() && (showFiles || isLinkableViaGroup());
@@ -2024,7 +2175,7 @@ static void getAllIncludeFilesRecursively(
if (ii->fileDef && !ii->fileDef->isReference() &&
!filesVisited->find(ii->fileDef->absFilePath()))
{
- //printf("FileDef::addIncludeDependency(%s)\n",ii->fileDef->absFilePath().data());
+ //printf("FileDefImpl::addIncludeDependency(%s)\n",ii->fileDef->absFilePath().data());
incFiles.append(ii->fileDef->absFilePath());
filesVisited->insert(ii->fileDef->absFilePath(),(void*)0x8);
getAllIncludeFilesRecursively(filesVisited,ii->fileDef,incFiles);
@@ -2033,28 +2184,28 @@ static void getAllIncludeFilesRecursively(
}
}
-void FileDef::getAllIncludeFilesRecursively(QStrList &incFiles) const
+void FileDefImpl::getAllIncludeFilesRecursively(QStrList &incFiles) const
{
QDict<void> includes(257);
::getAllIncludeFilesRecursively(&includes,this,incFiles);
}
-QCString FileDef::title() const
+QCString FileDefImpl::title() const
{
return theTranslator->trFileReference(name());
}
-QCString FileDef::fileVersion() const
+QCString FileDefImpl::fileVersion() const
{
return m_fileVersion;
}
-QCString FileDef::includeDependencyGraphFileName() const
+QCString FileDefImpl::includeDependencyGraphFileName() const
{
return m_inclDepFileName;
}
-QCString FileDef::includedByDependencyGraphFileName() const
+QCString FileDefImpl::includedByDependencyGraphFileName() const
{
return m_inclByDepFileName;
}
diff --git a/src/filedef.h b/src/filedef.h
index fe3c81d..63cacf5 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -61,185 +61,127 @@ struct IncludeInfo
* The member writeDocumentation() can be used to generate the page of
* documentation to HTML and LaTeX.
*/
-class FileDef : public Definition
+class FileDef : virtual public Definition
{
public:
- //enum FileType { Source, Header, Unknown };
-
- FileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
- ~FileDef();
+ ~FileDef() {}
// ----------------------------------------------------------------------
- DefType definitionType() const { return TypeFile; }
+ virtual DefType definitionType() const = 0;
/*! Returns the unique file name (this may include part of the path). */
- QCString name() const;
- QCString displayName(bool=TRUE) const { return name(); }
- QCString fileName() const { return m_fileName; }
-
- QCString getOutputFileBase() const;
+ virtual QCString name() const = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual QCString fileName() const = 0;
+
+ virtual QCString getOutputFileBase() const = 0;
+
+ virtual QCString anchor() const = 0;
- QCString anchor() const { return QCString(); }
+ virtual QCString getSourceFileBase() const = 0;
- QCString getSourceFileBase() const;
-
/*! Returns the name of the verbatim copy of this file (if any). */
- QCString includeName() const;
+ virtual QCString includeName() const = 0;
- QCString includeDependencyGraphFileName() const;
+ virtual QCString includeDependencyGraphFileName() const = 0;
+
+ virtual QCString includedByDependencyGraphFileName() const = 0;
- QCString includedByDependencyGraphFileName() const;
-
/*! Returns the absolute path including the file name. */
- QCString absFilePath() const { return m_filePath; }
-
+ virtual QCString absFilePath() const = 0;
+
/*! Returns the name as it is used in the documentation */
- const QCString &docName() const { return m_docname; }
+ virtual const QCString &docName() const = 0;
/*! Returns TRUE if this file is a source file. */
- bool isSource() const { return m_isSource; }
+ virtual bool isSource() const = 0;
- bool isDocumentationFile() const;
-
- Definition *getSourceDefinition(int lineNr) const;
- MemberDef *getSourceMember(int lineNr) const;
+ virtual bool isDocumentationFile() const = 0;
- /*! Returns the absolute path of this file. */
- QCString getPath() const { return m_path; }
+ virtual Definition *getSourceDefinition(int lineNr) const = 0;
+ virtual MemberDef *getSourceMember(int lineNr) const = 0;
+
+ /*! Returns the absolute path of this file. */
+ virtual QCString getPath() const = 0;
/*! Returns version of this file. */
- QCString getVersion() const { return m_fileVersion; }
-
- bool isLinkableInProject() const;
+ virtual QCString getVersion() const = 0;
+
+ virtual bool isLinkableInProject() const = 0;
- bool isLinkable() const { return isLinkableInProject() || isReference(); }
- bool isIncluded(const QCString &name) const;
+ virtual bool isLinkable() const = 0;
+ virtual bool isIncluded(const QCString &name) const = 0;
- PackageDef *packageDef() const { return m_package; }
- DirDef *getDirDef() const { return m_dir; }
- NamespaceSDict *getUsedNamespaces() const;
- SDict<Definition> *getUsedClasses() const { return m_usingDeclList; }
- QList<IncludeInfo> *includeFileList() const { return m_includeList; }
- QList<IncludeInfo> *includedByFileList() const { return m_includedByList; }
- void getAllIncludeFilesRecursively(QStrList &incFiles) const;
+ virtual PackageDef *packageDef() const = 0;
+ virtual DirDef *getDirDef() const = 0;
+ virtual NamespaceSDict *getUsedNamespaces() const = 0;
+ virtual SDict<Definition> *getUsedClasses() const = 0;
+ virtual QList<IncludeInfo> *includeFileList() const = 0;
+ virtual QList<IncludeInfo> *includedByFileList() const = 0;
+ virtual void getAllIncludeFilesRecursively(QStrList &incFiles) const = 0;
- MemberList *getMemberList(MemberListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+ virtual MemberList *getMemberList(MemberListType lt) const = 0;
+ virtual const QList<MemberList> &getMemberLists() const = 0;
/* user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
- NamespaceSDict *getNamespaceSDict() const { return m_namespaceSDict; }
- ClassSDict *getClassSDict() const { return m_classSDict; }
+ virtual MemberGroupSDict *getMemberGroupSDict() const = 0;
+ virtual NamespaceSDict *getNamespaceSDict() const = 0;
+ virtual ClassSDict *getClassSDict() const = 0;
+
+ virtual QCString title() const = 0;
+ virtual bool hasDetailedDescription() const = 0;
+ virtual QCString fileVersion() const = 0;
- QCString title() const;
- bool hasDetailedDescription() const;
- QCString fileVersion() const;
+ virtual bool subGrouping() const = 0;
- bool subGrouping() const { return m_subGrouping; }
-
//---------------------------------
- void addSourceRef(int line,Definition *d,MemberDef *md);
+ virtual void addSourceRef(int line,Definition *d,MemberDef *md) = 0;
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
- void writeSummaryLinks(OutputList &ol);
- void writeTagFile(FTextStream &t);
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeMemberPages(OutputList &ol) = 0;
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const = 0;
+ virtual void writeSummaryLinks(OutputList &ol) = 0;
+ virtual void writeTagFile(FTextStream &t) = 0;
- void startParsing();
- void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
- void parseSource(bool sameTu,QStrList &filesInSameTu);
- void finishParsing();
- void setDiskName(const QCString &name);
+ virtual void startParsing() = 0;
+ virtual void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu) = 0;
+ virtual void parseSource(bool sameTu,QStrList &filesInSameTu) = 0;
+ virtual void finishParsing() = 0;
+ virtual void setDiskName(const QCString &name) = 0;
- void insertMember(MemberDef *md);
- void insertClass(ClassDef *cd);
- void insertNamespace(NamespaceDef *nd);
- void computeAnchors();
+ virtual void insertMember(MemberDef *md) = 0;
+ virtual void insertClass(ClassDef *cd) = 0;
+ virtual void insertNamespace(NamespaceDef *nd) = 0;
+ virtual void computeAnchors() = 0;
- void setPackageDef(PackageDef *pd) { m_package=pd; }
- void setDirDef(DirDef *dd) { m_dir=dd; }
+ virtual void setPackageDef(PackageDef *pd) = 0;
+ virtual void setDirDef(DirDef *dd) = 0;
- void addUsingDirective(NamespaceDef *nd);
- void addUsingDeclaration(Definition *def);
- void combineUsingRelations();
+ virtual void addUsingDirective(NamespaceDef *nd) = 0;
+ virtual void addUsingDeclaration(Definition *def) = 0;
+ virtual void combineUsingRelations() = 0;
- bool generateSourceFile() const;
- void sortMemberLists();
+ virtual bool generateSourceFile() const = 0;
+ virtual void sortMemberLists() = 0;
- void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
- void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
+ virtual void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect) = 0;
+ virtual void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported) = 0;
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
- void addIncludedUsingDirectives();
+ virtual void addMembersToMemberGroup() = 0;
+ virtual void distributeMemberGroupDocumentation() = 0;
+ virtual void findSectionsInDocumentation() = 0;
+ virtual void addIncludedUsingDirectives() = 0;
- void addListReferences();
- //bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
- //bool includesByName(const QCString &name) const;
- bool visited;
+ virtual void addListReferences() = 0;
- protected:
- /**
- * Retrieves the file version from version control system.
- */
- void acquireFileVersion();
-
- private:
- MemberList *createMemberList(MemberListType lt);
- void addMemberToList(MemberListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
- void writeIncludeFiles(OutputList &ol);
- void writeIncludeGraph(OutputList &ol);
- void writeIncludedByGraph(OutputList &ol);
- void writeMemberGroups(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeSourceLink(OutputList &ol);
- void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
- bool isConstantGroup);
- void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d);
- void writeInlineClasses(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void writeClassesToTagFile(FTextStream &t,ClassSDict *d);
-
- QDict<IncludeInfo> *m_includeDict;
- QList<IncludeInfo> *m_includeList;
- QDict<IncludeInfo> *m_includedByDict;
- QList<IncludeInfo> *m_includedByList;
- NamespaceSDict *m_usingDirList;
- SDict<Definition> *m_usingDeclList;
- QCString m_path;
- QCString m_filePath;
- QCString m_inclDepFileName;
- QCString m_inclByDepFileName;
- QCString m_outputDiskName;
- QCString m_fileName;
- QCString m_docname;
- QIntDict<Definition> *m_srcDefDict;
- QIntDict<MemberDef> *m_srcMemberDict;
- bool m_isSource;
- QCString m_fileVersion;
- PackageDef *m_package;
- DirDef *m_dir;
- QList<MemberList> m_memberLists;
- MemberGroupSDict *m_memberGroupSDict;
- NamespaceSDict *m_namespaceSDict;
- ClassSDict *m_classSDict;
- ClassSDict *m_interfaceSDict;
- ClassSDict *m_structSDict;
- ClassSDict *m_exceptionSDict;
- bool m_subGrouping;
+ virtual void setVisited(bool v) = 0;
+ virtual bool isVisited() const = 0;
};
+FileDef *createFileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
+
/** Class representing a list of FileDef objects. */
class FileList : public QList<FileDef>
{
diff --git a/src/filestorage.h b/src/filestorage.h
deleted file mode 100644
index 5c2a92d..0000000
--- a/src/filestorage.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#include <qfile.h>
-#include <assert.h>
-#include "store.h"
-
-
-#ifndef FILESTORAGE_H
-#define FILESTORAGE_H
-
-/** @brief Store implementation based on a file.
- Writing is linear, after that the file is re-opened for reading.
- Reading is random (seek+read).
- */
-class FileStorage : public StorageIntf
-{
- public:
- FileStorage() : m_readOnly(FALSE) {}
- FileStorage( const QString &name) :
- m_readOnly(FALSE) { m_file.setName(name); }
- int read(char *buf,uint size) { return m_file.readBlock(buf,size); }
- int write(const char *buf,uint size) { assert(m_readOnly==FALSE); return m_file.writeBlock(buf,size); }
- bool open( int m ) { m_readOnly = m==IO_ReadOnly; return m_file.open(m); }
- bool seek(int64 pos) { return m_file.seek(pos); }
- int64 pos() const { return m_file.pos(); }
- void close() { m_file.close(); }
- void setName( const char *name ) { m_file.setName(name); }
- private:
- bool m_readOnly;
- QFile m_file;
-};
-
-#if 0 // experimental version using mmap after opening the file as read only.
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdio.h>
-
-class FileStorage : public StorageIntf
-{
- public:
- FileStorage() : m_readOnly(FALSE), m_map(0), m_off(0), m_size(0) {}
- FileStorage( const QString &name) :
- m_readOnly(FALSE) { m_file.setName(name); }
- void setName( const char *name ) { m_file.setName(name); }
- bool open( int m )
- {
- if (m==IO_ReadOnly)
- {
- m_readOnly=TRUE;
- QString name = m_file.name();
- m_file.close();
- m_fd = ::open(name.data(),O_RDONLY);
- struct stat stat;
- fstat(m_fd,&stat);
- m_size = stat.st_size;
- m_map = mmap(NULL,m_size,PROT_READ,MAP_SHARED,m_fd,0);
- if (m_map==MAP_FAILED) perror("mmap failed");
- assert(m_map!=MAP_FAILED);
- m_off = 0;
- return TRUE;
- }
- else
- {
- m_readOnly = FALSE;
- return m_file.open(m);
- }
- }
- int write(const char *buf,uint size)
- {
- assert(m_map==0);
- return m_file.writeBlock(buf,size);
- }
- int read(char *buf,uint size)
- {
- assert(m_map!=0);
- memcpy(buf,((char *)m_map)+m_off,size);
- m_off+=size;
- return size;
- }
- bool seek(int64 pos)
- {
- m_off=pos;
- return TRUE;
- }
- int64 pos() const
- {
- if (m_readOnly)
- {
- return m_off;
- }
- else
- {
- return m_file.pos();
- }
- }
- void close()
- {
- if (m_readOnly)
- {
- munmap(m_map,m_size);
- ::close(m_fd);
- exit(1);
- }
- else
- {
- m_file.close();
- }
- }
- private:
- bool m_readOnly;
- QFile m_file;
- int m_fd;
- void *m_map;
- off_t m_off;
- off_t m_size;
-};
-#endif
-
-#endif
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 0e610fd..7a30deb 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -1327,7 +1327,6 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
if (s.isEmpty()) return;
printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
- TooltipManager::instance()->clearTooltips();
g_code = &od;
g_inputString = s;
g_inputPosition = 0;
@@ -1358,7 +1357,7 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",exName);
+ g_sourceFileDef = createFileDef("",exName);
}
if (g_sourceFileDef)
{
@@ -1382,10 +1381,6 @@ void parseFortranCode(CodeOutputInterface &od,const char *className,const QCStri
endFontClass();
g_code->endCodeLine();
}
- if (fd)
- {
- TooltipManager::instance()->writeTooltips(*g_code);
- }
if (exBlock && g_sourceFileDef)
{
// delete the temporary file definition used for this example
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 1f0c356..e5dc5ca 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -66,6 +66,7 @@
#include "fortrancode.h"
#include "pre.h"
#include "arguments.h"
+#include "debug.h"
// Toggle for some debugging info
//#define DBG_CTX(x) fprintf x
@@ -2640,6 +2641,8 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt, Fortra
//printf("Input fixed form string:\n%s\n", fileBuf);
//printf("===========================\n");
inputString = prepassFixedForm(fileBuf, NULL);
+ Debug::print(Debug::FortranFixed2Free,0,"======== Fixed to Free format =========\n---- Input fixed form string ------- \n%s\n", fileBuf);
+ Debug::print(Debug::FortranFixed2Free,0,"---- Resulting free form string ------- \n%s\n", inputString);
//printf("Resulting free form string:\n%s\n", inputString);
//printf("===========================\n");
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 97bcdcc..d66a935 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -223,7 +223,7 @@ static QCString node2URL(FTVNode *n,bool overruleFile=FALSE,bool srcLink=FALSE)
{
if (overruleFile && n->def && n->def->definitionType()==Definition::TypeFile)
{
- FileDef *fd = (FileDef*)n->def;
+ FileDef *fd = dynamic_cast<FileDef*>(n->def);
if (srcLink)
{
url = fd->getSourceFileBase();
@@ -286,7 +286,7 @@ void FTVHelp::generateLink(FTextStream &t,FTVNode *n)
t << "<a class=\"elRef\" ";
QCString result = externalLinkTarget();
if (result != "") setTarget = TRUE;
- t << result << externalRef("",n->ref,FALSE);
+ t << result;
}
else // local link
{
@@ -417,9 +417,9 @@ void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level,in
{
FileDef *srcRef=0;
if (n->def && n->def->definitionType()==Definition::TypeFile &&
- ((FileDef*)n->def)->generateSourceFile())
+ (dynamic_cast<FileDef*>(n->def))->generateSourceFile())
{
- srcRef = (FileDef*)n->def;
+ srcRef = dynamic_cast<FileDef*>(n->def);
}
if (srcRef)
{
@@ -560,7 +560,7 @@ static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t,
{
if (n->def && n->def->definitionType()==Definition::TypeFile)
{
- FileDef *fd = (FileDef*)n->def;
+ FileDef *fd = dynamic_cast<FileDef*>(n->def);
bool doc,src;
doc = fileVisibleInIndex(fd,src);
if (doc)
@@ -635,22 +635,7 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
//tidx << "var NAVTREEINDEX =" << endl;
//tidx << "{" << endl;
FTextStream t(&f);
- t << "/*\n@ @licstart The following is the entire license notice for the\n"
- "JavaScript code in this file.\n\nCopyright (C) 1997-2017 by Dimitri van Heesch\n\n"
- "This program is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
- "the Free Software Foundation; either version 2 of the License, or\n"
- "(at your option) any later version.\n\n"
- "This program is distributed in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- " GNU General Public License for more details.\n\n"
- "You should have received a copy of the GNU General Public License along\n"
- "with this program; if not, write to the Free Software Foundation, Inc.,\n"
- "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\n"
- "@licend The above is the entire license notice\n"
- "for the JavaScript code in this file\n"
- "*/\n";
+ t << JAVASCRIPT_LICENSE_TEXT;
t << "var NAVTREE =" << endl;
t << "[" << endl;
t << " [ ";
diff --git a/src/ftvhelp.h b/src/ftvhelp.h
index bacf9a5..eac0367 100644
--- a/src/ftvhelp.h
+++ b/src/ftvhelp.h
@@ -72,6 +72,22 @@ class FTVHelp : public IndexIntf
bool m_topLevelIndex;
};
+#define JAVASCRIPT_LICENSE_TEXT \
+ "/*\n@ @licstart The following is the entire license notice for the\n" \
+ "JavaScript code in this file.\n\nCopyright (C) 1997-2019 by Dimitri van Heesch\n\n" \
+ "This program is free software; you can redistribute it and/or modify\n" \
+ "it under the terms of version 2 of the GNU General Public License as published by\n" \
+ "the Free Software Foundation\n\n" \
+ "This program is distributed in the hope that it will be useful,\n" \
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" \
+ "GNU General Public License for more details.\n\n" \
+ "You should have received a copy of the GNU General Public License along\n" \
+ "with this program; if not, write to the Free Software Foundation, Inc.,\n" \
+ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\n" \
+ "@licend The above is the entire license notice\n" \
+ "for the JavaScript code in this file\n" \
+ "*/\n"
#endif /* FTVHELP_H */
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 397b254..31eb7fe 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -40,11 +40,129 @@
#include "membername.h"
#include "dirdef.h"
#include "config.h"
+#include "definitionimpl.h"
//---------------------------------------------------------------------------
-GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
- const char *refFileName) : Definition(df,dl,1,na)
+class GroupDefImpl : public DefinitionImpl, public GroupDef
+{
+ public:
+ GroupDefImpl(const char *fileName,int line,const char *name,const char *title,const char *refFileName=0);
+ virtual ~GroupDefImpl();
+
+ virtual DefType definitionType() const { return TypeGroup; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual QCString displayName(bool=TRUE) const { return hasGroupTitle() ? title : DefinitionImpl::name(); }
+ virtual const char *groupTitle() const { return title; }
+ virtual void setGroupTitle( const char *newtitle );
+ virtual bool hasGroupTitle( ) const { return titleSet; }
+ virtual void addFile(const FileDef *def);
+ virtual bool addClass(const ClassDef *def);
+ virtual bool addNamespace(const NamespaceDef *def);
+ virtual void addGroup(const GroupDef *def);
+ virtual void addPage(PageDef *def);
+ virtual void addExample(const PageDef *def);
+ virtual void addDir(const DirDef *dd);
+ virtual bool insertMember(MemberDef *def,bool docOnly=FALSE);
+ virtual void removeMember(MemberDef *md);
+ virtual bool findGroup(const GroupDef *def) const; // true if def is a subgroup of this group
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeMemberPages(OutputList &ol);
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
+ virtual void writeTagFile(FTextStream &);
+ virtual int countMembers() const;
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual bool isASubGroup() const;
+ virtual void computeAnchors();
+
+ virtual void addMembersToMemberGroup();
+ virtual void distributeMemberGroupDocumentation();
+ virtual void findSectionsInDocumentation();
+
+ virtual void addListReferences();
+ virtual void sortMemberLists();
+ virtual bool subGrouping() const { return m_subGrouping; }
+
+ virtual void setGroupScope(Definition *d) { groupScope = d; }
+ virtual Definition *getGroupScope() const { return groupScope; }
+
+ virtual MemberList *getMemberList(MemberListType lt) const;
+ virtual const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+
+ /* user defined member groups */
+ virtual MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
+
+ virtual FileList * getFiles() const { return fileList; }
+ virtual ClassSDict * getClasses() const { return classSDict; }
+ virtual NamespaceSDict * getNamespaces() const { return namespaceSDict; }
+ virtual GroupList * getSubGroups() const { return groupList; }
+ virtual PageSDict * getPages() const { return pageDict; }
+ virtual DirList * getDirs() const { return dirList; }
+ virtual PageSDict * getExamples() const { return exampleDict; }
+ virtual bool hasDetailedDescription() const;
+ virtual void sortSubGroups();
+
+ private:
+ void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
+ MemberList *createMemberList(MemberListType lt);
+ void addMemberToList(MemberListType lt,MemberDef *md);
+ void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
+ void removeMemberFromList(MemberListType lt,MemberDef *md);
+ void writeGroupGraph(OutputList &ol);
+ void writeFiles(OutputList &ol,const QCString &title);
+ void writeNamespaces(OutputList &ol,const QCString &title);
+ void writeNestedGroups(OutputList &ol,const QCString &title);
+ void writeDirs(OutputList &ol,const QCString &title);
+ void writeClasses(OutputList &ol,const QCString &title);
+ void writeInlineClasses(OutputList &ol);
+ void writePageDocumentation(OutputList &ol);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeMemberGroups(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void writeSummaryLinks(OutputList &ol);
+ void updateLanguage(const Definition *);
+
+ QCString title; // title of the group
+ bool titleSet; // true if title is not the same as the name
+ QCString fileName; // base name of the generated file
+ FileList *fileList; // list of files in the group
+ ClassSDict *classSDict; // list of classes in the group
+ NamespaceSDict *namespaceSDict; // list of namespaces in the group
+ GroupList *groupList; // list of sub groups.
+ PageSDict *pageDict; // list of pages in the group
+ PageSDict *exampleDict; // list of examples in the group
+ DirList *dirList; // list of directories in the group
+
+ MemberList *allMemberList;
+ MemberNameInfoSDict *allMemberNameInfoSDict;
+
+ Definition *groupScope;
+
+ QList<MemberList> m_memberLists;
+ MemberGroupSDict *memberGroupSDict;
+ bool m_subGrouping;
+
+};
+
+GroupDef *createGroupDef(const char *fileName,int line,const char *name,
+ const char *title,const char *refFileName)
+{
+ return new GroupDefImpl(fileName,line,name,title,refFileName);
+}
+
+
+//---------------------------------------------------------------------------
+
+GroupDefImpl::GroupDefImpl(const char *df,int dl,const char *na,const char *t,
+ const char *refFileName) : DefinitionImpl(df,dl,1,na)
{
fileList = new FileList;
classSDict = new ClassSDict(17);
@@ -69,12 +187,12 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
allMemberList = new MemberList(MemberListType_allMembersList);
- visited = 0;
+ //visited = 0;
groupScope = 0;
m_subGrouping=Config_getBool(SUBGROUPING);
}
-GroupDef::~GroupDef()
+GroupDefImpl::~GroupDefImpl()
{
delete fileList;
delete classSDict;
@@ -88,7 +206,7 @@ GroupDef::~GroupDef()
delete dirList;
}
-void GroupDef::setGroupTitle( const char *t )
+void GroupDefImpl::setGroupTitle( const char *t )
{
if ( t && qstrlen(t) )
{
@@ -104,7 +222,7 @@ void GroupDef::setGroupTitle( const char *t )
}
-void GroupDef::distributeMemberGroupDocumentation()
+void GroupDefImpl::distributeMemberGroupDocumentation()
{
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
@@ -114,7 +232,7 @@ void GroupDef::distributeMemberGroupDocumentation()
}
}
-void GroupDef::findSectionsInDocumentation()
+void GroupDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
@@ -135,7 +253,7 @@ void GroupDef::findSectionsInDocumentation()
}
}
-void GroupDef::addFile(const FileDef *def)
+void GroupDefImpl::addFile(const FileDef *def)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
if (def->isHidden()) return;
@@ -146,7 +264,7 @@ void GroupDef::addFile(const FileDef *def)
fileList->append(def);
}
-bool GroupDef::addClass(const ClassDef *cd)
+bool GroupDefImpl::addClass(const ClassDef *cd)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
if (cd->isHidden()) return FALSE;
@@ -194,7 +312,7 @@ bool GroupDef::addClass(const ClassDef *cd)
return FALSE;
}
-bool GroupDef::addNamespace(const NamespaceDef *def)
+bool GroupDefImpl::addNamespace(const NamespaceDef *def)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
if (def->isHidden()) return FALSE;
@@ -210,7 +328,7 @@ bool GroupDef::addNamespace(const NamespaceDef *def)
return FALSE;
}
-void GroupDef::addDir(const DirDef *def)
+void GroupDefImpl::addDir(const DirDef *def)
{
if (def->isHidden()) return;
if (Config_getBool(SORT_BRIEF_DOCS))
@@ -219,7 +337,7 @@ void GroupDef::addDir(const DirDef *def)
dirList->append(def);
}
-void GroupDef::addPage(PageDef *def)
+void GroupDefImpl::addPage(PageDef *def)
{
if (def->isHidden()) return;
//printf("Making page %s part of a group\n",def->name.data());
@@ -227,14 +345,14 @@ void GroupDef::addPage(PageDef *def)
def->makePartOfGroup(this);
}
-void GroupDef::addExample(const PageDef *def)
+void GroupDefImpl::addExample(const PageDef *def)
{
if (def->isHidden()) return;
exampleDict->append(def->name(),def);
}
-void GroupDef::addMembersToMemberGroup()
+void GroupDefImpl::addMembersToMemberGroup()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -246,7 +364,7 @@ void GroupDef::addMembersToMemberGroup()
}
}
- //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());
+ //printf("GroupDefImpl::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
@@ -256,7 +374,7 @@ void GroupDef::addMembersToMemberGroup()
}
-bool GroupDef::insertMember(MemberDef *md,bool docOnly)
+bool GroupDefImpl::insertMember(MemberDef *md,bool docOnly)
{
if (md->isHidden()) return FALSE;
updateLanguage(md);
@@ -412,7 +530,7 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
addMemberToList(MemberListType_docFriendMembers,md);
break;
default:
- err("GroupDef::insertMembers(): "
+ err("GroupDefImpl::insertMembers(): "
"member `%s' (typeid=%d) with scope `%s' inserted in group scope `%s'!\n",
md->name().data(),md->memberType(),
md->getClassDef() ? md->getClassDef()->name().data() : "",
@@ -421,7 +539,7 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
return TRUE;
}
-void GroupDef::removeMember(MemberDef *md)
+void GroupDefImpl::removeMember(MemberDef *md)
{
// fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data());
MemberNameInfo *mni = allMemberNameInfoSDict->find(md->name());
@@ -503,12 +621,12 @@ void GroupDef::removeMember(MemberDef *md)
removeMemberFromList(MemberListType_docFriendMembers,md);
break;
default:
- err("GroupDef::removeMember(): unexpected member remove in file!\n");
+ err("GroupDefImpl::removeMember(): unexpected member remove in file!\n");
}
}
}
-bool GroupDef::findGroup(const GroupDef *def) const
+bool GroupDefImpl::findGroup(const GroupDef *def) const
{
if (this==def)
{
@@ -529,7 +647,7 @@ bool GroupDef::findGroup(const GroupDef *def) const
return FALSE;
}
-void GroupDef::addGroup(const GroupDef *def)
+void GroupDefImpl::addGroup(const GroupDef *def)
{
//printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
//if (Config_getBool(SORT_MEMBER_DOCS))
@@ -538,13 +656,13 @@ void GroupDef::addGroup(const GroupDef *def)
groupList->append(def);
}
-bool GroupDef::isASubGroup() const
+bool GroupDefImpl::isASubGroup() const
{
GroupList *groups = partOfGroups();
return groups!=0 && groups->count()!=0;
}
-int GroupDef::countMembers() const
+int GroupDefImpl::countMembers() const
{
return fileList->count()+
classSDict->count()+
@@ -556,13 +674,13 @@ int GroupDef::countMembers() const
}
/*! Compute the HTML anchor names for all members in the group */
-void GroupDef::computeAnchors()
+void GroupDefImpl::computeAnchors()
{
- //printf("GroupDef::computeAnchors()\n");
+ //printf("GroupDefImpl::computeAnchors()\n");
setAnchors(allMemberList);
}
-void GroupDef::writeTagFile(FTextStream &tagFile)
+void GroupDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <compound kind=\"group\">" << endl;
tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
@@ -705,7 +823,7 @@ void GroupDef::writeTagFile(FTextStream &tagFile)
tagFile << " </compound>" << endl;
}
-void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF))
|| !documentation().isEmpty() || !inbodyDocumentation().isEmpty()
@@ -766,7 +884,7 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
}
}
-void GroupDef::writeBriefDescription(OutputList &ol)
+void GroupDefImpl::writeBriefDescription(OutputList &ol)
{
if (hasBriefDescription())
{
@@ -802,7 +920,7 @@ void GroupDef::writeBriefDescription(OutputList &ol)
ol.writeSynopsis();
}
-void GroupDef::writeGroupGraph(OutputList &ol)
+void GroupDefImpl::writeGroupGraph(OutputList &ol)
{
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(GROUP_GRAPHS)*/ )
{
@@ -822,7 +940,7 @@ void GroupDef::writeGroupGraph(OutputList &ol)
}
}
-void GroupDef::writeFiles(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeFiles(OutputList &ol,const QCString &title)
{
// write list of files
if (fileList->count()>0)
@@ -854,13 +972,13 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
}
}
-void GroupDef::writeNamespaces(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeNamespaces(OutputList &ol,const QCString &title)
{
// write list of namespaces
namespaceSDict->writeDeclaration(ol,title);
}
-void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeNestedGroups(OutputList &ol,const QCString &title)
{
// write list of groups
int count=0;
@@ -910,7 +1028,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
}
}
-void GroupDef::writeDirs(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeDirs(OutputList &ol,const QCString &title)
{
// write list of directories
if (dirList->count()>0)
@@ -943,18 +1061,18 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
}
}
-void GroupDef::writeClasses(OutputList &ol,const QCString &title)
+void GroupDefImpl::writeClasses(OutputList &ol,const QCString &title)
{
// write list of classes
classSDict->writeDeclaration(ol,0,title,FALSE);
}
-void GroupDef::writeInlineClasses(OutputList &ol)
+void GroupDefImpl::writeInlineClasses(OutputList &ol)
{
classSDict->writeDocumentation(ol);
}
-void GroupDef::writePageDocumentation(OutputList &ol)
+void GroupDefImpl::writePageDocumentation(OutputList &ol)
{
PageDef *pd=0;
PageSDict::Iterator pdi(*pageDict);
@@ -977,7 +1095,7 @@ void GroupDef::writePageDocumentation(OutputList &ol)
}
}
-void GroupDef::writeMemberGroups(OutputList &ol)
+void GroupDefImpl::writeMemberGroups(OutputList &ol)
{
/* write user defined member groups */
if (memberGroupSDict)
@@ -993,19 +1111,19 @@ void GroupDef::writeMemberGroups(OutputList &ol)
}
}
-void GroupDef::startMemberDeclarations(OutputList &ol)
+void GroupDefImpl::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
-void GroupDef::endMemberDeclarations(OutputList &ol)
+void GroupDefImpl::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
-void GroupDef::startMemberDocumentation(OutputList &ol)
+void GroupDefImpl::startMemberDocumentation(OutputList &ol)
{
- //printf("** GroupDef::startMemberDocumentation()\n");
+ //printf("** GroupDefImpl::startMemberDocumentation()\n");
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
ol.pushGeneratorState();
@@ -1014,9 +1132,9 @@ void GroupDef::startMemberDocumentation(OutputList &ol)
}
}
-void GroupDef::endMemberDocumentation(OutputList &ol)
+void GroupDefImpl::endMemberDocumentation(OutputList &ol)
{
- //printf("** GroupDef::endMemberDocumentation()\n");
+ //printf("** GroupDefImpl::endMemberDocumentation()\n");
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
ol.popGeneratorState();
@@ -1024,7 +1142,7 @@ void GroupDef::endMemberDocumentation(OutputList &ol)
}
}
-void GroupDef::writeAuthorSection(OutputList &ol)
+void GroupDefImpl::writeAuthorSection(OutputList &ol)
{
// write Author section (Man only)
ol.pushGeneratorState();
@@ -1036,7 +1154,7 @@ void GroupDef::writeAuthorSection(OutputList &ol)
ol.popGeneratorState();
}
-void GroupDef::writeSummaryLinks(OutputList &ol)
+void GroupDefImpl::writeSummaryLinks(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1081,7 +1199,7 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
ol.popGeneratorState();
}
-void GroupDef::writeDocumentation(OutputList &ol)
+void GroupDefImpl::writeDocumentation(OutputList &ol)
{
//static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
ol.pushGeneratorState();
@@ -1258,7 +1376,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
-void GroupDef::writeMemberPages(OutputList &ol)
+void GroupDefImpl::writeMemberPages(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1276,7 +1394,7 @@ void GroupDef::writeMemberPages(OutputList &ol)
ol.popGeneratorState();
}
-void GroupDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
+void GroupDefImpl::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
{
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
@@ -1525,12 +1643,12 @@ void addExampleToGroups(Entry *root,PageDef *eg)
}
}
-QCString GroupDef::getOutputFileBase() const
+QCString GroupDefImpl::getOutputFileBase() const
{
return fileName;
}
-void GroupDef::addListReferences()
+void GroupDefImpl::addListReferences()
{
{
QList<ListItemInfo> *xrefItems = xrefListItems();
@@ -1559,7 +1677,7 @@ void GroupDef::addListReferences()
}
}
-MemberList *GroupDef::createMemberList(MemberListType lt)
+MemberList *GroupDefImpl::createMemberList(MemberListType lt)
{
m_memberLists.setAutoDelete(TRUE);
QListIterator<MemberList> mli(m_memberLists);
@@ -1578,7 +1696,7 @@ MemberList *GroupDef::createMemberList(MemberListType lt)
return ml;
}
-void GroupDef::addMemberToList(MemberListType lt,MemberDef *md)
+void GroupDefImpl::addMemberToList(MemberListType lt,MemberDef *md)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
@@ -1589,7 +1707,7 @@ void GroupDef::addMemberToList(MemberListType lt,MemberDef *md)
ml->append(md);
}
-void GroupDef::sortMemberLists()
+void GroupDefImpl::sortMemberLists()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1599,7 +1717,7 @@ void GroupDef::sortMemberLists()
}
}
-MemberList *GroupDef::getMemberList(MemberListType lt) const
+MemberList *GroupDefImpl::getMemberList(MemberListType lt) const
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1613,7 +1731,7 @@ MemberList *GroupDef::getMemberList(MemberListType lt) const
return 0;
}
-void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
+void GroupDefImpl::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
{
static bool optimizeVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
@@ -1629,36 +1747,36 @@ void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
}
}
-void GroupDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
+void GroupDefImpl::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDocumentation(ol,name(),this,title);
}
-void GroupDef::removeMemberFromList(MemberListType lt,MemberDef *md)
+void GroupDefImpl::removeMemberFromList(MemberListType lt,MemberDef *md)
{
MemberList *ml = getMemberList(lt);
if (ml) ml->remove(md);
}
-void GroupDef::sortSubGroups()
+void GroupDefImpl::sortSubGroups()
{
groupList->sort();
}
-bool GroupDef::isLinkableInProject() const
+bool GroupDefImpl::isLinkableInProject() const
{
return !isReference() && isLinkable();
}
-bool GroupDef::isLinkable() const
+bool GroupDefImpl::isLinkable() const
{
return hasUserDocumentation();
}
// let the "programming language" for a group depend on what is inserted into it.
// First item that has an associated languages determines the language for the whole group.
-void GroupDef::updateLanguage(const Definition *d)
+void GroupDefImpl::updateLanguage(const Definition *d)
{
if (getLanguage()==SrcLangExt_Unknown && d->getLanguage()!=SrcLangExt_Unknown)
{
@@ -1666,7 +1784,7 @@ void GroupDef::updateLanguage(const Definition *d)
}
}
-bool GroupDef::hasDetailedDescription() const
+bool GroupDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
return ((!briefDescription().isEmpty() && repeatBrief) ||
diff --git a/src/groupdef.h b/src/groupdef.h
index be4475f..2649de7 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -42,122 +42,70 @@ class MemberDef;
class FTextStream;
/** A model of a group of symbols. */
-class GroupDef : public Definition
+class GroupDef : virtual public Definition
{
public:
- GroupDef(const char *fileName,int line,const char *name,const char *title,const char *refFileName=0);
- ~GroupDef();
- DefType definitionType() const { return TypeGroup; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- QCString displayName(bool=TRUE) const { return hasGroupTitle() ? title : Definition::name(); }
- const char *groupTitle() const { return title; }
- void setGroupTitle( const char *newtitle );
- bool hasGroupTitle( ) const { return titleSet; }
- void addFile(const FileDef *def);
- bool addClass(const ClassDef *def);
- bool addNamespace(const NamespaceDef *def);
- void addGroup(const GroupDef *def);
- void addParentGroup(const GroupDef *def);
- void addPage(PageDef *def);
- void addExample(const PageDef *def);
- void addDir(const DirDef *dd);
- bool insertMember(MemberDef *def,bool docOnly=FALSE);
- void removeMember(MemberDef *md);
- bool findGroup(const GroupDef *def) const; // true if def is a subgroup of this group
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
- void writeTagFile(FTextStream &);
- int countMembers() const;
- bool isLinkableInProject() const;
- bool isLinkable() const;
- bool isASubGroup() const;
- void computeAnchors();
-
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
-
- void addListReferences();
- void sortMemberLists();
- bool subGrouping() const { return m_subGrouping; }
-
- bool visited; // number of times accessed for output - KPW
-
- //friend void writeGroupTreeNode(OutputList&, GroupDef*, int, FTVHelp*);
- // make accessible for writing tree view of group in index.cpp - KPW
-
- void setGroupScope(Definition *d) { groupScope = d; }
- Definition *getGroupScope() const { return groupScope; }
-
- MemberList *getMemberList(MemberListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+ ~GroupDef() {}
+
+ virtual DefType definitionType() const = 0;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual const char *groupTitle() const = 0;
+ virtual void setGroupTitle( const char *newtitle ) = 0;
+ virtual bool hasGroupTitle( ) const = 0;
+ virtual void addFile(const FileDef *def) = 0;
+ virtual bool addClass(const ClassDef *def) = 0;
+ virtual bool addNamespace(const NamespaceDef *def) = 0;
+ virtual void addGroup(const GroupDef *def) = 0;
+ virtual void addPage(PageDef *def) = 0;
+ virtual void addExample(const PageDef *def) = 0;
+ virtual void addDir(const DirDef *dd) = 0;
+ virtual bool insertMember(MemberDef *def,bool docOnly=FALSE) = 0;
+ virtual void removeMember(MemberDef *md) = 0;
+ virtual bool findGroup(const GroupDef *def) const = 0;
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeMemberPages(OutputList &ol) = 0;
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+ virtual int countMembers() const = 0;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual bool isASubGroup() const = 0;
+ virtual void computeAnchors() = 0;
+
+ virtual void addMembersToMemberGroup() = 0;
+ virtual void distributeMemberGroupDocumentation() = 0;
+ virtual void findSectionsInDocumentation() = 0;
+
+ virtual void addListReferences() = 0;
+ virtual void sortMemberLists() = 0;
+ virtual bool subGrouping() const = 0;
+
+ virtual void setGroupScope(Definition *d) = 0;
+ virtual Definition *getGroupScope() const = 0;
+
+ virtual MemberList *getMemberList(MemberListType lt) const = 0;
+ virtual const QList<MemberList> &getMemberLists() const = 0;
/* user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
-
- FileList * getFiles() const { return fileList; }
- ClassSDict * getClasses() const { return classSDict; }
- NamespaceSDict * getNamespaces() const { return namespaceSDict; }
- GroupList * getSubGroups() const { return groupList; }
- PageSDict * getPages() const { return pageDict; }
- DirList * getDirs() const { return dirList; }
- PageSDict * getExamples() const { return exampleDict; }
- bool hasDetailedDescription() const;
- //MemberList* getMembers() const { return allMemberList; }
- void sortSubGroups();
-
- protected:
- void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
-
- private:
- MemberList *createMemberList(MemberListType lt);
- void addMemberToList(MemberListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
- void removeMemberFromList(MemberListType lt,MemberDef *md);
- void writeGroupGraph(OutputList &ol);
- void writeFiles(OutputList &ol,const QCString &title);
- void writeNamespaces(OutputList &ol,const QCString &title);
- void writeNestedGroups(OutputList &ol,const QCString &title);
- void writeDirs(OutputList &ol,const QCString &title);
- void writeClasses(OutputList &ol,const QCString &title);
- void writeInlineClasses(OutputList &ol);
- void writePageDocumentation(OutputList &ol);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void writeMemberGroups(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeSummaryLinks(OutputList &ol);
- void updateLanguage(const Definition *);
-
- QCString title; // title of the group
- bool titleSet; // true if title is not the same as the name
- QCString fileName; // base name of the generated file
- FileList *fileList; // list of files in the group
- ClassSDict *classSDict; // list of classes in the group
- NamespaceSDict *namespaceSDict; // list of namespaces in the group
- GroupList *groupList; // list of sub groups.
- PageSDict *pageDict; // list of pages in the group
- PageSDict *exampleDict; // list of examples in the group
- DirList *dirList; // list of directories in the group
-
- MemberList *allMemberList;
- MemberNameInfoSDict *allMemberNameInfoSDict;
-
- Definition *groupScope;
-
- QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
- bool m_subGrouping;
+ virtual MemberGroupSDict *getMemberGroupSDict() const = 0;
+
+ virtual FileList * getFiles() const = 0;
+ virtual ClassSDict * getClasses() const = 0;
+ virtual NamespaceSDict * getNamespaces() const = 0;
+ virtual GroupList * getSubGroups() const = 0;
+ virtual PageSDict * getPages() const = 0;
+ virtual DirList * getDirs() const = 0;
+ virtual PageSDict * getExamples() const = 0;
+ virtual bool hasDetailedDescription() const = 0;
+ virtual void sortSubGroups() = 0;
};
+GroupDef *createGroupDef(const char *fileName,int line,const char *name,
+ const char *title,const char *refFileName=0);
+
/** A sorted dictionary of GroupDef objects. */
class GroupSDict : public SDict<GroupDef>
{
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 25166bc..37f6bd0 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -211,6 +211,34 @@ static bool isInvisibleNode(DocNode *node)
;
}
+static void mergeHtmlAttributes(const HtmlAttribList &attribs, HtmlAttribList *mergeInto)
+{
+ HtmlAttribListIterator li(attribs);
+ HtmlAttrib *att;
+ for (li.toFirst();(att=li.current());++li)
+ {
+ HtmlAttribListIterator ml(*mergeInto);
+ HtmlAttrib *opt;
+ bool found = false;
+ for (ml.toFirst();(opt=ml.current());++ml)
+ {
+ if (opt->name == att -> name)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found)
+ {
+ opt->value = opt->value + " " + att->value;
+ }
+ else
+ {
+ mergeInto->append(att);
+ }
+ }
+}
+
static QCString htmlAttribsToString(const HtmlAttribList &attribs, QCString *pAltValue = 0)
{
QCString result;
@@ -350,17 +378,17 @@ void HtmlDocVisitor::visit(DocURL *u)
}
}
-void HtmlDocVisitor::visit(DocLineBreak *)
+void HtmlDocVisitor::visit(DocLineBreak *br)
{
if (m_hide) return;
- m_t << "<br />\n";
+ m_t << "<br "<< htmlAttribsToString(br->attribs()) << " />\n";
}
void HtmlDocVisitor::visit(DocHorRuler *hr)
{
if (m_hide) return;
forceEndParagraph(hr);
- m_t << "<hr/>\n";
+ m_t << "<hr "<< htmlAttribsToString(hr->attribs()) << " />\n";
forceStartParagraph(hr);
}
@@ -614,7 +642,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
void HtmlDocVisitor::visit(DocAnchor *anc)
{
if (m_hide) return;
- m_t << "<a class=\"anchor\" id=\"" << anc->anchor() << "\"></a>";
+ m_t << "<a class=\"anchor\" id=\"" << anc->anchor() << "\"" << htmlAttribsToString(anc->attribs()) << "></a>";
}
void HtmlDocVisitor::visit(DocInclude *inc)
@@ -649,7 +677,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
forceEndParagraph(inc);
m_t << PREFRAG_START;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -657,7 +685,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
@@ -665,11 +693,14 @@ void HtmlDocVisitor::visit(DocInclude *inc)
TRUE, // show line numbers
m_ctx // search context
);
+ delete fd;
m_t << PREFRAG_END;
forceStartParagraph(inc);
}
break;
- case DocInclude::DontInclude:
+ case DocInclude::DontInclude:
+ case DocInclude::LatexInclude:
+ case DocInclude::DontIncWithLines:
break;
case DocInclude::HtmlInclude:
{
@@ -678,8 +709,6 @@ void HtmlDocVisitor::visit(DocInclude *inc)
if (inc->isBlock()) forceStartParagraph(inc);
}
break;
- case DocInclude::LatexInclude:
- break;
case DocInclude::VerbInclude:
forceEndParagraph(inc);
m_t << /*PREFRAG_START <<*/ "<pre class=\"fragment\">";
@@ -715,7 +744,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
forceEndParagraph(inc);
m_t << PREFRAG_START;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -723,7 +752,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
@@ -731,6 +760,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
TRUE, // show line number
m_ctx // search context
);
+ delete fd;
m_t << PREFRAG_END;
forceStartParagraph(inc);
}
@@ -760,6 +790,12 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
Doxygen::parserManager->getParser(m_langExt)
->parseCode(
m_ci,
@@ -768,14 +804,15 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
langExt,
op->isExample(),
op->exampleFile(),
- 0, // fileDef
- -1, // startLine
+ fd, // fileDef
+ op->line(), // startLine
-1, // endLine
FALSE, // inline fragment
0, // memberDef
- TRUE, // show line numbers
+ op->showLineNo(), // show line numbers
m_ctx // search context
);
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
@@ -1206,9 +1243,9 @@ void HtmlDocVisitor::visitPre(DocPara *p)
//printf(" needsTag=%d\n",needsTag);
// write the paragraph tag (if needed)
if (needsTag)
- m_t << "<p" << getDirHtmlClassOfNode(getTextDirByConfig(p), contexts[t]) << ">";
+ m_t << "<p" << getDirHtmlClassOfNode(getTextDirByConfig(p), contexts[t]) << htmlAttribsToString(p->attribs()) << ">";
else if(!paragraphAlreadyStarted)
- m_t << getHtmlDirEmbedingChar(getTextDirByConfig(p));
+ m_t << getHtmlDirEmbedingChar(getTextDirByConfig(p)) << htmlAttribsToString(p->attribs());
}
void HtmlDocVisitor::visitPost(DocPara *p)
@@ -1492,7 +1529,11 @@ void HtmlDocVisitor::visitPre(DocHtmlTable *t)
if (t->hasCaption())
{
- m_t << "<a class=\"anchor\" id=\"" << t->caption()->anchor() << "\"></a>\n";
+ QCString anc = t->caption()->anchor();
+ if (!anc.isEmpty())
+ {
+ m_t << "<a class=\"anchor\" id=\"" << anc << "\"></a>\n";
+ }
}
QString attrs = htmlAttribsToString(t->attribs());
@@ -1647,8 +1688,18 @@ void HtmlDocVisitor::visitPre(DocImage *img)
sizeAttribs+=" height=\""+img->height()+"\"";
}
// 16 cases: url.isEmpty() | typeSVG | inlineImage | img->hasCaption()
+
+ HtmlAttribList extraAttribs;
+ if (typeSVG)
+ {
+ HtmlAttrib opt;
+ opt.name = "style";
+ opt.value = "pointer-events: none;";
+ extraAttribs.append(&opt);
+ }
QCString alt;
- QCString attrs = htmlAttribsToString(img->attribs(),&alt);
+ mergeHtmlAttributes(img->attribs(),&extraAttribs);
+ QCString attrs = htmlAttribsToString(extraAttribs,&alt);
QCString src;
if (url.isEmpty())
{
@@ -1660,7 +1711,7 @@ void HtmlDocVisitor::visitPre(DocImage *img)
}
if (typeSVG)
{
- m_t << "<object type=\"image/svg+xml\" style=\"pointer-events: none;\" data=\"" << src
+ m_t << "<object type=\"image/svg+xml\" data=\"" << src
<< "\"" << sizeAttribs << attrs;
if (inlineImage)
{
@@ -1867,8 +1918,8 @@ void HtmlDocVisitor::visitPre(DocSecRefList *s)
{
if (m_hide) return;
forceEndParagraph(s);
- m_t << "<div class=\"multicol\">" << endl;
- m_t << "<ul>" << endl;
+ m_t << "<div>" << endl;
+ m_t << "<ul class=\"multicol\">" << endl;
}
void HtmlDocVisitor::visitPost(DocSecRefList *s)
@@ -2195,7 +2246,7 @@ void HtmlDocVisitor::startLink(const QCString &ref,const QCString &file,
if (!ref.isEmpty()) // link to entity imported via tag file
{
m_t << "<a class=\"elRef\" ";
- m_t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
+ m_t << externalLinkTarget();
}
else // local link
{
@@ -2371,16 +2422,14 @@ void HtmlDocVisitor::forceEndParagraph(DocNode *n)
DocPara *para = (DocPara*)n->parent();
int nodeIndex = para->children().findRef(n);
nodeIndex--;
- if (nodeIndex<0) return; // first node
+ if (nodeIndex<0) return; // first node in paragraph
while (nodeIndex>=0 && isInvisibleNode(para->children().at(nodeIndex)))
{
nodeIndex--;
}
- if (nodeIndex>=0)
- {
- DocNode *n = para->children().at(nodeIndex);
- if (mustBeOutsideParagraph(n)) return;
- }
+ if (nodeIndex<0) return; // first visible node in paragraph
+ DocNode *n = para->children().at(nodeIndex);
+ if (mustBeOutsideParagraph(n)) return; // previous node already outside paragraph context
nodeIndex--;
bool styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,nodeIndex);
bool isFirst;
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index b8fc5a2..d89bb49 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -25,7 +25,6 @@
#include "config.h"
#include "util.h"
#include "doxygen.h"
-#include "logos.h"
#include "diagram.h"
#include "version.h"
#include "dot.h"
@@ -43,7 +42,7 @@
#include "ftvhelp.h"
#include "bufstr.h"
#include "resourcemgr.h"
-
+#include "tooltip.h"
//#define DBG_HTML(x) x;
#define DBG_HTML(x)
@@ -556,7 +555,7 @@ void HtmlCodeGenerator::_writeCodeLink(const char *className,
if (ref)
{
m_t << "<a class=\"" << className << "Ref\" ";
- m_t << externalLinkTarget() << externalRef(m_relPath,ref,FALSE);
+ m_t << externalLinkTarget();
}
else
{
@@ -667,7 +666,15 @@ void HtmlCodeGenerator::startCodeLine(bool hasLineNumbers)
void HtmlCodeGenerator::endCodeLine()
{
- if (m_streamSet) m_t << "</div>";
+ if (m_streamSet)
+ {
+ if (m_col == 0)
+ {
+ m_t << " ";
+ m_col++;
+ }
+ m_t << "</div>";
+ }
}
void HtmlCodeGenerator::startFontClass(const char *s)
@@ -981,6 +988,9 @@ void HtmlGenerator::writePageFooter(FTextStream &t,const QCString &lastTitle,
void HtmlGenerator::writeFooter(const char *navPath)
{
+ // Currently only tooltips in HTML
+ TooltipManager::instance()->writeTooltips(m_codeGen);
+
writePageFooter(t,lastTitle,relPath,navPath);
}
@@ -1111,7 +1121,7 @@ void HtmlGenerator::startIndexItem(const char *ref,const char *f)
if (ref)
{
t << "<a class=\"elRef\" ";
- t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
+ t << externalLinkTarget();
}
else
{
@@ -1157,7 +1167,7 @@ void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
if (ref)
{
t << "<a class=\"elRef\" ";
- t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
+ t << externalLinkTarget();
}
else
{
diff --git a/src/index.cpp b/src/index.cpp
index 5d16e4e..b401a0a 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -48,6 +48,7 @@
#include "classlist.h"
#include "namespacedef.h"
#include "filename.h"
+#include "tooltip.h"
#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
@@ -301,9 +302,11 @@ void endFile(OutputList &ol,bool skipNavIndex,bool skipEndContents,
ol.writeString("</div><!-- doc-content -->\n");
}
}
+
ol.writeFooter(navPath); // write the footer
ol.popGeneratorState();
ol.endFile();
+ TooltipManager::instance()->clearTooltips(); // Only clear after the last is written
}
void endFileWithNavPath(Definition *d,OutputList &ol)
@@ -487,7 +490,7 @@ static void writeClassTree(OutputList &ol,const BaseClassList *bcl,bool hideSupe
}
ol.startIndexListItem();
//printf("Passed...\n");
- bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
+ bool hasChildren = !cd->isVisited() && !hideSuper && classHasVisibleChildren(cd);
//printf("tree4: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
@@ -534,8 +537,8 @@ static void writeClassTree(OutputList &ol,const BaseClassList *bcl,bool hideSupe
if (hasChildren)
{
//printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
- bool wasVisited=cd->visited;
- cd->visited=TRUE;
+ bool wasVisited=cd->isVisited();
+ cd->setVisited(TRUE);
if (cd->getLanguage()==SrcLangExt_VHDL)
{
writeClassTree(ol,cd->baseClasses(),wasVisited,level+1,ftv,addToIndex);
@@ -869,7 +872,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
started=TRUE;
}
ol.startIndexListItem();
- bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
+ bool hasChildren = !cd->isVisited() && classHasVisibleChildren(cd);
//printf("list: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
@@ -910,13 +913,13 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT
}
if (cd->getLanguage()==SrcLangExt_VHDL && hasChildren)
{
- writeClassTree(ol,cd->baseClasses(),cd->visited,1,ftv,addToIndex);
- cd->visited=TRUE;
+ writeClassTree(ol,cd->baseClasses(),cd->isVisited(),1,ftv,addToIndex);
+ cd->setVisited(TRUE);
}
else if (hasChildren)
{
- writeClassTree(ol,cd->subClasses(),cd->visited,1,ftv,addToIndex);
- cd->visited=TRUE;
+ writeClassTree(ol,cd->subClasses(),cd->isVisited(),1,ftv,addToIndex);
+ cd->setVisited(TRUE);
}
ol.endIndexListItem();
}
@@ -2219,6 +2222,7 @@ static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct
// the last column may contain less items then the others
//int colsInRow = (i<rows-1) ? columns : itemsInLastRow;
//printf("row [%d]\n",i);
+ bool cellCont = false;
for (j=0;j<columns;j++) // foreach table column
{
if (colIterators[j])
@@ -2230,6 +2234,7 @@ static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct
{
if (cell->letter()!=0)
{
+ cellCont = true;
QCString s = letterToLabel(cell->letter());
ol.writeString("<td rowspan=\"2\" valign=\"bottom\">");
ol.writeString("<a name=\"letter_");
@@ -2246,6 +2251,7 @@ static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct
}
else if (cell->classDef()!=(ClassDef*)0x8)
{
+ cellCont = true;
cd = cell->classDef();
ol.writeString("<td valign=\"top\">");
QCString namesp,cname;
@@ -2284,20 +2290,21 @@ static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct
}
ol.writeNonBreakableSpace(3);
}
- else
+ ++(*colIterators[j]);
+ if (cell->letter()!=0 || cell->classDef()!=(ClassDef*)0x8)
{
- ol.writeString("<td>");
+ ol.writeString("</td>\n");
}
- ++(*colIterators[j]);
- ol.writeString("</td>");
}
}
else
{
+ cellCont = true;
ol.writeString("<td></td>");
}
}
}
+ if (!cellCont) ol.writeString("<td></td>"); // we need at least one cell in case of xhtml
ol.writeString("</tr>\n");
}
ol.writeString("</table>\n");
@@ -3882,7 +3889,7 @@ static int countGroups()
{
if (!gd->isReference())
{
- gd->visited=FALSE;
+ //gd->visited=FALSE;
count++;
}
}
@@ -3900,7 +3907,6 @@ static int countDirs()
{
if (dd->isLinkableInProject())
{
- dd->visited=FALSE;
count++;
}
}
@@ -3940,8 +3946,9 @@ void writeGraphInfo(OutputList &ol)
legendDocs = legendDocs.left(s+8) + "[!-- SVG 0 --]\n" + legendDocs.mid(e);
//printf("legendDocs=%s\n",legendDocs.data());
}
- FileDef fd("","graph_legend");
- ol.generateDoc("graph_legend",1,&fd,0,legendDocs,FALSE,FALSE);
+ FileDef *fd = createFileDef("","graph_legend");
+ ol.generateDoc("graph_legend",1,fd,0,legendDocs,FALSE,FALSE);
+ delete fd;
// restore config settings
stripCommentsStateRef = oldStripCommentsState;
@@ -5275,22 +5282,7 @@ static void writeMenuData()
if (f.open(IO_WriteOnly))
{
FTextStream t(&f);
- t << "/*\n@ @licstart The following is the entire license notice for the\n"
- "JavaScript code in this file.\n\nCopyright (C) 1997-2017 by Dimitri van Heesch\n\n"
- "This program is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
- "the Free Software Foundation; either version 2 of the License, or\n"
- "(at your option) any later version.\n\n"
- "This program is distributed in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- " GNU General Public License for more details.\n\n"
- "You should have received a copy of the GNU General Public License along\n"
- "with this program; if not, write to the Free Software Foundation, Inc.,\n"
- "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\n"
- "@licend The above is the entire license notice\n"
- "for the JavaScript code in this file\n"
- "*/\n";
+ t << JAVASCRIPT_LICENSE_TEXT;
t << "var menudata={";
bool hasChildren = renderQuickLinksAsJs(t,root,TRUE);
if (hasChildren) t << "]";
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 463eedf..2e979bd 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -38,7 +38,7 @@
const int maxLevels=5;
static const char *secLabels[maxLevels] =
- { "section","subsection","subsubsection","paragraph","subparagraph" };
+ { "doxysection","doxysubsection","doxysubsubsection","doxyparagraph","doxysubparagraph" };
static const char *getSectionName(int level)
{
@@ -458,20 +458,21 @@ void LatexDocVisitor::visit(DocInclude *inc)
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
0, // memberDef
TRUE // show line numbers
);
+ delete fd;
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
@@ -493,9 +494,9 @@ void LatexDocVisitor::visit(DocInclude *inc)
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}\n";
break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
+ case DocInclude::DontInclude:
+ case DocInclude::DontIncWithLines:
+ case DocInclude::HtmlInclude:
break;
case DocInclude::LatexInclude:
m_t << inc->text();
@@ -524,7 +525,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
case DocInclude::SnipWithLines:
{
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(inc->extension())
@@ -534,13 +535,14 @@ void LatexDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
@@ -570,9 +572,24 @@ void LatexDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),op->text(),langExt,
- op->isExample(),op->exampleFile());
+ op->isExample(),op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index b860195..de20e15 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -913,39 +913,39 @@ void LatexGenerator::startIndexSection(IndexSections is)
}
break;
case isMainPage:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Introduction}\n"
break;
//case isPackageIndex:
- // if (compactLatex) t << "\\section"; else t << "\\chapter";
+ // if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
// t << "{"; //Package Index}\n"
// break;
case isModuleIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Module Index}\n"
break;
case isDirIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Directory Index}\n"
break;
case isNamespaceIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Namespace Index}\"
break;
case isClassHierarchyIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Hierarchical Index}\n"
break;
case isCompoundIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Annotated Compound Index}\n"
break;
case isFileIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Annotated File Index}\n"
break;
case isPageIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Annotated Page Index}\n"
break;
case isModuleDocumentation:
@@ -957,7 +957,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if (!gd->isReference())
{
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Module Documentation}\n";
found=TRUE;
}
@@ -973,7 +973,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if (dd->isLinkableInProject())
{
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Module Documentation}\n";
found=TRUE;
}
@@ -989,7 +989,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if (nd->isLinkableInProject())
{
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; // Namespace Documentation}\n":
found=TRUE;
}
@@ -1008,7 +1008,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
!cd->isEmbeddedInOuterScope()
)
{
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Compound Documentation}\n";
found=TRUE;
}
@@ -1030,7 +1030,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if (isFirst)
{
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //File Documentation}\n";
isFirst=FALSE;
break;
@@ -1042,13 +1042,13 @@ void LatexGenerator::startIndexSection(IndexSections is)
break;
case isExampleDocumentation:
{
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Example Documentation}\n";
}
break;
case isPageDocumentation:
{
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{"; //Page Documentation}\n";
}
break;
@@ -1275,7 +1275,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
{
if (!pd->getGroupDef() && !pd->isReference())
{
- if (compactLatex) t << "\\section"; else t << "\\chapter";
+ if (compactLatex) t << "\\doxysection"; else t << "\\chapter";
t << "{" << pd->title();
t << "}\n";
@@ -1515,11 +1515,11 @@ void LatexGenerator::startTitleHead(const char *fileName)
}
if (Config_getBool(COMPACT_LATEX))
{
- t << "\\subsection{";
+ t << "\\doxysubsection{";
}
else
{
- t << "\\section{";
+ t << "\\doxysection{";
}
}
@@ -1540,11 +1540,11 @@ void LatexGenerator::startTitle()
{
if (Config_getBool(COMPACT_LATEX))
{
- t << "\\subsection{";
+ t << "\\doxysubsection{";
}
else
{
- t << "\\section{";
+ t << "\\doxysection{";
}
}
@@ -1557,19 +1557,19 @@ void LatexGenerator::startGroupHeader(int extraIndentLevel)
if (extraIndentLevel==3)
{
- t << "\\subparagraph*{";
+ t << "\\doxysubparagraph*{";
}
else if (extraIndentLevel==2)
{
- t << "\\paragraph{";
+ t << "\\doxyparagraph{";
}
else if (extraIndentLevel==1)
{
- t << "\\subsubsection{";
+ t << "\\doxysubsubsection{";
}
else // extraIndentLevel==0
{
- t << "\\subsection{";
+ t << "\\doxysubsection{";
}
disableLinks=TRUE;
}
@@ -1584,11 +1584,11 @@ void LatexGenerator::startMemberHeader(const char *,int)
{
if (Config_getBool(COMPACT_LATEX))
{
- t << "\\subsubsection*{";
+ t << "\\doxysubsubsection*{";
}
else
{
- t << "\\subsection*{";
+ t << "\\doxysubsection*{";
}
disableLinks=TRUE;
}
@@ -1637,7 +1637,7 @@ void LatexGenerator::startMemberDoc(const char *clname,
}
t << "}" << endl;
}
- static const char *levelLab[] = { "subsubsection","paragraph","subparagraph", "subparagraph" };
+ static const char *levelLab[] = { "doxysubsubsection","doxyparagraph","doxysubparagraph", "doxysubparagraph" };
static bool compactLatex = Config_getBool(COMPACT_LATEX);
static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
int level=0;
@@ -1755,11 +1755,11 @@ void LatexGenerator::startSection(const char *lab,const char *,SectionInfo::Sect
{
switch(type)
{
- case SectionInfo::Page: t << "subsection"; break;
- case SectionInfo::Section: t << "subsubsection"; break;
- case SectionInfo::Subsection: t << "paragraph"; break;
- case SectionInfo::Subsubsection: t << "subparagraph"; break;
- case SectionInfo::Paragraph: t << "subparagraph"; break;
+ case SectionInfo::Page: t << "doxysubsection"; break;
+ case SectionInfo::Section: t << "doxysubsubsection"; break;
+ case SectionInfo::Subsection: t << "doxyparagraph"; break;
+ case SectionInfo::Subsubsection: t << "doxysubparagraph"; break;
+ case SectionInfo::Paragraph: t << "doxysubparagraph"; break;
default: ASSERT(0); break;
}
t << "{";
@@ -1768,11 +1768,11 @@ void LatexGenerator::startSection(const char *lab,const char *,SectionInfo::Sect
{
switch(type)
{
- case SectionInfo::Page: t << "section"; break;
- case SectionInfo::Section: t << "subsection"; break;
- case SectionInfo::Subsection: t << "subsubsection"; break;
- case SectionInfo::Subsubsection: t << "paragraph"; break;
- case SectionInfo::Paragraph: t << "subparagraph"; break;
+ case SectionInfo::Page: t << "doxysection"; break;
+ case SectionInfo::Section: t << "doxysubsection"; break;
+ case SectionInfo::Subsection: t << "doxysubsubsection"; break;
+ case SectionInfo::Subsubsection: t << "doxyparagraph"; break;
+ case SectionInfo::Paragraph: t << "doxysubparagraph"; break;
default: ASSERT(0); break;
}
t << "{";
@@ -1800,7 +1800,7 @@ void LatexGenerator::writeChar(char c)
void LatexGenerator::startClassDiagram()
{
- //if (Config_getBool(COMPACT_LATEX)) t << "\\subsubsection"; else t << "\\subsection";
+ //if (Config_getBool(COMPACT_LATEX)) t << "\\doxysubsubsection"; else t << "\\doxysubsection";
//t << "{";
}
@@ -1994,11 +1994,11 @@ void LatexGenerator::startMemberGroupHeader(bool hasHeader)
// changed back to rev 756 due to bug 660501
//if (Config_getBool(COMPACT_LATEX))
//{
- // t << "\\subparagraph*{";
+ // t << "\\doxysubparagraph*{";
//}
//else
//{
- // t << "\\paragraph*{";
+ // t << "\\doxyparagraph*{";
//}
}
@@ -2243,11 +2243,11 @@ void LatexGenerator::startInlineHeader()
{
if (Config_getBool(COMPACT_LATEX))
{
- t << "\\paragraph*{";
+ t << "\\doxyparagraph*{";
}
else
{
- t << "\\subsubsection*{";
+ t << "\\doxysubsubsection*{";
}
}
diff --git a/src/logos.cpp b/src/logos.cpp
deleted file mode 100644
index e9e0905..0000000
--- a/src/logos.cpp
+++ /dev/null
@@ -1,1985 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#include <stdio.h>
-
-#include <qfile.h>
-#include <qdir.h>
-
-// Stripped version of FreeSans.ttf part of FreeFonts package,
-// see http://www.nongnu.org/freefont for more info
-unsigned char FreeSans_ttf[] = {
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x03, 0x00, 0x70,
- 0x47, 0x44, 0x45, 0x46, 0x01, 0x0a, 0x00, 0xe3, 0x00, 0x00, 0x48, 0x28,
- 0x00, 0x00, 0x00, 0x2a, 0x47, 0x50, 0x4f, 0x53, 0x9d, 0x1a, 0x99, 0x8a,
- 0x00, 0x00, 0x49, 0x50, 0x00, 0x00, 0x10, 0x42, 0x47, 0x53, 0x55, 0x42,
- 0xa8, 0x85, 0x92, 0x0c, 0x00, 0x00, 0x48, 0x54, 0x00, 0x00, 0x00, 0xfc,
- 0x4f, 0x53, 0x2f, 0x32, 0x67, 0x3f, 0xcf, 0x10, 0x00, 0x00, 0x01, 0x78,
- 0x00, 0x00, 0x00, 0x56, 0x63, 0x6d, 0x61, 0x70, 0xe6, 0xd7, 0x91, 0x3d,
- 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x01, 0x8a, 0x63, 0x76, 0x74, 0x20,
- 0x00, 0x21, 0x02, 0x79, 0x00, 0x00, 0x06, 0x78, 0x00, 0x00, 0x00, 0x04,
- 0x67, 0x61, 0x73, 0x70, 0xff, 0xff, 0x00, 0x03, 0x00, 0x00, 0x48, 0x20,
- 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, 0xb3, 0x58, 0xaf, 0x41,
- 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x37, 0xca, 0x68, 0x65, 0x61, 0x64,
- 0xe7, 0x18, 0xbe, 0xac, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x36,
- 0x68, 0x68, 0x65, 0x61, 0x10, 0xbb, 0x06, 0xf2, 0x00, 0x00, 0x01, 0x34,
- 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, 0x55, 0x0d, 0x49, 0xe2,
- 0x00, 0x00, 0x01, 0xd0, 0x00, 0x00, 0x03, 0x1a, 0x6c, 0x6f, 0x63, 0x61,
- 0x1f, 0xdd, 0x2c, 0xb6, 0x00, 0x00, 0x06, 0x7c, 0x00, 0x00, 0x01, 0x94,
- 0x6d, 0x61, 0x78, 0x70, 0x01, 0x16, 0x00, 0xb3, 0x00, 0x00, 0x01, 0x58,
- 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x85, 0x1f, 0xf3, 0x73,
- 0x00, 0x00, 0x3f, 0xdc, 0x00, 0x00, 0x06, 0x69, 0x70, 0x6f, 0x73, 0x74,
- 0x46, 0xf5, 0x10, 0xd8, 0x00, 0x00, 0x46, 0x48, 0x00, 0x00, 0x01, 0xd6,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xc2, 0x8f, 0x00, 0x8a, 0xba, 0xad,
- 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x44, 0xd8, 0x89, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x44, 0xd8, 0x89,
- 0xff, 0xd3, 0xfe, 0x3d, 0x07, 0x9c, 0x07, 0xd1, 0x00, 0x00, 0x00, 0x08,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x07, 0xd1, 0xfe, 0x3d, 0x01, 0x78, 0x08, 0x1e, 0xff, 0xd3, 0xff, 0xd2,
- 0x07, 0x9c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0xc9, 0x00, 0x66, 0x00, 0x05, 0x00, 0x49, 0x00, 0x04, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x03, 0x87, 0x01, 0x90, 0x00, 0x05,
- 0x00, 0x00, 0x05, 0x33, 0x05, 0x99, 0x00, 0x00, 0x03, 0xd7, 0x05, 0x33,
- 0x05, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x02, 0x12, 0x00, 0x00,
- 0x02, 0x0b, 0x05, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00,
- 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x50, 0x66, 0x45, 0x64, 0x00, 0x40, 0x00, 0x0d, 0x02, 0xdc,
- 0x06, 0x66, 0xfe, 0x66, 0x00, 0x00, 0x07, 0xd1, 0x01, 0xc3, 0x80, 0x02,
- 0x00, 0xbf, 0xdf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x89,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0xb2, 0x00, 0x00,
- 0x02, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0xfe, 0x02, 0xd7, 0x00, 0x6a,
- 0x04, 0x72, 0x00, 0x1d, 0x04, 0x72, 0x00, 0x44, 0x07, 0x1c, 0x00, 0x3b,
- 0x05, 0x56, 0x00, 0x6a, 0x01, 0x87, 0x00, 0x62, 0x02, 0xa9, 0x00, 0x96,
- 0x02, 0xa9, 0x00, 0x4e, 0x03, 0x1c, 0x00, 0x52, 0x04, 0xac, 0x00, 0x66,
- 0x02, 0x39, 0x00, 0xb2, 0x02, 0xa9, 0x00, 0x5e, 0x02, 0x39, 0x00, 0xb2,
- 0x02, 0x39, 0xff, 0xf0, 0x04, 0x72, 0x00, 0x58, 0x04, 0x72, 0x00, 0xd1,
- 0x04, 0x72, 0x00, 0x46, 0x04, 0x72, 0x00, 0x42, 0x04, 0x72, 0x00, 0x39,
- 0x04, 0x72, 0x00, 0x48, 0x04, 0x72, 0x00, 0x58, 0x04, 0x72, 0x00, 0x5e,
- 0x04, 0x72, 0x00, 0x4c, 0x04, 0x72, 0x00, 0x4e, 0x02, 0x39, 0x00, 0xe1,
- 0x02, 0x39, 0x00, 0xe1, 0x04, 0xac, 0x00, 0x5c, 0x04, 0xac, 0x00, 0x66,
- 0x04, 0xac, 0x00, 0x66, 0x04, 0x72, 0x00, 0x9e, 0x08, 0x1e, 0x00, 0x46,
- 0x05, 0x56, 0x00, 0x23, 0x05, 0x56, 0x00, 0xa2, 0x05, 0xc6, 0x00, 0x62,
- 0x05, 0xc6, 0x00, 0xb6, 0x05, 0x56, 0x00, 0xb8, 0x04, 0xe3, 0x00, 0xb8,
- 0x06, 0x39, 0x00, 0x5a, 0x05, 0xc6, 0x00, 0xaa, 0x02, 0x39, 0x00, 0xcd,
- 0x04, 0x00, 0x00, 0x23, 0x05, 0x56, 0x00, 0xa2, 0x04, 0x72, 0x00, 0xa4,
- 0x06, 0xa9, 0x00, 0x9a, 0x05, 0xc6, 0x00, 0x9c, 0x06, 0x39, 0x00, 0x4e,
- 0x05, 0x56, 0x00, 0xba, 0x06, 0x39, 0x00, 0x4e, 0x05, 0xc6, 0x00, 0xbe,
- 0x05, 0x56, 0x00, 0x62, 0x04, 0xe3, 0x00, 0x2b, 0x05, 0xc6, 0x00, 0xae,
- 0x05, 0x56, 0x00, 0x3d, 0x07, 0x8d, 0x00, 0x2d, 0x05, 0x56, 0x00, 0x2d,
- 0x05, 0x56, 0x00, 0x1b, 0x04, 0xe3, 0x00, 0x39, 0x02, 0x39, 0x00, 0x83,
- 0x02, 0x39, 0xff, 0xf0, 0x02, 0x39, 0x00, 0x2f, 0x03, 0xc0, 0x00, 0x5a,
- 0x04, 0x72, 0xff, 0xd3, 0x02, 0xa9, 0x00, 0x2d, 0x04, 0x72, 0x00, 0x56,
- 0x04, 0x72, 0x00, 0x6f, 0x04, 0x00, 0x00, 0x3f, 0x04, 0x72, 0x00, 0x35,
- 0x04, 0x72, 0x00, 0x52, 0x02, 0x39, 0x00, 0x25, 0x04, 0x72, 0x00, 0x3b,
- 0x04, 0x72, 0x00, 0x8f, 0x01, 0xc6, 0x00, 0x87, 0x01, 0xc6, 0xff, 0xdb,
- 0x04, 0x00, 0x00, 0x77, 0x01, 0xc6, 0x00, 0x8b, 0x06, 0xa9, 0x00, 0x8f,
- 0x04, 0x72, 0x00, 0x8f, 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x6f,
- 0x04, 0x72, 0x00, 0x35, 0x02, 0xa9, 0x00, 0x8d, 0x04, 0x00, 0x00, 0x46,
- 0x02, 0x39, 0x00, 0x1d, 0x04, 0x72, 0x00, 0x85, 0x04, 0x00, 0x00, 0x14,
- 0x05, 0xc6, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x23, 0x04, 0x00, 0x00, 0x29,
- 0x04, 0x00, 0x00, 0x3f, 0x02, 0xac, 0x00, 0x58, 0x02, 0x14, 0x00, 0xcd,
- 0x02, 0xac, 0x00, 0x3b, 0x04, 0xac, 0x00, 0x9a, 0x02, 0x39, 0x00, 0x00,
- 0x02, 0x39, 0x00, 0xfa, 0x04, 0x72, 0x00, 0x6a, 0x04, 0x72, 0x00, 0x35,
- 0x04, 0x72, 0x00, 0x89, 0x04, 0x72, 0x00, 0x17, 0x02, 0x14, 0x00, 0xcd,
- 0x04, 0x72, 0x00, 0x58, 0x02, 0xa9, 0x00, 0x3d, 0x05, 0xe5, 0xff, 0xe5,
- 0x02, 0xf5, 0x00, 0x4c, 0x04, 0x72, 0x00, 0xc9, 0x04, 0xac, 0x00, 0x52,
- 0x02, 0xa9, 0x00, 0x5e, 0x05, 0xe5, 0xff, 0xe5, 0x02, 0xa9, 0x00, 0x39,
- 0x04, 0xd9, 0x01, 0x35, 0x04, 0xac, 0x00, 0x66, 0x02, 0xce, 0x00, 0x27,
- 0x02, 0xce, 0x00, 0x21, 0x02, 0xa9, 0x00, 0xbc, 0x04, 0x72, 0x00, 0x85,
- 0x04, 0x4b, 0x00, 0x62, 0x02, 0x39, 0x00, 0xb2, 0x02, 0xa9, 0x00, 0x50,
- 0x02, 0xce, 0x00, 0x7d, 0x02, 0xeb, 0x00, 0x52, 0x04, 0x72, 0x00, 0xc9,
- 0x06, 0xf3, 0x00, 0x7d, 0x06, 0xf3, 0x00, 0x7d, 0x06, 0xf3, 0x00, 0x21,
- 0x04, 0x72, 0x00, 0xc5, 0x05, 0x56, 0x00, 0x23, 0x05, 0x56, 0x00, 0x23,
- 0x05, 0x56, 0x00, 0x23, 0x05, 0x56, 0x00, 0x23, 0x05, 0x56, 0x00, 0x23,
- 0x05, 0x56, 0x00, 0x23, 0x08, 0x00, 0x00, 0x17, 0x05, 0xc6, 0x00, 0x62,
- 0x05, 0x56, 0x00, 0xb8, 0x05, 0x56, 0x00, 0xb8, 0x05, 0x56, 0x00, 0xb8,
- 0x05, 0x56, 0x00, 0xb8, 0x02, 0x39, 0x00, 0xcd, 0x02, 0x39, 0x00, 0xcd,
- 0x02, 0x39, 0x00, 0xcd, 0x02, 0x39, 0x00, 0x1c, 0x05, 0xc6, 0x00, 0x29,
- 0x05, 0xc6, 0x00, 0x9c, 0x06, 0x39, 0x00, 0x4e, 0x06, 0x39, 0x00, 0x4e,
- 0x06, 0x39, 0x00, 0x4e, 0x06, 0x39, 0x00, 0x4e, 0x06, 0x39, 0x00, 0x4e,
- 0x04, 0xac, 0x00, 0xc3, 0x06, 0x39, 0x00, 0x3d, 0x05, 0xc6, 0x00, 0xae,
- 0x05, 0xc6, 0x00, 0xae, 0x05, 0xc6, 0x00, 0xae, 0x05, 0xc6, 0x00, 0xae,
- 0x05, 0x56, 0x00, 0x1b, 0x05, 0x53, 0x00, 0xba, 0x04, 0xe3, 0x00, 0x89,
- 0x04, 0x72, 0x00, 0x56, 0x04, 0x72, 0x00, 0x56, 0x04, 0x72, 0x00, 0x56,
- 0x04, 0x72, 0x00, 0x56, 0x04, 0x72, 0x00, 0x56, 0x04, 0x72, 0x00, 0x56,
- 0x07, 0x1c, 0x00, 0x46, 0x04, 0x00, 0x00, 0x3f, 0x04, 0x72, 0x00, 0x52,
- 0x04, 0x72, 0x00, 0x52, 0x04, 0x72, 0x00, 0x52, 0x04, 0x72, 0x00, 0x52,
- 0x02, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00,
- 0x02, 0x39, 0x00, 0x06, 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x8f,
- 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x4a,
- 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x4a, 0x04, 0xac, 0x00, 0x66,
- 0x04, 0xe3, 0x00, 0x25, 0x04, 0x72, 0x00, 0x85, 0x04, 0x72, 0x00, 0x85,
- 0x04, 0x72, 0x00, 0x85, 0x04, 0x72, 0x00, 0x85, 0x04, 0x00, 0x00, 0x29,
- 0x04, 0x70, 0x00, 0x6f, 0x04, 0x00, 0x00, 0x29, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x03, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x68, 0x00, 0x00, 0x00, 0x16,
- 0x00, 0x10, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e,
- 0x00, 0x7e, 0x00, 0xff, 0x01, 0x31, 0x02, 0xc6, 0x02, 0xcb, 0x02, 0xda,
- 0x02, 0xdc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e,
- 0x00, 0x20, 0x00, 0xa0, 0x01, 0x31, 0x02, 0xc6, 0x02, 0xca, 0x02, 0xda,
- 0x02, 0xdc, 0xff, 0xff, 0x00, 0x01, 0xff, 0xf6, 0xff, 0xf5, 0xff, 0xe4,
- 0xff, 0xc3, 0xff, 0x92, 0xfd, 0xfe, 0xfd, 0xfb, 0xfd, 0xed, 0xfd, 0xec,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x93, 0xb3, 0x00, 0x00, 0x00,
- 0x00, 0xa0, 0xc0, 0x02, 0x00, 0xa1, 0xc1, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x7f, 0x7c, 0x81, 0x76, 0x75, 0x69, 0x70, 0x9a,
- 0x00, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,
- 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
- 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
- 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
- 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
- 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
- 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,
- 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61,
- 0x62, 0x00, 0x87, 0x88, 0x8a, 0x8c, 0x94, 0x99, 0x9f, 0xa4, 0xa3, 0xa5,
- 0xa7, 0xa6, 0xa8, 0xaa, 0xac, 0xab, 0xad, 0xae, 0xb0, 0xaf, 0xb1, 0xb2,
- 0xb4, 0xb6, 0xb5, 0xb7, 0xb9, 0xb8, 0xbd, 0xbc, 0xbe, 0xbf, 0x00, 0x73,
- 0x65, 0x66, 0x6a, 0x00, 0x79, 0xa2, 0x71, 0x6c, 0x00, 0x77, 0x6b, 0x00,
- 0x89, 0x9b, 0x00, 0x74, 0x00, 0x00, 0x68, 0x78, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x6d, 0x7d, 0x00, 0xa9, 0xbb, 0x82, 0x64, 0x6f, 0x00, 0x00, 0x00,
- 0x00, 0x6e, 0x7e, 0x00, 0x63, 0x83, 0x86, 0x98, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x85, 0x8d, 0x84, 0x8e, 0x8b,
- 0x90, 0x91, 0x92, 0x8f, 0x96, 0x97, 0x00, 0x95, 0x9d, 0x9e, 0x9c, 0x00,
- 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x21, 0x02, 0x79, 0x00, 0x00, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16,
- 0x00, 0x16, 0x00, 0x16, 0x00, 0x2e, 0x00, 0x48, 0x00, 0x7f, 0x00, 0xe5,
- 0x01, 0x5d, 0x01, 0xc9, 0x01, 0xd9, 0x01, 0xfd, 0x02, 0x20, 0x02, 0x3e,
- 0x02, 0x56, 0x02, 0x6c, 0x02, 0x79, 0x02, 0x85, 0x02, 0x93, 0x02, 0xc3,
- 0x02, 0xda, 0x03, 0x16, 0x03, 0x63, 0x03, 0x80, 0x03, 0xbe, 0x04, 0x0c,
- 0x04, 0x2a, 0x04, 0x84, 0x04, 0xd4, 0x04, 0xe6, 0x05, 0x03, 0x05, 0x17,
- 0x05, 0x2b, 0x05, 0x3f, 0x05, 0x7d, 0x06, 0x10, 0x06, 0x2c, 0x06, 0x6d,
- 0x06, 0xaa, 0x06, 0xd3, 0x06, 0xec, 0x07, 0x02, 0x07, 0x50, 0x07, 0x68,
- 0x07, 0x76, 0x07, 0x99, 0x07, 0xb5, 0x07, 0xc6, 0x07, 0xe2, 0x07, 0xfa,
- 0x08, 0x47, 0x08, 0x72, 0x08, 0xc7, 0x09, 0x08, 0x09, 0x57, 0x09, 0x6a,
- 0x09, 0x8f, 0x09, 0xa2, 0x09, 0xc1, 0x09, 0xe0, 0x09, 0xf7, 0x0a, 0x0e,
- 0x0a, 0x20, 0x0a, 0x2f, 0x0a, 0x41, 0x0a, 0x54, 0x0a, 0x61, 0x0a, 0x70,
- 0x0a, 0xd1, 0x0b, 0x0b, 0x0b, 0x3e, 0x0b, 0x79, 0x0b, 0xba, 0x0b, 0xdc,
- 0x0c, 0x34, 0x0c, 0x5b, 0x0c, 0x6f, 0x0c, 0x91, 0x0c, 0xae, 0x0c, 0xbc,
- 0x0c, 0xfb, 0x0d, 0x21, 0x0d, 0x55, 0x0d, 0x8c, 0x0d, 0xc6, 0x0d, 0xe3,
- 0x0e, 0x2f, 0x0e, 0x55, 0x0e, 0x7b, 0x0e, 0x8e, 0x0e, 0xaa, 0x0e, 0xc9,
- 0x0e, 0xec, 0x0f, 0x03, 0x0f, 0x43, 0x0f, 0x50, 0x0f, 0x8f, 0x0f, 0xc0,
- 0x0f, 0xc8, 0x0f, 0xd2, 0x10, 0x13, 0x10, 0x73, 0x10, 0xbe, 0x10, 0xe8,
- 0x10, 0xfb, 0x11, 0x77, 0x11, 0x89, 0x12, 0x03, 0x12, 0x5c, 0x12, 0x78,
- 0x12, 0x88, 0x12, 0x95, 0x13, 0x17, 0x13, 0x24, 0x13, 0x55, 0x13, 0x74,
- 0x13, 0xb1, 0x13, 0xf8, 0x14, 0x06, 0x14, 0x38, 0x14, 0x5a, 0x14, 0x68,
- 0x14, 0x99, 0x14, 0xb1, 0x14, 0xea, 0x15, 0x07, 0x15, 0x3d, 0x15, 0x94,
- 0x15, 0xf9, 0x16, 0x03, 0x16, 0x0f, 0x16, 0x1b, 0x16, 0x27, 0x16, 0x33,
- 0x16, 0x3f, 0x16, 0x4b, 0x16, 0x72, 0x16, 0xdc, 0x16, 0xe8, 0x16, 0xf4,
- 0x17, 0x00, 0x17, 0x0c, 0x17, 0x18, 0x17, 0x24, 0x17, 0x30, 0x17, 0x3c,
- 0x17, 0x70, 0x17, 0x7c, 0x17, 0x88, 0x17, 0x94, 0x17, 0xa0, 0x17, 0xac,
- 0x17, 0xb8, 0x17, 0xd9, 0x18, 0x2e, 0x18, 0x3a, 0x18, 0x46, 0x18, 0x52,
- 0x18, 0x5e, 0x18, 0x6a, 0x18, 0x95, 0x18, 0xdf, 0x18, 0xeb, 0x18, 0xf7,
- 0x19, 0x03, 0x19, 0x0f, 0x19, 0x1b, 0x19, 0x27, 0x19, 0xa9, 0x1a, 0x05,
- 0x1a, 0x11, 0x1a, 0x1d, 0x1a, 0x29, 0x1a, 0x35, 0x1a, 0x40, 0x1a, 0x4b,
- 0x1a, 0x56, 0x1a, 0x61, 0x1a, 0xb5, 0x1a, 0xc1, 0x1a, 0xcd, 0x1a, 0xd9,
- 0x1a, 0xe5, 0x1a, 0xf1, 0x1a, 0xfd, 0x1b, 0x17, 0x1b, 0x60, 0x1b, 0x6c,
- 0x1b, 0x78, 0x1b, 0x84, 0x1b, 0x90, 0x1b, 0x9c, 0x1b, 0xd7, 0x1b, 0xe3,
- 0x1b, 0xe3, 0x1b, 0xe3, 0x1b, 0xe3, 0x1b, 0xe3, 0x1b, 0xe3, 0x1b, 0xe3,
- 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, 0x03, 0xbe, 0x07, 0xd1, 0x00, 0x03,
- 0x00, 0x07, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, 0x05, 0x21, 0x11, 0x21,
- 0x03, 0xbe, 0xfc, 0xcb, 0x02, 0xac, 0xfd, 0xdd, 0x02, 0x23, 0x07, 0xd1,
- 0xf8, 0x2f, 0x07, 0xd1, 0x89, 0xf9, 0x41, 0x00, 0x00, 0x02, 0x00, 0xfe,
- 0x00, 0x00, 0x01, 0xaa, 0x05, 0xd5, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00,
- 0x01, 0x11, 0x03, 0x23, 0x03, 0x11, 0x13, 0x15, 0x23, 0x35, 0x01, 0xaa,
- 0x2d, 0x50, 0x2d, 0xaa, 0xac, 0x05, 0xd5, 0xfd, 0x4c, 0xfe, 0x37, 0x01,
- 0xc9, 0x02, 0xb4, 0xfb, 0x00, 0xd5, 0xd5, 0x00, 0x00, 0x02, 0x00, 0x6a,
- 0x03, 0xb6, 0x02, 0x71, 0x05, 0xac, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00,
- 0x13, 0x33, 0x15, 0x03, 0x23, 0x03, 0x25, 0x33, 0x15, 0x03, 0x23, 0x03,
- 0x6a, 0xbf, 0x37, 0x50, 0x38, 0x01, 0x48, 0xbf, 0x38, 0x50, 0x37, 0x05,
- 0xac, 0xe3, 0xfe, 0xed, 0x01, 0x13, 0xe3, 0xe3, 0xfe, 0xed, 0x01, 0x13,
- 0x00, 0x02, 0x00, 0x1d, 0xff, 0xd7, 0x04, 0x56, 0x05, 0x93, 0x00, 0x1b,
- 0x00, 0x1f, 0x00, 0x00, 0x01, 0x03, 0x33, 0x15, 0x23, 0x03, 0x33, 0x15,
- 0x23, 0x03, 0x23, 0x13, 0x23, 0x03, 0x23, 0x13, 0x23, 0x35, 0x33, 0x13,
- 0x23, 0x35, 0x33, 0x13, 0x33, 0x03, 0x21, 0x13, 0x03, 0x23, 0x03, 0x21,
- 0x03, 0xe1, 0x49, 0xbe, 0xd9, 0x40, 0xd7, 0xef, 0x50, 0x9c, 0x4e, 0xfe,
- 0x50, 0x9b, 0x4e, 0xcf, 0xe9, 0x40, 0xde, 0xf8, 0x4a, 0x9c, 0x4a, 0x01,
- 0x00, 0x48, 0x63, 0xfe, 0x41, 0x01, 0x00, 0x05, 0x93, 0xfe, 0x6f, 0x8b,
- 0xfe, 0x9b, 0x8b, 0xfe, 0x50, 0x01, 0xb0, 0xfe, 0x50, 0x01, 0xb0, 0x8b,
- 0x01, 0x65, 0x8b, 0x01, 0x91, 0xfe, 0x6f, 0x01, 0x91, 0xfd, 0xe4, 0xfe,
- 0x9b, 0x00, 0x00, 0x03, 0x00, 0x44, 0xfe, 0xfe, 0x04, 0x25, 0x06, 0x29,
- 0x00, 0x2f, 0x00, 0x38, 0x00, 0x41, 0x00, 0x00, 0x01, 0x14, 0x07, 0x06,
- 0x07, 0x15, 0x23, 0x35, 0x24, 0x27, 0x26, 0x3d, 0x01, 0x33, 0x16, 0x17,
- 0x16, 0x17, 0x16, 0x17, 0x11, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, 0x34,
- 0x37, 0x36, 0x37, 0x35, 0x33, 0x15, 0x16, 0x17, 0x16, 0x15, 0x23, 0x26,
- 0x27, 0x26, 0x27, 0x11, 0x17, 0x16, 0x17, 0x16, 0x01, 0x11, 0x06, 0x07,
- 0x06, 0x15, 0x14, 0x17, 0x16, 0x13, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27,
- 0x26, 0x27, 0x04, 0x25, 0xb0, 0x6a, 0xa1, 0x78, 0xfe, 0xec, 0x66, 0x34,
- 0xa1, 0x0b, 0x12, 0x2e, 0x9b, 0x13, 0x14, 0xab, 0x3e, 0x0c, 0x0d, 0x92,
- 0xcc, 0x54, 0x74, 0x78, 0xdb, 0x69, 0x4a, 0xa2, 0x02, 0x59, 0x3c, 0x55,
- 0x8a, 0xde, 0x3c, 0x17, 0xfd, 0xcd, 0xa9, 0x33, 0x12, 0xbe, 0x16, 0x92,
- 0xbd, 0x3e, 0x18, 0x41, 0x3c, 0x96, 0x01, 0x8f, 0xf9, 0x74, 0x46, 0x0b,
- 0xd3, 0xd3, 0x12, 0xbd, 0x61, 0x86, 0x23, 0x77, 0x31, 0x7d, 0x20, 0x04,
- 0x03, 0x02, 0x2d, 0x33, 0x27, 0x08, 0x09, 0x68, 0xc3, 0xf8, 0x68, 0x2b,
- 0x0e, 0x6f, 0x6f, 0x10, 0x8f, 0x64, 0x90, 0x85, 0x49, 0x32, 0x04, 0xfe,
- 0x02, 0x27, 0x49, 0xa1, 0x3f, 0x01, 0x60, 0x01, 0xec, 0x17, 0x7a, 0x2d,
- 0x36, 0xa6, 0x43, 0x08, 0xfd, 0x1a, 0x17, 0x89, 0x36, 0x43, 0x69, 0x39,
- 0x33, 0x2d, 0x00, 0x05, 0x00, 0x3b, 0xff, 0xd7, 0x06, 0xdf, 0x05, 0xac,
- 0x00, 0x15, 0x00, 0x25, 0x00, 0x29, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x00,
- 0x01, 0x32, 0x17, 0x16, 0x17, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22,
- 0x27, 0x26, 0x27, 0x34, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x17, 0x22,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x25, 0x33, 0x01, 0x23, 0x01, 0x32, 0x17, 0x16, 0x17, 0x14,
- 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x34, 0x35, 0x34,
- 0x37, 0x36, 0x37, 0x36, 0x17, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x01, 0x98, 0x91, 0x65,
- 0x65, 0x03, 0x60, 0x60, 0x87, 0x0b, 0x0a, 0x8d, 0x66, 0x65, 0x07, 0x62,
- 0x60, 0x88, 0x0a, 0x09, 0x5e, 0x3e, 0x33, 0x48, 0x3b, 0x4e, 0x5c, 0x3f,
- 0x33, 0x48, 0x3a, 0x02, 0xf9, 0x87, 0xfc, 0xd7, 0x87, 0x03, 0xcb, 0x93,
- 0x65, 0x64, 0x02, 0x61, 0x5f, 0x85, 0x0b, 0x0c, 0x8c, 0x65, 0x65, 0x08,
- 0x61, 0x60, 0x88, 0x0a, 0x09, 0x5e, 0x3e, 0x33, 0x48, 0x3b, 0x4e, 0x5d,
- 0x3f, 0x33, 0x4a, 0x39, 0x05, 0x7b, 0x65, 0x6b, 0x92, 0x89, 0x65, 0x64,
- 0x08, 0x01, 0x62, 0x61, 0x8a, 0x09, 0x09, 0x8b, 0x66, 0x65, 0x07, 0x01,
- 0x8f, 0x47, 0x3b, 0x4d, 0x5d, 0x3f, 0x33, 0x46, 0x3a, 0x4d, 0x61, 0x3e,
- 0x32, 0xc0, 0xfa, 0x2b, 0x02, 0xbc, 0x65, 0x69, 0x92, 0x88, 0x65, 0x63,
- 0x09, 0x01, 0x62, 0x60, 0x89, 0x0a, 0x09, 0x8b, 0x65, 0x64, 0x07, 0x01,
- 0x8f, 0x47, 0x3a, 0x4c, 0x5e, 0x3e, 0x33, 0x47, 0x39, 0x4b, 0x62, 0x3e,
- 0x31, 0x00, 0x00, 0x03, 0x00, 0x6a, 0xff, 0xd1, 0x05, 0x19, 0x05, 0xac,
- 0x00, 0x29, 0x00, 0x39, 0x00, 0x46, 0x00, 0x00, 0x25, 0x06, 0x07, 0x06,
- 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x26, 0x27, 0x26,
- 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06,
- 0x07, 0x01, 0x36, 0x37, 0x34, 0x3d, 0x01, 0x33, 0x14, 0x07, 0x06, 0x07,
- 0x13, 0x23, 0x01, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x09, 0x01, 0x06, 0x07, 0x06, 0x15,
- 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x03, 0xba, 0x4a, 0x27, 0x8e,
- 0xad, 0xc8, 0x74, 0x68, 0x49, 0x46, 0xbd, 0x7c, 0x1c, 0x0e, 0x65, 0x66,
- 0x94, 0x9c, 0x5e, 0x53, 0x4b, 0x3f, 0x90, 0x01, 0x10, 0x3a, 0x06, 0xa4,
- 0x6d, 0x05, 0x05, 0xfa, 0xe0, 0xfe, 0x0f, 0x8f, 0x29, 0x1b, 0x46, 0x2f,
- 0x3e, 0x67, 0x2f, 0x1a, 0x1f, 0x1b, 0x01, 0x66, 0xfe, 0xb8, 0xa9, 0x31,
- 0x1f, 0x53, 0x4e, 0x6b, 0x75, 0x6e, 0x27, 0xa0, 0x49, 0x1d, 0x69, 0x7b,
- 0x6e, 0xae, 0x8e, 0x5d, 0x5c, 0x6e, 0x9c, 0x56, 0x2b, 0x30, 0x86, 0x5d,
- 0x5f, 0x65, 0x59, 0x84, 0x79, 0x53, 0x46, 0x52, 0xfe, 0xb2, 0x68, 0x73,
- 0x09, 0x08, 0x08, 0xb4, 0xb3, 0x08, 0x08, 0xfe, 0xcb, 0x03, 0x73, 0x5a,
- 0x40, 0x2b, 0x37, 0x5a, 0x32, 0x22, 0x4c, 0x2b, 0x39, 0x3a, 0x32, 0x2c,
- 0xfd, 0x44, 0x01, 0x99, 0x6c, 0x57, 0x36, 0x42, 0x70, 0x4d, 0x49, 0x5b,
- 0x1f, 0x00, 0x00, 0x01, 0x00, 0x62, 0x03, 0xb6, 0x01, 0x23, 0x05, 0xac,
- 0x00, 0x05, 0x00, 0x00, 0x13, 0x33, 0x15, 0x03, 0x23, 0x03, 0x62, 0xc1,
- 0x37, 0x52, 0x38, 0x05, 0xac, 0xe3, 0xfe, 0xed, 0x01, 0x13, 0x00, 0x01,
- 0x00, 0x96, 0xfe, 0x4e, 0x02, 0x54, 0x05, 0xd5, 0x00, 0x11, 0x00, 0x00,
- 0x01, 0x33, 0x02, 0x03, 0x06, 0x15, 0x10, 0x13, 0x16, 0x17, 0x23, 0x26,
- 0x03, 0x26, 0x35, 0x10, 0x13, 0x36, 0x01, 0xe3, 0x71, 0xd3, 0x36, 0x10,
- 0xb3, 0x2e, 0x38, 0x71, 0xbe, 0x58, 0x37, 0x89, 0x51, 0x05, 0xd5, 0xfe,
- 0xab, 0xfe, 0x77, 0x74, 0x71, 0xfe, 0x76, 0xfe, 0x82, 0x61, 0x5b, 0xfa,
- 0x01, 0x47, 0xc9, 0xba, 0x01, 0x31, 0x01, 0x3f, 0xbd, 0x00, 0x00, 0x01,
- 0x00, 0x4e, 0xfe, 0x4e, 0x02, 0x0c, 0x05, 0xd5, 0x00, 0x11, 0x00, 0x00,
- 0x13, 0x23, 0x12, 0x13, 0x36, 0x35, 0x10, 0x03, 0x26, 0x27, 0x33, 0x16,
- 0x13, 0x16, 0x15, 0x10, 0x03, 0x06, 0xbe, 0x70, 0xd2, 0x36, 0x10, 0xb4,
- 0x2d, 0x37, 0x70, 0xbf, 0x59, 0x36, 0x89, 0x52, 0xfe, 0x4e, 0x01, 0x53,
- 0x01, 0x8a, 0x74, 0x71, 0x01, 0x8e, 0x01, 0x7e, 0x60, 0x59, 0xfa, 0xfe,
- 0xb9, 0xca, 0xba, 0xfe, 0xd1, 0xfe, 0xc2, 0xbe, 0x00, 0x01, 0x00, 0x52,
- 0x03, 0x87, 0x02, 0xbe, 0x05, 0xd5, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x33,
- 0x07, 0x37, 0x17, 0x07, 0x17, 0x07, 0x27, 0x07, 0x27, 0x37, 0x27, 0x37,
- 0x17, 0x01, 0x48, 0x81, 0x0b, 0xda, 0x26, 0xdd, 0x90, 0x69, 0x7f, 0x81,
- 0x66, 0x8d, 0xdd, 0x27, 0xd9, 0x05, 0xd5, 0xe5, 0x4d, 0x78, 0x3e, 0xb6,
- 0x4a, 0xbf, 0xbf, 0x4a, 0xb6, 0x3e, 0x78, 0x4d, 0x00, 0x01, 0x00, 0x66,
- 0xff, 0xec, 0x04, 0x46, 0x03, 0xcb, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x15,
- 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x04, 0x46,
- 0xfe, 0x58, 0x90, 0xfe, 0x58, 0x01, 0xa8, 0x90, 0x02, 0x23, 0x90, 0xfe,
- 0x59, 0x01, 0xa7, 0x90, 0x01, 0xa8, 0xfe, 0x58, 0x00, 0x01, 0x00, 0xb2,
- 0xfe, 0xd3, 0x01, 0x89, 0x00, 0xd5, 0x00, 0x0b, 0x00, 0x00, 0x37, 0x33,
- 0x15, 0x10, 0x23, 0x35, 0x36, 0x37, 0x36, 0x3d, 0x01, 0x23, 0xb2, 0xd7,
- 0xd7, 0x4c, 0x19, 0x16, 0x7b, 0xd5, 0xf6, 0xfe, 0xf4, 0x4e, 0x03, 0x2c,
- 0x27, 0x64, 0x25, 0x00, 0x00, 0x01, 0x00, 0x5e, 0x01, 0xec, 0x02, 0x46,
- 0x02, 0x7f, 0x00, 0x03, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35, 0x02, 0x46,
- 0xfe, 0x18, 0x02, 0x7f, 0x93, 0x93, 0x00, 0x01, 0x00, 0xb2, 0x00, 0x00,
- 0x01, 0x87, 0x00, 0xd5, 0x00, 0x03, 0x00, 0x00, 0x25, 0x15, 0x23, 0x35,
- 0x01, 0x87, 0xd5, 0xd5, 0xd5, 0xd5, 0x00, 0x01, 0xff, 0xf0, 0xff, 0xd7,
- 0x02, 0x46, 0x05, 0xd5, 0x00, 0x03, 0x00, 0x00, 0x01, 0x33, 0x01, 0x23,
- 0x01, 0xd5, 0x71, 0xfe, 0x1a, 0x70, 0x05, 0xd5, 0xfa, 0x02, 0x00, 0x02,
- 0x00, 0x58, 0xff, 0xd1, 0x04, 0x0e, 0x05, 0xac, 0x00, 0x0f, 0x00, 0x19,
- 0x00, 0x00, 0x13, 0x10, 0x25, 0x36, 0x33, 0x20, 0x13, 0x16, 0x15, 0x10,
- 0x07, 0x06, 0x23, 0x20, 0x03, 0x26, 0x01, 0x20, 0x11, 0x10, 0x21, 0x32,
- 0x13, 0x36, 0x35, 0x10, 0x58, 0x01, 0x24, 0x52, 0x65, 0x01, 0x7d, 0x4c,
- 0x12, 0xd1, 0x6c, 0x9e, 0xfe, 0xcf, 0x6f, 0x3b, 0x01, 0xdb, 0xfe, 0xdd,
- 0x01, 0x1f, 0xc7, 0x3f, 0x21, 0x02, 0xbe, 0x02, 0x43, 0x86, 0x25, 0xfe,
- 0x10, 0x77, 0x93, 0xfe, 0x27, 0xae, 0x5a, 0x01, 0x44, 0xab, 0x03, 0x4c,
- 0xfd, 0xb0, 0xfd, 0xaa, 0x01, 0x06, 0x86, 0xd1, 0x02, 0x49, 0x00, 0x01,
- 0x00, 0xd1, 0x00, 0x00, 0x02, 0xc7, 0x05, 0xac, 0x00, 0x0a, 0x00, 0x00,
- 0x01, 0x21, 0x35, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x33, 0x11, 0x23, 0x02,
- 0x12, 0xfe, 0xbf, 0xb3, 0x7f, 0x24, 0x12, 0x17, 0x77, 0xb5, 0x04, 0x0a,
- 0x81, 0x16, 0x43, 0x50, 0x29, 0x4f, 0xfa, 0x54, 0x00, 0x01, 0x00, 0x46,
- 0x00, 0x00, 0x04, 0x17, 0x05, 0xac, 0x00, 0x23, 0x00, 0x00, 0x13, 0x12,
- 0x21, 0x32, 0x17, 0x16, 0x15, 0x10, 0x05, 0x06, 0x0f, 0x01, 0x06, 0x07,
- 0x06, 0x07, 0x21, 0x15, 0x21, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3f, 0x01,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x20, 0x03, 0x06, 0x07, 0x66, 0x0f,
- 0x01, 0xd1, 0xd0, 0x82, 0x7f, 0xfe, 0xec, 0x0f, 0x11, 0xcc, 0xa8, 0x37,
- 0x1d, 0x0b, 0x02, 0xfc, 0xfc, 0x3a, 0x0b, 0x48, 0x45, 0xa7, 0x28, 0x30,
- 0xbd, 0xc4, 0x5b, 0x51, 0x73, 0xfe, 0xfe, 0x1f, 0x02, 0x01, 0x03, 0xb4,
- 0x01, 0xf8, 0x79, 0x76, 0xbb, 0xff, 0x00, 0xa4, 0x09, 0x09, 0x6f, 0x5a,
- 0x5e, 0x31, 0x42, 0xb2, 0xe0, 0x7d, 0x78, 0x6b, 0x1a, 0x1b, 0x6a, 0x70,
- 0xaf, 0x7c, 0x4f, 0x45, 0xfe, 0xcd, 0x12, 0x15, 0x00, 0x01, 0x00, 0x42,
- 0xff, 0xd1, 0x04, 0x0c, 0x05, 0xac, 0x00, 0x32, 0x00, 0x00, 0x01, 0x22,
- 0x07, 0x06, 0x07, 0x23, 0x12, 0x25, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15,
- 0x14, 0x07, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x20, 0x03,
- 0x26, 0x27, 0x33, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x23, 0x07, 0x23, 0x35, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27,
- 0x26, 0x02, 0x29, 0xd2, 0x32, 0x0f, 0x02, 0xb4, 0x07, 0x01, 0x1a, 0x4a,
- 0x5c, 0xf3, 0x75, 0x52, 0xca, 0xa3, 0x34, 0x1e, 0x8e, 0x85, 0xd8, 0xfe,
- 0xa3, 0x5f, 0x1c, 0x07, 0xb4, 0x0d, 0xa0, 0x38, 0x4c, 0xb3, 0x4d, 0x2d,
- 0xff, 0x16, 0x18, 0x4c, 0x16, 0xc4, 0x4b, 0x55, 0x6b, 0x3e, 0x05, 0x0e,
- 0xb3, 0x36, 0x4e, 0x01, 0x70, 0x50, 0x15, 0x8f, 0x65, 0x9b, 0xde, 0x4f,
- 0x38, 0x77, 0x45, 0x66, 0xd6, 0x7c, 0x73, 0x01, 0x18, 0x52, 0x6b, 0xea,
- 0x38, 0x13, 0x77, 0x46, 0x65, 0xf3, 0x14, 0x02, 0x02, 0x99, 0x03, 0x2b,
- 0x32, 0x84, 0x93, 0x40, 0x24, 0x00, 0x00, 0x02, 0x00, 0x39, 0x00, 0x00,
- 0x04, 0x29, 0x05, 0xac, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x21,
- 0x35, 0x01, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x23, 0x19, 0x01, 0x01,
- 0x02, 0x9e, 0xfd, 0x9b, 0x02, 0x94, 0x85, 0xd7, 0xd7, 0xb4, 0xfe, 0x39,
- 0x01, 0x5c, 0xbf, 0x03, 0x91, 0xfc, 0x52, 0xa2, 0xfe, 0xa4, 0x01, 0xfe,
- 0x02, 0x7b, 0xfd, 0x85, 0x00, 0x01, 0x00, 0x48, 0xff, 0xd1, 0x04, 0x1b,
- 0x05, 0xac, 0x00, 0x26, 0x00, 0x00, 0x01, 0x15, 0x21, 0x03, 0x36, 0x37,
- 0x32, 0x17, 0x16, 0x17, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x20, 0x03,
- 0x26, 0x27, 0x33, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x23, 0x13, 0x03, 0xcf, 0xfd,
- 0xa4, 0x3a, 0x7c, 0x91, 0xcf, 0x82, 0x83, 0x01, 0x85, 0x82, 0xce, 0x0e,
- 0x0f, 0xfe, 0x71, 0x4d, 0x02, 0x03, 0xb4, 0x3d, 0xd5, 0x0b, 0x0c, 0xb0,
- 0x54, 0x39, 0x74, 0x51, 0x78, 0x71, 0x4d, 0x24, 0x28, 0xa6, 0x6c, 0x05,
- 0xac, 0xb2, 0xfe, 0x6a, 0x56, 0x02, 0x84, 0x86, 0xd9, 0xe0, 0x91, 0x8c,
- 0x0a, 0x01, 0x01, 0x7b, 0x06, 0x12, 0xe7, 0x0b, 0x01, 0x7c, 0x55, 0x7f,
- 0xbe, 0x5d, 0x41, 0x3b, 0x1d, 0x2f, 0x03, 0x16, 0x00, 0x02, 0x00, 0x58,
- 0xff, 0xd1, 0x04, 0x1b, 0x05, 0xac, 0x00, 0x22, 0x00, 0x32, 0x00, 0x00,
- 0x13, 0x10, 0x25, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x23, 0x26, 0x27,
- 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17,
- 0x14, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x20, 0x03, 0x26, 0x25,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x27, 0x26, 0x58, 0x01, 0x17, 0x69, 0x88, 0xc8, 0x72, 0x4d, 0x15,
- 0xb4, 0x20, 0x76, 0x2b, 0x33, 0xc2, 0x51, 0x30, 0x01, 0x76, 0xd8, 0xbf,
- 0x7c, 0x7e, 0x04, 0x7d, 0x7b, 0xc1, 0x11, 0x12, 0xfe, 0x42, 0x26, 0x03,
- 0x01, 0xf0, 0x93, 0x55, 0x45, 0x5d, 0x53, 0x77, 0x81, 0x53, 0x4c, 0x6f,
- 0x46, 0x02, 0x96, 0x02, 0x33, 0xa5, 0x3e, 0x8d, 0x5f, 0x8f, 0x9b, 0x2f,
- 0x11, 0xdb, 0x84, 0xc8, 0xa2, 0x7c, 0x7e, 0xc7, 0x06, 0x06, 0xcd, 0x89,
- 0x86, 0x0c, 0x01, 0x02, 0x56, 0x35, 0x8b, 0x65, 0x52, 0x7a, 0x93, 0x5e,
- 0x54, 0x60, 0x59, 0x82, 0xb4, 0x53, 0x34, 0x00, 0x00, 0x01, 0x00, 0x5e,
- 0x00, 0x00, 0x04, 0x29, 0x05, 0xac, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x15,
- 0x00, 0x03, 0x06, 0x07, 0x23, 0x12, 0x13, 0x12, 0x13, 0x21, 0x35, 0x04,
- 0x29, 0xfe, 0xa5, 0x94, 0x3c, 0x23, 0xc0, 0x56, 0x8b, 0x7e, 0xf5, 0xfc,
- 0xef, 0x05, 0xac, 0x98, 0xfe, 0x33, 0xfe, 0x3c, 0xba, 0xc9, 0x01, 0x7a,
- 0x01, 0x20, 0x01, 0x03, 0x01, 0x5d, 0xb2, 0x00, 0x00, 0x03, 0x00, 0x4c,
- 0xff, 0xd1, 0x04, 0x1b, 0x05, 0xac, 0x00, 0x1c, 0x00, 0x2c, 0x00, 0x3c,
- 0x00, 0x00, 0x01, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x22, 0x23, 0x22,
- 0x27, 0x26, 0x27, 0x34, 0x37, 0x26, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33,
- 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x01, 0x22, 0x07, 0x06, 0x15,
- 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x03,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x27, 0x26, 0x03, 0x21, 0xfa, 0x83, 0x85, 0xd5, 0x05, 0x06, 0xd7,
- 0x88, 0x85, 0x03, 0xf8, 0x7e, 0x29, 0x1e, 0xf4, 0xc0, 0xc8, 0x7a, 0x72,
- 0x3e, 0x2c, 0xfe, 0xb6, 0x8b, 0x44, 0x2d, 0x5e, 0x41, 0x5d, 0x8b, 0x45,
- 0x2c, 0x63, 0x3f, 0x5a, 0x99, 0x54, 0x42, 0x63, 0x51, 0x77, 0x9f, 0x55,
- 0x3f, 0x66, 0x51, 0x02, 0xfc, 0x77, 0xf4, 0xc2, 0x7c, 0x7e, 0x04, 0x7d,
- 0x83, 0xc2, 0xf1, 0x78, 0x4f, 0x4d, 0x3a, 0x57, 0xaa, 0xd9, 0x73, 0x6b,
- 0xa5, 0x78, 0x49, 0x34, 0x01, 0xd8, 0x59, 0x3a, 0x52, 0x7a, 0x3e, 0x2b,
- 0x58, 0x39, 0x50, 0x82, 0x3e, 0x27, 0xfd, 0xa0, 0x62, 0x4c, 0x6f, 0x8c,
- 0x51, 0x41, 0x65, 0x4b, 0x6e, 0x8e, 0x50, 0x3f, 0x00, 0x02, 0x00, 0x4e,
- 0xff, 0xd1, 0x04, 0x12, 0x05, 0xac, 0x00, 0x22, 0x00, 0x32, 0x00, 0x00,
- 0x01, 0x10, 0x05, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x33, 0x16, 0x17,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27,
- 0x26, 0x27, 0x34, 0x37, 0x36, 0x37, 0x36, 0x33, 0x20, 0x13, 0x16, 0x01,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x27, 0x26, 0x04, 0x12, 0xfe, 0xea, 0x6a, 0x8a, 0xc7, 0x72, 0x4d,
- 0x15, 0xb4, 0x1e, 0x72, 0x2d, 0x36, 0xc2, 0x51, 0x30, 0x01, 0x6e, 0x8e,
- 0x25, 0x2b, 0xc2, 0x7d, 0x7d, 0x02, 0x7d, 0x7a, 0xc1, 0x11, 0x12, 0x01,
- 0x9e, 0x40, 0x0b, 0xfe, 0x15, 0x83, 0x53, 0x4b, 0x6e, 0x47, 0x66, 0x8f,
- 0x55, 0x49, 0x5d, 0x53, 0x02, 0xe7, 0xfd, 0xd0, 0xa6, 0x40, 0x8c, 0x5f,
- 0x90, 0x97, 0x31, 0x13, 0xdb, 0x84, 0xc8, 0x84, 0x18, 0x06, 0x7e, 0x86,
- 0xc9, 0xcd, 0x89, 0x86, 0x0c, 0x01, 0xfe, 0x01, 0x5b, 0x01, 0xbc, 0x62,
- 0x58, 0x83, 0xb3, 0x53, 0x35, 0x62, 0x53, 0x7c, 0x95, 0x5e, 0x54, 0x00,
- 0x00, 0x02, 0x00, 0xe1, 0x00, 0x00, 0x01, 0xb6, 0x04, 0x31, 0x00, 0x03,
- 0x00, 0x07, 0x00, 0x00, 0x25, 0x15, 0x23, 0x35, 0x13, 0x15, 0x23, 0x35,
- 0x01, 0xb6, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0x03, 0x5c, 0xd5, 0xd5,
- 0x00, 0x02, 0x00, 0xe1, 0xfe, 0xd3, 0x01, 0xb8, 0x04, 0x31, 0x00, 0x03,
- 0x00, 0x0f, 0x00, 0x00, 0x01, 0x15, 0x23, 0x35, 0x03, 0x33, 0x15, 0x10,
- 0x23, 0x35, 0x36, 0x37, 0x36, 0x3d, 0x01, 0x23, 0x01, 0xb8, 0xd5, 0x02,
- 0xd7, 0xd7, 0x4d, 0x18, 0x16, 0x7b, 0x04, 0x31, 0xd5, 0xd5, 0xfc, 0xa4,
- 0xf6, 0xfe, 0xf4, 0x4e, 0x03, 0x2c, 0x27, 0x64, 0x25, 0x00, 0x00, 0x01,
- 0x00, 0x5c, 0xff, 0xee, 0x04, 0x46, 0x03, 0xcb, 0x00, 0x06, 0x00, 0x00,
- 0x13, 0x35, 0x01, 0x15, 0x09, 0x01, 0x15, 0x5c, 0x03, 0xea, 0xfc, 0xd9,
- 0x03, 0x27, 0x01, 0x96, 0x8d, 0x01, 0xa8, 0xa2, 0xfe, 0xb6, 0xfe, 0xb0,
- 0xa1, 0x00, 0x00, 0x02, 0x00, 0x66, 0x00, 0xe3, 0x04, 0x46, 0x02, 0xd3,
- 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35, 0x01, 0x15,
- 0x21, 0x35, 0x04, 0x46, 0xfc, 0x20, 0x03, 0xe0, 0xfc, 0x20, 0x02, 0xd3,
- 0x8f, 0x8f, 0xfe, 0xa0, 0x90, 0x90, 0x00, 0x01, 0x00, 0x66, 0xff, 0xee,
- 0x04, 0x50, 0x03, 0xcb, 0x00, 0x06, 0x00, 0x00, 0x01, 0x15, 0x01, 0x35,
- 0x09, 0x01, 0x35, 0x04, 0x50, 0xfc, 0x16, 0x03, 0x27, 0xfc, 0xd9, 0x02,
- 0x23, 0x8d, 0xfe, 0x58, 0xa1, 0x01, 0x4a, 0x01, 0x50, 0xa2, 0x00, 0x02,
- 0x00, 0x9e, 0x00, 0x00, 0x04, 0x12, 0x05, 0xee, 0x00, 0x23, 0x00, 0x27,
- 0x00, 0x00, 0x01, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x1d, 0x01,
- 0x23, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27,
- 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x23, 0x10, 0x25, 0x36, 0x33, 0x32,
- 0x17, 0x16, 0x01, 0x15, 0x23, 0x35, 0x04, 0x12, 0x6e, 0x1a, 0x5b, 0x58,
- 0x1c, 0x17, 0xb8, 0x66, 0x14, 0x5d, 0x61, 0x1f, 0x17, 0x5f, 0x44, 0x63,
- 0xc4, 0x31, 0x13, 0xae, 0x01, 0x1f, 0x48, 0x59, 0xdc, 0x77, 0x61, 0xfe,
- 0x92, 0xb8, 0x04, 0x64, 0x99, 0x7a, 0x1c, 0x51, 0x50, 0x3a, 0x2e, 0x34,
- 0x60, 0x70, 0x78, 0x6f, 0x15, 0x58, 0x5a, 0x43, 0x33, 0x38, 0x7b, 0x41,
- 0x2e, 0xa2, 0x3f, 0x5f, 0x01, 0x7c, 0x50, 0x14, 0x80, 0x68, 0xfb, 0xcf,
- 0xd5, 0xd5, 0x00, 0x02, 0x00, 0x46, 0xfe, 0xdd, 0x07, 0x9c, 0x05, 0xee,
- 0x00, 0x51, 0x00, 0x65, 0x00, 0x00, 0x01, 0x33, 0x03, 0x06, 0x15, 0x14,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26,
- 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x17, 0x06, 0x23, 0x20, 0x27, 0x26, 0x27,
- 0x26, 0x35, 0x10, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x33, 0x20, 0x17,
- 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27,
- 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37,
- 0x36, 0x33, 0x32, 0x17, 0x01, 0x32, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x05, 0x52, 0xaa, 0xb8, 0x19, 0x2e, 0x1a, 0x1e, 0x6f, 0x62, 0x65, 0x1b,
- 0x07, 0x92, 0x8c, 0xd9, 0x6a, 0x6f, 0xfd, 0xd4, 0xc1, 0x59, 0x3a, 0x9e,
- 0x97, 0xf1, 0x69, 0x71, 0xa3, 0xe8, 0x39, 0xe6, 0xe9, 0xfe, 0xc9, 0xf6,
- 0xd9, 0x60, 0x3d, 0x8d, 0x4c, 0x6a, 0xb6, 0xfc, 0x7e, 0x7a, 0x01, 0x1e,
- 0xe9, 0xcd, 0x5b, 0x3a, 0x7b, 0x18, 0x1d, 0x9b, 0xe2, 0xc5, 0x1d, 0x75,
- 0x7f, 0x17, 0x18, 0x8d, 0x5f, 0x61, 0x78, 0x6d, 0x9e, 0x45, 0x46, 0xac,
- 0x4e, 0xfe, 0x7b, 0x79, 0x5f, 0x4e, 0x14, 0x05, 0x47, 0x33, 0x46, 0x72,
- 0x5f, 0x61, 0x14, 0x04, 0x48, 0x39, 0x04, 0x02, 0xfd, 0xc3, 0x45, 0x22,
- 0x2f, 0x1c, 0x0f, 0x6e, 0x72, 0x9f, 0x2c, 0x2c, 0xcf, 0xa9, 0xa1, 0x3e,
- 0x1e, 0x9a, 0x8d, 0xd8, 0x8d, 0x95, 0xf3, 0xb9, 0xb0, 0x3d, 0x1b, 0x41,
- 0x89, 0x56, 0xa1, 0x8e, 0xdf, 0x8c, 0x99, 0x01, 0x07, 0xee, 0x80, 0x60,
- 0xa6, 0x42, 0x21, 0x99, 0x86, 0xce, 0x82, 0x8b, 0xcc, 0xb7, 0x25, 0x21,
- 0xb6, 0x9d, 0x7f, 0x11, 0x03, 0x6a, 0x6c, 0xa1, 0xbc, 0x9f, 0x90, 0x35,
- 0x17, 0xb2, 0xfd, 0x87, 0x99, 0x7e, 0x98, 0x23, 0x1e, 0x5b, 0x36, 0x27,
- 0x6c, 0x6f, 0x9c, 0x20, 0x1f, 0x72, 0x48, 0x38, 0x00, 0x02, 0x00, 0x23,
- 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00,
- 0x01, 0x21, 0x03, 0x23, 0x01, 0x33, 0x01, 0x23, 0x0b, 0x02, 0x03, 0xcb,
- 0xfd, 0xc0, 0x9d, 0xcb, 0x02, 0x14, 0xf6, 0x02, 0x0c, 0xd5, 0xce, 0xe6,
- 0xf6, 0x01, 0xc1, 0xfe, 0x3f, 0x05, 0xd5, 0xfa, 0x2b, 0x02, 0x60, 0x02,
- 0xa8, 0xfd, 0x58, 0x00, 0x00, 0x03, 0x00, 0xa2, 0x00, 0x00, 0x04, 0xfc,
- 0x05, 0xd5, 0x00, 0x10, 0x00, 0x1b, 0x00, 0x26, 0x00, 0x00, 0x01, 0x14,
- 0x07, 0x06, 0x23, 0x21, 0x11, 0x21, 0x20, 0x17, 0x16, 0x15, 0x14, 0x07,
- 0x16, 0x17, 0x16, 0x01, 0x34, 0x27, 0x26, 0x23, 0x21, 0x11, 0x21, 0x32,
- 0x37, 0x36, 0x03, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x21,
- 0x11, 0x04, 0xfc, 0x82, 0x77, 0xbf, 0xfd, 0x5e, 0x02, 0x5e, 0x01, 0x17,
- 0x6d, 0x36, 0xce, 0xbd, 0x37, 0x1c, 0xff, 0x00, 0xd0, 0x29, 0x32, 0xfe,
- 0x8f, 0x01, 0x71, 0xf7, 0x2b, 0x09, 0xcb, 0xb8, 0x3d, 0x17, 0x67, 0x42,
- 0x63, 0xfe, 0x2f, 0x01, 0xaa, 0xc7, 0x76, 0x6d, 0x05, 0xd5, 0xb4, 0x59,
- 0x6e, 0xe4, 0x62, 0x48, 0x85, 0x43, 0x02, 0x3b, 0xc9, 0x1f, 0x06, 0xfe,
- 0x25, 0x9f, 0x23, 0xfc, 0x94, 0x8c, 0x35, 0x3f, 0x92, 0x44, 0x2c, 0xfd,
- 0xfe, 0x00, 0x00, 0x01, 0x00, 0x62, 0xff, 0xd1, 0x05, 0x6a, 0x05, 0xee,
- 0x00, 0x23, 0x00, 0x00, 0x13, 0x34, 0x37, 0x12, 0x25, 0x36, 0x33, 0x20,
- 0x13, 0x16, 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x11,
- 0x10, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x33, 0x02, 0x21, 0x20,
- 0x03, 0x26, 0x03, 0x26, 0x62, 0x65, 0x92, 0x01, 0x3a, 0x3a, 0x3f, 0x01,
- 0xa2, 0x7c, 0x15, 0x0d, 0xc3, 0x2f, 0xb2, 0x4c, 0x66, 0xde, 0x7e, 0x79,
- 0x91, 0x81, 0xd3, 0xec, 0x66, 0x36, 0x18, 0xc4, 0x43, 0xfd, 0xdd, 0xfe,
- 0x8f, 0xb1, 0x76, 0x09, 0x01, 0x02, 0xd9, 0xfc, 0xc5, 0x01, 0x1d, 0x2e,
- 0x09, 0xfe, 0x9b, 0x3c, 0x47, 0xe6, 0x3f, 0x1b, 0xad, 0xa5, 0xfe, 0xe7,
- 0xfe, 0xd9, 0xa6, 0x95, 0xb2, 0x5e, 0x98, 0xfd, 0xb0, 0x01, 0x1d, 0xbc,
- 0x01, 0x08, 0x14, 0x00, 0x00, 0x02, 0x00, 0xb6, 0x00, 0x00, 0x05, 0x56,
- 0x05, 0xd5, 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x33, 0x11, 0x21, 0x20,
- 0x00, 0x11, 0x10, 0x07, 0x06, 0x21, 0x25, 0x21, 0x20, 0x13, 0x36, 0x35,
- 0x10, 0x25, 0x26, 0x23, 0x21, 0xb6, 0x02, 0x40, 0x01, 0x1b, 0x01, 0x45,
- 0xaf, 0xa2, 0xfe, 0xf1, 0xfe, 0x7f, 0x01, 0x60, 0x01, 0x2f, 0x65, 0x2f,
- 0xff, 0x00, 0x55, 0x6e, 0xfe, 0xa0, 0x05, 0xd5, 0xfe, 0x72, 0xfe, 0xa5,
- 0xfe, 0x95, 0xc9, 0xb8, 0xa8, 0x01, 0x10, 0x7d, 0xb4, 0x01, 0xaf, 0x70,
- 0x25, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7, 0x05, 0xd5,
- 0x00, 0x0b, 0x00, 0x00, 0x01, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15,
- 0x21, 0x11, 0x21, 0x15, 0x01, 0x77, 0x03, 0x70, 0xfb, 0xd1, 0x04, 0x0b,
- 0xfc, 0xb4, 0x03, 0x2d, 0x02, 0xa8, 0xfe, 0x00, 0xa8, 0x05, 0xd5, 0xa8,
- 0xfe, 0x23, 0xa8, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xa2,
- 0x05, 0xd5, 0x00, 0x09, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x21, 0x15,
- 0x21, 0x11, 0x21, 0x15, 0x01, 0x77, 0xbf, 0x03, 0xea, 0xfc, 0xd5, 0x02,
- 0xc8, 0x02, 0xa8, 0xfd, 0x58, 0x05, 0xd5, 0xa8, 0xfe, 0x23, 0xa8, 0x00,
- 0x00, 0x01, 0x00, 0x5a, 0xff, 0xd1, 0x05, 0xac, 0x05, 0xee, 0x00, 0x31,
- 0x00, 0x00, 0x01, 0x14, 0x17, 0x16, 0x05, 0x32, 0x33, 0x32, 0x37, 0x36,
- 0x37, 0x36, 0x3d, 0x01, 0x21, 0x35, 0x21, 0x11, 0x23, 0x27, 0x06, 0x07,
- 0x06, 0x23, 0x20, 0x27, 0x26, 0x03, 0x26, 0x35, 0x34, 0x37, 0x12, 0x25,
- 0x36, 0x33, 0x20, 0x17, 0x16, 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22,
- 0x07, 0x06, 0x03, 0x14, 0x01, 0x19, 0x58, 0x88, 0x01, 0x28, 0x07, 0x07,
- 0xc6, 0x84, 0x81, 0x09, 0x01, 0xfe, 0x39, 0x02, 0x6f, 0x79, 0x2f, 0xbe,
- 0xfb, 0x22, 0x23, 0xfe, 0xf7, 0xb7, 0xb4, 0x2c, 0x0c, 0x61, 0x8d, 0x01,
- 0x30, 0x52, 0x5d, 0x01, 0x35, 0xaa, 0x72, 0x20, 0xc3, 0x24, 0x95, 0x6a,
- 0x8d, 0xe5, 0x8f, 0x93, 0x05, 0x02, 0xe5, 0xd1, 0xa0, 0xf5, 0x06, 0x7b,
- 0x79, 0xbc, 0x0e, 0x0d, 0x29, 0xa7, 0xfc, 0xe4, 0xc6, 0xd3, 0x17, 0x03,
- 0xab, 0xa7, 0x01, 0x17, 0x4e, 0x53, 0xea, 0xc0, 0x01, 0x19, 0x3f, 0x11,
- 0xb2, 0x76, 0xb6, 0xaa, 0x52, 0x3a, 0x9d, 0xa2, 0xfe, 0xef, 0x08, 0x00,
- 0x00, 0x01, 0x00, 0xaa, 0x00, 0x00, 0x05, 0x27, 0x05, 0xd5, 0x00, 0x0b,
- 0x00, 0x00, 0x01, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33,
- 0x11, 0x23, 0x04, 0x68, 0xfd, 0x00, 0xbe, 0xbe, 0x03, 0x00, 0xbf, 0xbf,
- 0x02, 0xa8, 0xfd, 0x58, 0x05, 0xd5, 0xfd, 0x7b, 0x02, 0x85, 0xfa, 0x2b,
- 0x00, 0x01, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x8d, 0x05, 0xd5, 0x00, 0x03,
- 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x01, 0x8d, 0xc0, 0x05, 0xd5, 0xfa,
- 0x2b, 0x05, 0xd5, 0x00, 0x00, 0x01, 0x00, 0x23, 0xff, 0xd1, 0x03, 0x68,
- 0x05, 0xd5, 0x00, 0x15, 0x00, 0x00, 0x25, 0x32, 0x37, 0x36, 0x35, 0x11,
- 0x33, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x33,
- 0x15, 0x14, 0x17, 0x16, 0x01, 0xc5, 0xa7, 0x2c, 0x12, 0xbe, 0x88, 0x6f,
- 0xae, 0xd6, 0x71, 0x59, 0xc2, 0x80, 0x2a, 0x71, 0xa0, 0x42, 0x67, 0x04,
- 0x1b, 0xfb, 0xa0, 0xd6, 0x72, 0x5c, 0x83, 0x67, 0xa1, 0x83, 0x60, 0xc6,
- 0x36, 0x12, 0x00, 0x01, 0x00, 0xa2, 0x00, 0x00, 0x05, 0x44, 0x05, 0xd5,
- 0x00, 0x0b, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x33, 0x11, 0x01, 0x33,
- 0x09, 0x01, 0x23, 0x01, 0x01, 0x60, 0xbe, 0xbe, 0x02, 0xe8, 0xf5, 0xfd,
- 0xa0, 0x02, 0x67, 0xe2, 0xfd, 0xf2, 0x02, 0x0a, 0xfd, 0xf6, 0x05, 0xd5,
- 0xfd, 0x0c, 0x02, 0xf4, 0xfd, 0xa0, 0xfc, 0x8b, 0x02, 0xfe, 0x00, 0x01,
- 0x00, 0xa4, 0x00, 0x00, 0x04, 0x44, 0x05, 0xd5, 0x00, 0x05, 0x00, 0x00,
- 0x01, 0x11, 0x21, 0x15, 0x21, 0x11, 0x01, 0x62, 0x02, 0xe2, 0xfc, 0x60,
- 0x05, 0xd5, 0xfa, 0xd3, 0xa8, 0x05, 0xd5, 0x00, 0x00, 0x01, 0x00, 0x9a,
- 0x00, 0x00, 0x06, 0x17, 0x05, 0xd5, 0x00, 0x0c, 0x00, 0x00, 0x21, 0x23,
- 0x01, 0x11, 0x23, 0x11, 0x21, 0x09, 0x01, 0x21, 0x11, 0x23, 0x11, 0x03,
- 0xbe, 0xc8, 0xfe, 0x58, 0xb4, 0x01, 0x08, 0x01, 0xba, 0x01, 0xb2, 0x01,
- 0x09, 0xb5, 0x04, 0xe3, 0xfb, 0x1d, 0x05, 0xd5, 0xfa, 0xec, 0x05, 0x14,
- 0xfa, 0x2b, 0x04, 0xe3, 0x00, 0x01, 0x00, 0x9c, 0x00, 0x00, 0x05, 0x2b,
- 0x05, 0xd5, 0x00, 0x09, 0x00, 0x00, 0x01, 0x11, 0x23, 0x01, 0x11, 0x23,
- 0x11, 0x33, 0x01, 0x11, 0x05, 0x2b, 0xd7, 0xfc, 0xfc, 0xb4, 0xce, 0x03,
- 0x0d, 0x05, 0xd5, 0xfa, 0x2b, 0x04, 0xba, 0xfb, 0x46, 0x05, 0xd5, 0xfb,
- 0x3b, 0x04, 0xc5, 0x00, 0x00, 0x02, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0,
- 0x05, 0xee, 0x00, 0x16, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x10, 0x00, 0x07,
- 0x06, 0x23, 0x20, 0x27, 0x26, 0x03, 0x26, 0x35, 0x10, 0x37, 0x36, 0x25,
- 0x36, 0x33, 0x20, 0x17, 0x16, 0x13, 0x16, 0x01, 0x22, 0x07, 0x06, 0x03,
- 0x06, 0x15, 0x10, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37,
- 0x36, 0x35, 0x10, 0x27, 0x26, 0x05, 0xf0, 0xfe, 0xd4, 0xfc, 0x51, 0x58,
- 0xfe, 0xe0, 0xc1, 0xbd, 0x29, 0x0a, 0xa8, 0x9d, 0x01, 0x03, 0x41, 0x46,
- 0x01, 0x2d, 0xc2, 0xbf, 0x20, 0x05, 0xfd, 0x2d, 0xe2, 0x90, 0x94, 0x0a,
- 0x01, 0x8f, 0x88, 0xdd, 0x0f, 0x10, 0xde, 0x91, 0x93, 0x0f, 0x01, 0x94,
- 0x96, 0x02, 0xd3, 0xfe, 0xe0, 0xfe, 0x66, 0x36, 0x12, 0xb0, 0xac, 0x01,
- 0x20, 0x47, 0x4b, 0x01, 0x3f, 0xd3, 0xc6, 0x2c, 0x0b, 0xb9, 0xb8, 0xfe,
- 0xc7, 0x37, 0x02, 0x39, 0x9a, 0x9f, 0xfe, 0xf7, 0x12, 0x13, 0xfe, 0xf0,
- 0xa9, 0xa1, 0x0b, 0x01, 0x97, 0x98, 0xfc, 0x19, 0x1a, 0x01, 0x1e, 0xab,
- 0xa3, 0x00, 0x00, 0x02, 0x00, 0xba, 0x00, 0x00, 0x04, 0xf0, 0x05, 0xd5,
- 0x00, 0x0c, 0x00, 0x17, 0x00, 0x00, 0x01, 0x14, 0x07, 0x06, 0x23, 0x21,
- 0x11, 0x23, 0x11, 0x21, 0x20, 0x17, 0x16, 0x01, 0x21, 0x32, 0x37, 0x36,
- 0x35, 0x34, 0x27, 0x26, 0x23, 0x21, 0x04, 0xf0, 0x7e, 0x72, 0xb2, 0xfe,
- 0x2b, 0xbf, 0x02, 0x69, 0x01, 0x17, 0x73, 0x43, 0xfc, 0x89, 0x01, 0x8d,
- 0xb1, 0x4a, 0x28, 0x77, 0x46, 0x66, 0xfe, 0x73, 0x04, 0x1f, 0xc7, 0x75,
- 0x6a, 0xfd, 0x87, 0x05, 0xd5, 0xb1, 0x69, 0xfe, 0x66, 0x71, 0x3e, 0x57,
- 0x9b, 0x43, 0x28, 0x00, 0x00, 0x02, 0x00, 0x4e, 0xff, 0x87, 0x05, 0xf0,
- 0x05, 0xee, 0x00, 0x18, 0x00, 0x33, 0x00, 0x00, 0x05, 0x07, 0x27, 0x06,
- 0x23, 0x20, 0x27, 0x26, 0x03, 0x26, 0x35, 0x10, 0x37, 0x36, 0x25, 0x36,
- 0x33, 0x20, 0x17, 0x16, 0x13, 0x16, 0x15, 0x10, 0x07, 0x01, 0x17, 0x36,
- 0x11, 0x10, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x03, 0x06,
- 0x15, 0x10, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x27,
- 0x05, 0xdd, 0x60, 0xd7, 0xb1, 0xd6, 0xfe, 0xe0, 0xc1, 0xbd, 0x29, 0x0a,
- 0xa8, 0x9e, 0x01, 0x04, 0x41, 0x46, 0x01, 0x1f, 0xc2, 0xbb, 0x2a, 0x0b,
- 0xd3, 0xfe, 0xbc, 0xb6, 0xa2, 0x8e, 0x87, 0xdc, 0x10, 0x11, 0xe4, 0x90,
- 0x94, 0x0a, 0x01, 0x8f, 0x89, 0xdf, 0x0d, 0x0d, 0x75, 0x6f, 0x08, 0x09,
- 0x97, 0x02, 0x77, 0xb2, 0x68, 0xb0, 0xac, 0x01, 0x20, 0x47, 0x4b, 0x01,
- 0x3f, 0xd3, 0xc6, 0x2c, 0x0b, 0xaf, 0xaa, 0xfe, 0xe3, 0x48, 0x4d, 0xfe,
- 0xa1, 0xe8, 0x01, 0x08, 0x96, 0xb6, 0x01, 0x1d, 0x01, 0x0f, 0xa8, 0xa1,
- 0x0c, 0x01, 0x9b, 0x9f, 0xfe, 0xf6, 0x11, 0x12, 0xfe, 0xee, 0xa9, 0xa1,
- 0x09, 0x01, 0x31, 0x04, 0x04, 0x7f, 0x00, 0x02, 0x00, 0xbe, 0x00, 0x00,
- 0x05, 0x6f, 0x05, 0xd5, 0x00, 0x1d, 0x00, 0x28, 0x00, 0x00, 0x01, 0x16,
- 0x17, 0x16, 0x07, 0x06, 0x17, 0x16, 0x17, 0x15, 0x23, 0x26, 0x3d, 0x01,
- 0x34, 0x27, 0x26, 0x23, 0x21, 0x11, 0x23, 0x11, 0x21, 0x20, 0x17, 0x16,
- 0x15, 0x14, 0x07, 0x06, 0x03, 0x34, 0x27, 0x26, 0x23, 0x21, 0x11, 0x21,
- 0x32, 0x37, 0x36, 0x04, 0x4a, 0x9d, 0x23, 0x0e, 0x02, 0x02, 0x14, 0x15,
- 0x32, 0xe8, 0x29, 0x7b, 0x32, 0x49, 0xfe, 0x15, 0xbf, 0x02, 0xb1, 0x01,
- 0x28, 0x6a, 0x34, 0x67, 0x32, 0x2d, 0xa6, 0x35, 0x4a, 0xfe, 0x33, 0x01,
- 0xcd, 0xdb, 0x36, 0x14, 0x02, 0xe1, 0x44, 0x91, 0x3d, 0x89, 0x81, 0x39,
- 0x3a, 0x23, 0x2f, 0x60, 0x94, 0x85, 0xc3, 0x32, 0x15, 0xfd, 0x7d, 0x05,
- 0xd5, 0xb6, 0x5a, 0x7f, 0xab, 0x62, 0x30, 0x01, 0x22, 0xc9, 0x2b, 0x0e,
- 0xfd, 0xfe, 0x86, 0x32, 0x00, 0x01, 0x00, 0x62, 0xff, 0xd1, 0x04, 0xf8,
- 0x05, 0xee, 0x00, 0x32, 0x00, 0x00, 0x25, 0x20, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x27, 0x25, 0x24, 0x11, 0x34, 0x37, 0x36, 0x33, 0x20, 0x17,
- 0x16, 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14,
- 0x17, 0x16, 0x17, 0x05, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x21,
- 0x20, 0x27, 0x26, 0x27, 0x33, 0x15, 0x14, 0x17, 0x16, 0x02, 0xbc, 0x01,
- 0x22, 0x47, 0x14, 0xa5, 0x2f, 0x3e, 0xfe, 0x8d, 0xfe, 0xdb, 0x9e, 0x8d,
- 0xe8, 0x01, 0x31, 0x8e, 0x63, 0x01, 0xb5, 0x02, 0xa5, 0x54, 0x79, 0xb2,
- 0x5c, 0x40, 0x4b, 0x37, 0x74, 0x01, 0x76, 0xd2, 0x4a, 0x22, 0x62, 0x97,
- 0xfe, 0xb1, 0xfe, 0xe4, 0x9c, 0x93, 0x03, 0xb5, 0x74, 0x6c, 0x79, 0xa8,
- 0x2f, 0x37, 0x87, 0x47, 0x14, 0x10, 0x62, 0x4c, 0x01, 0x10, 0xd7, 0x76,
- 0x6a, 0xa7, 0x74, 0xb4, 0xc1, 0x49, 0x25, 0x5e, 0x41, 0x5d, 0x62, 0x35,
- 0x27, 0x1f, 0x65, 0x39, 0x9d, 0x49, 0x57, 0x9f, 0x75, 0xb5, 0x8d, 0x86,
- 0xf7, 0x0a, 0xa7, 0x5c, 0x55, 0x00, 0x00, 0x01, 0x00, 0x2b, 0x00, 0x00,
- 0x04, 0xbe, 0x05, 0xd5, 0x00, 0x07, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11,
- 0x21, 0x35, 0x21, 0x15, 0x02, 0xd5, 0xbe, 0xfe, 0x14, 0x04, 0x93, 0x05,
- 0x2d, 0xfa, 0xd3, 0x05, 0x2d, 0xa8, 0xa8, 0x00, 0x00, 0x01, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x05, 0xd5, 0x00, 0x15, 0x00, 0x00, 0x01, 0x33,
- 0x11, 0x14, 0x07, 0x06, 0x21, 0x20, 0x27, 0x26, 0x35, 0x11, 0x33, 0x11,
- 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x04, 0x6a, 0xbf, 0x9d,
- 0x9d, 0xfe, 0xfa, 0xfe, 0xe0, 0x9a, 0x81, 0xbf, 0xae, 0x56, 0x78, 0xd9,
- 0x66, 0x42, 0x05, 0xd5, 0xfb, 0xe7, 0xe1, 0x86, 0x84, 0x9a, 0x81, 0xd0,
- 0x04, 0x19, 0xfb, 0xe7, 0xd0, 0x4d, 0x26, 0x7b, 0x50, 0x78, 0x00, 0x01,
- 0x00, 0x3d, 0x00, 0x00, 0x05, 0x29, 0x05, 0xd5, 0x00, 0x06, 0x00, 0x00,
- 0x21, 0x23, 0x01, 0x33, 0x09, 0x01, 0x33, 0x03, 0x23, 0xcd, 0xfd, 0xe7,
- 0xcd, 0x01, 0xb7, 0x01, 0x9d, 0xcb, 0x05, 0xd5, 0xfb, 0x10, 0x04, 0xf0,
- 0x00, 0x01, 0x00, 0x2d, 0x00, 0x00, 0x07, 0x6f, 0x05, 0xd5, 0x00, 0x0c,
- 0x00, 0x00, 0x21, 0x23, 0x09, 0x01, 0x23, 0x01, 0x33, 0x09, 0x01, 0x33,
- 0x09, 0x01, 0x33, 0x05, 0xf4, 0xd1, 0xfe, 0xa8, 0xfe, 0xb2, 0xd1, 0xfe,
- 0x81, 0xd5, 0x01, 0x19, 0x01, 0x4b, 0xcd, 0x01, 0x54, 0x01, 0x13, 0xd5,
- 0x04, 0xcb, 0xfb, 0x35, 0x05, 0xd5, 0xfb, 0x44, 0x04, 0xbc, 0xfb, 0x44,
- 0x04, 0xbc, 0x00, 0x01, 0x00, 0x2d, 0x00, 0x00, 0x05, 0x31, 0x05, 0xd5,
- 0x00, 0x0b, 0x00, 0x00, 0x09, 0x01, 0x23, 0x09, 0x01, 0x23, 0x09, 0x01,
- 0x33, 0x09, 0x01, 0x33, 0x03, 0x21, 0x02, 0x10, 0xeb, 0xfe, 0x68, 0xfe,
- 0x66, 0xe7, 0x02, 0x10, 0xfe, 0x11, 0xe7, 0x01, 0x7f, 0x01, 0x81, 0xe4,
- 0x02, 0xfe, 0xfd, 0x02, 0x02, 0x6f, 0xfd, 0x91, 0x02, 0xfe, 0x02, 0xd7,
- 0xfd, 0xb6, 0x02, 0x4a, 0x00, 0x01, 0x00, 0x1b, 0x00, 0x00, 0x05, 0x4a,
- 0x05, 0xd5, 0x00, 0x08, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x01, 0x33,
- 0x09, 0x01, 0x33, 0x03, 0x19, 0xbf, 0xfd, 0xc1, 0xeb, 0x01, 0xb6, 0x01,
- 0xaa, 0xe4, 0x02, 0x4a, 0xfd, 0xb6, 0x02, 0x4a, 0x03, 0x8b, 0xfd, 0x29,
- 0x02, 0xd7, 0x00, 0x01, 0x00, 0x39, 0x00, 0x00, 0x04, 0xaa, 0x05, 0xd5,
- 0x00, 0x09, 0x00, 0x00, 0x01, 0x15, 0x01, 0x21, 0x15, 0x21, 0x35, 0x01,
- 0x21, 0x35, 0x04, 0xa6, 0xfc, 0x83, 0x03, 0x81, 0xfb, 0x8f, 0x03, 0x81,
- 0xfc, 0xb9, 0x05, 0xd5, 0xac, 0xfb, 0x7f, 0xa8, 0xa8, 0x04, 0x85, 0xa8,
- 0x00, 0x01, 0x00, 0x83, 0xfe, 0x4e, 0x02, 0x00, 0x05, 0xd5, 0x00, 0x07,
- 0x00, 0x00, 0x01, 0x15, 0x23, 0x11, 0x33, 0x15, 0x21, 0x11, 0x02, 0x00,
- 0xd3, 0xd3, 0xfe, 0x83, 0x05, 0xd5, 0x93, 0xf9, 0x9f, 0x93, 0x07, 0x87,
- 0x00, 0x01, 0xff, 0xf0, 0xff, 0xd7, 0x02, 0x46, 0x05, 0xd5, 0x00, 0x03,
- 0x00, 0x00, 0x13, 0x01, 0x23, 0x01, 0x60, 0x01, 0xe6, 0x71, 0xfe, 0x1b,
- 0x05, 0xd5, 0xfa, 0x02, 0x05, 0xfe, 0x00, 0x01, 0x00, 0x2f, 0xfe, 0x4e,
- 0x01, 0xac, 0x05, 0xd5, 0x00, 0x07, 0x00, 0x00, 0x13, 0x35, 0x33, 0x11,
- 0x23, 0x35, 0x21, 0x11, 0x2f, 0xd3, 0xd3, 0x01, 0x7d, 0xfe, 0x4e, 0x93,
- 0x06, 0x61, 0x93, 0xf8, 0x79, 0x00, 0x00, 0x01, 0x00, 0x5a, 0x02, 0xa2,
- 0x03, 0x66, 0x05, 0xac, 0x00, 0x06, 0x00, 0x00, 0x01, 0x33, 0x01, 0x23,
- 0x0b, 0x01, 0x23, 0x01, 0x93, 0x96, 0x01, 0x3d, 0x8d, 0xfa, 0xf8, 0x8d,
- 0x05, 0xac, 0xfc, 0xf6, 0x02, 0x66, 0xfd, 0x9a, 0x00, 0x01, 0xff, 0xd3,
- 0xfe, 0x98, 0x04, 0xa0, 0xfe, 0xfe, 0x00, 0x03, 0x00, 0x00, 0x01, 0x15,
- 0x21, 0x35, 0x04, 0xa0, 0xfb, 0x33, 0xfe, 0xfe, 0x66, 0x66, 0x00, 0x01,
- 0x00, 0x2d, 0x04, 0xbc, 0x01, 0xd9, 0x05, 0xec, 0x00, 0x03, 0x00, 0x00,
- 0x01, 0x13, 0x23, 0x01, 0x01, 0x14, 0xc5, 0x7b, 0xfe, 0xcf, 0x05, 0xec,
- 0xfe, 0xd0, 0x01, 0x30, 0x00, 0x02, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48,
- 0x04, 0x50, 0x00, 0x31, 0x00, 0x40, 0x00, 0x00, 0x13, 0x12, 0x25, 0x36,
- 0x33, 0x20, 0x17, 0x16, 0x15, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37,
- 0x15, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x06, 0x07, 0x06, 0x23, 0x22,
- 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36,
- 0x3d, 0x01, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x13, 0x32,
- 0x37, 0x36, 0x3d, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17,
- 0x16, 0x85, 0x0a, 0x01, 0x43, 0x2e, 0x33, 0x01, 0x31, 0x4c, 0x17, 0x46,
- 0x0a, 0x0c, 0x12, 0x13, 0x48, 0x2d, 0x7f, 0x23, 0x0a, 0x04, 0x90, 0x94,
- 0x23, 0x26, 0xc0, 0x5e, 0x42, 0x77, 0x54, 0xc6, 0x25, 0x5e, 0x84, 0x20,
- 0x0f, 0x82, 0x30, 0x3e, 0xb7, 0x31, 0x0f, 0x05, 0xaa, 0x9b, 0x61, 0x46,
- 0x38, 0x98, 0x9c, 0x3c, 0x6d, 0x66, 0x2e, 0x02, 0xf4, 0x01, 0x30, 0x27,
- 0x05, 0xae, 0x34, 0x43, 0xfd, 0x89, 0x48, 0x0a, 0x02, 0x04, 0x81, 0x12,
- 0x5e, 0x1c, 0x24, 0x84, 0x15, 0x05, 0x74, 0x51, 0x78, 0xb0, 0x4c, 0x36,
- 0x1d, 0x06, 0x0c, 0x10, 0x2d, 0x16, 0x23, 0x2d, 0x72, 0x22, 0x0c, 0x70,
- 0x21, 0x2d, 0xfd, 0x72, 0x5d, 0x43, 0x4c, 0xc0, 0x19, 0x17, 0x17, 0x1b,
- 0x31, 0x6d, 0x70, 0x29, 0x13, 0x00, 0x00, 0x02, 0x00, 0x6f, 0xff, 0xd1,
- 0x04, 0x2f, 0x05, 0xd5, 0x00, 0x14, 0x00, 0x24, 0x00, 0x00, 0x13, 0x33,
- 0x11, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x10, 0x07, 0x06,
- 0x23, 0x22, 0x27, 0x26, 0x27, 0x15, 0x23, 0x01, 0x22, 0x07, 0x06, 0x15,
- 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x6f,
- 0xaa, 0x68, 0xb6, 0x16, 0x17, 0xdd, 0x7c, 0x72, 0x8a, 0x7e, 0xcb, 0xd5,
- 0x77, 0x04, 0x04, 0x99, 0x01, 0xd5, 0x91, 0x53, 0x47, 0x6b, 0x4d, 0x73,
- 0x90, 0x57, 0x52, 0x6e, 0x51, 0x05, 0xd5, 0xfd, 0xcb, 0x9f, 0x0f, 0x02,
- 0xa3, 0x96, 0xfa, 0xfe, 0xe8, 0xa1, 0x93, 0xac, 0x06, 0x06, 0x89, 0x03,
- 0xb0, 0x81, 0x6f, 0xb0, 0xdb, 0x72, 0x52, 0x78, 0x71, 0xb0, 0xdd, 0x73,
- 0x56, 0x00, 0x00, 0x01, 0x00, 0x3f, 0xff, 0xd1, 0x03, 0xd1, 0x04, 0x50,
- 0x00, 0x1f, 0x00, 0x00, 0x01, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07,
- 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x13, 0x33, 0x06, 0x07, 0x06,
- 0x23, 0x22, 0x27, 0x26, 0x11, 0x10, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16,
- 0x03, 0xc5, 0xac, 0x18, 0x83, 0x2c, 0x37, 0xa5, 0x4d, 0x37, 0x7a, 0x49,
- 0x6a, 0xdb, 0x2b, 0xac, 0x13, 0xa3, 0x69, 0x97, 0xde, 0x81, 0x7d, 0x8b,
- 0x82, 0xd1, 0xf3, 0x6d, 0x3d, 0x02, 0xc9, 0xa9, 0x30, 0x10, 0x99, 0x6c,
- 0xa7, 0xf0, 0x69, 0x3e, 0x01, 0x02, 0xf0, 0x6b, 0x45, 0x9d, 0x99, 0x00,
- 0xff, 0x01, 0x14, 0xa1, 0x95, 0xa5, 0x5c, 0x00, 0x00, 0x02, 0x00, 0x35,
- 0xff, 0xd1, 0x03, 0xf6, 0x05, 0xd5, 0x00, 0x14, 0x00, 0x24, 0x00, 0x00,
- 0x01, 0x11, 0x23, 0x35, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x11,
- 0x10, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x11, 0x01, 0x22, 0x07,
- 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27,
- 0x26, 0x03, 0xf6, 0x98, 0x62, 0x85, 0x32, 0x3d, 0xe2, 0x7e, 0x73, 0x87,
- 0x7d, 0xc9, 0xd4, 0x6e, 0x04, 0x04, 0xfe, 0xd3, 0x93, 0x57, 0x4e, 0x6b,
- 0x53, 0x7c, 0x8f, 0x53, 0x49, 0x6e, 0x4d, 0x05, 0xd5, 0xfa, 0x2b, 0x8d,
- 0x8e, 0x21, 0x0d, 0xaa, 0x9b, 0x01, 0x05, 0x01, 0x0a, 0x9c, 0x8f, 0x9a,
- 0x06, 0x06, 0x02, 0x2b, 0xfd, 0xdb, 0x7d, 0x71, 0xb2, 0xd2, 0x73, 0x5a,
- 0x7d, 0x6f, 0xaf, 0xe2, 0x72, 0x50, 0x00, 0x02, 0x00, 0x52, 0xff, 0xd1,
- 0x04, 0x1b, 0x04, 0x50, 0x00, 0x1d, 0x00, 0x28, 0x00, 0x00, 0x01, 0x21,
- 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x33, 0x06,
- 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x33, 0x32,
- 0x17, 0x16, 0x17, 0x16, 0x05, 0x21, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23,
- 0x22, 0x07, 0x06, 0x04, 0x1b, 0xfc, 0xe9, 0x02, 0x28, 0x07, 0x08, 0x4f,
- 0x90, 0x11, 0x12, 0xd2, 0x47, 0xac, 0x27, 0xa3, 0x6d, 0x94, 0xec, 0x83,
- 0x78, 0x8d, 0x85, 0xd9, 0xc5, 0x83, 0x46, 0x25, 0x2b, 0xfc, 0xed, 0x02,
- 0x5a, 0x02, 0x5a, 0x55, 0x7a, 0x95, 0x56, 0x3e, 0x01, 0xdf, 0x84, 0x48,
- 0x0d, 0x0c, 0x7b, 0x0e, 0x02, 0xd7, 0xd3, 0x61, 0x41, 0xa6, 0x97, 0xfc,
- 0x01, 0x11, 0x9f, 0x96, 0x7c, 0x42, 0x5d, 0x73, 0x58, 0x05, 0x08, 0x88,
- 0x5c, 0x57, 0x74, 0x55, 0x00, 0x01, 0x00, 0x25, 0x00, 0x00, 0x02, 0x10,
- 0x05, 0xdb, 0x00, 0x15, 0x00, 0x00, 0x01, 0x15, 0x23, 0x11, 0x23, 0x11,
- 0x23, 0x35, 0x33, 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26,
- 0x23, 0x22, 0x1d, 0x01, 0x02, 0x10, 0xb2, 0xaa, 0x8f, 0x8f, 0x72, 0x3a,
- 0x50, 0x2f, 0x31, 0x27, 0x14, 0x77, 0x04, 0x31, 0x8b, 0xfc, 0x5a, 0x03,
- 0xa6, 0x8b, 0xb6, 0x9a, 0x3c, 0x1e, 0x0a, 0x8d, 0x02, 0x6d, 0xa8, 0x00,
- 0x00, 0x02, 0x00, 0x3b, 0xfe, 0x42, 0x03, 0xe9, 0x04, 0x50, 0x00, 0x2a,
- 0x00, 0x3a, 0x00, 0x00, 0x05, 0x22, 0x27, 0x26, 0x27, 0x26, 0x35, 0x10,
- 0x37, 0x36, 0x37, 0x32, 0x33, 0x32, 0x17, 0x16, 0x17, 0x35, 0x33, 0x11,
- 0x10, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x33, 0x16,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x3d, 0x01, 0x06, 0x07, 0x06, 0x03,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x10, 0x27, 0x26, 0x01, 0xf6, 0xac, 0x79, 0x89, 0x0c, 0x01, 0x80, 0x78,
- 0xbf, 0x09, 0x09, 0xc4, 0x7e, 0x03, 0x03, 0x9d, 0x45, 0x5a, 0xf0, 0x26,
- 0x2a, 0xf3, 0x70, 0x3f, 0x0a, 0xae, 0x18, 0xa2, 0x22, 0x28, 0xbe, 0x41,
- 0x2c, 0x64, 0x73, 0x32, 0x1b, 0x99, 0x50, 0x40, 0x78, 0x49, 0x6a, 0x9b,
- 0x4d, 0x3a, 0x80, 0x44, 0x2f, 0x81, 0x91, 0xf8, 0x15, 0x16, 0x01, 0x07,
- 0xa3, 0x98, 0x08, 0xb1, 0x04, 0x05, 0x9b, 0xfc, 0x7f, 0xfe, 0xe3, 0x87,
- 0xb0, 0x16, 0x04, 0x89, 0x4c, 0x6e, 0x92, 0x1c, 0x06, 0x82, 0x58, 0xaf,
- 0x37, 0x8d, 0x24, 0x0f, 0x03, 0xe1, 0x89, 0x6d, 0xac, 0xf4, 0x6c, 0x41,
- 0x8d, 0x69, 0xa5, 0x01, 0x09, 0x68, 0x37, 0x00, 0x00, 0x01, 0x00, 0x8f,
- 0x00, 0x00, 0x03, 0xe3, 0x05, 0xd5, 0x00, 0x17, 0x00, 0x00, 0x01, 0x34,
- 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x11, 0x23, 0x11, 0x33, 0x11,
- 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x11, 0x23, 0x03, 0x39,
- 0x79, 0x2f, 0x35, 0x91, 0x50, 0x42, 0xaa, 0xaa, 0x5e, 0x67, 0x3e, 0x55,
- 0xbe, 0x59, 0x3b, 0xaa, 0x02, 0xe7, 0x90, 0x30, 0x13, 0x75, 0x61, 0x94,
- 0xfd, 0xb0, 0x05, 0xd5, 0xfd, 0xc9, 0x7a, 0x23, 0x15, 0x70, 0x4a, 0x6b,
- 0xfc, 0xd5, 0x00, 0x02, 0x00, 0x87, 0x00, 0x00, 0x01, 0x33, 0x05, 0xd5,
- 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x01, 0x15, 0x23, 0x35, 0x13, 0x11,
- 0x23, 0x11, 0x01, 0x33, 0xac, 0xac, 0xa9, 0x05, 0xd5, 0xd7, 0xd7, 0xfe,
- 0x5c, 0xfb, 0xcf, 0x04, 0x31, 0x00, 0x00, 0x02, 0xff, 0xdb, 0xfe, 0x42,
- 0x01, 0x39, 0x05, 0xd5, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, 0x01, 0x15,
- 0x23, 0x35, 0x11, 0x33, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x35,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x01, 0x39, 0xaa, 0xaa, 0xce, 0x28,
- 0x2f, 0x1a, 0x1f, 0x23, 0x06, 0x5d, 0x1c, 0x12, 0x05, 0xd5, 0xd7, 0xd7,
- 0xfe, 0x5c, 0xfa, 0xf0, 0xb9, 0x20, 0x06, 0x06, 0x91, 0x02, 0x2e, 0x1f,
- 0x40, 0x00, 0x00, 0x01, 0x00, 0x77, 0x00, 0x00, 0x04, 0x04, 0x05, 0xd5,
- 0x00, 0x0b, 0x00, 0x00, 0x01, 0x11, 0x01, 0x33, 0x09, 0x01, 0x23, 0x01,
- 0x07, 0x11, 0x23, 0x11, 0x01, 0x21, 0x01, 0xc6, 0xdc, 0xfe, 0x8b, 0x01,
- 0xb6, 0xd3, 0xfe, 0x96, 0xa6, 0xaa, 0x05, 0xd5, 0xfc, 0x95, 0x01, 0xc7,
- 0xfe, 0x8d, 0xfd, 0x42, 0x02, 0x46, 0xa4, 0xfe, 0x5e, 0x05, 0xd5, 0x00,
- 0x00, 0x01, 0x00, 0x8b, 0x00, 0x00, 0x01, 0x37, 0x05, 0xd5, 0x00, 0x03,
- 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x01, 0x37, 0xac, 0x05, 0xd5, 0xfa,
- 0x2b, 0x05, 0xd5, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x06, 0x19,
- 0x04, 0x50, 0x00, 0x2a, 0x00, 0x00, 0x13, 0x33, 0x15, 0x36, 0x37, 0x36,
- 0x33, 0x32, 0x17, 0x16, 0x17, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16,
- 0x15, 0x11, 0x23, 0x11, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15,
- 0x11, 0x23, 0x11, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x11,
- 0x23, 0x8f, 0x9e, 0x5d, 0x72, 0x36, 0x45, 0x9d, 0x54, 0x1a, 0x16, 0x5e,
- 0x62, 0x3a, 0x4f, 0xd4, 0x46, 0x1e, 0xac, 0x62, 0x2b, 0x3a, 0x6c, 0x4a,
- 0x46, 0xac, 0x71, 0x25, 0x31, 0x6c, 0x4a, 0x46, 0xac, 0x04, 0x31, 0x97,
- 0x83, 0x22, 0x11, 0x5e, 0x1e, 0x28, 0x71, 0x20, 0x13, 0x95, 0x40, 0x56,
- 0xfc, 0xdb, 0x02, 0xe3, 0x8e, 0x32, 0x17, 0x56, 0x51, 0x71, 0xfd, 0x5e,
- 0x02, 0xe3, 0x9c, 0x2c, 0x0f, 0x56, 0x51, 0x71, 0xfd, 0x5e, 0x00, 0x01,
- 0x00, 0x8f, 0x00, 0x00, 0x03, 0xe5, 0x04, 0x50, 0x00, 0x17, 0x00, 0x00,
- 0x13, 0x33, 0x15, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x11,
- 0x23, 0x11, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x11, 0x23,
- 0x8f, 0x9e, 0x5d, 0x7a, 0x3d, 0x50, 0xb6, 0x5d, 0x41, 0xaa, 0x5c, 0x35,
- 0x4c, 0x91, 0x50, 0x42, 0xac, 0x04, 0x31, 0xb4, 0x94, 0x2a, 0x15, 0x6b,
- 0x4b, 0x6f, 0xfc, 0xd5, 0x02, 0xe7, 0x7a, 0x38, 0x21, 0x75, 0x61, 0x94,
- 0xfd, 0xb0, 0x00, 0x02, 0x00, 0x4a, 0xff, 0xd1, 0x04, 0x14, 0x04, 0x50,
- 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x20, 0x17, 0x16, 0x15, 0x10,
- 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x17, 0x22,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x02, 0x2d, 0x01, 0x08, 0x7f, 0x60, 0x9a, 0x7f, 0xcc, 0xf9,
- 0x81, 0x6b, 0xa0, 0x7c, 0xc9, 0x9f, 0x53, 0x41, 0x77, 0x4c, 0x70, 0x9d,
- 0x53, 0x43, 0x7e, 0x4a, 0x04, 0x50, 0xc3, 0x95, 0xf0, 0xfe, 0xde, 0x98,
- 0x7d, 0xb4, 0x95, 0xf6, 0x01, 0x2f, 0x99, 0x78, 0x9e, 0x8a, 0x6d, 0xab,
- 0xee, 0x6d, 0x46, 0x86, 0x6c, 0xa9, 0xfd, 0x6c, 0x3f, 0x00, 0x00, 0x02,
- 0x00, 0x6f, 0xfe, 0x42, 0x04, 0x2f, 0x04, 0x50, 0x00, 0x11, 0x00, 0x21,
- 0x00, 0x00, 0x13, 0x11, 0x33, 0x15, 0x36, 0x20, 0x17, 0x16, 0x11, 0x10,
- 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x11, 0x01, 0x22, 0x07, 0x06,
- 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26,
- 0x6f, 0x9d, 0x7a, 0x01, 0xb8, 0x7d, 0x74, 0x88, 0x7c, 0xc7, 0xa9, 0x72,
- 0x17, 0x17, 0x01, 0x2b, 0x91, 0x53, 0x47, 0x6b, 0x4d, 0x73, 0x91, 0x57,
- 0x4f, 0x6d, 0x51, 0xfe, 0x42, 0x05, 0xef, 0xa2, 0xc1, 0xa7, 0x9d, 0xfe,
- 0xfa, 0xfe, 0xf5, 0x9c, 0x8e, 0x6d, 0x17, 0x1c, 0xfd, 0xd1, 0x05, 0x6e,
- 0x81, 0x6f, 0xb0, 0xdb, 0x72, 0x52, 0x7a, 0x70, 0xaf, 0xdc, 0x73, 0x57,
- 0x00, 0x02, 0x00, 0x35, 0xfe, 0x42, 0x03, 0xf6, 0x04, 0x50, 0x00, 0x14,
- 0x00, 0x24, 0x00, 0x00, 0x01, 0x23, 0x11, 0x06, 0x07, 0x06, 0x23, 0x22,
- 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x35,
- 0x33, 0x05, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x03, 0xf6, 0xaa, 0x60, 0x9d, 0x25, 0x2a,
- 0xdd, 0x7c, 0x72, 0x89, 0x7f, 0xcb, 0xc3, 0x7a, 0x0d, 0x0c, 0x98, 0xfe,
- 0x2b, 0x94, 0x57, 0x4f, 0x6b, 0x53, 0x7c, 0x8f, 0x53, 0x49, 0x6d, 0x4d,
- 0xfe, 0x42, 0x02, 0x39, 0x8d, 0x17, 0x06, 0xa3, 0x96, 0xfa, 0x01, 0x15,
- 0xa2, 0x95, 0x8e, 0x0f, 0x11, 0x8f, 0x81, 0x7d, 0x71, 0xb2, 0xd2, 0x73,
- 0x5a, 0x7d, 0x6e, 0xae, 0xe3, 0x73, 0x50, 0x00, 0x00, 0x01, 0x00, 0x8d,
- 0x00, 0x00, 0x02, 0x91, 0x04, 0x50, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x06,
- 0x07, 0x06, 0x15, 0x11, 0x23, 0x11, 0x33, 0x15, 0x36, 0x37, 0x36, 0x33,
- 0x32, 0x17, 0x02, 0x91, 0xb0, 0x4e, 0x5a, 0xac, 0x9e, 0x64, 0x5f, 0x2d,
- 0x35, 0x17, 0x2a, 0x03, 0x9c, 0x03, 0x49, 0x55, 0xce, 0xfd, 0xd3, 0x04,
- 0x31, 0xc2, 0xa2, 0x2b, 0x14, 0x06, 0x00, 0x01, 0x00, 0x46, 0xff, 0xd1,
- 0x03, 0xac, 0x04, 0x50, 0x00, 0x32, 0x00, 0x00, 0x13, 0x1e, 0x01, 0x33,
- 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x2f, 0x01, 0x26, 0x27, 0x26,
- 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x23, 0x26, 0x27,
- 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x1f, 0x01, 0x16,
- 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x20, 0x27, 0x26, 0x27, 0xfa,
- 0x0f, 0x7e, 0x79, 0x93, 0x42, 0x25, 0x4f, 0x22, 0x35, 0xa0, 0xd4, 0x48,
- 0x38, 0x80, 0x6f, 0xad, 0xfc, 0x5c, 0x2c, 0x01, 0xb4, 0x05, 0xa3, 0x16,
- 0x19, 0x8f, 0x3a, 0x1b, 0x65, 0x28, 0x3a, 0xa4, 0xd1, 0x3e, 0x20, 0x88,
- 0x76, 0xbc, 0xfe, 0xa4, 0x41, 0x0d, 0x02, 0x01, 0x3f, 0x72, 0x5e, 0x4a,
- 0x28, 0x36, 0x50, 0x27, 0x11, 0x0d, 0x27, 0x33, 0x52, 0x41, 0x6f, 0xa1,
- 0x5a, 0x4d, 0x9a, 0x49, 0x67, 0x96, 0x13, 0x03, 0x4d, 0x25, 0x30, 0x50,
- 0x2b, 0x10, 0x0e, 0x27, 0x32, 0x6d, 0x3a, 0x52, 0xa6, 0x5d, 0x51, 0xfc,
- 0x34, 0x3e, 0x00, 0x01, 0x00, 0x1d, 0xff, 0xd1, 0x02, 0x08, 0x05, 0x58,
- 0x00, 0x17, 0x00, 0x00, 0x01, 0x15, 0x23, 0x11, 0x14, 0x17, 0x16, 0x33,
- 0x32, 0x37, 0x15, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x23, 0x35,
- 0x33, 0x11, 0x33, 0x11, 0x02, 0x08, 0xb0, 0x1f, 0x14, 0x2b, 0x36, 0x1c,
- 0x50, 0x3b, 0x9e, 0x26, 0x0b, 0x91, 0x91, 0xaa, 0x04, 0x31, 0x8b, 0xfd,
- 0x21, 0x45, 0x11, 0x0b, 0x09, 0x90, 0x0e, 0x69, 0x1d, 0x24, 0x03, 0x2b,
- 0x8b, 0x01, 0x27, 0xfe, 0xd9, 0x00, 0x00, 0x01, 0x00, 0x85, 0xff, 0xd1,
- 0x03, 0xdb, 0x04, 0x31, 0x00, 0x17, 0x00, 0x00, 0x21, 0x23, 0x35, 0x06,
- 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x11, 0x33, 0x03, 0xdb, 0x99, 0x60,
- 0x71, 0x41, 0x55, 0xb9, 0x5c, 0x41, 0xaa, 0x5c, 0x35, 0x4c, 0x93, 0x50,
- 0x42, 0xaa, 0x96, 0x87, 0x28, 0x16, 0x6c, 0x4b, 0x6e, 0x03, 0x3b, 0xfd,
- 0x08, 0x7a, 0x38, 0x21, 0x76, 0x61, 0x94, 0x02, 0x60, 0x00, 0x00, 0x01,
- 0x00, 0x14, 0x00, 0x00, 0x03, 0xe3, 0x04, 0x31, 0x00, 0x06, 0x00, 0x00,
- 0x21, 0x23, 0x01, 0x33, 0x09, 0x01, 0x33, 0x02, 0x48, 0xbb, 0xfe, 0x87,
- 0xc1, 0x01, 0x1f, 0x01, 0x2f, 0xc0, 0x04, 0x31, 0xfc, 0x9a, 0x03, 0x66,
- 0x00, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x05, 0xaa, 0x04, 0x31, 0x00, 0x0c,
- 0x00, 0x00, 0x21, 0x23, 0x0b, 0x01, 0x23, 0x01, 0x33, 0x1b, 0x01, 0x33,
- 0x1b, 0x01, 0x33, 0x04, 0x6f, 0xc3, 0xd9, 0xcf, 0xc0, 0xfe, 0xc8, 0xbd,
- 0xdb, 0xcd, 0xd1, 0xd2, 0xd5, 0xc1, 0x03, 0x4a, 0xfc, 0xb6, 0x04, 0x31,
- 0xfc, 0xbd, 0x03, 0x43, 0xfc, 0xbd, 0x03, 0x43, 0x00, 0x01, 0x00, 0x23,
- 0x00, 0x00, 0x03, 0xc9, 0x04, 0x31, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x01,
- 0x23, 0x09, 0x01, 0x23, 0x09, 0x01, 0x33, 0x09, 0x01, 0x33, 0x02, 0x56,
- 0x01, 0x73, 0xc7, 0xfe, 0xf4, 0xfe, 0xef, 0xc2, 0x01, 0x7b, 0xfe, 0x99,
- 0xc3, 0x01, 0x02, 0x01, 0x02, 0xc0, 0x02, 0x2b, 0xfd, 0xd5, 0x01, 0x9c,
- 0xfe, 0x64, 0x02, 0x23, 0x02, 0x0e, 0xfe, 0x7b, 0x01, 0x85, 0x00, 0x01,
- 0x00, 0x29, 0xfe, 0x42, 0x03, 0xd3, 0x04, 0x31, 0x00, 0x11, 0x00, 0x00,
- 0x01, 0x33, 0x01, 0x06, 0x23, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x37,
- 0x36, 0x3f, 0x01, 0x01, 0x33, 0x01, 0x03, 0x1b, 0xb8, 0xfe, 0x23, 0x54,
- 0xc1, 0x41, 0x31, 0x3b, 0x1f, 0x4c, 0x24, 0x0d, 0x0c, 0x41, 0xfe, 0x96,
- 0xb6, 0x01, 0x13, 0x04, 0x31, 0xfa, 0xee, 0xdd, 0x1a, 0x9a, 0x0d, 0x36,
- 0x15, 0x1e, 0xaa, 0x04, 0x35, 0xfc, 0xbd, 0x00, 0x00, 0x01, 0x00, 0x3f,
- 0x00, 0x00, 0x03, 0xa8, 0x04, 0x31, 0x00, 0x09, 0x00, 0x00, 0x01, 0x15,
- 0x01, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x35, 0x03, 0x8b, 0xfd, 0x83,
- 0x02, 0x9a, 0xfc, 0x97, 0x02, 0x82, 0xfd, 0xa9, 0x04, 0x31, 0x97, 0xfc,
- 0xfc, 0x96, 0x9a, 0x03, 0x02, 0x95, 0x00, 0x01, 0x00, 0x58, 0xfe, 0x4e,
- 0x02, 0x35, 0x05, 0xd5, 0x00, 0x2a, 0x00, 0x00, 0x01, 0x15, 0x23, 0x22,
- 0x07, 0x06, 0x15, 0x11, 0x14, 0x07, 0x06, 0x07, 0x16, 0x17, 0x16, 0x15,
- 0x11, 0x14, 0x17, 0x16, 0x3b, 0x01, 0x15, 0x23, 0x22, 0x27, 0x26, 0x35,
- 0x11, 0x34, 0x27, 0x26, 0x27, 0x35, 0x36, 0x37, 0x36, 0x35, 0x11, 0x34,
- 0x37, 0x36, 0x33, 0x02, 0x35, 0x1e, 0x55, 0x19, 0x13, 0x3d, 0x25, 0x46,
- 0x8b, 0x18, 0x05, 0x25, 0x1b, 0x41, 0x1e, 0x5e, 0x8e, 0x36, 0x1b, 0x32,
- 0x23, 0x4b, 0x5e, 0x22, 0x20, 0x6f, 0x30, 0x40, 0x05, 0xd5, 0x85, 0x26,
- 0x1e, 0x45, 0xfe, 0x8d, 0xae, 0x4a, 0x2e, 0x1c, 0x41, 0xad, 0x27, 0x2e,
- 0xfe, 0x8d, 0x5b, 0x1a, 0x14, 0x85, 0x7a, 0x3d, 0x55, 0x01, 0x56, 0xa6,
- 0x3c, 0x2a, 0x0f, 0x8d, 0x13, 0x41, 0x3d, 0x8a, 0x01, 0x56, 0xb3, 0x3e,
- 0x1b, 0x00, 0x00, 0x01, 0x00, 0xcd, 0xfe, 0x4e, 0x01, 0x48, 0x05, 0xd5,
- 0x00, 0x03, 0x00, 0x00, 0x13, 0x33, 0x11, 0x23, 0xcd, 0x7b, 0x7b, 0x05,
- 0xd5, 0xf8, 0x79, 0x00, 0x00, 0x01, 0x00, 0x3b, 0xfe, 0x4e, 0x02, 0x19,
- 0x05, 0xd5, 0x00, 0x2a, 0x00, 0x00, 0x13, 0x35, 0x33, 0x32, 0x37, 0x36,
- 0x35, 0x11, 0x34, 0x37, 0x36, 0x37, 0x26, 0x27, 0x26, 0x35, 0x11, 0x34,
- 0x27, 0x26, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x17, 0x16, 0x15, 0x11, 0x14,
- 0x17, 0x16, 0x17, 0x15, 0x06, 0x07, 0x06, 0x15, 0x11, 0x14, 0x07, 0x06,
- 0x23, 0x3b, 0x21, 0x56, 0x1a, 0x13, 0x79, 0x15, 0x1a, 0x8f, 0x15, 0x04,
- 0x25, 0x1c, 0x42, 0x21, 0x61, 0x92, 0x35, 0x1a, 0x33, 0x22, 0x47, 0x5d,
- 0x21, 0x1e, 0x71, 0x30, 0x40, 0xfe, 0x4e, 0x85, 0x26, 0x1d, 0x46, 0x01,
- 0x73, 0xd4, 0x53, 0x0f, 0x0b, 0x43, 0xb7, 0x22, 0x28, 0x01, 0x73, 0x5b,
- 0x1a, 0x14, 0x85, 0x7d, 0x3c, 0x53, 0xfe, 0xaa, 0xa7, 0x3c, 0x29, 0x0f,
- 0x8d, 0x14, 0x44, 0x3e, 0x85, 0xfe, 0xaa, 0xb4, 0x3e, 0x1a, 0x00, 0x01,
- 0x00, 0x9a, 0x02, 0x25, 0x04, 0x10, 0x03, 0x81, 0x00, 0x1f, 0x00, 0x00,
- 0x01, 0x22, 0x07, 0x06, 0x15, 0x23, 0x36, 0x37, 0x36, 0x33, 0x32, 0x1f,
- 0x01, 0x16, 0x33, 0x32, 0x37, 0x36, 0x3d, 0x01, 0x33, 0x15, 0x14, 0x07,
- 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x27, 0x26, 0x01, 0x73, 0x5e, 0x0e,
- 0x01, 0x6c, 0x0c, 0x87, 0x22, 0x28, 0x39, 0x35, 0xf0, 0x39, 0x2d, 0x51,
- 0x12, 0x06, 0x6c, 0x59, 0x35, 0x49, 0x4f, 0x57, 0xc8, 0x28, 0x28, 0x05,
- 0x02, 0xf8, 0x95, 0x05, 0x06, 0xea, 0x32, 0x0d, 0x21, 0x8d, 0x23, 0x4d,
- 0x1b, 0x27, 0x0b, 0x21, 0x96, 0x45, 0x29, 0x35, 0x81, 0x17, 0x05, 0x01,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x06,
- 0x00, 0x04, 0x00, 0x00, 0xff, 0xff, 0x00, 0xfa, 0xfe, 0x5c, 0x01, 0xa6,
- 0x04, 0x31, 0x10, 0x0f, 0x00, 0x05, 0x02, 0xa4, 0x04, 0x31, 0xc0, 0x00,
- 0x00, 0x02, 0x00, 0x6a, 0xff, 0x0a, 0x04, 0x14, 0x05, 0x06, 0x00, 0x1e,
- 0x00, 0x27, 0x00, 0x00, 0x01, 0x11, 0x36, 0x37, 0x33, 0x06, 0x07, 0x06,
- 0x07, 0x15, 0x23, 0x35, 0x26, 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x37,
- 0x35, 0x33, 0x15, 0x16, 0x17, 0x16, 0x17, 0x23, 0x26, 0x27, 0x26, 0x03,
- 0x11, 0x06, 0x03, 0x06, 0x15, 0x14, 0x17, 0x16, 0x02, 0x7f, 0xc6, 0x23,
- 0xac, 0x0c, 0x8f, 0x65, 0x95, 0x56, 0xe0, 0x78, 0x67, 0x96, 0x73, 0xb6,
- 0x56, 0xef, 0x62, 0x32, 0x06, 0xac, 0x0f, 0x6b, 0x2c, 0x8d, 0xe7, 0x20,
- 0x05, 0x80, 0x3b, 0x03, 0xb2, 0xfc, 0xbb, 0x15, 0xef, 0xd8, 0x71, 0x50,
- 0x07, 0xc7, 0xc9, 0x14, 0xac, 0x93, 0xe0, 0x01, 0x1a, 0xa0, 0x7b, 0x13,
- 0xb8, 0xb6, 0x11, 0xa9, 0x56, 0x77, 0x93, 0x3a, 0x18, 0xfc, 0xc3, 0x03,
- 0x3f, 0x2b, 0xfe, 0xdf, 0x2c, 0x32, 0xef, 0x69, 0x31, 0x00, 0x00, 0x01,
- 0x00, 0x35, 0xff, 0xd1, 0x04, 0x48, 0x05, 0xd5, 0x00, 0x41, 0x00, 0x00,
- 0x01, 0x14, 0x1f, 0x01, 0x16, 0x17, 0x21, 0x15, 0x21, 0x16, 0x15, 0x14,
- 0x07, 0x06, 0x07, 0x36, 0x33, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x17,
- 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07,
- 0x27, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x26, 0x27,
- 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17,
- 0x23, 0x02, 0x21, 0x22, 0x07, 0x06, 0x01, 0x2d, 0x34, 0x3e, 0x04, 0x03,
- 0x01, 0x48, 0xfe, 0xe9, 0x1f, 0x4f, 0x35, 0x6e, 0x79, 0x81, 0x45, 0x72,
- 0x60, 0x33, 0x4f, 0x5b, 0x56, 0x67, 0x7b, 0x15, 0x16, 0x58, 0x82, 0x75,
- 0x36, 0x17, 0x16, 0x6d, 0x72, 0x62, 0xb3, 0x31, 0x1c, 0x31, 0xe2, 0xa6,
- 0x54, 0x0f, 0x09, 0x7a, 0x7a, 0xba, 0x1c, 0x1d, 0xf8, 0x74, 0x54, 0x03,
- 0xb5, 0x09, 0xfe, 0xf3, 0x9a, 0x50, 0x37, 0x04, 0x2f, 0x56, 0x5d, 0x6d,
- 0x06, 0x07, 0x71, 0x57, 0x3a, 0x5f, 0x6c, 0x49, 0x6f, 0x50, 0x23, 0x1d,
- 0x3e, 0x87, 0x65, 0x0c, 0x02, 0x2c, 0x29, 0x06, 0x03, 0x4c, 0x87, 0x9a,
- 0x6e, 0x3d, 0x43, 0x4c, 0x53, 0x71, 0x8b, 0x3a, 0x24, 0x34, 0xac, 0x7b,
- 0x7a, 0x12, 0x03, 0xa1, 0x76, 0xc4, 0x01, 0x3b, 0x61, 0x43, 0x00, 0x02,
- 0x00, 0x89, 0x01, 0x10, 0x03, 0xe9, 0x04, 0x68, 0x00, 0x1f, 0x00, 0x2f,
- 0x00, 0x00, 0x01, 0x07, 0x27, 0x06, 0x23, 0x22, 0x27, 0x07, 0x27, 0x37,
- 0x26, 0x27, 0x34, 0x35, 0x34, 0x37, 0x36, 0x37, 0x27, 0x37, 0x17, 0x36,
- 0x33, 0x32, 0x17, 0x37, 0x17, 0x07, 0x16, 0x17, 0x14, 0x07, 0x01, 0x22,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x03, 0xe1, 0x77, 0x6c, 0x52, 0x7b, 0x6e, 0x52, 0x69, 0x72,
- 0x62, 0x3c, 0x06, 0x3f, 0x01, 0x02, 0x6f, 0x73, 0x71, 0x59, 0x6d, 0x77,
- 0x52, 0x79, 0x74, 0x70, 0x32, 0x03, 0x3b, 0xfe, 0xbe, 0x62, 0x41, 0x36,
- 0x4a, 0x3e, 0x53, 0x5e, 0x42, 0x39, 0x4b, 0x3d, 0x01, 0x85, 0x6e, 0x6c,
- 0x3d, 0x33, 0x69, 0x75, 0x64, 0x52, 0x6e, 0x09, 0x08, 0x71, 0x5b, 0x03,
- 0x02, 0x71, 0x6c, 0x70, 0x35, 0x39, 0x6c, 0x77, 0x70, 0x57, 0x68, 0x67,
- 0x5f, 0x01, 0x9b, 0x49, 0x3d, 0x51, 0x5f, 0x40, 0x36, 0x47, 0x3d, 0x4f,
- 0x64, 0x41, 0x34, 0x00, 0x00, 0x01, 0x00, 0x17, 0x00, 0x00, 0x04, 0x5c,
- 0x05, 0xac, 0x00, 0x16, 0x00, 0x00, 0x01, 0x15, 0x21, 0x15, 0x21, 0x15,
- 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x35, 0x21, 0x35, 0x21, 0x01,
- 0x33, 0x09, 0x01, 0x33, 0x01, 0x03, 0xf6, 0xfe, 0xa4, 0x01, 0x5c, 0xfe,
- 0xa4, 0xb5, 0xfe, 0xa0, 0x01, 0x60, 0xfe, 0xa0, 0x01, 0x35, 0xfe, 0x5d,
- 0xae, 0x01, 0x7a, 0x01, 0x6f, 0xae, 0xfe, 0x65, 0x02, 0xd5, 0x68, 0x9e,
- 0x69, 0xfe, 0x9a, 0x01, 0x66, 0x69, 0x9e, 0x68, 0x02, 0xd7, 0xfd, 0x6d,
- 0x02, 0x93, 0xfd, 0x29, 0x00, 0x02, 0x00, 0xcd, 0xfe, 0x4e, 0x01, 0x48,
- 0x05, 0xd5, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x13, 0x33, 0x11, 0x23,
- 0x11, 0x33, 0x11, 0x23, 0xcd, 0x7b, 0x7b, 0x7b, 0x7b, 0x05, 0xd5, 0xfc,
- 0xcb, 0xfe, 0xe3, 0xfc, 0xcb, 0x00, 0x00, 0x02, 0x00, 0x58, 0xfe, 0x4c,
- 0x04, 0x0c, 0x05, 0xd5, 0x00, 0x45, 0x00, 0x55, 0x00, 0x00, 0x05, 0x14,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x25,
- 0x26, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x26, 0x27, 0x26, 0x35,
- 0x34, 0x37, 0x36, 0x37, 0x32, 0x33, 0x32, 0x17, 0x16, 0x1d, 0x01, 0x23,
- 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x17, 0x05, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x17, 0x16, 0x15,
- 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x13, 0x05, 0x36, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x25, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x01, 0x4c, 0x92, 0x1d, 0x22, 0x6d, 0x36, 0x21, 0x54, 0x0d, 0x0f, 0xfe,
- 0xa3, 0x91, 0x20, 0x0b, 0x71, 0x2a, 0x3c, 0x4d, 0x0a, 0x03, 0x68, 0x6b,
- 0x9d, 0x06, 0x05, 0xac, 0x63, 0x57, 0xac, 0x54, 0x30, 0x42, 0x60, 0x34,
- 0x23, 0x3b, 0x17, 0x23, 0x01, 0x2b, 0x90, 0x2e, 0x21, 0xdf, 0x56, 0x11,
- 0x06, 0x6c, 0x6d, 0xa6, 0xc0, 0x64, 0x59, 0xe3, 0x01, 0x54, 0x7b, 0x16,
- 0x04, 0x95, 0xfe, 0xb6, 0x6b, 0x1a, 0x0c, 0x27, 0x1c, 0x1d, 0xcc, 0x26,
- 0x08, 0x49, 0x2c, 0x3c, 0x5b, 0x44, 0x0a, 0x0b, 0xef, 0x65, 0x7d, 0x2c,
- 0x34, 0x93, 0x5e, 0x22, 0x20, 0x5a, 0x4f, 0x13, 0x15, 0x89, 0x61, 0x64,
- 0x04, 0x71, 0x63, 0x97, 0x39, 0x35, 0x7a, 0x37, 0x20, 0x44, 0x2d, 0x3d,
- 0x3e, 0x34, 0x14, 0x17, 0xc1, 0x5c, 0x5c, 0x41, 0x5d, 0xec, 0x53, 0x62,
- 0x4e, 0x1e, 0x24, 0x92, 0x62, 0x64, 0x75, 0x68, 0xba, 0x01, 0xf2, 0xfc,
- 0x41, 0x69, 0x13, 0x14, 0x7e, 0x67, 0xe0, 0x47, 0x42, 0x20, 0x26, 0x48,
- 0x2f, 0x22, 0x00, 0x02, 0x00, 0x3d, 0x04, 0xe5, 0x02, 0x5e, 0x05, 0xb8,
- 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x01, 0x15, 0x23, 0x35, 0x21, 0x15,
- 0x23, 0x35, 0x01, 0x12, 0xd5, 0x02, 0x21, 0xd5, 0x05, 0xb8, 0xd3, 0xd3,
- 0xd3, 0xd3, 0x00, 0x03, 0xff, 0xe5, 0xff, 0xd3, 0x06, 0x02, 0x05, 0xf0,
- 0x00, 0x21, 0x00, 0x39, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x07, 0x06,
- 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16,
- 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x03, 0x20, 0x17, 0x16, 0x17, 0x16,
- 0x15, 0x10, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26,
- 0x35, 0x10, 0x37, 0x36, 0x37, 0x36, 0x17, 0x22, 0x07, 0x06, 0x07, 0x06,
- 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36,
- 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x04, 0x6a, 0x1c, 0x28, 0x5e, 0xc8,
- 0xaf, 0x6f, 0x6f, 0x79, 0x6e, 0xac, 0xd7, 0x56, 0x18, 0x0f, 0x91, 0x24,
- 0x4d, 0x24, 0x34, 0x84, 0x46, 0x36, 0x51, 0x46, 0x69, 0x96, 0x35, 0x08,
- 0x06, 0xe5, 0x01, 0x04, 0xd0, 0xbf, 0x4f, 0x2c, 0x9f, 0x92, 0xe8, 0x7b,
- 0x85, 0xf8, 0xcd, 0xbc, 0x52, 0x31, 0x9c, 0x8e, 0xe0, 0x7e, 0x87, 0xde,
- 0xaf, 0xa4, 0x39, 0x19, 0x88, 0x7e, 0xc0, 0x58, 0x5d, 0xe7, 0xb1, 0xa6,
- 0x37, 0x16, 0x8b, 0x80, 0xc5, 0x58, 0x02, 0x7f, 0x8a, 0x49, 0xaa, 0x83,
- 0x84, 0xd2, 0xe2, 0x86, 0x79, 0xc4, 0x35, 0x44, 0x89, 0x24, 0x11, 0x78,
- 0x5c, 0x8c, 0xa2, 0x64, 0x56, 0xbc, 0x1f, 0x23, 0x03, 0x71, 0x9c, 0x8e,
- 0xdf, 0x7e, 0x86, 0xfe, 0xf6, 0xd1, 0xc0, 0x4c, 0x29, 0x99, 0x8c, 0xdb,
- 0x83, 0x8b, 0x01, 0x04, 0xd0, 0xbf, 0x4f, 0x2d, 0x7f, 0x8d, 0x83, 0xcb,
- 0x58, 0x5d, 0xdf, 0xb3, 0xa5, 0x3c, 0x1c, 0x8f, 0x86, 0xcf, 0x54, 0x59,
- 0xe2, 0xb2, 0xa6, 0x3a, 0x1a, 0x00, 0x00, 0x03, 0x00, 0x4c, 0x02, 0x6d,
- 0x02, 0xaa, 0x05, 0xf0, 0x00, 0x03, 0x00, 0x2d, 0x00, 0x3c, 0x00, 0x00,
- 0x01, 0x15, 0x21, 0x35, 0x25, 0x15, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27,
- 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37,
- 0x36, 0x3d, 0x01, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x23,
- 0x36, 0x37, 0x36, 0x33, 0x32, 0x15, 0x11, 0x14, 0x33, 0x32, 0x27, 0x06,
- 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36,
- 0x35, 0x02, 0x8f, 0xfd, 0xc9, 0x02, 0x52, 0x20, 0x22, 0x50, 0x17, 0x06,
- 0x03, 0x65, 0x72, 0x81, 0x37, 0x1d, 0x4b, 0x4a, 0xac, 0x4f, 0x10, 0x06,
- 0x54, 0x18, 0x1e, 0x53, 0x1d, 0x12, 0x09, 0x79, 0x05, 0xab, 0x29, 0x30,
- 0xf9, 0x30, 0x09, 0xad, 0x25, 0x6a, 0x63, 0x20, 0x1d, 0x4e, 0x11, 0x15,
- 0x5b, 0x39, 0x27, 0x02, 0xd5, 0x68, 0x68, 0xc3, 0x5b, 0x0c, 0x38, 0x0e,
- 0x12, 0x58, 0x57, 0x2f, 0x3f, 0x6b, 0x30, 0x2f, 0x0d, 0x06, 0x1d, 0x0c,
- 0x14, 0x1b, 0x44, 0x11, 0x05, 0x27, 0x19, 0x33, 0xb2, 0x24, 0x08, 0xc1,
- 0xfe, 0x92, 0x30, 0xfa, 0x10, 0x0f, 0x0e, 0x1b, 0x1a, 0x2d, 0x4c, 0x10,
- 0x04, 0x36, 0x25, 0x2c, 0x00, 0x02, 0x00, 0xc9, 0x00, 0xd9, 0x03, 0xa4,
- 0x03, 0x81, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x13, 0x35, 0x25, 0x15,
- 0x07, 0x17, 0x15, 0x37, 0x35, 0x25, 0x15, 0x07, 0x17, 0x15, 0xc9, 0x01,
- 0x37, 0xd9, 0xd9, 0x6d, 0x01, 0x37, 0xd9, 0xd9, 0x01, 0xd1, 0xb6, 0xfa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xf8, 0xb6, 0xfa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00,
- 0x00, 0x01, 0x00, 0x52, 0x00, 0xb0, 0x04, 0x5a, 0x03, 0x00, 0x00, 0x05,
- 0x00, 0x00, 0x13, 0x21, 0x11, 0x23, 0x11, 0x21, 0x52, 0x04, 0x08, 0x8f,
- 0xfc, 0x87, 0x03, 0x00, 0xfd, 0xb0, 0x01, 0xc1, 0x00, 0x01, 0x00, 0x5e,
- 0x01, 0xec, 0x02, 0x46, 0x02, 0x7f, 0x00, 0x03, 0x00, 0x00, 0x01, 0x15,
- 0x21, 0x35, 0x02, 0x46, 0xfe, 0x18, 0x02, 0x7f, 0x93, 0x93, 0x00, 0x04,
- 0xff, 0xe5, 0xff, 0xd3, 0x06, 0x02, 0x05, 0xf0, 0x00, 0x1a, 0x00, 0x25,
- 0x00, 0x3d, 0x00, 0x55, 0x00, 0x00, 0x01, 0x16, 0x1f, 0x01, 0x16, 0x17,
- 0x15, 0x23, 0x26, 0x3f, 0x01, 0x34, 0x27, 0x26, 0x23, 0x21, 0x11, 0x23,
- 0x11, 0x21, 0x20, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x25, 0x21, 0x32,
- 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x21, 0x13, 0x20, 0x17, 0x16,
- 0x17, 0x16, 0x15, 0x10, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26,
- 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x37, 0x36, 0x17, 0x22, 0x07, 0x06,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36,
- 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x03, 0xf6, 0x55, 0x07,
- 0x01, 0x05, 0x29, 0xa2, 0x22, 0x04, 0x02, 0x45, 0x1a, 0x25, 0xfe, 0xee,
- 0x8f, 0x01, 0xa6, 0x01, 0x07, 0x17, 0x02, 0x2b, 0x17, 0xfe, 0x0b, 0x01,
- 0x08, 0x7f, 0x16, 0x05, 0x4d, 0x1f, 0x2e, 0xfe, 0xf8, 0xc7, 0x01, 0x04,
- 0xd0, 0xbf, 0x4f, 0x2c, 0x9f, 0x92, 0xe8, 0x7b, 0x85, 0xf8, 0xcd, 0xbc,
- 0x52, 0x31, 0x9c, 0x8e, 0xe0, 0x7e, 0x87, 0xde, 0xaf, 0xa4, 0x39, 0x19,
- 0x88, 0x7e, 0xc0, 0x58, 0x5d, 0xe7, 0xb1, 0xa6, 0x37, 0x16, 0x8b, 0x80,
- 0xc5, 0x58, 0x02, 0xe1, 0x37, 0x6c, 0x8d, 0x41, 0x1e, 0x33, 0x51, 0x4c,
- 0x52, 0x6b, 0x18, 0x09, 0xfe, 0x85, 0x03, 0x8f, 0xd5, 0x15, 0x18, 0x5a,
- 0x35, 0x1c, 0x1a, 0x59, 0x15, 0x1b, 0x66, 0x19, 0x0a, 0x01, 0xc3, 0x9c,
- 0x8e, 0xdf, 0x7e, 0x86, 0xfe, 0xf6, 0xd1, 0xc0, 0x4c, 0x29, 0x99, 0x8c,
- 0xdb, 0x83, 0x8b, 0x01, 0x04, 0xd0, 0xbf, 0x4f, 0x2d, 0x7f, 0x8d, 0x83,
- 0xcb, 0x58, 0x5d, 0xdf, 0xb3, 0xa5, 0x3c, 0x1c, 0x8f, 0x86, 0xcf, 0x54,
- 0x59, 0xe2, 0xb2, 0xa6, 0x3a, 0x1a, 0x00, 0x01, 0x00, 0x39, 0x05, 0x0c,
- 0x02, 0x6a, 0x05, 0x9c, 0x00, 0x03, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35,
- 0x02, 0x6a, 0xfd, 0xcf, 0x05, 0x9c, 0x90, 0x90, 0x00, 0x02, 0x01, 0x35,
- 0x03, 0x10, 0x03, 0xa2, 0x05, 0x7d, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0x00,
- 0x01, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26,
- 0x27, 0x34, 0x36, 0x17, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33,
- 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x02, 0x6d, 0x80, 0x5b, 0x5a,
- 0x5e, 0x5b, 0x81, 0x7c, 0x5a, 0x5b, 0x02, 0xb7, 0x81, 0x59, 0x3c, 0x2e,
- 0x44, 0x36, 0x44, 0x5f, 0x3a, 0x2c, 0x45, 0x35, 0x05, 0x7d, 0x5b, 0x5b,
- 0x7f, 0x84, 0x5b, 0x59, 0x5a, 0x60, 0x7e, 0x80, 0xb5, 0x75, 0x45, 0x36,
- 0x45, 0x59, 0x3c, 0x2e, 0x47, 0x35, 0x47, 0x5a, 0x39, 0x2d, 0x00, 0x02,
- 0x00, 0x66, 0xff, 0xe9, 0x04, 0x46, 0x04, 0xfc, 0x00, 0x0b, 0x00, 0x0f,
- 0x00, 0x00, 0x01, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11,
- 0x33, 0x11, 0x01, 0x15, 0x21, 0x35, 0x04, 0x46, 0xfe, 0x58, 0x90, 0xfe,
- 0x58, 0x01, 0xa8, 0x90, 0x01, 0xa8, 0xfc, 0x20, 0x03, 0x54, 0x8f, 0xfe,
- 0x58, 0x01, 0xa8, 0x8f, 0x01, 0xa8, 0xfe, 0x58, 0xfd, 0x25, 0x90, 0x90,
- 0x00, 0x01, 0x00, 0x27, 0x02, 0x46, 0x02, 0x9c, 0x05, 0xac, 0x00, 0x25,
- 0x00, 0x00, 0x01, 0x22, 0x07, 0x06, 0x07, 0x23, 0x36, 0x37, 0x36, 0x33,
- 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x06,
- 0x07, 0x21, 0x15, 0x21, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3f, 0x01, 0x36,
- 0x35, 0x34, 0x27, 0x26, 0x01, 0x6d, 0x8b, 0x1e, 0x07, 0x03, 0x7f, 0x08,
- 0xc6, 0x2e, 0x3a, 0x96, 0x55, 0x40, 0xaa, 0x0d, 0x0e, 0x81, 0x59, 0x21,
- 0x10, 0x0b, 0x01, 0xd5, 0xfd, 0x91, 0x08, 0x35, 0x34, 0x8f, 0x02, 0x02,
- 0x77, 0x79, 0x43, 0x2f, 0x05, 0x3f, 0x85, 0x1c, 0x29, 0xfe, 0x2e, 0x0b,
- 0x5b, 0x44, 0x63, 0x9b, 0x5f, 0x07, 0x07, 0x42, 0x2f, 0x36, 0x1a, 0x25,
- 0x76, 0x96, 0x4e, 0x4c, 0x4d, 0x01, 0x01, 0x3f, 0x41, 0x61, 0x4e, 0x2d,
- 0x1e, 0x00, 0x00, 0x01, 0x00, 0x21, 0x02, 0x29, 0x02, 0x93, 0x05, 0xac,
- 0x00, 0x30, 0x00, 0x00, 0x01, 0x22, 0x07, 0x06, 0x15, 0x23, 0x12, 0x37,
- 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07,
- 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x33, 0x16, 0x17, 0x16, 0x33, 0x32,
- 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x23, 0x35, 0x32, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x01, 0x5a, 0x7e, 0x1d, 0x0b, 0x81, 0x06,
- 0xf4, 0x16, 0x17, 0xa7, 0x4a, 0x2c, 0x75, 0x91, 0x6d, 0x53, 0x7d, 0xc8,
- 0x49, 0x24, 0x7f, 0x07, 0x61, 0x22, 0x30, 0x7d, 0x2a, 0x11, 0x3f, 0x18,
- 0x1f, 0x1f, 0x69, 0x99, 0x2b, 0x1e, 0x4d, 0x22, 0x05, 0x3f, 0x5d, 0x23,
- 0x36, 0x01, 0x0b, 0x16, 0x02, 0x65, 0x3c, 0x55, 0x78, 0x36, 0x31, 0x9c,
- 0x8d, 0x4b, 0x3a, 0x87, 0x41, 0x5b, 0x8b, 0x20, 0x0b, 0x56, 0x22, 0x2d,
- 0x51, 0x29, 0x10, 0x06, 0x04, 0x68, 0x26, 0x1b, 0x3c, 0x5a, 0x22, 0x0f,
- 0x00, 0x01, 0x00, 0xbc, 0x04, 0xbc, 0x02, 0x68, 0x05, 0xec, 0x00, 0x03,
- 0x00, 0x00, 0x01, 0x33, 0x01, 0x23, 0x01, 0x81, 0xe7, 0xfe, 0xcf, 0x7b,
- 0x05, 0xec, 0xfe, 0xd0, 0x00, 0x01, 0x00, 0x85, 0xfe, 0x3d, 0x04, 0x5a,
- 0x04, 0x31, 0x00, 0x20, 0x00, 0x00, 0x25, 0x15, 0x06, 0x23, 0x22, 0x27,
- 0x26, 0x27, 0x06, 0x23, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x11, 0x14,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17,
- 0x16, 0x33, 0x32, 0x04, 0x5a, 0x44, 0x31, 0x8f, 0x1a, 0x06, 0x01, 0x78,
- 0xd6, 0x6f, 0x49, 0xaa, 0xaa, 0x5a, 0x36, 0x4b, 0x93, 0x50, 0x42, 0xaa,
- 0x4f, 0x06, 0x07, 0x11, 0x64, 0x81, 0x12, 0x74, 0x18, 0x1e, 0xaa, 0x35,
- 0xfe, 0x37, 0x05, 0xf4, 0xfd, 0x08, 0x79, 0x39, 0x21, 0x76, 0x61, 0x94,
- 0x02, 0x60, 0xfc, 0x83, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x01, 0x00, 0x62,
- 0xfe, 0x96, 0x04, 0x2d, 0x05, 0xd5, 0x00, 0x13, 0x00, 0x00, 0x01, 0x26,
- 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x33, 0x21, 0x15, 0x23,
- 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x02, 0x0a, 0xd1, 0x75, 0x62, 0x75,
- 0x6f, 0xa8, 0x1f, 0x20, 0x02, 0x00, 0x75, 0x83, 0xa8, 0x83, 0x02, 0x12,
- 0x0b, 0x98, 0x7f, 0xb5, 0xc1, 0x8b, 0x84, 0x18, 0x04, 0x83, 0xf9, 0x44,
- 0x06, 0xbc, 0xf9, 0x44, 0x00, 0x01, 0x00, 0xb2, 0x02, 0x6a, 0x01, 0xb0,
- 0x03, 0x6a, 0x00, 0x03, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x01, 0xb0,
- 0xfe, 0x03, 0x6a, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x50,
- 0xfe, 0x4a, 0x02, 0x4c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x13, 0x17,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07,
- 0x27, 0x37, 0x33, 0x07, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07,
- 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x7b, 0x6e, 0x2e, 0x2d, 0x43, 0x1e,
- 0x0d, 0x3c, 0x0f, 0x13, 0x1f, 0x21, 0x18, 0x56, 0x4e, 0x2f, 0x1a, 0x1f,
- 0x7a, 0x1f, 0x09, 0x67, 0x3d, 0x58, 0x50, 0x58, 0x22, 0x36, 0xfe, 0xe1,
- 0x32, 0x11, 0x2e, 0x15, 0x19, 0x3a, 0x0e, 0x04, 0x11, 0x0f, 0xbc, 0x73,
- 0x04, 0x54, 0x18, 0x1d, 0x6f, 0x31, 0x1e, 0x21, 0x0d, 0x17, 0x00, 0x01,
- 0x00, 0x7d, 0x02, 0x46, 0x01, 0xc7, 0x05, 0xac, 0x00, 0x0b, 0x00, 0x00,
- 0x01, 0x23, 0x35, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x33, 0x11, 0x23,
- 0x01, 0x48, 0xcb, 0x1f, 0x6c, 0x4a, 0x18, 0x03, 0x02, 0x58, 0x7f, 0x04,
- 0xa4, 0x5e, 0x02, 0x0a, 0x38, 0x56, 0x07, 0x09, 0xfc, 0x9a, 0x00, 0x03,
- 0x00, 0x52, 0x02, 0x6d, 0x02, 0x98, 0x05, 0xf0, 0x00, 0x03, 0x00, 0x13,
- 0x00, 0x23, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35, 0x01, 0x32, 0x17, 0x16,
- 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36,
- 0x17, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36,
- 0x35, 0x34, 0x27, 0x26, 0x02, 0x83, 0xfd, 0xe5, 0x01, 0x0d, 0xbb, 0x45,
- 0x23, 0x79, 0x46, 0x64, 0xb1, 0x49, 0x29, 0x82, 0x43, 0x5e, 0x68, 0x2c,
- 0x18, 0x56, 0x25, 0x31, 0x65, 0x2d, 0x1a, 0x5b, 0x23, 0x02, 0xd5, 0x68,
- 0x68, 0x03, 0x1b, 0xa1, 0x51, 0x73, 0xcf, 0x58, 0x33, 0x92, 0x54, 0x7a,
- 0xde, 0x55, 0x2c, 0x6b, 0x68, 0x3a, 0x52, 0xa2, 0x3a, 0x19, 0x64, 0x3a,
- 0x53, 0xaa, 0x38, 0x16, 0x00, 0x02, 0x00, 0xc9, 0x00, 0xd9, 0x03, 0x9c,
- 0x03, 0x81, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x15, 0x05, 0x35,
- 0x37, 0x27, 0x35, 0x05, 0x15, 0x05, 0x35, 0x37, 0x27, 0x35, 0x02, 0x04,
- 0xfe, 0xc5, 0xdd, 0xdd, 0x02, 0xd3, 0xfe, 0xc4, 0xdd, 0xdd, 0x02, 0x89,
- 0xb6, 0xfa, 0xaa, 0xaa, 0xaa, 0xaa, 0xf8, 0xb6, 0xfa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0x00, 0x00, 0x04, 0x00, 0x7d, 0xff, 0xd7, 0x06, 0xcb, 0x05, 0xac,
- 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x1a, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x23,
- 0x35, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x33, 0x11, 0x23, 0x01, 0x33,
- 0x01, 0x23, 0x25, 0x21, 0x35, 0x01, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15,
- 0x23, 0x19, 0x01, 0x01, 0x01, 0x48, 0xcb, 0x1f, 0x6c, 0x4a, 0x18, 0x03,
- 0x02, 0x58, 0x7f, 0x03, 0xdd, 0x77, 0xfc, 0x62, 0x77, 0x04, 0x3c, 0xfe,
- 0x7f, 0x01, 0xa1, 0x5f, 0x89, 0x89, 0x7f, 0xfe, 0xf7, 0x04, 0xa4, 0x5e,
- 0x02, 0x0a, 0x38, 0x56, 0x07, 0x09, 0xfc, 0x9a, 0x03, 0x66, 0xfa, 0x2b,
- 0xf6, 0x79, 0x02, 0x20, 0xfd, 0xd3, 0x6c, 0xcd, 0x01, 0x39, 0x01, 0x5d,
- 0xfe, 0xa3, 0x00, 0x03, 0x00, 0x7d, 0xff, 0xd7, 0x06, 0xc1, 0x05, 0xac,
- 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x35, 0x00, 0x00, 0x01, 0x23, 0x35, 0x37,
- 0x3e, 0x01, 0x37, 0x36, 0x37, 0x33, 0x11, 0x23, 0x01, 0x33, 0x01, 0x23,
- 0x01, 0x22, 0x07, 0x06, 0x07, 0x23, 0x12, 0x37, 0x36, 0x33, 0x32, 0x17,
- 0x16, 0x15, 0x14, 0x07, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x06, 0x07, 0x21,
- 0x15, 0x21, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3f, 0x01, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x01, 0x48, 0xcb, 0x1f, 0x6c, 0x4a, 0x18, 0x03, 0x02, 0x58,
- 0x7f, 0x03, 0xac, 0x76, 0xfc, 0x63, 0x77, 0x04, 0x3b, 0x8f, 0x1c, 0x05,
- 0x02, 0x7f, 0x07, 0xd3, 0x2a, 0x32, 0x96, 0x55, 0x40, 0xaa, 0x0d, 0x0e,
- 0x81, 0x59, 0x21, 0x10, 0x0c, 0x01, 0xd5, 0xfd, 0x92, 0x08, 0x35, 0x34,
- 0x8d, 0x03, 0x03, 0x77, 0x78, 0x43, 0x2e, 0x04, 0xa4, 0x5e, 0x02, 0x0a,
- 0x38, 0x56, 0x07, 0x09, 0xfc, 0x9a, 0x03, 0x66, 0xfa, 0x2b, 0x03, 0x23,
- 0x8e, 0x1a, 0x23, 0x01, 0x06, 0x29, 0x08, 0x5b, 0x44, 0x63, 0x9a, 0x60,
- 0x07, 0x07, 0x41, 0x2f, 0x36, 0x1a, 0x25, 0x77, 0x97, 0x4d, 0x4d, 0x4b,
- 0x01, 0x02, 0x3f, 0x40, 0x62, 0x4e, 0x2d, 0x1f, 0x00, 0x04, 0x00, 0x21,
- 0xff, 0xd7, 0x06, 0xcb, 0x05, 0xac, 0x00, 0x30, 0x00, 0x34, 0x00, 0x3f,
- 0x00, 0x42, 0x00, 0x00, 0x01, 0x22, 0x07, 0x06, 0x15, 0x23, 0x12, 0x37,
- 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07,
- 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x33, 0x16, 0x17, 0x16, 0x33, 0x32,
- 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x23, 0x35, 0x32, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x25, 0x33, 0x01, 0x23, 0x25, 0x21, 0x35,
- 0x01, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x23, 0x19, 0x01, 0x01, 0x01,
- 0x5a, 0x7e, 0x1d, 0x0b, 0x81, 0x06, 0xf4, 0x16, 0x17, 0xa7, 0x4a, 0x2c,
- 0x75, 0x91, 0x6d, 0x53, 0x7d, 0xc8, 0x49, 0x24, 0x7f, 0x07, 0x61, 0x22,
- 0x30, 0x7d, 0x2a, 0x11, 0x3f, 0x18, 0x1f, 0x1f, 0x69, 0x99, 0x2b, 0x1e,
- 0x4d, 0x22, 0x03, 0xb2, 0x77, 0xfc, 0x62, 0x76, 0x04, 0x27, 0xfe, 0x7f,
- 0x01, 0xa1, 0x5f, 0x89, 0x89, 0x7f, 0xfe, 0xf7, 0x05, 0x3f, 0x5d, 0x23,
- 0x36, 0x01, 0x0b, 0x16, 0x02, 0x65, 0x3c, 0x55, 0x78, 0x36, 0x31, 0x9c,
- 0x8d, 0x4b, 0x3a, 0x87, 0x41, 0x5b, 0x8b, 0x20, 0x0b, 0x56, 0x22, 0x2d,
- 0x51, 0x29, 0x10, 0x06, 0x04, 0x68, 0x26, 0x1b, 0x3c, 0x5a, 0x22, 0x0f,
- 0x6d, 0xfa, 0x2b, 0xf6, 0x79, 0x02, 0x20, 0xfd, 0xd3, 0x6c, 0xcd, 0x01,
- 0x39, 0x01, 0x5d, 0xfe, 0xa3, 0x00, 0xff, 0xff, 0x00, 0xc5, 0xfe, 0x43,
- 0x04, 0x39, 0x04, 0x31, 0x10, 0x0f, 0x00, 0x23, 0x04, 0xd7, 0x04, 0x31,
- 0xc0, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc6, 0x01, 0x58, 0x01, 0x98, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc5, 0x01, 0x75, 0x01, 0x98, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc4, 0x01, 0x60, 0x01, 0x98, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc8, 0x01, 0x66, 0x01, 0x81, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x07, 0x3b,
- 0x10, 0x27, 0x00, 0x6b, 0x01, 0x64, 0x01, 0x83, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc7, 0x01, 0x58, 0x01, 0x98, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x17, 0x00, 0x00, 0x07, 0x9a, 0x05, 0xd5,
- 0x00, 0x0f, 0x00, 0x13, 0x00, 0x00, 0x01, 0x21, 0x03, 0x23, 0x01, 0x21,
- 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x19, 0x01,
- 0x23, 0x01, 0x03, 0xbe, 0xfd, 0xda, 0xaf, 0xd2, 0x02, 0x64, 0x04, 0xfa,
- 0xfd, 0x08, 0x02, 0xd1, 0xfd, 0x2f, 0x03, 0x1d, 0xfc, 0x24, 0xcc, 0xfe,
- 0xe5, 0x01, 0xb6, 0xfe, 0x4a, 0x05, 0xd5, 0xa8, 0xfe, 0x23, 0xa8, 0xfe,
- 0x00, 0xa8, 0x02, 0x5e, 0x02, 0xcf, 0xfd, 0x31, 0x00, 0x01, 0x00, 0x62,
- 0xfe, 0x4a, 0x05, 0x6a, 0x05, 0xee, 0x00, 0x46, 0x00, 0x00, 0x25, 0x32,
- 0x37, 0x36, 0x37, 0x33, 0x02, 0x05, 0x06, 0x23, 0x07, 0x36, 0x33, 0x32,
- 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x37,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22,
- 0x07, 0x27, 0x37, 0x26, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, 0x34,
- 0x37, 0x12, 0x25, 0x36, 0x33, 0x20, 0x13, 0x16, 0x17, 0x23, 0x26, 0x27,
- 0x26, 0x23, 0x22, 0x07, 0x06, 0x11, 0x10, 0x17, 0x16, 0x03, 0x06, 0xdf,
- 0x66, 0x3f, 0x1c, 0xc4, 0x3f, 0xfe, 0x31, 0x29, 0x2b, 0x1a, 0x1a, 0x1f,
- 0x7a, 0x1f, 0x09, 0x65, 0x3e, 0x59, 0x53, 0x5d, 0x21, 0x2f, 0x2b, 0x68,
- 0x32, 0x2f, 0x43, 0x1e, 0x0d, 0x3c, 0x0f, 0x13, 0x1f, 0x21, 0x16, 0x3f,
- 0x9a, 0x4f, 0x21, 0x27, 0xb7, 0x49, 0x27, 0x65, 0x92, 0x01, 0x3a, 0x3a,
- 0x3f, 0x01, 0xa2, 0x7c, 0x15, 0x0d, 0xc3, 0x2d, 0xa3, 0x50, 0x71, 0xe0,
- 0x7e, 0x79, 0x91, 0x82, 0x77, 0x9d, 0x61, 0xac, 0xfd, 0xe0, 0x2c, 0x04,
- 0x44, 0x04, 0x54, 0x18, 0x1d, 0x6d, 0x32, 0x1f, 0x24, 0x0c, 0x15, 0x52,
- 0x30, 0x13, 0x2e, 0x15, 0x19, 0x3a, 0x0e, 0x04, 0x11, 0x0f, 0x8d, 0x16,
- 0x28, 0x11, 0x1b, 0x84, 0xfc, 0x86, 0x98, 0xfc, 0xc5, 0x01, 0x1d, 0x2e,
- 0x09, 0xfe, 0x9b, 0x3c, 0x47, 0xdd, 0x42, 0x21, 0xae, 0xa5, 0xfe, 0xe8,
- 0xfe, 0xd6, 0xa6, 0x94, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc6, 0x01, 0x7b, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x29, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc5, 0x01, 0x6d, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x29, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc4, 0x01, 0x73, 0x01, 0x96, 0x10, 0x06,
- 0x00, 0x29, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7,
- 0x07, 0x3b, 0x10, 0x27, 0x00, 0x6b, 0x01, 0x71, 0x01, 0x83, 0x10, 0x06,
- 0x00, 0x29, 0x00, 0x00, 0xff, 0xff, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x8d,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc6, 0xff, 0xd3, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x2d, 0x00, 0x00, 0xff, 0xff, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x8d,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc5, 0xff, 0xd5, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x2d, 0x00, 0x00, 0xff, 0xff, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x8d,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc4, 0xff, 0xd5, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x2d, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x3d,
- 0x07, 0x3b, 0x10, 0x27, 0x00, 0x6b, 0xff, 0xdf, 0x01, 0x83, 0x10, 0x06,
- 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x29, 0x00, 0x00, 0x05, 0x56,
- 0x05, 0xd5, 0x00, 0x0e, 0x00, 0x1d, 0x00, 0x00, 0x13, 0x23, 0x35, 0x33,
- 0x11, 0x21, 0x20, 0x17, 0x16, 0x11, 0x10, 0x07, 0x06, 0x29, 0x01, 0x13,
- 0x11, 0x21, 0x20, 0x13, 0x36, 0x35, 0x10, 0x27, 0x26, 0x23, 0x21, 0x11,
- 0x21, 0x15, 0xb6, 0x8d, 0x8d, 0x02, 0x42, 0x01, 0x19, 0xa2, 0xa3, 0xb0,
- 0xa1, 0xfe, 0xf3, 0xfd, 0xbe, 0xbf, 0x01, 0x62, 0x01, 0x37, 0x61, 0x29,
- 0xf2, 0x58, 0x77, 0xfe, 0x9e, 0x01, 0x5e, 0x02, 0xb6, 0x89, 0x02, 0x96,
- 0xc6, 0xc7, 0xfe, 0xa4, 0xfe, 0x93, 0xc9, 0xb6, 0x02, 0xb6, 0xfd, 0xf2,
- 0x01, 0x20, 0x7a, 0xaa, 0x01, 0xa0, 0x76, 0x2b, 0xfe, 0x12, 0x89, 0x00,
- 0xff, 0xff, 0x00, 0x9c, 0x00, 0x00, 0x05, 0x2b, 0x05, 0xd5, 0x10, 0x27,
- 0x00, 0xc8, 0x01, 0x98, 0x01, 0x81, 0x10, 0x06, 0x00, 0x32, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x05, 0xee, 0x10, 0x27,
- 0x00, 0xc6, 0x01, 0xcb, 0x01, 0x98, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x05, 0xee, 0x10, 0x27,
- 0x00, 0xc5, 0x01, 0xd5, 0x01, 0x98, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x05, 0xee, 0x10, 0x27,
- 0x00, 0xc4, 0x01, 0xd1, 0x01, 0x98, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x05, 0xee, 0x10, 0x27,
- 0x00, 0xc8, 0x01, 0xd1, 0x01, 0x81, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x07, 0x3b, 0x10, 0x27,
- 0x00, 0x6b, 0x01, 0xcf, 0x01, 0x83, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0xc3, 0x00, 0x46, 0x03, 0xe7, 0x03, 0x6a, 0x00, 0x0b,
- 0x00, 0x00, 0x01, 0x17, 0x09, 0x01, 0x07, 0x09, 0x01, 0x27, 0x09, 0x01,
- 0x37, 0x01, 0x03, 0x81, 0x64, 0xfe, 0xd5, 0x01, 0x2d, 0x66, 0xfe, 0xd3,
- 0xfe, 0xd5, 0x66, 0x01, 0x2d, 0xfe, 0xd5, 0x64, 0x01, 0x2b, 0x03, 0x6a,
- 0x66, 0xfe, 0xd5, 0xfe, 0xd3, 0x66, 0x01, 0x2d, 0xfe, 0xd5, 0x64, 0x01,
- 0x2d, 0x01, 0x2b, 0x64, 0xfe, 0xd7, 0x00, 0x03, 0x00, 0x3d, 0xff, 0xd1,
- 0x05, 0xf4, 0x06, 0x0a, 0x00, 0x1b, 0x00, 0x26, 0x00, 0x31, 0x00, 0x00,
- 0x3f, 0x01, 0x26, 0x11, 0x10, 0x37, 0x36, 0x25, 0x36, 0x33, 0x20, 0x17,
- 0x37, 0x17, 0x07, 0x16, 0x13, 0x16, 0x15, 0x10, 0x07, 0x06, 0x05, 0x06,
- 0x23, 0x20, 0x27, 0x07, 0x13, 0x01, 0x26, 0x23, 0x22, 0x07, 0x06, 0x03,
- 0x06, 0x15, 0x14, 0x09, 0x01, 0x16, 0x33, 0x32, 0x37, 0x36, 0x13, 0x36,
- 0x35, 0x34, 0x3d, 0xa6, 0x9b, 0xa8, 0x9e, 0x01, 0x05, 0x41, 0x45, 0x01,
- 0x17, 0xc0, 0xb2, 0x52, 0xb7, 0x92, 0x16, 0x04, 0xa8, 0x9e, 0xfe, 0xfb,
- 0x40, 0x45, 0xfe, 0xd9, 0xc7, 0x9e, 0xd7, 0x03, 0x13, 0x97, 0xc7, 0xe4,
- 0x90, 0x94, 0x0a, 0x01, 0x03, 0xb8, 0xfc, 0xe8, 0x97, 0xdc, 0xe2, 0x91,
- 0x93, 0x0b, 0x01, 0x27, 0xb6, 0xdb, 0x01, 0x29, 0x01, 0x3e, 0xd2, 0xc7,
- 0x2b, 0x0b, 0xa6, 0xc2, 0x49, 0xc7, 0xb7, 0xfe, 0xf1, 0x2b, 0x2c, 0xfe,
- 0xc2, 0xd2, 0xc6, 0x2b, 0x0b, 0xb8, 0xac, 0x01, 0x8b, 0x03, 0x5b, 0x83,
- 0x9b, 0x9e, 0xfe, 0xf8, 0x12, 0x12, 0xd4, 0x02, 0x62, 0xfc, 0xa1, 0x97,
- 0x9a, 0x9e, 0x01, 0x06, 0x13, 0x13, 0xea, 0x00, 0xff, 0xff, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc6, 0x01, 0x98,
- 0x01, 0x98, 0x10, 0x06, 0x00, 0x39, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc5, 0x01, 0x98,
- 0x01, 0x98, 0x10, 0x06, 0x00, 0x39, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc4, 0x01, 0x9e,
- 0x01, 0x96, 0x10, 0x06, 0x00, 0x39, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x07, 0x3b, 0x10, 0x27, 0x00, 0x6b, 0x01, 0x9e,
- 0x01, 0x83, 0x10, 0x06, 0x00, 0x39, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1b,
- 0x00, 0x00, 0x05, 0x4a, 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc5, 0x01, 0x6a,
- 0x01, 0x98, 0x10, 0x06, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x02, 0x00, 0xba,
- 0x00, 0x00, 0x04, 0xee, 0x05, 0xd5, 0x00, 0x0e, 0x00, 0x19, 0x00, 0x00,
- 0x01, 0x11, 0x23, 0x11, 0x33, 0x15, 0x21, 0x32, 0x17, 0x16, 0x15, 0x14,
- 0x07, 0x06, 0x23, 0x25, 0x21, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26,
- 0x23, 0x21, 0x01, 0x79, 0xbf, 0xbf, 0x01, 0xaa, 0xf0, 0x7b, 0x60, 0x77,
- 0x74, 0xb5, 0xfe, 0x2b, 0x01, 0x8d, 0xae, 0x47, 0x26, 0x77, 0x43, 0x61,
- 0xfe, 0x73, 0x01, 0x83, 0xfe, 0x7d, 0x05, 0xd5, 0xf6, 0x90, 0x71, 0xb1,
- 0xbd, 0x78, 0x75, 0xa8, 0x72, 0x3e, 0x56, 0x9e, 0x43, 0x25, 0x00, 0x01,
- 0x00, 0x89, 0xff, 0xe1, 0x04, 0x91, 0x05, 0xd3, 0x00, 0x31, 0x00, 0x00,
- 0x01, 0x20, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06,
- 0x15, 0x11, 0x23, 0x11, 0x34, 0x37, 0x36, 0x33, 0x20, 0x17, 0x16, 0x15,
- 0x14, 0x07, 0x06, 0x07, 0x16, 0x17, 0x16, 0x15, 0x10, 0x07, 0x06, 0x23,
- 0x22, 0x27, 0x35, 0x16, 0x33, 0x20, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26,
- 0x2b, 0x01, 0x02, 0x5a, 0x01, 0x0e, 0x29, 0x07, 0x71, 0x4e, 0x79, 0xd1,
- 0x39, 0x19, 0xb4, 0x8b, 0x7d, 0xd1, 0x01, 0x00, 0x85, 0x65, 0x97, 0x03,
- 0x0e, 0x71, 0x46, 0x36, 0xdf, 0x79, 0xac, 0x31, 0x3b, 0x2d, 0x2d, 0x01,
- 0x23, 0x30, 0x09, 0xec, 0x32, 0x3e, 0x21, 0x03, 0x6a, 0xac, 0x1c, 0x20,
- 0x7e, 0x3d, 0x2a, 0x87, 0x3c, 0x60, 0xfb, 0xec, 0x04, 0x42, 0xc2, 0x6d,
- 0x62, 0x7e, 0x60, 0x93, 0xbe, 0x66, 0x02, 0x09, 0x1f, 0x7a, 0x5e, 0x5d,
- 0xfe, 0xbf, 0x7b, 0x42, 0x0f, 0x99, 0x06, 0xda, 0x29, 0x30, 0xef, 0x27,
- 0x09, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc6, 0x00, 0xec, 0x00, 0x00, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc5, 0x00, 0xec, 0xff, 0xfe, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc4, 0x00, 0xe5, 0x00, 0x00, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc8, 0x00, 0xe7, 0xff, 0xe3, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x05, 0x9d,
- 0x10, 0x27, 0x00, 0x6b, 0x00, 0xe5, 0xff, 0xe5, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc7, 0x00, 0xdd, 0x00, 0x00, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x46, 0xff, 0xd1, 0x06, 0xc3, 0x04, 0x50,
- 0x00, 0x3c, 0x00, 0x4d, 0x00, 0x56, 0x00, 0x00, 0x01, 0x16, 0x17, 0x16,
- 0x33, 0x32, 0x37, 0x33, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x2f,
- 0x01, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36,
- 0x25, 0x36, 0x33, 0x36, 0x37, 0x36, 0x3d, 0x01, 0x34, 0x27, 0x26, 0x23,
- 0x22, 0x07, 0x06, 0x07, 0x23, 0x12, 0x25, 0x36, 0x33, 0x20, 0x17, 0x36,
- 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x16, 0x15, 0x01, 0x32, 0x37,
- 0x36, 0x37, 0x36, 0x3d, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14,
- 0x17, 0x16, 0x01, 0x21, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x03,
- 0xac, 0x05, 0xa7, 0x41, 0x4e, 0xd1, 0x4a, 0xac, 0x26, 0x9f, 0x6e, 0x96,
- 0xb7, 0x77, 0x24, 0x1a, 0x21, 0xa2, 0x97, 0x3d, 0x44, 0xb3, 0x5e, 0x47,
- 0x98, 0x70, 0x01, 0x02, 0x05, 0x05, 0x7e, 0x20, 0x14, 0xa4, 0x23, 0x2a,
- 0xb7, 0x31, 0x0d, 0x05, 0xac, 0x0a, 0x01, 0x20, 0x3a, 0x46, 0x01, 0x07,
- 0x5f, 0x51, 0x96, 0x3c, 0x3f, 0xc0, 0x83, 0x48, 0x26, 0x2b, 0xfb, 0x02,
- 0x9e, 0x6a, 0x36, 0x08, 0x01, 0x43, 0x9f, 0x94, 0x37, 0x67, 0x5b, 0x30,
- 0x02, 0x2d, 0x02, 0x5a, 0x63, 0x4f, 0x75, 0x93, 0x56, 0x41, 0x01, 0xdf,
- 0xfe, 0x52, 0x20, 0xd7, 0xcf, 0x62, 0x44, 0x65, 0x1f, 0x26, 0x37, 0xa8,
- 0x29, 0x10, 0x6e, 0x53, 0x7c, 0xbc, 0x50, 0x3b, 0x17, 0x01, 0x0b, 0x27,
- 0x18, 0x2e, 0x2d, 0x82, 0x19, 0x05, 0x73, 0x20, 0x2b, 0x01, 0x1e, 0x34,
- 0x0a, 0xa8, 0x72, 0x27, 0x0f, 0x79, 0x44, 0x5e, 0x73, 0xe3, 0xfe, 0x87,
- 0x6f, 0x38, 0x2d, 0x05, 0x03, 0xce, 0x1d, 0x17, 0x16, 0x18, 0x2e, 0x6e,
- 0x69, 0x2c, 0x17, 0x02, 0x04, 0xa2, 0x5c, 0x4a, 0x72, 0x55, 0x00, 0x01,
- 0x00, 0x3f, 0xfe, 0x4a, 0x03, 0xd1, 0x04, 0x50, 0x00, 0x3e, 0x00, 0x00,
- 0x05, 0x24, 0x03, 0x26, 0x35, 0x10, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16,
- 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17,
- 0x16, 0x33, 0x32, 0x13, 0x33, 0x06, 0x07, 0x06, 0x23, 0x07, 0x36, 0x33,
- 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27,
- 0x37, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23,
- 0x22, 0x07, 0x27, 0x01, 0xcd, 0xfe, 0xf2, 0x59, 0x27, 0x8b, 0x82, 0xd1,
- 0xf3, 0x6d, 0x3d, 0x0b, 0xac, 0x18, 0x83, 0x2c, 0x37, 0xa5, 0x4e, 0x36,
- 0x7a, 0x49, 0x6a, 0xda, 0x2c, 0xac, 0x0c, 0x8b, 0x72, 0xab, 0x1b, 0x1d,
- 0x1c, 0x77, 0x21, 0x0a, 0x67, 0x3d, 0x58, 0x4f, 0x53, 0x24, 0x3a, 0x2b,
- 0x69, 0x31, 0x2f, 0x42, 0x1f, 0x0e, 0x3d, 0x0f, 0x13, 0x20, 0x1f, 0x19,
- 0x2b, 0x32, 0x01, 0x05, 0x70, 0x8a, 0x01, 0x14, 0xa1, 0x95, 0xa5, 0x5c,
- 0x86, 0xa9, 0x30, 0x10, 0x9b, 0x6c, 0xa7, 0xf0, 0x69, 0x3e, 0x01, 0x04,
- 0xd3, 0x71, 0x5c, 0x44, 0x04, 0x51, 0x19, 0x1f, 0x6f, 0x31, 0x1e, 0x1e,
- 0x0c, 0x19, 0x54, 0x30, 0x13, 0x2e, 0x15, 0x19, 0x3a, 0x0e, 0x04, 0x11,
- 0x0f, 0x00, 0xff, 0xff, 0x00, 0x52, 0xff, 0xd1, 0x04, 0x1b, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc6, 0x00, 0xf2, 0x00, 0x00, 0x10, 0x06, 0x00, 0x49,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x52, 0xff, 0xd1, 0x04, 0x1b, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc5, 0x00, 0xf6, 0xff, 0xfe, 0x10, 0x06, 0x00, 0x49,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x52, 0xff, 0xd1, 0x04, 0x1b, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc4, 0x00, 0xfc, 0x00, 0x02, 0x10, 0x06, 0x00, 0x49,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x52, 0xff, 0xd1, 0x04, 0x1b, 0x05, 0x9d,
- 0x10, 0x27, 0x00, 0x6b, 0x00, 0xf0, 0xff, 0xe5, 0x10, 0x06, 0x00, 0x49,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x26, 0x00, 0xc6, 0xcb, 0xfc, 0x10, 0x06, 0x00, 0xc3, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x26,
- 0x00, 0xc5, 0xc9, 0xfe, 0x10, 0x06, 0x00, 0xc3, 0x00, 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x26, 0x00, 0xc4,
- 0xc9, 0x00, 0x10, 0x06, 0x00, 0xc3, 0x00, 0x00, 0xff, 0xff, 0x00, 0x06,
- 0x04, 0xca, 0x02, 0x27, 0x05, 0x9d, 0x10, 0x26, 0x00, 0x6b, 0xc9, 0xe5,
- 0x10, 0x06, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x02, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x05, 0xf2, 0x00, 0x24, 0x00, 0x34, 0x00, 0x00, 0x13, 0x10,
- 0x37, 0x36, 0x33, 0x32, 0x17, 0x26, 0x27, 0x26, 0x27, 0x07, 0x27, 0x37,
- 0x26, 0x27, 0x26, 0x27, 0x37, 0x16, 0x17, 0x16, 0x17, 0x37, 0x17, 0x07,
- 0x16, 0x17, 0x16, 0x11, 0x10, 0x07, 0x06, 0x23, 0x20, 0x27, 0x26, 0x01,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x27, 0x26, 0x4a, 0xc7, 0x6d, 0x8a, 0x33, 0x4e, 0x48, 0x64, 0x0b,
- 0x11, 0xc7, 0x4a, 0xae, 0x38, 0x64, 0x05, 0x07, 0x5a, 0x45, 0x5f, 0x19,
- 0x27, 0xc6, 0x52, 0xb8, 0x99, 0x57, 0xd0, 0xb7, 0x77, 0xb7, 0xfe, 0xf3,
- 0x7d, 0x5b, 0x01, 0xe5, 0x9f, 0x53, 0x41, 0x75, 0x4c, 0x72, 0x9d, 0x53,
- 0x43, 0x7e, 0x4a, 0x02, 0x10, 0x01, 0x5d, 0x90, 0x4f, 0x1b, 0x4a, 0x54,
- 0x09, 0x0f, 0x5c, 0x50, 0x52, 0x2b, 0x39, 0x03, 0x04, 0x5a, 0x1d, 0x3b,
- 0x10, 0x19, 0x5c, 0x4c, 0x54, 0x75, 0x6a, 0xfb, 0xfe, 0xbf, 0xfe, 0xb1,
- 0x92, 0x60, 0xc7, 0x91, 0x02, 0x89, 0x8a, 0x6d, 0xab, 0xea, 0x6e, 0x49,
- 0x86, 0x6c, 0xa9, 0xfd, 0x6c, 0x3f, 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00,
- 0x03, 0xe5, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc8, 0x00, 0xee, 0xff, 0xe3,
- 0x10, 0x06, 0x00, 0x52, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc6, 0x00, 0xdf, 0x00, 0x02,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc5, 0x00, 0xe1, 0x00, 0x00,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc4, 0x00, 0xe1, 0x00, 0x02,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc8, 0x00, 0xe1, 0xff, 0xe3,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x05, 0x9d, 0x10, 0x27, 0x00, 0x6b, 0x00, 0xdf, 0xff, 0xe5,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0x00, 0x03, 0x00, 0x66, 0x00, 0x00,
- 0x04, 0x46, 0x03, 0xc7, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x00,
- 0x01, 0x15, 0x21, 0x35, 0x01, 0x15, 0x23, 0x35, 0x13, 0x15, 0x23, 0x35,
- 0x04, 0x46, 0xfc, 0x20, 0x02, 0x5b, 0xd5, 0xd5, 0xd5, 0x02, 0x2b, 0x8f,
- 0x8f, 0xfe, 0xaa, 0xd5, 0xd5, 0x02, 0xf2, 0xd5, 0xd5, 0x00, 0x00, 0x03,
- 0x00, 0x25, 0xff, 0xc3, 0x04, 0x3b, 0x04, 0x50, 0x00, 0x17, 0x00, 0x20,
- 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x16, 0x15, 0x10, 0x07, 0x06, 0x23,
- 0x22, 0x27, 0x07, 0x27, 0x37, 0x26, 0x35, 0x10, 0x37, 0x36, 0x33, 0x32,
- 0x17, 0x16, 0x17, 0x37, 0x03, 0x01, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x09, 0x01, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14,
- 0x04, 0x3b, 0x81, 0x5a, 0xa1, 0x7c, 0xc6, 0xd2, 0x7c, 0x7d, 0x41, 0x87,
- 0x62, 0xa1, 0x7d, 0xc7, 0xc6, 0x81, 0x07, 0x06, 0x77, 0xbd, 0xfe, 0x19,
- 0x58, 0x81, 0xa3, 0x52, 0x3e, 0xfd, 0xc5, 0x01, 0xe9, 0x49, 0x79, 0x0f,
- 0x10, 0x9f, 0x53, 0x41, 0x04, 0x17, 0x92, 0x94, 0xe1, 0xfe, 0xce, 0x98,
- 0x75, 0x7f, 0x8d, 0x39, 0x97, 0x92, 0xeb, 0x01, 0x31, 0x98, 0x77, 0x78,
- 0x07, 0x06, 0x85, 0xfe, 0xa8, 0xfd, 0xd9, 0x62, 0x8e, 0x6b, 0xa8, 0x89,
- 0xfe, 0x88, 0x02, 0x27, 0x5c, 0x0c, 0x02, 0x8a, 0x6d, 0xab, 0x8c, 0x00,
- 0xff, 0xff, 0x00, 0x85, 0xff, 0xd1, 0x03, 0xdb, 0x04, 0x31, 0x10, 0x27,
- 0x00, 0xc6, 0x00, 0xdd, 0xff, 0xfe, 0x10, 0x06, 0x00, 0x59, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x85, 0xff, 0xd1, 0x03, 0xdb, 0x04, 0x31, 0x10, 0x27,
- 0x00, 0xc5, 0x00, 0xdd, 0x00, 0x00, 0x10, 0x06, 0x00, 0x59, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x85, 0xff, 0xd1, 0x03, 0xdb, 0x04, 0x31, 0x10, 0x27,
- 0x00, 0xc4, 0x00, 0xe3, 0x00, 0x02, 0x10, 0x06, 0x00, 0x59, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x85, 0xff, 0xd1, 0x03, 0xdb, 0x05, 0x9d, 0x10, 0x27,
- 0x00, 0x6b, 0x00, 0xe1, 0xff, 0xe5, 0x10, 0x06, 0x00, 0x59, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x29, 0xfe, 0x42, 0x03, 0xd3, 0x04, 0x31, 0x10, 0x27,
- 0x00, 0xc5, 0x00, 0xa6, 0xff, 0xfe, 0x10, 0x06, 0x00, 0x5d, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x6f, 0xfe, 0x42, 0x04, 0x2d, 0x05, 0xb6, 0x00, 0x14,
- 0x00, 0x24, 0x00, 0x00, 0x13, 0x11, 0x33, 0x11, 0x36, 0x37, 0x36, 0x33,
- 0x32, 0x17, 0x16, 0x11, 0x10, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27,
- 0x11, 0x01, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x6f, 0xaa, 0x59, 0x9f, 0x27, 0x2a, 0xd0,
- 0x7c, 0x7f, 0x88, 0x7c, 0xc7, 0xa9, 0x72, 0x17, 0x17, 0x01, 0x2b, 0x91,
- 0x53, 0x47, 0x6b, 0x4d, 0x73, 0x91, 0x57, 0x4f, 0x6d, 0x51, 0xfe, 0x42,
- 0x07, 0x74, 0xfd, 0xf6, 0x7f, 0x1e, 0x07, 0x9d, 0xa0, 0xfe, 0xf3, 0xfe,
- 0xf5, 0x9c, 0x8e, 0x6d, 0x17, 0x1c, 0xfd, 0xd1, 0x05, 0x6e, 0x81, 0x6f,
- 0xb0, 0xdb, 0x72, 0x52, 0x7a, 0x70, 0xaf, 0xdc, 0x73, 0x57, 0xff, 0xff,
- 0x00, 0x29, 0xfe, 0x42, 0x03, 0xd3, 0x05, 0x9d, 0x10, 0x27, 0x00, 0x6b,
- 0x00, 0xb0, 0xff, 0xe5, 0x10, 0x06, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x01, 0x9e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x9c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00, 0xb7, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x4a, 0x00, 0xcc, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x12, 0x01, 0x3e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x34, 0x01, 0x5c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x01, 0xad, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x8c, 0x01, 0xc8, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x48, 0x02, 0x9d, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x58, 0x03, 0x0c, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x68, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0xae, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0xc5, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x25, 0x01, 0x18, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x01, 0x52, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x1a, 0x01, 0x92, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x01, 0xbf, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x46, 0x02, 0x56, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x24, 0x02, 0xe7, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x2c, 0x03, 0x66, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x01, 0x00, 0x10, 0x00, 0x9c, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x02, 0x00, 0x0c, 0x00, 0xb7, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x4a, 0x00, 0xcc, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x04, 0x00, 0x12, 0x01, 0x3e, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x34, 0x01, 0x5c, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x06, 0x00, 0x10, 0x01, 0xad, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x0d, 0x00, 0x8c, 0x01, 0xc8, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x0e, 0x00, 0x48, 0x02, 0x9d, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x13, 0x00, 0x58, 0x03, 0x0c, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x24, 0x00, 0x02, 0x00, 0x0e, 0x03, 0x93, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x24, 0x00, 0x0d, 0x00, 0x86, 0x03, 0xa3, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x24, 0x00, 0x0e, 0x00, 0x48, 0x04, 0x2b, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x24, 0x00, 0x13, 0x00, 0x54, 0x04, 0x75, 0x00, 0x43,
- 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x66,
- 0x00, 0x74, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32,
- 0x00, 0x2c, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x33,
- 0x00, 0x2c, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35,
- 0x00, 0x20, 0x00, 0x46, 0x00, 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x20,
- 0x00, 0x53, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x74, 0x00, 0x77, 0x00, 0x61,
- 0x00, 0x72, 0x00, 0x65, 0x00, 0x20, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x75,
- 0x00, 0x6e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f,
- 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x00, 0x43, 0x6f, 0x70, 0x79, 0x6c, 0x65,
- 0x66, 0x74, 0x20, 0x32, 0x30, 0x30, 0x32, 0x2c, 0x20, 0x32, 0x30, 0x30,
- 0x33, 0x2c, 0x20, 0x32, 0x30, 0x30, 0x35, 0x20, 0x46, 0x72, 0x65, 0x65,
- 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f,
- 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x00, 0x00, 0x46,
- 0x00, 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e,
- 0x00, 0x73, 0x00, 0x00, 0x46, 0x72, 0x65, 0x65, 0x53, 0x61, 0x6e, 0x73,
- 0x00, 0x00, 0x4d, 0x00, 0x65, 0x00, 0x64, 0x00, 0x69, 0x00, 0x75, 0x00,
- 0x6d, 0x00, 0x00, 0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x00, 0x00, 0x46,
- 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x72,
- 0x00, 0x67, 0x00, 0x65, 0x00, 0x20, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30,
- 0x00, 0x20, 0x00, 0x3a, 0x00, 0x20, 0x00, 0x46, 0x00, 0x72, 0x00, 0x65,
- 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73,
- 0x00, 0x20, 0x00, 0x3a, 0x00, 0x20, 0x00, 0x32, 0x00, 0x36, 0x00, 0x2d,
- 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x36,
- 0x00, 0x00, 0x46, 0x6f, 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x67, 0x65, 0x20,
- 0x31, 0x2e, 0x30, 0x20, 0x3a, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53,
- 0x61, 0x6e, 0x73, 0x20, 0x3a, 0x20, 0x32, 0x36, 0x2d, 0x31, 0x2d, 0x32,
- 0x30, 0x30, 0x36, 0x00, 0x00, 0x46, 0x00, 0x72, 0x00, 0x65, 0x00, 0x65,
- 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x00,
- 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x61, 0x6e, 0x73, 0x00, 0x00, 0x56,
- 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e,
- 0x00, 0x20, 0x00, 0x24, 0x00, 0x52, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69,
- 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x3a, 0x00, 0x20,
- 0x00, 0x31, 0x00, 0x2e, 0x00, 0x37, 0x00, 0x36, 0x00, 0x20, 0x00, 0x24,
- 0x00, 0x20, 0x00, 0x00, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
- 0x24, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31,
- 0x2e, 0x37, 0x36, 0x20, 0x24, 0x20, 0x00, 0x00, 0x46, 0x00, 0x72, 0x00,
- 0x65, 0x00, 0x65, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00,
- 0x00, 0x46, 0x72, 0x65, 0x65, 0x53, 0x61, 0x6e, 0x73, 0x00, 0x00, 0x54,
- 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65,
- 0x00, 0x20, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x20, 0x00, 0x74, 0x00, 0x68,
- 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6e,
- 0x00, 0x74, 0x00, 0x20, 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x67,
- 0x00, 0x72, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64,
- 0x00, 0x20, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6a, 0x00, 0x65,
- 0x00, 0x63, 0x00, 0x74, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20,
- 0x00, 0x47, 0x00, 0x4e, 0x00, 0x55, 0x00, 0x20, 0x00, 0x47, 0x00, 0x65,
- 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20,
- 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x63,
- 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e,
- 0x00, 0x73, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x00, 0x54, 0x68, 0x65, 0x20,
- 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
- 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e,
- 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
- 0x74, 0x6f, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72,
- 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69,
- 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x00, 0x00, 0x68, 0x00, 0x74, 0x00,
- 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x77, 0x00,
- 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x67, 0x00, 0x6e, 0x00, 0x75, 0x00,
- 0x2e, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00, 0x63, 0x00,
- 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x66, 0x00,
- 0x74, 0x00, 0x2f, 0x00, 0x67, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x2e, 0x00,
- 0x68, 0x00, 0x74, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x00, 0x68, 0x74, 0x74,
- 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6e, 0x75, 0x2e,
- 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x6f, 0x70, 0x79, 0x6c, 0x65, 0x66, 0x74,
- 0x2f, 0x67, 0x70, 0x6c, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x00, 0x00, 0x54,
- 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x71, 0x00, 0x75, 0x00, 0x69,
- 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20, 0x00, 0x62, 0x00, 0x72, 0x00, 0x6f,
- 0x00, 0x77, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x78,
- 0x00, 0x20, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x73,
- 0x00, 0x20, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20,
- 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x61,
- 0x00, 0x7a, 0x00, 0x79, 0x00, 0x20, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x67,
- 0x00, 0x2e, 0x00, 0x00, 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63,
- 0x6b, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x20, 0x66, 0x6f, 0x78, 0x20,
- 0x6a, 0x75, 0x6d, 0x70, 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74,
- 0x68, 0x65, 0x20, 0x6c, 0x61, 0x7a, 0x79, 0x20, 0x64, 0x6f, 0x67, 0x2e,
- 0x00, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x64, 0x00,
- 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x76, 0x00,
- 0x6f, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x61, 0x00,
- 0x20, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x20, 0x00, 0x75, 0x00, 0x70, 0x00,
- 0x6f, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x61, 0x00, 0x20, 0x00,
- 0x76, 0x00, 0x20, 0x00, 0x73, 0x00, 0x6b, 0x00, 0x6c, 0x00, 0x61, 0x00,
- 0x64, 0x00, 0x75, 0x00, 0x20, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x6c, 0x00,
- 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x6f, 0x00,
- 0x20, 0x00, 0x47, 0x00, 0x4e, 0x00, 0x55, 0x00, 0x20, 0x00, 0x47, 0x00,
- 0x65, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x00,
- 0x20, 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x69, 0x00,
- 0x63, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00,
- 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x68, 0x00,
- 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00,
- 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x67, 0x00, 0x6e, 0x00,
- 0x75, 0x00, 0x2e, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00,
- 0x63, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x6c, 0x00, 0x65, 0x00,
- 0x66, 0x00, 0x74, 0x00, 0x2f, 0x00, 0x67, 0x00, 0x70, 0x00, 0x6c, 0x00,
- 0x2e, 0x00, 0x68, 0x00, 0x74, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x00, 0x01,
- 0x60, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x66, 0x00, 0x20, 0x00,
- 0x62, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00,
- 0x76, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x73, 0x00,
- 0x70, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x6b, 0x00, 0x75, 0x00,
- 0x68, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x64, 0x00, 0x6f, 0x00,
- 0x6d, 0x00, 0x61, 0x01, 0x0d, 0x00, 0x65, 0x00, 0x20, 0x01, 0x7e, 0x00,
- 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x65, 0x00, 0x2e, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfe, 0xcb, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xc9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x02, 0x00, 0x03,
- 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09,
- 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x0e, 0x00, 0x0f,
- 0x00, 0x10, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14, 0x00, 0x15,
- 0x00, 0x16, 0x00, 0x17, 0x00, 0x18, 0x00, 0x19, 0x00, 0x1a, 0x00, 0x1b,
- 0x00, 0x1c, 0x00, 0x1d, 0x00, 0x1e, 0x00, 0x1f, 0x00, 0x20, 0x00, 0x21,
- 0x00, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27,
- 0x00, 0x28, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x2d,
- 0x00, 0x2e, 0x00, 0x2f, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33,
- 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39,
- 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, 0x00, 0x3f,
- 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45,
- 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x4b,
- 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x50, 0x00, 0x51,
- 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57,
- 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d,
- 0x00, 0x5e, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0xac, 0x00, 0xa3,
- 0x00, 0x84, 0x00, 0x85, 0x00, 0xbd, 0x00, 0x96, 0x00, 0xe8, 0x00, 0x86,
- 0x00, 0x8e, 0x00, 0x8b, 0x00, 0x9d, 0x00, 0xa9, 0x00, 0xa4, 0x01, 0x03,
- 0x00, 0x8a, 0x00, 0xda, 0x00, 0x83, 0x00, 0x93, 0x00, 0xf2, 0x00, 0xf3,
- 0x00, 0x8d, 0x00, 0x97, 0x00, 0x88, 0x00, 0xc3, 0x00, 0xde, 0x00, 0xf1,
- 0x00, 0x9e, 0x00, 0xaa, 0x00, 0xf5, 0x00, 0xf4, 0x00, 0xf6, 0x00, 0xa2,
- 0x00, 0xad, 0x00, 0xc9, 0x00, 0xc7, 0x00, 0xae, 0x00, 0x62, 0x00, 0x63,
- 0x00, 0x90, 0x00, 0x64, 0x00, 0xcb, 0x00, 0x65, 0x00, 0xc8, 0x00, 0xca,
- 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xe9, 0x00, 0x66,
- 0x00, 0xd3, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xaf, 0x00, 0x67, 0x00, 0xf0,
- 0x00, 0x91, 0x00, 0xd6, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0x68, 0x00, 0xeb,
- 0x00, 0xed, 0x00, 0x89, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x6d,
- 0x00, 0x6c, 0x00, 0x6e, 0x00, 0xa0, 0x00, 0x6f, 0x00, 0x71, 0x00, 0x70,
- 0x00, 0x72, 0x00, 0x73, 0x00, 0x75, 0x00, 0x74, 0x00, 0x76, 0x00, 0x77,
- 0x00, 0xea, 0x00, 0x78, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x7b, 0x00, 0x7d,
- 0x00, 0x7c, 0x00, 0xb8, 0x00, 0xa1, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x80,
- 0x00, 0x81, 0x00, 0xec, 0x00, 0xee, 0x00, 0xba, 0x00, 0xd7, 0x00, 0xd8,
- 0x01, 0x04, 0x01, 0x05, 0x00, 0xdd, 0x00, 0xd9, 0x06, 0x67, 0x6c, 0x79,
- 0x70, 0x68, 0x33, 0x0a, 0x73, 0x6f, 0x66, 0x74, 0x68, 0x79, 0x70, 0x68,
- 0x65, 0x6e, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x32, 0x43, 0x41, 0x07, 0x75,
- 0x6e, 0x69, 0x30, 0x32, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0xff, 0xff, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
- 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6a,
- 0x00, 0x01, 0x00, 0x6b, 0x00, 0x6b, 0x00, 0x03, 0x00, 0x6c, 0x00, 0x02,
- 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x8e, 0x00, 0x9c, 0x00, 0x08,
- 0x44, 0x46, 0x4c, 0x54, 0x00, 0x32, 0x61, 0x72, 0x6d, 0x6e, 0x00, 0x3c,
- 0x62, 0x65, 0x6e, 0x67, 0x00, 0x46, 0x64, 0x65, 0x76, 0x61, 0x00, 0x50,
- 0x67, 0x75, 0x6a, 0x72, 0x00, 0x5a, 0x67, 0x75, 0x72, 0x75, 0x00, 0x64,
- 0x68, 0x65, 0x62, 0x72, 0x00, 0x6e, 0x6c, 0x61, 0x74, 0x6e, 0x00, 0x78,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
- 0x63, 0x63, 0x6d, 0x70, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, 0x00, 0x02,
- 0x00, 0x12, 0x00, 0x1a, 0x00, 0x22, 0x00, 0x22, 0x00, 0x03, 0x00, 0x00,
- 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x4d, 0x00, 0x4e,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
- 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x01, 0x00, 0x06, 0x00, 0x76, 0x00, 0x01, 0x00, 0x01, 0x00, 0x4d,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x90, 0x00, 0xaa, 0x00, 0x08,
- 0x44, 0x46, 0x4c, 0x54, 0x00, 0x32, 0x61, 0x72, 0x6d, 0x6e, 0x00, 0x3e,
- 0x62, 0x65, 0x6e, 0x67, 0x00, 0x48, 0x64, 0x65, 0x76, 0x61, 0x00, 0x52,
- 0x67, 0x75, 0x6a, 0x72, 0x00, 0x5c, 0x67, 0x75, 0x72, 0x75, 0x00, 0x66,
- 0x68, 0x65, 0x62, 0x72, 0x00, 0x70, 0x6c, 0x61, 0x74, 0x6e, 0x00, 0x7a,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x01,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x02, 0x6b, 0x65, 0x72, 0x6e, 0x00, 0x0e, 0x6b, 0x65, 0x72, 0x6e,
- 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8e,
- 0x00, 0x01, 0x00, 0x7a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x12,
- 0x00, 0x20, 0x00, 0x46, 0x00, 0x54, 0x00, 0x03, 0xff, 0xff, 0xff, 0x33,
- 0xff, 0xff, 0xff, 0xac, 0xff, 0xff, 0xff, 0x9a, 0x00, 0x09, 0x00, 0x25,
- 0xff, 0xf2, 0x00, 0x38, 0xff, 0x5c, 0x00, 0x3a, 0xff, 0xa2, 0x00, 0x3b,
- 0xff, 0xd9, 0x00, 0x3d, 0xff, 0x44, 0x00, 0x84, 0xff, 0xf2, 0x00, 0x87,
- 0xff, 0xf2, 0x00, 0x88, 0xff, 0xf2, 0x00, 0x89, 0xff, 0xe9, 0x00, 0x03,
- 0xff, 0xff, 0xff, 0x31, 0xff, 0xff, 0xff, 0xac, 0xff, 0xff, 0xff, 0x98,
- 0x00, 0x09, 0x00, 0x25, 0xff, 0x9a, 0x00, 0x38, 0xfe, 0xfe, 0x00, 0x3a,
- 0xff, 0x42, 0x00, 0x3b, 0xff, 0x79, 0x00, 0x3d, 0xfe, 0xf0, 0x00, 0x84,
- 0xff, 0x9a, 0x00, 0x87, 0xff, 0x9a, 0x00, 0x88, 0xff, 0x9a, 0x00, 0x89,
- 0xff, 0x91, 0x00, 0x01, 0x00, 0x04, 0x00, 0x10, 0x00, 0x11, 0x00, 0x12,
- 0x00, 0x7e, 0x00, 0x01, 0x0e, 0x92, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48,
- 0x00, 0x9a, 0x01, 0x34, 0x01, 0x7a, 0x01, 0xa4, 0x01, 0xda, 0x02, 0x50,
- 0x02, 0x82, 0x02, 0x94, 0x02, 0xe6, 0x03, 0x5c, 0x03, 0xae, 0x03, 0xd8,
- 0x04, 0x2e, 0x04, 0xa4, 0x04, 0xce, 0x05, 0x8c, 0x05, 0xc2, 0x06, 0x5c,
- 0x06, 0xee, 0x07, 0x18, 0x07, 0xaa, 0x07, 0xb4, 0x07, 0xca, 0x07, 0xd8,
- 0x07, 0xe2, 0x07, 0xfc, 0x08, 0x42, 0x08, 0x5c, 0x08, 0x66, 0x08, 0x70,
- 0x08, 0xae, 0x08, 0xb4, 0x08, 0xc6, 0x08, 0xe0, 0x08, 0xfe, 0x09, 0x08,
- 0x09, 0x12, 0x09, 0xc0, 0x09, 0xca, 0x0a, 0x08, 0x0a, 0x0e, 0x0a, 0x78,
- 0x0a, 0xde, 0x0a, 0xf8, 0x0b, 0x62, 0x0b, 0x90, 0x0c, 0x02, 0x0c, 0x30,
- 0x0c, 0x5e, 0x0c, 0xd0, 0x0d, 0x46, 0x0d, 0x4c, 0x0d, 0x5a, 0x0d, 0x70,
- 0x0d, 0x7e, 0x0d, 0x8c, 0x0d, 0xa6, 0x0d, 0xac, 0x0d, 0xb2, 0x0d, 0xd0,
- 0x0d, 0xd6, 0x0d, 0xf8, 0x0e, 0x06, 0x0e, 0x14, 0x0e, 0x22, 0x0e, 0x30,
- 0x0e, 0x3e, 0x0e, 0x4c, 0x0e, 0x5a, 0x0e, 0x68, 0x0e, 0x76, 0x0e, 0x7c,
- 0x00, 0x26, 0xff, 0xff, 0xff, 0xae, 0xff, 0xff, 0xff, 0x8d, 0xff, 0xff,
- 0xff, 0x7b, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xb6, 0x00, 0x10,
- 0x00, 0x0a, 0x00, 0x11, 0xff, 0xfa, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x27,
- 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc, 0x00, 0x35,
- 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4, 0x00, 0x3a,
- 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35, 0x00, 0x45,
- 0xff, 0xf8, 0x00, 0x46, 0x00, 0x08, 0x00, 0x47, 0xff, 0xe9, 0x00, 0x48,
- 0xff, 0xf0, 0x00, 0x49, 0xff, 0xdf, 0x00, 0x4b, 0xff, 0xec, 0x00, 0x53,
- 0xff, 0xe5, 0x00, 0x55, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xdf, 0x00, 0x59,
- 0xff, 0xe7, 0x00, 0x5a, 0xff, 0xc1, 0x00, 0x5b, 0xff, 0xd5, 0x00, 0x5d,
- 0xff, 0xba, 0x00, 0x6e, 0xff, 0xa6, 0x00, 0x8a, 0xff, 0xb6, 0x00, 0x99,
- 0xff, 0xbc, 0x00, 0x9c, 0xff, 0xb4, 0x00, 0x9d, 0xff, 0xb4, 0x00, 0x9e,
- 0xff, 0xb4, 0x00, 0x9f, 0xff, 0xb4, 0x00, 0xaa, 0xff, 0xec, 0x00, 0x11,
- 0xff, 0xff, 0xff, 0xf6, 0x00, 0x25, 0xff, 0xd5, 0x00, 0x33, 0xff, 0xf2,
- 0x00, 0x3a, 0xff, 0xac, 0x00, 0x3b, 0xff, 0xcd, 0x00, 0x3d, 0xff, 0xa6,
- 0x00, 0x84, 0xff, 0xd5, 0x00, 0x85, 0xff, 0xd5, 0x00, 0x86, 0xff, 0xd5,
- 0x00, 0x87, 0xff, 0xd5, 0x00, 0x88, 0xff, 0xd5, 0x00, 0x89, 0xff, 0xd5,
- 0x00, 0x95, 0xff, 0xf2, 0x00, 0x96, 0xff, 0xf2, 0x00, 0x97, 0xff, 0xf2,
- 0x00, 0x99, 0xff, 0xf2, 0x00, 0x9b, 0xff, 0xfe, 0x00, 0x0a, 0x00, 0x25,
- 0xff, 0xbe, 0x00, 0x2c, 0xff, 0xe7, 0x00, 0x2f, 0xff, 0xec, 0x00, 0x33,
- 0xff, 0xf0, 0x00, 0x84, 0xff, 0xbe, 0x00, 0x87, 0xff, 0xbe, 0x00, 0x88,
- 0xff, 0xbe, 0x00, 0x89, 0xff, 0xbc, 0x00, 0x96, 0xff, 0xf0, 0x00, 0x99,
- 0xff, 0xf0, 0x00, 0x0d, 0x00, 0x25, 0xff, 0xaa, 0x00, 0x2e, 0xff, 0xf6,
- 0x00, 0x38, 0xff, 0xa4, 0x00, 0x3a, 0xff, 0x98, 0x00, 0x3b, 0xff, 0xc5,
- 0x00, 0x3c, 0xff, 0x93, 0x00, 0x3d, 0xff, 0x7f, 0x00, 0x83, 0xff, 0xaa,
- 0x00, 0x84, 0xff, 0xaa, 0x00, 0x85, 0xff, 0xaa, 0x00, 0x86, 0xff, 0xaa,
- 0x00, 0x87, 0xff, 0xaa, 0x00, 0x88, 0xff, 0xaa, 0x00, 0x1d, 0xff, 0xff,
- 0xff, 0xd1, 0x00, 0x10, 0xff, 0x23, 0x00, 0x11, 0xff, 0xe3, 0x00, 0x12,
- 0xff, 0x23, 0x00, 0x25, 0xff, 0x73, 0x00, 0x2e, 0xff, 0x98, 0x00, 0x33,
- 0xff, 0xd3, 0x00, 0x45, 0xff, 0xbc, 0x00, 0x49, 0xff, 0xcf, 0x00, 0x4d,
- 0xff, 0xec, 0x00, 0x4e, 0xff, 0xe7, 0x00, 0x53, 0xff, 0xd5, 0x00, 0x56,
- 0xff, 0xb8, 0x00, 0x59, 0xff, 0xbc, 0x00, 0x83, 0xff, 0x73, 0x00, 0x84,
- 0xff, 0x73, 0x00, 0x85, 0xff, 0x73, 0x00, 0x86, 0xff, 0x73, 0x00, 0x87,
- 0xff, 0x73, 0x00, 0x88, 0xff, 0x73, 0x00, 0x99, 0xff, 0xd3, 0x00, 0xa4,
- 0xff, 0xbc, 0x00, 0xa7, 0xff, 0xbc, 0x00, 0xa8, 0xff, 0xbc, 0x00, 0xa9,
- 0xff, 0xc5, 0x00, 0xac, 0xff, 0xcf, 0x00, 0xb6, 0xff, 0xd5, 0x00, 0xb9,
- 0xff, 0xd5, 0x00, 0xbb, 0xff, 0xd5, 0x00, 0x0c, 0x00, 0x25, 0xff, 0xf4,
- 0x00, 0x38, 0xff, 0xa6, 0x00, 0x3a, 0xff, 0x9a, 0x00, 0x3b, 0xff, 0xc7,
- 0x00, 0x3d, 0xff, 0x81, 0x00, 0x83, 0xff, 0xf4, 0x00, 0x84, 0xff, 0xf4,
- 0x00, 0x85, 0xff, 0xf4, 0x00, 0x86, 0xff, 0xf4, 0x00, 0x87, 0xff, 0xf4,
- 0x00, 0x88, 0xff, 0xf4, 0x00, 0x89, 0xff, 0xfa, 0x00, 0x04, 0x00, 0x25,
- 0xff, 0xbe, 0x00, 0x87, 0xff, 0xbe, 0x00, 0x88, 0xff, 0xbe, 0x00, 0x89,
- 0xff, 0xc1, 0x00, 0x14, 0xff, 0xff, 0xff, 0xa4, 0x00, 0x11, 0xff, 0xa0,
- 0x00, 0x27, 0xff, 0x98, 0x00, 0x2b, 0xff, 0x98, 0x00, 0x33, 0xff, 0x9e,
- 0x00, 0x37, 0xff, 0xb2, 0x00, 0x38, 0x00, 0x29, 0x00, 0x45, 0xff, 0xe9,
- 0x00, 0x49, 0xff, 0xbe, 0x00, 0x53, 0xff, 0xc5, 0x00, 0x59, 0xff, 0xd9,
- 0x00, 0x5d, 0xff, 0x81, 0x00, 0x96, 0xff, 0x9e, 0x00, 0x99, 0xff, 0x9e,
- 0x00, 0xa7, 0xff, 0xe9, 0x00, 0xa8, 0xff, 0xe9, 0x00, 0xa9, 0xff, 0xf2,
- 0x00, 0xb6, 0xff, 0xc5, 0x00, 0xb9, 0xff, 0xc5, 0x00, 0xbf, 0xff, 0xd9,
- 0x00, 0x1d, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0xfe, 0xcf, 0xff, 0xff,
- 0xff, 0xd9, 0xff, 0xff, 0xff, 0xac, 0x00, 0x11, 0xff, 0x00, 0x00, 0x25,
- 0x00, 0x23, 0x00, 0x27, 0xff, 0xac, 0x00, 0x2b, 0xff, 0xaa, 0x00, 0x33,
- 0xff, 0xac, 0x00, 0x37, 0xff, 0xd9, 0x00, 0x38, 0xff, 0x29, 0x00, 0x39,
- 0xff, 0xb8, 0x00, 0x3a, 0xff, 0x29, 0x00, 0x3b, 0xff, 0x75, 0x00, 0x3d,
- 0xff, 0x08, 0x00, 0x59, 0xff, 0xf2, 0x00, 0x5d, 0xff, 0x8d, 0x00, 0x84,
- 0x00, 0x23, 0x00, 0x87, 0x00, 0x23, 0x00, 0x88, 0x00, 0x23, 0x00, 0x89,
- 0x00, 0x29, 0x00, 0x8a, 0xff, 0xb4, 0x00, 0x95, 0xff, 0xac, 0x00, 0x96,
- 0xff, 0xac, 0x00, 0x97, 0xff, 0xac, 0x00, 0x98, 0xff, 0xac, 0x00, 0x99,
- 0xff, 0xac, 0x00, 0x9f, 0xff, 0xb8, 0x00, 0xbf, 0xff, 0xf2, 0x00, 0x14,
- 0xff, 0xff, 0xff, 0xfa, 0x00, 0x10, 0xff, 0xf2, 0x00, 0x12, 0xff, 0xf2,
- 0x00, 0x25, 0xff, 0xee, 0x00, 0x27, 0xff, 0xfa, 0x00, 0x2b, 0xff, 0xfc,
- 0x00, 0x45, 0xff, 0xf6, 0x00, 0x53, 0x00, 0x04, 0x00, 0x84, 0xff, 0xee,
- 0x00, 0x87, 0xff, 0xee, 0x00, 0x88, 0xff, 0xee, 0x00, 0x89, 0xff, 0xf4,
- 0x00, 0x8a, 0xff, 0xfa, 0x00, 0xa4, 0xff, 0xf6, 0x00, 0xa7, 0xff, 0xf6,
- 0x00, 0xa8, 0xff, 0xf6, 0x00, 0xa9, 0xff, 0xfc, 0x00, 0xb6, 0x00, 0x04,
- 0x00, 0xb9, 0x00, 0x04, 0x00, 0xbb, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x25,
- 0xff, 0xb8, 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3b,
- 0xff, 0xd1, 0x00, 0x3c, 0xff, 0xa2, 0x00, 0x3d, 0xff, 0x87, 0x00, 0x84,
- 0xff, 0xb8, 0x00, 0x87, 0xff, 0xb8, 0x00, 0x88, 0xff, 0xb8, 0x00, 0x89,
- 0xff, 0xb0, 0x00, 0x15, 0xff, 0xff, 0xff, 0xc7, 0x00, 0x10, 0xfe, 0xec,
- 0x00, 0x11, 0xff, 0xae, 0x00, 0x12, 0xfe, 0xec, 0x00, 0x25, 0xff, 0x60,
- 0x00, 0x2e, 0xff, 0x60, 0x00, 0x45, 0xff, 0xc7, 0x00, 0x49, 0xff, 0xc1,
- 0x00, 0x53, 0xff, 0xc9, 0x00, 0x84, 0xff, 0x60, 0x00, 0x87, 0xff, 0x60,
- 0x00, 0x88, 0xff, 0x60, 0x00, 0x89, 0xff, 0x50, 0x00, 0xa4, 0xff, 0xc7,
- 0x00, 0xa7, 0xff, 0xc7, 0x00, 0xa8, 0xff, 0xc7, 0x00, 0xa9, 0xff, 0xcf,
- 0x00, 0xac, 0xff, 0xc1, 0x00, 0xb6, 0xff, 0xc9, 0x00, 0xb9, 0xff, 0xc9,
- 0x00, 0xbb, 0xff, 0xc9, 0x00, 0x1d, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff,
- 0xff, 0xe9, 0x00, 0x11, 0xff, 0xfc, 0x00, 0x27, 0xff, 0xdf, 0x00, 0x2b,
- 0xff, 0xe1, 0x00, 0x33, 0xff, 0xe5, 0x00, 0x38, 0xff, 0xd1, 0x00, 0x39,
- 0xff, 0xdd, 0x00, 0x3a, 0xff, 0xb0, 0x00, 0x3b, 0xff, 0xc9, 0x00, 0x3d,
- 0xff, 0xa8, 0x00, 0x45, 0xff, 0xe1, 0x00, 0x49, 0xff, 0xe7, 0x00, 0x53,
- 0xff, 0xee, 0x00, 0x59, 0xff, 0xee, 0x00, 0x5d, 0xff, 0xf0, 0x00, 0x8a,
- 0xff, 0xdf, 0x00, 0x96, 0xff, 0xe5, 0x00, 0x99, 0xff, 0xe5, 0x00, 0x9f,
- 0xff, 0xdd, 0x00, 0xa4, 0xff, 0xe1, 0x00, 0xa7, 0xff, 0xe1, 0x00, 0xa8,
- 0xff, 0xe1, 0x00, 0xa9, 0xff, 0xe7, 0x00, 0xac, 0xff, 0xe7, 0x00, 0xb6,
- 0xff, 0xee, 0x00, 0xb9, 0xff, 0xee, 0x00, 0xbd, 0xff, 0xee, 0x00, 0xbf,
- 0xff, 0xee, 0x00, 0x0a, 0x00, 0x25, 0xff, 0xd3, 0x00, 0x38, 0xff, 0xc7,
- 0x00, 0x3a, 0xff, 0xaa, 0x00, 0x3b, 0xff, 0xc7, 0x00, 0x3d, 0xff, 0x9e,
- 0x00, 0x58, 0xff, 0xfa, 0x00, 0x84, 0xff, 0xd3, 0x00, 0x87, 0xff, 0xd3,
- 0x00, 0x88, 0xff, 0xd3, 0x00, 0x89, 0xff, 0xd3, 0x00, 0x2f, 0xff, 0xff,
- 0xff, 0x10, 0xff, 0xff, 0xff, 0x85, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
- 0xff, 0xb8, 0x00, 0x10, 0xff, 0x33, 0x00, 0x11, 0xff, 0x62, 0x00, 0x12,
- 0xff, 0x33, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x1f, 0xfe, 0xf8, 0x00, 0x25,
- 0xff, 0x3d, 0x00, 0x27, 0xff, 0xa6, 0x00, 0x2b, 0xff, 0xa4, 0x00, 0x2e,
- 0xff, 0x33, 0x00, 0x33, 0xff, 0xaa, 0x00, 0x37, 0xff, 0xcf, 0x00, 0x3a,
- 0x00, 0x19, 0x00, 0x3b, 0x00, 0x21, 0x00, 0x3d, 0x00, 0x29, 0x00, 0x45,
- 0xff, 0x33, 0x00, 0x47, 0xff, 0x48, 0x00, 0x49, 0xff, 0x3d, 0x00, 0x4b,
- 0xff, 0x4a, 0x00, 0x4d, 0xff, 0xfa, 0x00, 0x4e, 0xff, 0xf6, 0x00, 0x53,
- 0xff, 0x44, 0x00, 0x56, 0xff, 0x44, 0x00, 0x57, 0xff, 0x44, 0x00, 0x59,
- 0xff, 0x46, 0x00, 0x5a, 0xff, 0x3d, 0x00, 0x5b, 0xff, 0x42, 0x00, 0x5d,
- 0xff, 0x33, 0x00, 0x6e, 0xff, 0x08, 0x00, 0x83, 0xff, 0x3d, 0x00, 0x84,
- 0xff, 0x3d, 0x00, 0x85, 0xff, 0x3d, 0x00, 0x86, 0xff, 0x3d, 0x00, 0x87,
- 0xff, 0x3d, 0x00, 0x88, 0xff, 0x3d, 0x00, 0x89, 0xff, 0x39, 0x00, 0x95,
- 0xff, 0xaa, 0x00, 0x96, 0xff, 0xaa, 0x00, 0x97, 0xff, 0xaa, 0x00, 0x98,
- 0xff, 0xaa, 0x00, 0x99, 0xff, 0xaa, 0x00, 0x9b, 0xff, 0xac, 0x00, 0xa9,
- 0xff, 0x39, 0x00, 0xbb, 0xff, 0x4e, 0x00, 0x0d, 0x00, 0x10, 0xff, 0xc9,
- 0x00, 0x12, 0xff, 0xcd, 0x00, 0x25, 0xff, 0xb6, 0x00, 0x51, 0xff, 0xf8,
- 0x00, 0x52, 0xff, 0xf8, 0x00, 0x54, 0x00, 0x06, 0x00, 0x56, 0xff, 0xf8,
- 0x00, 0x84, 0xff, 0xb6, 0x00, 0x85, 0xff, 0xb6, 0x00, 0x86, 0xff, 0xb6,
- 0x00, 0x87, 0xff, 0xb6, 0x00, 0x88, 0xff, 0xb6, 0x00, 0x89, 0xff, 0xb0,
- 0x00, 0x26, 0xff, 0xff, 0xff, 0x5c, 0xff, 0xff, 0xff, 0xb8, 0xff, 0xff,
- 0xff, 0xa8, 0x00, 0x10, 0xff, 0x4a, 0x00, 0x11, 0xff, 0xb2, 0x00, 0x12,
- 0xff, 0x4a, 0x00, 0x1e, 0xff, 0x79, 0x00, 0x1f, 0xff, 0x79, 0x00, 0x25,
- 0xff, 0x6f, 0x00, 0x27, 0xff, 0xa8, 0x00, 0x2b, 0xff, 0xaa, 0x00, 0x33,
- 0xff, 0xae, 0x00, 0x37, 0xff, 0xb8, 0x00, 0x38, 0x00, 0x1f, 0x00, 0x45,
- 0xff, 0x87, 0x00, 0x49, 0xff, 0x8b, 0x00, 0x4b, 0xff, 0x9a, 0x00, 0x4d,
- 0xff, 0xf6, 0x00, 0x53, 0xff, 0x91, 0x00, 0x56, 0xff, 0xaa, 0x00, 0x59,
- 0xff, 0xac, 0x00, 0x5d, 0xff, 0xd7, 0x00, 0x6e, 0xff, 0x56, 0x00, 0x83,
- 0xff, 0x6f, 0x00, 0x84, 0xff, 0x6f, 0x00, 0x85, 0xff, 0x6f, 0x00, 0x86,
- 0xff, 0x6f, 0x00, 0x87, 0xff, 0x6f, 0x00, 0x88, 0xff, 0x6f, 0x00, 0x89,
- 0xff, 0x60, 0x00, 0x95, 0xff, 0xae, 0x00, 0x96, 0xff, 0xae, 0x00, 0x97,
- 0xff, 0xae, 0x00, 0x98, 0xff, 0xae, 0x00, 0x99, 0xff, 0xae, 0x00, 0x9b,
- 0xff, 0xbc, 0x00, 0xa9, 0xff, 0x8f, 0x00, 0xbb, 0xff, 0x9a, 0x00, 0x24,
- 0xff, 0xff, 0xff, 0x91, 0x00, 0x10, 0xff, 0x8d, 0x00, 0x11, 0xff, 0xe5,
- 0x00, 0x12, 0xff, 0x8d, 0x00, 0x1e, 0xff, 0x96, 0x00, 0x1f, 0xff, 0x93,
- 0x00, 0x25, 0xff, 0x9a, 0x00, 0x27, 0xff, 0xd1, 0x00, 0x2b, 0xff, 0xd3,
- 0x00, 0x33, 0xff, 0xd7, 0x00, 0x37, 0xff, 0xcf, 0x00, 0x38, 0x00, 0x27,
- 0x00, 0x45, 0xff, 0xb2, 0x00, 0x49, 0xff, 0xbe, 0x00, 0x4b, 0xff, 0xcd,
- 0x00, 0x4d, 0xff, 0xfe, 0x00, 0x53, 0xff, 0xc5, 0x00, 0x56, 0xff, 0xc7,
- 0x00, 0x59, 0xff, 0xc7, 0x00, 0x5d, 0xff, 0xf4, 0x00, 0x6e, 0xff, 0x89,
- 0x00, 0x83, 0xff, 0x9a, 0x00, 0x84, 0xff, 0x9a, 0x00, 0x85, 0xff, 0x9a,
- 0x00, 0x86, 0xff, 0x9a, 0x00, 0x87, 0xff, 0x9a, 0x00, 0x88, 0xff, 0x9a,
- 0x00, 0x89, 0xff, 0x8d, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x96, 0xff, 0xd7,
- 0x00, 0x97, 0xff, 0xd7, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x99, 0xff, 0xd7,
- 0x00, 0x9b, 0xff, 0xe5, 0x00, 0xa9, 0xff, 0xba, 0x00, 0xbb, 0xff, 0xcd,
- 0x00, 0x0a, 0x00, 0x11, 0xff, 0x98, 0x00, 0x27, 0xff, 0x9e, 0x00, 0x33,
- 0xff, 0xa4, 0x00, 0x35, 0xff, 0xa6, 0x00, 0x45, 0xff, 0xe1, 0x00, 0x49,
- 0xff, 0xb6, 0x00, 0x53, 0xff, 0xbc, 0x00, 0x59, 0xff, 0xcf, 0x00, 0x5d,
- 0xff, 0x83, 0x00, 0x99, 0xff, 0xa4, 0x00, 0x24, 0xff, 0xff, 0xff, 0x0c,
- 0x00, 0x10, 0xff, 0x1d, 0x00, 0x11, 0xff, 0x54, 0x00, 0x12, 0xff, 0x1d,
- 0x00, 0x1e, 0xff, 0x4e, 0x00, 0x1f, 0xff, 0x4c, 0x00, 0x25, 0xff, 0x3b,
- 0x00, 0x27, 0xff, 0x89, 0x00, 0x2b, 0xff, 0x89, 0x00, 0x33, 0xff, 0x8d,
- 0x00, 0x37, 0xff, 0xac, 0x00, 0x38, 0x00, 0x2f, 0x00, 0x45, 0xff, 0x4c,
- 0x00, 0x49, 0xff, 0x4a, 0x00, 0x4b, 0xff, 0x56, 0x00, 0x4d, 0x00, 0x06,
- 0x00, 0x53, 0xff, 0x50, 0x00, 0x54, 0xff, 0x91, 0x00, 0x59, 0xff, 0x7f,
- 0x00, 0x5a, 0xff, 0xb6, 0x00, 0x6e, 0xff, 0x04, 0x00, 0x83, 0xff, 0x3b,
- 0x00, 0x84, 0xff, 0x3b, 0x00, 0x85, 0xff, 0x3b, 0x00, 0x86, 0xff, 0x3b,
- 0x00, 0x87, 0xff, 0x3b, 0x00, 0x88, 0xff, 0x3b, 0x00, 0x89, 0xff, 0x2d,
- 0x00, 0x95, 0xff, 0x8d, 0x00, 0x96, 0xff, 0x8d, 0x00, 0x97, 0xff, 0x8d,
- 0x00, 0x98, 0xff, 0x8d, 0x00, 0x99, 0xff, 0x8d, 0x00, 0x9b, 0xff, 0x91,
- 0x00, 0xa9, 0xff, 0x54, 0x00, 0xbb, 0xff, 0x58, 0x00, 0x02, 0x00, 0x5a,
- 0xff, 0xbc, 0x00, 0x5d, 0xff, 0xb2, 0x00, 0x05, 0xff, 0xff, 0xff, 0xd1,
- 0x00, 0x4e, 0xff, 0xf8, 0x00, 0x5a, 0xff, 0xd5, 0x00, 0x5b, 0xff, 0xe5,
- 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xe9, 0x00, 0x5b,
- 0xff, 0xfa, 0x00, 0x5d, 0xff, 0xe1, 0x00, 0x02, 0x00, 0x4c, 0x00, 0x02,
- 0x00, 0x4f, 0x00, 0x0e, 0x00, 0x06, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x58,
- 0xff, 0xec, 0x00, 0x5a, 0xff, 0xe1, 0x00, 0x5b, 0xff, 0xee, 0x00, 0x5c,
- 0xff, 0xc9, 0x00, 0x5d, 0xff, 0xd9, 0x00, 0x11, 0xff, 0xff, 0xff, 0xe7,
- 0x00, 0x45, 0xff, 0xee, 0x00, 0x49, 0xff, 0xe1, 0x00, 0x4a, 0x00, 0x2d,
- 0x00, 0x4d, 0xff, 0xfc, 0x00, 0x4e, 0xff, 0xf8, 0x00, 0x50, 0xff, 0xfa,
- 0x00, 0x53, 0xff, 0xec, 0x00, 0x58, 0x00, 0x31, 0x00, 0xa4, 0xff, 0xee,
- 0x00, 0xa7, 0xff, 0xee, 0x00, 0xa8, 0xff, 0xee, 0x00, 0xa9, 0xff, 0xf6,
- 0x00, 0xac, 0xff, 0xe1, 0x00, 0xb6, 0xff, 0xec, 0x00, 0xb9, 0xff, 0xec,
- 0x00, 0xbb, 0xff, 0xee, 0x00, 0x06, 0x00, 0x45, 0xff, 0xf6, 0x00, 0xa7,
- 0xff, 0xf6, 0x00, 0xa8, 0xff, 0xf6, 0x00, 0xa9, 0xff, 0xfe, 0x00, 0xb6,
- 0x00, 0x06, 0x00, 0xb9, 0x00, 0x06, 0x00, 0x02, 0xff, 0xff, 0xff, 0xe1,
- 0x00, 0x5d, 0xff, 0xdb, 0x00, 0x02, 0x00, 0x38, 0xff, 0xf2, 0x00, 0x4e,
- 0xff, 0xfa, 0x00, 0x0f, 0x00, 0x11, 0xff, 0xac, 0x00, 0x45, 0xff, 0xfc,
- 0x00, 0x49, 0xff, 0xd5, 0x00, 0x4b, 0xff, 0xdf, 0x00, 0x53, 0xff, 0xd9,
- 0x00, 0x57, 0xff, 0xfa, 0x00, 0x59, 0xff, 0xe9, 0x00, 0xa4, 0xff, 0xfc,
- 0x00, 0xa7, 0xff, 0xfc, 0x00, 0xa8, 0xff, 0xfc, 0x00, 0xa9, 0x00, 0x04,
- 0x00, 0xac, 0xff, 0xd5, 0x00, 0xb6, 0xff, 0xd9, 0x00, 0xb9, 0xff, 0xd9,
- 0x00, 0xbf, 0xff, 0xf4, 0x00, 0x01, 0x00, 0x5d, 0xff, 0xf6, 0x00, 0x04,
- 0x00, 0x54, 0x00, 0x0a, 0x00, 0x5a, 0xff, 0xe5, 0x00, 0x5b, 0xff, 0xf2,
- 0x00, 0x5d, 0xff, 0xdb, 0x00, 0x06, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x38,
- 0xff, 0x3b, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x5a, 0xff, 0xe5, 0x00, 0x5b,
- 0xff, 0xf2, 0x00, 0x5d, 0xff, 0xdb, 0x00, 0x07, 0xff, 0xff, 0xff, 0xd5,
- 0x00, 0x38, 0xff, 0x35, 0x00, 0x58, 0xff, 0xec, 0x00, 0x5a, 0xff, 0xdb,
- 0x00, 0x5b, 0xff, 0xec, 0x00, 0x5c, 0xff, 0xc9, 0x00, 0x5d, 0xff, 0xd3,
- 0x00, 0x02, 0x00, 0x58, 0xff, 0xf8, 0x00, 0x5d, 0xff, 0xdf, 0x00, 0x02,
- 0x00, 0x47, 0x00, 0x10, 0x00, 0x59, 0x00, 0x08, 0x00, 0x2b, 0xff, 0xff,
- 0x00, 0x02, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf4, 0x00, 0x10,
- 0xff, 0x73, 0x00, 0x11, 0xff, 0xa0, 0x00, 0x12, 0xff, 0x73, 0x00, 0x1e,
- 0xff, 0xd3, 0x00, 0x1f, 0xff, 0xd3, 0x00, 0x45, 0xff, 0xf6, 0x00, 0x47,
- 0xff, 0xf4, 0x00, 0x48, 0xff, 0xfe, 0x00, 0x49, 0xff, 0xe9, 0x00, 0x4a,
- 0x00, 0x35, 0x00, 0x4b, 0xff, 0xf8, 0x00, 0x4d, 0x00, 0x02, 0x00, 0x4f,
- 0x00, 0x0c, 0x00, 0x50, 0x00, 0x02, 0x00, 0x53, 0xff, 0xf4, 0x00, 0x54,
- 0x00, 0x10, 0x00, 0x55, 0xff, 0xfa, 0x00, 0x57, 0x00, 0x08, 0x00, 0x58,
- 0x00, 0x39, 0x00, 0x59, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x3b, 0x00, 0x5b,
- 0x00, 0x3f, 0x00, 0x5c, 0x00, 0x29, 0x00, 0x5d, 0x00, 0x31, 0x00, 0x5e,
- 0x00, 0x12, 0x00, 0xa3, 0xff, 0xf6, 0x00, 0xa4, 0xff, 0xf6, 0x00, 0xa5,
- 0xff, 0xf6, 0x00, 0xa7, 0xff, 0xf6, 0x00, 0xa8, 0xff, 0xf6, 0x00, 0xa9,
- 0xff, 0xfe, 0x00, 0xaa, 0xff, 0xee, 0x00, 0xab, 0xff, 0xe9, 0x00, 0xac,
- 0xff, 0xe9, 0x00, 0xad, 0xff, 0xe9, 0x00, 0xb5, 0xff, 0xf4, 0x00, 0xb6,
- 0xff, 0xf4, 0x00, 0xb7, 0xff, 0xf4, 0x00, 0xb9, 0xff, 0xf4, 0x00, 0xbb,
- 0xff, 0xf4, 0x00, 0x02, 0xff, 0xff, 0xff, 0xd3, 0x00, 0x58, 0xff, 0xfa,
- 0x00, 0x0f, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x1e, 0xff, 0xc7, 0x00, 0x1f,
- 0xff, 0xc7, 0x00, 0x37, 0xff, 0xf0, 0x00, 0x45, 0xff, 0xfe, 0x00, 0x49,
- 0xff, 0xe3, 0x00, 0x4c, 0xff, 0xfa, 0x00, 0x53, 0xff, 0xe7, 0x00, 0xa4,
- 0xff, 0xfe, 0x00, 0xa7, 0xff, 0xfe, 0x00, 0xa8, 0xff, 0xfe, 0x00, 0xa9,
- 0x00, 0x04, 0x00, 0xac, 0xff, 0xe3, 0x00, 0xb6, 0xff, 0xe7, 0x00, 0xb9,
- 0xff, 0xe7, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1a, 0xff, 0xff,
- 0xff, 0xdf, 0x00, 0x10, 0xff, 0x73, 0x00, 0x11, 0xff, 0xe7, 0x00, 0x12,
- 0xff, 0x73, 0x00, 0x1e, 0xff, 0xd1, 0x00, 0x1f, 0xff, 0xd1, 0x00, 0x45,
- 0xff, 0xdb, 0x00, 0x47, 0xff, 0xdf, 0x00, 0x49, 0xff, 0xd5, 0x00, 0x4b,
- 0xff, 0xe3, 0x00, 0x53, 0xff, 0xdd, 0x00, 0x57, 0xff, 0xee, 0x00, 0xa3,
- 0xff, 0xdb, 0x00, 0xa4, 0xff, 0xdb, 0x00, 0xa5, 0xff, 0xdb, 0x00, 0xa6,
- 0xff, 0xdb, 0x00, 0xa7, 0xff, 0xdb, 0x00, 0xa8, 0xff, 0xdb, 0x00, 0xa9,
- 0xff, 0xe3, 0x00, 0xab, 0xff, 0xd5, 0x00, 0xac, 0xff, 0xd5, 0x00, 0xad,
- 0xff, 0xd5, 0x00, 0xb5, 0xff, 0xdd, 0x00, 0xb6, 0xff, 0xdd, 0x00, 0xb9,
- 0xff, 0xdd, 0x00, 0xbb, 0xff, 0xdd, 0x00, 0x19, 0x00, 0x10, 0xff, 0x9a,
- 0x00, 0x11, 0xff, 0xfe, 0x00, 0x12, 0xff, 0x9a, 0x00, 0x1e, 0xff, 0xd1,
- 0x00, 0x1f, 0xff, 0xd1, 0x00, 0x45, 0xff, 0xe1, 0x00, 0x47, 0xff, 0xf2,
- 0x00, 0x49, 0xff, 0xe7, 0x00, 0x4b, 0xff, 0xf4, 0x00, 0x53, 0xff, 0xee,
- 0x00, 0x57, 0xff, 0xf6, 0x00, 0xa3, 0xff, 0xe1, 0x00, 0xa4, 0xff, 0xe1,
- 0x00, 0xa5, 0xff, 0xe1, 0x00, 0xa6, 0xff, 0xe1, 0x00, 0xa7, 0xff, 0xe1,
- 0x00, 0xa8, 0xff, 0xe1, 0x00, 0xa9, 0xff, 0xe9, 0x00, 0xab, 0xff, 0xe7,
- 0x00, 0xac, 0xff, 0xe7, 0x00, 0xad, 0xff, 0xe7, 0x00, 0xb5, 0xff, 0xee,
- 0x00, 0xb6, 0xff, 0xee, 0x00, 0xb9, 0xff, 0xee, 0x00, 0xbb, 0xff, 0xf4,
- 0x00, 0x06, 0x00, 0x45, 0xff, 0xdd, 0x00, 0x47, 0xff, 0xd1, 0x00, 0x49,
- 0xff, 0xc7, 0x00, 0x53, 0xff, 0xcd, 0x00, 0x55, 0xff, 0xd7, 0x00, 0xac,
- 0xff, 0xc7, 0x00, 0x1a, 0x00, 0x10, 0xff, 0x71, 0x00, 0x11, 0xff, 0xe3,
- 0x00, 0x12, 0xff, 0x71, 0x00, 0x1e, 0xff, 0xc9, 0x00, 0x1f, 0xff, 0xc9,
- 0x00, 0x45, 0xff, 0xd3, 0x00, 0x47, 0xff, 0xd9, 0x00, 0x49, 0xff, 0xcf,
- 0x00, 0x4b, 0xff, 0xdd, 0x00, 0x50, 0xff, 0xf8, 0x00, 0x53, 0xff, 0xd7,
- 0x00, 0x57, 0xff, 0xe7, 0x00, 0xa3, 0xff, 0xd3, 0x00, 0xa4, 0xff, 0xd3,
- 0x00, 0xa5, 0xff, 0xd3, 0x00, 0xa6, 0xff, 0xd3, 0x00, 0xa7, 0xff, 0xd3,
- 0x00, 0xa8, 0xff, 0xd3, 0x00, 0xa9, 0xff, 0xdb, 0x00, 0xab, 0xff, 0xcf,
- 0x00, 0xac, 0xff, 0xcf, 0x00, 0xad, 0xff, 0xcf, 0x00, 0xb5, 0xff, 0xd7,
- 0x00, 0xb6, 0xff, 0xd7, 0x00, 0xb9, 0xff, 0xd7, 0x00, 0xbb, 0xff, 0xd9,
- 0x00, 0x0b, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x27,
- 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc, 0x00, 0x35,
- 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4, 0x00, 0x3a,
- 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35, 0x00, 0x1c,
- 0xff, 0xff, 0xff, 0xae, 0xff, 0xff, 0xff, 0x7b, 0x00, 0x10, 0x00, 0x0a,
- 0x00, 0x11, 0xff, 0xfa, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x27, 0xff, 0xb6,
- 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc, 0x00, 0x35, 0xff, 0xbe,
- 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4, 0x00, 0x3a, 0xff, 0x66,
- 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35, 0x00, 0x45, 0xff, 0xf8,
- 0x00, 0x46, 0x00, 0x08, 0x00, 0x47, 0xff, 0xe9, 0x00, 0x48, 0xff, 0xf0,
- 0x00, 0x49, 0xff, 0xdf, 0x00, 0x4b, 0xff, 0xec, 0x00, 0x53, 0xff, 0xe5,
- 0x00, 0x55, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xdf, 0x00, 0x59, 0xff, 0xe7,
- 0x00, 0x5a, 0xff, 0xc1, 0x00, 0x5b, 0xff, 0xd5, 0x00, 0x5d, 0xff, 0xba,
- 0x00, 0x6e, 0xff, 0xa6, 0x00, 0x0b, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x12,
- 0x00, 0x0a, 0x00, 0x27, 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33,
- 0xff, 0xbc, 0x00, 0x35, 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39,
- 0xff, 0xb4, 0x00, 0x3a, 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d,
- 0xff, 0x35, 0x00, 0x0b, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x0a,
- 0x00, 0x27, 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc,
- 0x00, 0x35, 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4,
- 0x00, 0x3a, 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35,
- 0x00, 0x1c, 0xff, 0xff, 0xff, 0xae, 0xff, 0xff, 0xff, 0x8d, 0xff, 0xff,
- 0xff, 0x7b, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x11, 0xff, 0xfa, 0x00, 0x12,
- 0x00, 0x0a, 0x00, 0x27, 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33,
- 0xff, 0xbc, 0x00, 0x35, 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39,
- 0xff, 0xb4, 0x00, 0x3a, 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d,
- 0xff, 0x35, 0x00, 0x45, 0xff, 0xf8, 0x00, 0x46, 0x00, 0x08, 0x00, 0x47,
- 0xff, 0xe9, 0x00, 0x48, 0xff, 0xf0, 0x00, 0x4b, 0xff, 0xec, 0x00, 0x53,
- 0xff, 0xe5, 0x00, 0x55, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xdf, 0x00, 0x59,
- 0xff, 0xe7, 0x00, 0x5a, 0xff, 0xc1, 0x00, 0x5b, 0xff, 0xd5, 0x00, 0x5d,
- 0xff, 0xba, 0x00, 0x6e, 0xff, 0xa6, 0x00, 0x1d, 0xff, 0xff, 0xff, 0xae,
- 0xff, 0xff, 0xff, 0x8d, 0xff, 0xff, 0xff, 0x7b, 0x00, 0x10, 0x00, 0x0a,
- 0x00, 0x11, 0xff, 0xfa, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x27, 0xff, 0xb6,
- 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc, 0x00, 0x35, 0xff, 0xbe,
- 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4, 0x00, 0x3a, 0xff, 0x66,
- 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35, 0x00, 0x45, 0xff, 0xf8,
- 0x00, 0x46, 0x00, 0x08, 0x00, 0x47, 0xff, 0xe9, 0x00, 0x48, 0xff, 0xf0,
- 0x00, 0x49, 0xff, 0xdf, 0x00, 0x4b, 0xff, 0xec, 0x00, 0x53, 0xff, 0xe5,
- 0x00, 0x55, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xdf, 0x00, 0x59, 0xff, 0xe7,
- 0x00, 0x5a, 0xff, 0xc1, 0x00, 0x5b, 0xff, 0xd5, 0x00, 0x5d, 0xff, 0xba,
- 0x00, 0x6e, 0xff, 0xa6, 0x00, 0x01, 0x00, 0x25, 0xff, 0xc1, 0x00, 0x03,
- 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3d, 0xff, 0x87,
- 0x00, 0x05, 0x00, 0x25, 0xff, 0xb8, 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a,
- 0xff, 0xa4, 0x00, 0x3b, 0xff, 0xd1, 0x00, 0x3d, 0xff, 0x87, 0x00, 0x03,
- 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3d, 0xff, 0x87,
- 0x00, 0x03, 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3d,
- 0xff, 0x87, 0x00, 0x06, 0x00, 0x25, 0xff, 0xb8, 0x00, 0x38, 0xff, 0xaa,
- 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3b, 0xff, 0xd1, 0x00, 0x3c, 0xff, 0xa2,
- 0x00, 0x3d, 0xff, 0x87, 0x00, 0x01, 0x00, 0x25, 0xff, 0xbc, 0x00, 0x01,
- 0x00, 0x25, 0xff, 0xb6, 0x00, 0x07, 0x00, 0x10, 0xff, 0xc9, 0x00, 0x12,
- 0xff, 0xcd, 0x00, 0x25, 0xff, 0xb6, 0x00, 0x51, 0xff, 0xf8, 0x00, 0x52,
- 0xff, 0xf8, 0x00, 0x54, 0x00, 0x06, 0x00, 0x56, 0xff, 0xf8, 0x00, 0x01,
- 0x00, 0x25, 0xff, 0xb6, 0x00, 0x08, 0x00, 0x10, 0xff, 0xc9, 0x00, 0x12,
- 0xff, 0xcd, 0x00, 0x25, 0xff, 0xb6, 0x00, 0x46, 0x00, 0x06, 0x00, 0x51,
- 0xff, 0xf8, 0x00, 0x52, 0xff, 0xf8, 0x00, 0x54, 0x00, 0x06, 0x00, 0x56,
- 0xff, 0xf8, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xd5, 0x00, 0x5b, 0xff, 0xe5,
- 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xd5, 0x00, 0x5b,
- 0xff, 0xe5, 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xd5,
- 0x00, 0x5b, 0xff, 0xe5, 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x5a,
- 0xff, 0xd5, 0x00, 0x5b, 0xff, 0xe5, 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03,
- 0x00, 0x5a, 0xff, 0xdf, 0x00, 0x5b, 0xff, 0xec, 0x00, 0x5d, 0xff, 0xd7,
- 0x00, 0x03, 0x00, 0x5a, 0xff, 0xe1, 0x00, 0x5b, 0xff, 0xee, 0x00, 0x5d,
- 0xff, 0xd9, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xe1, 0x00, 0x5b, 0xff, 0xee,
- 0x00, 0x5d, 0xff, 0xd9, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xdb, 0x00, 0x5b,
- 0xff, 0xec, 0x00, 0x5d, 0xff, 0xd3, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xdb,
- 0x00, 0x5b, 0xff, 0xec, 0x00, 0x5d, 0xff, 0xd3, 0x00, 0x01, 0x00, 0x58,
- 0xff, 0xec, 0x00, 0x05, 0x00, 0x58, 0xff, 0xec, 0x00, 0x5a, 0xff, 0xdb,
- 0x00, 0x5b, 0xff, 0xec, 0x00, 0x5c, 0xff, 0xc9, 0x00, 0x5d, 0xff, 0xd3,
- 0x00, 0x02, 0x00, 0x11, 0x00, 0x25, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a,
- 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x06, 0x00, 0x32,
- 0x00, 0x34, 0x00, 0x09, 0x00, 0x36, 0x00, 0x3e, 0x00, 0x0c, 0x00, 0x45,
- 0x00, 0x47, 0x00, 0x15, 0x00, 0x49, 0x00, 0x4d, 0x00, 0x18, 0x00, 0x4f,
- 0x00, 0x5d, 0x00, 0x1d, 0x00, 0x83, 0x00, 0x88, 0x00, 0x2c, 0x00, 0x8a,
- 0x00, 0x8a, 0x00, 0x32, 0x00, 0x95, 0x00, 0x99, 0x00, 0x33, 0x00, 0x9b,
- 0x00, 0x9f, 0x00, 0x38, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0x3d, 0x00, 0xa7,
- 0x00, 0xa9, 0x00, 0x3f, 0x00, 0xac, 0x00, 0xad, 0x00, 0x42, 0x00, 0xb5,
- 0x00, 0xb7, 0x00, 0x44, 0x00, 0xb9, 0x00, 0xb9, 0x00, 0x47, 0x00, 0x00
-};
-unsigned int FreeSans_ttf_len = 22932;
-
-#if 0
-void writeLogo(const char *dir)
-{
- QCString fileName=(QCString)dir+"/doxygen.png";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- f.writeBlock((char *)doxygen_png_data,doxygen_png_len);
- else
- {
- fprintf(stderr,"warning: Cannot open file %s for writing\n",fileName.data());
- }
- f.close();
-}
-
-void writeSearchButton(const char *dir)
-{
- QCString fileName=(QCString)dir+"/search.png";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- f.writeBlock((char *)search_png,search_png_len);
- else
- {
- fprintf(stderr,"warning: Cannot open file %s for writing\n",fileName.data());
- }
- f.close();
-}
-#endif
-
-void writeDoxFont(const char *dir)
-{
- QCString fileName=(QCString)dir+"/FreeSans.ttf";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- f.writeBlock((char *)FreeSans_ttf,FreeSans_ttf_len);
- else
- {
- fprintf(stderr,"error: Cannot open file %s for writing\n",fileName.data());
- }
- f.close();
-}
-
-void removeDoxFont(const char *dir)
-{
- QDir d(dir);
- d.remove("FreeSans.ttf");
-}
diff --git a/src/logos.h b/src/logos.h
deleted file mode 100644
index 95a8a39..0000000
--- a/src/logos.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef LOGOS_H
-#define LOGOS_H
-
-extern void writeLogo(const char *dir);
-//extern void writeNullImage(const char *dir);
-extern void writeSearchButton(const char *dir);
-extern void writeDoxFont(const char *dir);
-extern void removeDoxFont(const char *dir);
-
-#endif
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index beef632..5c98c6f 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -254,20 +254,21 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".PP" << endl;
m_t << ".nf" << endl;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
0, // memberDef
TRUE
);
+ delete fd;
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
@@ -296,10 +297,9 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".PP" << endl;
m_firstCol=TRUE;
break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- break;
+ case DocInclude::DontInclude:
+ case DocInclude::DontIncWithLines:
+ case DocInclude::HtmlInclude:
case DocInclude::LatexInclude:
break;
case DocInclude::VerbInclude:
@@ -335,7 +335,7 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".PP" << endl;
m_t << ".nf" << endl;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -343,13 +343,14 @@ void ManDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
@@ -385,9 +386,24 @@ void ManDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),op->text(),langExt,
- op->isExample(),op->exampleFile());
+ op->isExample(),op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
diff --git a/src/markdown.cpp b/src/markdown.cpp
index fcad7e9..56d160b 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -138,6 +138,7 @@ static QCString escapeSpecialChars(const QCString &s)
case '>': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('>'); break;
case '\\': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('\\'); break;
case '@': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('@'); break;
+ case '#': if (!insideQuote) { growBuf.addChar('\\'); } growBuf.addChar('#'); break;
default: growBuf.addChar(c); break;
}
pc=c;
@@ -1886,10 +1887,16 @@ static int writeTableBlock(GrowBuf &out,const char *data,int size)
static int hasLineBreak(const char *data,int size)
{
int i=0;
- while (i<size && data[i]!='\n') i++;
+ int j=0;
+ // search for end of line and also check if it is not a completely blank
+ while (i<size && data[i]!='\n')
+ {
+ if (data[i]!=' ' && data[i]!='\t') j++; // some non whitespace
+ i++;
+ }
if (i>=size) return 0; // empty line
if (i<2) return 0; // not long enough
- return (data[i-1]==' ' && data[i-2]==' ');
+ return (j>0 && data[i-1]==' ' && data[i-2]==' '); // non blank line with at two spaces at the end
}
@@ -1947,7 +1954,7 @@ void writeOneLineHeaderOrRuler(GrowBuf &out,const char *data,int size)
out.addStr(data,size);
if (hasLineBreak(data,size))
{
- out.addStr("\n");
+ out.addStr("<br>");
}
}
}
diff --git a/src/marshal.cpp b/src/marshal.cpp
deleted file mode 100644
index c68718a..0000000
--- a/src/marshal.cpp
+++ /dev/null
@@ -1,857 +0,0 @@
-#include <qfile.h>
-#include <assert.h>
-
-#include "sortdict.h"
-#include "marshal.h"
-#include "entry.h"
-#include "section.h"
-#include "memberlist.h"
-#include "definition.h"
-#include "groupdef.h"
-#include "example.h"
-#include "arguments.h"
-#include "doxygen.h"
-
-#define HEADER ('D'<<24)+('O'<<16)+('X'<<8)+'!'
-
-void marshalInt(StorageIntf *s,int v)
-{
- uchar b[4];
- b[0]=((uint)v)>>24;
- b[1]=(((uint)v)>>16)&0xff;
- b[2]=(((uint)v)>>8)&0xff;
- b[3]=v&0xff;
- s->write((const char *)b,4);
-}
-
-void marshalUInt(StorageIntf *s,uint v)
-{
- uchar b[4];
- b[0]=v>>24;
- b[1]=(v>>16)&0xff;
- b[2]=(v>>8)&0xff;
- b[3]=v&0xff;
- s->write((const char *)b,4);
-}
-
-void marshalUInt64(StorageIntf *s,uint64 v)
-{
- marshalUInt(s, uint(v>>32));
- marshalUInt(s, uint(v&0xFFFFFFFF));
-}
-
-void marshalBool(StorageIntf *s,bool b)
-{
- char c = b;
- s->write(&c,sizeof(char));
-}
-
-void marshalQCString(StorageIntf *s,const QCString &str)
-{
- uint l=str.length();
- marshalUInt(s,l);
- if (l>0) s->write(str.data(),l);
-}
-
-void marshalQGString(StorageIntf *s,const QGString &str)
-{
- uint l=str.length();
- marshalUInt(s,l);
- if (l>0) s->write(str.data(),l);
-}
-
-void marshalArgumentList(StorageIntf *s,ArgumentList *argList)
-{
- ArgumentList::marshal(s,argList);
-}
-
-void marshalArgumentLists(StorageIntf *s,QList<ArgumentList> *argLists)
-{
- if (argLists==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,argLists->count());
- QListIterator<ArgumentList> ali(*argLists);
- ArgumentList *al;
- for (ali.toFirst();(al=ali.current());++ali)
- {
- marshalArgumentList(s,al);
- }
- }
-}
-
-void marshalBaseInfoList(StorageIntf *s, QList<BaseInfo> *baseList)
-{
- if (baseList==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,baseList->count());
- QListIterator<BaseInfo> bli(*baseList);
- BaseInfo *bi;
- for (bli.toFirst();(bi=bli.current());++bli)
- {
- marshalQCString(s,bi->name);
- marshalInt(s,(int)bi->prot);
- marshalInt(s,(int)bi->virt);
- }
- }
-}
-
-void marshalGroupingList(StorageIntf *s, QList<Grouping> *groups)
-{
- if (groups==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,groups->count());
- QListIterator<Grouping> gli(*groups);
- Grouping *g;
- for (gli.toFirst();(g=gli.current());++gli)
- {
- marshalQCString(s,g->groupname);
- marshalInt(s,(int)g->pri);
- }
- }
-}
-
-void marshalSectionInfoList(StorageIntf *s, QList<SectionInfo> *anchors)
-{
- if (anchors==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,anchors->count());
- QListIterator<SectionInfo> sli(*anchors);
- SectionInfo *si;
- for (sli.toFirst();(si=sli.current());++sli)
- {
- marshalQCString(s,si->label);
- marshalQCString(s,si->title);
- marshalQCString(s,si->ref);
- marshalInt(s,(int)si->type);
- marshalQCString(s,si->fileName);
- marshalInt(s,si->lineNr);
- marshalInt(s,si->level);
- }
- anchors->clear();
- }
-}
-
-void marshalItemInfoList(StorageIntf *s, QList<ListItemInfo> *sli)
-{
- if (sli==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,sli->count());
- QListIterator<ListItemInfo> liii(*sli);
- ListItemInfo *lii;
- for (liii.toFirst();(lii=liii.current());++liii)
- {
- marshalQCString(s,lii->type);
- marshalInt(s,lii->itemId);
- }
- }
-}
-
-void marshalObjPointer(StorageIntf *s,void *obj)
-{
- char *b = (char *)&obj;
- s->write(b,sizeof(void *));
-}
-
-void marshalSectionDict(StorageIntf *s,SectionDict *sections)
-{
- if (sections==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,sections->count());
- SDict<SectionInfo>::IteratorDict sli(*sections);
- SectionInfo *si;
- for (sli.toFirst();(si=sli.current());++sli)
- {
- marshalQCString(s,sli.currentKey());
- marshalObjPointer(s,si);
- }
- }
-}
-
-void marshalMemberSDict(StorageIntf *s,MemberSDict *memberSDict)
-{
- if (memberSDict==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,memberSDict->count());
- //printf(" marshalMemberSDict: items=%d\n",memberSDict->count());
- SDict<MemberDef>::IteratorDict mdi(*memberSDict);
- MemberDef *md;
- int count=0;
- for (mdi.toFirst();(md=mdi.current());++mdi)
- {
- //printf(" marshalMemberSDict: %d: key=%s value=%p\n",count,mdi.currentKey().data(),md);
- marshalQCString(s,mdi.currentKey());
- marshalObjPointer(s,md);
- count++;
- }
- assert(count==memberSDict->count());
- }
-}
-
-void marshalDocInfo(StorageIntf *s,DocInfo *docInfo)
-{
- if (docInfo==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,1);
- marshalQCString(s,docInfo->doc);
- marshalInt(s,docInfo->line);
- marshalQCString(s,docInfo->file);
- }
-}
-
-void marshalBriefInfo(StorageIntf *s,BriefInfo *briefInfo)
-{
- if (briefInfo==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,1);
- marshalQCString(s,briefInfo->doc);
- marshalQCString(s,briefInfo->tooltip);
- marshalInt(s,briefInfo->line);
- marshalQCString(s,briefInfo->file);
- }
-}
-
-void marshalBodyInfo(StorageIntf *s,BodyInfo *bodyInfo)
-{
- if (bodyInfo==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,1);
- marshalInt(s,bodyInfo->startLine);
- marshalInt(s,bodyInfo->endLine);
- marshalObjPointer(s,bodyInfo->fileDef);
- }
-}
-
-void marshalGroupList(StorageIntf *s,GroupList *groupList)
-{
- if (groupList==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,groupList->count());
- QListIterator<GroupDef> gli(*groupList);
- GroupDef *gd=0;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- marshalObjPointer(s,gd);
- }
- }
-}
-
-void marshalMemberList(StorageIntf *s,MemberList *ml)
-{
- if (ml==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,ml->count());
- MemberListIterator mli(*ml);
- MemberDef *md;
- uint count=0;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- marshalObjPointer(s,md);
- count++;
- }
- assert(count==ml->count());
-
- ml->marshal(s);
- }
-}
-
-void marshalExampleSDict(StorageIntf *s,ExampleSDict *ed)
-{
- if (ed==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,ed->count());
- //printf(" marshalMemberSDict: items=%d\n",memberSDict->count());
- SDict<Example>::IteratorDict edi(*ed);
- Example *e;
- for (edi.toFirst();(e=edi.current());++edi)
- {
- //printf(" marshalMemberSDict: %d: key=%s value=%p\n",count,mdi.currentKey().data(),md);
- marshalQCString(s,edi.currentKey());
- marshalQCString(s,e->anchor);
- marshalQCString(s,e->name);
- marshalQCString(s,e->file);
- }
- }
-}
-
-void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls)
-{
- if (mls==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,mls->count());
- //printf(" marshalMemberSDict: items=%d\n",memberSDict->count());
- SDict<MemberList>::IteratorDict mli(*mls);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- //printf(" marshalMemberSDict: %d: key=%s value=%p\n",count,mdi.currentKey().data(),md);
- marshalQCString(s,mli.currentKey());
- marshalObjPointer(s,ml); // assume we are not owner of the list
- }
- }
-}
-
-void marshalLocalToc(StorageIntf *s,const LocalToc &lt)
-{
- marshalInt(s,lt.mask());
- marshalInt(s,lt.htmlLevel());
- marshalInt(s,lt.latexLevel());
- marshalInt(s,lt.xmlLevel());
- marshalInt(s,lt.docbookLevel());
-}
-
-void marshalEntry(StorageIntf *s,Entry *e)
-{
- marshalUInt(s,HEADER);
- marshalQCString(s,e->name);
- marshalQCString(s,e->type);
- marshalInt(s,e->section);
- marshalInt(s,(int)e->protection);
- marshalInt(s,(int)e->mtype);
- marshalUInt64(s,e->spec);
- marshalInt(s,e->initLines);
- marshalBool(s,e->stat);
- marshalLocalToc(s,e->localToc);
- marshalBool(s,e->explicitExternal);
- marshalBool(s,e->proto);
- marshalBool(s,e->subGrouping);
- marshalBool(s,e->callGraph);
- marshalBool(s,e->callerGraph);
- marshalBool(s,e->referencedByRelation);
- marshalBool(s,e->referencesRelation);
- marshalInt(s,(int)e->virt);
- marshalQCString(s,e->args);
- marshalQCString(s,e->bitfields);
- marshalArgumentList(s,e->argList);
- marshalArgumentLists(s,e->tArgLists);
- marshalQGString(s,e->program);
- marshalQGString(s,e->initializer);
- marshalQCString(s,e->includeFile);
- marshalQCString(s,e->includeName);
- marshalQCString(s,e->doc);
- marshalInt(s,e->docLine);
- marshalQCString(s,e->docFile);
- marshalQCString(s,e->brief);
- marshalInt(s,e->briefLine);
- marshalQCString(s,e->briefFile);
- marshalQCString(s,e->inbodyDocs);
- marshalInt(s,e->inbodyLine);
- marshalQCString(s,e->inbodyFile);
- marshalQCString(s,e->relates);
- marshalInt(s,e->relatesType);
- marshalQCString(s,e->read);
- marshalQCString(s,e->write);
- marshalQCString(s,e->inside);
- marshalQCString(s,e->exception);
- marshalArgumentList(s,e->typeConstr);
- marshalInt(s,e->bodyLine);
- marshalInt(s,e->endBodyLine);
- marshalInt(s,e->mGrpId);
- marshalBaseInfoList(s,e->extends);
- marshalGroupingList(s,e->groups);
- marshalSectionInfoList(s,e->anchors);
- marshalQCString(s,e->fileName);
- marshalInt(s,e->startLine);
- marshalItemInfoList(s,e->sli);
- marshalInt(s,(int)e->lang);
- marshalBool(s,e->hidden);
- marshalBool(s,e->artificial);
- marshalInt(s,(int)e->groupDocType);
- marshalQCString(s,e->id);
- marshalQCString(s,e->metaData);
-}
-
-void marshalEntryTree(StorageIntf *s,Entry *e)
-{
- marshalEntry(s,e);
- marshalUInt(s,e->children()->count());
- QListIterator<Entry> eli(*e->children());
- Entry *child;
- for (eli.toFirst();(child=eli.current());++eli)
- {
- marshalEntryTree(s,child);
- }
-}
-
-//------------------------------------------------------------------
-
-int unmarshalInt(StorageIntf *s)
-{
- uchar b[4];
- s->read((char *)b,4);
- int result=(int)((((uint)b[0])<<24)+((uint)b[1]<<16)+((uint)b[2]<<8)+(uint)b[3]);
- //printf("unmarshalInt: %x %x %x %x: %x offset=%llx\n",b[0],b[1],b[2],b[3],result,f.pos());
- return result;
-}
-
-uint unmarshalUInt(StorageIntf *s)
-{
- uchar b[4];
- s->read((char *)b,4);
- uint result=(((uint)b[0])<<24)+((uint)b[1]<<16)+((uint)b[2]<<8)+(uint)b[3];
- //printf("unmarshalUInt: %x %x %x %x: %x offset=%llx\n",b[0],b[1],b[2],b[3],result,f.pos());
- return result;
-}
-
-uint64 unmarshalUInt64(StorageIntf *s)
-{
- uint64 result=uint64(unmarshalUInt(s))<<32;
- result|=unmarshalUInt(s);
- return result;
-}
-
-bool unmarshalBool(StorageIntf *s)
-{
- char result;
- s->read(&result,sizeof(result));
- //printf("unmarshalBool: %x offset=%llx\n",result,f.pos());
- return result;
-}
-
-QCString unmarshalQCString(StorageIntf *s)
-{
- uint len = unmarshalUInt(s);
- //printf("unmarshalQCString: len=%d offset=%llx\n",len,f.pos());
- QCString result(len+1);
- result.at(len)='\0';
- if (len>0)
- {
- s->read(result.rawData(),len);
- }
- //printf("unmarshalQCString: result=%s\n",result.data());
- return result;
-}
-
-QGString unmarshalQGString(StorageIntf *s)
-{
- uint len = unmarshalUInt(s);
- //printf("unmarshalQCString: len=%d offset=%llx\n",len,f.pos());
- QGString result(len+1);
- result.at(len)='\0';
- if (len>0)
- {
- s->read(result.data(),len);
- }
- //printf("unmarshalQCString: result=%s\n",result.data());
- return result;
-}
-
-ArgumentList *unmarshalArgumentList(StorageIntf *s)
-{
- return ArgumentList::unmarshal(s);
-}
-
-QList<ArgumentList> *unmarshalArgumentLists(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<ArgumentList> *result = new QList<ArgumentList>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- //printf("unmarshalArgumentLists: %d\n",count);
- for (i=0;i<count;i++)
- {
- result->append(unmarshalArgumentList(s));
- }
- return result;
-}
-
-QList<BaseInfo> *unmarshalBaseInfoList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<BaseInfo> *result = new QList<BaseInfo>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString name = unmarshalQCString(s);
- Protection prot = (Protection)unmarshalInt(s);
- Specifier virt = (Specifier)unmarshalInt(s);
- result->append(new BaseInfo(name,prot,virt));
- }
- return result;
-}
-
-QList<Grouping> *unmarshalGroupingList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<Grouping> *result = new QList<Grouping>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString name = unmarshalQCString(s);
- Grouping::GroupPri_t prio = (Grouping::GroupPri_t)unmarshalInt(s);
- result->append(new Grouping(name,prio));
- }
- return result;
-}
-
-QList<SectionInfo> *unmarshalSectionInfoList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<SectionInfo> *anchors = new QList<SectionInfo>;
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString label = unmarshalQCString(s);
- QCString title = unmarshalQCString(s);
- QCString ref = unmarshalQCString(s);
- SectionInfo::SectionType type = (SectionInfo::SectionType)unmarshalInt(s);
- QCString fileName = unmarshalQCString(s);
- int lineNr = unmarshalInt(s);
- int level = unmarshalInt(s);
- SectionInfo *si = Doxygen::sectionDict->find(label);
- if (si==0) // This should actually never be true since all anchors should be in sectionDict.
- // Could still optimize the marshaling routine by only storing label.
- {
- SectionInfo *si = new SectionInfo(fileName,lineNr,label,title,type,level,ref);
- anchors->append(si);
- Doxygen::sectionDict->append(label,si); // this dict owns the anchor objects
- }
- else
- {
- anchors->append(si);
- }
- }
- return anchors;
-}
-
-QList<ListItemInfo> *unmarshalItemInfoList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<ListItemInfo> *result = new QList<ListItemInfo>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- ListItemInfo *lii = new ListItemInfo;
- lii->type = unmarshalQCString(s);
- lii->itemId = unmarshalInt(s);
- result->append(lii);
- }
- return result;
-}
-
-void *unmarshalObjPointer(StorageIntf *s)
-{
- void *result;
- s->read((char *)&result,sizeof(void*));
- return result;
-}
-
-SectionDict *unmarshalSectionDict(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- //printf("unmarshalSectionDict count=%d\n",count);
- if (count==NULL_LIST) return 0; // null list
- SectionDict *result = new SectionDict(17);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString key = unmarshalQCString(s);
- SectionInfo *si = (SectionInfo *)unmarshalObjPointer(s);
- //printf(" unmarshalSectionDict i=%d key=%s si=%s\n",count,key.data(),si->label.data());
- result->append(key,si);
- }
- return result;
-}
-
-MemberSDict *unmarshalMemberSDict(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- //printf("--- unmarshalMemberSDict count=%d\n",count);
- if (count==NULL_LIST)
- {
- //printf("--- end unmarshalMemberSDict\n");
- return 0; // null list
- }
- MemberSDict *result = new MemberSDict;
- assert(count<1000000);
- //printf("Reading %d key-value pairs\n",count);
- for (i=0;i<count;i++)
- {
- //printf(" unmarshaling pair %d\n",i);
- QCString key = unmarshalQCString(s);
- //printf(" unmarshaling key %s\n",key.data());
- MemberDef *md = (MemberDef *)unmarshalObjPointer(s);
- //printf(" unmarshalMemberSDict i=%d key=%s md=%p\n",i,key.data(),md);
- result->append(key,md);
- }
-
- //printf("--- end unmarshalMemberSDict\n");
- return result;
-}
-
-DocInfo *unmarshalDocInfo(StorageIntf *s)
-{
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- DocInfo *result = new DocInfo;
- result->doc = unmarshalQCString(s);
- result->line = unmarshalInt(s);
- result->file = unmarshalQCString(s);
- return result;
-}
-
-BriefInfo *unmarshalBriefInfo(StorageIntf *s)
-{
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- BriefInfo *result = new BriefInfo;
- result->doc = unmarshalQCString(s);
- result->tooltip = unmarshalQCString(s);
- result->line = unmarshalInt(s);
- result->file = unmarshalQCString(s);
- return result;
-}
-
-BodyInfo *unmarshalBodyInfo(StorageIntf *s)
-{
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- BodyInfo *result = new BodyInfo;
- result->startLine = unmarshalInt(s);
- result->endLine = unmarshalInt(s);
- result->fileDef = (FileDef*)unmarshalObjPointer(s);
- return result;
-}
-
-GroupList *unmarshalGroupList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- assert(count<1000000);
- GroupList *result = new GroupList;
- for (i=0;i<count;i++)
- {
- GroupDef *gd = (GroupDef *)unmarshalObjPointer(s);
- result->append(gd);
- }
- return result;
-}
-
-MemberList *unmarshalMemberList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- MemberList *result = new MemberList;
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- MemberDef *md = (MemberDef*)unmarshalObjPointer(s);
- result->append(md);
- }
- result->unmarshal(s);
- return result;
-}
-
-ExampleSDict *unmarshalExampleSDict(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- ExampleSDict *result = new ExampleSDict;
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString key = unmarshalQCString(s);
- Example *e = new Example;
- e->anchor = unmarshalQCString(s);
- e->name = unmarshalQCString(s);
- e->file = unmarshalQCString(s);
- result->inSort(key,e);
- }
- return result;
-}
-
-SDict<MemberList> *unmarshalMemberLists(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- SDict<MemberList> *result = new SDict<MemberList>(7);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString key = unmarshalQCString(s);
- MemberList *ml = (MemberList *)unmarshalObjPointer(s);
- result->append(key,ml);
- }
- return result;
-}
-
-LocalToc unmarshalLocalToc(StorageIntf *s)
-{
- LocalToc result;
- int mask = unmarshalInt(s);
- int htmlLevel = unmarshalInt(s);
- int latexLevel = unmarshalInt(s);
- int xmlLevel = unmarshalInt(s);
- int docbookLevel = unmarshalInt(s);
- if ((mask & (1<<LocalToc::Html))!=0)
- {
- result.enableHtml(htmlLevel);
- }
- if ((mask & (1<<LocalToc::Latex))!=0)
- {
- result.enableLatex(latexLevel);
- }
- if ((mask & (1<<LocalToc::Xml))!=0)
- {
- result.enableXml(xmlLevel);
- }
- if ((mask & (1<<LocalToc::Docbook))!=0)
- {
- result.enableDocbook(docbookLevel);
- }
- return result;
-}
-
-Entry * unmarshalEntry(StorageIntf *s)
-{
- Entry *e = new Entry;
- uint header=unmarshalUInt(s);
- ASSERT(header==HEADER);
- e->name = unmarshalQCString(s);
- e->type = unmarshalQCString(s);
- e->section = unmarshalInt(s);
- e->protection = (Protection)unmarshalInt(s);
- e->mtype = (MethodTypes)unmarshalInt(s);
- e->spec = unmarshalUInt64(s);
- e->initLines = unmarshalInt(s);
- e->stat = unmarshalBool(s);
- e->localToc = unmarshalLocalToc(s);
- e->explicitExternal = unmarshalBool(s);
- e->proto = unmarshalBool(s);
- e->subGrouping = unmarshalBool(s);
- e->callGraph = unmarshalBool(s);
- e->callerGraph = unmarshalBool(s);
- e->referencedByRelation = unmarshalBool(s);
- e->referencesRelation = unmarshalBool(s);
- e->virt = (Specifier)unmarshalInt(s);
- e->args = unmarshalQCString(s);
- e->bitfields = unmarshalQCString(s);
- delete e->argList;
- e->argList = unmarshalArgumentList(s);
- e->tArgLists = unmarshalArgumentLists(s);
- e->program = unmarshalQGString(s);
- e->initializer = unmarshalQGString(s);
- e->includeFile = unmarshalQCString(s);
- e->includeName = unmarshalQCString(s);
- e->doc = unmarshalQCString(s);
- e->docLine = unmarshalInt(s);
- e->docFile = unmarshalQCString(s);
- e->brief = unmarshalQCString(s);
- e->briefLine = unmarshalInt(s);
- e->briefFile = unmarshalQCString(s);
- e->inbodyDocs = unmarshalQCString(s);
- e->inbodyLine = unmarshalInt(s);
- e->inbodyFile = unmarshalQCString(s);
- e->relates = unmarshalQCString(s);
- e->relatesType = (RelatesType)unmarshalInt(s);
- e->read = unmarshalQCString(s);
- e->write = unmarshalQCString(s);
- e->inside = unmarshalQCString(s);
- e->exception = unmarshalQCString(s);
- e->typeConstr = unmarshalArgumentList(s);
- e->bodyLine = unmarshalInt(s);
- e->endBodyLine = unmarshalInt(s);
- e->mGrpId = unmarshalInt(s);
- delete e->extends;
- e->extends = unmarshalBaseInfoList(s);
- delete e->groups;
- e->groups = unmarshalGroupingList(s);
- delete e->anchors;
- e->anchors = unmarshalSectionInfoList(s);
- e->fileName = unmarshalQCString(s);
- e->startLine = unmarshalInt(s);
- e->sli = unmarshalItemInfoList(s);
- e->lang = (SrcLangExt)unmarshalInt(s);
- e->hidden = unmarshalBool(s);
- e->artificial = unmarshalBool(s);
- e->groupDocType = (Entry::GroupDocType)unmarshalInt(s);
- e->id = unmarshalQCString(s);
- e->metaData = unmarshalQCString(s);
- return e;
-}
-
-Entry * unmarshalEntryTree(StorageIntf *s)
-{
- Entry *e = unmarshalEntry(s);
- uint count = unmarshalUInt(s);
- uint i;
- for (i=0;i<count;i++)
- {
- e->addSubEntry(unmarshalEntryTree(s));
- }
- return e;
-}
diff --git a/src/marshal.h b/src/marshal.h
deleted file mode 100644
index 206ab04..0000000
--- a/src/marshal.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef MARSHAL_H
-#define MARSHAL_H
-
-#include <qlist.h>
-#include <qfile.h>
-#include "sortdict.h"
-#include "store.h"
-
-class ArgumentList;
-struct BaseInfo;
-struct Grouping;
-struct SectionInfo;
-struct ListItemInfo;
-class QCString;
-class QGString;
-class SectionDict;
-class MemberSDict;
-class GroupList;
-class MemberList;
-struct BodyInfo;
-struct DocInfo;
-struct BriefInfo;
-class ExampleSDict;
-class Entry;
-
-#define NULL_LIST 0xffffffff
-
-//----- marshaling function: datatype -> byte stream --------------------
-
-void marshalInt(StorageIntf *s,int v);
-void marshalUInt(StorageIntf *s,uint v);
-void marshalUInt64(StorageIntf *s,uint64 v);
-void marshalBool(StorageIntf *s,bool b);
-void marshalQCString(StorageIntf *s,const QCString &str);
-void marshalQGString(StorageIntf *s,const QGString &str);
-void marshalArgumentList(StorageIntf *s,ArgumentList *argList);
-void marshalArgumentLists(StorageIntf *s,QList<ArgumentList> *argLists);
-void marshalBaseInfoList(StorageIntf *s, QList<BaseInfo> *baseList);
-void marshalGroupingList(StorageIntf *s, QList<Grouping> *groups);
-void marshalSectionInfoList(StorageIntf *s, QList<SectionInfo> *anchors);
-void marshalItemInfoList(StorageIntf *s, QList<ListItemInfo> *sli);
-void marshalObjPointer(StorageIntf *s,void *obj);
-void marshalSectionDict(StorageIntf *s,SectionDict *sections);
-void marshalMemberSDict(StorageIntf *s,MemberSDict *memberSDict);
-void marshalDocInfo(StorageIntf *s,DocInfo *docInfo);
-void marshalBriefInfo(StorageIntf *s,BriefInfo *briefInfo);
-void marshalBodyInfo(StorageIntf *s,BodyInfo *bodyInfo);
-void marshalGroupList(StorageIntf *s,GroupList *groupList);
-void marshalMemberList(StorageIntf *s,MemberList *ml);
-void marshalExampleSDict(StorageIntf *s,ExampleSDict *ed);
-void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls);
-void marshalEntry(StorageIntf *s,Entry *e);
-void marshalEntryTree(StorageIntf *s,Entry *e);
-
-//----- unmarshaling function: byte stream -> datatype ------------------
-
-int unmarshalInt(StorageIntf *s);
-uint unmarshalUInt(StorageIntf *s);
-uint64 unmarshalUInt64(StorageIntf *s);
-bool unmarshalBool(StorageIntf *s);
-QCString unmarshalQCString(StorageIntf *s);
-QGString unmarshalQGString(StorageIntf *s);
-ArgumentList * unmarshalArgumentList(StorageIntf *s);
-QList<ArgumentList> *unmarshalArgumentLists(StorageIntf *s);
-QList<BaseInfo> * unmarshalBaseInfoList(StorageIntf *s);
-QList<Grouping> * unmarshalGroupingList(StorageIntf *s);
-QList<SectionInfo> * unmarshalSectionInfoList(StorageIntf *s);
-QList<ListItemInfo> *unmarshalItemInfoList(StorageIntf *s);
-void * unmarshalObjPointer(StorageIntf *s);
-SectionDict * unmarshalSectionDict(StorageIntf *s);
-MemberSDict * unmarshalMemberSDict(StorageIntf *s);
-DocInfo * unmarshalDocInfo(StorageIntf *s);
-BriefInfo * unmarshalBriefInfo(StorageIntf *s);
-BodyInfo * unmarshalBodyInfo(StorageIntf *s);
-GroupList * unmarshalGroupList(StorageIntf *s);
-MemberList * unmarshalMemberList(StorageIntf *s);
-ExampleSDict * unmarshalExampleSDict(StorageIntf *s);
-SDict<MemberList> * unmarshalMemberLists(StorageIntf *s);
-Entry * unmarshalEntry(StorageIntf *s);
-Entry * unmarshalEntryTree(StorageIntf *s);
-
-#endif
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 6f449d5..a73975d 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -35,7 +35,6 @@
#include "dot.h"
#include "searchindex.h"
#include "parserintf.h"
-#include "marshal.h"
#include "objcache.h"
#include "vhdldocgen.h"
@@ -44,10 +43,334 @@
#include "namespacedef.h"
#include "filedef.h"
#include "config.h"
+#include "definitionimpl.h"
//-----------------------------------------------------------------------------
-int MemberDef::s_indentLevel = 0;
+class MemberDefImpl : public DefinitionImpl, public MemberDef
+{
+ public:
+ MemberDefImpl(const char *defFileName,int defLine,int defColumn,
+ const char *type,const char *name,const char *args,
+ const char *excp,Protection prot,Specifier virt,bool stat,
+ Relationship related,MemberType t,const ArgumentList *tal,
+ const ArgumentList *al,const char *metaData);
+ virtual ~MemberDefImpl();
+
+ virtual DefType definitionType() const { return TypeMember; }
+ virtual MemberDef *deepCopy() const;
+ virtual void moveTo(Definition *);
+ virtual QCString getOutputFileBase() const;
+ virtual QCString getReference() const;
+ virtual QCString anchor() const;
+ virtual const char *declaration() const;
+ virtual const char *definition() const;
+ virtual const char *typeString() const;
+ virtual const char *argsString() const;
+ virtual const char *excpString() const;
+ virtual const char *bitfieldString() const;
+ virtual const char *extraTypeChars() const;
+ virtual const QCString &initializer() const;
+ virtual int initializerLines() const;
+ virtual uint64 getMemberSpecifiers() const;
+ virtual MemberList *getSectionList(Definition *d) const;
+ virtual QCString displayDefinition() const;
+ virtual ClassDef *getClassDef() const;
+ virtual FileDef *getFileDef() const;
+ virtual NamespaceDef* getNamespaceDef() const;
+ virtual ClassDef *accessorClass() const;
+ virtual const char *getReadAccessor() const;
+ virtual const char *getWriteAccessor() const;
+ virtual GroupDef *getGroupDef() const;
+ virtual Grouping::GroupPri_t getGroupPri() const;
+ virtual const char *getGroupFileName() const;
+ virtual int getGroupStartLine() const;
+ virtual bool getGroupHasDocs() const;
+ virtual QCString qualifiedName() const;
+ virtual QCString objCMethodName(bool localLink,bool showStatic) const;
+ virtual Protection protection() const;
+ virtual Specifier virtualness(int count=0) const;
+ virtual MemberType memberType() const;
+ virtual QCString memberTypeName() const;
+ virtual bool isSignal() const;
+ virtual bool isSlot() const;
+ virtual bool isVariable() const;
+ virtual bool isEnumerate() const;
+ virtual bool isEnumValue() const;
+ virtual bool isTypedef() const;
+ virtual bool isSequence() const;
+ virtual bool isDictionary() const;
+ virtual bool isFunction() const;
+ virtual bool isFunctionPtr() const;
+ virtual bool isDefine() const;
+ virtual bool isFriend() const;
+ virtual bool isDCOP() const;
+ virtual bool isProperty() const;
+ virtual bool isEvent() const;
+ virtual bool isRelated() const;
+ virtual bool isForeign() const;
+ virtual bool isStatic() const;
+ virtual bool isInline() const;
+ virtual bool isExplicit() const;
+ virtual bool isMutable() const;
+ virtual bool isGettable() const;
+ virtual bool isPrivateGettable() const;
+ virtual bool isProtectedGettable() const;
+ virtual bool isSettable() const;
+ virtual bool isPrivateSettable() const;
+ virtual bool isProtectedSettable() const;
+ virtual bool isReadable() const;
+ virtual bool isWritable() const;
+ virtual bool isAddable() const;
+ virtual bool isRemovable() const;
+ virtual bool isRaisable() const;
+ virtual bool isFinal() const;
+ virtual bool isAbstract() const;
+ virtual bool isOverride() const;
+ virtual bool isInitonly() const;
+ virtual bool isOptional() const;
+ virtual bool isRequired() const;
+ virtual bool isNonAtomic() const;
+ virtual bool isCopy() const;
+ virtual bool isAssign() const;
+ virtual bool isRetain() const;
+ virtual bool isWeak() const;
+ virtual bool isStrong() const;
+ virtual bool isUnretained() const;
+ virtual bool isNew() const;
+ virtual bool isSealed() const;
+ virtual bool isImplementation() const;
+ virtual bool isExternal() const;
+ virtual bool isAlias() const;
+ virtual bool isDefault() const;
+ virtual bool isDelete() const;
+ virtual bool isNoExcept() const;
+ virtual bool isAttribute() const;
+ virtual bool isUNOProperty() const;
+ virtual bool isReadonly() const;
+ virtual bool isBound() const;
+ virtual bool isConstrained() const;
+ virtual bool isTransient() const;
+ virtual bool isMaybeVoid() const;
+ virtual bool isMaybeDefault() const;
+ virtual bool isMaybeAmbiguous() const;
+ virtual bool isPublished() const;
+ virtual bool isTemplateSpecialization() const;
+ virtual bool hasDocumentedParams() const;
+ virtual bool hasDocumentedReturnType() const;
+ virtual bool isObjCMethod() const;
+ virtual bool isObjCProperty() const;
+ virtual bool isConstructor() const;
+ virtual bool isDestructor() const;
+ virtual bool hasOneLineInitializer() const;
+ virtual bool hasMultiLineInitializer() const;
+ virtual bool showInCallGraph() const;
+ virtual bool isStrongEnumValue() const;
+ virtual bool livesInsideEnum() const;
+ virtual bool isSliceLocal() const;
+ virtual bool isConstExpr() const;
+ virtual bool isFriendToHide() const;
+ virtual bool isNotFriend() const;
+ virtual bool isFunctionOrSignalSlot() const;
+ virtual bool isRelatedOrFriend() const;
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual bool hasDocumentation() const;
+ virtual bool isDeleted() const;
+ virtual bool isBriefSectionVisible() const;
+ virtual bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
+ virtual bool isDetailedSectionLinkable() const;
+ virtual bool isFriendClass() const;
+ virtual bool isDocumentedFriendClass() const;
+ virtual MemberDef *reimplements() const;
+ virtual MemberList *reimplementedBy() const;
+ virtual bool isReimplementedBy(ClassDef *cd) const;
+ virtual ClassDef *relatedAlso() const;
+ virtual bool hasDocumentedEnumValues() const;
+ virtual MemberDef *getAnonymousEnumType() const;
+ virtual bool isDocsForDefinition() const;
+ virtual MemberDef *getEnumScope() const;
+ virtual MemberList *enumFieldList() const;
+ virtual void setEnumBaseType(const QCString &type);
+ virtual QCString enumBaseType() const;
+ virtual bool hasExamples();
+ virtual ExampleSDict *getExamples() const;
+ virtual bool isPrototype() const;
+ virtual ArgumentList *argumentList() const;
+ virtual ArgumentList *declArgumentList() const;
+ virtual ArgumentList *templateArguments() const;
+ virtual QList<ArgumentList> *definitionTemplateParameterLists() const;
+ virtual int getMemberGroupId() const;
+ virtual MemberGroup *getMemberGroup() const;
+ virtual bool fromAnonymousScope() const;
+ virtual bool anonymousDeclShown() const;
+ virtual MemberDef *fromAnonymousMember() const;
+ virtual bool hasCallGraph() const;
+ virtual bool hasCallerGraph() const;
+ virtual bool visibleMemberGroup(bool hideNoHeader);
+ virtual bool hasReferencesRelation() const;
+ virtual bool hasReferencedByRelation() const;
+ virtual MemberDef *templateMaster() const;
+ virtual QCString getScopeString() const;
+ virtual ClassDef *getClassDefOfAnonymousType();
+ virtual bool isTypedefValCached() const;
+ virtual ClassDef *getCachedTypedefVal() const;
+ virtual QCString getCachedTypedefTemplSpec() const;
+ virtual QCString getCachedResolvedTypedef() const;
+ virtual MemberDef *memberDefinition() const;
+ virtual MemberDef *memberDeclaration() const;
+ virtual MemberDef *inheritsDocsFrom() const;
+ virtual MemberDef *getGroupAlias() const;
+ virtual ClassDef *category() const;
+ virtual MemberDef *categoryRelation() const;
+ virtual QCString displayName(bool=TRUE) const;
+ virtual QCString getDeclType() const;
+ virtual void getLabels(QStrList &sl,Definition *container) const;
+ virtual const ArgumentList *typeConstraints() const;
+ virtual QCString documentation() const;
+ virtual QCString briefDescription(bool abbr=FALSE) const;
+ virtual QCString fieldType() const;
+ virtual bool isReference() const;
+ virtual QCString getDeclFileName() const;
+ virtual int getDeclLine() const;
+ virtual int getDeclColumn() const;
+ virtual void setMemberType(MemberType t);
+ virtual void setDefinition(const char *d);
+ virtual void setFileDef(FileDef *fd);
+ virtual void setAnchor();
+ virtual void setProtection(Protection p);
+ virtual void setMemberSpecifiers(uint64 s);
+ virtual void mergeMemberSpecifiers(uint64 s);
+ virtual void setInitializer(const char *i);
+ virtual void setBitfields(const char *s);
+ virtual void setMaxInitLines(int lines);
+ virtual void setMemberClass(ClassDef *cd);
+ virtual void setSectionList(Definition *d,MemberList *sl);
+ virtual void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
+ const QCString &fileName,int startLine,bool hasDocs,
+ MemberDef *member=0);
+ virtual void setReadAccessor(const char *r);
+ virtual void setWriteAccessor(const char *w);
+ virtual void setTemplateSpecialization(bool b);
+ virtual void makeRelated();
+ virtual void makeForeign();
+ virtual void setHasDocumentedParams(bool b);
+ virtual void setHasDocumentedReturnType(bool b);
+ virtual void setInheritsDocsFrom(MemberDef *md);
+ virtual void setTagInfo(TagInfo *i);
+ virtual void setArgsString(const char *as);
+ virtual void setReimplements(MemberDef *md);
+ virtual void insertReimplementedBy(MemberDef *md);
+ virtual void setRelatedAlso(ClassDef *cd);
+ virtual void insertEnumField(MemberDef *md);
+ virtual void setEnumScope(MemberDef *md,bool livesInsideEnum=FALSE);
+ virtual void setEnumClassScope(ClassDef *cd);
+ virtual void setDocumentedEnumValues(bool value);
+ virtual void setAnonymousEnumType(MemberDef *md);
+ virtual bool addExample(const char *anchor,const char *name,const char *file);
+ virtual void setPrototype(bool p,const QCString &df,int line, int column);
+ virtual void setExplicitExternal(bool b,const QCString &df,int line,int column);
+ virtual void setDeclFile(const QCString &df,int line,int column);
+ virtual void setArgumentList(ArgumentList *al);
+ virtual void setDeclArgumentList(ArgumentList *al);
+ virtual void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
+ virtual void setTypeConstraints(ArgumentList *al);
+ virtual void setType(const char *t);
+ virtual void setAccessorType(ClassDef *cd,const char *t);
+ virtual void setNamespace(NamespaceDef *nd);
+ virtual void setMemberGroup(MemberGroup *grp);
+ virtual void setMemberGroupId(int id);
+ virtual void makeImplementationDetail();
+ virtual void setFromAnonymousScope(bool b);
+ virtual void setFromAnonymousMember(MemberDef *m);
+ virtual void enableCallGraph(bool e);
+ virtual void enableCallerGraph(bool e);
+ virtual void enableReferencedByRelation(bool e);
+ virtual void enableReferencesRelation(bool e);
+ virtual void setTemplateMaster(MemberDef *mt);
+ virtual void addListReference(Definition *d);
+ virtual void setDocsForDefinition(bool b);
+ virtual void setGroupAlias(MemberDef *md);
+ virtual void cacheTypedefVal(ClassDef *val,const QCString &templSpec,const QCString &resolvedType);
+ virtual void invalidateTypedefValCache();
+ virtual void invalidateCachedArgumentTypes();
+ virtual void setMemberDefinition(MemberDef *md);
+ virtual void setMemberDeclaration(MemberDef *md);
+ virtual void setAnonymousUsed();
+ virtual void copyArgumentNames(MemberDef *bmd);
+ virtual void setCategory(ClassDef *);
+ virtual void setCategoryRelation(MemberDef *);
+ virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
+ virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ virtual void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine);
+ virtual void setHidden(bool b);
+ virtual void writeDeclaration(OutputList &ol,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
+ bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0);
+ virtual void writeDocumentation(MemberList *ml,int memCount,int memTotal,OutputList &ol,
+ const char *scopeName,Definition *container,
+ bool inGroup,bool showEnumValues=FALSE,bool
+ showInline=FALSE);
+ virtual void writeMemberDocSimple(OutputList &ol,Definition *container);
+ virtual void writeEnumDeclaration(OutputList &typeDecl,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
+ virtual void writeTagFile(FTextStream &);
+ virtual void warnIfUndocumented();
+ virtual void warnIfUndocumentedParams();
+ virtual MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
+ ArgumentList *actualArgs);
+ virtual void findSectionsInDocumentation();
+ virtual void writeLink(OutputList &ol,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
+ bool onlyText=FALSE);
+ virtual void addToSearchIndex();
+
+ private:
+ void _computeLinkableInProject();
+ void _computeIsConstructor();
+ void _computeIsDestructor();
+ void _writeGroupInclude(OutputList &ol,bool inGroup);
+ void _writeCallGraph(OutputList &ol);
+ void _writeCallerGraph(OutputList &ol);
+ void _writeReimplements(OutputList &ol);
+ void _writeReimplementedBy(OutputList &ol);
+ void _writeExamples(OutputList &ol);
+ void _writeTypeConstraints(OutputList &ol);
+ void _writeEnumValues(OutputList &ol,Definition *container,
+ const QCString &cfname,const QCString &ciname,
+ const QCString &cname);
+ void _writeCategoryRelation(OutputList &ol);
+ void _writeTagData(const DefType);
+
+ static int s_indentLevel;
+
+ // disable copying of member defs
+ MemberDefImpl(const MemberDefImpl &);
+ MemberDefImpl &operator=(const MemberDefImpl &);
+
+
+ // PIMPL idiom
+ class IMPL;
+ IMPL *m_impl;
+ uchar m_isLinkableCached; // 0 = not cached, 1=FALSE, 2=TRUE
+ uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
+ uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
+};
+
+MemberDef *createMemberDef(const char *defFileName,int defLine,int defColumn,
+ const char *type,const char *name,const char *args,
+ const char *excp,Protection prot,Specifier virt,bool stat,
+ Relationship related,MemberType t,const ArgumentList *tal,
+ const ArgumentList *al,const char *metaData)
+{
+ return new MemberDefImpl(defFileName,defLine,defColumn,type,name,args,excp,prot,virt,
+ stat,related,t,tal,al,metaData);
+}
+
+
+//-----------------------------------------------------------------------------
+
+int MemberDefImpl::s_indentLevel = 0;
//-----------------------------------------------------------------------------
@@ -194,9 +517,9 @@ static bool writeDefArgumentList(OutputList &ol,Definition *scope,MemberDef *md)
cName=cName.mid(il,ir-il+1);
//printf("1. cName=%s\n",cName.data());
}
- else if (scope->definitionType()==Definition::TypeClass && ((ClassDef*)scope)->templateArguments())
+ else if (scope->definitionType()==Definition::TypeClass && (dynamic_cast<ClassDef*>(scope))->templateArguments())
{
- cName=tempArgListToString(((ClassDef*)scope)->templateArguments(),scope->getLanguage());
+ cName=tempArgListToString((dynamic_cast<ClassDef*>(scope))->templateArguments(),scope->getLanguage());
//printf("2. cName=%s\n",cName.data());
}
else // no template specifier
@@ -476,11 +799,11 @@ static void writeTemplatePrefix(OutputList &ol,ArgumentList *al)
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
-class MemberDefImpl
+class MemberDefImpl::IMPL
{
public:
- MemberDefImpl();
- ~MemberDefImpl();
+ IMPL();
+ ~IMPL();
void init(Definition *def,const char *t,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,
MemberType mt,const ArgumentList *tal,
@@ -601,7 +924,7 @@ class MemberDefImpl
int declColumn;
};
-MemberDefImpl::MemberDefImpl() :
+MemberDefImpl::IMPL::IMPL() :
enumFields(0),
redefinedBy(0),
exampleSDict(0),
@@ -618,7 +941,7 @@ MemberDefImpl::MemberDefImpl() :
{
}
-MemberDefImpl::~MemberDefImpl()
+MemberDefImpl::IMPL::~IMPL()
{
delete redefinedBy;
delete exampleSDict;
@@ -631,7 +954,7 @@ MemberDefImpl::~MemberDefImpl()
delete declArgList;
}
-void MemberDefImpl::init(Definition *def,
+void MemberDefImpl::IMPL::init(Definition *def,
const char *t,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,
MemberType mt,const ArgumentList *tal,
@@ -763,33 +1086,32 @@ void MemberDefImpl::init(Definition *def,
* \param meta Slice metadata.
*/
-MemberDef::MemberDef(const char *df,int dl,int dc,
+MemberDefImpl::MemberDefImpl(const char *df,int dl,int dc,
const char *t,const char *na,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,MemberType mt,
const ArgumentList *tal,const ArgumentList *al,const char *meta
- ) : Definition(df,dl,dc,removeRedundantWhiteSpace(na)), visited(FALSE)
+ ) : DefinitionImpl(df,dl,dc,removeRedundantWhiteSpace(na))
{
- //printf("MemberDef::MemberDef(%s)\n",na);
- m_impl = new MemberDefImpl;
+ //printf("MemberDefImpl::MemberDef(%s)\n",na);
+ m_impl = new MemberDefImpl::IMPL;
m_impl->init(this,t,a,e,p,v,s,r,mt,tal,al,meta);
- number_of_flowkw = 1;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
m_isDestructorCached = 0;
}
-MemberDef::MemberDef(const MemberDef &md) : Definition(md), visited(FALSE)
+MemberDefImpl::MemberDefImpl(const MemberDefImpl &md) : DefinitionImpl(md)
{
- m_impl = new MemberDefImpl;
+ m_impl = new MemberDefImpl::IMPL;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
m_isDestructorCached = 0;
}
-MemberDef *MemberDef::deepCopy() const
+MemberDef *MemberDefImpl::deepCopy() const
{
//MemberDef *result = new MemberDef(getDefFileName(),getDefLine(),name());
- MemberDef *result = new MemberDef(*this);
+ MemberDefImpl *result = new MemberDefImpl(*this);
// first copy everything by reference
*result->m_impl = *m_impl;
// clear pointers owned by object
@@ -860,20 +1182,20 @@ MemberDef *MemberDef::deepCopy() const
return result;
}
-void MemberDef::moveTo(Definition *scope)
+void MemberDefImpl::moveTo(Definition *scope)
{
setOuterScope(scope);
if (scope->definitionType()==Definition::TypeClass)
{
- m_impl->classDef = (ClassDef*)scope;
+ m_impl->classDef = dynamic_cast<ClassDef*>(scope);
}
else if (scope->definitionType()==Definition::TypeFile)
{
- m_impl->fileDef = (FileDef*)scope;
+ m_impl->fileDef = dynamic_cast<FileDef*>(scope);
}
else if (scope->definitionType()==Definition::TypeNamespace)
{
- m_impl->nspace = (NamespaceDef*)scope;
+ m_impl->nspace = dynamic_cast<NamespaceDef*>(scope);
}
m_isLinkableCached = 0;
m_isConstructorCached = 0;
@@ -881,19 +1203,19 @@ void MemberDef::moveTo(Definition *scope)
/*! Destroys the member definition. */
-MemberDef::~MemberDef()
+MemberDefImpl::~MemberDefImpl()
{
delete m_impl;
//printf("%p: ~MemberDef()\n",this);
m_impl=0;
}
-void MemberDef::setReimplements(MemberDef *md)
+void MemberDefImpl::setReimplements(MemberDef *md)
{
m_impl->redefines = md;
}
-void MemberDef::insertReimplementedBy(MemberDef *md)
+void MemberDefImpl::insertReimplementedBy(MemberDef *md)
{
if (m_impl->templateMaster)
{
@@ -906,17 +1228,17 @@ void MemberDef::insertReimplementedBy(MemberDef *md)
}
}
-MemberDef *MemberDef::reimplements() const
+MemberDef *MemberDefImpl::reimplements() const
{
return m_impl->redefines;
}
-MemberList *MemberDef::reimplementedBy() const
+MemberList *MemberDefImpl::reimplementedBy() const
{
return m_impl->redefinedBy;
}
-bool MemberDef::isReimplementedBy(ClassDef *cd) const
+bool MemberDefImpl::isReimplementedBy(ClassDef *cd) const
{
if (cd && m_impl->redefinedBy)
{
@@ -937,13 +1259,13 @@ bool MemberDef::isReimplementedBy(ClassDef *cd) const
return FALSE;
}
-void MemberDef::insertEnumField(MemberDef *md)
+void MemberDefImpl::insertEnumField(MemberDef *md)
{
if (m_impl->enumFields==0) m_impl->enumFields=new MemberList(MemberListType_enumFields);
m_impl->enumFields->append(md);
}
-bool MemberDef::addExample(const char *anchor,const char *nameStr,
+bool MemberDefImpl::addExample(const char *anchor,const char *nameStr,
const char *file)
{
//printf("%s::addExample(%s,%s,%s)\n",name().data(),anchor,nameStr,file);
@@ -961,7 +1283,7 @@ bool MemberDef::addExample(const char *anchor,const char *nameStr,
return FALSE;
}
-bool MemberDef::hasExamples()
+bool MemberDefImpl::hasExamples()
{
if (m_impl->exampleSDict==0)
return FALSE;
@@ -969,7 +1291,7 @@ bool MemberDef::hasExamples()
return m_impl->exampleSDict->count()>0;
}
-QCString MemberDef::getOutputFileBase() const
+QCString MemberDefImpl::getOutputFileBase() const
{
static bool separateMemberPages = Config_getBool(SEPARATE_MEMBER_PAGES);
static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
@@ -1029,9 +1351,9 @@ QCString MemberDef::getOutputFileBase() const
return baseName;
}
-QCString MemberDef::getReference() const
+QCString MemberDefImpl::getReference() const
{
- QCString ref = Definition::getReference();
+ QCString ref = DefinitionImpl::getReference();
if (!ref.isEmpty())
{
return ref;
@@ -1059,7 +1381,7 @@ QCString MemberDef::getReference() const
return "";
}
-QCString MemberDef::anchor() const
+QCString MemberDefImpl::anchor() const
{
QCString result=m_impl->anc;
if (m_impl->groupAlias) return m_impl->groupAlias->anchor();
@@ -1082,12 +1404,12 @@ QCString MemberDef::anchor() const
return result;
}
-void MemberDef::_computeLinkableInProject()
+void MemberDefImpl::_computeLinkableInProject()
{
static bool extractStatic = Config_getBool(EXTRACT_STATIC);
static bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
m_isLinkableCached = 2; // linkable
- //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data());
+ //printf("MemberDefImpl::isLinkableInProject(name=%s)\n",name().data());
if (isHidden())
{
//printf("is hidden\n");
@@ -1156,42 +1478,42 @@ void MemberDef::_computeLinkableInProject()
return; // linkable!
}
-void MemberDef::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
+void MemberDefImpl::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
{
- Definition::setDocumentation(d,docFile,docLine,stripWhiteSpace);
+ DefinitionImpl::setDocumentation(d,docFile,docLine,stripWhiteSpace);
m_isLinkableCached = 0;
}
-void MemberDef::setBriefDescription(const char *b,const char *briefFile,int briefLine)
+void MemberDefImpl::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{
- Definition::setBriefDescription(b,briefFile,briefLine);
+ DefinitionImpl::setBriefDescription(b,briefFile,briefLine);
m_isLinkableCached = 0;
}
-void MemberDef::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
+void MemberDefImpl::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
{
- Definition::setInbodyDocumentation(d,inbodyFile,inbodyLine);
+ DefinitionImpl::setInbodyDocumentation(d,inbodyFile,inbodyLine);
m_isLinkableCached = 0;
}
-void MemberDef::setHidden(bool b)
+void MemberDefImpl::setHidden(bool b)
{
- Definition::setHidden(b);
+ DefinitionImpl::setHidden(b);
m_isLinkableCached = 0;
}
-bool MemberDef::isLinkableInProject() const
+bool MemberDefImpl::isLinkableInProject() const
{
if (m_isLinkableCached==0)
{
- MemberDef *that = (MemberDef*)this;
+ MemberDefImpl *that = (MemberDefImpl*)this;
that->_computeLinkableInProject();
}
ASSERT(m_isLinkableCached>0);
return m_isLinkableCached==2;
}
-bool MemberDef::isLinkable() const
+bool MemberDefImpl::isLinkable() const
{
if (m_impl->templateMaster)
{
@@ -1204,7 +1526,7 @@ bool MemberDef::isLinkable() const
}
-void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
+void MemberDefImpl::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
{
if (lists)
{
@@ -1213,7 +1535,7 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
}
}
-void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
+void MemberDefImpl::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
FileDef *fd,GroupDef *gd,bool onlyText)
{
SrcLangExt lang = getLanguage();
@@ -1266,7 +1588,7 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
/*! If this member has an anonymous class/struct/union as its type, then
* this method will return the ClassDef that describes this return type.
*/
-ClassDef *MemberDef::getClassDefOfAnonymousType()
+ClassDef *MemberDefImpl::getClassDefOfAnonymousType()
{
if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType;
@@ -1319,7 +1641,7 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
/*! This methods returns TRUE iff the brief section (also known as
* declaration section) is visible in the documentation.
*/
-bool MemberDef::isBriefSectionVisible() const
+bool MemberDefImpl::isBriefSectionVisible() const
{
static bool extractStatic = Config_getBool(EXTRACT_STATIC);
static bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
@@ -1413,11 +1735,11 @@ bool MemberDef::isBriefSectionVisible() const
/*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor &&
visibleIfFriendCompound &&
!m_impl->annScope && !isHidden();
- //printf("MemberDef::isBriefSectionVisible() %d\n",visible);
+ //printf("MemberDefImpl::isBriefSectionVisible() %d\n",visible);
return visible;
}
-QCString MemberDef::getDeclType() const
+QCString MemberDefImpl::getDeclType() const
{
QCString ltype(m_impl->type);
if (isTypedef() && getLanguage() != SrcLangExt_Slice)
@@ -1445,11 +1767,11 @@ QCString MemberDef::getDeclType() const
return ltype;
}
-void MemberDef::writeDeclaration(OutputList &ol,
+void MemberDefImpl::writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup, ClassDef *inheritedFrom,const char *inheritId)
{
- //printf("%s MemberDef::writeDeclaration() inGroup=%d\n",qualifiedName().data(),inGroup);
+ //printf("%s MemberDefImpl::writeDeclaration() inGroup=%d\n",qualifiedName().data(),inGroup);
// hide enum value, since they appear already as part of the enum, unless they
// are explicitly grouped.
@@ -1467,7 +1789,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
//_writeTagData(compoundType);
- _addToSearchIndex();
+ addToSearchIndex();
QCString cname = d->name();
QCString cdname = d->displayName();
@@ -1900,7 +2222,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
warnIfUndocumented();
}
-bool MemberDef::isDetailedSectionLinkable() const
+bool MemberDefImpl::isDetailedSectionLinkable() const
{
static bool extractAll = Config_getBool(EXTRACT_ALL);
static bool alwaysDetailedSec = Config_getBool(ALWAYS_DETAILED_SEC);
@@ -1970,7 +2292,7 @@ bool MemberDef::isDetailedSectionLinkable() const
return result;
}
-bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
+bool MemberDefImpl::isDetailedSectionVisible(bool inGroup,bool inFile) const
{
static bool separateMemPages = Config_getBool(SEPARATE_MEMBER_PAGES);
static bool inlineSimpleStructs = Config_getBool(INLINE_SIMPLE_STRUCTS);
@@ -1988,7 +2310,7 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
return result;
}
-void MemberDef::getLabels(QStrList &sl,Definition *container) const
+void MemberDefImpl::getLabels(QStrList &sl,Definition *container) const
{
static bool inlineInfo = Config_getBool(INLINE_INFO);
@@ -2106,7 +2428,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
}
}
-void MemberDef::_writeCallGraph(OutputList &ol)
+void MemberDefImpl::_writeCallGraph(OutputList &ol)
{
// write call graph
if (m_impl->hasCallGraph
@@ -2130,7 +2452,7 @@ void MemberDef::_writeCallGraph(OutputList &ol)
}
}
-void MemberDef::_writeCallerGraph(OutputList &ol)
+void MemberDefImpl::_writeCallerGraph(OutputList &ol)
{
if (m_impl->hasCallerGraph
&& (isFunction() || isSlot() || isSignal()) && Config_getBool(HAVE_DOT)
@@ -2153,7 +2475,7 @@ void MemberDef::_writeCallerGraph(OutputList &ol)
}
}
-void MemberDef::_writeReimplements(OutputList &ol)
+void MemberDefImpl::_writeReimplements(OutputList &ol)
{
MemberDef *bmd=reimplements();
ClassDef *bcd=0;
@@ -2212,7 +2534,7 @@ void MemberDef::_writeReimplements(OutputList &ol)
}
}
-void MemberDef::_writeReimplementedBy(OutputList &ol)
+void MemberDefImpl::_writeReimplementedBy(OutputList &ol)
{
MemberList *bml=reimplementedBy();
if (bml)
@@ -2287,7 +2609,7 @@ void MemberDef::_writeReimplementedBy(OutputList &ol)
}
}
-void MemberDef::_writeCategoryRelation(OutputList &ol)
+void MemberDefImpl::_writeCategoryRelation(OutputList &ol)
{
if (m_impl->classDef) // this should be a member of a class/category
{
@@ -2340,7 +2662,7 @@ void MemberDef::_writeCategoryRelation(OutputList &ol)
}
}
-void MemberDef::_writeExamples(OutputList &ol)
+void MemberDefImpl::_writeExamples(OutputList &ol)
{
// write the list of examples that use this member
if (hasExamples())
@@ -2353,7 +2675,7 @@ void MemberDef::_writeExamples(OutputList &ol)
}
}
-void MemberDef::_writeTypeConstraints(OutputList &ol)
+void MemberDefImpl::_writeTypeConstraints(OutputList &ol)
{
if (m_impl->typeConstraints)
{
@@ -2361,7 +2683,7 @@ void MemberDef::_writeTypeConstraints(OutputList &ol)
}
}
-void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
+void MemberDefImpl::_writeEnumValues(OutputList &ol,Definition *container,
const QCString &cfname,const QCString &ciname,
const QCString &cname)
{
@@ -2435,7 +2757,7 @@ void MemberDef::_writeEnumValues(OutputList &ol,Definition *container,
}
}
-QCString MemberDef::displayDefinition() const
+QCString MemberDefImpl::displayDefinition() const
{
QCString ldef = definition();
QCString title = name();
@@ -2518,7 +2840,7 @@ QCString MemberDef::displayDefinition() const
return substitute(ldef,"::",sep);
}
-void MemberDef::_writeGroupInclude(OutputList &ol,bool inGroup)
+void MemberDefImpl::_writeGroupInclude(OutputList &ol,bool inGroup)
{
// only write out the include file if this is not part of a class or file
// definition
@@ -2562,7 +2884,7 @@ void MemberDef::_writeGroupInclude(OutputList &ol,bool inGroup)
/*! Writes the "detailed documentation" section of this member to
* all active output formats.
*/
-void MemberDef::writeDocumentation(MemberList *ml,
+void MemberDefImpl::writeDocumentation(MemberList *ml,
int memCount,int memTotal,
OutputList &ol,
const char *scName,
@@ -2577,7 +2899,7 @@ void MemberDef::writeDocumentation(MemberList *ml,
bool inFile = container->definitionType()==Definition::TypeFile;
bool hasDocs = isDetailedSectionVisible(inGroup,inFile);
- //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d sectionLinkable=%d\n",
+ //printf("MemberDefImpl::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d sectionLinkable=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup,isDetailedSectionLinkable());
//if ( !hasDocs ) return;
@@ -2597,7 +2919,7 @@ void MemberDef::writeDocumentation(MemberList *ml,
if (getClassDef()) { scopeName=getClassDef()->displayName(); scopedContainer=getClassDef(); }
else if (getNamespaceDef()) { scopeName=getNamespaceDef()->displayName(); scopedContainer=getNamespaceDef(); }
else if (getFileDef()) { scopeName=getFileDef()->displayName(); scopedContainer=getFileDef(); }
- ciname = ((GroupDef *)container)->groupTitle();
+ ciname = (dynamic_cast<GroupDef *>(container))->groupTitle();
}
else if (container->definitionType()==TypeFile && getNamespaceDef() && lang != SrcLangExt_Python)
{ // member is in a namespace, but is written as part of the file documentation
@@ -3141,7 +3463,7 @@ static Definition *getClassFromType(Definition *scope,const QCString &type,SrcLa
}
#endif
-QCString MemberDef::fieldType() const
+QCString MemberDefImpl::fieldType() const
{
QCString type = m_impl->accessorType;
if (type.isEmpty())
@@ -3153,7 +3475,7 @@ QCString MemberDef::fieldType() const
return simplifyTypeForTable(type);
}
-void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
+void MemberDefImpl::writeMemberDocSimple(OutputList &ol, Definition *container)
{
Definition *scope = getOuterScope();
QCString doxyName = name();
@@ -3171,7 +3493,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
//printf("===> %s::anonymous: %s\n",name().data(),cd?cd->name().data():"<none>");
if (container && container->definitionType()==Definition::TypeClass &&
- !((ClassDef*)container)->isJavaEnum())
+ !(dynamic_cast<ClassDef*>(container))->isJavaEnum())
{
ol.startInlineMemberType();
ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
@@ -3248,7 +3570,7 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
ol.endInlineMemberDoc();
}
-QCString MemberDef::memberTypeName() const
+QCString MemberDefImpl::memberTypeName() const
{
switch (m_impl->mtype)
{
@@ -3272,7 +3594,7 @@ QCString MemberDef::memberTypeName() const
}
}
-void MemberDef::warnIfUndocumented()
+void MemberDefImpl::warnIfUndocumented()
{
/*
* Removed bug_303020:
@@ -3320,7 +3642,7 @@ void MemberDef::warnIfUndocumented()
}
-void MemberDef::warnIfUndocumentedParams()
+void MemberDefImpl::warnIfUndocumentedParams()
{
if (!Config_getBool(EXTRACT_ALL) &&
Config_getBool(WARN_IF_UNDOCUMENTED) &&
@@ -3344,14 +3666,14 @@ void MemberDef::warnIfUndocumentedParams()
}
}
-bool MemberDef::isFriendClass() const
+bool MemberDefImpl::isFriendClass() const
{
return (isFriend() &&
(m_impl->type=="friend class" || m_impl->type=="friend struct" ||
m_impl->type=="friend union"));
}
-bool MemberDef::isDocumentedFriendClass() const
+bool MemberDefImpl::isDocumentedFriendClass() const
{
ClassDef *fcd=0;
QCString baseName=name();
@@ -3361,39 +3683,39 @@ bool MemberDef::isDocumentedFriendClass() const
(fcd=getClass(baseName)) && fcd->isLinkable());
}
-bool MemberDef::isDeleted() const
+bool MemberDefImpl::isDeleted() const
{
return m_impl->defArgList && m_impl->defArgList->isDeleted;
}
-bool MemberDef::hasDocumentation() const
+bool MemberDefImpl::hasDocumentation() const
{
- return Definition::hasDocumentation() ||
+ return DefinitionImpl::hasDocumentation() ||
(m_impl->mtype==MemberType_Enumeration && m_impl->docEnumValues) || // has enum values
(m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()); // has doc arguments
}
#if 0
-bool MemberDef::hasUserDocumentation() const
+bool MemberDefImpl::hasUserDocumentation() const
{
- bool hasDocs = Definition::hasUserDocumentation();
+ bool hasDocs = DefinitionImpl::hasUserDocumentation();
return hasDocs;
}
#endif
-void MemberDef::setMemberGroup(MemberGroup *grp)
+void MemberDefImpl::setMemberGroup(MemberGroup *grp)
{
m_impl->memberGroup = grp;
}
-bool MemberDef::visibleMemberGroup(bool hideNoHeader)
+bool MemberDefImpl::visibleMemberGroup(bool hideNoHeader)
{
return m_impl->memberGroup!=0 &&
(!hideNoHeader || m_impl->memberGroup->header()!="[NOHEADER]");
}
-QCString MemberDef::getScopeString() const
+QCString MemberDefImpl::getScopeString() const
{
QCString result;
if (getClassDef()) result=getClassDef()->displayName();
@@ -3426,7 +3748,7 @@ static QCString escapeAnchor(const QCString &anchor)
}
#endif
-void MemberDef::setAnchor()
+void MemberDefImpl::setAnchor()
{
QCString memAnchor = name();
if (!m_impl->args.isEmpty()) memAnchor+=m_impl->args;
@@ -3455,11 +3777,11 @@ void MemberDef::setAnchor()
m_impl->anc = "a"+sigStr;
}
-void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
+void MemberDefImpl::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,
bool hasDocs,MemberDef *member)
{
- //printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data());
+ //printf("%s MemberDefImpl::setGroupDef(%s)\n",name().data(),gd->name().data());
m_impl->group=gd;
m_impl->grouppri=pri;
m_impl->groupFileName=fileName;
@@ -3469,7 +3791,7 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
m_isLinkableCached = 0;
}
-void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
+void MemberDefImpl::setEnumScope(MemberDef *md,bool livesInsideEnum)
{
m_impl->enumScope=md;
m_impl->livesInsideEnum=livesInsideEnum;
@@ -3484,7 +3806,7 @@ void MemberDef::setEnumScope(MemberDef *md,bool livesInsideEnum)
}
}
-void MemberDef::setMemberClass(ClassDef *cd)
+void MemberDefImpl::setMemberClass(ClassDef *cd)
{
m_impl->classDef=cd;
m_isLinkableCached = 0;
@@ -3492,13 +3814,13 @@ void MemberDef::setMemberClass(ClassDef *cd)
setOuterScope(cd);
}
-void MemberDef::setNamespace(NamespaceDef *nd)
+void MemberDefImpl::setNamespace(NamespaceDef *nd)
{
m_impl->nspace=nd;
setOuterScope(nd);
}
-MemberDef *MemberDef::createTemplateInstanceMember(
+MemberDef *MemberDefImpl::createTemplateInstanceMember(
ArgumentList *formalArgs,ArgumentList *actualArgs)
{
//printf(" Member %s %s %s\n",typeString(),name().data(),argsString());
@@ -3524,7 +3846,7 @@ MemberDef *MemberDef::createTemplateInstanceMember(
methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs);
}
- MemberDef *imd = new MemberDef(
+ MemberDef *imd = createMemberDef(
getDefFileName(),getDefLine(),getDefColumn(),
substituteTemplateArgumentsInString(m_impl->type,formalArgs,actualArgs),
methodName,
@@ -3543,7 +3865,7 @@ MemberDef *MemberDef::createTemplateInstanceMember(
return imd;
}
-bool MemberDef::hasOneLineInitializer() const
+bool MemberDefImpl::hasOneLineInitializer() const
{
//printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
// name().data(),m_impl->initializer.data(),m_impl->initLines,
@@ -3552,7 +3874,7 @@ bool MemberDef::hasOneLineInitializer() const
((m_impl->maxInitLines>0 && m_impl->userInitLines==-1) || m_impl->userInitLines>0); // enabled by default or explicitly
}
-bool MemberDef::hasMultiLineInitializer() const
+bool MemberDefImpl::hasMultiLineInitializer() const
{
//printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
// initLines,userInitLines,maxInitLines);
@@ -3562,7 +3884,7 @@ bool MemberDef::hasMultiLineInitializer() const
);
}
-void MemberDef::setInitializer(const char *initializer)
+void MemberDefImpl::setInitializer(const char *initializer)
{
m_impl->initializer=initializer;
int l=m_impl->initializer.length();
@@ -3573,14 +3895,13 @@ void MemberDef::setInitializer(const char *initializer)
//printf("%s::setInitializer(%s)\n",name().data(),m_impl->initializer.data());
}
-void MemberDef::addListReference(Definition *)
+void MemberDefImpl::addListReference(Definition *)
{
static bool optimizeOutputForC = Config_getBool(OPTIMIZE_OUTPUT_FOR_C);
//static bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES);
//static bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
//static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
SrcLangExt lang = getLanguage();
- visited=TRUE;
if (!isLinkableInProject()) return;
QCString memLabel;
if (optimizeOutputForC)
@@ -3598,7 +3919,7 @@ void MemberDef::addListReference(Definition *)
QCString memName = name();
Definition *pd=getOuterScope();
QCString pdName = pd->definitionType()==Definition::TypeClass ?
- ((ClassDef*)pd)->displayName() : pd->name();
+ (dynamic_cast<ClassDef*>(pd))->displayName() : pd->name();
QCString sep = getLanguageSpecificSeparator(lang,TRUE);
QCString memArgs;
if (!isRelated()
@@ -3633,16 +3954,16 @@ void MemberDef::addListReference(Definition *)
}
}
-MemberList *MemberDef::getSectionList(Definition *d) const
+MemberList *MemberDefImpl::getSectionList(Definition *d) const
{
char key[20];
sprintf(key,"%p",d);
return (d!=0 && m_impl->classSectionSDict) ? m_impl->classSectionSDict->find(key) : 0;
}
-void MemberDef::setSectionList(Definition *d, MemberList *sl)
+void MemberDefImpl::setSectionList(Definition *d, MemberList *sl)
{
- //printf("MemberDef::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
+ //printf("MemberDefImpl::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
char key[20];
sprintf(key,"%p",d);
if (m_impl->classSectionSDict==0)
@@ -3652,7 +3973,7 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl)
m_impl->classSectionSDict->append(key,sl);
}
-Specifier MemberDef::virtualness(int count) const
+Specifier MemberDefImpl::virtualness(int count) const
{
if (count>25)
{
@@ -3672,7 +3993,7 @@ Specifier MemberDef::virtualness(int count) const
return v;
}
-void MemberDef::writeTagFile(FTextStream &tagFile)
+void MemberDefImpl::writeTagFile(FTextStream &tagFile)
{
if (!isLinkableInProject()) return;
tagFile << " <member kind=\"";
@@ -3753,7 +4074,7 @@ void MemberDef::writeTagFile(FTextStream &tagFile)
tagFile << " </member>" << endl;
}
-void MemberDef::_computeIsConstructor()
+void MemberDefImpl::_computeIsConstructor()
{
m_isConstructorCached=1; // FALSE
if (m_impl->classDef)
@@ -3796,11 +4117,11 @@ void MemberDef::_computeIsConstructor()
}
}
-bool MemberDef::isConstructor() const
+bool MemberDefImpl::isConstructor() const
{
if (m_isConstructorCached==0)
{
- MemberDef *that = (MemberDef*)this;
+ MemberDefImpl *that = (MemberDefImpl*)this;
that->_computeIsConstructor();
}
ASSERT(m_isConstructorCached>0);
@@ -3808,7 +4129,7 @@ bool MemberDef::isConstructor() const
}
-void MemberDef::_computeIsDestructor()
+void MemberDefImpl::_computeIsDestructor()
{
bool isDestructor;
if (m_impl->isDMember) // for D
@@ -3837,18 +4158,18 @@ void MemberDef::_computeIsDestructor()
m_isDestructorCached = isDestructor ? 2 : 1;
}
-bool MemberDef::isDestructor() const
+bool MemberDefImpl::isDestructor() const
{
if (m_isDestructorCached==0)
{
- MemberDef *that=(MemberDef*)this;
+ MemberDefImpl *that=(MemberDefImpl*)this;
that->_computeIsDestructor();
}
ASSERT(m_isDestructorCached>0);
return m_isDestructorCached==2;
}
-void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
+void MemberDefImpl::writeEnumDeclaration(OutputList &typeDecl,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd)
{
int enumMemCount=0;
@@ -3877,7 +4198,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
if (isLinkableInProject() || hasDocumentedEnumValues())
{
//_writeTagData(compoundType);
- _addToSearchIndex();
+ addToSearchIndex();
writeLink(typeDecl,cd,nd,fd,gd);
}
else
@@ -3928,7 +4249,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
if (fmd->hasDocumentation()) // enum value has docs
{
//fmd->_writeTagData(compoundType);
- fmd->_addToSearchIndex();
+ fmd->addToSearchIndex();
fmd->writeLink(typeDecl,cd,nd,fd,gd);
}
else // no docs for this enum value
@@ -3972,19 +4293,19 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
}
}
-void MemberDef::setArgumentList(ArgumentList *al)
+void MemberDefImpl::setArgumentList(ArgumentList *al)
{
if (m_impl->defArgList) delete m_impl->defArgList;
m_impl->defArgList = al;
}
-void MemberDef::setDeclArgumentList(ArgumentList *al)
+void MemberDefImpl::setDeclArgumentList(ArgumentList *al)
{
if (m_impl->declArgList) delete m_impl->declArgList;
m_impl->declArgList = al;
}
-void MemberDef::setTypeConstraints(ArgumentList *al)
+void MemberDefImpl::setTypeConstraints(ArgumentList *al)
{
if (al==0) return;
if (m_impl->typeConstraints) delete m_impl->typeConstraints;
@@ -3998,53 +4319,53 @@ void MemberDef::setTypeConstraints(ArgumentList *al)
}
}
-void MemberDef::setType(const char *t)
+void MemberDefImpl::setType(const char *t)
{
m_impl->type = t;
}
-void MemberDef::setAccessorType(ClassDef *cd,const char *t)
+void MemberDefImpl::setAccessorType(ClassDef *cd,const char *t)
{
m_impl->accessorClass = cd;
m_impl->accessorType = t;
}
-ClassDef *MemberDef::accessorClass() const
+ClassDef *MemberDefImpl::accessorClass() const
{
return m_impl->accessorClass;
}
-void MemberDef::findSectionsInDocumentation()
+void MemberDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
}
-void MemberDef::enableCallGraph(bool e)
+void MemberDefImpl::enableCallGraph(bool e)
{
m_impl->hasCallGraph=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
-void MemberDef::enableCallerGraph(bool e)
+void MemberDefImpl::enableCallerGraph(bool e)
{
m_impl->hasCallerGraph=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
-void MemberDef::enableReferencedByRelation(bool e)
+void MemberDefImpl::enableReferencedByRelation(bool e)
{
m_impl->hasReferencedByRelation=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
-void MemberDef::enableReferencesRelation(bool e)
+void MemberDefImpl::enableReferencesRelation(bool e)
{
m_impl->hasReferencesRelation=e;
if (e) Doxygen::parseSourcesNeeded = TRUE;
}
#if 0
-bool MemberDef::protectionVisible() const
+bool MemberDefImpl::protectionVisible() const
{
return m_impl->prot==Public ||
(m_impl->prot==Private && Config_getBool(EXTRACT_PRIVATE)) ||
@@ -4054,7 +4375,7 @@ bool MemberDef::protectionVisible() const
#endif
#if 0
-void MemberDef::setInbodyDocumentation(const char *docs,
+void MemberDefImpl::setInbodyDocumentation(const char *docs,
const char *docFile,int docLine)
{
m_impl->inbodyDocs = docs;
@@ -4064,19 +4385,19 @@ void MemberDef::setInbodyDocumentation(const char *docs,
}
#endif
-bool MemberDef::isObjCMethod() const
+bool MemberDefImpl::isObjCMethod() const
{
if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isFunction()) return TRUE;
return FALSE;
}
-bool MemberDef::isObjCProperty() const
+bool MemberDefImpl::isObjCProperty() const
{
if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isProperty()) return TRUE;
return FALSE;
}
-QCString MemberDef::qualifiedName() const
+QCString MemberDefImpl::qualifiedName() const
{
if (isObjCMethod())
{
@@ -4096,11 +4417,11 @@ QCString MemberDef::qualifiedName() const
}
else
{
- return Definition::qualifiedName();
+ return DefinitionImpl::qualifiedName();
}
}
-void MemberDef::setTagInfo(TagInfo *ti)
+void MemberDefImpl::setTagInfo(TagInfo *ti)
{
if (ti)
{
@@ -4111,7 +4432,7 @@ void MemberDef::setTagInfo(TagInfo *ti)
}
}
-QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
+QCString MemberDefImpl::objCMethodName(bool localLink,bool showStatic) const
{
QCString qm;
if (showStatic)
@@ -4128,455 +4449,455 @@ QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
return qm;
}
-const char *MemberDef::declaration() const
+const char *MemberDefImpl::declaration() const
{
return m_impl->decl;
}
-const char *MemberDef::definition() const
+const char *MemberDefImpl::definition() const
{
return m_impl->def;
}
-const char *MemberDef::extraTypeChars() const
+const char *MemberDefImpl::extraTypeChars() const
{
return m_impl->extraTypeChars;
}
-const char *MemberDef::typeString() const
+const char *MemberDefImpl::typeString() const
{
return m_impl->type;
}
-const char *MemberDef::argsString() const
+const char *MemberDefImpl::argsString() const
{
return m_impl->args;
}
-const char *MemberDef::excpString() const
+const char *MemberDefImpl::excpString() const
{
return m_impl->exception;
}
-const char *MemberDef::bitfieldString() const
+const char *MemberDefImpl::bitfieldString() const
{
return m_impl->bitfields;
}
-const QCString &MemberDef::initializer() const
+const QCString &MemberDefImpl::initializer() const
{
return m_impl->initializer;
}
-int MemberDef::initializerLines() const
+int MemberDefImpl::initializerLines() const
{
return m_impl->initLines;
}
-uint64 MemberDef::getMemberSpecifiers() const
+uint64 MemberDefImpl::getMemberSpecifiers() const
{
return m_impl->memSpec;
}
-ClassDef *MemberDef::getClassDef() const
+ClassDef *MemberDefImpl::getClassDef() const
{
return m_impl->classDef;
}
-FileDef *MemberDef::getFileDef() const
+FileDef *MemberDefImpl::getFileDef() const
{
return m_impl->fileDef;
}
-NamespaceDef* MemberDef::getNamespaceDef() const
+NamespaceDef* MemberDefImpl::getNamespaceDef() const
{
return m_impl->nspace;
}
-const char *MemberDef::getReadAccessor() const
+const char *MemberDefImpl::getReadAccessor() const
{
return m_impl->read;
}
-const char *MemberDef::getWriteAccessor() const
+const char *MemberDefImpl::getWriteAccessor() const
{
return m_impl->write;
}
-GroupDef *MemberDef::getGroupDef() const
+GroupDef *MemberDefImpl::getGroupDef() const
{
return m_impl->group;
}
-Grouping::GroupPri_t MemberDef::getGroupPri() const
+Grouping::GroupPri_t MemberDefImpl::getGroupPri() const
{
return m_impl->grouppri;
}
-const char *MemberDef::getGroupFileName() const
+const char *MemberDefImpl::getGroupFileName() const
{
return m_impl->groupFileName;
}
-int MemberDef::getGroupStartLine() const
+int MemberDefImpl::getGroupStartLine() const
{
return m_impl->groupStartLine;
}
-bool MemberDef::getGroupHasDocs() const
+bool MemberDefImpl::getGroupHasDocs() const
{
return m_impl->groupHasDocs;
}
-Protection MemberDef::protection() const
+Protection MemberDefImpl::protection() const
{
return m_impl->prot;
}
-MemberType MemberDef::memberType() const
+MemberType MemberDefImpl::memberType() const
{
return m_impl->mtype;
}
-bool MemberDef::isSignal() const
+bool MemberDefImpl::isSignal() const
{
return m_impl->mtype==MemberType_Signal;
}
-bool MemberDef::isSlot() const
+bool MemberDefImpl::isSlot() const
{
return m_impl->mtype==MemberType_Slot;
}
-bool MemberDef::isVariable() const
+bool MemberDefImpl::isVariable() const
{
return m_impl->mtype==MemberType_Variable;
}
-bool MemberDef::isEnumerate() const
+bool MemberDefImpl::isEnumerate() const
{
return m_impl->mtype==MemberType_Enumeration;
}
-bool MemberDef::isEnumValue() const
+bool MemberDefImpl::isEnumValue() const
{
return m_impl->mtype==MemberType_EnumValue;
}
-bool MemberDef::isTypedef() const
+bool MemberDefImpl::isTypedef() const
{
return m_impl->mtype==MemberType_Typedef;
}
-bool MemberDef::isSequence() const
+bool MemberDefImpl::isSequence() const
{
return m_impl->mtype==MemberType_Sequence;
}
-bool MemberDef::isDictionary() const
+bool MemberDefImpl::isDictionary() const
{
return m_impl->mtype==MemberType_Dictionary;
}
-bool MemberDef::isFunction() const
+bool MemberDefImpl::isFunction() const
{
return m_impl->mtype==MemberType_Function;
}
-bool MemberDef::isFunctionPtr() const
+bool MemberDefImpl::isFunctionPtr() const
{
return m_impl->mtype==MemberType_Variable && QCString(argsString()).find(")(")!=-1;
}
-bool MemberDef::isDefine() const
+bool MemberDefImpl::isDefine() const
{
return m_impl->mtype==MemberType_Define;
}
-bool MemberDef::isFriend() const
+bool MemberDefImpl::isFriend() const
{
return m_impl->mtype==MemberType_Friend;
}
-bool MemberDef::isDCOP() const
+bool MemberDefImpl::isDCOP() const
{
return m_impl->mtype==MemberType_DCOP;
}
-bool MemberDef::isProperty() const
+bool MemberDefImpl::isProperty() const
{
return m_impl->mtype==MemberType_Property;
}
-bool MemberDef::isEvent() const
+bool MemberDefImpl::isEvent() const
{
return m_impl->mtype==MemberType_Event;
}
-bool MemberDef::isRelated() const
+bool MemberDefImpl::isRelated() const
{
return m_impl->related == Related;
}
-bool MemberDef::isForeign() const
+bool MemberDefImpl::isForeign() const
{
return m_impl->related == Foreign;
}
-bool MemberDef::isStatic() const
+bool MemberDefImpl::isStatic() const
{
return m_impl->stat;
}
-bool MemberDef::isInline() const
+bool MemberDefImpl::isInline() const
{
return (m_impl->memSpec&Entry::Inline)!=0;
}
-bool MemberDef::isExplicit() const
+bool MemberDefImpl::isExplicit() const
{
return (m_impl->memSpec&Entry::Explicit)!=0;
}
-bool MemberDef::isMutable() const
+bool MemberDefImpl::isMutable() const
{
return (m_impl->memSpec&Entry::Mutable)!=0;
}
-bool MemberDef::isGettable() const
+bool MemberDefImpl::isGettable() const
{
return (m_impl->memSpec&Entry::Gettable)!=0;
}
-bool MemberDef::isPrivateGettable() const
+bool MemberDefImpl::isPrivateGettable() const
{
return (m_impl->memSpec&Entry::PrivateGettable)!=0;
}
-bool MemberDef::isProtectedGettable() const
+bool MemberDefImpl::isProtectedGettable() const
{
return (m_impl->memSpec&Entry::ProtectedGettable)!=0;
}
-bool MemberDef::isSettable() const
+bool MemberDefImpl::isSettable() const
{
return (m_impl->memSpec&Entry::Settable)!=0;
}
-bool MemberDef::isPrivateSettable() const
+bool MemberDefImpl::isPrivateSettable() const
{
return (m_impl->memSpec&Entry::PrivateSettable)!=0;
}
-bool MemberDef::isProtectedSettable() const
+bool MemberDefImpl::isProtectedSettable() const
{
return (m_impl->memSpec&Entry::ProtectedSettable)!=0;
}
-bool MemberDef::isAddable() const
+bool MemberDefImpl::isAddable() const
{
return (m_impl->memSpec&Entry::Addable)!=0;
}
-bool MemberDef::isRemovable() const
+bool MemberDefImpl::isRemovable() const
{
return (m_impl->memSpec&Entry::Removable)!=0;
}
-bool MemberDef::isRaisable() const
+bool MemberDefImpl::isRaisable() const
{
return (m_impl->memSpec&Entry::Raisable)!=0;
}
-bool MemberDef::isReadable() const
+bool MemberDefImpl::isReadable() const
{
return (m_impl->memSpec&Entry::Readable)!=0;
}
-bool MemberDef::isWritable() const
+bool MemberDefImpl::isWritable() const
{
return (m_impl->memSpec&Entry::Writable)!=0;
}
-bool MemberDef::isFinal() const
+bool MemberDefImpl::isFinal() const
{
return (m_impl->memSpec&Entry::Final)!=0;
}
-bool MemberDef::isNew() const
+bool MemberDefImpl::isNew() const
{
return (m_impl->memSpec&Entry::New)!=0;
}
-bool MemberDef::isSealed() const
+bool MemberDefImpl::isSealed() const
{
return (m_impl->memSpec&Entry::Sealed)!=0;
}
-bool MemberDef::isOverride() const
+bool MemberDefImpl::isOverride() const
{
return (m_impl->memSpec&Entry::Override)!=0;
}
-bool MemberDef::isInitonly() const
+bool MemberDefImpl::isInitonly() const
{
return (m_impl->memSpec&Entry::Initonly)!=0;
}
-bool MemberDef::isAbstract() const
+bool MemberDefImpl::isAbstract() const
{
return (m_impl->memSpec&Entry::Abstract)!=0;
}
-bool MemberDef::isOptional() const
+bool MemberDefImpl::isOptional() const
{
return (m_impl->memSpec&Entry::Optional)!=0;
}
-bool MemberDef::isRequired() const
+bool MemberDefImpl::isRequired() const
{
return (m_impl->memSpec&Entry::Required)!=0;
}
-bool MemberDef::isNonAtomic() const
+bool MemberDefImpl::isNonAtomic() const
{
return (m_impl->memSpec&Entry::NonAtomic)!=0;
}
-bool MemberDef::isCopy() const
+bool MemberDefImpl::isCopy() const
{
return (m_impl->memSpec&Entry::Copy)!=0;
}
-bool MemberDef::isAssign() const
+bool MemberDefImpl::isAssign() const
{
return (m_impl->memSpec&Entry::Assign)!=0;
}
-bool MemberDef::isRetain() const
+bool MemberDefImpl::isRetain() const
{
return (m_impl->memSpec&Entry::Retain)!=0;
}
-bool MemberDef::isWeak() const
+bool MemberDefImpl::isWeak() const
{
return (m_impl->memSpec&Entry::Weak)!=0;
}
-bool MemberDef::isStrong() const
+bool MemberDefImpl::isStrong() const
{
return (m_impl->memSpec&Entry::Strong)!=0;
}
-bool MemberDef::isStrongEnumValue() const
+bool MemberDefImpl::isStrongEnumValue() const
{
return m_impl->mtype==MemberType_EnumValue &&
m_impl->enumScope &&
m_impl->enumScope->isStrong();
}
-bool MemberDef::isUnretained() const
+bool MemberDefImpl::isUnretained() const
{
return (m_impl->memSpec&Entry::Unretained)!=0;
}
-bool MemberDef::isAlias() const
+bool MemberDefImpl::isAlias() const
{
return (m_impl->memSpec&Entry::Alias)!=0;
}
-bool MemberDef::isDefault() const
+bool MemberDefImpl::isDefault() const
{
return (m_impl->memSpec&Entry::Default)!=0;
}
-bool MemberDef::isDelete() const
+bool MemberDefImpl::isDelete() const
{
return (m_impl->memSpec&Entry::Delete)!=0;
}
-bool MemberDef::isNoExcept() const
+bool MemberDefImpl::isNoExcept() const
{
return (m_impl->memSpec&Entry::NoExcept)!=0;
}
-bool MemberDef::isAttribute() const
+bool MemberDefImpl::isAttribute() const
{
return (m_impl->memSpec&Entry::Attribute)!=0;
}
-bool MemberDef::isUNOProperty() const
+bool MemberDefImpl::isUNOProperty() const
{
return (m_impl->memSpec&Entry::Property)!=0;
}
-bool MemberDef::isReadonly() const
+bool MemberDefImpl::isReadonly() const
{
return (m_impl->memSpec&Entry::Readonly)!=0;
}
-bool MemberDef::isBound() const
+bool MemberDefImpl::isBound() const
{
return (m_impl->memSpec&Entry::Bound)!=0;
}
-bool MemberDef::isConstrained() const
+bool MemberDefImpl::isConstrained() const
{
return (m_impl->memSpec&Entry::Constrained)!=0;
}
-bool MemberDef::isTransient() const
+bool MemberDefImpl::isTransient() const
{
return (m_impl->memSpec&Entry::Transient)!=0;
}
-bool MemberDef::isMaybeVoid() const
+bool MemberDefImpl::isMaybeVoid() const
{
return (m_impl->memSpec&Entry::MaybeVoid)!=0;
}
-bool MemberDef::isMaybeDefault() const
+bool MemberDefImpl::isMaybeDefault() const
{
return (m_impl->memSpec&Entry::MaybeDefault)!=0;
}
-bool MemberDef::isMaybeAmbiguous() const
+bool MemberDefImpl::isMaybeAmbiguous() const
{
return (m_impl->memSpec&Entry::MaybeAmbiguous)!=0;
}
-bool MemberDef::isPublished() const
+bool MemberDefImpl::isPublished() const
{
return (m_impl->memSpec&Entry::Published)!=0;
}
-bool MemberDef::isImplementation() const
+bool MemberDefImpl::isImplementation() const
{
return m_impl->implOnly;
}
-bool MemberDef::isExternal() const
+bool MemberDefImpl::isExternal() const
{
return m_impl->explExt;
}
-bool MemberDef::isTemplateSpecialization() const
+bool MemberDefImpl::isTemplateSpecialization() const
{
return m_impl->tspec;
}
-bool MemberDef::hasDocumentedParams() const
+bool MemberDefImpl::hasDocumentedParams() const
{
return m_impl->hasDocumentedParams;
}
-bool MemberDef::hasDocumentedReturnType() const
+bool MemberDefImpl::hasDocumentedReturnType() const
{
return m_impl->hasDocumentedReturnType;
}
-bool MemberDef::showInCallGraph() const
+bool MemberDefImpl::showInCallGraph() const
{
return isFunction() ||
isSlot() ||
@@ -4585,183 +4906,183 @@ bool MemberDef::showInCallGraph() const
isObjCMethod();
}
-ClassDef *MemberDef::relatedAlso() const
+ClassDef *MemberDefImpl::relatedAlso() const
{
return m_impl->relatedAlso;
}
-bool MemberDef::hasDocumentedEnumValues() const
+bool MemberDefImpl::hasDocumentedEnumValues() const
{
return m_impl->docEnumValues;
}
-MemberDef *MemberDef::getAnonymousEnumType() const
+MemberDef *MemberDefImpl::getAnonymousEnumType() const
{
return m_impl->annEnumType;
}
-bool MemberDef::isDocsForDefinition() const
+bool MemberDefImpl::isDocsForDefinition() const
{
return m_impl->docsForDefinition;
}
-MemberDef *MemberDef::getEnumScope() const
+MemberDef *MemberDefImpl::getEnumScope() const
{
return m_impl->enumScope;
}
-bool MemberDef::livesInsideEnum() const
+bool MemberDefImpl::livesInsideEnum() const
{
return m_impl->livesInsideEnum;
}
-bool MemberDef::isSliceLocal() const
+bool MemberDefImpl::isSliceLocal() const
{
return (m_impl->memSpec&Entry::Local)!=0;
}
-bool MemberDef::isConstExpr() const
+bool MemberDefImpl::isConstExpr() const
{
return (m_impl->memSpec&Entry::ConstExpr)!=0;
}
-MemberList *MemberDef::enumFieldList() const
+MemberList *MemberDefImpl::enumFieldList() const
{
return m_impl->enumFields;
}
-ExampleSDict *MemberDef::getExamples() const
+ExampleSDict *MemberDefImpl::getExamples() const
{
return m_impl->exampleSDict;
}
-bool MemberDef::isPrototype() const
+bool MemberDefImpl::isPrototype() const
{
return m_impl->proto;
}
-ArgumentList *MemberDef::argumentList() const
+ArgumentList *MemberDefImpl::argumentList() const
{
return m_impl->defArgList;
}
-ArgumentList *MemberDef::declArgumentList() const
+ArgumentList *MemberDefImpl::declArgumentList() const
{
return m_impl->declArgList;
}
-ArgumentList *MemberDef::templateArguments() const
+ArgumentList *MemberDefImpl::templateArguments() const
{
return m_impl->tArgList;
}
-QList<ArgumentList> *MemberDef::definitionTemplateParameterLists() const
+QList<ArgumentList> *MemberDefImpl::definitionTemplateParameterLists() const
{
return m_impl->defTmpArgLists;
}
-int MemberDef::getMemberGroupId() const
+int MemberDefImpl::getMemberGroupId() const
{
return m_impl->grpId;
}
-MemberGroup *MemberDef::getMemberGroup() const
+MemberGroup *MemberDefImpl::getMemberGroup() const
{
return m_impl->memberGroup;
}
-bool MemberDef::fromAnonymousScope() const
+bool MemberDefImpl::fromAnonymousScope() const
{
return m_impl->annScope;
}
-bool MemberDef::anonymousDeclShown() const
+bool MemberDefImpl::anonymousDeclShown() const
{
return m_impl->annUsed;
}
-void MemberDef::setAnonymousUsed()
+void MemberDefImpl::setAnonymousUsed()
{
m_impl->annUsed = TRUE;
}
-bool MemberDef::hasCallGraph() const
+bool MemberDefImpl::hasCallGraph() const
{
return m_impl->hasCallGraph;
}
-bool MemberDef::hasCallerGraph() const
+bool MemberDefImpl::hasCallerGraph() const
{
return m_impl->hasCallerGraph;
}
-bool MemberDef::hasReferencedByRelation() const
+bool MemberDefImpl::hasReferencedByRelation() const
{
return m_impl->hasReferencedByRelation;
}
-bool MemberDef::hasReferencesRelation() const
+bool MemberDefImpl::hasReferencesRelation() const
{
return m_impl->hasReferencesRelation;
}
-MemberDef *MemberDef::templateMaster() const
+MemberDef *MemberDefImpl::templateMaster() const
{
return m_impl->templateMaster;
}
-bool MemberDef::isTypedefValCached() const
+bool MemberDefImpl::isTypedefValCached() const
{
return m_impl->isTypedefValCached;
}
-ClassDef *MemberDef::getCachedTypedefVal() const
+ClassDef *MemberDefImpl::getCachedTypedefVal() const
{
return m_impl->cachedTypedefValue;
}
-QCString MemberDef::getCachedTypedefTemplSpec() const
+QCString MemberDefImpl::getCachedTypedefTemplSpec() const
{
return m_impl->cachedTypedefTemplSpec;
}
-QCString MemberDef::getCachedResolvedTypedef() const
+QCString MemberDefImpl::getCachedResolvedTypedef() const
{
- //printf("MemberDef::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
+ //printf("MemberDefImpl::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
return m_impl->cachedResolvedType;
}
-MemberDef *MemberDef::memberDefinition() const
+MemberDef *MemberDefImpl::memberDefinition() const
{
return m_impl->memDef;
}
-MemberDef *MemberDef::memberDeclaration() const
+MemberDef *MemberDefImpl::memberDeclaration() const
{
return m_impl->memDec;
}
-MemberDef *MemberDef::inheritsDocsFrom() const
+MemberDef *MemberDefImpl::inheritsDocsFrom() const
{
return m_impl->docProvider;
}
-MemberDef *MemberDef::getGroupAlias() const
+MemberDef *MemberDefImpl::getGroupAlias() const
{
return m_impl->groupAlias;
}
-QCString MemberDef::getDeclFileName() const
+QCString MemberDefImpl::getDeclFileName() const
{
return m_impl->declFileName;
}
-int MemberDef::getDeclLine() const
+int MemberDefImpl::getDeclLine() const
{
return m_impl->declLine;
}
-int MemberDef::getDeclColumn() const
+int MemberDefImpl::getDeclColumn() const
{
return m_impl->declColumn;
}
@@ -4769,18 +5090,18 @@ int MemberDef::getDeclColumn() const
//----------------------------------------------
-void MemberDef::setMemberType(MemberType t)
+void MemberDefImpl::setMemberType(MemberType t)
{
m_impl->mtype=t;
m_isLinkableCached = 0;
}
-void MemberDef::setDefinition(const char *d)
+void MemberDefImpl::setDefinition(const char *d)
{
m_impl->def=d;
}
-void MemberDef::setFileDef(FileDef *fd)
+void MemberDefImpl::setFileDef(FileDef *fd)
{
m_impl->fileDef=fd;
m_isLinkableCached = 0;
@@ -4788,28 +5109,28 @@ void MemberDef::setFileDef(FileDef *fd)
m_isDestructorCached = 0;
}
-void MemberDef::setProtection(Protection p)
+void MemberDefImpl::setProtection(Protection p)
{
m_impl->prot=p;
m_isLinkableCached = 0;
}
-void MemberDef::setMemberSpecifiers(uint64 s)
+void MemberDefImpl::setMemberSpecifiers(uint64 s)
{
m_impl->memSpec=s;
}
-void MemberDef::mergeMemberSpecifiers(uint64 s)
+void MemberDefImpl::mergeMemberSpecifiers(uint64 s)
{
m_impl->memSpec|=s;
}
-void MemberDef::setBitfields(const char *s)
+void MemberDefImpl::setBitfields(const char *s)
{
m_impl->bitfields = QCString(s).simplifyWhiteSpace();
}
-void MemberDef::setMaxInitLines(int lines)
+void MemberDefImpl::setMaxInitLines(int lines)
{
if (lines!=-1)
{
@@ -4817,76 +5138,76 @@ void MemberDef::setMaxInitLines(int lines)
}
}
-void MemberDef::setReadAccessor(const char *r)
+void MemberDefImpl::setReadAccessor(const char *r)
{
m_impl->read=r;
}
-void MemberDef::setWriteAccessor(const char *w)
+void MemberDefImpl::setWriteAccessor(const char *w)
{
m_impl->write=w;
}
-void MemberDef::setTemplateSpecialization(bool b)
+void MemberDefImpl::setTemplateSpecialization(bool b)
{
m_impl->tspec=b;
}
-void MemberDef::makeRelated()
+void MemberDefImpl::makeRelated()
{
m_impl->related = Related;
m_isLinkableCached = 0;
}
-void MemberDef::makeForeign()
+void MemberDefImpl::makeForeign()
{
m_impl->related = Foreign;
m_isLinkableCached = 0;
}
-void MemberDef::setHasDocumentedParams(bool b)
+void MemberDefImpl::setHasDocumentedParams(bool b)
{
m_impl->hasDocumentedParams = b;
}
-void MemberDef::setHasDocumentedReturnType(bool b)
+void MemberDefImpl::setHasDocumentedReturnType(bool b)
{
m_impl->hasDocumentedReturnType = b;
}
-void MemberDef::setInheritsDocsFrom(MemberDef *md)
+void MemberDefImpl::setInheritsDocsFrom(MemberDef *md)
{
m_impl->docProvider = md;
}
-void MemberDef::setArgsString(const char *as)
+void MemberDefImpl::setArgsString(const char *as)
{
m_impl->args = as;
}
-void MemberDef::setRelatedAlso(ClassDef *cd)
+void MemberDefImpl::setRelatedAlso(ClassDef *cd)
{
m_impl->relatedAlso=cd;
}
-void MemberDef::setEnumClassScope(ClassDef *cd)
+void MemberDefImpl::setEnumClassScope(ClassDef *cd)
{
m_impl->classDef = cd;
m_isLinkableCached = 0;
m_isConstructorCached = 0;
}
-void MemberDef::setDocumentedEnumValues(bool value)
+void MemberDefImpl::setDocumentedEnumValues(bool value)
{
m_impl->docEnumValues=value;
}
-void MemberDef::setAnonymousEnumType(MemberDef *md)
+void MemberDefImpl::setAnonymousEnumType(MemberDef *md)
{
m_impl->annEnumType = md;
}
-void MemberDef::setPrototype(bool p,const QCString &df,int line,int column)
+void MemberDefImpl::setPrototype(bool p,const QCString &df,int line,int column)
{
m_impl->proto=p;
if (p)
@@ -4899,7 +5220,7 @@ void MemberDef::setPrototype(bool p,const QCString &df,int line,int column)
}
}
-void MemberDef::setExplicitExternal(bool b,const QCString &df,int line,int column)
+void MemberDefImpl::setExplicitExternal(bool b,const QCString &df,int line,int column)
{
m_impl->explExt=b;
if (b)
@@ -4913,110 +5234,110 @@ void MemberDef::setExplicitExternal(bool b,const QCString &df,int line,int colum
}
-void MemberDef::setDeclFile(const QCString &df,int line,int column)
+void MemberDefImpl::setDeclFile(const QCString &df,int line,int column)
{
m_impl->declFileName = df;
m_impl->declLine = line;
m_impl->declColumn = column;
}
-void MemberDef::setMemberGroupId(int id)
+void MemberDefImpl::setMemberGroupId(int id)
{
m_impl->grpId=id;
}
-void MemberDef::makeImplementationDetail()
+void MemberDefImpl::makeImplementationDetail()
{
m_impl->implOnly=TRUE;
}
-void MemberDef::setFromAnonymousScope(bool b)
+void MemberDefImpl::setFromAnonymousScope(bool b)
{
m_impl->annScope=b;
}
-void MemberDef::setFromAnonymousMember(MemberDef *m)
+void MemberDefImpl::setFromAnonymousMember(MemberDef *m)
{
m_impl->annMemb=m;
}
-MemberDef *MemberDef::fromAnonymousMember() const
+MemberDef *MemberDefImpl::fromAnonymousMember() const
{
return m_impl->annMemb;
}
-void MemberDef::setTemplateMaster(MemberDef *mt)
+void MemberDefImpl::setTemplateMaster(MemberDef *mt)
{
m_impl->templateMaster=mt;
m_isLinkableCached = 0;
}
-void MemberDef::setDocsForDefinition(bool b)
+void MemberDefImpl::setDocsForDefinition(bool b)
{
m_impl->docsForDefinition = b;
}
-void MemberDef::setGroupAlias(MemberDef *md)
+void MemberDefImpl::setGroupAlias(MemberDef *md)
{
m_impl->groupAlias = md;
}
-void MemberDef::invalidateTypedefValCache()
+void MemberDefImpl::invalidateTypedefValCache()
{
m_impl->isTypedefValCached=FALSE;
}
-void MemberDef::setMemberDefinition(MemberDef *md)
+void MemberDefImpl::setMemberDefinition(MemberDef *md)
{
m_impl->memDef=md;
}
-void MemberDef::setMemberDeclaration(MemberDef *md)
+void MemberDefImpl::setMemberDeclaration(MemberDef *md)
{
m_impl->memDec=md;
}
-ClassDef *MemberDef::category() const
+ClassDef *MemberDefImpl::category() const
{
return m_impl->category;
}
-void MemberDef::setCategory(ClassDef *def)
+void MemberDefImpl::setCategory(ClassDef *def)
{
m_impl->category = def;
}
-MemberDef *MemberDef::categoryRelation() const
+MemberDef *MemberDefImpl::categoryRelation() const
{
return m_impl->categoryRelation;
}
-void MemberDef::setCategoryRelation(MemberDef *md)
+void MemberDefImpl::setCategoryRelation(MemberDef *md)
{
m_impl->categoryRelation = md;
}
-void MemberDef::setEnumBaseType(const QCString &type)
+void MemberDefImpl::setEnumBaseType(const QCString &type)
{
m_impl->enumBaseType = type;
}
-QCString MemberDef::enumBaseType() const
+QCString MemberDefImpl::enumBaseType() const
{
return m_impl->enumBaseType;
}
-void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const QCString &resolvedType)
+void MemberDefImpl::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const QCString &resolvedType)
{
m_impl->isTypedefValCached=TRUE;
m_impl->cachedTypedefValue=val;
m_impl->cachedTypedefTemplSpec=templSpec;
m_impl->cachedResolvedType=resolvedType;
- //printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
+ //printf("MemberDefImpl::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
}
-void MemberDef::copyArgumentNames(MemberDef *bmd)
+void MemberDefImpl::copyArgumentNames(MemberDef *bmd)
{
{
ArgumentList *arguments = bmd->argumentList();
@@ -5059,30 +5380,20 @@ static void invalidateCachedTypesInArgumentList(ArgumentList *al)
}
}
-void MemberDef::invalidateCachedArgumentTypes()
+void MemberDefImpl::invalidateCachedArgumentTypes()
{
invalidateCachedTypesInArgumentList(m_impl->defArgList);
invalidateCachedTypesInArgumentList(m_impl->declArgList);
}
-void MemberDef::addFlowKeyWord()
-{
- number_of_flowkw++;
-}
-
-int MemberDef::numberOfFlowKeyWords()
-{
- return number_of_flowkw;
-}
-
//----------------
-QCString MemberDef::displayName(bool) const
+QCString MemberDefImpl::displayName(bool) const
{
- return Definition::name();
+ return DefinitionImpl::name();
}
-void MemberDef::_addToSearchIndex()
+void MemberDefImpl::addToSearchIndex()
{
// write search index info
if (Doxygen::searchIndex && isLinkableInProject())
@@ -5268,7 +5579,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
}
}
-QCString MemberDef::briefDescription(bool abbr) const
+QCString MemberDefImpl::briefDescription(bool abbr) const
{
if (m_impl->templateMaster)
{
@@ -5276,11 +5587,11 @@ QCString MemberDef::briefDescription(bool abbr) const
}
else
{
- return Definition::briefDescription(abbr);
+ return DefinitionImpl::briefDescription(abbr);
}
}
-QCString MemberDef::documentation() const
+QCString MemberDefImpl::documentation() const
{
if (m_impl->templateMaster)
{
@@ -5288,16 +5599,16 @@ QCString MemberDef::documentation() const
}
else
{
- return Definition::documentation();
+ return DefinitionImpl::documentation();
}
}
-const ArgumentList *MemberDef::typeConstraints() const
+const ArgumentList *MemberDefImpl::typeConstraints() const
{
return m_impl->typeConstraints;
}
-bool MemberDef::isFriendToHide() const
+bool MemberDefImpl::isFriendToHide() const
{
static bool hideFriendCompounds = Config_getBool(HIDE_FRIEND_COMPOUNDS);
bool isFriendToHide = hideFriendCompounds &&
@@ -5307,24 +5618,24 @@ bool MemberDef::isFriendToHide() const
return isFriendToHide;
}
-bool MemberDef::isNotFriend() const
+bool MemberDefImpl::isNotFriend() const
{
return !(isFriend() && isFriendToHide());
}
-bool MemberDef::isFunctionOrSignalSlot() const
+bool MemberDefImpl::isFunctionOrSignalSlot() const
{
return isFunction() || isSlot() || isSignal();
}
-bool MemberDef::isRelatedOrFriend() const
+bool MemberDefImpl::isRelatedOrFriend() const
{
return isRelated() || isForeign() || (isFriend() && !isFriendToHide());
}
-bool MemberDef::isReference() const
+bool MemberDefImpl::isReference() const
{
- return Definition::isReference() ||
+ return DefinitionImpl::isReference() ||
(m_impl->templateMaster && m_impl->templateMaster->isReference());
}
diff --git a/src/memberdef.h b/src/memberdef.h
index ac54307..555935a 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -35,429 +35,379 @@ class OutputList;
class GroupDef;
class QTextStream;
class ArgumentList;
-class MemberDefImpl;
class QStrList;
struct TagInfo;
/** A model of a class/file/namespace member symbol. */
-class MemberDef : public Definition
+class MemberDef : virtual public Definition
{
public:
-
- MemberDef(const char *defFileName,int defLine,int defColumn,
- const char *type,const char *name,const char *args,
- const char *excp,Protection prot,Specifier virt,bool stat,
- Relationship related,MemberType t,const ArgumentList *tal,
- const ArgumentList *al,const char *metaData);
- ~MemberDef();
- DefType definitionType() const { return TypeMember; }
+ virtual ~MemberDef() {}
+ virtual DefType definitionType() const = 0;
// move this member into a different scope
- MemberDef *deepCopy() const;
- void moveTo(Definition *);
+ virtual MemberDef *deepCopy() const =0;
+ virtual void moveTo(Definition *) = 0;
//-----------------------------------------------------------------------------------
// ---- getters -----
//-----------------------------------------------------------------------------------
// link id
- QCString getOutputFileBase() const;
- QCString getReference() const;
- QCString anchor() const;
-
- const char *declaration() const;
- const char *definition() const;
- const char *typeString() const;
- const char *argsString() const;
- const char *excpString() const;
- const char *bitfieldString() const;
- const char *extraTypeChars() const;
- const QCString &initializer() const;
- int initializerLines() const;
- uint64 getMemberSpecifiers() const;
- MemberList *getSectionList(Definition *d) const;
- QCString displayDefinition() const;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString getReference() const = 0;
+ virtual QCString anchor() const = 0;
+
+ virtual const char *declaration() const = 0;
+ virtual const char *definition() const = 0;
+ virtual const char *typeString() const = 0;
+ virtual const char *argsString() const = 0;
+ virtual const char *excpString() const = 0;
+ virtual const char *bitfieldString() const = 0;
+ virtual const char *extraTypeChars() const = 0;
+ virtual const QCString &initializer() const = 0;
+ virtual int initializerLines() const = 0;
+ virtual uint64 getMemberSpecifiers() const = 0;
+ virtual MemberList *getSectionList(Definition *d) const = 0;
+ virtual QCString displayDefinition() const = 0;
// scope query members
- ClassDef *getClassDef() const;
- FileDef *getFileDef() const;
- NamespaceDef* getNamespaceDef() const;
- ClassDef *accessorClass() const;
+ virtual ClassDef *getClassDef() const = 0;
+ virtual FileDef *getFileDef() const = 0;
+ virtual NamespaceDef* getNamespaceDef() const = 0;
+ virtual ClassDef *accessorClass() const = 0;
// grabbing the property read/write accessor names
- const char *getReadAccessor() const;
- const char *getWriteAccessor() const;
+ virtual const char *getReadAccessor() const = 0;
+ virtual const char *getWriteAccessor() const = 0;
// querying the grouping definition
- GroupDef *getGroupDef() const;
- Grouping::GroupPri_t getGroupPri() const;
- const char *getGroupFileName() const;
- int getGroupStartLine() const;
- bool getGroupHasDocs() const;
- QCString qualifiedName() const;
- QCString objCMethodName(bool localLink,bool showStatic) const;
+ virtual GroupDef *getGroupDef() const = 0;
+ virtual Grouping::GroupPri_t getGroupPri() const = 0;
+ virtual const char *getGroupFileName() const = 0;
+ virtual int getGroupStartLine() const = 0;
+ virtual bool getGroupHasDocs() const = 0;
+ virtual QCString qualifiedName() const = 0;
+ virtual QCString objCMethodName(bool localLink,bool showStatic) const = 0;
// direct kind info
- Protection protection() const;
- Specifier virtualness(int count=0) const;
- MemberType memberType() const;
- QCString memberTypeName() const;
+ virtual Protection protection() const = 0;
+ virtual Specifier virtualness(int count=0) const = 0;
+ virtual MemberType memberType() const = 0;
+ virtual QCString memberTypeName() const = 0;
// getter methods
- bool isSignal() const;
- bool isSlot() const;
- bool isVariable() const;
- bool isEnumerate() const;
- bool isEnumValue() const;
- bool isTypedef() const;
- bool isSequence() const;
- bool isDictionary() const;
- bool isFunction() const;
- bool isFunctionPtr() const;
- bool isDefine() const;
- bool isFriend() const;
- bool isDCOP() const;
- bool isProperty() const;
- bool isEvent() const;
- bool isRelated() const;
- bool isForeign() const;
- bool isStatic() const;
- bool isInline() const;
- bool isExplicit() const;
- bool isMutable() const;
- bool isGettable() const;
- bool isPrivateGettable() const;
- bool isProtectedGettable() const;
- bool isSettable() const;
- bool isPrivateSettable() const;
- bool isProtectedSettable() const;
- bool isReadable() const;
- bool isWritable() const;
- bool isAddable() const;
- bool isRemovable() const;
- bool isRaisable() const;
- bool isFinal() const;
- bool isAbstract() const;
- bool isOverride() const;
- bool isInitonly() const;
- bool isOptional() const;
- bool isRequired() const;
- bool isNonAtomic() const;
- bool isCopy() const;
- bool isAssign() const;
- bool isRetain() const;
- bool isWeak() const;
- bool isStrong() const;
- bool isUnretained() const;
- bool isNew() const;
- bool isSealed() const;
- bool isImplementation() const;
- bool isExternal() const;
- bool isAlias() const;
- bool isDefault() const;
- bool isDelete() const;
- bool isNoExcept() const;
- bool isAttribute() const; // UNO IDL attribute
- bool isUNOProperty() const; // UNO IDL property
- bool isReadonly() const;
- bool isBound() const;
- bool isConstrained() const;
- bool isTransient() const;
- bool isMaybeVoid() const;
- bool isMaybeDefault() const;
- bool isMaybeAmbiguous() const;
- bool isPublished() const; // UNO IDL published
- bool isTemplateSpecialization() const;
- bool hasDocumentedParams() const;
- bool hasDocumentedReturnType() const;
- bool isObjCMethod() const;
- bool isObjCProperty() const;
- bool isConstructor() const;
- bool isDestructor() const;
- bool hasOneLineInitializer() const;
- bool hasMultiLineInitializer() const;
- bool protectionVisible() const;
- bool showInCallGraph() const;
- bool isStrongEnumValue() const;
- bool livesInsideEnum() const;
- bool isSliceLocal() const;
- bool isConstExpr() const;
-
- int numberOfFlowKeyWords();
+ virtual bool isSignal() const = 0;
+ virtual bool isSlot() const = 0;
+ virtual bool isVariable() const = 0;
+ virtual bool isEnumerate() const = 0;
+ virtual bool isEnumValue() const = 0;
+ virtual bool isTypedef() const = 0;
+ virtual bool isSequence() const = 0;
+ virtual bool isDictionary() const = 0;
+ virtual bool isFunction() const = 0;
+ virtual bool isFunctionPtr() const = 0;
+ virtual bool isDefine() const = 0;
+ virtual bool isFriend() const = 0;
+ virtual bool isDCOP() const = 0;
+ virtual bool isProperty() const = 0;
+ virtual bool isEvent() const = 0;
+ virtual bool isRelated() const = 0;
+ virtual bool isForeign() const = 0;
+ virtual bool isStatic() const = 0;
+ virtual bool isInline() const = 0;
+ virtual bool isExplicit() const = 0;
+ virtual bool isMutable() const = 0;
+ virtual bool isGettable() const = 0;
+ virtual bool isPrivateGettable() const = 0;
+ virtual bool isProtectedGettable() const = 0;
+ virtual bool isSettable() const = 0;
+ virtual bool isPrivateSettable() const = 0;
+ virtual bool isProtectedSettable() const = 0;
+ virtual bool isReadable() const = 0;
+ virtual bool isWritable() const = 0;
+ virtual bool isAddable() const = 0;
+ virtual bool isRemovable() const = 0;
+ virtual bool isRaisable() const = 0;
+ virtual bool isFinal() const = 0;
+ virtual bool isAbstract() const = 0;
+ virtual bool isOverride() const = 0;
+ virtual bool isInitonly() const = 0;
+ virtual bool isOptional() const = 0;
+ virtual bool isRequired() const = 0;
+ virtual bool isNonAtomic() const = 0;
+ virtual bool isCopy() const = 0;
+ virtual bool isAssign() const = 0;
+ virtual bool isRetain() const = 0;
+ virtual bool isWeak() const = 0;
+ virtual bool isStrong() const = 0;
+ virtual bool isUnretained() const = 0;
+ virtual bool isNew() const = 0;
+ virtual bool isSealed() const = 0;
+ virtual bool isImplementation() const = 0;
+ virtual bool isExternal() const = 0;
+ virtual bool isAlias() const = 0;
+ virtual bool isDefault() const = 0;
+ virtual bool isDelete() const = 0;
+ virtual bool isNoExcept() const = 0;
+ virtual bool isAttribute() const = 0; // UNO IDL attribute
+ virtual bool isUNOProperty() const = 0; // UNO IDL property
+ virtual bool isReadonly() const = 0;
+ virtual bool isBound() const = 0;
+ virtual bool isConstrained() const = 0;
+ virtual bool isTransient() const = 0;
+ virtual bool isMaybeVoid() const = 0;
+ virtual bool isMaybeDefault() const = 0;
+ virtual bool isMaybeAmbiguous() const = 0;
+ virtual bool isPublished() const = 0; // UNO IDL published
+ virtual bool isTemplateSpecialization() const = 0;
+ virtual bool hasDocumentedParams() const = 0;
+ virtual bool hasDocumentedReturnType() const = 0;
+ virtual bool isObjCMethod() const = 0;
+ virtual bool isObjCProperty() const = 0;
+ virtual bool isConstructor() const = 0;
+ virtual bool isDestructor() const = 0;
+ virtual bool hasOneLineInitializer() const = 0;
+ virtual bool hasMultiLineInitializer() const = 0;
+ virtual bool showInCallGraph() const = 0;
+ virtual bool isStrongEnumValue() const = 0;
+ virtual bool livesInsideEnum() const = 0;
+ virtual bool isSliceLocal() const = 0;
+ virtual bool isConstExpr() const = 0;
+
// derived getters
- bool isFriendToHide() const;
- bool isNotFriend() const;
- bool isFunctionOrSignalSlot() const;
- bool isRelatedOrFriend() const;
+ virtual bool isFriendToHide() const = 0;
+ virtual bool isNotFriend() const = 0;
+ virtual bool isFunctionOrSignalSlot() const = 0;
+ virtual bool isRelatedOrFriend() const = 0;
// output info
- bool isLinkableInProject() const;
- bool isLinkable() const;
- bool hasDocumentation() const; // overrides hasDocumentation in definition.h
- //bool hasUserDocumentation() const; // overrides hasUserDocumentation
- bool isDeleted() const;
- bool isBriefSectionVisible() const;
- bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
- bool isDetailedSectionLinkable() const;
- bool isFriendClass() const;
- bool isDocumentedFriendClass() const;
-
- MemberDef *reimplements() const;
- MemberList *reimplementedBy() const;
- bool isReimplementedBy(ClassDef *cd) const;
-
- //int inbodyLine() const;
- //QCString inbodyFile() const;
- //const QCString &inbodyDocumentation() const;
-
- ClassDef *relatedAlso() const;
-
- bool hasDocumentedEnumValues() const;
- MemberDef *getAnonymousEnumType() const;
- bool isDocsForDefinition() const;
- MemberDef *getEnumScope() const;
- MemberList *enumFieldList() const;
- void setEnumBaseType(const QCString &type);
- QCString enumBaseType() const;
-
- bool hasExamples();
- ExampleSDict *getExamples() const;
- bool isPrototype() const;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual bool hasDocumentation() const = 0; // overrides hasDocumentation in definition.h
+ //bool hasUserDocumentation() const = 0; // overrides hasUserDocumentation
+ virtual bool isDeleted() const = 0;
+ virtual bool isBriefSectionVisible() const = 0;
+ virtual bool isDetailedSectionVisible(bool inGroup,bool inFile) const = 0;
+ virtual bool isDetailedSectionLinkable() const = 0;
+ virtual bool isFriendClass() const = 0;
+ virtual bool isDocumentedFriendClass() const = 0;
+
+ virtual MemberDef *reimplements() const = 0;
+ virtual MemberList *reimplementedBy() const = 0;
+ virtual bool isReimplementedBy(ClassDef *cd) const = 0;
+
+ virtual ClassDef *relatedAlso() const = 0;
+
+ virtual bool hasDocumentedEnumValues() const = 0;
+ virtual MemberDef *getAnonymousEnumType() const = 0;
+ virtual bool isDocsForDefinition() const = 0;
+ virtual MemberDef *getEnumScope() const = 0;
+ virtual MemberList *enumFieldList() const = 0;
+ virtual void setEnumBaseType(const QCString &type) = 0;
+ virtual QCString enumBaseType() const = 0;
+
+ virtual bool hasExamples() = 0;
+ virtual ExampleSDict *getExamples() const = 0;
+ virtual bool isPrototype() const = 0;
// argument related members
- ArgumentList *argumentList() const;
- ArgumentList *declArgumentList() const;
- ArgumentList *templateArguments() const;
- QList<ArgumentList> *definitionTemplateParameterLists() const;
+ virtual ArgumentList *argumentList() const = 0;
+ virtual ArgumentList *declArgumentList() const = 0;
+ virtual ArgumentList *templateArguments() const = 0;
+ virtual QList<ArgumentList> *definitionTemplateParameterLists() const = 0;
// member group related members
- int getMemberGroupId() const;
- MemberGroup *getMemberGroup() const;
+ virtual int getMemberGroupId() const = 0;
+ virtual MemberGroup *getMemberGroup() const = 0;
- bool fromAnonymousScope() const;
- bool anonymousDeclShown() const;
- MemberDef *fromAnonymousMember() const;
+ virtual bool fromAnonymousScope() const = 0;
+ virtual bool anonymousDeclShown() const = 0;
+ virtual MemberDef *fromAnonymousMember() const = 0;
// callgraph related members
- bool hasCallGraph() const;
- bool hasCallerGraph() const;
- bool visibleMemberGroup(bool hideNoHeader);
+ virtual bool hasCallGraph() const = 0;
+ virtual bool hasCallerGraph() const = 0;
+ virtual bool visibleMemberGroup(bool hideNoHeader) = 0;
// refrenced related members
- bool hasReferencesRelation() const;
- bool hasReferencedByRelation() const;
+ virtual bool hasReferencesRelation() const = 0;
+ virtual bool hasReferencedByRelation() const = 0;
- MemberDef *templateMaster() const;
- QCString getScopeString() const;
- ClassDef *getClassDefOfAnonymousType();
+ virtual MemberDef *templateMaster() const = 0;
+ virtual QCString getScopeString() const = 0;
+ virtual ClassDef *getClassDefOfAnonymousType() = 0;
// cached typedef functions
- bool isTypedefValCached() const;
- ClassDef *getCachedTypedefVal() const;
- QCString getCachedTypedefTemplSpec() const;
- QCString getCachedResolvedTypedef() const;
+ virtual bool isTypedefValCached() const = 0;
+ virtual ClassDef *getCachedTypedefVal() const = 0;
+ virtual QCString getCachedTypedefTemplSpec() const = 0;
+ virtual QCString getCachedResolvedTypedef() const = 0;
- MemberDef *memberDefinition() const;
- MemberDef *memberDeclaration() const;
- MemberDef *inheritsDocsFrom() const;
- MemberDef *getGroupAlias() const;
+ virtual MemberDef *memberDefinition() const = 0;
+ virtual MemberDef *memberDeclaration() const = 0;
+ virtual MemberDef *inheritsDocsFrom() const = 0;
+ virtual MemberDef *getGroupAlias() const = 0;
- ClassDef *category() const;
- MemberDef *categoryRelation() const;
+ virtual ClassDef *category() const = 0;
+ virtual MemberDef *categoryRelation() const = 0;
- QCString displayName(bool=TRUE) const;
- QCString getDeclType() const;
- void getLabels(QStrList &sl,Definition *container) const;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual QCString getDeclType() const = 0;
+ virtual void getLabels(QStrList &sl,Definition *container) const = 0;
- const ArgumentList *typeConstraints() const;
+ virtual const ArgumentList *typeConstraints() const = 0;
// overrules
- QCString documentation() const;
- QCString briefDescription(bool abbr=FALSE) const;
- QCString fieldType() const;
- bool isReference() const;
+ virtual QCString documentation() const = 0;
+ virtual QCString briefDescription(bool abbr=FALSE) const = 0;
+ virtual QCString fieldType() const = 0;
+ virtual bool isReference() const = 0;
- QCString getDeclFileName() const;
- int getDeclLine() const;
- int getDeclColumn() const;
+ virtual QCString getDeclFileName() const = 0;
+ virtual int getDeclLine() const = 0;
+ virtual int getDeclColumn() const = 0;
//-----------------------------------------------------------------------------------
// ---- setters -----
//-----------------------------------------------------------------------------------
- void addFlowKeyWord();
-
// set functions
- void setMemberType(MemberType t);
- void setDefinition(const char *d);
- void setFileDef(FileDef *fd);
- void setAnchor();
- void setProtection(Protection p);
- void setMemberSpecifiers(uint64 s);
- void mergeMemberSpecifiers(uint64 s);
- void setInitializer(const char *i);
- void setBitfields(const char *s);
- void setMaxInitLines(int lines);
- void setMemberClass(ClassDef *cd);
- void setSectionList(Definition *d,MemberList *sl);
- void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
+ virtual void setMemberType(MemberType t) = 0;
+ virtual void setDefinition(const char *d) = 0;
+ virtual void setFileDef(FileDef *fd) = 0;
+ virtual void setAnchor() = 0;
+ virtual void setProtection(Protection p) = 0;
+ virtual void setMemberSpecifiers(uint64 s) = 0;
+ virtual void mergeMemberSpecifiers(uint64 s) = 0;
+ virtual void setInitializer(const char *i) = 0;
+ virtual void setBitfields(const char *s) = 0;
+ virtual void setMaxInitLines(int lines) = 0;
+ virtual void setMemberClass(ClassDef *cd) = 0;
+ virtual void setSectionList(Definition *d,MemberList *sl) = 0;
+ virtual void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,bool hasDocs,
- MemberDef *member=0);
- void setReadAccessor(const char *r);
- void setWriteAccessor(const char *w);
- void setTemplateSpecialization(bool b);
+ MemberDef *member=0) = 0;
+ virtual void setReadAccessor(const char *r) = 0;
+ virtual void setWriteAccessor(const char *w) = 0;
+ virtual void setTemplateSpecialization(bool b) = 0;
- void makeRelated();
- void makeForeign();
- void setHasDocumentedParams(bool b);
- void setHasDocumentedReturnType(bool b);
- void setInheritsDocsFrom(MemberDef *md);
- void setTagInfo(TagInfo *i);
- void setArgsString(const char *as);
+ virtual void makeRelated() = 0;
+ virtual void makeForeign() = 0;
+ virtual void setHasDocumentedParams(bool b) = 0;
+ virtual void setHasDocumentedReturnType(bool b) = 0;
+ virtual void setInheritsDocsFrom(MemberDef *md) = 0;
+ virtual void setTagInfo(TagInfo *i) = 0;
+ virtual void setArgsString(const char *as) = 0;
// relation to other members
- void setReimplements(MemberDef *md);
- void insertReimplementedBy(MemberDef *md);
-
- // in-body documentation
- //void setInbodyDocumentation(const char *docs,const char *file,int line);
+ virtual void setReimplements(MemberDef *md) = 0;
+ virtual void insertReimplementedBy(MemberDef *md) = 0;
- void setRelatedAlso(ClassDef *cd);
+ virtual void setRelatedAlso(ClassDef *cd) = 0;
// enumeration specific members
- void insertEnumField(MemberDef *md);
- void setEnumScope(MemberDef *md,bool livesInsideEnum=FALSE);
- void setEnumClassScope(ClassDef *cd);
- void setDocumentedEnumValues(bool value);
- void setAnonymousEnumType(MemberDef *md);
+ virtual void insertEnumField(MemberDef *md) = 0;
+ virtual void setEnumScope(MemberDef *md,bool livesInsideEnum=FALSE) = 0;
+ virtual void setEnumClassScope(ClassDef *cd) = 0;
+ virtual void setDocumentedEnumValues(bool value) = 0;
+ virtual void setAnonymousEnumType(MemberDef *md) = 0;
// example related members
- bool addExample(const char *anchor,const char *name,const char *file);
+ virtual bool addExample(const char *anchor,const char *name,const char *file) = 0;
// prototype related members
- void setPrototype(bool p,const QCString &df,int line, int column);
- void setExplicitExternal(bool b,const QCString &df,int line,int column);
- void setDeclFile(const QCString &df,int line,int column);
+ virtual void setPrototype(bool p,const QCString &df,int line, int column) = 0;
+ virtual void setExplicitExternal(bool b,const QCString &df,int line,int column) = 0;
+ virtual void setDeclFile(const QCString &df,int line,int column) = 0;
// argument related members
- void setArgumentList(ArgumentList *al);
- void setDeclArgumentList(ArgumentList *al);
- void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
- void setTypeConstraints(ArgumentList *al);
- void setType(const char *t);
- void setAccessorType(ClassDef *cd,const char *t);
+ virtual void setArgumentList(ArgumentList *al) = 0;
+ virtual void setDeclArgumentList(ArgumentList *al) = 0;
+ virtual void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) = 0;
+ virtual void setTypeConstraints(ArgumentList *al) = 0;
+ virtual void setType(const char *t) = 0;
+ virtual void setAccessorType(ClassDef *cd,const char *t) = 0;
// namespace related members
- void setNamespace(NamespaceDef *nd);
+ virtual void setNamespace(NamespaceDef *nd) = 0;
// member group related members
- void setMemberGroup(MemberGroup *grp);
- void setMemberGroupId(int id);
- void makeImplementationDetail();
+ virtual void setMemberGroup(MemberGroup *grp) = 0;
+ virtual void setMemberGroupId(int id) = 0;
+ virtual void makeImplementationDetail() = 0;
// anonymous scope members
- void setFromAnonymousScope(bool b);
- void setFromAnonymousMember(MemberDef *m);
+ virtual void setFromAnonymousScope(bool b) = 0;
+ virtual void setFromAnonymousMember(MemberDef *m) = 0;
- void enableCallGraph(bool e);
- void enableCallerGraph(bool e);
+ virtual void enableCallGraph(bool e) = 0;
+ virtual void enableCallerGraph(bool e) = 0;
- void enableReferencedByRelation(bool e);
- void enableReferencesRelation(bool e);
+ virtual void enableReferencedByRelation(bool e) = 0;
+ virtual void enableReferencesRelation(bool e) = 0;
- void setTemplateMaster(MemberDef *mt);
- void addListReference(Definition *d);
- void setDocsForDefinition(bool b);
- void setGroupAlias(MemberDef *md);
+ virtual void setTemplateMaster(MemberDef *mt) = 0;
+ virtual void addListReference(Definition *d) = 0;
+ virtual void setDocsForDefinition(bool b) = 0;
+ virtual void setGroupAlias(MemberDef *md) = 0;
- void cacheTypedefVal(ClassDef *val,const QCString &templSpec,const QCString &resolvedType);
- void invalidateTypedefValCache();
+ virtual void cacheTypedefVal(ClassDef *val,const QCString &templSpec,const QCString &resolvedType) = 0;
+ virtual void invalidateTypedefValCache() = 0;
- void invalidateCachedArgumentTypes();
+ virtual void invalidateCachedArgumentTypes() = 0;
// declaration <-> definition relation
- void setMemberDefinition(MemberDef *md);
- void setMemberDeclaration(MemberDef *md);
+ virtual void setMemberDefinition(MemberDef *md) = 0;
+ virtual void setMemberDeclaration(MemberDef *md) = 0;
- void setAnonymousUsed();
- void copyArgumentNames(MemberDef *bmd);
+ virtual void setAnonymousUsed() = 0;
+ virtual void copyArgumentNames(MemberDef *bmd) = 0;
- void setCategory(ClassDef *);
- void setCategoryRelation(MemberDef *);
+ virtual void setCategory(ClassDef *) = 0;
+ virtual void setCategoryRelation(MemberDef *) = 0;
- void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
- void setBriefDescription(const char *b,const char *briefFile,int briefLine);
- void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine);
+ virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE) = 0;
+ virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine) = 0;
+ virtual void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine) = 0;
- void setHidden(bool b);
+ virtual void setHidden(bool b) = 0;
//-----------------------------------------------------------------------------------
// --- actions ----
//-----------------------------------------------------------------------------------
// output generation
- void writeDeclaration(OutputList &ol,
+ virtual void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0);
- void writeDocumentation(MemberList *ml,int memCount,int memTotal,OutputList &ol,
+ bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0) = 0;
+ virtual void writeDocumentation(MemberList *ml,int memCount,int memTotal,OutputList &ol,
const char *scopeName,Definition *container,
bool inGroup,bool showEnumValues=FALSE,bool
- showInline=FALSE);
- void writeMemberDocSimple(OutputList &ol,Definition *container);
- void writeEnumDeclaration(OutputList &typeDecl,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
- void writeTagFile(FTextStream &);
- void warnIfUndocumented();
- void warnIfUndocumentedParams();
-
- MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
- ArgumentList *actualArgs);
-
- void findSectionsInDocumentation();
-
- bool visited;
-
- protected:
- void flushToDisk() const;
- void loadFromDisk() const;
- private:
- void lock() const;
- void unlock() const;
- void saveToDisk() const;
- void makeResident() const;
- void _computeLinkableInProject();
- void _computeIsConstructor();
- void _computeIsDestructor();
- void _writeGroupInclude(OutputList &ol,bool inGroup);
- void _writeCallGraph(OutputList &ol);
- void _writeCallerGraph(OutputList &ol);
- void _writeReimplements(OutputList &ol);
- void _writeReimplementedBy(OutputList &ol);
- void _writeExamples(OutputList &ol);
- void _writeTypeConstraints(OutputList &ol);
- void _writeEnumValues(OutputList &ol,Definition *container,
- const QCString &cfname,const QCString &ciname,
- const QCString &cname);
- void _writeCategoryRelation(OutputList &ol);
- void _writeTagData(const DefType);
- void _addToSearchIndex();
-
- static int s_indentLevel;
-
- int number_of_flowkw;
-
- // disable copying of member defs
- MemberDef(const MemberDef &);
- MemberDef &operator=(const MemberDef &);
-
- void writeLink(OutputList &ol,
+ showInline=FALSE) = 0;
+ virtual void writeMemberDocSimple(OutputList &ol,Definition *container) = 0;
+ virtual void writeEnumDeclaration(OutputList &typeDecl,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd) = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+ virtual void warnIfUndocumented() = 0;
+ virtual void warnIfUndocumentedParams() = 0;
+
+ virtual MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
+ ArgumentList *actualArgs) = 0;
+
+ virtual void findSectionsInDocumentation() = 0;
+ virtual void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool onlyText=FALSE);
+ bool onlyText=FALSE) = 0;
+ virtual void addToSearchIndex() = 0;
- MemberDefImpl *m_impl;
- uchar m_isLinkableCached; // 0 = not cached, 1=FALSE, 2=TRUE
- uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
- uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
};
+/** Factory method to create a new instance of a MemberDef */
+MemberDef *createMemberDef(const char *defFileName,int defLine,int defColumn,
+ const char *type,const char *name,const char *args,
+ const char *excp,Protection prot,Specifier virt,bool stat,
+ Relationship related,MemberType t,const ArgumentList *tal,
+ const ArgumentList *al,const char *metaData);
+
void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef);
#endif
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 5ee47ab..9c48668 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -26,7 +26,6 @@
#include "groupdef.h"
#include "doxygen.h"
#include "docparser.h"
-#include "marshal.h"
#include "entry.h"
#include "md5.h"
@@ -44,8 +43,11 @@ MemberGroup::MemberGroup()
MemberGroup::MemberGroup(Definition *parent,
int id,const char *hdr,const char *d,const char *docFile,int docLine)
{
+ static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
+
//printf("New member group id=%d header=%s desc=%s\n",id,hdr,d);
memberList = new MemberList(MemberListType_memberGroup);
+ memberList->setNeedsSorting(sortBriefDocs); // detailed sections are already sorted elsewhere.
grpId = id;
grpHeader = hdr;
doc = d;
@@ -349,40 +351,6 @@ void MemberGroup::findSectionsInDocumentation()
memberList->findSectionsInDocumentation();
}
-void MemberGroup::marshal(StorageIntf *s)
-{
- marshalMemberList(s,memberList);
- marshalObjPointer(s,inDeclSection); // reference only
- marshalInt(s,grpId);
- marshalQCString(s,grpHeader);
- marshalQCString(s,fileName);
- marshalObjPointer(s,scope);
- marshalQCString(s,doc);
- marshalBool(s,inSameSection);
- marshalInt(s,m_numDecMembers);
- marshalInt(s,m_numDocMembers);
- marshalObjPointer(s,m_parent);
- marshalQCString(s,m_docFile);
- marshalItemInfoList (Doxygen::symbolStorage,m_xrefListItems);
-}
-
-void MemberGroup::unmarshal(StorageIntf *s)
-{
- memberList = unmarshalMemberList(s);
- inDeclSection = (MemberList *)unmarshalObjPointer(s);
- grpId = unmarshalInt(s);
- grpHeader = unmarshalQCString(s);
- fileName = unmarshalQCString(s);
- scope = (Definition *)unmarshalObjPointer(s);
- doc = unmarshalQCString(s);
- inSameSection = unmarshalBool(s);
- m_numDecMembers = unmarshalInt(s);
- m_numDocMembers = unmarshalInt(s);
- m_parent = (Definition *)unmarshalObjPointer(s);
- m_docFile = unmarshalQCString(s);
- m_xrefListItems = unmarshalItemInfoList (Doxygen::symbolStorage);
-}
-
void MemberGroup::setRefItems(const QList<ListItemInfo> *sli)
{
if (sli)
diff --git a/src/membergroup.h b/src/membergroup.h
index b590d48..51123bb 100644
--- a/src/membergroup.h
+++ b/src/membergroup.h
@@ -94,9 +94,6 @@ class MemberGroup
QCString docFile() const { return m_docFile; }
int docLine() const { return m_docLine; }
- void marshal(StorageIntf *s);
- void unmarshal(StorageIntf *s);
-
private:
MemberList *memberList; // list of all members in the group
MemberList *inDeclSection;
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index abb8aff..418b24a 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -25,7 +25,6 @@
#include "doxygen.h"
#include "outputlist.h"
#include "groupdef.h"
-#include "marshal.h"
#include "vhdldocgen.h"
#include "namespacedef.h"
#include "filedef.h"
@@ -90,6 +89,7 @@ int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const
return 1;
}
int cmp = qstricmp(c1->name(),c2->name());
+ if (cmp==0) cmp = qstricmp(c1->argsString(),c2->argsString());
return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine();
}
@@ -767,7 +767,7 @@ void MemberList::writeSimpleDocumentation(OutputList &ol,
ClassDef *cd = 0;
if (container && container->definitionType()==Definition::TypeClass)
{
- cd = (ClassDef*)container;
+ cd = dynamic_cast<ClassDef*>(container);
}
ol.startMemberDocSimple(cd && cd->isJavaEnum());
MemberListIterator mli(*this);
@@ -929,75 +929,6 @@ void MemberList::findSectionsInDocumentation()
}
}
-void MemberList::marshal(StorageIntf *s)
-{
- marshalInt(s,(int)m_listType);
- marshalInt(s,m_varCnt);
- marshalInt(s,m_funcCnt);
- marshalInt(s,m_enumCnt);
- marshalInt(s,m_enumValCnt);
- marshalInt(s,m_typeCnt);
- marshalInt(s,m_seqCnt);
- marshalInt(s,m_dictCnt);
- marshalInt(s,m_protoCnt);
- marshalInt(s,m_defCnt);
- marshalInt(s,m_friendCnt);
- marshalInt(s,m_numDecMembers);
- marshalInt(s,m_numDocMembers);
- marshalBool(s,m_inGroup);
- marshalBool(s,m_inFile);
- marshalBool(s,m_needsSorting);
- if (memberGroupList==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,memberGroupList->count());
- QListIterator<MemberGroup> mgi(*memberGroupList);
- MemberGroup *mg=0;
- for (mgi.toFirst();(mg=mgi.current());++mgi)
- {
- mg->marshal(s);
- }
- }
-}
-
-void MemberList::unmarshal(StorageIntf *s)
-{
- m_listType = (MemberListType)unmarshalInt(s);
- m_varCnt = unmarshalInt(s);
- m_funcCnt = unmarshalInt(s);
- m_enumCnt = unmarshalInt(s);
- m_enumValCnt = unmarshalInt(s);
- m_typeCnt = unmarshalInt(s);
- m_seqCnt = unmarshalInt(s);
- m_dictCnt = unmarshalInt(s);
- m_protoCnt = unmarshalInt(s);
- m_defCnt = unmarshalInt(s);
- m_friendCnt = unmarshalInt(s);
- m_numDecMembers = unmarshalInt(s);
- m_numDocMembers = unmarshalInt(s);
- m_inGroup = unmarshalBool(s);
- m_inFile = unmarshalBool(s);
- m_needsSorting = unmarshalBool(s);
- uint i,count = unmarshalUInt(s);
- if (count==NULL_LIST) // empty list
- {
- memberGroupList = 0;
- }
- else // add member groups
- {
- memberGroupList = new MemberGroupList;
- for (i=0;i<count;i++)
- {
- MemberGroup *mg = new MemberGroup;
- mg->unmarshal(s);
- memberGroupList->append(mg);
- }
- }
-}
-
void MemberList::setNeedsSorting(bool b)
{
m_needsSorting = b;
diff --git a/src/memberlist.h b/src/memberlist.h
index a96f61f..f0cc63d 100644
--- a/src/memberlist.h
+++ b/src/memberlist.h
@@ -89,9 +89,6 @@ class MemberList : private QList<MemberDef>
void setNeedsSorting(bool b);
MemberGroupList *getMemberGroupList() const { return memberGroupList; }
- void marshal(StorageIntf *s);
- void unmarshal(StorageIntf *s);
-
private:
int compareValues(const MemberDef *item1,const MemberDef *item2) const;
int countEnumValues(MemberDef *md,bool setAnonEnumType) const;
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index bc8bb47..0740512 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -30,14 +30,131 @@
#include "layout.h"
#include "membergroup.h"
#include "config.h"
+#include "definitionimpl.h"
//------------------------------------------------------------------
-NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
+class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef
+{
+ public:
+ NamespaceDefImpl(const char *defFileName,int defLine,int defColumn,
+ const char *name,const char *ref=0,
+ const char *refFile=0,const char*type=0,
+ bool isPublished=false);
+ virtual ~NamespaceDefImpl();
+ virtual DefType definitionType() const { return TypeNamespace; }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual void insertUsedFile(FileDef *fd);
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeMemberPages(OutputList &ol);
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
+ virtual void writeTagFile(FTextStream &);
+ virtual void insertClass(ClassDef *cd);
+ virtual void insertNamespace(NamespaceDef *nd);
+ virtual void insertMember(MemberDef *md);
+ virtual void computeAnchors();
+ virtual int countMembers();
+ virtual void addUsingDirective(NamespaceDef *nd);
+ virtual NamespaceSDict *getUsedNamespaces() const;
+ virtual void addUsingDeclaration(Definition *def);
+ virtual SDict<Definition> *getUsedClasses() const { return usingDeclList; }
+ virtual void combineUsingRelations();
+ virtual QCString displayName(bool=TRUE) const;
+ virtual QCString localName() const;
+ virtual void setInline(bool isInline) { m_inline = isInline; }
+ virtual bool isConstantGroup() const { return CONSTANT_GROUP == m_type; }
+ virtual bool isModule() const { return MODULE == m_type; }
+ virtual bool isLibrary() const { return LIBRARY == m_type; }
+ virtual bool isInline() const { return m_inline; }
+ virtual bool isLinkableInProject() const;
+ virtual bool isLinkable() const;
+ virtual bool hasDetailedDescription() const;
+ virtual void addMembersToMemberGroup();
+ virtual void distributeMemberGroupDocumentation();
+ virtual void findSectionsInDocumentation();
+ virtual void sortMemberLists();
+ virtual Definition *findInnerCompound(const char *name) const;
+ virtual void addInnerCompound(Definition *d);
+ virtual void addListReferences();
+ virtual void setFileName(const QCString &fn);
+ virtual bool subGrouping() const { return m_subGrouping; }
+ virtual MemberList *getMemberList(MemberListType lt) const;
+ virtual const QList<MemberList> &getMemberLists() const { return m_memberLists; }
+ virtual MemberDef *getMemberByName(const QCString &) const;
+ virtual MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
+ virtual ClassSDict *getClassSDict() const { return classSDict; }
+ virtual ClassSDict *getInterfaceSDict() const { return interfaceSDict; }
+ virtual ClassSDict *getStructSDict() const { return structSDict; }
+ virtual ClassSDict *getExceptionSDict() const { return exceptionSDict; }
+ virtual NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
+
+ virtual QCString title() const;
+ virtual QCString compoundTypeString() const;
+
+ virtual void setMetaData(const QCString &m);
+ void setVisited(bool v) { m_visited = v; }
+ bool isVisited() const { return m_visited; }
+
+ private:
+ bool m_visited;
+ MemberList *createMemberList(MemberListType lt);
+ void addMemberToList(MemberListType lt,MemberDef *md);
+ void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+ void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d);
+ void writeInlineClasses(OutputList &ol);
+ void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
+ bool isConstantGroup=false);
+ void writeMemberGroups(OutputList &ol);
+ void writeAuthorSection(OutputList &ol);
+ void startMemberDocumentation(OutputList &ol);
+ void endMemberDocumentation(OutputList &ol);
+ void writeSummaryLinks(OutputList &ol);
+ void addNamespaceAttributes(OutputList &ol);
+ void writeClassesToTagFile(FTextStream &,ClassSDict *d);
+
+ QCString fileName;
+ FileList files;
+
+ NamespaceSDict *usingDirList;
+ SDict<Definition> *usingDeclList;
+ SDict<Definition> *m_innerCompounds;
+
+ MemberSDict *m_allMembersDict;
+ QList<MemberList> m_memberLists;
+ MemberGroupSDict *memberGroupSDict;
+ ClassSDict *classSDict;
+ ClassSDict *interfaceSDict;
+ ClassSDict *structSDict;
+ ClassSDict *exceptionSDict;
+ NamespaceSDict *namespaceSDict;
+ bool m_subGrouping;
+ enum { NAMESPACE, MODULE, CONSTANT_GROUP, LIBRARY } m_type;
+ bool m_isPublished;
+ QCString metaData;
+ bool m_inline;
+};
+
+NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColumn,
+ const char *name,const char *ref,
+ const char *refFile,const char*type,
+ bool isPublished)
+{
+ return new NamespaceDefImpl(defFileName,defLine,defColumn,name,ref,refFile,type,isPublished);
+}
+
+//------------------------------------------------------------------
+
+NamespaceDefImpl::NamespaceDefImpl(const char *df,int dl,int dc,
const char *name,const char *lref,
const char *fName, const char*type,
bool isPublished) :
- Definition(df,dl,dc,name)
+ DefinitionImpl(df,dl,dc,name)
,m_isPublished(isPublished)
{
if (fName)
@@ -67,7 +184,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
setReference(lref);
memberGroupSDict = new MemberGroupSDict;
memberGroupSDict->setAutoDelete(TRUE);
- visited=FALSE;
+ m_visited=FALSE;
m_subGrouping=Config_getBool(SUBGROUPING);
if (type && !strcmp("module", type))
{
@@ -87,7 +204,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
}
}
-NamespaceDef::~NamespaceDef()
+NamespaceDefImpl::~NamespaceDefImpl()
{
delete classSDict;
delete interfaceSDict;
@@ -101,7 +218,7 @@ NamespaceDef::~NamespaceDef()
delete m_allMembersDict;
}
-void NamespaceDef::setFileName(const QCString &fn)
+void NamespaceDefImpl::setFileName(const QCString &fn)
{
if (isReference())
{
@@ -113,7 +230,7 @@ void NamespaceDef::setFileName(const QCString &fn)
}
}
-void NamespaceDef::distributeMemberGroupDocumentation()
+void NamespaceDefImpl::distributeMemberGroupDocumentation()
{
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
@@ -123,7 +240,7 @@ void NamespaceDef::distributeMemberGroupDocumentation()
}
}
-void NamespaceDef::findSectionsInDocumentation()
+void NamespaceDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
@@ -143,7 +260,7 @@ void NamespaceDef::findSectionsInDocumentation()
}
}
-void NamespaceDef::insertUsedFile(FileDef *fd)
+void NamespaceDefImpl::insertUsedFile(FileDef *fd)
{
if (fd==0) return;
if (files.find(fd)==-1)
@@ -155,20 +272,20 @@ void NamespaceDef::insertUsedFile(FileDef *fd)
}
}
-void NamespaceDef::addInnerCompound(Definition *d)
+void NamespaceDefImpl::addInnerCompound(Definition *d)
{
m_innerCompounds->append(d->localName(),d);
if (d->definitionType()==Definition::TypeNamespace)
{
- insertNamespace((NamespaceDef *)d);
+ insertNamespace(dynamic_cast<NamespaceDef *>(d));
}
else if (d->definitionType()==Definition::TypeClass)
{
- insertClass((ClassDef *)d);
+ insertClass(dynamic_cast<ClassDef *>(d));
}
}
-void NamespaceDef::insertClass(ClassDef *cd)
+void NamespaceDefImpl::insertClass(ClassDef *cd)
{
ClassSDict *d = classSDict;
@@ -201,7 +318,7 @@ void NamespaceDef::insertClass(ClassDef *cd)
}
}
-void NamespaceDef::insertNamespace(NamespaceDef *nd)
+void NamespaceDefImpl::insertNamespace(NamespaceDef *nd)
{
if (namespaceSDict->find(nd->name())==0)
{
@@ -213,7 +330,7 @@ void NamespaceDef::insertNamespace(NamespaceDef *nd)
}
-void NamespaceDef::addMembersToMemberGroup()
+void NamespaceDefImpl::addMembersToMemberGroup()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -241,7 +358,7 @@ void NamespaceDef::addMembersToMemberGroup()
}
}
-void NamespaceDef::insertMember(MemberDef *md)
+void NamespaceDefImpl::insertMember(MemberDef *md)
{
if (md->isHidden()) return;
MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
@@ -292,7 +409,7 @@ void NamespaceDef::insertMember(MemberDef *md)
addMemberToList(MemberListType_docDefineMembers,md);
break;
default:
- err("NamespaceDef::insertMembers(): "
+ err("NamespaceDefImpl::insertMembers(): "
"member `%s' with class scope `%s' inserted in namespace scope `%s'!\n",
md->name().data(),
md->getClassDef() ? md->getClassDef()->name().data() : "",
@@ -300,20 +417,20 @@ void NamespaceDef::insertMember(MemberDef *md)
}
}
-void NamespaceDef::computeAnchors()
+void NamespaceDefImpl::computeAnchors()
{
MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
if (allMemberList) setAnchors(allMemberList);
}
-bool NamespaceDef::hasDetailedDescription() const
+bool NamespaceDefImpl::hasDetailedDescription() const
{
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
return ((!briefDescription().isEmpty() && repeatBrief) ||
!documentation().isEmpty());
}
-void NamespaceDef::writeTagFile(FTextStream &tagFile)
+void NamespaceDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <compound kind=\"namespace\">" << endl;
tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
@@ -401,7 +518,7 @@ void NamespaceDef::writeTagFile(FTextStream &tagFile)
tagFile << " </compound>" << endl;
}
-void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title)
+void NamespaceDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if (hasDetailedDescription())
{
@@ -443,7 +560,7 @@ void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title
}
}
-void NamespaceDef::writeBriefDescription(OutputList &ol)
+void NamespaceDefImpl::writeBriefDescription(OutputList &ol)
{
if (hasBriefDescription())
{
@@ -501,17 +618,17 @@ void NamespaceDef::writeBriefDescription(OutputList &ol)
ol.writeSynopsis();
}
-void NamespaceDef::startMemberDeclarations(OutputList &ol)
+void NamespaceDefImpl::startMemberDeclarations(OutputList &ol)
{
ol.startMemberSections();
}
-void NamespaceDef::endMemberDeclarations(OutputList &ol)
+void NamespaceDefImpl::endMemberDeclarations(OutputList &ol)
{
ol.endMemberSections();
}
-void NamespaceDef::startMemberDocumentation(OutputList &ol)
+void NamespaceDefImpl::startMemberDocumentation(OutputList &ol)
{
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
@@ -520,7 +637,7 @@ void NamespaceDef::startMemberDocumentation(OutputList &ol)
}
}
-void NamespaceDef::endMemberDocumentation(OutputList &ol)
+void NamespaceDefImpl::endMemberDocumentation(OutputList &ol)
{
if (Config_getBool(SEPARATE_MEMBER_PAGES))
{
@@ -529,23 +646,23 @@ void NamespaceDef::endMemberDocumentation(OutputList &ol)
}
}
-void NamespaceDef::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d)
+void NamespaceDefImpl::writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d)
{
if (d) d->writeDeclaration(ol,0,title,TRUE);
}
-void NamespaceDef::writeInlineClasses(OutputList &ol)
+void NamespaceDefImpl::writeInlineClasses(OutputList &ol)
{
if (classSDict) classSDict->writeDocumentation(ol,this);
}
-void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
+void NamespaceDefImpl::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
bool const isConstantGroup)
{
if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup,TRUE);
}
-void NamespaceDef::writeMemberGroups(OutputList &ol)
+void NamespaceDefImpl::writeMemberGroups(OutputList &ol)
{
/* write user defined member groups */
if (memberGroupSDict)
@@ -564,7 +681,7 @@ void NamespaceDef::writeMemberGroups(OutputList &ol)
}
}
-void NamespaceDef::writeAuthorSection(OutputList &ol)
+void NamespaceDefImpl::writeAuthorSection(OutputList &ol)
{
// write Author section (Man only)
ol.pushGeneratorState();
@@ -576,7 +693,7 @@ void NamespaceDef::writeAuthorSection(OutputList &ol)
ol.popGeneratorState();
}
-void NamespaceDef::writeSummaryLinks(OutputList &ol)
+void NamespaceDefImpl::writeSummaryLinks(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -640,7 +757,7 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
ol.popGeneratorState();
}
-void NamespaceDef::addNamespaceAttributes(OutputList &ol)
+void NamespaceDefImpl::addNamespaceAttributes(OutputList &ol)
{
// UNO IDL constant groups may be published
if (getLanguage()==SrcLangExt_IDL && isConstantGroup() && m_isPublished)
@@ -654,7 +771,7 @@ void NamespaceDef::addNamespaceAttributes(OutputList &ol)
}
}
-void NamespaceDef::writeClassesToTagFile(FTextStream &tagFile,ClassSDict *d)
+void NamespaceDefImpl::writeClassesToTagFile(FTextStream &tagFile,ClassSDict *d)
{
SDict<ClassDef>::Iterator ci(*d);
ClassDef *cd;
@@ -668,7 +785,7 @@ void NamespaceDef::writeClassesToTagFile(FTextStream &tagFile,ClassSDict *d)
}
}
-void NamespaceDef::writeDocumentation(OutputList &ol)
+void NamespaceDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
//static bool outputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
@@ -838,7 +955,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
}
}
-void NamespaceDef::writeMemberPages(OutputList &ol)
+void NamespaceDefImpl::writeMemberPages(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -855,7 +972,7 @@ void NamespaceDef::writeMemberPages(OutputList &ol)
ol.popGeneratorState();
}
-void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
+void NamespaceDefImpl::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
{
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
@@ -898,7 +1015,7 @@ void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) co
ol.writeString(" </div>\n");
}
-int NamespaceDef::countMembers()
+int NamespaceDefImpl::countMembers()
{
MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
if (allMemberList) allMemberList->countDocMembers();
@@ -906,7 +1023,7 @@ int NamespaceDef::countMembers()
classSDict->count() + interfaceSDict->count() + structSDict->count() + exceptionSDict->count();
}
-void NamespaceDef::addUsingDirective(NamespaceDef *nd)
+void NamespaceDefImpl::addUsingDirective(NamespaceDef *nd)
{
if (usingDirList==0)
{
@@ -916,16 +1033,16 @@ void NamespaceDef::addUsingDirective(NamespaceDef *nd)
{
usingDirList->append(nd->qualifiedName(),nd);
}
- //printf("%p: NamespaceDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
+ //printf("%p: NamespaceDefImpl::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
}
-NamespaceSDict *NamespaceDef::getUsedNamespaces() const
+NamespaceSDict *NamespaceDefImpl::getUsedNamespaces() const
{
- //printf("%p: NamespaceDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
+ //printf("%p: NamespaceDefImpl::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
return usingDirList;
}
-void NamespaceDef::addUsingDeclaration(Definition *d)
+void NamespaceDefImpl::addUsingDeclaration(Definition *d)
{
if (usingDeclList==0)
{
@@ -937,12 +1054,12 @@ void NamespaceDef::addUsingDeclaration(Definition *d)
}
}
-QCString NamespaceDef::getOutputFileBase() const
+QCString NamespaceDefImpl::getOutputFileBase() const
{
return fileName;
}
-Definition *NamespaceDef::findInnerCompound(const char *n) const
+Definition *NamespaceDefImpl::findInnerCompound(const char *n) const
{
if (n==0) return 0;
Definition *d = m_innerCompounds->find(n);
@@ -960,7 +1077,7 @@ Definition *NamespaceDef::findInnerCompound(const char *n) const
return d;
}
-void NamespaceDef::addListReferences()
+void NamespaceDefImpl::addListReferences()
{
//bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
{
@@ -992,7 +1109,7 @@ void NamespaceDef::addListReferences()
}
}
-QCString NamespaceDef::displayName(bool includeScope) const
+QCString NamespaceDefImpl::displayName(bool includeScope) const
{
QCString result=includeScope ? name() : localName();
SrcLangExt lang = getLanguage();
@@ -1001,11 +1118,11 @@ QCString NamespaceDef::displayName(bool includeScope) const
{
result = substitute(result,"::",sep);
}
- //printf("NamespaceDef::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang);
+ //printf("NamespaceDefImpl::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang);
return result;
}
-QCString NamespaceDef::localName() const
+QCString NamespaceDefImpl::localName() const
{
QCString result=name();
int i=result.findRev("::");
@@ -1016,10 +1133,10 @@ QCString NamespaceDef::localName() const
return result;
}
-void NamespaceDef::combineUsingRelations()
+void NamespaceDefImpl::combineUsingRelations()
{
- if (visited) return; // already done
- visited=TRUE;
+ if (m_visited) return; // already done
+ m_visited=TRUE;
if (usingDirList)
{
NamespaceSDict::Iterator nli(*usingDirList);
@@ -1152,7 +1269,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
ol.endMemberList();
}
-MemberList *NamespaceDef::createMemberList(MemberListType lt)
+MemberList *NamespaceDefImpl::createMemberList(MemberListType lt)
{
m_memberLists.setAutoDelete(TRUE);
QListIterator<MemberList> mli(m_memberLists);
@@ -1170,7 +1287,7 @@ MemberList *NamespaceDef::createMemberList(MemberListType lt)
return ml;
}
-void NamespaceDef::addMemberToList(MemberListType lt,MemberDef *md)
+void NamespaceDefImpl::addMemberToList(MemberListType lt,MemberDef *md)
{
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
@@ -1190,7 +1307,7 @@ void NamespaceDef::addMemberToList(MemberListType lt,MemberDef *md)
if (ml->listType()&MemberListType_declarationLists) md->setSectionList(this,ml);
}
-void NamespaceDef::sortMemberLists()
+void NamespaceDefImpl::sortMemberLists()
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1220,7 +1337,7 @@ void NamespaceDef::sortMemberLists()
}
}
-MemberList *NamespaceDef::getMemberList(MemberListType lt) const
+MemberList *NamespaceDefImpl::getMemberList(MemberListType lt) const
{
QListIterator<MemberList> mli(m_memberLists);
MemberList *ml;
@@ -1234,20 +1351,20 @@ MemberList *NamespaceDef::getMemberList(MemberListType lt) const
return 0;
}
-void NamespaceDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
+void NamespaceDefImpl::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0);
}
-void NamespaceDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
+void NamespaceDefImpl::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
{
MemberList * ml = getMemberList(lt);
if (ml) ml->writeDocumentation(ol,displayName(),this,title);
}
-bool NamespaceDef::isLinkableInProject() const
+bool NamespaceDefImpl::isLinkableInProject() const
{
int i = name().findRev("::");
if (i==-1) i=0; else i+=2;
@@ -1265,12 +1382,12 @@ bool NamespaceDef::isLinkableInProject() const
!isArtificial(); // or artificial
}
-bool NamespaceDef::isLinkable() const
+bool NamespaceDefImpl::isLinkable() const
{
return isLinkableInProject() || isReference();
}
-MemberDef * NamespaceDef::getMemberByName(const QCString &n) const
+MemberDef * NamespaceDefImpl::getMemberByName(const QCString &n) const
{
MemberDef *md = 0;
if (m_allMembersDict && !n.isEmpty())
@@ -1281,7 +1398,7 @@ MemberDef * NamespaceDef::getMemberByName(const QCString &n) const
return md;
}
-QCString NamespaceDef::title() const
+QCString NamespaceDefImpl::title() const
{
SrcLangExt lang = getLanguage();
QCString pageTitle;
@@ -1306,7 +1423,7 @@ QCString NamespaceDef::title() const
return pageTitle;
}
-QCString NamespaceDef::compoundTypeString() const
+QCString NamespaceDefImpl::compoundTypeString() const
{
SrcLangExt lang = getLanguage();
if (lang==SrcLangExt_Java)
@@ -1343,7 +1460,7 @@ QCString NamespaceDef::compoundTypeString() const
return "";
}
-void NamespaceDef::setMetaData(const QCString &m)
+void NamespaceDefImpl::setMetaData(const QCString &m)
{
metaData = m;
}
diff --git a/src/namespacedef.h b/src/namespacedef.h
index b46d074..bfa8c42 100644
--- a/src/namespacedef.h
+++ b/src/namespacedef.h
@@ -26,138 +26,99 @@
class MemberList;
class ClassDef;
-class ClassList;
class OutputList;
class ClassSDict;
class MemberDef;
-class NamespaceList;
class MemberGroupSDict;
class NamespaceSDict;
class FTextStream;
-/** A model of a namespace symbol. */
-class NamespaceDef : public Definition
+/** An abstract interface of a namespace symbol. */
+class NamespaceDef : virtual public Definition
{
public:
- NamespaceDef(const char *defFileName,int defLine,int defColumn,
- const char *name,const char *ref=0,
- const char *refFile=0,const char*type=0,
- bool isPublished=false);
- ~NamespaceDef();
- DefType definitionType() const { return TypeNamespace; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- void insertUsedFile(FileDef *fd);
-
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
- void writeTagFile(FTextStream &);
-
- void insertClass(ClassDef *cd);
- void insertNamespace(NamespaceDef *nd);
- void insertMember(MemberDef *md);
-
- void computeAnchors();
- int countMembers();
- void addUsingDirective(NamespaceDef *nd);
- NamespaceSDict *getUsedNamespaces() const;
- void addUsingDeclaration(Definition *def);
- SDict<Definition> *getUsedClasses() const { return usingDeclList; }
- void combineUsingRelations();
- QCString displayName(bool=TRUE) const;
- QCString localName() const;
-
- bool isConstantGroup() const { return CONSTANT_GROUP == m_type; }
- bool isModule() const { return MODULE == m_type; }
- bool isLibrary() const { return LIBRARY == m_type; }
-
- bool isLinkableInProject() const;
- bool isLinkable() const;
- bool hasDetailedDescription() const;
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
- void sortMemberLists();
-
- virtual Definition *findInnerCompound(const char *name) const;
- void addInnerCompound(Definition *d);
- void addListReferences();
- void setFileName(const QCString &fn);
-
- bool subGrouping() const { return m_subGrouping; }
-
- MemberList *getMemberList(MemberListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
- MemberDef *getMemberByName(const QCString &) const;
+ virtual ~NamespaceDef() {}
+ virtual DefType definitionType() const = 0;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual void insertUsedFile(FileDef *fd) = 0;
+
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeMemberPages(OutputList &ol) = 0;
+ virtual void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+
+ virtual void insertClass(ClassDef *cd) = 0;
+ virtual void insertNamespace(NamespaceDef *nd) = 0;
+ virtual void insertMember(MemberDef *md) = 0;
+
+ virtual void computeAnchors() = 0;
+ virtual int countMembers() = 0;
+ virtual void addUsingDirective(NamespaceDef *nd) = 0;
+ virtual NamespaceSDict *getUsedNamespaces() const = 0;
+ virtual void addUsingDeclaration(Definition *def) = 0;
+ virtual SDict<Definition> *getUsedClasses() const = 0;
+ virtual void combineUsingRelations() = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual QCString localName() const = 0;
+ virtual void setInline(bool isInline) = 0;
+
+ virtual bool isConstantGroup() const = 0;
+ virtual bool isModule() const = 0;
+ virtual bool isLibrary() const = 0;
+ virtual bool isInline() const = 0;
+
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual bool hasDetailedDescription() const = 0;
+ virtual void addMembersToMemberGroup() = 0;
+ virtual void distributeMemberGroupDocumentation() = 0;
+ virtual void findSectionsInDocumentation() = 0;
+ virtual void sortMemberLists() = 0;
+
+ virtual Definition *findInnerCompound(const char *name) const = 0;
+ virtual void addInnerCompound(Definition *d) = 0;
+ virtual void addListReferences() = 0;
+ virtual void setFileName(const QCString &fn) = 0;
+
+ virtual bool subGrouping() const = 0;
+
+ virtual MemberList *getMemberList(MemberListType lt) const = 0;
+ virtual const QList<MemberList> &getMemberLists() const = 0;
+ virtual MemberDef *getMemberByName(const QCString &) const = 0;
/*! Returns the user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
+ virtual MemberGroupSDict *getMemberGroupSDict() const = 0;
/*! Returns the classes contained in this namespace */
- ClassSDict *getClassSDict() const { return classSDict; }
+ virtual ClassSDict *getClassSDict() const = 0;
/*! Returns the Slice interfaces contained in this namespace */
- ClassSDict *getInterfaceSDict() const { return interfaceSDict; }
+ virtual ClassSDict *getInterfaceSDict() const = 0;
/*! Returns the Slice structs contained in this namespace */
- ClassSDict *getStructSDict() const { return structSDict; }
+ virtual ClassSDict *getStructSDict() const = 0;
/*! Returns the Slice exceptions contained in this namespace */
- ClassSDict *getExceptionSDict() const { return exceptionSDict; }
+ virtual ClassSDict *getExceptionSDict() const = 0;
/*! Returns the namespaces contained in this namespace */
- NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
-
- QCString title() const;
- QCString compoundTypeString() const;
-
- void setMetaData(const QCString &m);
+ virtual NamespaceSDict *getNamespaceSDict() const = 0;
- bool visited;
+ virtual QCString title() const = 0;
+ virtual QCString compoundTypeString() const = 0;
- private:
- MemberList *createMemberList(MemberListType lt);
- void addMemberToList(MemberListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void writeClassDeclarations(OutputList &ol,const QCString &title,ClassSDict *d);
- void writeInlineClasses(OutputList &ol);
- void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
- bool isConstantGroup=false);
- void writeMemberGroups(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeSummaryLinks(OutputList &ol);
- void addNamespaceAttributes(OutputList &ol);
- void writeClassesToTagFile(FTextStream &,ClassSDict *d);
-
- QCString fileName;
- FileList files;
-
- NamespaceSDict *usingDirList;
- SDict<Definition> *usingDeclList;
- SDict<Definition> *m_innerCompounds;
-
- MemberSDict *m_allMembersDict;
- QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
- ClassSDict *classSDict;
- ClassSDict *interfaceSDict;
- ClassSDict *structSDict;
- ClassSDict *exceptionSDict;
- NamespaceSDict *namespaceSDict;
- bool m_subGrouping;
- enum { NAMESPACE, MODULE, CONSTANT_GROUP, LIBRARY } m_type;
- bool m_isPublished;
- QCString metaData;
+ virtual void setMetaData(const QCString &m) = 0;
+ virtual void setVisited(bool v) = 0;
+ virtual bool isVisited() const = 0;
};
+/** Factory method to create new NamespaceDef instance */
+NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColumn,
+ const char *name,const char *ref=0,
+ const char *refFile=0,const char*type=0,
+ bool isPublished=false);
+
/** A list of NamespaceDef objects. */
class NamespaceList : public QList<NamespaceDef>
{
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index 93d5817..8272cf6 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -25,10 +25,64 @@
#include "language.h"
#include "namespacedef.h"
#include "reflist.h"
+#include "definitionimpl.h"
-PageDef::PageDef(const char *f,int l,const char *n,
+//------------------------------------------------------------------------------------------
+
+class PageDefImpl : public DefinitionImpl, public PageDef
+{
+ public:
+ PageDefImpl(const char *f,int l,const char *n,const char *d,const char *t);
+ virtual ~PageDefImpl();
+
+ virtual void setFileName(const char *name);
+ virtual void setLocalToc(const LocalToc &tl);
+ virtual void setShowLineNo(bool);
+ virtual DefType definitionType() const { return TypePage; }
+ virtual bool isLinkableInProject() const { return /*hasDocumentation() &&*/ !isReference(); }
+ virtual bool isLinkable() const { return isLinkableInProject() || isReference(); }
+ virtual QCString getOutputFileBase() const;
+ virtual QCString anchor() const { return QCString(); }
+ virtual void findSectionsInDocumentation();
+ virtual QCString title() const { return m_title; }
+ virtual GroupDef * getGroupDef() const;
+ virtual PageSDict * getSubPages() const { return m_subPageDict; }
+ virtual void addInnerCompound(Definition *d);
+ virtual bool visibleInIndex() const;
+ virtual bool documentedPage() const;
+ virtual bool hasSubPages() const;
+ virtual bool hasParentPage() const;
+ virtual bool hasTitle() const;
+ virtual LocalToc localToc() const { return m_localToc; }
+ virtual void setPageScope(Definition *d){ m_pageScope = d; }
+ virtual Definition *getPageScope() const { return m_pageScope; }
+ virtual QCString displayName(bool=TRUE) const { return hasTitle() ? m_title : DefinitionImpl::name(); }
+ virtual bool showLineNo() const;
+ virtual void writeDocumentation(OutputList &ol);
+ virtual void writeTagFile(FTextStream &);
+ virtual void setNestingLevel(int l);
+ virtual void writePageDocumentation(OutputList &ol);
+
+ private:
+ QCString m_fileName;
+ QCString m_title;
+ PageSDict *m_subPageDict; // list of pages in the group
+ Definition *m_pageScope;
+ int m_nestingLevel;
+ LocalToc m_localToc;
+ bool m_showLineNo;
+};
+
+PageDef *createPageDef(const char *f,int l,const char *n,const char *d,const char *t)
+{
+ return new PageDefImpl(f,l,n,d,t);
+}
+
+//------------------------------------------------------------------------------------------
+
+PageDefImpl::PageDefImpl(const char *f,int l,const char *n,
const char *d,const char *t)
- : Definition(f,l,1,n), m_title(t)
+ : DefinitionImpl(f,l,1,n), m_title(t)
{
setDocumentation(d,f,l);
m_subPageDict = new PageSDict(7);
@@ -38,23 +92,23 @@ PageDef::PageDef(const char *f,int l,const char *n,
m_showLineNo = FALSE;
}
-PageDef::~PageDef()
+PageDefImpl::~PageDefImpl()
{
delete m_subPageDict;
}
-void PageDef::findSectionsInDocumentation()
+void PageDefImpl::findSectionsInDocumentation()
{
docFindSections(documentation(),this,0,docFile());
}
-GroupDef *PageDef::getGroupDef() const
+GroupDef *PageDefImpl::getGroupDef() const
{
GroupList *groups = partOfGroups();
return groups!=0 ? groups->getFirst() : 0;
}
-QCString PageDef::getOutputFileBase() const
+QCString PageDefImpl::getOutputFileBase() const
{
if (getGroupDef())
return getGroupDef()->getOutputFileBase();
@@ -62,16 +116,16 @@ QCString PageDef::getOutputFileBase() const
return m_fileName;
}
-void PageDef::setFileName(const char *name)
+void PageDefImpl::setFileName(const char *name)
{
m_fileName = name;
}
-void PageDef::addInnerCompound(Definition *def)
+void PageDefImpl::addInnerCompound(Definition *def)
{
if (def->definitionType()==Definition::TypePage)
{
- PageDef *pd = (PageDef*)def;
+ PageDef *pd = dynamic_cast<PageDef*>(def);
m_subPageDict->append(pd->name(),pd);
def->setOuterScope(this);
if (this==Doxygen::mainPage)
@@ -85,13 +139,13 @@ void PageDef::addInnerCompound(Definition *def)
}
}
-bool PageDef::hasParentPage() const
+bool PageDefImpl::hasParentPage() const
{
return getOuterScope() &&
getOuterScope()->definitionType()==Definition::TypePage;
}
-void PageDef::writeTagFile(FTextStream &tagFile)
+void PageDefImpl::writeTagFile(FTextStream &tagFile)
{
bool found = name()=="citelist";
QDictIterator<RefList> rli(*Doxygen::xrefLists);
@@ -115,7 +169,7 @@ void PageDef::writeTagFile(FTextStream &tagFile)
}
}
-void PageDef::writeDocumentation(OutputList &ol)
+void PageDefImpl::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
@@ -124,7 +178,7 @@ void PageDef::writeDocumentation(OutputList &ol)
pageName = escapeCharsInString(name(),FALSE,TRUE);
manPageName = escapeCharsInString(name(),TRUE,TRUE);
- //printf("PageDef::writeDocumentation: %s\n",getOutputFileBase().data());
+ //printf("PageDefImpl::writeDocumentation: %s\n",getOutputFileBase().data());
ol.pushGeneratorState();
//1.{
@@ -232,7 +286,7 @@ void PageDef::writeDocumentation(OutputList &ol)
Doxygen::indexList->addIndexItem(this,0,0,filterTitle(title()));
}
-void PageDef::writePageDocumentation(OutputList &ol)
+void PageDefImpl::writePageDocumentation(OutputList &ol)
{
bool markdownEnabled = Doxygen::markdownSupport;
@@ -300,7 +354,7 @@ void PageDef::writePageDocumentation(OutputList &ol)
}
}
-bool PageDef::visibleInIndex() const
+bool PageDefImpl::visibleInIndex() const
{
static bool externalPages = Config_getBool(EXTERNAL_PAGES);
return // not part of a group
@@ -310,7 +364,7 @@ bool PageDef::visibleInIndex() const
;
}
-bool PageDef::documentedPage() const
+bool PageDefImpl::documentedPage() const
{
return // not part of a group
!getGroupDef() &&
@@ -318,32 +372,32 @@ bool PageDef::documentedPage() const
!isReference();
}
-bool PageDef::hasSubPages() const
+bool PageDefImpl::hasSubPages() const
{
return m_subPageDict->count()>0;
}
-void PageDef::setNestingLevel(int l)
+void PageDefImpl::setNestingLevel(int l)
{
m_nestingLevel = l;
}
-void PageDef::setLocalToc(const LocalToc &lt)
+void PageDefImpl::setLocalToc(const LocalToc &lt)
{
m_localToc = lt;
}
-void PageDef::setShowLineNo(bool b)
+void PageDefImpl::setShowLineNo(bool b)
{
m_showLineNo = b;
}
-bool PageDef::showLineNo() const
+bool PageDefImpl::showLineNo() const
{
return m_showLineNo;
}
-bool PageDef::hasTitle() const
+bool PageDefImpl::hasTitle() const
{
return !m_title.isEmpty() && m_title.lower()!="notitle";
}
diff --git a/src/pagedef.h b/src/pagedef.h
index e958617..f0b68d1 100644
--- a/src/pagedef.h
+++ b/src/pagedef.h
@@ -26,63 +26,47 @@ class OutputList;
class FTextStream;
/** @brief A model of a page symbol. */
-class PageDef : public Definition
+class PageDef : virtual public Definition
{
public:
- PageDef(const char *f,int l,const char *n,const char *d,const char *t);
- ~PageDef();
+ virtual ~PageDef() {}
// setters
- void setFileName(const char *name);
- void setLocalToc(const LocalToc &tl);
- void setShowLineNo(bool);
+ virtual void setFileName(const char *name) = 0;
+ virtual void setLocalToc(const LocalToc &tl) = 0;
+ virtual void setShowLineNo(bool) = 0;
// getters
- DefType definitionType() const { return TypePage; }
- bool isLinkableInProject() const
- {
- return /*hasDocumentation() &&*/ !isReference();
- }
- bool isLinkable() const
- {
- return isLinkableInProject() || isReference();
- }
-
- // functions to get a uniform interface with Definitions
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- void findSectionsInDocumentation();
- QCString title() const { return m_title; }
- GroupDef * getGroupDef() const;
- PageSDict * getSubPages() const { return m_subPageDict; }
- void addInnerCompound(Definition *d);
- bool visibleInIndex() const;
- bool documentedPage() const;
- bool hasSubPages() const;
- bool hasParentPage() const;
- bool hasTitle() const;
- LocalToc localToc() const { return m_localToc; }
- void setPageScope(Definition *d){ m_pageScope = d; }
- Definition *getPageScope() const { return m_pageScope; }
- QCString displayName(bool=TRUE) const
- { return hasTitle() ? m_title : Definition::name(); }
- bool showLineNo() const;
+ virtual DefType definitionType() const = 0;
+ virtual bool isLinkableInProject() const = 0;
+ virtual bool isLinkable() const = 0;
+ virtual QCString getOutputFileBase() const = 0;
+ virtual QCString anchor() const = 0;
+ virtual void findSectionsInDocumentation() = 0;
+ virtual QCString title() const = 0;
+ virtual GroupDef * getGroupDef() const = 0;
+ virtual PageSDict * getSubPages() const = 0;
+ virtual void addInnerCompound(Definition *d) = 0;
+ virtual bool visibleInIndex() const = 0;
+ virtual bool documentedPage() const = 0;
+ virtual bool hasSubPages() const = 0;
+ virtual bool hasParentPage() const = 0;
+ virtual bool hasTitle() const = 0;
+ virtual LocalToc localToc() const = 0;
+ virtual void setPageScope(Definition *d) = 0;
+ virtual Definition *getPageScope() const = 0;
+ virtual QCString displayName(bool=TRUE) const = 0;
+ virtual bool showLineNo() const = 0;
- void writeDocumentation(OutputList &ol);
- void writeTagFile(FTextStream &);
+ virtual void writeDocumentation(OutputList &ol) = 0;
+ virtual void writeTagFile(FTextStream &) = 0;
+ virtual void setNestingLevel(int l) = 0;
+ virtual void writePageDocumentation(OutputList &ol) = 0;
- private:
- void setNestingLevel(int l);
- void writePageDocumentation(OutputList &ol);
- QCString m_fileName;
- QCString m_title;
- PageSDict *m_subPageDict; // list of pages in the group
- Definition *m_pageScope;
- int m_nestingLevel;
- LocalToc m_localToc;
- bool m_showLineNo;
};
+PageDef *createPageDef(const char *f,int l,const char *n,const char *d,const char *t);
+
class PageSDict : public SDict<PageDef>
{
public:
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index fcc7ef5..1ec4bf3 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -729,6 +729,7 @@ void PerlModDocVisitor::visit(DocInclude *inc)
#endif
return;
case DocInclude::DontInclude: return;
+ case DocInclude::DontIncWithLines: return;
case DocInclude::HtmlInclude: type = "htmlonly"; break;
case DocInclude::LatexInclude: type = "latexonly"; break;
case DocInclude::VerbInclude: type = "preformatted"; break;
diff --git a/src/pre.l b/src/pre.l
index 5eb0c5c..1e45ca3 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -1402,7 +1402,7 @@ void addDefine()
//printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
//ArgumentList *al = new ArgumentList;
//stringToArgumentList(g_defArgsStr,al);
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
g_yyFileName,g_yyLineNr-g_yyMLines,g_yyColNr,
"#define",g_defName,g_defArgsStr,0,
Public,Normal,FALSE,Member,MemberType_Define,0,0,"");
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 8d375fc..26bb3e7 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -187,6 +187,7 @@ class PrintDocVisitor : public DocVisitor
case DocInclude::Include: printf("include"); break;
case DocInclude::IncWithLines: printf("incwithlines"); break;
case DocInclude::DontInclude: printf("dontinclude"); break;
+ case DocInclude::DontIncWithLines: printf("dontinwithlines"); break;
case DocInclude::HtmlInclude:
printf("htmlinclude");
if (inc->isBlock()) printf(" block=\"yes\"");
diff --git a/src/pycode.l b/src/pycode.l
index d9c9f01..4fb27f1 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -786,13 +786,13 @@ static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s
sym->getOuterScope()->definitionType()==Definition::TypeClass &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
- ClassDef *cd = (ClassDef*)sym->getOuterScope();
- ClassDef *thisCd = (ClassDef *)g_currentDefinition;
+ ClassDef *cd = dynamic_cast<ClassDef*>(sym->getOuterScope());
+ ClassDef *thisCd = dynamic_cast<ClassDef *>(g_currentDefinition);
if (sym->definitionType()==Definition::TypeMember)
{
if (g_currentMemberDef && g_collectXRefs)
{
- addDocCrossReference(g_currentMemberDef,(MemberDef*)sym);
+ addDocCrossReference(g_currentMemberDef,dynamic_cast<MemberDef*>(sym));
}
}
DBG_CTX((stderr,"cd=%s thisCd=%s\n",cd?cd->name().data():"<none>",thisCd?thisCd->name().data():"<none>"));
@@ -1086,7 +1086,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT
// Push a class scope
- ClassDef *classDefToAdd = new ClassDef("<code>",1,1,g_curClassName,ClassDef::Class,0,0,FALSE);
+ ClassDef *classDefToAdd = createClassDef("<code>",1,1,g_curClassName,ClassDef::Class,0,0,FALSE);
g_codeClassSDict.append(g_curClassName,classDefToAdd);
char *s=g_curClassBases.first();
while (s)
@@ -1569,7 +1569,6 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
if (s.isEmpty()) return;
printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
g_codeClassSDict.setAutoDelete(TRUE);
- TooltipManager::instance()->clearTooltips();
g_code = &od;
g_inputString = s;
g_inputPosition = 0;
@@ -1595,7 +1594,7 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
+ g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
if (g_sourceFileDef)
@@ -1620,10 +1619,6 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
{
endCodeLine();
}
- if (fd)
- {
- TooltipManager::instance()->writeTooltips(*g_code);
- }
if (cleanupSourceDef)
{
// delete the temporary file definition used for this example
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 1e2bb89..55c03a5 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -429,20 +429,21 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
0, // memberDef
TRUE // show line numbers
);
+ delete fd;
m_t << "\\par";
m_t << "}" << endl;
}
@@ -465,10 +466,9 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "\\par";
m_t << "}" << endl;
break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- break;
+ case DocInclude::DontInclude:
+ case DocInclude::DontIncWithLines:
+ case DocInclude::HtmlInclude:
case DocInclude::LatexInclude:
break;
case DocInclude::VerbInclude:
@@ -496,7 +496,7 @@ void RTFDocVisitor::visit(DocInclude *inc)
case DocInclude::SnipWithLines:
{
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "{" << endl;
if (!m_lastIsPara) m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
@@ -507,13 +507,14 @@ void RTFDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
m_t << "}";
}
break;
@@ -548,9 +549,24 @@ void RTFDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),op->text(),langExt,
- op->isExample(),op->exampleFile());
+ op->isExample(),op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
@@ -771,16 +787,18 @@ void RTFDocVisitor::visitPre(DocSimpleSect *s)
m_t << "}"; // end bold
incIndentLevel();
m_t << rtf_Style_Reset << getStyle("DescContinue");
+ m_t << "{\\s17 \\sa60 \\sb30\n";
}
m_lastIsPara=FALSE;
}
-void RTFDocVisitor::visitPost(DocSimpleSect *)
+void RTFDocVisitor::visitPost(DocSimpleSect *s)
{
if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSimpleSect)}\n");
if (!m_lastIsPara) m_t << "\\par" << endl;
decIndentLevel();
+ if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs) m_t << "}";
m_t << "}"; // end desc
m_lastIsPara=TRUE;
}
diff --git a/src/scanner.l b/src/scanner.l
index cc497e3..3d3c109 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -6542,7 +6542,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
// middle of a comment block
docBlock+=yytext;
}
-<DocBlock>("@@"|"\\\\"){ID}/[^a-z_A-Z0-9] { // escaped command
+<DocBlock>({CMD}{CMD}){ID}/[^a-z_A-Z0-9] { // escaped command
docBlock+=yytext;
}
<DocBlock>{CMD}("f$"|"f["|"f{") {
@@ -6651,7 +6651,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
docBlock+=indent;
}
}
-<DocCopyBlock>^{B}*"*"+/{BN}+"*"{BN}* { // start of a comment line with two *'s
+<DocCopyBlock>^{B}*"*"+/{B}+"*"{BN}* { // start of a comment line with two *'s
if (docBlockName=="code")
{
QCString indent;
@@ -6732,7 +6732,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
<DocCopyBlock><<EOF>> {
warn(yyFileName,yyLineNr,
- "reached end of file while inside a %s block!\n"
+ "reached end of file while inside a `%s' block!\n"
"The command that should end the block seems to be missing!\n",
docBlockName.data());
yyterminate();
@@ -6829,6 +6829,8 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
<SkipComment>[^\*\n]+
<*>"[[" { // C++11 attribute
+ if (!insideCpp) REJECT;
+ if (YY_START == CopyGString || YY_START == CopyGString) REJECT;
lastC11AttributeContext = YY_START;
BEGIN( SkipC11Attribute );
}
@@ -6985,6 +6987,7 @@ static void handleParametersCommentBlocks(ArgumentList *al)
//printf(" Param %s docs=%s\n",a->name.data(),a->docs.data());
if (!a->docs.isEmpty())
{
+ if (!a->name && a->type == "...") a->name= "...";
int position=0;
bool needsEntry;
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index 52378cd..cfa8ed2 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -91,7 +91,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
if (ctx==0) return;
assert(!isSourceFile || ctx->definitionType()==Definition::TypeFile);
//printf("SearchIndex::setCurrentDoc(%s,%s,%s)\n",name,baseName,anchor);
- QCString url=isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
+ QCString url=isSourceFile ? (dynamic_cast<FileDef*>(ctx))->getSourceFileBase() : ctx->getOutputFileBase();
url+=Config_getString(HTML_FILE_EXTENSION);
QCString baseUrl = url;
if (anchor) url+=QCString("#")+anchor;
@@ -99,7 +99,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
QCString name=ctx->qualifiedName();
if (ctx->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef *)ctx;
+ MemberDef *md = dynamic_cast<MemberDef *>(ctx);
name.prepend((md->getLanguage()==SrcLangExt_Fortran ?
theTranslator->trSubprogram(TRUE,TRUE) :
theTranslator->trMember(TRUE,TRUE))+" ");
@@ -116,7 +116,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
{
case Definition::TypePage:
{
- PageDef *pd = (PageDef *)ctx;
+ PageDef *pd = dynamic_cast<PageDef *>(ctx);
if (pd->hasTitle())
{
name = theTranslator->trPage(TRUE,TRUE)+" "+pd->title();
@@ -129,7 +129,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
break;
case Definition::TypeClass:
{
- ClassDef *cd = (ClassDef *)ctx;
+ ClassDef *cd = dynamic_cast<ClassDef *>(ctx);
name.prepend(cd->compoundTypeString()+" ");
}
break;
@@ -151,7 +151,7 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
break;
case Definition::TypeGroup:
{
- GroupDef *gd = (GroupDef *)ctx;
+ GroupDef *gd = dynamic_cast<GroupDef *>(ctx);
if (gd->groupTitle())
{
name = theTranslator->trGroup(TRUE,TRUE)+" "+gd->groupTitle();
@@ -446,7 +446,7 @@ static QCString definitionToName(Definition *ctx)
{
if (ctx && ctx->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef*)ctx;
+ MemberDef *md = dynamic_cast<MemberDef*>(ctx);
if (md->isFunction())
return "function";
else if (md->isSlot())
@@ -477,7 +477,7 @@ static QCString definitionToName(Definition *ctx)
switch(ctx->definitionType())
{
case Definition::TypeClass:
- return ((ClassDef*)ctx)->compoundTypeString();
+ return (dynamic_cast<ClassDef*>(ctx))->compoundTypeString();
case Definition::TypeFile:
return "file";
case Definition::TypeNamespace:
@@ -500,7 +500,7 @@ static QCString definitionToName(Definition *ctx)
void SearchIndexExternal::setCurrentDoc(Definition *ctx,const char *anchor,bool isSourceFile)
{
QCString extId = stripPath(Config_getString(EXTERNAL_SEARCH_ID));
- QCString baseName = isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
+ QCString baseName = isSourceFile ? (dynamic_cast<FileDef*>(ctx))->getSourceFileBase() : ctx->getOutputFileBase();
QCString url = baseName + Doxygen::htmlFileExtension;
if (anchor) url+=QCString("#")+anchor;
QCString key = extId+";"+url;
@@ -514,7 +514,7 @@ void SearchIndexExternal::setCurrentDoc(Definition *ctx,const char *anchor,bool
e->name = ctx->qualifiedName();
if (ctx->definitionType()==Definition::TypeMember)
{
- e->args = ((MemberDef*)ctx)->argsString();
+ e->args = (dynamic_cast<MemberDef*>(ctx))->argsString();
}
e->extId = extId;
e->url = url;
@@ -1047,9 +1047,7 @@ void writeJavascriptSearchIndex()
if (dl->count()==1) // item with a unique name
{
- MemberDef *md = 0;
- bool isMemberDef = d->definitionType()==Definition::TypeMember;
- if (isMemberDef) md = (MemberDef*)d;
+ MemberDef *md = dynamic_cast<MemberDef*>(d);
QCString anchor = d->anchor();
ti << "'" << externalRef("../",d->getReference(),TRUE)
@@ -1101,9 +1099,7 @@ void writeJavascriptSearchIndex()
Definition *scope = d->getOuterScope();
Definition *next = di.current();
Definition *nextScope = 0;
- MemberDef *md = 0;
- bool isMemberDef = d->definitionType()==Definition::TypeMember;
- if (isMemberDef) md = (MemberDef*)d;
+ MemberDef *md = dynamic_cast<MemberDef*>(d);
if (next) nextScope = next->getOuterScope();
QCString anchor = d->anchor();
@@ -1147,12 +1143,12 @@ void writeJavascriptSearchIndex()
QCString name;
if (d->definitionType()==Definition::TypeClass)
{
- name = convertToXML(((ClassDef*)d)->displayName());
+ name = convertToXML((dynamic_cast<ClassDef*>(d))->displayName());
found = TRUE;
}
else if (d->definitionType()==Definition::TypeNamespace)
{
- name = convertToXML(((NamespaceDef*)d)->displayName());
+ name = convertToXML((dynamic_cast<NamespaceDef*>(d))->displayName());
found = TRUE;
}
else if (scope==0 || scope==Doxygen::globalScope) // in global scope
@@ -1327,11 +1323,11 @@ void SearchIndexList::append(Definition *d)
{
if (d->definitionType()==Definition::TypeGroup)
{
- dispName = ((GroupDef*)d)->groupTitle();
+ dispName = (dynamic_cast<GroupDef*>(d))->groupTitle();
}
else if (d->definitionType()==Definition::TypePage)
{
- dispName = ((PageDef*)d)->title();
+ dispName = (dynamic_cast<PageDef*>(d))->title();
}
l=new SearchDefinitionList(searchId(dispName),dispName);
SDict< SearchDefinitionList >::append(dispName,l);
diff --git a/src/sqlcode.l b/src/sqlcode.l
index fd0f11e..5e45083 100644
--- a/src/sqlcode.l
+++ b/src/sqlcode.l
@@ -355,8 +355,6 @@ void parseSqlCode(
{
if (s.isEmpty()) return;
- TooltipManager::instance()->clearTooltips();
-
g_code = &od;
g_inputString = s;
g_inputPosition = 0;
@@ -383,7 +381,7 @@ void parseSqlCode(
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
+ g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
@@ -404,10 +402,6 @@ void parseSqlCode(
{
endCodeLine();
}
- if (fd)
- {
- TooltipManager::instance()->writeTooltips(*g_code);
- }
if (cleanupSourceDef)
{
// delete the temporary file definition used for this example
diff --git a/src/store.cpp b/src/store.cpp
deleted file mode 100644
index c09dcfb..0000000
--- a/src/store.cpp
+++ /dev/null
@@ -1,484 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#include "store.h"
-#include "portable.h"
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <assert.h>
-#include <ctype.h>
-
-#define BLOCK_SIZE 512 // should be >8 and a power of 2
-#define BLOCK_POINTER_SIZE sizeof(portable_off_t)
-
-
-#define ASSERTS_ENABLED
-
-#ifdef ASSERTS_ENABLED
-#define STORE_ASSERT(x) assert(x)
-#else
-#define STORE_ASSERT(x)
-#endif
-
-// Decide to use ftell or keep track of the current file pointer ourselves.
-// Since valgrind shows that calling ftell has the unwanted side-effect of
-// writing some uninitialized bytes (!) it might be better (and faster) to keep track
-// of the current pointer ourselves.
-#define USE_FTELL 0
-
-//------------------------------------------------------------------------------------
-
-Store::Store()
-{
- m_file = 0;
- m_front = 0;
- m_cur = 0;
- m_head = 0;
- m_state = Init;
- m_reads = 0;
- m_writes = 0;
-}
-
-Store::~Store()
-{
- if (m_file) fclose(m_file);
-
- // clean up free list
- while (m_head)
- {
- Node *node = m_head;
- m_head = node->next;
- delete node;
- }
-}
-
-int Store::open(const char *name)
-{
- int i;
- STORE_ASSERT(m_state==Init);
- if (m_file) return 0; // already open
- m_file = portable_fopen(name,"w+b");
- if (m_file==0) return -1;
-
- // first block serves as header, so offset=0 can be used as the end of the list.
- for (i=0;i<BLOCK_SIZE/8;i++)
- {
- fputc('D',m_file);
- fputc('O',m_file);
- fputc('X',m_file);
- fputc('Y',m_file);
- fputc('G',m_file);
- fputc('E',m_file);
- fputc('N',m_file);
- fputc(0,m_file);
- }
- m_front = BLOCK_SIZE;
- m_cur = BLOCK_SIZE;
- m_head = 0;
- m_state = Reading;
- return 0;
-}
-
-void Store::close()
-{
- if (m_file) fclose(m_file);
- m_file=0;
- m_state = Init;
-}
-
-portable_off_t Store::alloc()
-{
- STORE_ASSERT(m_state==Reading);
- m_state=Writing;
- portable_off_t pos;
- if (m_head==0) // allocate new block
- {
- //printf("alloc: new block, pos=%lld\n",(long long)m_front);
- if (portable_fseek(m_file,0,SEEK_END)==-1) // go to end of the file
- {
- fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno));
- exit(1);
- }
-#if USE_FTELL
- pos = portable_ftell(m_file);
- STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 );
- m_front = pos + BLOCK_SIZE; // move front to end of this block
-#else
- m_cur = m_front;
- pos = m_cur;
- STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 );
- m_front = pos + BLOCK_SIZE;
-#endif
- }
- else // reuse freed block
- {
- //printf("alloc: reuse block: pos=%lld\n",(long long)m_head->pos);
- Node *node = m_head;
- pos = node->pos;
- // point head to next free item
- m_head = node->next;
- delete node;
- // move to start of the block
- if (portable_fseek(m_file,pos,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::alloc: Error seeking to position %d: %s\n",
- (int)pos,strerror(errno));
- exit(1);
- }
- m_cur = pos;
- STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 );
- }
- //printf("%x: Store::alloc\n",(int)pos);
- return pos;
-}
-
-int Store::write(const char *buf,uint size)
-{
- STORE_ASSERT(m_state==Writing);
- //printf("%x: Store::write\n",(int)portable_ftell(m_file));
- do
- {
-#if USE_FTELL
- portable_off_t curPos = portable_ftell(m_file);
-#else
- portable_off_t curPos = m_cur;
-#endif
- int bytesInBlock = (int)(BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1)));
- int bytesLeft = bytesInBlock<(int)size ? (int)size-bytesInBlock : 0;
- int numBytes = size - bytesLeft;
- STORE_ASSERT(bytesInBlock>=0);
- STORE_ASSERT(numBytes<=(int)(BLOCK_SIZE-BLOCK_POINTER_SIZE));
- if (numBytes>0)
- {
- if ((int)fwrite(buf,1,numBytes,m_file)!=numBytes)
- {
- fprintf(stderr,"Error writing: %s\n",strerror(errno));
- exit(1);
- }
- m_cur+=numBytes;
- m_writes++;
- }
- if (bytesLeft>0) // still more bytes to write
- {
-#if USE_FTELL
- STORE_ASSERT(((portable_ftell(m_file)+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0);
-#else
- STORE_ASSERT(((m_cur+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0);
-#endif
- // allocate new block
- if (m_head==0) // no free blocks to reuse
- {
- //printf("%x: Store::write: new: pos=%x\n",(int)m_front,(int)portable_ftell(m_file));
- // write pointer to next block
- if (fwrite(&m_front,BLOCK_POINTER_SIZE,1,m_file)!=1)
- {
- fprintf(stderr,"Error writing to store: %s\n",strerror(errno));
- exit(1);
- }
- m_cur+=BLOCK_POINTER_SIZE;
-#if USE_FTELL
- STORE_ASSERT(portable_ftell(m_file)==(curPos&~(BLOCK_SIZE-1))+BLOCK_SIZE);
-#else
- STORE_ASSERT(m_cur==(curPos&~(BLOCK_SIZE-1))+BLOCK_SIZE);
-#endif
- // move to next block
- if (portable_fseek(m_file,0,SEEK_END)==-1) // go to end of the file
- {
- fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno));
- exit(1);
- }
- m_cur=m_front;
-#if USE_FTELL
- STORE_ASSERT(portable_ftell(m_file)==m_front);
-#else
- STORE_ASSERT(m_cur==m_front);
-#endif
- // move front to the next of the block
- m_front+=BLOCK_SIZE;
- }
- else // reuse block from the free list
- {
- // write pointer to next block
- if (fwrite(&m_head->pos,BLOCK_POINTER_SIZE,1,m_file)!=1)
- {
- fprintf(stderr,"Error writing to store: %s\n",strerror(errno));
- exit(1);
- }
- Node *node = m_head;
- portable_off_t pos = node->pos;
- // point head to next free item
- m_head = node->next;
- delete node;
- // move to start of the block
- if (portable_fseek(m_file,pos,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::write: Error seeking to position %d: %s\n",
- (int)pos,strerror(errno));
- exit(1);
- }
- m_cur = pos;
- //printf("%x: Store::write: reuse\n",(int)pos);
- }
- }
- size-=numBytes;
- buf+=numBytes;
- }
- while (size>0);
- return size;
-}
-
-void Store::end()
-{
- STORE_ASSERT(m_state==Writing);
-#if USE_FTELL
- portable_off_t curPos = portable_ftell(m_file);
-#else
- portable_off_t curPos = m_cur;
-#endif
- int bytesInBlock = (int)(BLOCK_SIZE - (curPos & (BLOCK_SIZE-1)));
- //printf("%x: Store::end erasing %x bytes\n",(int)curPos&~(BLOCK_SIZE-1),bytesInBlock);
- //printf("end: bytesInBlock=%x\n",bytesInBlock);
- // zero out rest of the block
- int i;
- for (i=0;i<bytesInBlock;i++)
- {
- fputc(0,m_file);
- }
- m_state=Reading;
-}
-
-void Store::release(portable_off_t pos)
-{
- STORE_ASSERT(m_state==Reading);
- //printf("release: block pos=%lld\n",(long long)pos);
- STORE_ASSERT(pos>0 && (pos & (BLOCK_SIZE-1))==0);
- // goto end of the block
- portable_off_t cur = pos, next;
- while (1)
- {
- // add new node to the free list
- Node *node = new Node;
- node->next = m_head;
- node->pos = cur;
-
- m_head = node;
- // goto the end of cur block
- if (portable_fseek(m_file,cur+BLOCK_SIZE-BLOCK_POINTER_SIZE,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::release: Error seeking to position %d: %s\n",
- (int)(cur+BLOCK_SIZE-BLOCK_POINTER_SIZE),strerror(errno));
- exit(1);
- }
- // read pointer to next block
- if (fread(&next,BLOCK_POINTER_SIZE,1,m_file)!=1)
- {
- fprintf(stderr,"Store::release: Error reading from store: %s\n",strerror(errno));
- exit(1);
- }
- m_cur = cur+BLOCK_SIZE;
- if (next==0) break; // found end of list -> cur is last element
- STORE_ASSERT((next & (BLOCK_SIZE-1))==0);
- cur = next;
- //printf("%x: Store::release\n",(int)cur);
- }
-}
-
-void Store::seek(portable_off_t pos)
-{
- STORE_ASSERT(m_state==Reading);
- //printf("%x: Store::seek\n",(int)pos);
- if (portable_fseek(m_file,pos,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::seek: Error seeking to position %d: %s\n",
- (int)pos,strerror(errno));
- exit(1);
- }
- m_cur = pos;
- STORE_ASSERT((pos&(BLOCK_SIZE-1))==0);
-}
-
-int Store::read(char *buf,uint size)
-{
- STORE_ASSERT(m_state==Reading);
- //printf("%x: Store::read total=%d\n",(int)portable_ftell(m_file),size);
- do
- {
-#if USE_FTELL
- portable_off_t curPos = portable_ftell(m_file);
-#else
- portable_off_t curPos = m_cur;
-#endif
- int bytesInBlock = (int)(BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1)));
- int bytesLeft = bytesInBlock<(int)size ? (int)size-bytesInBlock : 0;
- int numBytes = size - bytesLeft;
- //printf(" Store::read: pos=%x num=%d left=%d\n",(int)curPos,numBytes,bytesLeft);
-
- if (numBytes>0)
- {
- //printf("%x: Store::read: %d out of %d bytes\n",(int)portable_ftell(m_file),numBytes,size);
- if ((int)fread(buf,1,numBytes,m_file)!=numBytes)
- {
- fprintf(stderr,"Error reading from store: %s\n",strerror(errno));
- exit(1);
- }
- m_cur+=numBytes;
- m_reads++;
- }
- if (bytesLeft>0)
- {
- portable_off_t newPos;
- // read offset of the next block
-#if USE_FTELL
- STORE_ASSERT(((portable_ftell(m_file)+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0);
-#else
- STORE_ASSERT(((m_cur+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0);
-#endif
- if (fread((char *)&newPos,BLOCK_POINTER_SIZE,1,m_file)!=1)
- {
- fprintf(stderr,"Error reading from store: %s\n",strerror(errno));
- exit(1);
- }
- //printf("%x: Store::read: continue in next block, %d bytes to go\n",(int)newPos,bytesLeft);
- //printf(" Store::read: next block=%x\n",(int)newPos);
- STORE_ASSERT(newPos!=0);
- STORE_ASSERT((newPos&(BLOCK_SIZE-1))==0);
- curPos = newPos;
- // move to next block
- if (portable_fseek(m_file,curPos,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::read: Error seeking to position %d: %s\n",
- (int)curPos,strerror(errno));
- exit(1);
- }
- m_cur = curPos;
- }
-
- size-=numBytes;
- buf+=numBytes;
- }
- while (size>0);
- return size;
-}
-
-void Store::printFreeList()
-{
- printf("FreeList: ");
- while (m_head)
- {
- portable_off_t pos = m_head->pos;
- printf("%x ",(int)pos);
- m_head = m_head->next;
- }
- printf("\n");
-}
-
-void Store::printStats()
-{
- printf("ObjStore: block size %d bytes, total size %ld blocks, wrote %d blocks, read %d blocks\n",
- BLOCK_SIZE,(long)(m_front/BLOCK_SIZE),m_reads,m_writes);
-}
-
-void Store::dumpBlock(portable_off_t s,portable_off_t e)
-{
- portable_fseek(m_file,s,SEEK_SET);
- int size = (int)(e-s);
- uchar *buf = new uchar[size];
- if (fread(buf,size,1,m_file)==(size_t)size)
- {
- int i,j;
- for (i=0;i<size;i+=16)
- {
- printf("%08x: ",(int)s+i);
- for (j=i;j<QMIN(size,i+16);j++)
- {
- printf("%02x ",buf[i+j]);
- }
- printf(" ");
- for (j=i;j<QMIN(size,i+16);j++)
- {
- printf("%c",(buf[i+j]>=32 && buf[i+j]<128)?buf[i+j]:'.');
- }
- printf("\n");
- }
- }
- delete[] buf;
- portable_fseek(m_file,m_cur,SEEK_SET);
-}
-
-#ifdef STORE_TEST
-
-int main()
-{
- printf("sizeof(portable_off_t)=%d\n",(int)sizeof(portable_off_t));
- Store s;
- if (s.open("test.db")==0)
- {
- const char *str1 = "This is a test message... ";
- const char *str2 = "Another message. ";
-
- int i,j;
- for (j=0;j<5;j++)
- {
- char buf[100];
-
- portable_off_t handle = s.alloc();
- for (i=0;i<1000000000;i++)
- {
- s.write(str1,strlen(str1)+1);
- }
- s.end();
- portable_off_t handle2 = s.alloc();
- for (i=0;i<10;i++)
- {
- s.write(str2,strlen(str2)+1);
- }
- s.end();
-
- s.seek(handle);
- for (i=0;i<3;i++)
- {
- s.read(buf,strlen(str1)+1);
- printf("i=%d Read: %s\n",i,buf);
- }
-
- s.release(handle);
-
- s.seek(handle2);
- for (i=0;i<3;i++)
- {
- s.read(buf,strlen(str2)+1);
- printf("i=%d Read: %s\n",i,buf);
- }
-
- s.release(handle2);
- }
-
- s.close();
- }
- else
- {
- printf("Open failed! %s\n",strerror(errno));
- }
-}
-
-#endif
-
diff --git a/src/store.h b/src/store.h
deleted file mode 100644
index 39917df..0000000
--- a/src/store.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef STORE_H
-#define STORE_H
-
-#include <qglobal.h>
-#include <stdio.h>
-
-#include "portable.h"
-
-/*! @brief Abstract interface for file based memory storage operations */
-class StorageIntf
-{
- public:
- /*! Required by gcc */
- virtual ~StorageIntf() {}
- /*! Read \a size bytes from the store into \a buf. */
- virtual int read(char *buf,uint size) = 0;
- /*! Write \a size bytes from \a buf into the store. */
- virtual int write(const char *buf,uint size) = 0;
-};
-
-/*! @brief The Store is a file based memory manager.
- *
- * You can open the store using open(). Then obtain a handle via alloc()
- * followed by a sequence of write() commands to store information,
- * and finalize it using end().
- *
- * Later on you locate the information
- * with seek() using the handle obtained with alloc(), and then use a
- * sequence of read() calls to read the information back.
- *
- * If no longer needed the storage space can be freed using release().
- *
- * The store will dynamically grow the file on disk if needed.
- */
-class Store : public StorageIntf
-{
- public:
- /*! Creates a store. */
- Store();
-
- /*! Releases the store object. Will close the underlying file if opened. */
- ~Store();
-
- /*! Opens the file underlying the store using \a name as the file name.
- * Returns 0 upon success, or -1 otherwise.
- */
- int open(const char *name);
-
- /*! Allocates a handle to write to and read from. */
- portable_off_t alloc();
-
- /*! Writes \a size bytes in array \a buf to the store.
- * First alloc() has to be called.
- * \note The information can only be read after end() has been called.
- */
- int write(const char *buf,uint size);
-
- /*! Ends the sequence of writes.
- * \note After this call, first alloc() has to be called
- * before new writes can be done.
- */
- void end();
-
- /*! Releases the memory corresponding to the handle returned with alloc() */
- void release(portable_off_t handle);
-
- /*! Closes the store */
- void close();
-
- /*! Goes to the start of information corresponding to handle \a pos */
- void seek(portable_off_t handle);
-
- /*! Reads \a size bytes from the store into the array pointed to be \a buf.
- * \note Before reading seek() has to be called to set the right start of the store.
- */
- int read(char *buf,uint size);
-
- void printStats();
-
- portable_off_t pos() const { return m_cur; }
-
- void dumpBlock(portable_off_t start,portable_off_t end);
-
- private:
- enum State
- {
- Init,
- Reading,
- Writing
- };
- struct Node
- {
- portable_off_t pos;
- struct Node *next;
- };
- void printFreeList();
- FILE *m_file;
- portable_off_t m_front;
- portable_off_t m_cur;
- Node *m_head;
- State m_state;
- int m_reads;
- int m_writes;
-};
-
-#endif
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 45543de..da2f3f1 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -1393,8 +1393,8 @@ void TagFileParser::buildLists(Entry *root)
QCString fullName = m_tagName+":"+tfi->path+stripPath(tfi->name);
fe->fileName = fullName;
- //printf("new FileDef() filename=%s\n",tfi->filename.data());
- FileDef *fd = new FileDef(m_tagName+":"+tfi->path,
+ //printf("createFileDef() filename=%s\n",tfi->filename.data());
+ FileDef *fd = createFileDef(m_tagName+":"+tfi->path,
tfi->name,m_tagName,
tfi->filename
);
diff --git a/src/tooltip.cpp b/src/tooltip.cpp
index 91da583..2c6f6e1 100644
--- a/src/tooltip.cpp
+++ b/src/tooltip.cpp
@@ -114,7 +114,7 @@ void TooltipManager::writeTooltips(CodeOutputInterface &ol)
QCString decl;
if (d->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef*)d;
+ MemberDef *md = dynamic_cast<MemberDef*>(d);
decl = md->declaration();
if (!decl.isEmpty() && decl.at(0)=='@') // hide enum values
{
diff --git a/src/translator_br.h b/src/translator_br.h
index c2d079a..01c5b9f 100644
--- a/src/translator_br.h
+++ b/src/translator_br.h
@@ -18,6 +18,8 @@
* Thanks to Jorge Ramos, Fernando Carijo and others for their contributions.
*
* History:
+ * 20190203:
+ * - Slice methods added;
* 20180612:
* - Updated to 1.8.15;
* 20170123:
@@ -47,7 +49,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
-class TranslatorBrazilian : public TranslatorAdapter_1_8_15
+class TranslatorBrazilian : public Translator
{
public:
@@ -2088,118 +2090,253 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_15
// new since 1.8.15
//////////////////////////////////////////////////////////////////////////
- /** VHDL design unit hierarchy */
- virtual QCString trDesignUnitHierarchy()
- { return "Hierarquia da Unidade de Design"; }
- /** VHDL design unit list */
- virtual QCString trDesignUnitList()
- { return "Lista de Unidades de Design"; }
- /** VHDL design unit members */
- virtual QCString trDesignUnitMembers()
- { return "Membros da Unidade de Design"; }
- /** VHDL design unit list description */
- virtual QCString trDesignUnitListDescription()
- {
- return "Esta é uma lista de todos os membros de unidades de design "
- "com ligações para as entidades às quais pertencem:";
- }
- /** VHDL design unit index */
- virtual QCString trDesignUnitIndex()
- { return "Índice de Unidades de Design"; }
- /** VHDL design units */
- virtual QCString trDesignUnits()
- { return "Unidades de Design"; }
- /** VHDL functions/procedures/processes */
- virtual QCString trFunctionAndProc()
- { return "Funções/Procedimentos/Processos"; }
- /** VHDL type */
- virtual QCString trVhdlType(uint64 type,bool single)
- {
- switch(type)
- {
- case VhdlDocGen::LIBRARY:
- if (single) return "Biblioteca";
- else return "Bibliotecas";
- case VhdlDocGen::PACKAGE:
- if (single) return "Pacote";
- else return "Pacotes";
- case VhdlDocGen::SIGNAL:
- if (single) return "Sinal";
- else return "Sinais";
- case VhdlDocGen::COMPONENT:
- if (single) return "Componente";
- else return "Componentes";
- case VhdlDocGen::CONSTANT:
- if (single) return "Constante";
- else return "Constantes";
- case VhdlDocGen::ENTITY:
- if (single) return "Entidade";
- else return "Entidades";
- case VhdlDocGen::TYPE:
- if (single) return "Tipo";
- else return "Tipos";
- case VhdlDocGen::SUBTYPE:
- if (single) return "Subtipo";
- else return "Subtipos";
- case VhdlDocGen::FUNCTION:
- if (single) return "Função";
- else return "Funções";
- case VhdlDocGen::RECORD:
- if (single) return "Registro";
- else return "Registros";
- case VhdlDocGen::PROCEDURE:
- if (single) return "Procedimento";
- else return "Procedimentos";
- case VhdlDocGen::ARCHITECTURE:
- if (single) return "Arquitetura";
- else return "Arquiteturas";
- case VhdlDocGen::ATTRIBUTE:
- if (single) return "Atributo";
- else return "Atributos";
- case VhdlDocGen::PROCESS:
- if (single) return "Processo";
- else return "Processos";
- case VhdlDocGen::PORT:
- if (single) return "Porta";
- else return "Portas";
- case VhdlDocGen::USE:
- if (single) return "cláusula de uso";
- else return "cláusulas de uso";
- case VhdlDocGen::GENERIC:
- if (single) return "Generico";
- else return "Genericos";
- case VhdlDocGen::PACKAGE_BODY:
- return "Corpo do Pacote";
- case VhdlDocGen::UNITS:
- return "Unidades";
- case VhdlDocGen::SHAREDVARIABLE:
- if (single) return "Variável Compartilhada";
- else return "Variáveis Compartilhadas";
- case VhdlDocGen::VFILE:
- if (single) return "Arquivo";
- else return "Arquivos";
- case VhdlDocGen::GROUP:
- if (single) return "Grupo";
- else return "Grupos";
- case VhdlDocGen::INSTANTIATION:
- if (single) return "Instância";
- else return "Instâncias";
- case VhdlDocGen::ALIAS:
- if (single) return "Apelido";
- else return "Apelidos";
- case VhdlDocGen::CONFIG:
- if (single) return "Configuração";
- else return "Configurações";
- case VhdlDocGen::MISCELLANEOUS:
- return "Outros"; // Is this correct for VHDL?
- case VhdlDocGen::UCF_CONST:
- return "Restrições";
- default:
- return "Classe";
- }
- }
- virtual QCString trCustomReference(const char *name)
- { return "Referência de " + QCString(name); }
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Hierarquia da Unidade de Design"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Lista de Unidades de Design"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Membros da Unidade de Design"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "Esta é uma lista de todos os membros de unidades de design "
+ "com ligações para as entidades às quais pertencem:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Índice de Unidades de Design"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Unidades de Design"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Funções/Procedimentos/Processos"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Biblioteca";
+ else return "Bibliotecas";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Pacote";
+ else return "Pacotes";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Sinal";
+ else return "Sinais";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Componente";
+ else return "Componentes";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Constante";
+ else return "Constantes";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entidade";
+ else return "Entidades";
+ case VhdlDocGen::TYPE:
+ if (single) return "Tipo";
+ else return "Tipos";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Subtipo";
+ else return "Subtipos";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Função";
+ else return "Funções";
+ case VhdlDocGen::RECORD:
+ if (single) return "Registro";
+ else return "Registros";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Procedimento";
+ else return "Procedimentos";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Arquitetura";
+ else return "Arquiteturas";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Atributo";
+ else return "Atributos";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Processo";
+ else return "Processos";
+ case VhdlDocGen::PORT:
+ if (single) return "Porta";
+ else return "Portas";
+ case VhdlDocGen::USE:
+ if (single) return "cláusula de uso";
+ else return "cláusulas de uso";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Generico";
+ else return "Genericos";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Corpo do Pacote";
+ case VhdlDocGen::UNITS:
+ return "Unidades";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Variável Compartilhada";
+ else return "Variáveis Compartilhadas";
+ case VhdlDocGen::VFILE:
+ if (single) return "Arquivo";
+ else return "Arquivos";
+ case VhdlDocGen::GROUP:
+ if (single) return "Grupo";
+ else return "Grupos";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instância";
+ else return "Instâncias";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Apelido";
+ else return "Apelidos";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Configuração";
+ else return "Configurações";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Outros"; // Is this correct for VHDL?
+ case VhdlDocGen::UCF_CONST:
+ return "Restrições";
+ default:
+ return "Classe";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return "Referência de " + QCString(name); }
+
+ /* Slice */
+ virtual QCString trConstants()
+ {
+ return "Constantes";
+ }
+ virtual QCString trConstantDocumentation()
+ {
+ return "Constantes";
+ }
+ virtual QCString trSequences()
+ {
+ return "Sequências";
+ }
+ virtual QCString trSequenceDocumentation()
+ {
+ return "Sequências";
+ }
+ virtual QCString trDictionaries()
+ {
+ return "Dicionários";
+ }
+ virtual QCString trDictionaryDocumentation()
+ {
+ return "Dicionários";
+ }
+ virtual QCString trSliceInterfaces()
+ {
+ return "Interfaces";
+ }
+ virtual QCString trInterfaceIndex()
+ {
+ return "Índice de Interfaces";
+ }
+ virtual QCString trInterfaceList()
+ {
+ return "Lista de Interfaces";
+ }
+ virtual QCString trInterfaceListDescription()
+ {
+ return "Estas são as interfaces com suas respectivas descrições:";
+ }
+ virtual QCString trInterfaceHierarchy()
+ {
+ return "Hierarquia de Interfaces";
+ }
+ virtual QCString trInterfaceHierarchyDescription()
+ {
+ return "Esta é a lista parcialmente ordenadas de heranças:";
+ }
+ virtual QCString trInterfaceDocumentation()
+ {
+ return "Interfaces";
+ }
+ virtual QCString trStructs()
+ {
+ return "Estruturas";
+ }
+ virtual QCString trStructIndex()
+ {
+ return "Índice de Estruturas";
+ }
+ virtual QCString trStructList()
+ {
+ return "Lista de Estruturas";
+ }
+ virtual QCString trStructListDescription()
+ {
+ return "Estas são as estruturas com suas respectivas descrições:";
+ }
+ virtual QCString trStructDocumentation()
+ {
+ return "Estruturas";
+ }
+ virtual QCString trExceptionIndex()
+ {
+ return "Índice the Exceções";
+ }
+ virtual QCString trExceptionList()
+ {
+ return "Lista de Exceções";
+ }
+ virtual QCString trExceptionListDescription()
+ {
+ return "Estas são as exceções com suas respectivas descrições:";
+ }
+ virtual QCString trExceptionHierarchy()
+ {
+ return "Hierarquia de Exceções";
+ }
+ virtual QCString trExceptionHierarchyDescription()
+ {
+ return "Esta é a lista parcialmente ordenadas de heranças:";
+ }
+ virtual QCString trExceptionDocumentation()
+ {
+ return "Exceções";
+ }
+ virtual QCString trCompoundReferenceSlice(const char *clName, ClassDef::CompoundType compType, bool isLocal)
+ {
+ QCString result=(QCString)"Referência ";
+ switch(compType)
+ {
+ case ClassDef::Class: result+="da Classe "; break;
+ case ClassDef::Struct: result+="da Estrutura "; break;
+ case ClassDef::Union: result+="da União "; break;
+ case ClassDef::Interface: result+="da Interface "; break;
+ case ClassDef::Protocol: result+="do Protocolo "; break;
+ case ClassDef::Category: result+="da Categoria "; break;
+ case ClassDef::Exception: result+="da Exceção "; break;
+ default: break;
+ }
+ if (isLocal) result+="Local ";
+ result+= clName;
+ return result;
+ }
+ virtual QCString trOperations()
+ {
+ return "Operações";
+ }
+ virtual QCString trOperationDocumentation()
+ {
+ return "Operações";
+ }
+ virtual QCString trDataMembers()
+ {
+ return "Dados Membros";
+ }
+ virtual QCString trDataMemberDocumentation()
+ {
+ return "Dados Membros";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+
};
#endif
diff --git a/src/translator_pt.h b/src/translator_pt.h
index 23faf7f..970cf45 100644
--- a/src/translator_pt.h
+++ b/src/translator_pt.h
@@ -24,6 +24,8 @@
* VERSION HISTORY
* ---------------
* History:
+ * 20190203:
+ * - Slice methods added;
* 20180612:
* - Updated to 1.8.15;
* 20131129:
@@ -57,7 +59,7 @@
#define TRANSLATOR_PT_H
-class TranslatorPortuguese : public TranslatorAdapter_1_8_15
+class TranslatorPortuguese : public Translator
{
public:
@@ -2025,120 +2027,253 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_15
// new since 1.8.15
//////////////////////////////////////////////////////////////////////////
- /** VHDL design unit hierarchy */
- virtual QCString trDesignUnitHierarchy()
- { return "Hierarquia da Unidade de Design"; }
- /** VHDL design unit list */
- virtual QCString trDesignUnitList()
- { return "Lista de Unidades de Design"; }
- /** VHDL design unit members */
- virtual QCString trDesignUnitMembers()
- { return "Membros da Unidade de Design"; }
- /** VHDL design unit list description */
- virtual QCString trDesignUnitListDescription()
- {
- return "Esta é uma lista de todos os membros de unidades de design "
- "com ligações para as entidades às quais pertencem:";
- }
- /** VHDL design unit index */
- virtual QCString trDesignUnitIndex()
- { return "Índice de Unidades de Design"; }
- /** VHDL design units */
- virtual QCString trDesignUnits()
- { return "Unidades de Design"; }
- /** VHDL functions/procedures/processes */
- virtual QCString trFunctionAndProc()
- { return "Funções/Procedimentos/Processos"; }
- /** VHDL type */
- virtual QCString trVhdlType(uint64 type,bool single)
- {
- switch(type)
- {
- case VhdlDocGen::LIBRARY:
- if (single) return "Biblioteca";
- else return "Bibliotecas";
- case VhdlDocGen::PACKAGE:
- if (single) return "Pacote";
- else return "Pacotes";
- case VhdlDocGen::SIGNAL:
- if (single) return "Sinal";
- else return "Sinais";
- case VhdlDocGen::COMPONENT:
- if (single) return "Componente";
- else return "Componentes";
- case VhdlDocGen::CONSTANT:
- if (single) return "Constante";
- else return "Constantes";
- case VhdlDocGen::ENTITY:
- if (single) return "Entidade";
- else return "Entidades";
- case VhdlDocGen::TYPE:
- if (single) return "Tipo";
- else return "Tipos";
- case VhdlDocGen::SUBTYPE:
- if (single) return "Subtipo";
- else return "Subtipos";
- case VhdlDocGen::FUNCTION:
- if (single) return "Função";
- else return "Funções";
- case VhdlDocGen::RECORD:
- if (single) return "Registro";
- else return "Registros";
- case VhdlDocGen::PROCEDURE:
- if (single) return "Procedimento";
- else return "Procedimentos";
- case VhdlDocGen::ARCHITECTURE:
- if (single) return "Arquitetura";
- else return "Arquiteturas";
- case VhdlDocGen::ATTRIBUTE:
- if (single) return "Atributo";
- else return "Atributos";
- case VhdlDocGen::PROCESS:
- if (single) return "Processo";
- else return "Processos";
- case VhdlDocGen::PORT:
- if (single) return "Porta";
- else return "Portas";
- case VhdlDocGen::USE:
- if (single) return "cláusula de uso";
- else return "cláusulas de uso";
- case VhdlDocGen::GENERIC:
- if (single) return "Generico";
- else return "Genericos";
- case VhdlDocGen::PACKAGE_BODY:
- return "Corpo do Pacote";
- case VhdlDocGen::UNITS:
- return "Unidades";
- case VhdlDocGen::SHAREDVARIABLE:
- if (single) return "Variável Compartilhada";
- else return "Variáveis Compartilhadas";
- case VhdlDocGen::VFILE:
- if (single) return "Ficheiro";
- else return "Ficheiros";
- case VhdlDocGen::GROUP:
- if (single) return "Grupo";
- else return "Grupos";
- case VhdlDocGen::INSTANTIATION:
- if (single) return "Instância";
- else return "Instâncias";
- case VhdlDocGen::ALIAS:
- if (single) return "Apelido";
- else return "Apelidos";
- case VhdlDocGen::CONFIG:
- if (single) return "Configuração";
- else return "Configurações";
- case VhdlDocGen::MISCELLANEOUS:
- return "Outros"; // Is this correct for VHDL?
- case VhdlDocGen::UCF_CONST:
- return "Restrições";
- default:
- return "Classe";
- }
- }
- virtual QCString trCustomReference(const char *name)
- { return "Referência de " + QCString(name); }
+ /** VHDL design unit hierarchy */
+ virtual QCString trDesignUnitHierarchy()
+ { return "Hierarquia da Unidade de Design"; }
+ /** VHDL design unit list */
+ virtual QCString trDesignUnitList()
+ { return "Lista de Unidades de Design"; }
+ /** VHDL design unit members */
+ virtual QCString trDesignUnitMembers()
+ { return "Membros da Unidade de Design"; }
+ /** VHDL design unit list description */
+ virtual QCString trDesignUnitListDescription()
+ {
+ return "Esta é uma lista de todos os membros de unidades de design "
+ "com ligações para as entidades às quais pertencem:";
+ }
+ /** VHDL design unit index */
+ virtual QCString trDesignUnitIndex()
+ { return "Índice de Unidades de Design"; }
+ /** VHDL design units */
+ virtual QCString trDesignUnits()
+ { return "Unidades de Design"; }
+ /** VHDL functions/procedures/processes */
+ virtual QCString trFunctionAndProc()
+ { return "Funções/Procedimentos/Processos"; }
+ /** VHDL type */
+ virtual QCString trVhdlType(uint64 type,bool single)
+ {
+ switch(type)
+ {
+ case VhdlDocGen::LIBRARY:
+ if (single) return "Biblioteca";
+ else return "Bibliotecas";
+ case VhdlDocGen::PACKAGE:
+ if (single) return "Pacote";
+ else return "Pacotes";
+ case VhdlDocGen::SIGNAL:
+ if (single) return "Sinal";
+ else return "Sinais";
+ case VhdlDocGen::COMPONENT:
+ if (single) return "Componente";
+ else return "Componentes";
+ case VhdlDocGen::CONSTANT:
+ if (single) return "Constante";
+ else return "Constantes";
+ case VhdlDocGen::ENTITY:
+ if (single) return "Entidade";
+ else return "Entidades";
+ case VhdlDocGen::TYPE:
+ if (single) return "Tipo";
+ else return "Tipos";
+ case VhdlDocGen::SUBTYPE:
+ if (single) return "Subtipo";
+ else return "Subtipos";
+ case VhdlDocGen::FUNCTION:
+ if (single) return "Função";
+ else return "Funções";
+ case VhdlDocGen::RECORD:
+ if (single) return "Registro";
+ else return "Registros";
+ case VhdlDocGen::PROCEDURE:
+ if (single) return "Procedimento";
+ else return "Procedimentos";
+ case VhdlDocGen::ARCHITECTURE:
+ if (single) return "Arquitetura";
+ else return "Arquiteturas";
+ case VhdlDocGen::ATTRIBUTE:
+ if (single) return "Atributo";
+ else return "Atributos";
+ case VhdlDocGen::PROCESS:
+ if (single) return "Processo";
+ else return "Processos";
+ case VhdlDocGen::PORT:
+ if (single) return "Porta";
+ else return "Portas";
+ case VhdlDocGen::USE:
+ if (single) return "cláusula de uso";
+ else return "cláusulas de uso";
+ case VhdlDocGen::GENERIC:
+ if (single) return "Generico";
+ else return "Genericos";
+ case VhdlDocGen::PACKAGE_BODY:
+ return "Corpo do Pacote";
+ case VhdlDocGen::UNITS:
+ return "Unidades";
+ case VhdlDocGen::SHAREDVARIABLE:
+ if (single) return "Variável Compartilhada";
+ else return "Variáveis Compartilhadas";
+ case VhdlDocGen::VFILE:
+ if (single) return "Ficheiro";
+ else return "Ficheiros";
+ case VhdlDocGen::GROUP:
+ if (single) return "Grupo";
+ else return "Grupos";
+ case VhdlDocGen::INSTANTIATION:
+ if (single) return "Instância";
+ else return "Instâncias";
+ case VhdlDocGen::ALIAS:
+ if (single) return "Apelido";
+ else return "Apelidos";
+ case VhdlDocGen::CONFIG:
+ if (single) return "Configuração";
+ else return "Configurações";
+ case VhdlDocGen::MISCELLANEOUS:
+ return "Outros"; // Is this correct for VHDL?
+ case VhdlDocGen::UCF_CONST:
+ return "Restrições";
+ default:
+ return "Classe";
+ }
+ }
+ virtual QCString trCustomReference(const char *name)
+ { return "Referência de " + QCString(name); }
+
+ /* Slice */
+ virtual QCString trConstants()
+ {
+ return "Constantes";
+ }
+ virtual QCString trConstantDocumentation()
+ {
+ return "Constantes";
+ }
+ virtual QCString trSequences()
+ {
+ return "Sequências";
+ }
+ virtual QCString trSequenceDocumentation()
+ {
+ return "Sequências";
+ }
+ virtual QCString trDictionaries()
+ {
+ return "Dicionários";
+ }
+ virtual QCString trDictionaryDocumentation()
+ {
+ return "Dicionários";
+ }
+ virtual QCString trSliceInterfaces()
+ {
+ return "Interfaces";
+ }
+ virtual QCString trInterfaceIndex()
+ {
+ return "Índice de Interfaces";
+ }
+ virtual QCString trInterfaceList()
+ {
+ return "Lista de Interfaces";
+ }
+ virtual QCString trInterfaceListDescription()
+ {
+ return "Estas são as interfaces com suas respectivas descrições:";
+ }
+ virtual QCString trInterfaceHierarchy()
+ {
+ return "Hierarquia de Interfaces";
+ }
+ virtual QCString trInterfaceHierarchyDescription()
+ {
+ return "Esta é a lista parcialmente ordenadas de heranças:";
+ }
+ virtual QCString trInterfaceDocumentation()
+ {
+ return "Interfaces";
+ }
+ virtual QCString trStructs()
+ {
+ return "Estruturas";
+ }
+ virtual QCString trStructIndex()
+ {
+ return "Índice de Estruturas";
+ }
+ virtual QCString trStructList()
+ {
+ return "Lista de Estruturas";
+ }
+ virtual QCString trStructListDescription()
+ {
+ return "Estas são as estruturas com suas respectivas descrições:";
+ }
+ virtual QCString trStructDocumentation()
+ {
+ return "Estruturas";
+ }
+ virtual QCString trExceptionIndex()
+ {
+ return "Índice the Exceções";
+ }
+ virtual QCString trExceptionList()
+ {
+ return "Lista de Exceções";
+ }
+ virtual QCString trExceptionListDescription()
+ {
+ return "Estas são as exceções com suas respectivas descrições:";
+ }
+ virtual QCString trExceptionHierarchy()
+ {
+ return "Hierarquia de Exceções";
+ }
+ virtual QCString trExceptionHierarchyDescription()
+ {
+ return "Esta é a lista parcialmente ordenadas de heranças:";
+ }
+ virtual QCString trExceptionDocumentation()
+ {
+ return "Exceções";
+ }
+ virtual QCString trCompoundReferenceSlice(const char *clName, ClassDef::CompoundType compType, bool isLocal)
+ {
+ QCString result=(QCString)"Referência ";
+ switch(compType)
+ {
+ case ClassDef::Class: result+="da Classe "; break;
+ case ClassDef::Struct: result+="da Estrutura "; break;
+ case ClassDef::Union: result+="da União "; break;
+ case ClassDef::Interface: result+="da Interface "; break;
+ case ClassDef::Protocol: result+="do Protocolo "; break;
+ case ClassDef::Category: result+="da Categoria "; break;
+ case ClassDef::Exception: result+="da Exceção "; break;
+ default: break;
+ }
+ if (isLocal) result+="Local ";
+ result+= clName;
+ return result;
+ }
+ virtual QCString trOperations()
+ {
+ return "Operações";
+ }
+ virtual QCString trOperationDocumentation()
+ {
+ return "Operações";
+ }
+ virtual QCString trDataMembers()
+ {
+ return "Dados Membros";
+ }
+ virtual QCString trDataMemberDocumentation()
+ {
+ return "Dados Membros";
+ }
+
+//////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////
};
#endif
diff --git a/src/util.cpp b/src/util.cpp
index 9a0e513..f92df68 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -689,7 +689,7 @@ static QCString substTypedef(const Definition *scope,const FileDef *fileScope,co
if (d->definitionType()==Definition::TypeMember)
{
// that are also typedefs
- MemberDef *md = (MemberDef *)d;
+ MemberDef *md = dynamic_cast<MemberDef *>(d);
if (md->isTypedef()) // d is a typedef
{
// test accessibility of typedef within scope.
@@ -708,7 +708,7 @@ static QCString substTypedef(const Definition *scope,const FileDef *fileScope,co
{
Definition *d = (Definition*)di;
// that are also typedefs
- MemberDef *md = (MemberDef *)di;
+ MemberDef *md = dynamic_cast<MemberDef *>(di);
if (md->isTypedef()) // d is a typedef
{
// test accessibility of typedef within scope.
@@ -786,12 +786,12 @@ static const Definition *followPath(const Definition *start,const FileDef *fileS
if (current->definitionType()==Definition::TypeNamespace)
{
next = endOfPathIsUsedClass(
- ((NamespaceDef *)current)->getUsedClasses(),qualScopePart);
+ (dynamic_cast<const NamespaceDef *>(current))->getUsedClasses(),qualScopePart);
}
else if (current->definitionType()==Definition::TypeFile)
{
next = endOfPathIsUsedClass(
- ((FileDef *)current)->getUsedClasses(),qualScopePart);
+ (dynamic_cast<const FileDef *>(current))->getUsedClasses(),qualScopePart);
}
current = next;
if (current==0) break;
@@ -968,13 +968,13 @@ int isAccessibleFrom(const Definition *scope,const FileDef *fileScope,const Defi
(item->definitionType()==Definition::TypeMember && // a member
itemScope && itemScope->definitionType()==Definition::TypeClass && // of a class
scope->definitionType()==Definition::TypeClass && // accessible
- ((ClassDef*)scope)->isAccessibleMember((MemberDef *)item) // from scope
+ (dynamic_cast<const ClassDef*>(scope))->isAccessibleMember(dynamic_cast<const MemberDef *>(item)) // from scope
);
bool nestedClassInsideBaseClass =
(item->definitionType()==Definition::TypeClass && // a nested class
itemScope && itemScope->definitionType()==Definition::TypeClass && // inside a base
scope->definitionType()==Definition::TypeClass && // class of scope
- ((ClassDef*)scope)->isBaseClass((ClassDef*)itemScope,TRUE)
+ (dynamic_cast<const ClassDef*>(scope))->isBaseClass(dynamic_cast<ClassDef*>(itemScope),TRUE)
);
if (itemScope==scope || memberAccessibleFromScope || nestedClassInsideBaseClass)
@@ -1009,7 +1009,7 @@ int isAccessibleFrom(const Definition *scope,const FileDef *fileScope,const Defi
// check if scope is a namespace, which is using other classes and namespaces
if (scope->definitionType()==Definition::TypeNamespace)
{
- NamespaceDef *nscope = (NamespaceDef*)scope;
+ const NamespaceDef *nscope = dynamic_cast<const NamespaceDef*>(scope);
//printf(" %s is namespace with %d used classes\n",nscope->name().data(),nscope->getUsedClasses());
SDict<Definition> *cl = nscope->getUsedClasses();
if (accessibleViaUsingClass(cl,fileScope,item))
@@ -1089,7 +1089,7 @@ int isAccessibleFromWithExpScope(const Definition *scope,const FileDef *fileScop
else if (itemScope && newScope &&
itemScope->definitionType()==Definition::TypeClass &&
newScope->definitionType()==Definition::TypeClass &&
- ((ClassDef*)newScope)->isBaseClass((ClassDef*)itemScope,TRUE,0)
+ (dynamic_cast<const ClassDef*>(newScope))->isBaseClass(dynamic_cast<const ClassDef*>(itemScope),TRUE,0)
)
{
// inheritance is also ok. Example: looking for B::I, where
@@ -1114,7 +1114,7 @@ int isAccessibleFromWithExpScope(const Definition *scope,const FileDef *fileScop
// A::B::C but is explicit referenced as A::C, where B is imported
// in A via a using directive.
//printf("newScope is a namespace: %s!\n",newScope->name().data());
- NamespaceDef *nscope = (NamespaceDef*)newScope;
+ const NamespaceDef *nscope = dynamic_cast<const NamespaceDef*>(newScope);
SDict<Definition> *cl = nscope->getUsedClasses();
if (cl)
{
@@ -1165,7 +1165,7 @@ int isAccessibleFromWithExpScope(const Definition *scope,const FileDef *fileScop
//printf(" failed to resolve: scope=%s\n",scope->name().data());
if (scope->definitionType()==Definition::TypeNamespace)
{
- NamespaceDef *nscope = (NamespaceDef*)scope;
+ const NamespaceDef *nscope = dynamic_cast<const NamespaceDef*>(scope);
NamespaceSDict *nl = nscope->getUsedNamespaces();
if (accessibleViaUsingNamespace(nl,fileScope,item,explicitScopePart))
{
@@ -1227,7 +1227,7 @@ static void getResolvedSymbol(const Definition *scope,
// only look at classes and members that are enums or typedefs
if (d->definitionType()==Definition::TypeClass ||
(d->definitionType()==Definition::TypeMember &&
- (((MemberDef*)d)->isTypedef() || ((MemberDef*)d)->isEnumerate())
+ ((dynamic_cast<MemberDef*>(d))->isTypedef() || (dynamic_cast<MemberDef*>(d))->isEnumerate())
)
)
{
@@ -1240,7 +1240,7 @@ static void getResolvedSymbol(const Definition *scope,
// see if we are dealing with a class or a typedef
if (d->definitionType()==Definition::TypeClass) // d is a class
{
- ClassDef *cd = (ClassDef *)d;
+ ClassDef *cd = dynamic_cast<ClassDef *>(d);
//printf("cd=%s\n",cd->name().data());
if (!cd->isTemplateArgument()) // skip classes that
// are only there to
@@ -1285,7 +1285,7 @@ static void getResolvedSymbol(const Definition *scope,
}
else if (d->definitionType()==Definition::TypeMember)
{
- MemberDef *md = (MemberDef *)d;
+ MemberDef *md = dynamic_cast<MemberDef *>(d);
//printf(" member isTypedef()=%d\n",md->isTypedef());
if (md->isTypedef()) // d is a typedef
{
@@ -1707,7 +1707,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
// improve the performance of this function
static char *growBuf = 0;
static int growBufLen = 0;
- if (s.length()*3>growBufLen) // For input character we produce at most 3 output characters,
+ if ((int)s.length()*3>growBufLen) // For input character we produce at most 3 output characters,
{
growBufLen = s.length()*3;
growBuf = (char *)realloc(growBuf,growBufLen+1); // add 1 for 0-terminator
@@ -1847,7 +1847,8 @@ QCString removeRedundantWhiteSpace(const QCString &s)
case '*':
if (i>0 && pc!=' ' && pc!='\t' && pc!=':' &&
pc!='*' && pc!='&' && pc!='(' && pc!='/' &&
- pc!='.' && (osp<9 || !(pc=='>' && osp==11)))
+ pc!='.' && osp<9
+ )
// avoid splitting &&, **, .*, operator*, operator->*
{
*dst++=' ';
@@ -1855,7 +1856,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
*dst++=c;
break;
case '&':
- if (i>0 && isId(pc))
+ if (i>0 && isId(pc) && osp<9)
{
if (nc != '=')
// avoid splitting operator&=
@@ -1895,7 +1896,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
if (g_charAroundSpace.charMap[(uchar)pc].before &&
g_charAroundSpace.charMap[(uchar)nc].after &&
!(pc==',' && nc=='.') &&
- (osp<8 || (osp>=8 && pc!='"' && isId(nc)) || (osp>=8 && pc!='"' && nc!='"'))
+ (osp<8 || (osp>=8 && isId(pc) && isId(nc)))
// e.g. 'operator >>' -> 'operator>>',
// 'operator "" _x' -> 'operator""_x',
// but not 'operator int' -> 'operatorint'
@@ -5001,7 +5002,7 @@ bool generateLink(OutputDocInterface &od,const char *clName,
compound->definitionType()==Definition::TypeGroup /* is group */
)
{
- linkText=((GroupDef *)compound)->groupTitle(); // use group's title as link
+ linkText=(dynamic_cast<GroupDef *>(compound))->groupTitle(); // use group's title as link
}
else if (compound->definitionType()==Definition::TypeFile)
{
@@ -5373,7 +5374,7 @@ static void initBaseClassHierarchy(BaseClassList *bcl)
{
initBaseClassHierarchy(cd->baseClasses());
}
- cd->visited=FALSE;
+ cd->setVisited(FALSE);
}
}
//----------------------------------------------------------------------------
@@ -5413,7 +5414,7 @@ void initClassHierarchy(ClassSDict *cl)
ClassDef *cd;
for ( ; (cd=cli.current()); ++cli)
{
- cd->visited=FALSE;
+ cd->setVisited(FALSE);
initBaseClassHierarchy(cd->baseClasses());
}
}
@@ -6682,7 +6683,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
baseName=baseName.left(baseName.length()-Doxygen::htmlFileExtension.length());
QCString title=ptitle.stripWhiteSpace();
- pd=new PageDef(fileName,startLine,baseName,doc,title);
+ pd=createPageDef(fileName,startLine,baseName,doc,title);
pd->setRefItems(sli);
pd->setLanguage(lang);
@@ -6855,6 +6856,7 @@ void filterLatexString(FTextStream &t,const char *str,
case '%': t << "\\%"; break;
case '#': t << "\\#"; break;
case '$': t << "\\$"; break;
+ case '-': t << "-\\/"; break;
case '^': (usedTableLevels()>0) ? t << "\\string^" : t << (char)c; break;
case '~': (usedTableLevels()>0) ? t << "\\string~" : t << (char)c; break;
case ' ': if (keepSpaces) t << "~"; else t << ' ';
@@ -7479,7 +7481,7 @@ MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
if (distance!=-1 && distance<minDistance)
{
minDistance = distance;
- bestMatch = (MemberDef *)d;
+ bestMatch = dynamic_cast<MemberDef *>(d);
//printf("new best match %s distance=%d\n",bestMatch->qualifiedName().data(),distance);
}
}
@@ -7494,7 +7496,7 @@ MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
if (distance!=-1 && distance<minDistance)
{
minDistance = distance;
- bestMatch = (MemberDef *)d;
+ bestMatch = dynamic_cast<MemberDef *>(d);
//printf("new best match %s distance=%d\n",bestMatch->qualifiedName().data(),distance);
}
}
@@ -8219,10 +8221,6 @@ QCString externalRef(const QCString &relPath,const QCString &ref,bool href)
result.prepend(relPath);
l+=relPath.length();
}
- if (!href){
- result.prepend("doxygen=\""+ref+":");
- l+=10+ref.length();
- }
if (l>0 && result.at(l-1)!='/') result+='/';
if (!href) result.append("\" ");
}
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index aa15183..9e296cc 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -544,7 +544,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
Definition *d = cd->getOuterScope();
if (d && d->definitionType()==Definition::TypeClass)
{
- cd = (ClassDef*)d;
+ cd = dynamic_cast<ClassDef*>(d);
}
else
{
@@ -1549,12 +1549,10 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
//printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd);
if (s.isEmpty()) return;
printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
- TooltipManager::instance()->clearTooltips();
if (memberDef)
{
ClassDef *dd=memberDef->getClassDef();
if (dd) g_CurrClass=dd->name();
- startLine--;
}
resetVhdlCodeParserState();
g_code = &od;
@@ -1584,7 +1582,7 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",exName);
+ g_sourceFileDef = createFileDef("",exName);
cleanupSourceDef = TRUE;
}
if (g_sourceFileDef)
@@ -1599,10 +1597,7 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
g_exampleFile = convertNameToFile(g_exampleName+"-example");
}
g_includeCodeFragment = inlineFragment;
- if (!memberDef)
- {
- startCodeLine();
- }
+ startCodeLine();
// g_type.resize(0);
// g_name.resize(0);
// g_args.resize(0);
@@ -1623,10 +1618,6 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
{
endCodeLine();
}
- if (fd)
- {
- TooltipManager::instance()->writeTooltips(*g_code);
- }
if (cleanupSourceDef)
{
// delete the temporary file definition used for this example
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index 808b32b..e70f099 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -1798,7 +1798,7 @@ static void setGlobalType(MemberList *ml)
/* writes a vhdl type documentation */
bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition *d, OutputList &ol)
{
- ClassDef *cd=(ClassDef*)d;
+ const ClassDef *cd=dynamic_cast<const ClassDef*>(d);
bool hasParams = FALSE;
if (cd==0) return hasParams;
@@ -2984,7 +2984,7 @@ static void addInstance(ClassDef* classEntity, ClassDef* ar,
ferr:
QCString uu=cur->name;
- MemberDef *md=new MemberDef(
+ MemberDef *md=createMemberDef(
ar->getDefFileName(), cur->startLine,cur->startColumn,
n1,uu,uu, 0,
Public, Normal, cur->stat,Member,
diff --git a/src/xmlcode.l b/src/xmlcode.l
index d2f94ad..c9529d6 100644
--- a/src/xmlcode.l
+++ b/src/xmlcode.l
@@ -339,8 +339,6 @@ void parseXmlCode(
{
if (s.isEmpty()) return;
- TooltipManager::instance()->clearTooltips();
-
g_code = &od;
g_inputString = s;
g_inputPosition = 0;
@@ -367,7 +365,7 @@ void parseXmlCode(
if (exBlock && fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
+ g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
@@ -388,10 +386,6 @@ void parseXmlCode(
{
endCodeLine();
}
- if (fd)
- {
- TooltipManager::instance()->writeTooltips(*g_code);
- }
if (cleanupSourceDef)
{
// delete the temporary file definition used for this example
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 01e0a6d..1005719 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -299,20 +299,21 @@ void XmlDocVisitor::visit(DocInclude *inc)
{
m_t << "<programlisting filename=\"" << inc->file() << "\">";
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
0, // memberDef
TRUE // show line numbers
);
+ delete fd;
m_t << "</programlisting>";
}
break;
@@ -334,6 +335,7 @@ void XmlDocVisitor::visit(DocInclude *inc)
m_t << "</programlisting>";
break;
case DocInclude::DontInclude:
+ case DocInclude::DontIncWithLines:
break;
case DocInclude::HtmlInclude:
if (inc->isBlock())
@@ -373,7 +375,7 @@ void XmlDocVisitor::visit(DocInclude *inc)
{
m_t << "<programlisting filename=\"" << inc->file() << "\">";
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -381,13 +383,14 @@ void XmlDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
0, // memberDef
TRUE // show line number
);
+ delete fd;
m_t << "</programlisting>";
}
break;
@@ -418,10 +421,25 @@ void XmlDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
+
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,op->context(),
op->text(),langExt,op->isExample(),
- op->exampleFile());
+ op->exampleFile(),
+ fd, // fileDef
+ op->line(), // startLine
+ -1, // endLine
+ FALSE, // inline fragment
+ 0, // memberDef
+ op->showLineNo() // show line numbers
+ );
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;