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)
1670 .setIndexWords(
true)
1671 .setSingleLine(
true));
1704 for (
const auto &imd : *mlist)
1717 if (pack.find(md->
name().
str())==pack.end())
1721 pack.insert(md->
name().
str());
1731 if (ml==
nullptr)
return FALSE;
1732 for (
const auto &mdd : *ml)
1734 if (mdd->getVhdlSpecifiers()==type)
1741 if (!mg->members().empty())
1771 .setSingleLine(
true));
1783 bool hasHeader=!mg->header().isEmpty();
1791 if (!mg->documentation().isEmpty())
1799 mg->documentation()+
"\n",
1866 fi=codeFragment.
find(
"\n",++fi);
1867 }
while(fi>=0 && j++ <3);
1872 codeFragment=codeFragment.
left(fi);
1873 codeFragment.
append(
"\n .... ");
1881 intf->parseCode( codeOL,
1896 codeOL.endCodeFragment(
"DoxyCode");
1920 while((i=n.
find(
"__"))>0)
1925 while((i=n.
find(
"_1"))>0)
1942 int i=ucFile.
find(
"\n");
1960 int in=temp.
find(
"-name");
1963 temp=temp.
remove(0,in+5);
1972 static const reg::Ex ee(R
"([\s=])");
1980 initUCF(entity,ff,temp,lineNo,fileName,brief);
1986 ucFile=ucFile.
remove(0,i+1);
2016 std::shared_ptr<Entry> current = std::make_shared<Entry>();
2018 current->section=EntryType::makeVariable();
2019 current->bodyLine=line;
2020 current->fileName=fileName;
2021 current->type=
"ucf_const";
2023 current->lang= SrcLangExt::VHDL ;
2032 current->name= n+
"_";
2037 current->brief=brief;
2038 current->briefLine=line;
2039 current->briefFile=fileName;
2077 if (!entity.
contains(
":"))
return "";
2079 static const reg::Ex exp(R
"([:()\s])");
2087 int index = entity.
findRev(
".");
2090 entity.
remove(0,index+1);
2109 static const reg::Ex exp(R
"([()\s])");
2123 std::string label=ql[0];
2125 int index=entity.
findRev(
".");
2128 entity.
remove(0,index+1);
2179 if (cur->includeName==
"entity" || cur->includeName==
"component" )
2181 entity=cur->includeName+
" "+cur->type;
2184 else if (cur->includeName.isEmpty())
2209 if (ar==
nullptr)
return;
2211 if (classEntity==
nullptr)
2218 if (classEntity==cd)
return;
2220 bName=classEntity->
name();
2222 n1=classEntity->
name();
2247 Relationship::Member,
2260 mmd->setTagInfo(&tg);
2265 mmd->setLanguage(SrcLangExt::VHDL);
2267 mmd->setBriefDescription(cur->brief,cur->briefFile,cur->briefLine);
2268 mmd->setBodySegment(cur->startLine,cur->startLine,-1) ;
2269 mmd->setDocumentation(cur->doc,cur->docFile,cur->docLine);
2306 size_t len=ql.size();
2310 for(
size_t i=0;i<len;i++)
2341 err(
"Possible recursive class relation while inside {} and looking for {}\n",cd->
name(),scd->
name());
2372 for (
auto &bcd : bcl)
2378 int i = n.
find(
'(');
2381 bcd.usedName.append(
"(2)");
2387 std::string t=r.str();
2394 bcd.templSpecifiers=t;
2405 for (
const auto &md :
mdList)
2417 if (mdef==
nullptr)
return;
2442 std::shared_ptr<Entry> root = std::make_shared<Entry>();
2444 parser->parseInput(
"",codeFragment.
data(),root,
nullptr);
2514#define STARTL (FlowChart::WHILE_NO | FlowChart::IF_NO | \
2515 FlowChart::FOR_NO | FlowChart::CASE_NO | \
2516 FlowChart::LOOP_NO | WHEN_NO)
2517#define DECLN (FlowChart::WHEN_NO | \
2518 FlowChart::ELSIF_NO | FlowChart::IF_NO | \
2519 FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2520 FlowChart::CASE_NO | FlowChart::LOOP_NO )
2521#define STARTFIN (FlowChart::START_NO | FlowChart::END_NO)
2522#define LOOP (FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2523 FlowChart::LOOP_NO )
2524#define ENDCL (FlowChart::END_CASE | FlowChart::END_LOOP)
2525#define EEND (FlowChart::ENDIF_NO | FlowChart::ELSE_NO )
2526#define IFF (FlowChart::ELSIF_NO | FlowChart::IF_NO)
2527#define EXITNEXT (FlowChart::EXIT_NO | FlowChart::NEXT_NO )
2528#define EMPTY (EEND | FlowChart::ELSIF_NO)
2529#define EE (FlowChart::ELSE_NO | FlowChart::ELSIF_NO)
2530#define EMPTNODE (ENDCL | EEND | FlowChart::ELSIF_NO)
2531#define FLOWLEN (flowList.size()-1)
2563static std::map<std::string,int> g_keyMap;
2568 if (q.
length()<=80)
return;
2633 static const reg::Ex ep(R
"(\s)");
2664 for (
const auto &flowChart :
flowList)
2674 for (
size_t j=0;j<
flowList.size();j++)
2701 for (
size_t j=0;j<
flowList.size()-1;j++)
2704 int kind = flo.
type;
2739 for (
size_t j=0;j<ql.size();j++)
2746 int diff=
static_cast<int>(max-s.
length());
2755 ql.push_back(s.
str());
2758 for (
size_t j=0;j<ql.size();j++)
2777 for (uint32_t j=0;j < size-1 ;j++)
2794 for (
size_t j=0;j <
flowList.size() ;j++)
2821 t <<
"[shape=none, label=<\n";
2822 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
2823 t <<
"<TR><TD BGCOLOR=\"";
2828 t <<
" </TD></TR></TABLE>>];";
2835 for (
size_t j=0; j<size; j++)
2859 const char *p=str.
data();
2865 case '<': t <<
"<";
break;
2866 case '>': t <<
">";
break;
2867 case '&': t <<
"&";
break;
2868 case '\'': t <<
"'";
break;
2869 case '"': t <<
""";
break;
2870 case '\n': t <<
"<BR ALIGN=\"LEFT\"/>";
break;
2871 default: t << c;
break;
2912 if (!
text.isEmpty())
2919 expression=
substitute(expression,
"\"",
"\\\"");
2926 if(
text.isEmpty())
return;
2957 case IF_NO : t=
"\nif ("+
exp+
") then (yes)";
break;
2958 case ELSIF_NO: t=
"\nelseif ("+
exp+
") then (yes)";
break;
2959 case ELSE_NO: t=
"\nelse";
break;
2963 t+=
"if ("+
exp+
") then (yes)";
2966 case END_NO:
if (
text.contains(
" function")==0) t=
"\n:"+
text+
";";
2970 case FOR_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2971 case WHILE_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2972 case END_LOOP: t=
"\nendwhile";
break;
2973 case END_CASE: t=
"\nendif\n:end case;";
break;
2976 if (!endL) t+=
"\nstop";
2978 case LOOP_NO: t=
"\nwhile (infinite loop)";
break;
2981 case COMMENT_NO: t=
"\n note left \n "+flo.
label+
"\nend note \n";
break;
2982 case BEGIN_NO: t=
"\n:begin;";
break;
2983 default: assert(
false);
break;
2990 int caseCounter = 0;
2991 int whenCounter = 0;
2995 for (
size_t j=0;j<size;j++)
3010 bool ca = (caseCounter>0 && whenCounter==0);
3026 for (
const auto &baseName: baseNameVector)
3041 case IF_NO:
return "if ";
3047 case END_NO:
return "end ";
3051 case FOR_NO:
return "for ";
3057 case LOOP_NO:
return "infinite loop ";
3062 default:
return "--failure--";
3078 ov+=
"/flow_design.dot";
3080 QCString vlargs=
"-Tsvg \""+ov+
"\" "+dir ;
3084 err(
"could not create dot file\n");
3090 t <<
" digraph G { \n";
3091 t <<
"rankdir=TB \n";
3092 t <<
"concentrate=true\n";
3093 t <<
"stylesheet=\"doxygen.css\"\n";
3106 QCString fileName = ov+
"/flow_design.dot";
3110 err(
"Cannot open file {} for writing\n",fileName);
3167 g_keyMap.emplace(qq.
str(),fl.
id);
3181 t <<
" [shape=diamond,style=filled,color=\"";
3183 t <<
"\",label=\" ";
3185 if (exit) kl=fl.
text+
" ";
3202 t <<
" [shape=ellipse ,label=\""+val+
"\"]\n";
3207 t <<
"[shape=box , style=rounded label=<\n";
3208 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" >\n ";
3209 t <<
"<TR><TD BGCOLOR=\"";
3213 t <<
" </TD></TR></TABLE>>];";
3228 if (z==
static_cast<int>(q.
length())-1)
3232 t <<
"[shape=none margin=0.1, label=<\n";
3233 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
3236 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.varNode <<
"\" > ";
3240 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.textNode <<
"\" > ";
3243 t <<
" </TD></TR></TABLE>>];";
3256 auto it = g_keyMap.find(s1.
str());
3257 auto it1 = g_keyMap.find(s2.
str());
3259 assert(it!=g_keyMap.end());
3260 assert(it1!=g_keyMap.end());
3286 t <<
"edge [color=\""+col+
"\",label=\""+
label+
"\"]\n";
3288 if (bFrom) t <<
":s";
3297 size_t index=al.
size();
3298 if (index==0)
return;
3302 prev.
fill(
' ',
static_cast<int>(len)+1);
3312 attl+=arg.attrib+
" ";
3319 if (--index) attl+=
",\n";
else attl+=
"\n";
3330 for (
size_t j=index+1; j<
flowList.size(); j++)
3347 for (
size_t j=index;j>0;j--)
3370 for (
size_t j=index;j>0;j--)
3378 err(
"could not find label: '{}'\n",
label);
3384 for (
size_t j=index+1; j<
flowList.size(); j++)
3397 for (
size_t j=index+1; j<
flowList.size(); j++)
3400 int kind = flo.
type;
3408 if (s<stamp && stamp>0)
3416 if (s<stamp && stamp>0)
3425 if (s<stamp && stamp>0)
3439 size_t start = index+1;
3444 if (elseifNode>0 && elseifNode<endifNode)
3449 if (elseNode>0 && elseNode<endifNode)
3466 for (
size_t j=0;j<size;j++)
3469 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 generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void endMemberItem(OutputGenerator::MemberItemType type)
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)
StringVector 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
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)
QCString fill(char c, int len=-1)
Fills a string with a predefined character.
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()