29#include <unordered_set>
68#define theTranslator_vhdlType theTranslator->trVhdlType
73 const std::shared_ptr<Entry> &cur);
102 codeOL.endFontClass();
127 "abs",
"access",
"after",
"alias",
"all",
"and",
"architecture",
"array",
"assert",
"assume",
"assume_guarantee",
"attribute",
128 "begin",
"block",
"body",
"buffer",
"bus",
129 "case",
"component",
"configuration",
"constant",
"context",
"cover",
130 "default",
"disconnect",
"downto",
131 "else",
"elsif",
"end",
"entity",
"exit",
132 "fairness",
"file",
"for",
"force",
"function",
133 "generate",
"generic",
"group",
"guarded",
134 "if",
"impure",
"in",
"inertial",
"inout",
"is",
135 "label",
"library",
"linkage",
"literal",
"loop",
137 "nand",
"new",
"next",
"nor",
"not",
"null",
138 "of",
"on",
"open",
"or",
"others",
"out",
139 "package",
"parameter",
"port",
"postponed",
"procedure",
"process",
"property",
"protected",
"pure",
140 "range",
"record",
"register",
"reject",
"release",
"restrict",
"restrict_guarantee",
"rem",
"report",
"rol",
"ror",
"return",
141 "select",
"sequence",
"severity",
"signal",
"shared",
"sla",
"sll",
"sra",
"srl",
"strong",
"subtype",
142 "then",
"to",
"transport",
"type",
143 "unaffected",
"units",
"until",
"use",
144 "variable",
"vmode",
"vprop",
"vunit",
145 "wait",
"when",
"while",
"with",
153 "natural",
"unsigned",
"signed",
"string",
"boolean",
"bit",
"bit_vector",
"character",
154 "std_ulogic",
"std_ulogic_vector",
"std_logic",
"std_logic_vector",
"integer",
155 "real",
"float",
"ufixed",
"sfixed",
"time",
"positive"
161 "abs",
"and",
"or",
"not",
"mod",
"xor",
"rem",
"xnor",
"ror",
"rol",
"sla",
"sll"
167 "base",
"left",
"right",
"high",
"low",
"ascending",
168 "image",
"value",
"pos",
"val",
"succ",
"pred",
"leftof",
"rightof",
"left",
"right",
"high",
"low",
169 "range",
"reverse_range",
"length",
"ascending",
"delayed",
"stable",
"quiet",
"transaction",
"event",
170 "active",
"last_event",
"last_active",
"last_value",
"driving",
"driving_value",
"simple_name",
"instance_name",
"path_name"
184 if (
word.empty())
return nullptr;
187 return "keywordflow";
190 return "keywordtype";
196 return "vhdlkeyword";
203 if (name.
isEmpty())
return nullptr;
213static std::map<std::string,const MemberDef*>
g_varMap;
215static std::map<ClassDef*,std::vector<ClassDef*> >
g_packages;
225 if (cd==
nullptr)
return nullptr;
228 if (mdef)
return mdef;
230 if (mdef)
return mdef;
258 if (mdef)
return mdef;
260 if (mdef)
return mdef;
301 for (
const auto &cdp : cList_it->second)
304 if (mdef)
return mdef;
306 if (mdef)
return mdef;
342 for (
const auto &md : *ml)
366 std::vector<ClassDef*> cList;
370 for (
const auto &md : *mem)
395 if (cdef==
nullptr)
return nullptr;
400 for (
const auto &mdef : *mem)
437 if (cd==
nullptr)
return "";
449 if (cd==
nullptr)
return "";
467 std::vector<QCString> ql;
502 for (
const auto &s : ql)
510 if (ql.size()==1) s1.
clear();
536 QCString className=citer->className();
538 if (cd != citer.get() && (pos=className.
find(
'-'))!=-1)
543 qll.push_back(className);
572 if (ccd==
nullptr)
return;
599 const char* sc=
"--!";
601 static const reg::Ex re(R
"(\n[ \t]*--!)");
602 std::string s = qcs.str();
607 size_t sl=s.length();
608 for ( ; iter!=
end ; ++iter)
610 const auto &match = *iter;
611 size_t i = match.position();
613 result+=s.substr(p,i-p);
614 p = match.position()+match.length();
639 int index=s1.
find(
"(");
640 if (index<0) index=0;
645 temp=s1.
mid(index+1,(
end-index-1));
663 if (s==-1) s=s1.
find(
'\t');
689 if (index <
static_cast<int>(ql.size()))
703 return "architecture";
707 return "package body";
758 static int stringCounter;
772 static const reg::Ex reg(R
"([\[\]./<>:\s,;'+*|&=()\"-])");
797 else if (j != 0 && ss)
814 int ii=find.
find(
'"',2);
841 static const reg::Ex regg(R
"([0-9][0-9eEfFbBcCdDaA_.#+?xXzZ-]*)");
861 size_t len = qcs.
length();
864 for (
size_t j=0;j<len;j++)
869 if (c==
'"' || c==
',' || c==
'\''|| c==
'(' || c==
')' || c==
':' || c==
'[' || c==
']' )
871 if (temp.
length()>=index && temp.
at(index-1) !=
' ')
911 size_t len=al.
size();
939 if (
qstricmp(arg.attrib,arg.type) != 0)
941 startFonts(arg.attrib.lower(),
"stringliteral",ol);
967 size_t len=al.
size();
1012 if (!arg.attrib.isEmpty())
1076 size_t index=al.
size();
1163 if (sem) argString.
append(
", ");
1166 argString+=arg.name;
1168 argString+=arg.type;
1172 argString+=arg.defval+
" ";
1173 argString+=arg.name+
" :";
1174 argString+=arg.attrib+
" ";
1175 argString+=arg.type;
1186 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::LIBRARY,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::LIBRARY);
1187 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::USE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::USE);
1188 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::FUNCTION,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::FUNCTION);
1189 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::COMPONENT,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::COMPONENT);
1190 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::CONSTANT,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::CONSTANT);
1191 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::TYPE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::TYPE);
1192 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::SUBTYPE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::SUBTYPE);
1193 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::GENERIC,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::GENERIC);
1194 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::PORT,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::PORT);
1195 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::PROCESS,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::PROCESS);
1196 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::SIGNAL,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::SIGNAL);
1197 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::ATTRIBUTE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::ATTRIBUTE);
1198 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::PROCEDURE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::PROCEDURE);
1199 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::RECORD,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::RECORD);
1200 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::UNITS,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::UNITS);
1201 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::SHAREDVARIABLE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::SHAREDVARIABLE);
1202 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::VFILE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::VFILE);
1203 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::GROUP,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::GROUP);
1204 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::INSTANTIATION,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::INSTANTIATION);
1205 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::ALIAS,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::ALIAS);
1206 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::MISCELLANEOUS,
TRUE),
QCString(),
FALSE,
VhdlSpecifier::MISCELLANEOUS);
1209 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::CONFIG,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::CONFIG);
1210 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::UCF_CONST,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::UCF_CONST);
1265 bool hasParams =
FALSE;
1267 if (cd==
nullptr)
return hasParams;
1321 bool c=largs==
"context";
1348 tagFile <<
" <member kind=\"";
1376 tagFile <<
" <anchorfile>" <<
convertToXML(fn) <<
"</anchorfile>\n";
1387 tagFile <<
" </member>\n";
1398 ASSERT(cd!=
nullptr || nd!=
nullptr || fd!=
nullptr || gd!=
nullptr || mod!=
nullptr ||
1405 else if (mod) d=mod;
1439 if (!detailsVisible)
1504 name+=
" <"+mdef->
name()+
">";
1513 if (largs==
"context")
1610 name+=mdef->
name()+
"> ";
1643 if (htmlOn && !ltype.
isEmpty())
1654 if (!detailsVisible)
1700 for (
const auto &imd : *mlist)
1713 if (pack.find(md->
name().
str())==pack.end())
1717 pack.insert(md->
name().
str());
1727 if (ml==
nullptr)
return FALSE;
1728 for (
const auto &mdd : *ml)
1730 if (mdd->getVhdlSpecifiers()==type)
1737 if (!mg->members().empty())
1774 bool hasHeader=!mg->header().isEmpty();
1782 if (!mg->documentation().isEmpty())
1853 fi=codeFragment.
find(
"\n",++fi);
1854 }
while(fi>=0 && j++ <3);
1859 codeFragment=codeFragment.
left(fi);
1860 codeFragment.
append(
"\n .... ");
1868 intf->parseCode( codeOL,
1883 codeOL.endCodeFragment(
"DoxyCode");
1907 while((i=n.
find(
"__"))>0)
1912 while((i=n.
find(
"_1"))>0)
1929 int i=ucFile.
find(
"\n");
1947 int in=temp.
find(
"-name");
1950 temp=temp.
remove(0,in+5);
1959 static const reg::Ex ee(R
"([\s=])");
1967 initUCF(entity,ff,temp,lineNo,fileName,brief);
1973 ucFile=ucFile.
remove(0,i+1);
2003 std::shared_ptr<Entry> current = std::make_shared<Entry>();
2005 current->section=EntryType::makeVariable();
2006 current->bodyLine=line;
2007 current->fileName=fileName;
2008 current->type=
"ucf_const";
2010 current->lang= SrcLangExt::VHDL ;
2019 current->name= n+
"_";
2024 current->brief=brief;
2025 current->briefLine=line;
2026 current->briefFile=fileName;
2064 if (!entity.
contains(
":"))
return "";
2066 static const reg::Ex exp(R
"([:()\s])");
2074 int index = entity.
findRev(
".");
2077 entity.
remove(0,index+1);
2096 static const reg::Ex exp(R
"([()\s])");
2110 std::string label=ql[0];
2112 int index=entity.
findRev(
".");
2115 entity.
remove(0,index+1);
2166 if (cur->includeName==
"entity" || cur->includeName==
"component" )
2168 entity=cur->includeName+
" "+cur->type;
2171 else if (cur->includeName.isEmpty())
2196 if (ar==
nullptr)
return;
2198 if (classEntity==
nullptr)
2205 if (classEntity==cd)
return;
2207 bName=classEntity->
name();
2209 n1=classEntity->
name();
2234 Relationship::Member,
2247 mmd->setTagInfo(&tg);
2252 mmd->setLanguage(SrcLangExt::VHDL);
2254 mmd->setBriefDescription(cur->brief,cur->briefFile,cur->briefLine);
2255 mmd->setBodySegment(cur->startLine,cur->startLine,-1) ;
2256 mmd->setDocumentation(cur->doc,cur->docFile,cur->docLine);
2293 size_t len=ql.size();
2297 for(
size_t i=0;i<len;i++)
2328 err(
"Possible recursive class relation while inside {} and looking for {}\n",cd->
name(),scd->
name());
2359 for (
auto &bcd : bcl)
2365 int i = n.
find(
'(');
2368 bcd.usedName.append(
"(2)");
2374 std::string t=r.str();
2381 bcd.templSpecifiers=t;
2392 for (
const auto &md :
mdList)
2404 if (mdef==
nullptr)
return;
2429 std::shared_ptr<Entry> root = std::make_shared<Entry>();
2431 parser->parseInput(
"",codeFragment.
data(),root,
nullptr);
2501#define STARTL (FlowChart::WHILE_NO | FlowChart::IF_NO | \
2502 FlowChart::FOR_NO | FlowChart::CASE_NO | \
2503 FlowChart::LOOP_NO | WHEN_NO)
2504#define DECLN (FlowChart::WHEN_NO | \
2505 FlowChart::ELSIF_NO | FlowChart::IF_NO | \
2506 FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2507 FlowChart::CASE_NO | FlowChart::LOOP_NO )
2508#define STARTFIN (FlowChart::START_NO | FlowChart::END_NO)
2509#define LOOP (FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2510 FlowChart::LOOP_NO )
2511#define ENDCL (FlowChart::END_CASE | FlowChart::END_LOOP)
2512#define EEND (FlowChart::ENDIF_NO | FlowChart::ELSE_NO )
2513#define IFF (FlowChart::ELSIF_NO | FlowChart::IF_NO)
2514#define EXITNEXT (FlowChart::EXIT_NO | FlowChart::NEXT_NO )
2515#define EMPTY (EEND | FlowChart::ELSIF_NO)
2516#define EE (FlowChart::ELSE_NO | FlowChart::ELSIF_NO)
2517#define EMPTNODE (ENDCL | EEND | FlowChart::ELSIF_NO)
2518#define FLOWLEN (flowList.size()-1)
2550static std::map<std::string,int> g_keyMap;
2555 if (q.
length()<=80)
return;
2620 static const reg::Ex ep(R
"(\s)");
2644 printf(
"\n NO: %s[%d,%d]",t.c_str(),flo.
stamp,flo.
id);
2651 for (
const auto &flowChart :
flowList)
2661 for (
size_t j=0;j<
flowList.size();j++)
2688 for (
size_t j=0;j<
flowList.size()-1;j++)
2691 int kind = flo.
type;
2726 for (
size_t j=0;j<ql.size();j++)
2733 int diff=
static_cast<int>(max-s.
length());
2742 ql.push_back(s.
str());
2745 for (
size_t j=0;j<ql.size();j++)
2764 for (uint32_t j=0;j < size-1 ;j++)
2781 for (
size_t j=0;j <
flowList.size() ;j++)
2808 t <<
"[shape=none, label=<\n";
2809 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
2810 t <<
"<TR><TD BGCOLOR=\"";
2815 t <<
" </TD></TR></TABLE>>];";
2822 for (
size_t j=0; j<size; j++)
2846 const char *p=str.
data();
2852 case '<': t <<
"<";
break;
2853 case '>': t <<
">";
break;
2854 case '&': t <<
"&";
break;
2855 case '\'': t <<
"'";
break;
2856 case '"': t <<
""";
break;
2857 case '\n': t <<
"<BR ALIGN=\"LEFT\"/>";
break;
2858 default: t << c;
break;
2899 if (!
text.isEmpty())
2906 expression=
substitute(expression,
"\"",
"\\\"");
2913 if(
text.isEmpty())
return;
2944 case IF_NO : t=
"\nif ("+
exp+
") then (yes)";
break;
2945 case ELSIF_NO: t=
"\nelseif ("+
exp+
") then (yes)";
break;
2946 case ELSE_NO: t=
"\nelse";
break;
2950 t+=
"if ("+
exp+
") then (yes)";
2953 case END_NO:
if (
text.contains(
" function")==0) t=
"\n:"+
text+
";";
2957 case FOR_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2958 case WHILE_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2959 case END_LOOP: t=
"\nendwhile";
break;
2960 case END_CASE: t=
"\nendif\n:end case;";
break;
2963 if (!endL) t+=
"\nstop";
2965 case LOOP_NO: t=
"\nwhile (infinite loop)";
break;
2968 case COMMENT_NO: t=
"\n note left \n "+flo.
label+
"\nend note \n";
break;
2969 case BEGIN_NO: t=
"\n:begin;";
break;
2970 default: assert(
false);
break;
2977 int caseCounter = 0;
2978 int whenCounter = 0;
2982 for (
size_t j=0;j<size;j++)
2997 bool ca = (caseCounter>0 && whenCounter==0);
3025 case IF_NO:
return "if ";
3031 case END_NO:
return "end ";
3035 case FOR_NO:
return "for ";
3041 case LOOP_NO:
return "infinite loop ";
3046 default:
return "--failure--";
3062 ov+=
"/flow_design.dot";
3064 QCString vlargs=
"-Tsvg \""+ov+
"\" "+dir ;
3068 err(
"could not create dot file\n");
3074 t <<
" digraph G { \n";
3075 t <<
"rankdir=TB \n";
3076 t <<
"concentrate=true\n";
3077 t <<
"stylesheet=\"doxygen.css\"\n";
3090 QCString fileName = ov+
"/flow_design.dot";
3094 err(
"Cannot open file {} for writing\n",fileName);
3151 g_keyMap.emplace(qq.
str(),fl.
id);
3165 t <<
" [shape=diamond,style=filled,color=\"";
3167 t <<
"\",label=\" ";
3169 if (exit) kl=fl.
text+
" ";
3186 t <<
" [shape=ellipse ,label=\""+val+
"\"]\n";
3191 t <<
"[shape=box , style=rounded label=<\n";
3192 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" >\n ";
3193 t <<
"<TR><TD BGCOLOR=\"";
3197 t <<
" </TD></TR></TABLE>>];";
3212 if (z==
static_cast<int>(q.
length())-1)
3216 t <<
"[shape=none margin=0.1, label=<\n";
3217 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
3220 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.varNode <<
"\" > ";
3224 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.textNode <<
"\" > ";
3227 t <<
" </TD></TR></TABLE>>];";
3240 auto it = g_keyMap.find(s1.
str());
3241 auto it1 = g_keyMap.find(s2.
str());
3243 assert(it!=g_keyMap.end());
3244 assert(it1!=g_keyMap.end());
3270 t <<
"edge [color=\""+col+
"\",label=\""+
label+
"\"]\n";
3272 if (bFrom) t <<
":s";
3281 size_t index=al.
size();
3282 if (index==0)
return;
3286 prev.
fill(
' ',
static_cast<int>(len)+1);
3296 attl+=arg.attrib+
" ";
3303 if (--index) attl+=
",\n";
else attl+=
"\n";
3314 for (
size_t j=index+1; j<
flowList.size(); j++)
3331 for (
size_t j=index;j>0;j--)
3354 for (
size_t j=index;j>0;j--)
3362 err(
"could not find label: '{}'\n",
label);
3368 for (
size_t j=index+1; j<
flowList.size(); j++)
3381 for (
size_t j=index+1; j<
flowList.size(); j++)
3384 int kind = flo.
type;
3392 if (s<stamp && stamp>0)
3400 if (s<stamp && stamp>0)
3409 if (s<stamp && stamp>0)
3423 size_t start = index+1;
3428 if (elseifNode>0 && elseifNode<endifNode)
3433 if (elseNode>0 && elseNode<endifNode)
3450 for (
size_t j=0;j<size;j++)
3453 int kind = fll.
type;
This class represents an function or template argument list.
bool hasParameters() const
A abstract class representing of a compound symbol.
virtual void updateBaseClasses(const BaseClassList &bcd)=0
Update the list of base classes to the one passed.
virtual QCString className() const =0
Returns the name of the class including outer classes, but not including namespaces.
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
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 Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual MemberList * getMemberList(MemberListType lt) const =0
Returns the members in the list identified by lt.
virtual const ClassDef * templateMaster() const =0
Returns the template master of which this class is an instance.
virtual FileDef * getFileDef() const =0
Returns the namespace this compound is in, or 0 if it has a global scope.
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
virtual void insertBaseClass(ClassDef *, const QCString &name, Protection p, Specifier s, const QCString &t=QCString())=0
virtual void insertSubClass(ClassDef *, Protection p, Specifier s, const QCString &t=QCString())=0
virtual void insertMember(MemberDef *)=0
The common base class of all entity definitions found in the sources.
virtual const QCString & localName() const =0
virtual int getEndBodyLine() const =0
virtual QCString getDefFileName() const =0
virtual bool isLinkable() const =0
virtual QCString anchor() const =0
virtual int briefLine() const =0
virtual QCString symbolName() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual QCString getReference() const =0
virtual QCString documentation() const =0
virtual QCString qualifiedName() const =0
virtual QCString briefFile() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual int getStartBodyLine() const =0
virtual const QCString & name() const =0
virtual void setName(const QCString &name)=0
virtual void writeSourceRefs(OutputList &ol, const QCString &scopeName) const =0
virtual void writeSourceDef(OutputList &ol) const =0
virtual void setLanguage(SrcLangExt lang)=0
virtual void writeSourceReffedBy(OutputList &ol, const QCString &scopeName) const =0
virtual void writeDocAnchorsToTagFile(TextStream &) const =0
virtual void setBodyDef(const FileDef *fd)=0
static ParserManager * parserManager
static ClassLinkedMap * classLinkedMap
static MemberNameLinkedMap * functionNameLinkedMap
static QCString verifiedDotPath
static SearchIndexIntf searchIndex
Represents an unstructured piece of information, about an entity found in the sources.
void moveToSubEntryAndKeep(Entry *e)
A model of a file symbol.
virtual QCString absFilePath() const =0
static size_t findPrevLoop(size_t j, int stamp, bool endif=FALSE)
static void writeEdge(TextStream &t, int fl_from, int fl_to, int i, bool bFrom=FALSE, bool bTo=FALSE)
static void printFlowTree()
static void alignFuncProc(QCString &q, const ArgumentList &al, bool isFunc)
static void startDot(TextStream &t)
static const char * getNodeType(int c)
static void codify(TextStream &t, const QCString &str)
static size_t findLabel(size_t j, const QCString &)
static void addFlowChart(int type, const QCString &text, const QCString &exp, const QCString &label=QCString())
static void delFlowList()
static size_t getNextNode(size_t index, int stamp)
static void writeFlowChart()
static void colTextNodes()
static size_t findNextLoop(size_t j, int stamp)
static void writeShape(TextStream &t, const FlowChart &fl)
static size_t getNextIfLink(const FlowChart &, size_t)
static void printNode(const FlowChart &n)
static void moveToPrevLevel()
static QCString getNodeName(int n)
static QCString convertNameToFileName()
static void alignCommentNode(TextStream &t, QCString com)
static size_t findNode(size_t index, int stamp, int type)
static void buildCommentNodes(TextStream &t)
static void printUmlTree()
static void writeFlowLinks(TextStream &t)
FlowChart(int typ, const QCString &t, const QCString &ex, const QCString &label=QCString())
static void endDot(TextStream &t)
static QCString printPlantUmlNode(const FlowChart &flo, bool, bool)
A model of a group of symbols.
A model of a class/file/namespace member symbol.
virtual QCString typeString() const =0
virtual bool hasDetailedDescription() const =0
virtual void warnIfUndocumented() const =0
virtual QCString excpString() const =0
virtual const ClassDef * getClassDef() const =0
virtual bool hasReferencesRelation() const =0
virtual GroupDef * getGroupDef()=0
virtual const FileDef * getFileDef() const =0
virtual const ArgumentList & argumentList() const =0
virtual VhdlSpecifier getVhdlSpecifiers() const =0
virtual ClassDef * getClassDefOfAnonymousType() const =0
virtual bool hasReferencedByRelation() const =0
virtual bool isBriefSectionVisible() const =0
virtual bool isVariable() const =0
virtual QCString argsString() const =0
virtual void setVhdlSpecifiers(VhdlSpecifier s)=0
virtual void setType(const QCString &t)=0
A list of MemberDef objects as shown in documentation sections.
MemberListType listType() const
const MemberGroupRefList & getMemberGroupList() const
Wrapper class for the MemberListType type.
constexpr const char * toLabel() const
An abstract interface of a namespace symbol.
void startFontClass(const QCString &c)
void startCodeFragment(const QCString &style)
Class representing a list of output generators that are written to in parallel.
bool isEnabled(OutputType o)
void writeString(const QCString &text)
void endParameterExtra(bool last, bool one, bool bracket)
void disable(OutputType o)
void insertMemberAlignLeft(OutputGenerator::MemberItemType typ=OutputGenerator::MemberItemType::Normal, bool templ=FALSE)
void startParameterExtra()
const OutputCodeList & codeGenerators() const
void startParameterList(bool openBracket)
void enable(OutputType o)
void endMemberDescription()
void endMemberGroupDocs()
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
void startMemberDescription(const QCString &anchor, const QCString &inheritId=QCString(), bool typ=false)
void endDoxyAnchor(const QCString &fn, const QCString &anchor)
void docify(const QCString &s)
void endMemberItem(OutputGenerator::MemberItemType type)
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)
void addLabel(const QCString &fName, const QCString &anchor)
void pushGeneratorState()
void insertMemberAlign(bool templ=FALSE)
void startParameterType(bool first, const QCString &key)
void disableAllBut(OutputType o)
void startDoxyAnchor(const QCString &fName, const QCString &manName, const QCString &anchor, const QCString &name, const QCString &args)
void endMemberGroupHeader()
void endMemberGroup(bool last)
void startMemberGroupDocs()
void startParameterName(bool one)
void startMemberItem(const QCString &anchor, OutputGenerator::MemberItemType type, const QCString &id=QCString())
void startMemberSubtitle()
void lineBreak(const QCString &style=QCString())
void parseText(const QCString &textStr)
void startMemberGroupHeader(const QCString &id, bool b)
void startTextLink(const QCString &file, const QCString &anchor)
void startMemberHeader(const QCString &anchor, int typ=2)
QCString writePlantUMLSource(const QCString &outDirArg, const QCString &fileName, const QCString &content, OutputFormat format, const QCString &engine, const QCString &srcFile, int srcLine, bool inlineCode)
Write a PlantUML compatible file.
static PlantumlManager & instance()
void generatePlantUMLOutput(const QCString &baseName, const QCString &outDir, OutputFormat format)
Convert a PlantUML file to an image.
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
void fill(char c, int len=-1)
Fills a string with a predefined character.
QCString & prepend(const char *s)
int toInt(bool *ok=nullptr, int base=10) const
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool startsWith(const char *s) const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
QCString & remove(size_t index, size_t len)
void resize(size_t newlen)
const std::string & str() const
QCString & setNum(short n)
QCString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
QCString & append(char c)
QCString right(size_t len) const
int findRev(char c, int index=-1, bool cs=TRUE) const
QCString & replace(size_t index, size_t len, const char *s)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
int contains(char c, bool cs=TRUE) const
bool stripPrefix(const QCString &prefix)
Text streaming class that buffers data.
void flush()
Flushes the buffer.
static void findAllPackages(ClassDef *)
static bool writeVHDLTypeDocumentation(const MemberDef *mdef, const Definition *d, OutputList &ol)
static bool isArchitecture(const MemberDef *mdef)
static bool isGroup(const MemberDef *mdef)
static bool isSignal(const MemberDef *mdef)
static void correctMemberProperties(MemberDefMutable *md)
static bool writeClassType(const ClassDef *, OutputList &ol, QCString &cname)
static void writeFormatString(const QCString &, OutputList &ol, const MemberDef *)
static const MemberDef * getFlowMember()
static QCString convertArgumentListToString(const ArgumentList &al, bool f)
static void writeSource(const MemberDef *mdef, OutputList &ol, const QCString &cname)
static bool isProcess(const MemberDef *mdef)
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 isConstant(const MemberDef *mdef)
static QCString getClassName(const ClassDef *)
static bool isAttribute(const MemberDef *mdef)
static void createFlowChart(const MemberDef *)
static QCString getRecordNumber()
static void writeProcessProto(OutputList &ol, const ArgumentList &al, const MemberDef *)
static ClassDef * findVhdlClass(const QCString &className)
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 bool isLibrary(const MemberDef *mdef)
static QCString parseForBinding(QCString &entity, QCString &arch)
static QCString getProtectionName(int prot)
static QCString parseForConfig(QCString &entity, QCString &arch)
static bool isUnit(const MemberDef *mdef)
static void addBaseClass(ClassDef *cd, ClassDef *ent)
static void writeProcedureProto(OutputList &ol, const ArgumentList &al, const MemberDef *)
static bool isMisc(const MemberDef *mdef)
static bool isConfig(const MemberDef *mdef)
static void resetCodeVhdlParserState()
static bool isEntity(const MemberDef *mdef)
static QCString getProcessNumber()
static void writeInlineClassLink(const ClassDef *, OutputList &ol)
static bool isNumber(const std::string &s)
static void writeVhdlLink(const ClassDef *cdd, OutputList &ol, QCString &type, QCString &name, QCString &beh)
static bool isPort(const MemberDef *mdef)
static const MemberDef * findFunction(const QCString &name, const QCString &package)
static void writeTagFile(MemberDefMutable *mdef, TextStream &tagFile)
static void setFlowMember(const MemberDef *flowMember)
static bool isFile(const MemberDef *mdef)
static bool isSignals(const MemberDef *mdef)
static void prepareComment(QCString &)
static void writeRecUnitDocu(const MemberDef *md, OutputList &ol, QCString largs)
static bool deleteCharRev(QCString &s, char c)
static bool isVariable(const MemberDef *mdef)
static bool isVhdlFunction(const MemberDef *mdef)
static bool isVType(const MemberDef *mdef)
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 writeFunctionProto(OutputList &ol, const ArgumentList &al, const MemberDef *)
static void findAllArchitectures(std::vector< QCString > &ql, const ClassDef *cd)
static void parseFuncProto(const QCString &text, QCString &name, QCString &ret, bool doc=false)
static ClassDef * getClass(const QCString &name)
static void writeVhdlDeclarations(const MemberList *, OutputList &, const GroupDef *, const ClassDef *, const FileDef *, const NamespaceDef *, const ModuleDef *)
static void formatString(const QCString &, OutputList &ol, const MemberDef *)
static const ClassDef * findArchitecture(const ClassDef *cd)
static VhdlClasses convert(Protection prot)
static bool isSubType(const MemberDef *mdef)
static const MemberDef * findMember(const QCString &className, const QCString &memName)
static bool isPackageBody(const MemberDef *mdef)
static void computeVhdlComponentRelations()
static bool isCompInst(const MemberDef *mdef)
static void writeStringLink(const MemberDef *mdef, QCString mem, OutputList &ol)
static bool isRecord(const MemberDef *mdef)
static void parseUCF(const QCString &input, Entry *entity, const QCString &f, bool vendor)
static bool isSubClass(ClassDef *cd, ClassDef *scd, bool followInstances, int level)
static bool isPackage(const MemberDef *mdef)
static void writeRecordUnit(QCString &largs, QCString <ype, OutputList &ol, MemberDefMutable *mdef)
static QCString convertFileNameToClassName(const QCString &name)
static bool isComponent(const MemberDef *mdef)
static QCString getClassTitle(const ClassDef *)
static ClassDef * getPackageName(const QCString &name)
static bool isConstraint(const MemberDef *mdef)
static QCString getIndexWord(const QCString &, int index)
static bool isGeneric(const MemberDef *mdef)
static void deleteAllChars(QCString &s, char c)
static bool isProcedure(const MemberDef *mdef)
static bool writeFuncProcDocu(const MemberDef *mdef, OutputList &ol, const ArgumentList &al, bool type=false)
static bool isAlias(const MemberDef *mdef)
static const char * findKeyWord(const QCString &word)
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)
ClassDefMutable * toClassDefMutable(Definition *d)
ClassDef * toClassDef(Definition *d)
std::vector< BaseClassDef > BaseClassList
Class representing a regular expression.
Class to iterate through matches.
#define Config_getBool(name)
#define Config_getString(name)
std::set< std::string > StringSet
std::vector< std::string > StringVector
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.
DirIterator begin(DirIterator it) noexcept
DirIterator end(const DirIterator &) noexcept
Translator * theTranslator
MemberDefMutable * toMemberDefMutable(Definition *d)
std::unique_ptr< MemberDef > createMemberDef(const QCString &defFileName, int defLine, int defColumn, const QCString &type, const QCString &name, const QCString &args, const QCString &excp, Protection prot, Specifier virt, bool stat, Relationship related, MemberType t, const ArgumentList &tal, const ArgumentList &al, const QCString &metaData)
Factory method to create a new instance of a MemberDef.
std::ofstream openOutputStream(const QCString &name, bool append=false)
int system(const QCString &command, const QCString &args, bool commandHasConsole=true)
Namespace for the regular expression functions.
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...
bool match(std::string_view str, Match &match, const Ex &re)
Matches a given string str for a match against regular expression re.
Portable versions of functions that are platform dependent.
int qstricmp(const char *s1, const char *s2)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
const char * qPrint(const char *s)
uint32_t qstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
Web server based search engine.
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...
This class contains the information about the argument of a function or template.
This struct is used to capture the tag file information for an Entry.
QCString convertToXML(const QCString &s, bool keepEntities)
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
StringVector split(const std::string &s, const std::string &delimiter)
split input string s by string delimiter delimiter.
QCString convertToId(const QCString &s)
void addHtmlExtensionIfMissing(QCString &fName)
A bunch of utility functions.
static std::vector< ClassDef * > g_classList
static void initUCF(Entry *root, const QCString &type, QCString &qcs, int line, const QCString &fileName, QCString &brief)
static const MemberDef * findMemFlow(const MemberDef *mdef)
static void writeUCFLink(const MemberDef *mdef, OutputList &ol)
static const std::unordered_set< std::string > g_vhdlKeyWordSet0
static std::vector< const MemberDef * > mdList
static std::map< std::string, const MemberDef * > g_varMap
static void startFonts(const QCString &q, const char *keyword, OutputList &ol)
const char * decisionNode
static std::map< ClassDef *, std::vector< ClassDef * > > g_packages
static const MemberDef * flowMember
std::vector< FlowChart > flowList
#define theTranslator_vhdlType
static void writeLink(const MemberDef *mdef, OutputList &ol)
static struct @262143045100337216022015277174266365223104043217 flowCol
static QCString splitString(QCString &str, char c)
static bool membersHaveSpecificType(const MemberList *ml, VhdlSpecifier type)
const char * textNodeLink
static const std::unordered_set< std::string > g_vhdlKeyWordSet2
static VhdlSpecifier getSpecifierTypeFromClass(const ClassDef *cd)
static void addInstance(ClassDefMutable *entity, ClassDefMutable *arch, ClassDefMutable *inst, const std::shared_ptr< Entry > &cur)
void alignText(QCString &q)
static int compareString(const QCString &s1, const QCString &s2)
static const std::unordered_set< std::string > g_vhdlKeyWordSet3
const char * startEndNode
static std::recursive_mutex g_vhdlMutex
static const std::unordered_set< std::string > g_vhdlKeyWordSet1
std::vector< FlowChart > flowList
const EntryList & getVhdlInstList()