summaryrefslogtreecommitdiffstats
path: root/src/classdef.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/classdef.cpp')
-rw-r--r--src/classdef.cpp200
1 files changed, 140 insertions, 60 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 182815a..f52b083 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1,8 +1,8 @@
/******************************************************************************
*
- * $Id$
+ *
*
- * Copyright (C) 1997-2007 by Dimitri van Heesch.
+ * Copyright (C) 1997-2008 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
@@ -36,6 +36,7 @@
#include "debug.h"
#include "docparser.h"
#include "searchindex.h"
+#include "vhdldocgen.h"
//static inline MemberList *createNewMemberList(MemberList::ListType lt)
//{
@@ -142,13 +143,6 @@ class ClassDefImpl
/* user defined member groups */
MemberGroupSDict *memberGroupSDict;
- /*! Indicated whether this class exists because it is used by
- * some other class only (TRUE) or if some class inherits from
- * it (FALSE). This is need to remove used-only classes from
- * the inheritance tree.
- */
- bool artificial;
-
/*! Is this an abstact class? */
bool isAbstract;
@@ -206,7 +200,6 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
variableInstances = 0;
templateMaster =0;
templBaseClassNames = 0;
- artificial = FALSE;
isAbstract = FALSE;
isStatic = FALSE;
isTemplArg = FALSE;
@@ -283,8 +276,13 @@ QCString ClassDef::displayName() const
{
static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString n;
- if (hideScopeNames)
+ if (vhdlOpt)
+ {
+ n = VhdlDocGen::getClassName(this);
+ }
+ else if (hideScopeNames)
{
n=m_impl->className;
}
@@ -364,9 +362,9 @@ void ClassDef::internalInsertMember(MemberDef *md,
bool addToAllList
)
{
+ //printf("insertInternalMember(%s) isHidden()=%d\n",md->name().data(),md->isHidden());
if (md->isHidden()) return;
- //printf("adding %s::%s\n",name().data(),md->name().data());
if (!isReference())
{
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
@@ -912,12 +910,23 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType
void ClassDef::showUsedFiles(OutputList &ol)
{
+ bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
if (Config_getBool("SHOW_USED_FILES"))
{
ol.writeRuler();
- ol.parseText(theTranslator->trGeneratedFromFiles(
+ if (fortranOpt)
+ {
+ ol.parseText(theTranslator->trGeneratedFromFilesFortran(
m_impl->isObjC && m_impl->compType==Interface ? Class : m_impl->compType,
m_impl->files.count()==1));
+ }
+ else
+ {
+ ol.parseText(theTranslator->trGeneratedFromFiles(
+ m_impl->isObjC && m_impl->compType==Interface ? Class : m_impl->compType,
+ m_impl->files.count()==1));
+ }
+
bool first=TRUE;
const char *file = m_impl->files.first();
@@ -1083,9 +1092,13 @@ void ClassDef::writeClassDiagrams(OutputList &ol)
{
Doxygen::tagFile << " virtualness=\"virtual\"";
}
- Doxygen::tagFile << ">" << convertToXML(cd->name()) << "</base>" << endl;
+ Doxygen::tagFile << ">" << convertToXML(cd->name())
+ << "</base>" << endl;
}
- ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->displayName()+bcd->templSpecifiers);
+ ol.writeObjectLink(cd->getReference(),
+ cd->getOutputFileBase(),
+ 0,
+ cd->displayName()+bcd->templSpecifiers);
}
else
{
@@ -1158,18 +1171,38 @@ void ClassDef::writeClassDiagrams(OutputList &ol)
// write all documentation for this class
void ClassDef::writeDocumentation(OutputList &ol)
{
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString pageType = " ";
+ QCString pageTitle = " ";
+
pageType += compoundTypeString();
toupper(pageType.at(1));
- QCString pageTitle = theTranslator->trCompoundReference(displayName(),
+ if (fortranOpt)
+ {
+ pageTitle = theTranslator->trCompoundReferenceFortran(displayName(),
+ m_impl->compType,
+ m_impl->tempArgs != 0);
+ }
+ else if (vhdlOpt)
+ {
+ // TODO: translate
+ pageTitle = VhdlDocGen::getClassTitle(this)+" Reference";
+ }
+ else
+ {
+ pageTitle = theTranslator->trCompoundReference(displayName(),
m_impl->compType == Interface && m_impl->isObjC ? Class : m_impl->compType,
m_impl->tempArgs != 0);
+ }
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible);
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,TRUE);
if (getOuterScope()!=Doxygen::globalScope)
{
writeNavigationPath(ol);
}
+ ol.endQuickIndices();
+ ol.startContents();
startTitle(ol,getOutputFileBase());
ol.parseText(pageTitle);
addGroupListToTitle(ol,this);
@@ -1437,12 +1470,16 @@ void ClassDef::writeDocumentation(OutputList &ol)
// );
// nested classes
- if (m_impl->innerClasses) m_impl->innerClasses->writeDeclaration(ol,0,0,TRUE);
+ if (m_impl->innerClasses)
+ {
+ m_impl->innerClasses->writeDeclaration(ol,0,0,TRUE);
+ }
ol.endMemberSections();
// write detailed description
- if (!Config_getBool("DETAILS_AT_TOP")) {
+ if (!Config_getBool("DETAILS_AT_TOP"))
+ {
writeDetailedDescription(ol,pageType,exampleFlag);
}
@@ -1489,7 +1526,8 @@ void ClassDef::writeMemberDocumentation(OutputList &ol)
///////////////////////////////////////////////////////////////////////////
//// Member definitions + detailed documentation
///////////////////////////////////////////////////////////////////////////
-
+ bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN");
+
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
ol.disable(OutputGenerator::Html);
@@ -1499,7 +1537,14 @@ void ClassDef::writeMemberDocumentation(OutputList &ol)
writeMemberDocumentation(ol,MemberList::typedefMembers,theTranslator->trMemberTypedefDocumentation());
writeMemberDocumentation(ol,MemberList::enumMembers,theTranslator->trMemberEnumerationDocumentation());
writeMemberDocumentation(ol,MemberList::constructors,theTranslator->trConstructorDocumentation());
- writeMemberDocumentation(ol,MemberList::functionMembers,theTranslator->trMemberFunctionDocumentation());
+ if (fortranOpt)
+ {
+ writeMemberDocumentation(ol,MemberList::functionMembers,theTranslator->trMemberFunctionDocumentationFortran());
+ }
+ else
+ {
+ writeMemberDocumentation(ol,MemberList::functionMembers,theTranslator->trMemberFunctionDocumentation());
+ }
writeMemberDocumentation(ol,MemberList::relatedMembers,theTranslator->trRelatedFunctionDocumentation());
writeMemberDocumentation(ol,MemberList::variableMembers,theTranslator->trMemberDataDocumentation());
writeMemberDocumentation(ol,MemberList::propertyMembers,theTranslator->trPropertyDocumentation());
@@ -1610,8 +1655,9 @@ void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
// write the list of all (inherited) members for this class
void ClassDef::writeMemberList(OutputList &ol)
{
- if (m_impl->allMemberNameInfoSDict==0 ||
- Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) return;
+ static bool cOpt = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ if (m_impl->allMemberNameInfoSDict==0 || cOpt) return;
// only for HTML
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -1734,7 +1780,11 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.parseText(theTranslator->trDefinedIn()+" ");
if (cd->isLinkable())
{
- ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->displayName());
+ ol.writeObjectLink(
+ cd->getReference(),
+ cd->getOutputFileBase(),
+ 0,
+ cd->displayName());
}
else
{
@@ -1749,8 +1799,10 @@ void ClassDef::writeMemberList(OutputList &ol)
if (memberWritten)
{
ol.writeString("<td>");
- ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),
- 0,cd->displayName());
+ ol.writeObjectLink(cd->getReference(),
+ cd->getOutputFileBase(),
+ 0,
+ cd->displayName());
ol.writeString("</td>");
ol.writeString("<td>");
}
@@ -1759,14 +1811,16 @@ void ClassDef::writeMemberList(OutputList &ol)
md->isFriend() || md->isRelated() || md->isExplicit() ||
md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) ||
md->isSignal() || md->isSlot() ||
- md->isStatic()
+ md->isStatic() || vhdlOpt
)
&& memberWritten)
{
ol.startTypewriter();
ol.docify(" [");
QStrList sl;
- if (md->isFriend()) sl.append("friend");
+ if (vhdlOpt) sl.append(VhdlDocGen::trVhdlType(
+ md->getMemberSpecifiers())); //append vhdl type
+ else if (md->isFriend()) sl.append("friend");
else if (md->isRelated()) sl.append("related");
else
{
@@ -1993,7 +2047,7 @@ bool ClassDef::isLinkableInProject() const
else
{
return !name().isEmpty() && /* no name */
- !m_impl->artificial && !isHidden() &&
+ !isArtificial() && !isHidden() &&
name().find('@')==-1 && /* anonymous compound */
(m_impl->prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */
(!m_impl->isLocal || Config_getBool("EXTRACT_LOCAL_CLASSES")) && /* local */
@@ -2029,7 +2083,7 @@ bool ClassDef::isVisibleInHierarchy()
// and not an annonymous compound
name().find('@')==-1 &&
// not an artifically introduced class
- !m_impl->artificial &&
+ !isArtificial() &&
// and not privately inherited
(m_impl->prot!=Private || extractPrivate) &&
// documented or shown anyway or documentation is external
@@ -2097,6 +2151,13 @@ static bool isStandardFunc(MemberDef *md)
void ClassDef::mergeMembers()
{
if (m_impl->membersMerged) return;
+
+ static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ QCString sep="::";
+ if (optimizeOutputForJava || vhdlOpt) sep=".";
+ int sepLen = sep.length();
+
m_impl->membersMerged=TRUE;
//printf(" mergeMembers for %s\n",name().data());
bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB" );
@@ -2171,7 +2232,7 @@ void ClassDef::mergeMembers()
// dstMd->name().data(),
// dstMi->scopePath.left(dstMi->scopePath.find("::")+2).data());
- QCString scope=dstMi->scopePath.left(dstMi->scopePath.find("::")+2);
+ QCString scope=dstMi->scopePath.left(dstMi->scopePath.find(sep)+sepLen);
if (scope!=dstMi->ambiguityResolutionScope.left(scope.length()))
dstMi->ambiguityResolutionScope.prepend(scope);
ambigue=TRUE;
@@ -2184,7 +2245,7 @@ void ClassDef::mergeMembers()
// if base class is an interface (and thus implicitly virtual).
//printf("same member found srcMi->virt=%d dstMi->virt=%d\n",srcMi->virt,dstMi->virt);
if ((srcMi->virt!=Normal && dstMi->virt!=Normal) ||
- bClass->name()+"::"+srcMi->scopePath == dstMi->scopePath ||
+ bClass->name()+sep+srcMi->scopePath == dstMi->scopePath ||
dstMd->getClassDef()->compoundType()==Interface
)
{
@@ -2198,7 +2259,7 @@ void ClassDef::mergeMembers()
// dstMd->name().data(),
// dstMi->scopePath.left(dstMi->scopePath.find("::")+2).data());
- QCString scope=dstMi->scopePath.left(dstMi->scopePath.find("::")+2);
+ QCString scope=dstMi->scopePath.left(dstMi->scopePath.find(sep)+sepLen);
if (scope!=dstMi->ambiguityResolutionScope.left(scope.length()))
{
dstMi->ambiguityResolutionScope.prepend(scope);
@@ -2236,7 +2297,7 @@ void ClassDef::mergeMembers()
if (srcMi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
MemberInfo *newMi = new MemberInfo(srcMd,prot,virt,TRUE);
- newMi->scopePath=bClass->name()+"::"+srcMi->scopePath;
+ newMi->scopePath=bClass->name()+sep+srcMi->scopePath;
if (ambigue)
{
//printf("$$ New member %s %s add scope %s::\n",
@@ -2244,7 +2305,7 @@ void ClassDef::mergeMembers()
// srcMd->name().data(),
// bClass->name().data());
- QCString scope=bClass->name()+"::";
+ QCString scope=bClass->name()+sep;
if (scope!=srcMi->ambiguityResolutionScope.left(scope.length()))
{
newMi->ambiguityResolutionScope=
@@ -2256,12 +2317,12 @@ void ClassDef::mergeMembers()
if (srcMi->ambigClass==0)
{
newMi->ambigClass=bClass;
- newMi->ambiguityResolutionScope=bClass->name()+"::";
+ newMi->ambiguityResolutionScope=bClass->name()+sep;
}
else
{
newMi->ambigClass=srcMi->ambigClass;
- newMi->ambiguityResolutionScope=srcMi->ambigClass->name()+"::";
+ newMi->ambiguityResolutionScope=srcMi->ambigClass->name()+sep;
}
}
dstMni->append(newMi);
@@ -2308,7 +2369,7 @@ void ClassDef::mergeMembers()
}
//printf("Adding!\n");
MemberInfo *newMi=new MemberInfo(mi->memberDef,prot,virt,TRUE);
- newMi->scopePath=bClass->name()+"::"+mi->scopePath;
+ newMi->scopePath=bClass->name()+sep+mi->scopePath;
newMi->ambigClass=mi->ambigClass;
newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope.copy();
newMni->append(newMi);
@@ -2620,16 +2681,33 @@ void ClassDef::determineIntfUsageRelation()
QCString ClassDef::compoundTypeString() const
{
if (m_impl->compType==Interface && m_impl->isObjC) return "class";
- switch (m_impl->compType)
+ if (Config_getBool("OPTIMIZE_FOR_FORTRAN"))
+ {
+ switch (m_impl->compType)
+ {
+ case Class: return "module";
+ case Struct: return "type";
+ case Union: return "union";
+ case Interface: return "interface";
+ case Protocol: return "protocol";
+ case Category: return "category";
+ case Exception: return "exception";
+ default: return "unknown";
+ }
+ }
+ else
{
- case Class: return "class";
- case Struct: return "struct";
- case Union: return "union";
- case Interface: return "interface";
- case Protocol: return "protocol";
- case Category: return "category";
- case Exception: return "exception";
- default: return "unknown";
+ switch (m_impl->compType)
+ {
+ case Class: return "class";
+ case Struct: return "struct";
+ case Union: return "union";
+ case Interface: return "interface";
+ case Protocol: return "protocol";
+ case Category: return "category";
+ case Exception: return "exception";
+ default: return "unknown";
+ }
}
}
@@ -2785,7 +2863,7 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
{
Debug::print(Debug::Classes,0," New template instance class `%s'`%s'\n",name().data(),templSpec.data());
templateClass = new ClassDef(
- fileName,startLine,name()+templSpec,ClassDef::Class);
+ fileName,startLine,localName()+templSpec,ClassDef::Class);
templateClass->setTemplateMaster(this);
templateClass->setOuterScope(getOuterScope());
templateClass->setHidden(isHidden());
@@ -2982,12 +3060,13 @@ QCString ClassDef::className() const
void ClassDef::addListReferences()
{
+ bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN");
if (!isLinkableInProject()) return;
//printf("ClassDef(%s)::addListReferences()\n",name().data());
{
LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
addRefItem(xrefItems.pointer(),
- theTranslator->trClass(TRUE,TRUE),
+ fortranOpt?theTranslator->trType(TRUE,TRUE):theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),displayName()
);
}
@@ -3094,8 +3173,19 @@ void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md)
void ClassDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title,
const char *subTitle)
{
+ static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDeclarations(ol,this,0,0,0,title,subTitle);
+ if (ml)
+ {
+ if (optimizeVhdl) // use specific declarations function
+ {
+ VhdlDocGen::writeVhdlDeclarations(ml,ol,0,this);
+ }
+ else // ise generic declaration function
+ {
+ ml->writeDeclarations(ol,this,0,0,0,title,subTitle);
+ }
+ }
}
void ClassDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title)
@@ -3119,11 +3209,6 @@ bool ClassDef::isLocal() const
return m_impl->isLocal;
}
-bool ClassDef::isArtificial() const
-{
- return m_impl->artificial;
-}
-
ClassSDict *ClassDef::getInnerClasses()
{
return m_impl->innerClasses;
@@ -3254,11 +3339,6 @@ void ClassDef::setProtection(Protection p)
m_impl->prot=p;
}
-void ClassDef::setClassIsArtificial()
-{
- m_impl->artificial = TRUE;
-}
-
void ClassDef::setIsStatic(bool b)
{
m_impl->isStatic=b;