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 2368 of file vhdldocgen.cpp.

2369{
2370 BaseClassList bcl = cd->baseClasses();
2371 for (auto &bcd : bcl)
2372 {
2373 ClassDef *ccd = bcd.classDef;
2374 if (ccd==ent)
2375 {
2376 QCString n = bcd.usedName;
2377 int i = n.find('(');
2378 if(i<0)
2379 {
2380 bcd.usedName.append("(2)");
2381 return;
2382 }
2383 static const reg::Ex reg(R"(\d+)");
2384 QCString s=n.left(i);
2385 QCString r=n.right(n.length()-i);
2386 std::string t=r.str();
2389 r.setNum(r.toInt()+1);
2390 reg::replace(t, reg, r.str());
2391 s.append(t);
2392 bcd.usedName=s;
2393 bcd.templSpecifiers=t;
2394 }
2395 }
2396 cd->updateBaseClasses(bcl);
2397}
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 2166 of file vhdldocgen.cpp.

2167{
2168
2169 QCString entity,arch,inst;
2170
2171 for (const auto &cur : getVhdlInstList())
2172 {
2173 if (cur->isStatic ) // was bind
2174 {
2175 continue;
2176 }
2177
2178 if (cur->includeName=="entity" || cur->includeName=="component" )
2179 {
2180 entity=cur->includeName+" "+cur->type;
2181 QCString rr=VhdlDocGen::parseForBinding(entity,arch);
2182 }
2183 else if (cur->includeName.isEmpty())
2184 {
2185 entity=cur->type;
2186 }
2187
2188 ClassDefMutable *classEntity= toClassDefMutable(VhdlDocGen::findVhdlClass(entity));
2189 inst=VhdlDocGen::getIndexWord(cur->args,0);
2190 ClassDefMutable *cd=toClassDefMutable(Doxygen::classLinkedMap->find(inst));
2191 ClassDefMutable *ar=toClassDefMutable(Doxygen::classLinkedMap->find(cur->args));
2192
2193 if (cd==nullptr)
2194 {
2195 continue;
2196 }
2197
2198 addInstance(classEntity,ar,cd,cur);
2199 }
2200
2201}
static ClassLinkedMap * classLinkedMap
Definition doxygen.h:96
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 1155 of file vhdldocgen.cpp.

1156{
1157 QCString argString;
1158 bool sem=FALSE;
1159
1160 for (const Argument &arg : al)
1161 {
1162 if (sem) argString.append(", ");
1163 if (func)
1164 {
1165 argString+=arg.name;
1166 argString+=":";
1167 argString+=arg.type;
1168 }
1169 else
1170 {
1171 argString+=arg.defval+" ";
1172 argString+=arg.name+" :";
1173 argString+=arg.attrib+" ";
1174 argString+=arg.type;
1175 }
1176 sem=TRUE;
1177 }
1178 return argString;
1179}
#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 1911 of file vhdldocgen.cpp.

1912{
1913
1914 QCString n=name;
1915 n=n.remove(0,6);
1916
1917 int i=0;
1918
1919 while((i=n.find("__"))>0)
1920 {
1921 n=n.remove(i,1);
1922 }
1923
1924 while((i=n.find("_1"))>0)
1925 {
1926 n=n.replace(i,2,":");
1927 }
1928
1929 return n;
1930}
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 1213 of file vhdldocgen.cpp.

1214{
1215 if (md->argsString()=="package")
1216 {
1218 }
1219 else if (md->argsString()=="configuration")
1220 {
1222 }
1223 else if (md->typeString()=="library")
1224 {
1226 }
1227 else if (md->typeString()=="use")
1228 {
1230 }
1231 else if (md->typeString().lower()=="misc")
1232 {
1234 }
1235 else if (md->typeString().lower()=="ucf_const")
1236 {
1238 }
1239
1241 {
1242 int mm=md->name().findRev('_');
1243 if (mm>0)
1244 {
1245 md->setName(md->name().left(mm));
1246 }
1247 }
1248 else if (md->getVhdlSpecifiers()==VhdlSpecifier::TYPE)
1249 {
1250 QCString largs=md->argsString();
1251 bool bRec=largs.stripPrefix("record") ;
1252 bool bUnit=largs.stripPrefix("units") ;
1253 if (bRec || bUnit)
1254 {
1255 md->setType("");
1256 }
1257 }
1258}
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 2414 of file vhdldocgen.cpp.

2415{
2416 if (mdef==nullptr) return;
2417
2418 QCString codeFragment;
2419 const MemberDef* mm=nullptr;
2420 if ((mm=findMemFlow(mdef))!=nullptr)
2421 {
2422 // don't create the same flowchart twice
2424 return;
2425 }
2426 else
2427 {
2428 mdList.push_back(mdef);
2429 }
2430
2431 //fprintf(stderr,"\n create flow mem %s %p\n",qPrint(mdef->name()),mdef);
2432
2433 int actualStart= mdef->getStartBodyLine();
2434 int actualEnd=mdef->getEndBodyLine();
2435 const FileDef* fd=mdef->getFileDef();
2436 bool b=readCodeFragment( fd->absFilePath(), false, actualStart, actualEnd, codeFragment);
2437 if (!b) return;
2438
2439 auto parser { Doxygen::parserManager->getOutlineParser(".vhd") };
2441 std::shared_ptr<Entry> root = std::make_shared<Entry>();
2442 StringVector filesInSameTu;
2443 parser->parseInput("",codeFragment.data(),root,nullptr);
2444}
virtual int getEndBodyLine() const =0
virtual int getStartBodyLine() const =0
static ParserManager * parserManager
Definition doxygen.h:131
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:209
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 726 of file vhdldocgen.cpp.

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

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 715 of file vhdldocgen.cpp.

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

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 532 of file vhdldocgen.cpp.

533{
534 for (const auto &citer : *Doxygen::classLinkedMap)
535 {
536 QCString className=citer->className();
537 int pos = -1;
538 if (cd != citer.get() && (pos=className.find('-'))!=-1)
539 {
540 QCString postfix=className.mid(pos+1);
541 if (qstricmp(cd->className(),postfix)==0)
542 {
543 qll.push_back(className);
544 }
545 }
546 }// for
547}//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 362 of file vhdldocgen.cpp.

363{
364 std::lock_guard lock(g_vhdlMutex);
365 if (g_packages.find(cdef)!=g_packages.end()) return;
366 std::vector<ClassDef*> cList;
367 MemberList *mem=cdef->getMemberList(MemberListType::VariableMembers());
368 if (mem)
369 {
370 for (const auto &md : *mem)
371 {
372 if (VhdlDocGen::isPackage(md))
373 {
374 ClassDef* cd=VhdlDocGen::getPackageName(md->name());
375 if (cd)
376 {
377 cList.push_back(cd);
379 g_packages.emplace(cdef,cList);
380 }
381 }
382 }//for
383 }
384
385}// 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 549 of file vhdldocgen.cpp.

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

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 392 of file vhdldocgen.cpp.

393{
394 ClassDef *cdef=getClass(package);
395 if (cdef==nullptr) return nullptr;
396
397 MemberList *mem=cdef->getMemberList(MemberListType::PubMethods());
398 if (mem)
399 {
400 for (const auto &mdef : *mem)
401 {
402 QCString mname=mdef->name();
403 if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (compareString(funcname,mname)==0))
404 {
405 return mdef;
406 }//if
407 }//for
408 }//if
409 return nullptr;
410} //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().

Referenced by writeFuncProto().

◆ findKeyWord()

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

returns the color of a keyword

Definition at line 180 of file vhdldocgen.cpp.

181{
182 std::string word=kw.lower().str();
183
184 if (word.empty()) return nullptr;
185
186 if (g_vhdlKeyWordSet0.find(word)!=g_vhdlKeyWordSet0.end())
187 return "keywordflow";
188
189 if (g_vhdlKeyWordSet1.find(word)!=g_vhdlKeyWordSet1.end())
190 return "keywordtype";
191
192 if (g_vhdlKeyWordSet2.find(word)!=g_vhdlKeyWordSet2.end())
193 return "vhdllogic";
194
195 if (g_vhdlKeyWordSet3.find(word)!=g_vhdlKeyWordSet3.end())
196 return "vhdlkeyword";
197
198 return nullptr;
199}
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 writeColoredWord(), writeFormatString(), writeFunctionProto(), and writeProcedureProto().

◆ findMember()

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

Definition at line 217 of file vhdldocgen.cpp.

218{
219 std::lock_guard lock(g_vhdlMutex);
220 ClassDef *ecd=nullptr;
221 const MemberDef *mdef=nullptr;
222
223 ClassDef *cd=getClass(className);
224 //printf("VhdlDocGen::findMember(%s,%s)=%p\n",qPrint(className),qPrint(memName),cd);
225 if (cd==nullptr) return nullptr;
226
227 mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType::VariableMembers());
228 if (mdef) return mdef;
229 mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType::PubMethods());
230 if (mdef) return mdef;
231
232 // nothing found so far
233 // if we are an architecture or package body search in entity
234
237 {
238 Definition *d = cd->getOuterScope();
239 // searching upper/lower case names
240
241 QCString tt=d->name();
242 ecd =getClass(tt);
243 if (!ecd)
244 {
245 tt=tt.upper();
246 ecd =getClass(tt);
247 }
248 if (!ecd)
249 {
250 tt=tt.lower();
251 ecd =getClass(tt);
252 }
253
254 if (ecd) //d && d->definitionType()==Definition::TypeClass)
255 {
256 //ClassDef *ecd = (ClassDef*)d;
257 mdef=VhdlDocGen::findMemberDef(ecd,memName,MemberListType::VariableMembers());
258 if (mdef) return mdef;
259 mdef=VhdlDocGen::findMemberDef(cd,memName,MemberListType::PubMethods());
260 if (mdef) return mdef;
261 }
262 }
263
264
267 {
268 Definition *d = cd->getOuterScope();
269
270 QCString tt=d->name();
271 ClassDef *acd =getClass(tt);
272 if (!acd)
273 {
274 tt=tt.upper();
275 acd =getClass(tt);
276 }
277 if (!acd)
278 {
279 tt=tt.lower();
280 acd =getClass(tt);
281 }
282 if (acd) //d && d->definitionType()==Definition::TypeClass)
283 {
284 if(g_packages.find(acd)==g_packages.end())
285 {
287 }
288 }
289 }
290 else
291 {
292 ecd=cd;
293 if (g_packages.find(ecd)==g_packages.end()) VhdlDocGen::findAllPackages(ecd);
294 }
295
296 if (ecd)
297 {
298 auto cList_it = g_packages.find(ecd);
299 if (cList_it!=g_packages.end())
300 {
301 for (const auto &cdp : cList_it->second)
302 {
303 mdef=VhdlDocGen::findMemberDef(cdp,memName,MemberListType::VariableMembers());
304 if (mdef) return mdef;
305 mdef=VhdlDocGen::findMemberDef(cdp,memName,MemberListType::PubMethods());
306 if (mdef) return mdef;
307 }
308 }
309 }
310 return nullptr;
311
312}//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 generateMemLink(), 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 318 of file vhdldocgen.cpp.

319{
320 std::lock_guard lock(g_vhdlMutex);
321 QCString keyType=cd->symbolName()+"@"+key;
322 //printf("\n %s | %s | %s",qPrint(cd->symbolName()),key.data(,),qPrint(keyType));
323
324 auto it = g_varMap.find(keyType.str());
325 if (it!=g_varMap.end())
326 {
327 return it->second;
328 }
329 if (std::find(g_classList.begin(),g_classList.end(),cd)!=g_classList.end())
330 {
331 return nullptr;
332 }
333 const MemberList *ml=cd->getMemberList(type);
335 if (!ml)
336 {
337 return nullptr;
338 }
339 //int l=ml->count();
340 // fprintf(stderr,"\n loading entity %s %s: %d",qPrint(cd->symbolName()),qPrint(keyType),l);
341
342 for (const auto &md : *ml)
343 {
344 QCString tkey=cd->symbolName()+"@"+md->name();
345 if (g_varMap.find(tkey.str())==g_varMap.end())
346 {
347 g_varMap.emplace(tkey.str(),md);
348 }
349 }
350 it=g_varMap.find(keyType.str());
351 if (it!=g_varMap.end())
352 {
353 return it->second;
354 }
355 return nullptr;
356}//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 2140 of file vhdldocgen.cpp.

2141{
2142 for (const auto &cd : *Doxygen::classLinkedMap)
2143 {
2144 if (qstricmp(className.data(),qPrint(cd->name()))==0)
2145 {
2146 return cd.get();
2147 }
2148 }
2149 return nullptr;
2150}
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 850 of file vhdldocgen.cpp.

851{
852 QCString qcs = s;
853 QCString temp;
854 qcs.stripPrefix(":");
855 qcs.stripPrefix("is");
856 qcs.stripPrefix("IS");
857 qcs.stripPrefix("of");
858 qcs.stripPrefix("OF");
859
860 size_t len = qcs.length();
861 size_t index=1;
862
863 for (size_t j=0;j<len;j++)
864 {
865 char c=qcs[j];
866 char b=c;
867 if (j>0) b=qcs[j-1];
868 if (c=='"' || c==',' || c=='\''|| c=='(' || c==')' || c==':' || c=='[' || c==']' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>'))
869 {
870 if (temp.length()>=index && temp.at(index-1) != ' ')
871 {
872 temp+=" ";
873 }
874 temp+=c;
875 temp+=" ";
876 }
877 else if (c=='=')
878 {
879 if (b==':') // := operator
880 {
881 temp.replace(index-1,1,"=");
882 temp+=" ";
883 }
884 else // = operator
885 {
886 temp+=" ";
887 temp+=c;
888 temp+=" ";
889 }
890 }
891 else
892 {
893 temp+=c;
894 }
895
896 index=temp.length();
897 }// for
898 temp=temp.stripWhiteSpace();
899 // printf("\n [%s]",qPrint(qcs));
900 VhdlDocGen::writeFormatString(temp,ol,mdef);
901}
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 201 of file vhdldocgen.cpp.

202{
203 if (name.isEmpty()) return nullptr;
204 return Doxygen::classLinkedMap->find(QCString(name).stripWhiteSpace());
205}
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(), generateMemLink(), getPackageName(), writeInlineClassLink(), and writeVHDLDeclaration().

◆ getClassName()

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

Definition at line 446 of file vhdldocgen.cpp.

447{
448 QCString temp;
449 if (cd==nullptr) return "";
450
452 {
453 temp=cd->name();
454 temp.stripPrefix("_");
455 return temp;
456 }
457
458 return substitute(cd->className(),"::",".");
459}
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 434 of file vhdldocgen.cpp.

435{
436 QCString pageTitle;
437 if (cd==nullptr) return "";
438 pageTitle=VhdlDocGen::getClassName(cd);
439 pageTitle+=" ";
441 return pageTitle;
442} // 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 683 of file vhdldocgen.cpp.

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

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

Referenced by computeVhdlComponentRelations(), and parseFuncProto().

◆ getPackageName()

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

Definition at line 207 of file vhdldocgen.cpp.

208{
209 return getClass(name);
210}

References getClass().

Referenced by findAllPackages().

◆ getProcessNumber()

QCString VhdlDocGen::getProcessNumber ( )
static

returns the next number of an anonymous process

Definition at line 755 of file vhdldocgen.cpp.

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

References QCString::append(), and qsnprintf.

◆ getProtectionName()

QCString VhdlDocGen::getProtectionName ( int prot)
static

Definition at line 697 of file vhdldocgen.cpp.

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

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 743 of file vhdldocgen.cpp.

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

References qsnprintf, and recordCounter.

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

◆ init()

void VhdlDocGen::init ( )
static

Definition at line 173 of file vhdldocgen.cpp.

174{
175}

Referenced by VHDLCodeParser::parseCode().

◆ isAlias()

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

Definition at line 2458 of file vhdldocgen.cpp.

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

References ALIAS, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile().

◆ isArchitecture()

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

Definition at line 2492 of file vhdldocgen.cpp.

References ARCHITECTURE, and MemberDef::getVhdlSpecifiers().

◆ isAttribute()

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

Definition at line 2484 of file vhdldocgen.cpp.

References ATTRIBUTE, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile().

◆ isCompInst()

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

Definition at line 2504 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 2466 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 2456 of file vhdldocgen.cpp.

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

References CONFIG, and MemberDef::getVhdlSpecifiers().

Referenced by writeVHDLDeclaration().

◆ isConstant()

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

Definition at line 2472 of file vhdldocgen.cpp.

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

References CONSTANT, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile().

◆ isConstraint()

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

Definition at line 2454 of file vhdldocgen.cpp.

References MemberDef::getVhdlSpecifiers(), and UCF_CONST.

Referenced by writeVHDLTypeDocumentation().

◆ isEntity()

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

Definition at line 2470 of file vhdldocgen.cpp.

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

References ENTITY, and MemberDef::getVhdlSpecifiers().

Referenced by writeTagFile().

◆ isFile()

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

Definition at line 2500 of file vhdldocgen.cpp.

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

References MemberDef::getVhdlSpecifiers(), and VFILE.

Referenced by writeTagFile().

◆ isGeneric()

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

Definition at line 2462 of file vhdldocgen.cpp.

2463{ 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 2502 of file vhdldocgen.cpp.

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

References MemberDef::getVhdlSpecifiers(), and GROUP.

Referenced by writeTagFile().

◆ isLibrary()

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

Definition at line 2460 of file vhdldocgen.cpp.

2461{ 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 838 of file vhdldocgen.cpp.

839{
840 static const reg::Ex regg(R"([0-9][0-9eEfFbBcCdDaA_.#+?xXzZ-]*)");
841 return reg::match(s,regg);
842}// 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(), writeFormatString(), and writeWord().

◆ isPackage()

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

Definition at line 2468 of file vhdldocgen.cpp.

2469{ 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 2496 of file vhdldocgen.cpp.

References MemberDef::getVhdlSpecifiers(), and PACKAGE_BODY.

◆ isPort()

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

Definition at line 2464 of file vhdldocgen.cpp.

2465{ 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 2490 of file vhdldocgen.cpp.

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

References MemberDef::getVhdlSpecifiers(), and RECORD.

Referenced by writeTagFile().

◆ isSignal()

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

Definition at line 2482 of file vhdldocgen.cpp.

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

References MemberDef::getVhdlSpecifiers(), and SIGNAL.

◆ isSignals()

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

Definition at line 2486 of file vhdldocgen.cpp.

2487{ 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 2334 of file vhdldocgen.cpp.

2335{
2336 bool found=FALSE;
2337 //printf("isBaseClass(cd=%s) looking for %s\n",qPrint(name()),qPrint(bcd->name()));
2338 if (level>255)
2339 {
2340 err("Possible recursive class relation while inside {} and looking for {}\n",cd->name(),scd->name());
2341 abort();
2342 }
2343
2344 for (const auto &bcd :cd->subClasses())
2345 {
2346 const ClassDef *ccd=bcd.classDef;
2347 if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster();
2348 //printf("isSubClass() subclass %s\n",qPrint(ccd->name()));
2349 if (ccd==scd)
2350 {
2351 found=true;
2352 }
2353 else
2354 {
2355 if (level <256)
2356 {
2357 level = ccd->isBaseClass(scd,followInstances);
2358 if (level>0)
2359 {
2360 found=true;
2361 }
2362 }
2363 }
2364 }
2365 return found;
2366}
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 2476 of file vhdldocgen.cpp.

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

References MemberDef::getVhdlSpecifiers(), and SUBTYPE.

Referenced by writeTagFile().

◆ isUnit()

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

Definition at line 2494 of file vhdldocgen.cpp.

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

References MemberDef::getVhdlSpecifiers(), and UNITS.

◆ isVariable()

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

Definition at line 2498 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:183

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 2474 of file vhdldocgen.cpp.

2475{ 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 2106 of file vhdldocgen.cpp.

2107{
2108 static const reg::Ex exp(R"([()\s])");
2109
2110 auto ql = split(entity.str(),exp);
2111
2112 if (findIndex(ql,"open")!=-1)
2113 {
2114 return "open";
2115 }
2116
2117 if (ql.size()<2)
2118 {
2119 return "";
2120 }
2121
2122 std::string label=ql[0];
2123 entity = ql[1];
2124 int index=entity.findRev(".");
2125 if (index!=-1)
2126 {
2127 entity.remove(0,index+1);
2128 }
2129
2130 if (ql.size()==3)
2131 {
2132 arch=ql[2];
2133 }
2134 return label;
2135}
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:6604

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 2074 of file vhdldocgen.cpp.

2075{
2076 if (!entity.contains(":")) return "";
2077
2078 static const reg::Ex exp(R"([:()\s])");
2079 auto ql=split(entity.str(),exp);
2080 if (ql.size()<2)
2081 {
2082 return "";
2083 }
2084 QCString label(ql[0]);
2085 entity = ql[1];
2086 int index = entity.findRev(".");
2087 if (index!=-1)
2088 {
2089 entity.remove(0,index+1);
2090 }
2091
2092 if (ql.size()==3)
2093 {
2094 arch = ql[2];
2095 ql=split(arch.str(),exp);
2096 if (ql.size()>1) // expression
2097 {
2098 arch="";
2099 }
2100 }
2101 return label; // label
2102}
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 633 of file vhdldocgen.cpp.

634{
635 QCString s1(text);
636 QCString temp;
637
638 int index=s1.find("(");
639 if (index<0) index=0;
640 int end=s1.findRev(")");
641
642 if ((end-index)>0)
643 {
644 temp=s1.mid(index+1,(end-index-1));
645 //getFuncParams(qlist,temp);
646 }
647 if (doc)
648 {
649 name=s1.left(index);
650 name=name.stripWhiteSpace();
651 if ((end-index)>0)
652 {
653 ret="function";
654 }
655 return;
656 }
657 else
658 {
659 s1=s1.stripWhiteSpace();
660 int i=s1.find('(');
661 int s=s1.find(' ');
662 if (s==-1) s=s1.find('\t');
663 if (i==-1 || i<s)
665 else // s<i, s=start of name, i=end of name
666 s1=s1.mid(s,(i-s));
667
668 name=s1.stripWhiteSpace();
669 }
670 index=s1.findRev("return",-1,FALSE);
671 if (index !=-1)
672 {
673 ret=s1.mid(index+6,s1.length());
674 ret=ret.stripWhiteSpace();
676 }
677}
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().

Referenced by writeFuncProto().

◆ parseUCF()

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

Definition at line 1932 of file vhdldocgen.cpp.

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

594{
595 qcs=qcs.stripWhiteSpace();
596 if (qcs.isEmpty()) return;
597
598 const char* sc="--!";
599 if (qcs.startsWith(sc)) qcs = qcs.mid(qstrlen(sc));
600 static const reg::Ex re(R"(\n[ \t]*--!)");
601 std::string s = qcs.str();
602 reg::Iterator iter(s,re);
603 reg::Iterator end;
604 std::string result;
605 size_t p=0;
606 size_t sl=s.length();
607 for ( ; iter!=end ; ++iter)
608 {
609 const auto &match = *iter;
610 size_t i = match.position();
611 result+="\n";
612 result+=s.substr(p,i-p);
613 p = match.position()+match.length();
614 }
615 if (p<sl)
616 {
617 result+="\n";
618 result+=s.substr(p);
619 }
620
621 qcs = result;
622 qcs=qcs.stripWhiteSpace();
623}
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 2446 of file vhdldocgen.cpp.

2447{
2448 std::lock_guard lock(g_vhdlMutex);
2449 g_varMap.clear();
2450 g_classList.clear();
2451 g_packages.clear();
2452}

References g_classList, g_packages, g_varMap, and g_vhdlMutex.

◆ setFlowMember()

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

Definition at line 77 of file vhdldocgen.cpp.

78{
79 flowMember=mem;
80}

References flowMember.

Referenced by createFlowChart().

◆ writeClassType()

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

Definition at line 1811 of file vhdldocgen.cpp.

1813{
1815 cname=VhdlDocGen::getClassName(cd);
1816 ol.startBold();
1817 ol.writeString(qcs);
1818 ol.writeString(" ");
1819 ol.endBold();
1820 //ol.insertMemberAlign();
1821 return FALSE;
1822}// 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 769 of file vhdldocgen.cpp.

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

1071{
1072 //bool sem=FALSE;
1073 ol.enableAll();
1074
1075 size_t index=al.size();
1076 if (index==0)
1077 {
1078 ol.docify(" ( ) ");
1079 return FALSE;
1080 }
1081 ol.endMemberDocName();
1083 //ol.startParameterName(FALSE);
1084 bool first=TRUE;
1085 for (const Argument &arg : al)
1086 {
1087 ol.startParameterType(first,"");
1088 // if (first) ol.writeChar('(');
1089 QCString attl=arg.defval;
1090
1091 //bool bGen=attl.stripPrefix("generic");
1092 //if (bGen)
1093 // VhdlDocGen::writeFormatString(QCString("generic "),ol,md);
1094
1095
1097 {
1098 startFonts(arg.defval,"keywordtype",ol);
1099 ol.docify(" ");
1100 }
1101 ol.endParameterType();
1102
1104 VhdlDocGen::writeFormatString(arg.name,ol,md);
1105
1107 {
1108 startFonts(arg.attrib,"stringliteral",ol);
1109 }
1110 else if (VhdlDocGen::isVhdlFunction(md))
1111 {
1112 startFonts(QCString("in"),"stringliteral",ol);
1113 }
1114
1115 ol.docify(" ");
1117 ol.startEmphasis();
1119 if (!VhdlDocGen::isProcess(md))
1120 {
1121 // startFonts(arg.type,"vhdlkeyword",ol);
1122 VhdlDocGen::writeFormatString(arg.type,ol,md);
1123 }
1125 ol.endEmphasis();
1127
1128 if (--index)
1129 {
1130 ol.docify(" , ");
1131 }
1132 else
1133 {
1134 // ol.docify(" ) ");
1135 ol.endParameterName();
1137 ol.endParameterExtra(true,false,true);
1138 break;
1139 }
1140 ol.endParameterName();
1142 ol.endParameterExtra(false,false,false);
1143
1144 //sem=TRUE;
1145 first=FALSE;
1146 }
1147 //ol.endParameterList();
1148 return TRUE;
1149
1150} // 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 962 of file vhdldocgen.cpp.

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

466{
467 std::vector<QCString> ql;
468 QCString nn=cd->className();
470
472
473 //type=type.lower();
474 type+=" >> ";
477
479 {
480 nn.stripPrefix("_");
481 cd=getClass(nn);
482 }
483 else if (ii==VhdlDocGen::PACKAGECLASS)
484 {
485 nn.prepend("_");
486 cd=getClass(nn);
487 }
489 {
490 StringVector qlist=split(nn.str(),"-");
491 if (qlist.size()>1)
492 {
493 nn=qlist[1];
495 }
496 }
497
498 QCString opp;
500 {
502 for (const auto &s : ql)
503 {
504 StringVector qlist=split(s.str(),"-");
505 if (qlist.size()>2)
506 {
507 QCString s1(qlist[0]);
508 QCString s2(qlist[1]);
509 s1.stripPrefix("_");
510 if (ql.size()==1) s1.clear();
511 ClassDef *cc = getClass(s);
512 if (cc)
513 {
514 VhdlDocGen::writeVhdlLink(cc,ol,type,s2,s1);
515 }
516 }
517 }
518 }
519 else
520 {
521 VhdlDocGen::writeVhdlLink(cd,ol,type,nn,opp);
522 }
523
526
527}// 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 1694 of file vhdldocgen.cpp.

1698{
1699
1700 StringSet pack;
1701
1702 bool first=TRUE;
1703 for (const auto &imd : *mlist)
1704 {
1705 MemberDefMutable *md = toMemberDefMutable(imd);
1706 if (md)
1707 {
1709 if (md->isBriefSectionVisible() && (mems==specifier) && (mems!=VhdlSpecifier::LIBRARY) )
1710 {
1711 if (first) { ol.startMemberList();first=FALSE; }
1712 VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,mod,FALSE);
1713 } //if
1714 else if (md->isBriefSectionVisible() && (mems==specifier))
1715 {
1716 if (pack.find(md->name().str())==pack.end())
1717 {
1718 if (first) ol.startMemberList(),first=FALSE;
1719 VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,mod,FALSE);
1720 pack.insert(md->name().str());
1721 }
1722 } //if
1723 } //if
1724 } //for
1725 if (!first) ol.endMemberList();
1726}//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 907 of file vhdldocgen.cpp.

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

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

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 2278 of file vhdldocgen.cpp.

2279{
2280 int i=mdef->name().find('~');
2281 if (i>0)
2282 {
2283 //sets the real record member name
2284 mdef->setName(mdef->name().left(i));
2285 }
2286
2287 writeLink(mdef,ol);
2288 ol.startBold();
2289 ol.insertMemberAlign();
2290 if (!ltype.isEmpty())
2291 {
2292 VhdlDocGen::formatString(ltype,ol,mdef);
2293 }
2294 ol.endBold();
2295}
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 2298 of file vhdldocgen.cpp.

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

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 1851 of file vhdldocgen.cpp.

1852{
1853 auto intf = Doxygen::parserManager->getCodeParser(".vhd");
1854 // pIntf->resetCodeParserState();
1855
1856 QCString codeFragment=mdef->documentation();
1857
1858 if (cname.isEmpty())
1859 {
1860 writeLink(mdef,ol);
1861 int fi=0;
1862 int j=0;
1863 do
1864 {
1865 fi=codeFragment.find("\n",++fi);
1866 } while(fi>=0 && j++ <3);
1867
1868 // show only the first four lines
1869 if (j==4)
1870 {
1871 codeFragment=codeFragment.left(fi);
1872 codeFragment.append("\n .... ");
1873 }
1874 }
1875
1876 codeFragment.prepend("\n");
1877 ol.pushGeneratorState();
1878 auto &codeOL = ol.codeGenerators();
1879 codeOL.startCodeFragment("DoxyCode");
1880 intf->parseCode( codeOL, // codeOutIntf
1881 QCString(), // scope
1882 codeFragment, // input
1883 SrcLangExt::VHDL, // lang
1884 Config_getBool(STRIP_CODE_COMMENTS),
1885 FALSE, // isExample
1886 QCString(), // exampleName
1887 mdef->getFileDef(), // fileDef
1888 mdef->getStartBodyLine(), // startLine
1889 mdef->getEndBodyLine(), // endLine
1890 TRUE, // inlineFragment
1891 mdef, // memberDef
1892 TRUE // show line numbers
1893 );
1894
1895 codeOL.endCodeFragment("DoxyCode");
1896 ol.popGeneratorState();
1897
1898 if (cname.isEmpty()) return;
1899
1900 MemberDefMutable *mdm = toMemberDefMutable(const_cast<MemberDef*>(mdef));
1901 if (mdm)
1902 {
1903 mdm->writeSourceDef(ol);
1904 if (mdef->hasReferencesRelation()) mdm->writeSourceRefs(ol,cname);
1905 if (mdef->hasReferencedByRelation()) mdm->writeSourceReffedBy(ol,cname);
1906 }
1907}
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:218
#define Config_getBool(name)
Definition config.h:33

References QCString::append(), OutputList::codeGenerators(), Config_getBool, Definition::documentation(), FALSE, QCString::find(), Definition::getEndBodyLine(), MemberDef::getFileDef(), Definition::getStartBodyLine(), MemberDef::hasReferencedByRelation(), MemberDef::hasReferencesRelation(), QCString::isEmpty(), QCString::left(), Doxygen::parserManager, OutputList::popGeneratorState(), QCString::prepend(), OutputList::pushGeneratorState(), OutputCodeList::startCodeFragment(), toMemberDefMutable(), TRUE, 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 1827 of file vhdldocgen.cpp.

1828{
1829 if (mdef)
1830 {
1831 const ClassDef *cd=mdef->getClassDef();
1832 if (cd)
1833 {
1834 QCString n=cd->name();
1835 const MemberDef* memdef=VhdlDocGen::findMember(n,mem);
1836 if (memdef && memdef->isLinkable())
1837 {
1838 ol.startBold();
1839 writeLink(memdef,ol);
1840 ol.endBold();
1841 ol.docify(" ");
1842 return;
1843 }
1844 }
1845 }
1846 startFonts(mem,"vhdlchar",ol);
1847}// 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 1345 of file vhdldocgen.cpp.

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

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 1391 of file vhdldocgen.cpp.

1394{
1395 const Definition *d=nullptr;
1396
1397 ASSERT(cd!=nullptr || nd!=nullptr || fd!=nullptr || gd!=nullptr || mod!=nullptr ||
1400 ); // member should belong to something
1401 if (cd) d=cd;
1402 else if (nd) d=nd;
1403 else if (fd) d=fd;
1404 else if (mod) d=mod;
1405 else if (gd) d=gd;
1406 else d=mdef;
1407
1408 // write search index info
1409 if (Doxygen::searchIndex.enabled())
1410 {
1414 }
1415
1416 QCString cname = d->name();
1417 QCString cfname = d->getOutputFileBase();
1418
1419 //HtmlHelp *htmlHelp=nullptr;
1420 // bool hasHtmlHelp = Config_getBool(GENERATE_HTML) && Config_getBool(GENERATE_HTMLHELP);
1421 // if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance();
1422
1423 // search for the last anonymous scope in the member type
1424 ClassDef *annoClassDef=mdef->getClassDefOfAnonymousType();
1425
1426 // start a new member declaration
1429 ///printf("startMemberItem for %s\n",qPrint(name()));
1433
1434 ol.startMemberItem( mdef->anchor(), memType );
1435
1436 // If there is no detailed description we need to write the anchor here.
1437 bool detailsVisible = mdef->hasDetailedDescription();
1438 if (!detailsVisible)
1439 {
1440 QCString doxyName=mdef->name();
1441 if (!cname.isEmpty()) doxyName.prepend(cname+"::");
1442 QCString doxyArgs=mdef->argsString();
1443 ol.startDoxyAnchor(cfname,cname,mdef->anchor(),doxyName,doxyArgs);
1444 ol.addLabel(cfname,mdef->anchor());
1445
1446 ol.pushGeneratorState();
1449 ol.docify("\n");
1450 ol.popGeneratorState();
1451
1452 }
1453 // *** write type
1454 /*VHDL CHANGE */
1455
1456 QCString ltype(mdef->typeString());
1457 QCString largs(mdef->argsString());
1458
1459 ClassDef *kl=nullptr;
1460 const ArgumentList &al = mdef->argumentList();
1461 QCString nn;
1462 //VhdlDocGen::adjustRecordMember(mdef);
1463 if (gd) gd=nullptr;
1464 switch (mm)
1465 {
1467 VhdlDocGen::writeSource(mdef,ol,nn);
1468 break;
1471 ol.startBold();
1472 VhdlDocGen::formatString(ltype,ol,mdef);
1473 ol.endBold();
1474 ol.insertMemberAlign();
1475 ol.docify(" ");
1476
1477 writeLink(mdef,ol);
1478 if (al.hasParameters() && mm==VhdlSpecifier::FUNCTION)
1480
1483
1484 break;
1485 case VhdlSpecifier::USE:
1486 kl=VhdlDocGen::getClass(mdef->name());
1487 if (kl && (VhdlDocGen::convert(kl->protection())==VhdlDocGen::ENTITYCLASS)) break;
1488 writeLink(mdef,ol);
1489 ol.insertMemberAlign();
1490 ol.docify(" ");
1491
1492 if (kl)
1493 {
1494 nn=kl->getOutputFileBase();
1495 ol.pushGeneratorState();
1497 ol.docify(" ");
1499 ol.startBold();
1500 ol.docify(name);
1501 name.clear();
1502 ol.endBold();
1503 name+=" <"+mdef->name()+">";
1504 ol.startEmphasis();
1505 ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),QCString(),name);
1506 ol.popGeneratorState();
1507 }
1508 break;
1510 writeLink(mdef,ol);
1511 ol.insertMemberAlign();
1512 if (largs=="context")
1513 {
1514 VhdlDocGen::writeRecordUnit(ltype,largs,ol,mdef);
1515 }
1516
1517 break;
1518
1522
1523 writeLink(mdef,ol);
1524 ol.docify(" ");
1525 if (mm==VhdlSpecifier::GENERIC)
1526 {
1527 ol.insertMemberAlign();
1528 ol.startBold();
1529 VhdlDocGen::formatString(largs,ol,mdef);
1530 ol.endBold();
1531 }
1532 else
1533 {
1534 ol.insertMemberAlignLeft(memType, false);
1535 ol.docify(" ");
1536 ol.startBold();
1537 VhdlDocGen::formatString(ltype,ol,mdef);
1538 ol.endBold();
1539 ol.insertMemberAlign();
1540 ol.docify(" ");
1541 VhdlDocGen::formatString(largs,ol,mdef);
1542 }
1543 break;
1545 writeLink(mdef,ol);
1546 ol.insertMemberAlign();
1548 break;
1554 if (VhdlDocGen::isCompInst(mdef) )
1555 {
1556 nn=largs;
1557 if(nn.stripPrefix("function") || nn.stripPrefix("package"))
1558 {
1559 VhdlDocGen::formatString(largs,ol,mdef);
1560 ol.insertMemberAlign();
1561 writeLink(mdef,ol);
1562 ol.docify(" ");
1563 VhdlDocGen::formatString(ltype,ol,mdef);
1564 break;
1565 }
1566
1567 largs.prepend("::");
1568 largs.prepend(mdef->name());
1569 ol.writeObjectLink(mdef->getReference(),
1570 cfname,
1571 mdef->anchor(),
1572 mdef->name());
1573 }
1574 else
1575 writeLink(mdef,ol);
1576
1577 ol.insertMemberAlign();
1578 ol.docify(" ");
1579 ol.startBold();
1580 ol.docify(ltype);
1581 ol.endBold();
1582 ol.docify(" ");
1583 if (VhdlDocGen::isComponent(mdef) ||
1584 VhdlDocGen::isConfig(mdef) ||
1586 {
1588 {
1589 nn=ltype;
1590 }
1591 else
1592 {
1593 nn=mdef->name();
1594 }
1595 kl=getClass(nn);
1596 if (kl)
1597 {
1598 nn=kl->getOutputFileBase();
1599 ol.pushGeneratorState();
1601 ol.startEmphasis();
1602 QCString name("<Entity ");
1604 {
1605 name+=ltype+">";
1606 }
1607 else
1608 {
1609 name+=mdef->name()+"> ";
1610 }
1611 ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),QCString(),name);
1612 ol.endEmphasis();
1613 ol.popGeneratorState();
1614 }
1615 }
1616 break;
1618 writeUCFLink(mdef,ol);
1619 break;
1628 writeLink(mdef,ol);
1629 ol.docify(" ");
1630 ol.insertMemberAlign();
1631 VhdlDocGen::formatString(ltype,ol,mdef);
1632 break;
1635 writeRecordUnit(largs,ltype,ol,mdef);
1636 break;
1637
1638 default: break;
1639 }
1640
1641 bool htmlOn = ol.isEnabled(OutputType::Html);
1642 if (htmlOn && /*Config_getBool(HTML_ALIGN_MEMBERS) &&*/ !ltype.isEmpty())
1643 {
1645 }
1646 if (!ltype.isEmpty()) ol.docify(" ");
1647
1648 if (htmlOn)
1649 {
1651 }
1652
1653 if (!detailsVisible)
1654 {
1655 ol.endDoxyAnchor(cfname,mdef->anchor());
1656 }
1657
1658 ol.endMemberItem(memType);
1659 if (!mdef->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC) /* && !annMemb */)
1660 {
1661 QCString s=mdef->briefDescription();
1662 ol.startMemberDescription(mdef->anchor(), QCString(), mm == VhdlSpecifier::PORT);
1663 ol.generateDoc(mdef->briefFile(),
1664 mdef->briefLine(),
1665 mdef->getOuterScope()?mdef->getOuterScope():d,
1666 mdef,
1667 s,
1668 DocOptions()
1669 .setIndexWords(true)
1670 .setSingleLine(true));
1671 if (detailsVisible)
1672 {
1673 ol.pushGeneratorState();
1675 ol.docify(" ");
1676 if (mdef->getGroupDef()!=nullptr && gd==nullptr) // forward link to the group
1677 {
1678 ol.startTextLink(mdef->getOutputFileBase(),mdef->anchor());
1679 }
1680 else // local link
1681 {
1682 ol.startTextLink(QCString(),mdef->anchor());
1683 }
1684 ol.endTextLink();
1685 ol.popGeneratorState();
1686 }
1688 }
1689 mdef->warnIfUndocumented();
1690
1691}// 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:124
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 1748 of file vhdldocgen.cpp.

1751{
1752 if (!membersHaveSpecificType(ml,type)) return;
1753
1754 if (!title.isEmpty())
1755 {
1756 ol.startMemberHeader(convertToId(title),type == VhdlSpecifier::PORT ? 3 : 2);
1757 ol.parseText(title);
1758 ol.endMemberHeader();
1759 ol.docify(" ");
1760 }
1761 if (!subtitle.isEmpty())
1762 {
1764 ol.generateDoc("[generated]",
1765 -1,
1766 nullptr,
1767 nullptr,
1768 subtitle,
1769 DocOptions()
1770 .setSingleLine(true));
1771 ol.endMemberSubtitle();
1772 } //printf("memberGroupList=%p\n",memberGroupList);
1773
1774 VhdlDocGen::writePlainVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,type);
1775
1776 int groupId=0;
1777 for (const auto &mg : ml->getMemberGroupList())
1778 {
1779 if (membersHaveSpecificType(&mg->members(),type))
1780 {
1781 //printf("mg->header=%s\n",qPrint(mg->header()));
1782 bool hasHeader=!mg->header().isEmpty();
1783 QCString groupAnchor = QCString(ml->listType().toLabel())+"-"+QCString().setNum(groupId++);
1784 ol.startMemberGroupHeader(groupAnchor,hasHeader);
1785 if (hasHeader)
1786 {
1787 ol.parseText(mg->header());
1788 }
1790 if (!mg->documentation().isEmpty())
1791 {
1792 //printf("Member group has docs!\n");
1794 ol.generateDoc("[generated]",
1795 -1,
1796 nullptr,
1797 nullptr,
1798 mg->documentation()+"\n",
1799 DocOptions());
1800 ol.endMemberGroupDocs();
1801 }
1802 ol.startMemberGroup();
1803 //printf("--- mg->writePlainDeclarations ---\n");
1804 VhdlDocGen::writePlainVHDLDeclarations(&mg->members(),ol,cd,nd,fd,gd,mod,type);
1805 ol.endMemberGroup(hasHeader);
1806 }
1807 }
1808}// writeVHDLDeclarations
MemberListType listType() const
Definition memberlist.h:130
const MemberGroupRefList & getMemberGroupList() const
Definition memberlist.h:165
constexpr const char * toLabel() const noexcept
Definition types.h:402
void endMemberGroupDocs()
Definition outputlist.h:511
void startMemberGroup()
Definition outputlist.h:513
void endMemberGroupHeader()
Definition outputlist.h:507
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:3814
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 1182 of file vhdldocgen.cpp.

1184{
1206
1207 // configurations must be added to global file definitions.
1210
1211}
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 569 of file vhdldocgen.cpp.

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

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 1261 of file vhdldocgen.cpp.

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