Doxygen
Loading...
Searching...
No Matches
VhdlDocGen Class Reference

Class for generating documentation specific for VHDL. More...

#include <src/vhdldocgen.h>

Public Types

enum  VhdlClasses { ENTITYCLASS , PACKBODYCLASS , ARCHITECTURECLASS , PACKAGECLASS }

Static Public Member Functions

static VhdlClasses convert (Protection prot)
static void init ()
static QCString convertFileNameToClassName (const QCString &name)
static bool isSubClass (ClassDef *cd, ClassDef *scd, bool followInstances, int level)
static QCString getIndexWord (const QCString &, int index)
static bool deleteCharRev (QCString &s, char c)
static void deleteAllChars (QCString &s, char c)
static void parseFuncProto (const QCString &text, QCString &name, QCString &ret, bool doc=false)
static void computeVhdlComponentRelations ()
static const char * findKeyWord (const QCString &word)
static ClassDefgetPackageName (const QCString &name)
static const MemberDeffindMember (const QCString &className, const QCString &memName)
static void findAllPackages (ClassDef *)
static const MemberDeffindMemberDef (ClassDef *cd, const QCString &key, MemberListType type)
 This function returns the entity|package in which the key (type) is found.
static ClassDefgetClass (const QCString &name)
static const MemberDeffindFunction (const QCString &name, const QCString &package)
static QCString getClassTitle (const ClassDef *)
static void writeInlineClassLink (const ClassDef *, OutputList &ol)
static void writeTagFile (MemberDefMutable *mdef, TextStream &tagFile)
static bool isConstraint (const MemberDef *mdef)
static bool isConfig (const MemberDef *mdef)
static bool isAlias (const MemberDef *mdef)
static bool isLibrary (const MemberDef *mdef)
static bool isGeneric (const MemberDef *mdef)
static bool isPort (const MemberDef *mdef)
static bool isComponent (const MemberDef *mdef)
static bool isPackage (const MemberDef *mdef)
static bool isEntity (const MemberDef *mdef)
static bool isConstant (const MemberDef *mdef)
static bool isVType (const MemberDef *mdef)
static bool isSubType (const MemberDef *mdef)
static bool isVhdlFunction (const MemberDef *mdef)
static bool isProcess (const MemberDef *mdef)
static bool isSignal (const MemberDef *mdef)
static bool isAttribute (const MemberDef *mdef)
static bool isSignals (const MemberDef *mdef)
static bool isProcedure (const MemberDef *mdef)
static bool isRecord (const MemberDef *mdef)
static bool isArchitecture (const MemberDef *mdef)
static bool isUnit (const MemberDef *mdef)
static bool isPackageBody (const MemberDef *mdef)
static bool isVariable (const MemberDef *mdef)
static bool isFile (const MemberDef *mdef)
static bool isGroup (const MemberDef *mdef)
static bool isCompInst (const MemberDef *mdef)
static bool isMisc (const MemberDef *mdef)
static void prepareComment (QCString &)
static void formatString (const QCString &, OutputList &ol, const MemberDef *)
static void writeFormatString (const QCString &, OutputList &ol, const MemberDef *)
static void writeFunctionProto (OutputList &ol, const ArgumentList &al, const MemberDef *)
static void writeProcessProto (OutputList &ol, const ArgumentList &al, const MemberDef *)
static void writeProcedureProto (OutputList &ol, const ArgumentList &al, const MemberDef *)
static bool writeFuncProcDocu (const MemberDef *mdef, OutputList &ol, const ArgumentList &al, bool type=false)
static void writeRecordProto (const MemberDef *mdef, OutputList &ol, const ArgumentList &al)
static bool writeVHDLTypeDocumentation (const MemberDef *mdef, const Definition *d, OutputList &ol)
static void writeVhdlDeclarations (const MemberList *, OutputList &, const GroupDef *, const ClassDef *, const FileDef *, const NamespaceDef *, const ModuleDef *)
static void writeVHDLDeclaration (MemberDefMutable *mdef, OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, bool inGroup)
static void writePlainVHDLDeclarations (const MemberList *ml, OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, VhdlSpecifier specifier)
static void writeVHDLDeclarations (const MemberList *ml, OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, const QCString &title, const QCString &subtitle, bool showEnumValues, VhdlSpecifier type)
static bool writeClassType (const ClassDef *, OutputList &ol, QCString &cname)
static QCString convertArgumentListToString (const ArgumentList &al, bool f)
static QCString getProcessNumber ()
static QCString getRecordNumber ()
static QCString getClassName (const ClassDef *)
static bool isNumber (const std::string &s)
static QCString getProtectionName (int prot)
static void parseUCF (const QCString &input, Entry *entity, const QCString &f, bool vendor)
static const ClassDeffindArchitecture (const ClassDef *cd)
static void correctMemberProperties (MemberDefMutable *md)
static void writeSource (const MemberDef *mdef, OutputList &ol, const QCString &cname)
static QCString parseForConfig (QCString &entity, QCString &arch)
static QCString parseForBinding (QCString &entity, QCString &arch)
static void addBaseClass (ClassDef *cd, ClassDef *ent)
static ClassDeffindVhdlClass (const QCString &className)
static void createFlowChart (const MemberDef *)
static void setFlowMember (const MemberDef *flowMember)
static const MemberDefgetFlowMember ()
static bool isVhdlClass (const Entry *cu)
static void resetCodeVhdlParserState ()

Static Private Member Functions

static void findAllArchitectures (std::vector< QCString > &ql, const ClassDef *cd)
static bool compareArgList (const ArgumentList &, const ArgumentList &)
static void writeVhdlLink (const ClassDef *cdd, OutputList &ol, QCString &type, QCString &name, QCString &beh)
static void writeStringLink (const MemberDef *mdef, QCString mem, OutputList &ol)
static void writeRecUnitDocu (const MemberDef *md, OutputList &ol, QCString largs)
static void writeRecordUnit (QCString &largs, QCString &ltype, OutputList &ol, MemberDefMutable *mdef)

Detailed Description

Class for generating documentation specific for VHDL.

Definition at line 69 of file vhdldocgen.h.

Member Enumeration Documentation

◆ VhdlClasses

Enumerator
ENTITYCLASS 
PACKBODYCLASS 
ARCHITECTURECLASS 
PACKAGECLASS 

Definition at line 73 of file vhdldocgen.h.

74 {
75 ENTITYCLASS, // Overlays: Public
76 PACKBODYCLASS, // Overlays: Protected
77 ARCHITECTURECLASS, // Overlays: Private
78 PACKAGECLASS // Overlays: Package
79 };
@ ARCHITECTURECLASS
Definition vhdldocgen.h:77

Member Function Documentation

◆ addBaseClass()

void VhdlDocGen::addBaseClass ( ClassDef * cd,
ClassDef * ent )
static

Definition at line 2364 of file vhdldocgen.cpp.

2365{
2366 BaseClassList bcl = cd->baseClasses();
2367 for (auto &bcd : bcl)
2368 {
2369 ClassDef *ccd = bcd.classDef;
2370 if (ccd==ent)
2371 {
2372 QCString n = bcd.usedName;
2373 int i = n.find('(');
2374 if(i<0)
2375 {
2376 bcd.usedName.append("(2)");
2377 return;
2378 }
2379 static const reg::Ex reg(R"(\d+)");
2380 QCString s=n.left(i);
2381 QCString r=n.right(n.length()-i);
2382 std::string t=r.str();
2385 r.setNum(r.toInt()+1);
2386 reg::replace(t, reg, r.str());
2387 s.append(t);
2388 bcd.usedName=s;
2389 bcd.templSpecifiers=t;
2390 }
2391 }
2392 cd->updateBaseClasses(bcl);
2393}
virtual void updateBaseClasses(const BaseClassList &bcd)=0
Update the list of base classes to the one passed.
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
int toInt(bool *ok=nullptr, int base=10) const
Definition qcstring.cpp:254
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
const std::string & str() const
Definition qcstring.h:552
QCString & setNum(short n)
Definition qcstring.h:459
QCString & append(char c)
Definition qcstring.h:396
QCString right(size_t len) const
Definition qcstring.h:234
QCString left(size_t len) const
Definition qcstring.h:229
static void deleteAllChars(QCString &s, char c)
std::vector< BaseClassDef > BaseClassList
Definition classdef.h:81
std::string replace(std::string_view str, const Ex &re, std::string_view replacement)
Searching in a given input string for parts that match regular expression re and replaces those parts...
Definition regex.cpp:866

References QCString::append(), ClassDef::baseClasses(), deleteAllChars(), QCString::find(), QCString::left(), QCString::length(), reg::replace(), QCString::right(), QCString::setNum(), QCString::str(), QCString::toInt(), and ClassDef::updateBaseClasses().

Referenced by addInstance().

◆ compareArgList()

bool VhdlDocGen::compareArgList ( const ArgumentList & ,
const ArgumentList &  )
staticprivate

◆ computeVhdlComponentRelations()

void VhdlDocGen::computeVhdlComponentRelations ( )
static

Definition at line 2162 of file vhdldocgen.cpp.

2163{
2164
2165 QCString entity,arch,inst;
2166
2167 for (const auto &cur : getVhdlInstList())
2168 {
2169 if (cur->isStatic ) // was bind
2170 {
2171 continue;
2172 }
2173
2174 if (cur->includeName=="entity" || cur->includeName=="component" )
2175 {
2176 entity=cur->includeName+" "+cur->type;
2177 QCString rr=VhdlDocGen::parseForBinding(entity,arch);
2178 }
2179 else if (cur->includeName.isEmpty())
2180 {
2181 entity=cur->type;
2182 }
2183
2184 ClassDefMutable *classEntity= toClassDefMutable(VhdlDocGen::findVhdlClass(entity));
2185 inst=VhdlDocGen::getIndexWord(cur->args,0);
2186 ClassDefMutable *cd=toClassDefMutable(Doxygen::classLinkedMap->find(inst));
2187 ClassDefMutable *ar=toClassDefMutable(Doxygen::classLinkedMap->find(cur->args));
2188
2189 if (cd==nullptr)
2190 {
2191 continue;
2192 }
2193
2194 addInstance(classEntity,ar,cd,cur);
2195 }
2196
2197}
static ClassLinkedMap * classLinkedMap
Definition doxygen.h:95
static ClassDef * findVhdlClass(const QCString &className)
static QCString parseForBinding(QCString &entity, QCString &arch)
static QCString getIndexWord(const QCString &, int index)
ClassDefMutable * toClassDefMutable(Definition *d)
static void addInstance(ClassDefMutable *entity, ClassDefMutable *arch, ClassDefMutable *inst, const std::shared_ptr< Entry > &cur)
const EntryList & getVhdlInstList()

References addInstance(), Doxygen::classLinkedMap, findVhdlClass(), getIndexWord(), getVhdlInstList(), parseForBinding(), and toClassDefMutable().

Referenced by parseInput().

◆ convert()

VhdlClasses VhdlDocGen::convert ( Protection prot)
inlinestatic

Definition at line 80 of file vhdldocgen.h.

81 {
82 switch (prot)
83 {
84 case Protection::Public: return ENTITYCLASS;
85 case Protection::Protected: return PACKBODYCLASS;
86 case Protection::Private: return ARCHITECTURECLASS;
87 case Protection::Package: return PACKAGECLASS;
88 }
89 return ENTITYCLASS;
90 }

References ARCHITECTURECLASS, ENTITYCLASS, PACKAGECLASS, and PACKBODYCLASS.

Referenced by DotGfxHierarchyTable::addClassList(), findMember(), getClassName(), getSpecifierTypeFromClass(), ClassDefImpl::setProtection(), writeAlphabeticalClassList(), writeAnnotatedClassList(), writeClassTree(), writeClassTreeForList(), writeClassTreeToOutput(), ClassDefImpl::writeDeclarationLink(), writeInlineClassLink(), and writeVHDLDeclaration().

◆ convertArgumentListToString()

QCString VhdlDocGen::convertArgumentListToString ( const ArgumentList & al,
bool f )
static

Definition at line 1153 of file vhdldocgen.cpp.

1154{
1155 QCString argString;
1156 bool sem=FALSE;
1157
1158 for (const Argument &arg : al)
1159 {
1160 if (sem) argString.append(", ");
1161 if (func)
1162 {
1163 argString+=arg.name;
1164 argString+=":";
1165 argString+=arg.type;
1166 }
1167 else
1168 {
1169 argString+=arg.defval+" ";
1170 argString+=arg.name+" :";
1171 argString+=arg.attrib+" ";
1172 argString+=arg.type;
1173 }
1174 sem=TRUE;
1175 }
1176 return argString;
1177}
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34

References QCString::append(), FALSE, and TRUE.

Referenced by writeTagFile().

◆ convertFileNameToClassName()

QCString VhdlDocGen::convertFileNameToClassName ( const QCString & name)
static

Definition at line 1907 of file vhdldocgen.cpp.

1908{
1909
1910 QCString n=name;
1911 n=n.remove(0,6);
1912
1913 int i=0;
1914
1915 while((i=n.find("__"))>0)
1916 {
1917 n=n.remove(i,1);
1918 }
1919
1920 while((i=n.find("_1"))>0)
1921 {
1922 n=n.replace(i,2,":");
1923 }
1924
1925 return n;
1926}
QCString & remove(size_t index, size_t len)
Definition qcstring.h:442
QCString & replace(size_t index, size_t len, const char *s)
Definition qcstring.cpp:217

References QCString::find(), QCString::remove(), and QCString::replace().

◆ correctMemberProperties()

void VhdlDocGen::correctMemberProperties ( MemberDefMutable * md)
static

Definition at line 1211 of file vhdldocgen.cpp.

1212{
1213 if (md->argsString()=="package")
1214 {
1216 }
1217 else if (md->argsString()=="configuration")
1218 {
1220 }
1221 else if (md->typeString()=="library")
1222 {
1224 }
1225 else if (md->typeString()=="use")
1226 {
1228 }
1229 else if (md->typeString().lower()=="misc")
1230 {
1232 }
1233 else if (md->typeString().lower()=="ucf_const")
1234 {
1236 }
1237
1239 {
1240 int mm=md->name().findRev('_');
1241 if (mm>0)
1242 {
1243 md->setName(md->name().left(mm));
1244 }
1245 }
1246 else if (md->getVhdlSpecifiers()==VhdlSpecifier::TYPE)
1247 {
1248 QCString largs=md->argsString();
1249 bool bRec=largs.stripPrefix("record") ;
1250 bool bUnit=largs.stripPrefix("units") ;
1251 if (bRec || bUnit)
1252 {
1253 md->setType("");
1254 }
1255 }
1256}
virtual const QCString & name() const =0
virtual void setName(const QCString &name)=0
virtual QCString typeString() const =0
virtual VhdlSpecifier getVhdlSpecifiers() const =0
virtual QCString argsString() const =0
virtual void setVhdlSpecifiers(VhdlSpecifier s)=0
virtual void setType(const QCString &t)=0
QCString lower() const
Definition qcstring.h:249
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition qcstring.cpp:96
bool stripPrefix(const QCString &prefix)
Definition qcstring.h:213
@ INSTANTIATION
Definition types.h:751
@ MISCELLANEOUS
Definition types.h:757

References MemberDef::argsString(), CONFIG, QCString::findRev(), MemberDef::getVhdlSpecifiers(), INSTANTIATION, QCString::left(), LIBRARY, QCString::lower(), MISCELLANEOUS, Definition::name(), DefinitionMutable::setName(), MemberDefMutable::setType(), MemberDefMutable::setVhdlSpecifiers(), QCString::stripPrefix(), TYPE, MemberDef::typeString(), UCF_CONST, and USE.

Referenced by vhdlCorrectMemberProperties().

◆ createFlowChart()

void VhdlDocGen::createFlowChart ( const MemberDef * mdef)
static

Definition at line 2410 of file vhdldocgen.cpp.

2411{
2412 if (mdef==nullptr) return;
2413
2414 QCString codeFragment;
2415 const MemberDef* mm=nullptr;
2416 if ((mm=findMemFlow(mdef))!=nullptr)
2417 {
2418 // don't create the same flowchart twice
2420 return;
2421 }
2422 else
2423 {
2424 mdList.push_back(mdef);
2425 }
2426
2427 //fprintf(stderr,"\n create flow mem %s %p\n",qPrint(mdef->name()),mdef);
2428
2429 int actualStart= mdef->getStartBodyLine();
2430 int actualEnd=mdef->getEndBodyLine();
2431 const FileDef* fd=mdef->getFileDef();
2432 bool b=readCodeFragment( fd->absFilePath(), false, actualStart, actualEnd, codeFragment);
2433 if (!b) return;
2434
2435 auto parser { Doxygen::parserManager->getOutlineParser(".vhd") };
2437 std::shared_ptr<Entry> root = std::make_shared<Entry>();
2438 StringVector filesInSameTu;
2439 parser->parseInput("",codeFragment.data(),root,nullptr);
2440}
virtual int getEndBodyLine() const =0
virtual int getStartBodyLine() const =0
static ParserManager * parserManager
Definition doxygen.h:128
virtual QCString absFilePath() const =0
virtual const FileDef * getFileDef() const =0
std::unique_ptr< OutlineParserInterface > getOutlineParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:245
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
static void setFlowMember(const MemberDef *flowMember)
std::vector< std::string > StringVector
Definition containers.h:33
bool readCodeFragment(const QCString &fileName, bool isMacro, int &startLine, int &endLine, QCString &result)
Reads a fragment from file fileName starting with line startLine and ending with line endLine.
static const MemberDef * findMemFlow(const MemberDef *mdef)
static std::vector< const MemberDef * > mdList

References FileDef::absFilePath(), QCString::data(), findMemFlow(), Definition::getEndBodyLine(), MemberDef::getFileDef(), Definition::getStartBodyLine(), mdList, Doxygen::parserManager, readCodeFragment(), and setFlowMember().

Referenced by DocVhdlFlow::parse().

◆ deleteAllChars()

void VhdlDocGen::deleteAllChars ( QCString & s,
char c )
static

Definition at line 724 of file vhdldocgen.cpp.

725{
726 int index=s.findRev(c,-1,FALSE);
727 while (index > -1)
728 {
729 s = s.remove(index,1);
730 index=s.findRev(c,-1,FALSE);
731 }
732}

References FALSE, QCString::findRev(), and QCString::remove().

Referenced by addBaseClass(), VHDLOutlineParser::createFunction(), and initUCF().

◆ deleteCharRev()

bool VhdlDocGen::deleteCharRev ( QCString & s,
char c )
static

deletes a char backwards in a string

Definition at line 713 of file vhdldocgen.cpp.

714{
715 int index=s.findRev(c,-1,FALSE);
716 if (index > -1)
717 {
718 s = s.remove(index,1);
719 return TRUE;
720 }
721 return FALSE;
722}

References FALSE, QCString::findRev(), QCString::remove(), and TRUE.

Referenced by parseFuncProto().

◆ findAllArchitectures()

void VhdlDocGen::findAllArchitectures ( std::vector< QCString > & ql,
const ClassDef * cd )
staticprivate

Definition at line 530 of file vhdldocgen.cpp.

531{
532 for (const auto &citer : *Doxygen::classLinkedMap)
533 {
534 QCString className=citer->className();
535 int pos = -1;
536 if (cd != citer.get() && (pos=className.find('-'))!=-1)
537 {
538 QCString postfix=className.mid(pos+1);
539 if (qstricmp(cd->className(),postfix)==0)
540 {
541 qll.push_back(className);
542 }
543 }
544 }// for
545}//findAllArchitectures
virtual QCString className() const =0
Returns the name of the class including outer classes, but not including namespaces.
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
int qstricmp(const char *s1, const char *s2)
Definition qcstring.cpp:530

References Doxygen::classLinkedMap, ClassDef::className(), QCString::find(), QCString::mid(), and qstricmp().

Referenced by writeInlineClassLink().

◆ findAllPackages()

void VhdlDocGen::findAllPackages ( ClassDef * cdef)
static

finds all included packages of an Entity or Package

Definition at line 360 of file vhdldocgen.cpp.

361{
362 std::lock_guard lock(g_vhdlMutex);
363 if (g_packages.find(cdef)!=g_packages.end()) return;
364 std::vector<ClassDef*> cList;
365 MemberList *mem=cdef->getMemberList(MemberListType::VariableMembers());
366 if (mem)
367 {
368 for (const auto &md : *mem)
369 {
370 if (VhdlDocGen::isPackage(md))
371 {
372 ClassDef* cd=VhdlDocGen::getPackageName(md->name());
373 if (cd)
374 {
375 cList.push_back(cd);
377 g_packages.emplace(cdef,cList);
378 }
379 }
380 }//for
381 }
382
383}// findAllPackages
virtual MemberList * getMemberList(MemberListType lt) const =0
Returns the members in the list identified by lt.
static void findAllPackages(ClassDef *)
static bool isPackage(const MemberDef *mdef)
static ClassDef * getPackageName(const QCString &name)
static std::map< ClassDef *, std::vector< ClassDef * > > g_packages
static std::recursive_mutex g_vhdlMutex

References findAllPackages(), g_packages, g_vhdlMutex, ClassDef::getMemberList(), getPackageName(), and isPackage().

Referenced by findAllPackages(), and findMember().

◆ findArchitecture()

const ClassDef * VhdlDocGen::findArchitecture ( const ClassDef * cd)
static

Definition at line 547 of file vhdldocgen.cpp.

548{
549 for (const auto &citer : *Doxygen::classLinkedMap)
550 {
551 QCString jj=citer->name();
552 StringVector ql=split(jj.str(),":");
553 if (ql.size()>1)
554 {
555 if (ql[0]==cd->name())
556 {
557 return citer.get();
558 }
559 }
560 }
561 return nullptr;
562}
StringVector split(const std::string &s, const std::string &delimiter)
split input string s by string delimiter delimiter.
Definition util.cpp:6636

References Doxygen::classLinkedMap, Definition::name(), split(), and QCString::str().

◆ findFunction()

const MemberDef * VhdlDocGen::findFunction ( const QCString & funcname,
const QCString & package )
static

returns the function with the matching argument list is called in vhdlcode.l

Definition at line 390 of file vhdldocgen.cpp.

391{
392 ClassDef *cdef=getClass(package);
393 if (cdef==nullptr) return nullptr;
394
395 MemberList *mem=cdef->getMemberList(MemberListType::PubMethods());
396 if (mem)
397 {
398 for (const auto &mdef : *mem)
399 {
400 QCString mname=mdef->name();
401 if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (compareString(funcname,mname)==0))
402 {
403 return mdef;
404 }//if
405 }//for
406 }//if
407 return nullptr;
408} //findFunction
static bool isVhdlFunction(const MemberDef *mdef)
static ClassDef * getClass(const QCString &name)
static bool isProcedure(const MemberDef *mdef)
static int compareString(const QCString &s1, const QCString &s2)

References compareString(), getClass(), ClassDef::getMemberList(), isProcedure(), and isVhdlFunction().

◆ findKeyWord()

const char * VhdlDocGen::findKeyWord ( const QCString & kw)
static

returns the color of a keyword

Definition at line 178 of file vhdldocgen.cpp.

179{
180 std::string word=kw.lower().str();
181
182 if (word.empty()) return nullptr;
183
184 if (g_vhdlKeyWordSet0.find(word)!=g_vhdlKeyWordSet0.end())
185 return "keywordflow";
186
187 if (g_vhdlKeyWordSet1.find(word)!=g_vhdlKeyWordSet1.end())
188 return "keywordtype";
189
190 if (g_vhdlKeyWordSet2.find(word)!=g_vhdlKeyWordSet2.end())
191 return "vhdllogic";
192
193 if (g_vhdlKeyWordSet3.find(word)!=g_vhdlKeyWordSet3.end())
194 return "vhdlkeyword";
195
196 return nullptr;
197}
static const std::unordered_set< std::string > g_vhdlKeyWordSet0
static const std::unordered_set< std::string > g_vhdlKeyWordSet2
static const std::unordered_set< std::string > g_vhdlKeyWordSet3
static const std::unordered_set< std::string > g_vhdlKeyWordSet1

References g_vhdlKeyWordSet0, g_vhdlKeyWordSet1, g_vhdlKeyWordSet2, g_vhdlKeyWordSet3, QCString::lower(), and QCString::str().

Referenced by writeFormatString(), writeFunctionProto(), and writeProcedureProto().

◆ findMember()

const MemberDef * VhdlDocGen::findMember ( const QCString & className,
const QCString & memName )
static

Definition at line 215 of file vhdldocgen.cpp.

216{
217 std::lock_guard lock(g_vhdlMutex);
218 ClassDef *ecd=nullptr;
219 const MemberDef *mdef=nullptr;
220
221 ClassDef *cd=getClass(className);
222 //printf("VhdlDocGen::findMember(%s,%s)=%p\n",qPrint(className),qPrint(memName),cd);
223 if (cd==nullptr) return nullptr;
224
225 mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType::VariableMembers());
226 if (mdef) return mdef;
227 mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType::PubMethods());
228 if (mdef) return mdef;
229
230 // nothing found so far
231 // if we are an architecture or package body search in entity
232
235 {
236 Definition *d = cd->getOuterScope();
237 // searching upper/lower case names
238
239 QCString tt=d->name();
240 ecd =getClass(tt);
241 if (!ecd)
242 {
243 tt=tt.upper();
244 ecd =getClass(tt);
245 }
246 if (!ecd)
247 {
248 tt=tt.lower();
249 ecd =getClass(tt);
250 }
251
252 if (ecd) //d && d->definitionType()==Definition::TypeClass)
253 {
254 //ClassDef *ecd = (ClassDef*)d;
255 mdef=VhdlDocGen::findMemberDef(ecd,memName,MemberListType::VariableMembers());
256 if (mdef) return mdef;
257 mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType::PubMethods());
258 if (mdef) return mdef;
259 }
260 }
261
262
265 {
266 Definition *d = cd->getOuterScope();
267
268 QCString tt=d->name();
269 ClassDef *acd =getClass(tt);
270 if (!acd)
271 {
272 tt=tt.upper();
273 acd =getClass(tt);
274 }
275 if (!acd)
276 {
277 tt=tt.lower();
278 acd =getClass(tt);
279 }
280 if (acd) //d && d->definitionType()==Definition::TypeClass)
281 {
282 if(g_packages.find(acd)==g_packages.end())
283 {
285 }
286 }
287 }
288 else
289 {
290 ecd=cd;
291 if (g_packages.find(ecd)==g_packages.end()) VhdlDocGen::findAllPackages(ecd);
292 }
293
294 if (ecd)
295 {
296 auto cList_it = g_packages.find(ecd);
297 if (cList_it!=g_packages.end())
298 {
299 for (const auto &cdp : cList_it->second)
300 {
301 mdef=VhdlDocGen::findMemberDef(cdp,memName,MemberListType::VariableMembers());
302 if (mdef) return mdef;
303 mdef=VhdlDocGen::findMemberDef(cdp,memName,MemberListType::PubMethods());
304 if (mdef) return mdef;
305 }
306 }
307 }
308 return nullptr;
309
310}//findMember
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual Definition * getOuterScope() const =0
QCString upper() const
Definition qcstring.h:254
static const MemberDef * findMemberDef(ClassDef *cd, const QCString &key, MemberListType type)
This function returns the entity|package in which the key (type) is found.
static VhdlClasses convert(Protection prot)
Definition vhdldocgen.h:80

References ARCHITECTURECLASS, convert(), findAllPackages(), findMemberDef(), g_packages, g_vhdlMutex, getClass(), Definition::getOuterScope(), QCString::lower(), Definition::name(), PACKBODYCLASS, ClassDef::protection(), and QCString::upper().

Referenced by startCodeLine(), writeStringLink(), and writeVHDLTypeDocumentation().

◆ findMemberDef()

const MemberDef * VhdlDocGen::findMemberDef ( ClassDef * cd,
const QCString & key,
MemberListType type )
static

This function returns the entity|package in which the key (type) is found.

Definition at line 316 of file vhdldocgen.cpp.

317{
318 std::lock_guard lock(g_vhdlMutex);
319 QCString keyType=cd->symbolName()+"@"+key;
320 //printf("\n %s | %s | %s",qPrint(cd->symbolName()),key.data(,),qPrint(keyType));
321
322 auto it = g_varMap.find(keyType.str());
323 if (it!=g_varMap.end())
324 {
325 return it->second;
326 }
327 if (std::find(g_classList.begin(),g_classList.end(),cd)!=g_classList.end())
328 {
329 return nullptr;
330 }
331 const MemberList *ml=cd->getMemberList(type);
333 if (!ml)
334 {
335 return nullptr;
336 }
337 //int l=ml->count();
338 // fprintf(stderr,"\n loading entity %s %s: %d",qPrint(cd->symbolName()),qPrint(keyType),l);
339
340 for (const auto &md : *ml)
341 {
342 QCString tkey=cd->symbolName()+"@"+md->name();
343 if (g_varMap.find(tkey.str())==g_varMap.end())
344 {
345 g_varMap.emplace(tkey.str(),md);
346 }
347 }
348 it=g_varMap.find(keyType.str());
349 if (it!=g_varMap.end())
350 {
351 return it->second;
352 }
353 return nullptr;
354}//findMemberDef
virtual QCString symbolName() const =0
void push_back(const T &value)
Definition memberlist.h:48
static std::vector< ClassDef * > g_classList
static std::map< std::string, const MemberDef * > g_varMap

References g_classList, g_varMap, g_vhdlMutex, ClassDef::getMemberList(), QCString::str(), and Definition::symbolName().

Referenced by findMember().

◆ findVhdlClass()

ClassDef * VhdlDocGen::findVhdlClass ( const QCString & className)
static

Definition at line 2136 of file vhdldocgen.cpp.

2137{
2138 for (const auto &cd : *Doxygen::classLinkedMap)
2139 {
2140 if (qstricmp(className.data(),qPrint(cd->name()))==0)
2141 {
2142 return cd.get();
2143 }
2144 }
2145 return nullptr;
2146}
const char * qPrint(const char *s)
Definition qcstring.h:687

References Doxygen::classLinkedMap, QCString::data(), qPrint(), and qstricmp().

Referenced by computeVhdlComponentRelations().

◆ formatString()

void VhdlDocGen::formatString ( const QCString & s,
OutputList & ol,
const MemberDef * mdef )
static

inserts white spaces for better readings and writes a colored string to the output

Definition at line 848 of file vhdldocgen.cpp.

849{
850 QCString qcs = s;
851 QCString temp;
852 qcs.stripPrefix(":");
853 qcs.stripPrefix("is");
854 qcs.stripPrefix("IS");
855 qcs.stripPrefix("of");
856 qcs.stripPrefix("OF");
857
858 size_t len = qcs.length();
859 size_t index=1;
860
861 for (size_t j=0;j<len;j++)
862 {
863 char c=qcs[j];
864 char b=c;
865 if (j>0) b=qcs[j-1];
866 if (c=='"' || c==',' || c=='\''|| c=='(' || c==')' || c==':' || c=='[' || c==']' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>'))
867 {
868 if (temp.length()>=index && temp.at(index-1) != ' ')
869 {
870 temp+=" ";
871 }
872 temp+=c;
873 temp+=" ";
874 }
875 else if (c=='=')
876 {
877 if (b==':') // := operator
878 {
879 temp.replace(index-1,1,"=");
880 temp+=" ";
881 }
882 else // = operator
883 {
884 temp+=" ";
885 temp+=c;
886 temp+=" ";
887 }
888 }
889 else
890 {
891 temp+=c;
892 }
893
894 index=temp.length();
895 }// for
896 temp=temp.stripWhiteSpace();
897 // printf("\n [%s]",qPrint(qcs));
898 VhdlDocGen::writeFormatString(temp,ol,mdef);
899}
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:260
static void writeFormatString(const QCString &, OutputList &ol, const MemberDef *)

References QCString::at(), QCString::length(), QCString::replace(), QCString::stripPrefix(), QCString::stripWhiteSpace(), and writeFormatString().

Referenced by writeFunctionProto(), writeProcedureProto(), writeRecordUnit(), writeRecUnitDocu(), writeUCFLink(), writeVHDLDeclaration(), and writeVHDLTypeDocumentation().

◆ getClass()

ClassDef * VhdlDocGen::getClass ( const QCString & name)
static

Definition at line 199 of file vhdldocgen.cpp.

200{
201 if (name.isEmpty()) return nullptr;
202 return Doxygen::classLinkedMap->find(QCString(name).stripWhiteSpace());
203}
const T * find(const std::string &key) const
Definition linkedmap.h:47
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
std::string_view stripWhiteSpace(std::string_view s)
Given a string view s, returns a new, narrower view on that string, skipping over any leading or trai...
Definition stringutil.h:72

References Doxygen::classLinkedMap, QCString::isEmpty(), and stripWhiteSpace().

Referenced by findFunction(), findMember(), getPackageName(), writeInlineClassLink(), and writeVHDLDeclaration().

◆ getClassName()

QCString VhdlDocGen::getClassName ( const ClassDef * cd)
static

Definition at line 444 of file vhdldocgen.cpp.

445{
446 QCString temp;
447 if (cd==nullptr) return "";
448
450 {
451 temp=cd->name();
452 temp.stripPrefix("_");
453 return temp;
454 }
455
456 return substitute(cd->className(),"::",".");
457}
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:571

References ClassDef::className(), convert(), Definition::name(), PACKBODYCLASS, ClassDef::protection(), QCString::stripPrefix(), and substitute().

Referenced by getClassTitle(), makeDisplayName(), and writeClassType().

◆ getClassTitle()

QCString VhdlDocGen::getClassTitle ( const ClassDef * cd)
static

returns the class title+ref

Definition at line 432 of file vhdldocgen.cpp.

433{
434 QCString pageTitle;
435 if (cd==nullptr) return "";
436 pageTitle=VhdlDocGen::getClassName(cd);
437 pageTitle+=" ";
439 return pageTitle;
440} // getClassTitle
static QCString getClassName(const ClassDef *)
#define theTranslator_vhdlType
static VhdlSpecifier getSpecifierTypeFromClass(const ClassDef *cd)

References getClassName(), getSpecifierTypeFromClass(), theTranslator_vhdlType, and TRUE.

Referenced by ClassDefImpl::title().

◆ getFlowMember()

◆ getIndexWord()

QCString VhdlDocGen::getIndexWord ( const QCString & c,
int index )
static

Definition at line 681 of file vhdldocgen.cpp.

682{
683 static const reg::Ex reg(R"([\s:|])");
684 auto ql=split(c.str(),reg);
685
686 if (index < static_cast<int>(ql.size()))
687 {
688 return ql[index];
689 }
690
691 return "";
692}

References split(), and QCString::str().

Referenced by computeVhdlComponentRelations(), and parseFuncProto().

◆ getPackageName()

ClassDef * VhdlDocGen::getPackageName ( const QCString & name)
static

Definition at line 205 of file vhdldocgen.cpp.

206{
207 return getClass(name);
208}

References getClass().

Referenced by findAllPackages().

◆ getProcessNumber()

QCString VhdlDocGen::getProcessNumber ( )
static

returns the next number of an anonymous process

Definition at line 753 of file vhdldocgen.cpp.

754{
755 static int stringCounter;
756 QCString qcs("PROCESS_");
757 char buf[8];
758 qsnprintf(buf,8,"%d",stringCounter++);
759 qcs.append(&buf[0]);
760 return qcs;
761}
#define qsnprintf
Definition qcstring.h:49

References QCString::append(), and qsnprintf.

◆ getProtectionName()

QCString VhdlDocGen::getProtectionName ( int prot)
static

Definition at line 695 of file vhdldocgen.cpp.

696{
697 if (prot==VhdlDocGen::ENTITYCLASS)
698 return "entity";
699 else if (prot==VhdlDocGen::ARCHITECTURECLASS)
700 return "architecture";
701 else if (prot==VhdlDocGen::PACKAGECLASS)
702 return "package";
703 else if (prot==VhdlDocGen::PACKBODYCLASS)
704 return "package body";
705
706 return "";
707}

References ARCHITECTURECLASS, ENTITYCLASS, PACKAGECLASS, and PACKBODYCLASS.

Referenced by writeAnnotatedClassList(), and ClassDefImpl::writeDeclarationLink().

◆ getRecordNumber()

QCString VhdlDocGen::getRecordNumber ( )
static

returns the next number of a record|unit member

Definition at line 741 of file vhdldocgen.cpp.

742{
743 char buf[12];
744 qsnprintf(buf,12,"%d",recordCounter++);
745 QCString qcs(&buf[0]);
746 return qcs;
747}
static int recordCounter

References qsnprintf, and recordCounter.

Referenced by VHDLOutlineParser::checkInlineCode(), and initUCF().

◆ init()

void VhdlDocGen::init ( )
static

Definition at line 171 of file vhdldocgen.cpp.

172{
173}

Referenced by VHDLCodeParser::parseCode().

◆ isAlias()

bool VhdlDocGen::isAlias ( const MemberDef * mdef)
static

Definition at line 2454 of file vhdldocgen.cpp.

2455{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::ALIAS; }

References ALIAS, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile().

◆ isArchitecture()

bool VhdlDocGen::isArchitecture ( const MemberDef * mdef)
static

Definition at line 2488 of file vhdldocgen.cpp.

References ARCHITECTURE, and MemberDef::getVhdlSpecifiers().

◆ isAttribute()

bool VhdlDocGen::isAttribute ( const MemberDef * mdef)
static

Definition at line 2480 of file vhdldocgen.cpp.

References ATTRIBUTE, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile().

◆ isCompInst()

bool VhdlDocGen::isCompInst ( const MemberDef * mdef)
static

Definition at line 2500 of file vhdldocgen.cpp.

References MemberDef::getVhdlSpecifiers(), and INSTANTIATION.

Referenced by writeTagFile(), and writeVHDLDeclaration().

◆ isComponent()

bool VhdlDocGen::isComponent ( const MemberDef * mdef)
static

Definition at line 2462 of file vhdldocgen.cpp.

References COMPONENT, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile(), and writeVHDLDeclaration().

◆ isConfig()

bool VhdlDocGen::isConfig ( const MemberDef * mdef)
static

Definition at line 2452 of file vhdldocgen.cpp.

2453{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::CONFIG; }

References CONFIG, and MemberDef::getVhdlSpecifiers().

Referenced by writeVHDLDeclaration().

◆ isConstant()

bool VhdlDocGen::isConstant ( const MemberDef * mdef)
static

Definition at line 2468 of file vhdldocgen.cpp.

2469{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::CONSTANT; }

References CONSTANT, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile().

◆ isConstraint()

bool VhdlDocGen::isConstraint ( const MemberDef * mdef)
static

Definition at line 2450 of file vhdldocgen.cpp.

References MemberDef::getVhdlSpecifiers(), and UCF_CONST.

Referenced by writeVHDLTypeDocumentation().

◆ isEntity()

bool VhdlDocGen::isEntity ( const MemberDef * mdef)
static

Definition at line 2466 of file vhdldocgen.cpp.

2467{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::ENTITY; }

References ENTITY, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile().

◆ isFile()

bool VhdlDocGen::isFile ( const MemberDef * mdef)
static

Definition at line 2496 of file vhdldocgen.cpp.

2497{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::VFILE; }

References MemberDef::getVhdlSpecifiers(), and VFILE.

Referenced by writeTagFile().

◆ isGeneric()

bool VhdlDocGen::isGeneric ( const MemberDef * mdef)
static

Definition at line 2458 of file vhdldocgen.cpp.

2459{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::GENERIC; }

References GENERIC, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile(), and writeVHDLTypeDocumentation().

◆ isGroup()

bool VhdlDocGen::isGroup ( const MemberDef * mdef)
static

Definition at line 2498 of file vhdldocgen.cpp.

2499{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::GROUP; }

References MemberDef::getVhdlSpecifiers(), and GROUP.

Referenced by writeTagFile().

◆ isLibrary()

bool VhdlDocGen::isLibrary ( const MemberDef * mdef)
static

Definition at line 2456 of file vhdldocgen.cpp.

2457{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::LIBRARY; }

References MemberDef::getVhdlSpecifiers(), and LIBRARY.

Referenced by writeTagFile(), and writeVHDLTypeDocumentation().

◆ isMisc()

bool VhdlDocGen::isMisc ( const MemberDef * mdef)
static

◆ isNumber()

bool VhdlDocGen::isNumber ( const std::string & s)
static

returns TRUE if this string is a number

Definition at line 836 of file vhdldocgen.cpp.

837{
838 static const reg::Ex regg(R"([0-9][0-9eEfFbBcCdDaA_.#+?xXzZ-]*)");
839 return reg::match(s,regg);
840}// isNumber
bool match(std::string_view str, Match &match, const Ex &re)
Matches a given string str for a match against regular expression re.
Definition regex.cpp:855

References reg::match().

Referenced by checkVhdlString(), and writeFormatString().

◆ isPackage()

bool VhdlDocGen::isPackage ( const MemberDef * mdef)
static

Definition at line 2464 of file vhdldocgen.cpp.

2465{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::USE; }

References MemberDef::getVhdlSpecifiers(), and USE.

Referenced by findAllPackages(), writeTagFile(), and writeVHDLTypeDocumentation().

◆ isPackageBody()

bool VhdlDocGen::isPackageBody ( const MemberDef * mdef)
static

Definition at line 2492 of file vhdldocgen.cpp.

References MemberDef::getVhdlSpecifiers(), and PACKAGE_BODY.

◆ isPort()

bool VhdlDocGen::isPort ( const MemberDef * mdef)
static

Definition at line 2460 of file vhdldocgen.cpp.

2461{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::PORT; }

References MemberDef::getVhdlSpecifiers(), and PORT.

Referenced by writeTagFile(), and writeVHDLTypeDocumentation().

◆ isProcedure()

bool VhdlDocGen::isProcedure ( const MemberDef * mdef)
static

◆ isProcess()

bool VhdlDocGen::isProcess ( const MemberDef * mdef)
static

◆ isRecord()

bool VhdlDocGen::isRecord ( const MemberDef * mdef)
static

Definition at line 2486 of file vhdldocgen.cpp.

2487{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::RECORD; }

References MemberDef::getVhdlSpecifiers(), and RECORD.

Referenced by writeTagFile().

◆ isSignal()

bool VhdlDocGen::isSignal ( const MemberDef * mdef)
static

Definition at line 2478 of file vhdldocgen.cpp.

2479{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::SIGNAL; }

References MemberDef::getVhdlSpecifiers(), and SIGNAL.

◆ isSignals()

bool VhdlDocGen::isSignals ( const MemberDef * mdef)
static

Definition at line 2482 of file vhdldocgen.cpp.

2483{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::SIGNAL; }

References MemberDef::getVhdlSpecifiers(), and SIGNAL.

Referenced by writeTagFile().

◆ isSubClass()

bool VhdlDocGen::isSubClass ( ClassDef * cd,
ClassDef * scd,
bool followInstances,
int level )
static

Definition at line 2330 of file vhdldocgen.cpp.

2331{
2332 bool found=FALSE;
2333 //printf("isBaseClass(cd=%s) looking for %s\n",qPrint(name()),qPrint(bcd->name()));
2334 if (level>255)
2335 {
2336 err("Possible recursive class relation while inside {} and looking for {}\n",cd->name(),scd->name());
2337 abort();
2338 }
2339
2340 for (const auto &bcd :cd->subClasses())
2341 {
2342 const ClassDef *ccd=bcd.classDef;
2343 if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster();
2344 //printf("isSubClass() subclass %s\n",qPrint(ccd->name()));
2345 if (ccd==scd)
2346 {
2347 found=true;
2348 }
2349 else
2350 {
2351 if (level <256)
2352 {
2353 level = ccd->isBaseClass(scd,followInstances);
2354 if (level>0)
2355 {
2356 found=true;
2357 }
2358 }
2359 }
2360 }
2361 return found;
2362}
virtual int isBaseClass(const ClassDef *bcd, bool followInstances, const QCString &templSpec=QCString()) const =0
Returns TRUE iff bcd is a direct or indirect base class of this class.
virtual const ClassDef * templateMaster() const =0
Returns the template master of which this class is an instance.
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
#define err(fmt,...)
Definition message.h:127

References err, FALSE, ClassDef::isBaseClass(), Definition::name(), ClassDef::subClasses(), and ClassDef::templateMaster().

Referenced by addInstance().

◆ isSubType()

bool VhdlDocGen::isSubType ( const MemberDef * mdef)
static

Definition at line 2472 of file vhdldocgen.cpp.

2473{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::SUBTYPE; }

References MemberDef::getVhdlSpecifiers(), and SUBTYPE.

Referenced by writeTagFile().

◆ isUnit()

bool VhdlDocGen::isUnit ( const MemberDef * mdef)
static

Definition at line 2490 of file vhdldocgen.cpp.

2491{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::UNITS; }

References MemberDef::getVhdlSpecifiers(), and UNITS.

◆ isVariable()

bool VhdlDocGen::isVariable ( const MemberDef * mdef)
static

Definition at line 2494 of file vhdldocgen.cpp.

References MemberDef::getVhdlSpecifiers(), and SHAREDVARIABLE.

Referenced by writeTagFile().

◆ isVhdlClass()

bool VhdlDocGen::isVhdlClass ( const Entry * cu)
inlinestatic

Definition at line 212 of file vhdldocgen.h.

213 {
214 return cu->vhdlSpec==VhdlSpecifier::ENTITY ||
218 }
VhdlSpecifier vhdlSpec
VHDL specifiers.
Definition entry.h:184

References ARCHITECTURE, ENTITY, PACKAGE, PACKAGE_BODY, and Entry::vhdlSpec.

Referenced by VHDLOutlineParser::mapLibPackage().

◆ isVhdlFunction()

bool VhdlDocGen::isVhdlFunction ( const MemberDef * mdef)
static

◆ isVType()

bool VhdlDocGen::isVType ( const MemberDef * mdef)
static

Definition at line 2470 of file vhdldocgen.cpp.

2471{ return mdef->getVhdlSpecifiers()==VhdlSpecifier::TYPE; }

References MemberDef::getVhdlSpecifiers(), and TYPE.

Referenced by writeTagFile().

◆ parseForBinding()

QCString VhdlDocGen::parseForBinding ( QCString & entity,
QCString & arch )
static

Definition at line 2102 of file vhdldocgen.cpp.

2103{
2104 static const reg::Ex exp(R"([()\s])");
2105
2106 auto ql = split(entity.str(),exp);
2107
2108 if (findIndex(ql,"open")!=-1)
2109 {
2110 return "open";
2111 }
2112
2113 if (ql.size()<2)
2114 {
2115 return "";
2116 }
2117
2118 std::string label=ql[0];
2119 entity = ql[1];
2120 int index=entity.findRev(".");
2121 if (index!=-1)
2122 {
2123 entity.remove(0,index+1);
2124 }
2125
2126 if (ql.size()==3)
2127 {
2128 arch=ql[2];
2129 }
2130 return label;
2131}
int findIndex(const StringVector &sv, const std::string &s)
find the index of a string in a vector of strings, returns -1 if the string could not be found
Definition util.cpp:6672

References findIndex(), QCString::findRev(), QCString::remove(), split(), and QCString::str().

Referenced by computeVhdlComponentRelations().

◆ parseForConfig()

QCString VhdlDocGen::parseForConfig ( QCString & entity,
QCString & arch )
static

Definition at line 2070 of file vhdldocgen.cpp.

2071{
2072 if (!entity.contains(":")) return "";
2073
2074 static const reg::Ex exp(R"([:()\s])");
2075 auto ql=split(entity.str(),exp);
2076 if (ql.size()<2)
2077 {
2078 return "";
2079 }
2080 QCString label(ql[0]);
2081 entity = ql[1];
2082 int index = entity.findRev(".");
2083 if (index!=-1)
2084 {
2085 entity.remove(0,index+1);
2086 }
2087
2088 if (ql.size()==3)
2089 {
2090 arch = ql[2];
2091 ql=split(arch.str(),exp);
2092 if (ql.size()>1) // expression
2093 {
2094 arch="";
2095 }
2096 }
2097 return label; // label
2098}
int contains(char c, bool cs=TRUE) const
Definition qcstring.cpp:148

References QCString::contains(), QCString::findRev(), QCString::remove(), split(), and QCString::str().

◆ parseFuncProto()

void VhdlDocGen::parseFuncProto ( const QCString & text,
QCString & name,
QCString & ret,
bool doc = false )
static

parses a function proto

Parameters
textfunction string
namepoints to the function name
retStores the return type
doc???

Definition at line 631 of file vhdldocgen.cpp.

632{
633 QCString s1(text);
634 QCString temp;
635
636 int index=s1.find("(");
637 if (index<0) index=0;
638 int end=s1.findRev(")");
639
640 if ((end-index)>0)
641 {
642 temp=s1.mid(index+1,(end-index-1));
643 //getFuncParams(qlist,temp);
644 }
645 if (doc)
646 {
647 name=s1.left(index);
648 name=name.stripWhiteSpace();
649 if ((end-index)>0)
650 {
651 ret="function";
652 }
653 return;
654 }
655 else
656 {
657 s1=s1.stripWhiteSpace();
658 int i=s1.find('(');
659 int s=s1.find(' ');
660 if (s==-1) s=s1.find('\t');
661 if (i==-1 || i<s)
663 else // s<i, s=start of name, i=end of name
664 s1=s1.mid(s,(i-s));
665
666 name=s1.stripWhiteSpace();
667 }
668 index=s1.findRev("return",-1,FALSE);
669 if (index !=-1)
670 {
671 ret=s1.mid(index+6,s1.length());
672 ret=ret.stripWhiteSpace();
674 }
675}
static bool deleteCharRev(QCString &s, char c)
DirIterator end(const DirIterator &) noexcept
Definition dir.cpp:175

References deleteCharRev(), end(), FALSE, QCString::find(), QCString::findRev(), getIndexWord(), QCString::left(), QCString::length(), QCString::mid(), and QCString::stripWhiteSpace().

◆ parseUCF()

void VhdlDocGen::parseUCF ( const QCString & input,
Entry * entity,
const QCString & f,
bool vendor )
static

Definition at line 1928 of file vhdldocgen.cpp.

1929{
1930 QCString ucFile(input);
1931 int lineNo=0;
1932 QCString comment("#!");
1933 QCString brief;
1934
1935 while (!ucFile.isEmpty())
1936 {
1937 int i=ucFile.find("\n");
1938 if (i<0) break;
1939 lineNo++;
1940 QCString temp=ucFile.left(i);
1941 temp=temp.stripWhiteSpace();
1942 bool bb=temp.stripPrefix("//");
1943
1944 if (!temp.isEmpty())
1945 {
1946 if (temp.stripPrefix(comment) )
1947 {
1948 brief+=temp;
1949 brief.append("\\n");
1950 }
1951 else if (!temp.stripPrefix("#") && !bb)
1952 {
1953 if (altera)
1954 {
1955 int in=temp.find("-name");
1956 if (in>0)
1957 {
1958 temp=temp.remove(0,in+5);
1959 }
1960
1961 temp.stripPrefix("set_location_assignment");
1962
1963 initUCF(entity,QCString(),temp,lineNo,fileName,brief);
1964 }
1965 else
1966 {
1967 static const reg::Ex ee(R"([\s=])");
1968 int in=findIndex(temp.str(),ee);
1969 if (in<0) in=0;
1970 QCString ff=temp.left(in);
1971 temp.stripPrefix(ff);
1972 ff.append("#");
1973 if (!temp.isEmpty())
1974 {
1975 initUCF(entity,ff,temp,lineNo,fileName,brief);
1976 }
1977 }
1978 }
1979 }//temp
1980
1981 ucFile=ucFile.remove(0,i+1);
1982 }// while
1983}
static void initUCF(Entry *root, const QCString &type, QCString &qcs, int line, const QCString &fileName, QCString &brief)
const char * comment

References QCString::append(), comment, QCString::find(), findIndex(), initUCF(), QCString::isEmpty(), QCString::left(), QCString::remove(), QCString::str(), QCString::stripPrefix(), and QCString::stripWhiteSpace().

Referenced by VHDLOutlineParser::parseInput().

◆ prepareComment()

void VhdlDocGen::prepareComment ( QCString & qcs)
static

strips the "--!" prefixes of vhdl comments

Definition at line 591 of file vhdldocgen.cpp.

592{
593 qcs=qcs.stripWhiteSpace();
594 if (qcs.isEmpty()) return;
595
596 const char* sc="--!";
597 if (qcs.startsWith(sc)) qcs = qcs.mid(qstrlen(sc));
598 static const reg::Ex re(R"(\n[ \t]*--!)");
599 std::string s = qcs.str();
600 reg::Iterator iter(s,re);
601 reg::Iterator end;
602 std::string result;
603 size_t p=0;
604 size_t sl=s.length();
605 for ( ; iter!=end ; ++iter)
606 {
607 const auto &match = *iter;
608 size_t i = match.position();
609 result+="\n";
610 result+=s.substr(p,i-p);
611 p = match.position()+match.length();
612 }
613 if (p<sl)
614 {
615 result+="\n";
616 result+=s.substr(p);
617 }
618
619 qcs = result;
620 qcs=qcs.stripWhiteSpace();
621}
bool startsWith(const char *s) const
Definition qcstring.h:507
uint32_t qstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
Definition qcstring.h:58

References end(), QCString::isEmpty(), QCString::mid(), qstrlen(), QCString::startsWith(), QCString::str(), and QCString::stripWhiteSpace().

Referenced by VHDLOutlineParser::checkInlineCode(), VHDLOutlineParser::checkMultiComment(), and VHDLOutlineParser::handleCommentBlock().

◆ resetCodeVhdlParserState()

void VhdlDocGen::resetCodeVhdlParserState ( )
static

Definition at line 2442 of file vhdldocgen.cpp.

2443{
2444 std::lock_guard lock(g_vhdlMutex);
2445 g_varMap.clear();
2446 g_classList.clear();
2447 g_packages.clear();
2448}

References g_classList, g_packages, g_varMap, and g_vhdlMutex.

◆ setFlowMember()

void VhdlDocGen::setFlowMember ( const MemberDef * flowMember)
static

Definition at line 75 of file vhdldocgen.cpp.

76{
77 flowMember=mem;
78}

References flowMember.

Referenced by createFlowChart().

◆ writeClassType()

bool VhdlDocGen::writeClassType ( const ClassDef * cd,
OutputList & ol,
QCString & cname )
static

Definition at line 1809 of file vhdldocgen.cpp.

1811{
1813 cname=VhdlDocGen::getClassName(cd);
1814 ol.startBold();
1815 ol.writeString(qcs);
1816 ol.writeString(" ");
1817 ol.endBold();
1818 //ol.insertMemberAlign();
1819 return FALSE;
1820}// writeClassLink
void writeString(const QCString &text)
Definition outputlist.h:411
void startBold()
Definition outputlist.h:561
void endBold()
Definition outputlist.h:563
virtual QCString trVhdlType(VhdlSpecifier type, bool single)=0
Translator * theTranslator
Definition language.cpp:71

References OutputList::endBold(), FALSE, getClassName(), getSpecifierTypeFromClass(), OutputList::startBold(), theTranslator, TRUE, and OutputList::writeString().

◆ writeFormatString()

void VhdlDocGen::writeFormatString ( const QCString & s,
OutputList & ol,
const MemberDef * mdef )
static

writes a colored and formatted string

Definition at line 767 of file vhdldocgen.cpp.

768{
769 static const reg::Ex reg(R"([\‍[\‍]./<>:\s,;'+*|&=()\"-])");
770 QCString qcs = s;
771 qcs+=QCString(" ");// parsing the last sign
772 QCString find=qcs;
773 QCString temp=qcs;
774 char buf[2];
775 buf[1]='\0';
776
777 int j = findIndex(temp.str(),reg);
778
779 ol.startBold();
780 if (j>=0)
781 {
782 while (j>=0)
783 {
784 find=find.left(j);
785 buf[0]=temp[j];
786 const char *ss=VhdlDocGen::findKeyWord(find);
787 bool k=isNumber(find.str()); // is this a number
788 if (k)
789 {
790 ol.docify(" ");
791 startFonts(find,"vhdldigit",ol);
792 ol.docify(" ");
793 }
794 else if (j != 0 && ss)
795 {
796 startFonts(find,ss,ol);
797 }
798 else
799 {
800 if (j>0)
801 {
802 VhdlDocGen::writeStringLink(mdef,find,ol);
803 }
804 }
805 startFonts(&buf[0],"vhdlchar",ol);
806
807 QCString st=temp.remove(0,j+1);
808 find=st;
809 if (!find.isEmpty() && find.at(0)=='"')
810 {
811 int ii=find.find('"',2);
812 if (ii>1)
813 {
814 QCString com=find.left(ii+1);
815 startFonts(com,"keyword",ol);
816 temp=find.remove(0,ii+1);
817 }
818 }
819 else
820 {
821 temp=st;
822 }
823 j = findIndex(temp.str(),reg);
824 }//while
825 }//if
826 else
827 {
828 startFonts(find,"vhdlchar",ol);
829 }
830 ol.endBold();
831}// writeFormatString
void docify(const QCString &s)
Definition outputlist.h:437
static bool isNumber(const std::string &s)
static void writeStringLink(const MemberDef *mdef, QCString mem, OutputList &ol)
static const char * findKeyWord(const QCString &word)
static void startFonts(const QCString &q, const char *keyword, OutputList &ol)

References QCString::at(), OutputList::docify(), OutputList::endBold(), QCString::find(), findIndex(), findKeyWord(), QCString::isEmpty(), isNumber(), QCString::left(), QCString::remove(), OutputList::startBold(), startFonts(), QCString::str(), and writeStringLink().

Referenced by formatString(), writeFuncProcDocu(), and writeProcessProto().

◆ writeFuncProcDocu()

bool VhdlDocGen::writeFuncProcDocu ( const MemberDef * md,
OutputList & ol,
const ArgumentList & al,
bool type = false )
static

writes a function|procedure documentation to the output

Definition at line 1064 of file vhdldocgen.cpp.

1069{
1070 //bool sem=FALSE;
1071 ol.enableAll();
1072
1073 size_t index=al.size();
1074 if (index==0)
1075 {
1076 ol.docify(" ( ) ");
1077 return FALSE;
1078 }
1079 ol.endMemberDocName();
1081 //ol.startParameterName(FALSE);
1082 bool first=TRUE;
1083 for (const Argument &arg : al)
1084 {
1085 ol.startParameterType(first,"");
1086 // if (first) ol.writeChar('(');
1087 QCString attl=arg.defval;
1088
1089 //bool bGen=attl.stripPrefix("generic");
1090 //if (bGen)
1091 // VhdlDocGen::writeFormatString(QCString("generic "),ol,md);
1092
1093
1095 {
1096 startFonts(arg.defval,"keywordtype",ol);
1097 ol.docify(" ");
1098 }
1099 ol.endParameterType();
1100
1102 VhdlDocGen::writeFormatString(arg.name,ol,md);
1103
1105 {
1106 startFonts(arg.attrib,"stringliteral",ol);
1107 }
1108 else if (VhdlDocGen::isVhdlFunction(md))
1109 {
1110 startFonts(QCString("in"),"stringliteral",ol);
1111 }
1112
1113 ol.docify(" ");
1115 ol.startEmphasis();
1117 if (!VhdlDocGen::isProcess(md))
1118 {
1119 // startFonts(arg.type,"vhdlkeyword",ol);
1120 VhdlDocGen::writeFormatString(arg.type,ol,md);
1121 }
1123 ol.endEmphasis();
1125
1126 if (--index)
1127 {
1128 ol.docify(" , ");
1129 }
1130 else
1131 {
1132 // ol.docify(" ) ");
1133 ol.endParameterName();
1135 ol.endParameterExtra(true,false,true);
1136 break;
1137 }
1138 ol.endParameterName();
1140 ol.endParameterExtra(false,false,false);
1141
1142 //sem=TRUE;
1143 first=FALSE;
1144 }
1145 //ol.endParameterList();
1146 return TRUE;
1147
1148} // writeDocFunProc
size_t size() const
Definition arguments.h:100
void endParameterExtra(bool last, bool one, bool bracket)
Definition outputlist.h:694
void disable(OutputType o)
void endMemberDocName()
Definition outputlist.h:682
void startParameterExtra()
Definition outputlist.h:692
void startParameterList(bool openBracket)
Definition outputlist.h:700
void enable(OutputType o)
void endEmphasis()
Definition outputlist.h:527
void startParameterType(bool first, const QCString &key)
Definition outputlist.h:684
void endParameterName()
Definition outputlist.h:690
void startEmphasis()
Definition outputlist.h:525
void endParameterType()
Definition outputlist.h:686
void startParameterName(bool one)
Definition outputlist.h:688
void enableAll()
static bool isProcess(const MemberDef *mdef)

References OutputList::disable(), OutputList::docify(), OutputList::enable(), OutputList::enableAll(), OutputList::endEmphasis(), OutputList::endMemberDocName(), OutputList::endParameterExtra(), OutputList::endParameterName(), OutputList::endParameterType(), FALSE, isProcedure(), isProcess(), isVhdlFunction(), Man, ArgumentList::size(), OutputList::startEmphasis(), startFonts(), OutputList::startParameterExtra(), OutputList::startParameterList(), OutputList::startParameterName(), OutputList::startParameterType(), TRUE, and writeFormatString().

Referenced by writeVHDLTypeDocumentation().

◆ writeFunctionProto()

void VhdlDocGen::writeFunctionProto ( OutputList & ol,
const ArgumentList & al,
const MemberDef * mdef )
static

writes a function prototype to the output

Definition at line 960 of file vhdldocgen.cpp.

961{
962 if (!al.hasParameters()) return;
963 bool sem=FALSE;
964 size_t len=al.size();
965 ol.startBold();
966 ol.docify(" ( ");
967 ol.endBold();
968 if (len>2)
969 {
970 ol.lineBreak();
971 }
972 for (const Argument &arg : al)
973 {
974 ol.startBold();
975 QCString att=arg.defval;
976 bool bGen=att.stripPrefix("generic");
977
978 if (sem && len < 3)
979 {
980 ol.docify(" , ");
981 }
982
983 if (bGen)
984 {
985 VhdlDocGen::formatString(QCString("generic "),ol,mdef);
986 }
987 if (!att.isEmpty())
988 {
989 const char *str=VhdlDocGen::findKeyWord(att);
990 att+=" ";
991 if (str)
992 VhdlDocGen::formatString(att,ol,mdef);
993 else
994 startFonts(att,"vhdlchar",ol);
995 }
996
997 QCString nn=arg.name;
998 nn+=": ";
999 QCString ss=arg.type.stripWhiteSpace(); //.lower();
1000 QCString w=ss.stripWhiteSpace();//.upper();
1001 startFonts(nn,"vhdlchar",ol);
1002 startFonts("in ","stringliteral",ol);
1003 const char *str=VhdlDocGen::findKeyWord(ss);
1004 if (str)
1005 VhdlDocGen::formatString(w,ol,mdef);
1006 else
1007 startFonts(w,"vhdlchar",ol);
1008
1009 if (!arg.attrib.isEmpty())
1010 startFonts(arg.attrib,"vhdlchar",ol);
1011
1012 sem=TRUE;
1013 ol.endBold();
1014 if (len > 2)
1015 {
1016 ol.lineBreak();
1017 }
1018 }
1019 ol.startBold();
1020 ol.docify(" )");
1021 QCString exp=mdef->excpString();
1022 if (!exp.isEmpty())
1023 {
1024 ol.insertMemberAlign();
1025 ol.startBold();
1026 ol.docify("[ ");
1027 ol.docify(exp);
1028 ol.docify(" ]");
1029 ol.endBold();
1030 }
1031 ol.endBold();
1032}
bool hasParameters() const
Definition arguments.h:76
virtual QCString excpString() const =0
void insertMemberAlign(bool templ=FALSE)
Definition outputlist.h:517
void lineBreak(const QCString &style=QCString())
Definition outputlist.h:559
static void formatString(const QCString &, OutputList &ol, const MemberDef *)

References OutputList::docify(), OutputList::endBold(), MemberDef::excpString(), FALSE, findKeyWord(), formatString(), ArgumentList::hasParameters(), OutputList::insertMemberAlign(), QCString::isEmpty(), OutputList::lineBreak(), ArgumentList::size(), OutputList::startBold(), startFonts(), QCString::stripPrefix(), QCString::stripWhiteSpace(), and TRUE.

Referenced by writeVHDLDeclaration().

◆ writeInlineClassLink()

void VhdlDocGen::writeInlineClassLink ( const ClassDef * cd,
OutputList & ol )
static

writes an inline link form entity|package to architecture|package body and vice verca

Definition at line 463 of file vhdldocgen.cpp.

464{
465 std::vector<QCString> ql;
466 QCString nn=cd->className();
468
470
471 //type=type.lower();
472 type+=" >> ";
475
477 {
478 nn.stripPrefix("_");
479 cd=getClass(nn);
480 }
481 else if (ii==VhdlDocGen::PACKAGECLASS)
482 {
483 nn.prepend("_");
484 cd=getClass(nn);
485 }
487 {
488 StringVector qlist=split(nn.str(),"-");
489 if (qlist.size()>1)
490 {
491 nn=qlist[1];
493 }
494 }
495
496 QCString opp;
498 {
500 for (const auto &s : ql)
501 {
502 StringVector qlist=split(s.str(),"-");
503 if (qlist.size()>2)
504 {
505 QCString s1(qlist[0]);
506 QCString s2(qlist[1]);
507 s1.stripPrefix("_");
508 if (ql.size()==1) s1.clear();
509 ClassDef *cc = getClass(s);
510 if (cc)
511 {
512 VhdlDocGen::writeVhdlLink(cc,ol,type,s2,s1);
513 }
514 }
515 }
516 }
517 else
518 {
519 VhdlDocGen::writeVhdlLink(cd,ol,type,nn,opp);
520 }
521
524
525}// write
QCString & prepend(const char *s)
Definition qcstring.h:422
static void writeVhdlLink(const ClassDef *cdd, OutputList &ol, QCString &type, QCString &name, QCString &beh)
static void findAllArchitectures(std::vector< QCString > &ql, const ClassDef *cd)

References ARCHITECTURECLASS, ClassDef::className(), QCString::clear(), convert(), OutputList::disable(), OutputList::enable(), ENTITYCLASS, findAllArchitectures(), getClass(), getSpecifierTypeFromClass(), Man, PACKAGECLASS, PACKBODYCLASS, QCString::prepend(), ClassDef::protection(), RTF, split(), QCString::str(), QCString::stripPrefix(), theTranslator_vhdlType, TRUE, and writeVhdlLink().

Referenced by ClassDefImpl::writeMemberDeclarations().

◆ writePlainVHDLDeclarations()

void VhdlDocGen::writePlainVHDLDeclarations ( const MemberList * ml,
OutputList & ol,
const ClassDef * cd,
const NamespaceDef * nd,
const FileDef * fd,
const GroupDef * gd,
const ModuleDef * mod,
VhdlSpecifier specifier )
static

Definition at line 1692 of file vhdldocgen.cpp.

1696{
1697
1698 StringSet pack;
1699
1700 bool first=TRUE;
1701 for (const auto &imd : *mlist)
1702 {
1703 MemberDefMutable *md = toMemberDefMutable(imd);
1704 if (md)
1705 {
1707 if (md->isBriefSectionVisible() && (mems==specifier) && (mems!=VhdlSpecifier::LIBRARY) )
1708 {
1709 if (first) { ol.startMemberList();first=FALSE; }
1710 VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,mod,FALSE);
1711 } //if
1712 else if (md->isBriefSectionVisible() && (mems==specifier))
1713 {
1714 if (pack.find(md->name().str())==pack.end())
1715 {
1716 if (first) ol.startMemberList(),first=FALSE;
1717 VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,mod,FALSE);
1718 pack.insert(md->name().str());
1719 }
1720 } //if
1721 } //if
1722 } //for
1723 if (!first) ol.endMemberList();
1724}//plainDeclaration
virtual bool isBriefSectionVisible() const =0
void startMemberList()
Definition outputlist.h:481
void endMemberList()
Definition outputlist.h:483
static void writeVHDLDeclaration(MemberDefMutable *mdef, OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, bool inGroup)
std::set< std::string > StringSet
Definition containers.h:31
MemberDefMutable * toMemberDefMutable(Definition *d)
VhdlSpecifier
Definition types.h:730

References OutputList::endMemberList(), FALSE, MemberDef::getVhdlSpecifiers(), MemberDef::isBriefSectionVisible(), LIBRARY, Definition::name(), OutputList::startMemberList(), QCString::str(), toMemberDefMutable(), TRUE, and writeVHDLDeclaration().

Referenced by writeVHDLDeclarations().

◆ writeProcedureProto()

void VhdlDocGen::writeProcedureProto ( OutputList & ol,
const ArgumentList & al,
const MemberDef * mdef )
static

writes a procedure prototype to the output

Definition at line 905 of file vhdldocgen.cpp.

906{
907 bool sem=FALSE;
908 size_t len=al.size();
909 ol.docify("( ");
910 if (len > 2)
911 {
912 ol.lineBreak();
913 }
914 for (const Argument &arg : al)
915 {
916 ol.startBold();
917 if (sem && len <3)
918 ol.writeChar(',');
919
920 QCString nn=arg.name;
921 nn+=": ";
922
923 QCString defval = arg.defval;
924 const char *str=VhdlDocGen::findKeyWord(defval);
925 defval+=" ";
926 if (str)
927 {
928 startFonts(defval,str,ol);
929 }
930 else
931 {
932 startFonts(defval,"vhdlchar",ol); // write type (variable,constant etc.)
933 }
934
935 startFonts(nn,"vhdlchar",ol); // write name
936 if (qstricmp(arg.attrib,arg.type) != 0)
937 {
938 startFonts(arg.attrib.lower(),"stringliteral",ol); // write in|out
939 }
940 ol.docify(" ");
941 VhdlDocGen::formatString(arg.type,ol,mdef);
942 sem=TRUE;
943 ol.endBold();
944 if (len > 2)
945 {
946 ol.lineBreak();
947 ol.docify(" ");
948 }
949 }//for
950
951 ol.docify(" )");
952
953
954}
void writeChar(char c)
Definition outputlist.h:529

References OutputList::docify(), OutputList::endBold(), FALSE, findKeyWord(), formatString(), OutputList::lineBreak(), qstricmp(), ArgumentList::size(), OutputList::startBold(), startFonts(), TRUE, and OutputList::writeChar().

Referenced by writeVHDLDeclaration().

◆ writeProcessProto()

void VhdlDocGen::writeProcessProto ( OutputList & ol,
const ArgumentList & al,
const MemberDef * mdef )
static

writes a process prototype to the output

Definition at line 1038 of file vhdldocgen.cpp.

1039{
1040 if (!al.hasParameters()) return;
1041 bool sem=FALSE;
1042 ol.startBold();
1043 ol.docify(" ( ");
1044 for (const Argument &arg : al)
1045 {
1046 if (sem)
1047 {
1048 ol.docify(" , ");
1049 }
1050 QCString nn=arg.name;
1051 // startFonts(nn,"vhdlchar",ol);
1053 sem=TRUE;
1054 }
1055 ol.docify(" )");
1056 ol.endBold();
1057}

References OutputList::docify(), OutputList::endBold(), FALSE, ArgumentList::hasParameters(), OutputList::startBold(), TRUE, and writeFormatString().

Referenced by writeVHDLDeclaration().

◆ writeRecordProto()

void VhdlDocGen::writeRecordProto ( const MemberDef * mdef,
OutputList & ol,
const ArgumentList & al )
static

References flowMember.

◆ writeRecordUnit()

void VhdlDocGen::writeRecordUnit ( QCString & largs,
QCString & ltype,
OutputList & ol,
MemberDefMutable * mdef )
staticprivate

Definition at line 2274 of file vhdldocgen.cpp.

2275{
2276 int i=mdef->name().find('~');
2277 if (i>0)
2278 {
2279 //sets the real record member name
2280 mdef->setName(mdef->name().left(i));
2281 }
2282
2283 writeLink(mdef,ol);
2284 ol.startBold();
2285 ol.insertMemberAlign();
2286 if (!ltype.isEmpty())
2287 {
2288 VhdlDocGen::formatString(ltype,ol,mdef);
2289 }
2290 ol.endBold();
2291}
static void writeLink(const MemberDef *mdef, OutputList &ol)

References OutputList::endBold(), QCString::find(), formatString(), OutputList::insertMemberAlign(), QCString::isEmpty(), QCString::left(), Definition::name(), DefinitionMutable::setName(), OutputList::startBold(), and writeLink().

Referenced by writeVHDLDeclaration().

◆ writeRecUnitDocu()

void VhdlDocGen::writeRecUnitDocu ( const MemberDef * md,
OutputList & ol,
QCString largs )
staticprivate

Definition at line 2294 of file vhdldocgen.cpp.

2298{
2299
2300 StringVector ql=split(largs.str(),"#");
2301 size_t len=ql.size();
2303 bool first=TRUE;
2304
2305 for(size_t i=0;i<len;i++)
2306 {
2307 QCString n = ql[i];
2308 ol.startParameterType(first,"");
2309 ol.endParameterType();
2311 VhdlDocGen::formatString(n,ol,md);
2312 ol.endParameterName();
2314 if ((len-i)>1)
2315 {
2316 ol.endParameterExtra(false,false,false);
2317 }
2318 else
2319 {
2320 ol.endParameterExtra(true,false,true);
2321 }
2322
2323 first=FALSE;
2324 }
2325
2326}//#

References OutputList::endParameterExtra(), OutputList::endParameterName(), OutputList::endParameterType(), FALSE, formatString(), split(), OutputList::startParameterExtra(), OutputList::startParameterList(), OutputList::startParameterName(), OutputList::startParameterType(), QCString::str(), and TRUE.

Referenced by writeVHDLTypeDocumentation().

◆ writeSource()

void VhdlDocGen::writeSource ( const MemberDef * mdef,
OutputList & ol,
const QCString & cname )
static

Definition at line 1849 of file vhdldocgen.cpp.

1850{
1851 auto intf = Doxygen::parserManager->getCodeParser(".vhd");
1852 // pIntf->resetCodeParserState();
1853
1854 QCString codeFragment=mdef->documentation();
1855
1856 if (cname.isEmpty())
1857 {
1858 writeLink(mdef,ol);
1859 int fi=0;
1860 int j=0;
1861 do
1862 {
1863 fi=codeFragment.find("\n",++fi);
1864 } while(fi>=0 && j++ <3);
1865
1866 // show only the first four lines
1867 if (j==4)
1868 {
1869 codeFragment=codeFragment.left(fi);
1870 codeFragment.append("\n .... ");
1871 }
1872 }
1873
1874 codeFragment.prepend("\n");
1875 ol.pushGeneratorState();
1876 auto &codeOL = ol.codeGenerators();
1877 codeOL.startCodeFragment("DoxyCode");
1878 intf->parseCode(codeOL, // codeOutIntf
1879 QCString(), // scope
1880 codeFragment, // input
1881 SrcLangExt::VHDL, // lang
1882 Config_getBool(STRIP_CODE_COMMENTS),
1883 CodeParserOptions()
1884 .setFileDef(mdef->getFileDef())
1885 .setStartLine(mdef->getStartBodyLine())
1886 .setEndLine(mdef->getEndBodyLine())
1887 .setInlineFragment(true)
1888 .setMemberDef(mdef)
1889 );
1890
1891 codeOL.endCodeFragment("DoxyCode");
1892 ol.popGeneratorState();
1893
1894 if (cname.isEmpty()) return;
1895
1896 MemberDefMutable *mdm = toMemberDefMutable(const_cast<MemberDef*>(mdef));
1897 if (mdm)
1898 {
1899 mdm->writeSourceDef(ol);
1900 if (mdef->hasReferencesRelation()) mdm->writeSourceRefs(ol,cname);
1901 if (mdef->hasReferencedByRelation()) mdm->writeSourceReffedBy(ol,cname);
1902 }
1903}
virtual QCString documentation() const =0
virtual void writeSourceRefs(OutputList &ol, const QCString &scopeName) const =0
virtual void writeSourceDef(OutputList &ol) const =0
virtual void writeSourceReffedBy(OutputList &ol, const QCString &scopeName) const =0
virtual bool hasReferencesRelation() const =0
virtual bool hasReferencedByRelation() const =0
void startCodeFragment(const QCString &style)
Definition outputlist.h:279
const OutputCodeList & codeGenerators() const
Definition outputlist.h:358
void pushGeneratorState()
void popGeneratorState()
std::unique_ptr< CodeParserInterface > getCodeParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:254
#define Config_getBool(name)
Definition config.h:33

References QCString::append(), OutputList::codeGenerators(), Config_getBool, Definition::documentation(), QCString::find(), Definition::getEndBodyLine(), MemberDef::getFileDef(), Definition::getStartBodyLine(), MemberDef::hasReferencedByRelation(), MemberDef::hasReferencesRelation(), QCString::isEmpty(), QCString::left(), Doxygen::parserManager, OutputList::popGeneratorState(), QCString::prepend(), OutputList::pushGeneratorState(), CodeParserOptions::setEndLine(), CodeParserOptions::setInlineFragment(), CodeParserOptions::setMemberDef(), CodeParserOptions::setStartLine(), OutputCodeList::startCodeFragment(), toMemberDefMutable(), writeLink(), DefinitionMutable::writeSourceDef(), DefinitionMutable::writeSourceReffedBy(), and DefinitionMutable::writeSourceRefs().

Referenced by MemberDefImpl::writeDocumentation(), and writeVHDLDeclaration().

◆ writeStringLink()

void VhdlDocGen::writeStringLink ( const MemberDef * mdef,
QCString mem,
OutputList & ol )
staticprivate

writes a link if the string is linkable else a formatted string

Definition at line 1825 of file vhdldocgen.cpp.

1826{
1827 if (mdef)
1828 {
1829 const ClassDef *cd=mdef->getClassDef();
1830 if (cd)
1831 {
1832 QCString n=cd->name();
1833 const MemberDef* memdef=VhdlDocGen::findMember(n,mem);
1834 if (memdef && memdef->isLinkable())
1835 {
1836 ol.startBold();
1837 writeLink(memdef,ol);
1838 ol.endBold();
1839 ol.docify(" ");
1840 return;
1841 }
1842 }
1843 }
1844 startFonts(mem,"vhdlchar",ol);
1845}// found component
virtual bool isLinkable() const =0
virtual const ClassDef * getClassDef() const =0
static const MemberDef * findMember(const QCString &className, const QCString &memName)

References OutputList::docify(), OutputList::endBold(), findMember(), MemberDef::getClassDef(), Definition::isLinkable(), Definition::name(), OutputList::startBold(), startFonts(), and writeLink().

Referenced by writeFormatString().

◆ writeTagFile()

void VhdlDocGen::writeTagFile ( MemberDefMutable * mdef,
TextStream & tagFile )
static

Definition at line 1343 of file vhdldocgen.cpp.

1344{
1345 tagFile << " <member kind=\"";
1346 if (VhdlDocGen::isGeneric(mdef)) tagFile << "generic";
1347 if (VhdlDocGen::isPort(mdef)) tagFile << "port";
1348 if (VhdlDocGen::isEntity(mdef)) tagFile << "entity";
1349 if (VhdlDocGen::isComponent(mdef)) tagFile << "component";
1350 if (VhdlDocGen::isVType(mdef)) tagFile << "type";
1351 if (VhdlDocGen::isConstant(mdef)) tagFile << "constant";
1352 if (VhdlDocGen::isSubType(mdef)) tagFile << "subtype";
1353 if (VhdlDocGen::isVhdlFunction(mdef)) tagFile << "function";
1354 if (VhdlDocGen::isProcedure(mdef)) tagFile << "procedure";
1355 if (VhdlDocGen::isProcess(mdef)) tagFile << "process";
1356 if (VhdlDocGen::isSignals(mdef)) tagFile << "signal";
1357 if (VhdlDocGen::isAttribute(mdef)) tagFile << "attribute";
1358 if (VhdlDocGen::isRecord(mdef)) tagFile << "record";
1359 if (VhdlDocGen::isLibrary(mdef)) tagFile << "library";
1360 if (VhdlDocGen::isPackage(mdef)) tagFile << "package";
1361 if (VhdlDocGen::isVariable(mdef)) tagFile << "shared variable";
1362 if (VhdlDocGen::isFile(mdef)) tagFile << "file";
1363 if (VhdlDocGen::isGroup(mdef)) tagFile << "group";
1364 if (VhdlDocGen::isCompInst(mdef)) tagFile << "instantiation";
1365 if (VhdlDocGen::isAlias(mdef)) tagFile << "alias";
1366 if (VhdlDocGen::isCompInst(mdef)) tagFile << "configuration";
1367
1368 QCString fn = mdef->getOutputFileBase();
1370 tagFile << "\">\n";
1371 tagFile << " <type>" << convertToXML(mdef->typeString()) << "</type>\n";
1372 tagFile << " <name>" << convertToXML(mdef->name()) << "</name>\n";
1373 tagFile << " <anchorfile>" << convertToXML(fn) << "</anchorfile>\n";
1374 tagFile << " <anchor>" << convertToXML(mdef->anchor()) << "</anchor>\n";
1375
1377 tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "</arglist>\n";
1378 else if (VhdlDocGen::isProcedure(mdef))
1379 tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "</arglist>\n";
1380 else
1381 tagFile << " <arglist>" << convertToXML(mdef->argsString()) << "</arglist>\n";
1382
1383 mdef->writeDocAnchorsToTagFile(tagFile);
1384 tagFile << " </member>\n";
1385}
virtual QCString anchor() const =0
virtual QCString getOutputFileBase() const =0
virtual void writeDocAnchorsToTagFile(TextStream &) const =0
virtual const ArgumentList & argumentList() const =0
static bool isGroup(const MemberDef *mdef)
static QCString convertArgumentListToString(const ArgumentList &al, bool f)
static bool isConstant(const MemberDef *mdef)
static bool isAttribute(const MemberDef *mdef)
static bool isLibrary(const MemberDef *mdef)
static bool isEntity(const MemberDef *mdef)
static bool isPort(const MemberDef *mdef)
static bool isFile(const MemberDef *mdef)
static bool isSignals(const MemberDef *mdef)
static bool isVariable(const MemberDef *mdef)
static bool isVType(const MemberDef *mdef)
static bool isSubType(const MemberDef *mdef)
static bool isCompInst(const MemberDef *mdef)
static bool isRecord(const MemberDef *mdef)
static bool isComponent(const MemberDef *mdef)
static bool isGeneric(const MemberDef *mdef)
static bool isAlias(const MemberDef *mdef)
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3911
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4920

References addHtmlExtensionIfMissing(), Definition::anchor(), MemberDef::argsString(), MemberDef::argumentList(), convertArgumentListToString(), convertToXML(), FALSE, Definition::getOutputFileBase(), isAlias(), isAttribute(), isCompInst(), isComponent(), isConstant(), isEntity(), isFile(), isGeneric(), isGroup(), isLibrary(), isPackage(), isPort(), isProcedure(), isProcess(), isRecord(), isSignals(), isSubType(), isVariable(), isVhdlFunction(), isVType(), Definition::name(), TRUE, MemberDef::typeString(), and DefinitionMutable::writeDocAnchorsToTagFile().

Referenced by MemberList::writeTagFile().

◆ writeVHDLDeclaration()

void VhdlDocGen::writeVHDLDeclaration ( MemberDefMutable * mdef,
OutputList & ol,
const ClassDef * cd,
const NamespaceDef * nd,
const FileDef * fd,
const GroupDef * gd,
const ModuleDef * mod,
bool inGroup )
static

printf("startMemberItem for %s\n",qPrint(name()));

Definition at line 1389 of file vhdldocgen.cpp.

1392{
1393 const Definition *d=nullptr;
1394
1395 ASSERT(cd!=nullptr || nd!=nullptr || fd!=nullptr || gd!=nullptr || mod!=nullptr ||
1398 ); // member should belong to something
1399 if (cd) d=cd;
1400 else if (nd) d=nd;
1401 else if (fd) d=fd;
1402 else if (mod) d=mod;
1403 else if (gd) d=gd;
1404 else d=mdef;
1405
1406 // write search index info
1407 if (Doxygen::searchIndex.enabled())
1408 {
1412 }
1413
1414 QCString cname = d->name();
1415 QCString cfname = d->getOutputFileBase();
1416
1417 //HtmlHelp *htmlHelp=nullptr;
1418 // bool hasHtmlHelp = Config_getBool(GENERATE_HTML) && Config_getBool(GENERATE_HTMLHELP);
1419 // if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance();
1420
1421 // search for the last anonymous scope in the member type
1422 ClassDef *annoClassDef=mdef->getClassDefOfAnonymousType();
1423
1424 // start a new member declaration
1427 ///printf("startMemberItem for %s\n",qPrint(name()));
1431
1432 ol.startMemberItem( mdef->anchor(), memType );
1433
1434 // If there is no detailed description we need to write the anchor here.
1435 bool detailsVisible = mdef->hasDetailedDescription();
1436 if (!detailsVisible)
1437 {
1438 QCString doxyName=mdef->name();
1439 if (!cname.isEmpty()) doxyName.prepend(cname+"::");
1440 QCString doxyArgs=mdef->argsString();
1441 ol.startDoxyAnchor(cfname,cname,mdef->anchor(),doxyName,doxyArgs);
1442 ol.addLabel(cfname,mdef->anchor());
1443
1444 ol.pushGeneratorState();
1447 ol.docify("\n");
1448 ol.popGeneratorState();
1449
1450 }
1451 // *** write type
1452 /*VHDL CHANGE */
1453
1454 QCString ltype(mdef->typeString());
1455 QCString largs(mdef->argsString());
1456
1457 ClassDef *kl=nullptr;
1458 const ArgumentList &al = mdef->argumentList();
1459 QCString nn;
1460 //VhdlDocGen::adjustRecordMember(mdef);
1461 if (gd) gd=nullptr;
1462 switch (mm)
1463 {
1465 VhdlDocGen::writeSource(mdef,ol,nn);
1466 break;
1469 ol.startBold();
1470 VhdlDocGen::formatString(ltype,ol,mdef);
1471 ol.endBold();
1472 ol.insertMemberAlign();
1473 ol.docify(" ");
1474
1475 writeLink(mdef,ol);
1476 if (al.hasParameters() && mm==VhdlSpecifier::FUNCTION)
1478
1481
1482 break;
1483 case VhdlSpecifier::USE:
1484 kl=VhdlDocGen::getClass(mdef->name());
1485 if (kl && (VhdlDocGen::convert(kl->protection())==VhdlDocGen::ENTITYCLASS)) break;
1486 writeLink(mdef,ol);
1487 ol.insertMemberAlign();
1488 ol.docify(" ");
1489
1490 if (kl)
1491 {
1492 nn=kl->getOutputFileBase();
1493 ol.pushGeneratorState();
1495 ol.docify(" ");
1497 ol.startBold();
1498 ol.docify(name);
1499 name.clear();
1500 ol.endBold();
1501 name+=" <"+mdef->name()+">";
1502 ol.startEmphasis();
1503 ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),QCString(),name);
1504 ol.popGeneratorState();
1505 }
1506 break;
1508 writeLink(mdef,ol);
1509 ol.insertMemberAlign();
1510 if (largs=="context")
1511 {
1512 VhdlDocGen::writeRecordUnit(ltype,largs,ol,mdef);
1513 }
1514
1515 break;
1516
1520
1521 writeLink(mdef,ol);
1522 ol.docify(" ");
1523 if (mm==VhdlSpecifier::GENERIC)
1524 {
1525 ol.insertMemberAlign();
1526 ol.startBold();
1527 VhdlDocGen::formatString(largs,ol,mdef);
1528 ol.endBold();
1529 }
1530 else
1531 {
1532 ol.insertMemberAlignLeft(memType, false);
1533 ol.docify(" ");
1534 ol.startBold();
1535 VhdlDocGen::formatString(ltype,ol,mdef);
1536 ol.endBold();
1537 ol.insertMemberAlign();
1538 ol.docify(" ");
1539 VhdlDocGen::formatString(largs,ol,mdef);
1540 }
1541 break;
1543 writeLink(mdef,ol);
1544 ol.insertMemberAlign();
1546 break;
1552 if (VhdlDocGen::isCompInst(mdef) )
1553 {
1554 nn=largs;
1555 if(nn.stripPrefix("function") || nn.stripPrefix("package"))
1556 {
1557 VhdlDocGen::formatString(largs,ol,mdef);
1558 ol.insertMemberAlign();
1559 writeLink(mdef,ol);
1560 ol.docify(" ");
1561 VhdlDocGen::formatString(ltype,ol,mdef);
1562 break;
1563 }
1564
1565 largs.prepend("::");
1566 largs.prepend(mdef->name());
1567 ol.writeObjectLink(mdef->getReference(),
1568 cfname,
1569 mdef->anchor(),
1570 mdef->name());
1571 }
1572 else
1573 writeLink(mdef,ol);
1574
1575 ol.insertMemberAlign();
1576 ol.docify(" ");
1577 ol.startBold();
1578 ol.docify(ltype);
1579 ol.endBold();
1580 ol.docify(" ");
1581 if (VhdlDocGen::isComponent(mdef) ||
1582 VhdlDocGen::isConfig(mdef) ||
1584 {
1586 {
1587 nn=ltype;
1588 }
1589 else
1590 {
1591 nn=mdef->name();
1592 }
1593 kl=getClass(nn);
1594 if (kl)
1595 {
1596 nn=kl->getOutputFileBase();
1597 ol.pushGeneratorState();
1599 ol.startEmphasis();
1600 QCString name("<Entity ");
1602 {
1603 name+=ltype+">";
1604 }
1605 else
1606 {
1607 name+=mdef->name()+"> ";
1608 }
1609 ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),QCString(),name);
1610 ol.endEmphasis();
1611 ol.popGeneratorState();
1612 }
1613 }
1614 break;
1616 writeUCFLink(mdef,ol);
1617 break;
1626 writeLink(mdef,ol);
1627 ol.docify(" ");
1628 ol.insertMemberAlign();
1629 VhdlDocGen::formatString(ltype,ol,mdef);
1630 break;
1633 writeRecordUnit(largs,ltype,ol,mdef);
1634 break;
1635
1636 default: break;
1637 }
1638
1639 bool htmlOn = ol.isEnabled(OutputType::Html);
1640 if (htmlOn && /*Config_getBool(HTML_ALIGN_MEMBERS) &&*/ !ltype.isEmpty())
1641 {
1643 }
1644 if (!ltype.isEmpty()) ol.docify(" ");
1645
1646 if (htmlOn)
1647 {
1649 }
1650
1651 if (!detailsVisible)
1652 {
1653 ol.endDoxyAnchor(cfname,mdef->anchor());
1654 }
1655
1656 ol.endMemberItem(memType);
1657 if (!mdef->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC) /* && !annMemb */)
1658 {
1659 QCString s=mdef->briefDescription();
1660 ol.startMemberDescription(mdef->anchor(), QCString(), mm == VhdlSpecifier::PORT);
1661 ol.generateDoc(mdef->briefFile(),
1662 mdef->briefLine(),
1663 mdef->getOuterScope()?mdef->getOuterScope():d,
1664 mdef,
1665 s,
1666 DocOptions()
1667 .setIndexWords(true)
1668 .setSingleLine(true));
1669 if (detailsVisible)
1670 {
1671 ol.pushGeneratorState();
1673 ol.docify(" ");
1674 if (mdef->getGroupDef()!=nullptr && gd==nullptr) // forward link to the group
1675 {
1676 ol.startTextLink(mdef->getOutputFileBase(),mdef->anchor());
1677 }
1678 else // local link
1679 {
1680 ol.startTextLink(QCString(),mdef->anchor());
1681 }
1682 ol.endTextLink();
1683 ol.popGeneratorState();
1684 }
1686 }
1687 mdef->warnIfUndocumented();
1688
1689}// end writeVhdlDeclaration
virtual const QCString & localName() const =0
virtual int briefLine() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual QCString getReference() const =0
virtual QCString qualifiedName() const =0
virtual QCString briefFile() const =0
static SearchIndexIntf searchIndex
Definition doxygen.h:123
virtual bool hasDetailedDescription() const =0
virtual void warnIfUndocumented() const =0
virtual GroupDef * getGroupDef()=0
virtual ClassDef * getClassDefOfAnonymousType() const =0
bool isEnabled(OutputType o)
void insertMemberAlignLeft(OutputGenerator::MemberItemType typ=OutputGenerator::MemberItemType::Normal, bool templ=FALSE)
Definition outputlist.h:519
void endMemberDescription()
Definition outputlist.h:567
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:439
void startMemberDescription(const QCString &anchor, const QCString &inheritId=QCString(), bool typ=false)
Definition outputlist.h:565
void endDoxyAnchor(const QCString &fn, const QCString &anchor)
Definition outputlist.h:541
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void endTextLink()
Definition outputlist.h:444
void endMemberItem(OutputGenerator::MemberItemType type)
Definition outputlist.h:495
void addLabel(const QCString &fName, const QCString &anchor)
Definition outputlist.h:543
void disableAllBut(OutputType o)
void startDoxyAnchor(const QCString &fName, const QCString &manName, const QCString &anchor, const QCString &name, const QCString &args)
Definition outputlist.h:537
void startMemberItem(const QCString &anchor, OutputGenerator::MemberItemType type, const QCString &id=QCString())
Definition outputlist.h:493
void startTextLink(const QCString &file, const QCString &anchor)
Definition outputlist.h:442
void clear()
Definition qcstring.h:182
void addWord(const QCString &word, bool hiPriority)
void setCurrentDoc(const Definition *ctx, const QCString &anchor, bool isSourceFile)
static void writeSource(const MemberDef *mdef, OutputList &ol, const QCString &cname)
static void writeProcessProto(OutputList &ol, const ArgumentList &al, const MemberDef *)
static void writeProcedureProto(OutputList &ol, const ArgumentList &al, const MemberDef *)
static bool isConfig(const MemberDef *mdef)
static void writeFunctionProto(OutputList &ol, const ArgumentList &al, const MemberDef *)
static void writeRecordUnit(QCString &largs, QCString &ltype, OutputList &ol, MemberDefMutable *mdef)
#define ASSERT(x)
Definition qcstring.h:39
static void writeUCFLink(const MemberDef *mdef, OutputList &ol)

References OutputList::addLabel(), ALIAS, Definition::anchor(), OutputGenerator::AnonymousStart, MemberDef::argsString(), MemberDef::argumentList(), ASSERT, ATTRIBUTE, Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), QCString::clear(), COMPONENT, CONFIG, Config_getBool, CONSTANT, convert(), OutputList::disable(), OutputList::disableAllBut(), OutputList::docify(), OutputList::enable(), OutputList::endBold(), OutputList::endDoxyAnchor(), OutputList::endEmphasis(), OutputList::endMemberDescription(), OutputList::endMemberItem(), OutputList::endTextLink(), ENTITY, ENTITYCLASS, FALSE, formatString(), FUNCTION, OutputList::generateDoc(), GENERIC, getClass(), MemberDef::getClassDefOfAnonymousType(), MemberDef::getGroupDef(), Definition::getOuterScope(), Definition::getOutputFileBase(), Definition::getReference(), MemberDef::getVhdlSpecifiers(), GROUP, MemberDef::hasDetailedDescription(), ArgumentList::hasParameters(), Html, OutputList::insertMemberAlign(), OutputList::insertMemberAlignLeft(), INSTANTIATION, isCompInst(), isComponent(), isConfig(), QCString::isEmpty(), OutputList::isEnabled(), Latex, LIBRARY, Definition::localName(), Man, MISCELLANEOUS, Definition::name(), OutputGenerator::Normal, PACKAGE, OutputList::popGeneratorState(), PORT, QCString::prepend(), PROCEDURE, PROCESS, ClassDef::protection(), OutputList::pushGeneratorState(), Definition::qualifiedName(), RECORD, Doxygen::searchIndex, SHAREDVARIABLE, SIGNAL, OutputList::startBold(), OutputList::startDoxyAnchor(), OutputList::startEmphasis(), OutputList::startMemberDescription(), OutputList::startMemberItem(), OutputList::startTextLink(), QCString::stripPrefix(), SUBTYPE, OutputGenerator::Templated, theTranslator_vhdlType, TRUE, TYPE, MemberDef::typeString(), UCF_CONST, UNITS, USE, VFILE, MemberDef::warnIfUndocumented(), writeFunctionProto(), writeLink(), OutputList::writeObjectLink(), writeProcedureProto(), writeProcessProto(), writeRecordUnit(), writeSource(), and writeUCFLink().

Referenced by writePlainVHDLDeclarations().

◆ writeVHDLDeclarations()

void VhdlDocGen::writeVHDLDeclarations ( const MemberList * ml,
OutputList & ol,
const ClassDef * cd,
const NamespaceDef * nd,
const FileDef * fd,
const GroupDef * gd,
const ModuleDef * mod,
const QCString & title,
const QCString & subtitle,
bool showEnumValues,
VhdlSpecifier type )
static

Definition at line 1746 of file vhdldocgen.cpp.

1749{
1750 if (!membersHaveSpecificType(ml,type)) return;
1751
1752 if (!title.isEmpty())
1753 {
1754 ol.startMemberHeader(convertToId(title),type == VhdlSpecifier::PORT ? 3 : 2);
1755 ol.parseText(title);
1756 ol.endMemberHeader();
1757 ol.docify(" ");
1758 }
1759 if (!subtitle.isEmpty())
1760 {
1762 ol.generateDoc("[generated]",
1763 -1,
1764 nullptr,
1765 nullptr,
1766 subtitle,
1767 DocOptions()
1768 .setSingleLine(true));
1769 ol.endMemberSubtitle();
1770 } //printf("memberGroupList=%p\n",memberGroupList);
1771
1772 VhdlDocGen::writePlainVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,type);
1773
1774 int groupId=0;
1775 for (const auto &mg : ml->getMemberGroupList())
1776 {
1777 if (membersHaveSpecificType(&mg->members(),type))
1778 {
1779 //printf("mg->header=%s\n",qPrint(mg->header()));
1780 bool hasHeader=!mg->header().isEmpty();
1781 QCString groupAnchor = QCString(ml->listType().toLabel())+"-"+QCString().setNum(groupId++);
1782 ol.startMemberGroupHeader(groupAnchor,hasHeader);
1783 if (hasHeader)
1784 {
1785 ol.parseText(mg->header());
1786 }
1787 ol.endMemberGroupHeader(hasHeader);
1788 if (!mg->documentation().isEmpty())
1789 {
1790 //printf("Member group has docs!\n");
1792 ol.generateDoc("[generated]",
1793 -1,
1794 nullptr,
1795 nullptr,
1796 mg->documentation()+"\n",
1797 DocOptions());
1798 ol.endMemberGroupDocs();
1799 }
1800 ol.startMemberGroup();
1801 //printf("--- mg->writePlainDeclarations ---\n");
1802 VhdlDocGen::writePlainVHDLDeclarations(&mg->members(),ol,cd,nd,fd,gd,mod,type);
1803 ol.endMemberGroup(hasHeader);
1804 }
1805 }
1806}// writeVHDLDeclarations
MemberListType listType() const
Definition memberlist.h:130
const MemberGroupRefList & getMemberGroupList() const
Definition memberlist.h:166
constexpr const char * toLabel() const noexcept
Definition types.h:402
void endMemberGroupDocs()
Definition outputlist.h:511
void endMemberGroupHeader(bool b)
Definition outputlist.h:507
void startMemberGroup()
Definition outputlist.h:513
void endMemberGroup(bool last)
Definition outputlist.h:515
void startMemberGroupDocs()
Definition outputlist.h:509
void endMemberHeader()
Definition outputlist.h:471
void endMemberSubtitle()
Definition outputlist.h:475
void startMemberSubtitle()
Definition outputlist.h:473
void parseText(const QCString &textStr)
void startMemberGroupHeader(const QCString &id, bool b)
Definition outputlist.h:505
void startMemberHeader(const QCString &anchor, int typ=2)
Definition outputlist.h:469
static void writePlainVHDLDeclarations(const MemberList *ml, OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, VhdlSpecifier specifier)
QCString convertToId(const QCString &s)
Definition util.cpp:3871
static bool membersHaveSpecificType(const MemberList *ml, VhdlSpecifier type)

References convertToId(), OutputList::docify(), OutputList::endMemberGroup(), OutputList::endMemberGroupDocs(), OutputList::endMemberGroupHeader(), OutputList::endMemberHeader(), OutputList::endMemberSubtitle(), OutputList::generateDoc(), MemberList::getMemberGroupList(), QCString::isEmpty(), MemberList::listType(), membersHaveSpecificType(), OutputList::parseText(), PORT, QCString::setNum(), OutputList::startMemberGroup(), OutputList::startMemberGroupDocs(), OutputList::startMemberGroupHeader(), OutputList::startMemberHeader(), OutputList::startMemberSubtitle(), MemberListType::toLabel(), and writePlainVHDLDeclarations().

Referenced by writeVhdlDeclarations().

◆ writeVhdlDeclarations()

void VhdlDocGen::writeVhdlDeclarations ( const MemberList * ml,
OutputList & ol,
const GroupDef * gd,
const ClassDef * cd,
const FileDef * fd,
const NamespaceDef * nd,
const ModuleDef * mod )
static

Definition at line 1180 of file vhdldocgen.cpp.

1182{
1204
1205 // configurations must be added to global file definitions.
1208
1209}
static void writeVHDLDeclarations(const MemberList *ml, OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, const QCString &title, const QCString &subtitle, bool showEnumValues, VhdlSpecifier type)

References ALIAS, ATTRIBUTE, COMPONENT, CONFIG, CONSTANT, FALSE, FUNCTION, GENERIC, GROUP, INSTANTIATION, LIBRARY, MISCELLANEOUS, PORT, PROCEDURE, PROCESS, RECORD, SHAREDVARIABLE, SIGNAL, SUBTYPE, theTranslator_vhdlType, TRUE, TYPE, UCF_CONST, UNITS, USE, VFILE, and writeVHDLDeclarations().

Referenced by MemberList::writeDeclarations(), ClassDefImpl::writeMemberDeclarations(), FileDefImpl::writeMemberDeclarations(), and GroupDefImpl::writeMemberDeclarations().

◆ writeVhdlLink()

void VhdlDocGen::writeVhdlLink ( const ClassDef * cdd,
OutputList & ol,
QCString & type,
QCString & name,
QCString & beh )
staticprivate

Definition at line 567 of file vhdldocgen.cpp.

568{
569 if (ccd==nullptr) return;
570 ol.startBold();
571 ol.docify(type);
572 ol.endBold();
573 nn.stripPrefix("_");
574 ol.writeObjectLink(ccd->getReference(),ccd->getOutputFileBase(),QCString(),nn);
575
576 if (!behav.isEmpty())
577 {
578 behav.prepend(" ");
579 ol.startBold();
580 ol.docify(behav);
581 ol.endBold();
582 }
583
584 ol.lineBreak();
585}

References OutputList::docify(), OutputList::endBold(), Definition::getOutputFileBase(), Definition::getReference(), QCString::isEmpty(), OutputList::lineBreak(), QCString::prepend(), OutputList::startBold(), QCString::stripPrefix(), and OutputList::writeObjectLink().

Referenced by writeInlineClassLink().

◆ writeVHDLTypeDocumentation()

bool VhdlDocGen::writeVHDLTypeDocumentation ( const MemberDef * mdef,
const Definition * d,
OutputList & ol )
static

Definition at line 1259 of file vhdldocgen.cpp.

1260{
1261 const ClassDef *cd=toClassDef(d);
1262 bool hasParams = FALSE;
1263
1264 if (cd==nullptr) return hasParams;
1265
1266 QCString ttype=mdef->typeString();
1267 QCString largs=mdef->argsString();
1268
1270 {
1271 QCString nn=mdef->typeString();
1272 nn=nn.stripWhiteSpace();
1273 QCString na=cd->name();
1274 const MemberDef* memdef=VhdlDocGen::findMember(na,nn);
1275 if (memdef && memdef->isLinkable())
1276 {
1277 ol.docify(" ");
1278
1279 ol.startBold();
1280 writeLink(memdef,ol);
1281 ol.endBold();
1282 ol.docify(" ");
1283 }
1284 else
1285 {
1286 ol.docify(" ");
1287 VhdlDocGen::formatString(ttype,ol,mdef);
1288 ol.docify(" ");
1289 }
1290 ol.docify(mdef->name());
1291 hasParams = VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList());
1292 }
1293
1294
1295 if (mdef->isVariable())
1296 {
1297 if (VhdlDocGen::isConstraint(mdef))
1298 {
1299 writeLink(mdef,ol);
1300 ol.docify(" ");
1301
1302 largs=substitute(largs,"#"," ");
1303 VhdlDocGen::formatString(largs,ol,mdef);
1304 return hasParams;
1305 }
1306 else
1307 {
1308 writeLink(mdef,ol);
1310 {
1311 return hasParams;
1312 }
1313 ol.docify(" ");
1314 }
1315
1316 // QCString largs=mdef->argsString();
1317
1318 bool c=largs=="context";
1319 bool brec=largs.stripPrefix("record") ;
1320
1321 if (!brec && !c)
1322 VhdlDocGen::formatString(ttype,ol,mdef);
1323
1324 if (c || brec || largs.stripPrefix("units"))
1325 {
1326 if (c)
1327 largs=ttype;
1328 VhdlDocGen::writeRecUnitDocu(mdef,ol,largs);
1329 return hasParams;
1330 }
1331
1332 ol.docify(" ");
1333 if (VhdlDocGen::isPort(mdef) || VhdlDocGen::isGeneric(mdef))
1334 {
1335 // QCString largs=mdef->argsString();
1336 VhdlDocGen::formatString(largs,ol,mdef);
1337 ol.docify(" ");
1338 }
1339 }
1340 return hasParams;
1341}
virtual bool isVariable() const =0
static void writeRecUnitDocu(const MemberDef *md, OutputList &ol, QCString largs)
static bool isConstraint(const MemberDef *mdef)
static bool writeFuncProcDocu(const MemberDef *mdef, OutputList &ol, const ArgumentList &al, bool type=false)
ClassDef * toClassDef(Definition *d)

References MemberDef::argsString(), MemberDef::argumentList(), OutputList::docify(), OutputList::endBold(), FALSE, findMember(), formatString(), isConstraint(), isGeneric(), isLibrary(), Definition::isLinkable(), isPackage(), isPort(), isProcedure(), isProcess(), MemberDef::isVariable(), isVhdlFunction(), Definition::name(), OutputList::startBold(), QCString::stripPrefix(), QCString::stripWhiteSpace(), substitute(), toClassDef(), MemberDef::typeString(), writeFuncProcDocu(), writeLink(), and writeRecUnitDocu().

Referenced by MemberDefImpl::writeDocumentation().


The documentation for this class was generated from the following files: