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);
557 if (ql[0]==cd->
name())
571 if (ccd==
nullptr)
return;
598 const char* sc=
"--!";
600 static const reg::Ex re(R
"(\n[ \t]*--!)");
601 std::string s = qcs.str();
606 size_t sl=s.length();
607 for ( ; iter!=
end ; ++iter)
609 const auto &match = *iter;
610 size_t i = match.position();
612 result+=s.substr(p,i-p);
613 p = match.position()+match.length();
638 int index=s1.
find(
"(");
639 if (index<0) index=0;
644 temp=s1.
mid(index+1,(
end-index-1));
662 if (s==-1) s=s1.
find(
'\t');
688 if (index <
static_cast<int>(ql.size()))
702 return "architecture";
706 return "package body";
757 static int stringCounter;
771 static const reg::Ex reg(R
"([\[\]./<>:\s,;'+*|&=()\"-])");
796 else if (j != 0 && ss)
813 int ii=find.
find(
'"',2);
840 static const reg::Ex regg(R
"([0-9][0-9eEfFbBcCdDaA_.#+?xXzZ-]*)");
860 size_t len = qcs.
length();
863 for (
size_t j=0;j<len;j++)
868 if (c==
'"' || c==
',' || c==
'\''|| c==
'(' || c==
')' || c==
':' || c==
'[' || c==
']' )
870 if (temp.
length()>=index && temp.
at(index-1) !=
' ')
910 size_t len=al.
size();
938 if (
qstricmp(arg.attrib,arg.type) != 0)
940 startFonts(arg.attrib.lower(),
"stringliteral",ol);
966 size_t len=al.
size();
1011 if (!arg.attrib.isEmpty())
1075 size_t index=al.
size();
1162 if (sem) argString.
append(
", ");
1165 argString+=arg.name;
1167 argString+=arg.type;
1171 argString+=arg.defval+
" ";
1172 argString+=arg.name+
" :";
1173 argString+=arg.attrib+
" ";
1174 argString+=arg.type;
1185 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::LIBRARY,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::LIBRARY);
1186 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::USE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::USE);
1187 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::FUNCTION,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::FUNCTION);
1188 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::COMPONENT,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::COMPONENT);
1189 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::CONSTANT,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::CONSTANT);
1190 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::TYPE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::TYPE);
1191 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::SUBTYPE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::SUBTYPE);
1192 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::GENERIC,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::GENERIC);
1193 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::PORT,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::PORT);
1194 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::PROCESS,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::PROCESS);
1195 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::SIGNAL,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::SIGNAL);
1196 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::ATTRIBUTE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::ATTRIBUTE);
1197 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::PROCEDURE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::PROCEDURE);
1198 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::RECORD,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::RECORD);
1199 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::UNITS,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::UNITS);
1200 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::SHAREDVARIABLE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::SHAREDVARIABLE);
1201 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::VFILE,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::VFILE);
1202 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::GROUP,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::GROUP);
1203 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::INSTANTIATION,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::INSTANTIATION);
1204 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::ALIAS,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::ALIAS);
1205 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::MISCELLANEOUS,
TRUE),
QCString(),
FALSE,
VhdlSpecifier::MISCELLANEOUS);
1208 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::CONFIG,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::CONFIG);
1209 VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,mod,
theTranslator_vhdlType(
VhdlSpecifier::UCF_CONST,
FALSE),
QCString(),
FALSE,
VhdlSpecifier::UCF_CONST);
1264 bool hasParams =
FALSE;
1266 if (cd==
nullptr)
return hasParams;
1320 bool c=largs==
"context";
1347 tagFile <<
" <member kind=\"";
1375 tagFile <<
" <anchorfile>" <<
convertToXML(fn) <<
"</anchorfile>\n";
1386 tagFile <<
" </member>\n";
1397 ASSERT(cd!=
nullptr || nd!=
nullptr || fd!=
nullptr || gd!=
nullptr || mod!=
nullptr ||
1404 else if (mod) d=mod;
1438 if (!detailsVisible)
1503 name+=
" <"+mdef->
name()+
">";
1512 if (largs==
"context")
1609 name+=mdef->
name()+
"> ";
1642 if (htmlOn && !ltype.
isEmpty())
1653 if (!detailsVisible)
1669 .setIndexWords(
true)
1670 .setSingleLine(
true));
1703 for (
const auto &imd : *mlist)
1716 if (pack.find(md->
name().
str())==pack.end())
1720 pack.insert(md->
name().
str());
1730 if (ml==
nullptr)
return FALSE;
1731 for (
const auto &mdd : *ml)
1733 if (mdd->getVhdlSpecifiers()==type)
1740 if (!mg->members().empty())
1770 .setSingleLine(
true));
1782 bool hasHeader=!mg->header().isEmpty();
1790 if (!mg->documentation().isEmpty())
1798 mg->documentation()+
"\n",
1865 fi=codeFragment.
find(
"\n",++fi);
1866 }
while(fi>=0 && j++ <3);
1871 codeFragment=codeFragment.
left(fi);
1872 codeFragment.
append(
"\n .... ");
1880 intf->parseCode( codeOL,
1895 codeOL.endCodeFragment(
"DoxyCode");
1919 while((i=n.
find(
"__"))>0)
1924 while((i=n.
find(
"_1"))>0)
1941 int i=ucFile.
find(
"\n");
1959 int in=temp.
find(
"-name");
1962 temp=temp.
remove(0,in+5);
1971 static const reg::Ex ee(R
"([\s=])");
1979 initUCF(entity,ff,temp,lineNo,fileName,brief);
1985 ucFile=ucFile.
remove(0,i+1);
2015 std::shared_ptr<Entry> current = std::make_shared<Entry>();
2017 current->section=EntryType::makeVariable();
2018 current->bodyLine=line;
2019 current->fileName=fileName;
2020 current->type=
"ucf_const";
2022 current->lang= SrcLangExt::VHDL ;
2031 current->name= n+
"_";
2036 current->brief=brief;
2037 current->briefLine=line;
2038 current->briefFile=fileName;
2076 if (!entity.
contains(
":"))
return "";
2078 static const reg::Ex exp(R
"([:()\s])");
2086 int index = entity.
findRev(
".");
2089 entity.
remove(0,index+1);
2108 static const reg::Ex exp(R
"([()\s])");
2122 std::string label=ql[0];
2124 int index=entity.
findRev(
".");
2127 entity.
remove(0,index+1);
2178 if (cur->includeName==
"entity" || cur->includeName==
"component" )
2180 entity=cur->includeName+
" "+cur->type;
2183 else if (cur->includeName.isEmpty())
2208 if (ar==
nullptr)
return;
2210 if (classEntity==
nullptr)
2217 if (classEntity==cd)
return;
2219 bName=classEntity->
name();
2221 n1=classEntity->
name();
2246 Relationship::Member,
2259 mmd->setTagInfo(&tg);
2264 mmd->setLanguage(SrcLangExt::VHDL);
2266 mmd->setBriefDescription(cur->brief,cur->briefFile,cur->briefLine);
2267 mmd->setBodySegment(cur->startLine,cur->startLine,-1) ;
2268 mmd->setDocumentation(cur->doc,cur->docFile,cur->docLine);
2305 size_t len=ql.size();
2309 for(
size_t i=0;i<len;i++)
2340 err(
"Possible recursive class relation while inside {} and looking for {}\n",cd->
name(),scd->
name());
2371 for (
auto &bcd : bcl)
2377 int i = n.
find(
'(');
2380 bcd.usedName.append(
"(2)");
2386 std::string t=r.str();
2393 bcd.templSpecifiers=t;
2404 for (
const auto &md :
mdList)
2416 if (mdef==
nullptr)
return;
2441 std::shared_ptr<Entry> root = std::make_shared<Entry>();
2443 parser->parseInput(
"",codeFragment.
data(),root,
nullptr);
2513#define STARTL (FlowChart::WHILE_NO | FlowChart::IF_NO | \
2514 FlowChart::FOR_NO | FlowChart::CASE_NO | \
2515 FlowChart::LOOP_NO | WHEN_NO)
2516#define DECLN (FlowChart::WHEN_NO | \
2517 FlowChart::ELSIF_NO | FlowChart::IF_NO | \
2518 FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2519 FlowChart::CASE_NO | FlowChart::LOOP_NO )
2520#define STARTFIN (FlowChart::START_NO | FlowChart::END_NO)
2521#define LOOP (FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2522 FlowChart::LOOP_NO )
2523#define ENDCL (FlowChart::END_CASE | FlowChart::END_LOOP)
2524#define EEND (FlowChart::ENDIF_NO | FlowChart::ELSE_NO )
2525#define IFF (FlowChart::ELSIF_NO | FlowChart::IF_NO)
2526#define EXITNEXT (FlowChart::EXIT_NO | FlowChart::NEXT_NO )
2527#define EMPTY (EEND | FlowChart::ELSIF_NO)
2528#define EE (FlowChart::ELSE_NO | FlowChart::ELSIF_NO)
2529#define EMPTNODE (ENDCL | EEND | FlowChart::ELSIF_NO)
2530#define FLOWLEN (flowList.size()-1)
2562static std::map<std::string,int> g_keyMap;
2567 if (q.
length()<=80)
return;
2632 static const reg::Ex ep(R
"(\s)");
2663 for (
const auto &flowChart :
flowList)
2673 for (
size_t j=0;j<
flowList.size();j++)
2700 for (
size_t j=0;j<
flowList.size()-1;j++)
2703 int kind = flo.
type;
2738 for (
size_t j=0;j<ql.size();j++)
2745 int diff=
static_cast<int>(max-s.
length());
2754 ql.push_back(s.
str());
2757 for (
size_t j=0;j<ql.size();j++)
2776 for (uint32_t j=0;j < size-1 ;j++)
2793 for (
size_t j=0;j <
flowList.size() ;j++)
2820 t <<
"[shape=none, label=<\n";
2821 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
2822 t <<
"<TR><TD BGCOLOR=\"";
2827 t <<
" </TD></TR></TABLE>>];";
2834 for (
size_t j=0; j<size; j++)
2858 const char *p=str.
data();
2864 case '<': t <<
"<";
break;
2865 case '>': t <<
">";
break;
2866 case '&': t <<
"&";
break;
2867 case '\'': t <<
"'";
break;
2868 case '"': t <<
""";
break;
2869 case '\n': t <<
"<BR ALIGN=\"LEFT\"/>";
break;
2870 default: t << c;
break;
2911 if (!
text.isEmpty())
2918 expression=
substitute(expression,
"\"",
"\\\"");
2925 if(
text.isEmpty())
return;
2956 case IF_NO : t=
"\nif ("+
exp+
") then (yes)";
break;
2957 case ELSIF_NO: t=
"\nelseif ("+
exp+
") then (yes)";
break;
2958 case ELSE_NO: t=
"\nelse";
break;
2962 t+=
"if ("+
exp+
") then (yes)";
2965 case END_NO:
if (
text.contains(
" function")==0) t=
"\n:"+
text+
";";
2969 case FOR_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2970 case WHILE_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2971 case END_LOOP: t=
"\nendwhile";
break;
2972 case END_CASE: t=
"\nendif\n:end case;";
break;
2975 if (!endL) t+=
"\nstop";
2977 case LOOP_NO: t=
"\nwhile (infinite loop)";
break;
2980 case COMMENT_NO: t=
"\n note left \n "+flo.
label+
"\nend note \n";
break;
2981 case BEGIN_NO: t=
"\n:begin;";
break;
2982 default: assert(
false);
break;
2989 int caseCounter = 0;
2990 int whenCounter = 0;
2994 for (
size_t j=0;j<size;j++)
3009 bool ca = (caseCounter>0 && whenCounter==0);
3025 for (
const auto &baseName: baseNameVector)
3040 case IF_NO:
return "if ";
3046 case END_NO:
return "end ";
3050 case FOR_NO:
return "for ";
3056 case LOOP_NO:
return "infinite loop ";
3061 default:
return "--failure--";
3077 ov+=
"/flow_design.dot";
3079 QCString vlargs=
"-Tsvg \""+ov+
"\" "+dir ;
3083 err(
"could not create dot file\n");
3089 t <<
" digraph G { \n";
3090 t <<
"rankdir=TB \n";
3091 t <<
"concentrate=true\n";
3092 t <<
"stylesheet=\"doxygen.css\"\n";
3105 QCString fileName = ov+
"/flow_design.dot";
3109 err(
"Cannot open file {} for writing\n",fileName);
3166 g_keyMap.emplace(qq.
str(),fl.
id);
3180 t <<
" [shape=diamond,style=filled,color=\"";
3182 t <<
"\",label=\" ";
3184 if (exit) kl=fl.
text+
" ";
3201 t <<
" [shape=ellipse ,label=\""+val+
"\"]\n";
3206 t <<
"[shape=box , style=rounded label=<\n";
3207 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" >\n ";
3208 t <<
"<TR><TD BGCOLOR=\"";
3212 t <<
" </TD></TR></TABLE>>];";
3227 if (z==
static_cast<int>(q.
length())-1)
3231 t <<
"[shape=none margin=0.1, label=<\n";
3232 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
3235 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.varNode <<
"\" > ";
3239 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.textNode <<
"\" > ";
3242 t <<
" </TD></TR></TABLE>>];";
3255 auto it = g_keyMap.find(s1.
str());
3256 auto it1 = g_keyMap.find(s2.
str());
3258 assert(it!=g_keyMap.end());
3259 assert(it1!=g_keyMap.end());
3285 t <<
"edge [color=\""+col+
"\",label=\""+
label+
"\"]\n";
3287 if (bFrom) t <<
":s";
3296 size_t index=al.
size();
3297 if (index==0)
return;
3301 prev.
fill(
' ',
static_cast<int>(len)+1);
3311 attl+=arg.attrib+
" ";
3318 if (--index) attl+=
",\n";
else attl+=
"\n";
3329 for (
size_t j=index+1; j<
flowList.size(); j++)
3346 for (
size_t j=index;j>0;j--)
3369 for (
size_t j=index;j>0;j--)
3377 err(
"could not find label: '{}'\n",
label);
3383 for (
size_t j=index+1; j<
flowList.size(); j++)
3396 for (
size_t j=index+1; j<
flowList.size(); j++)
3399 int kind = flo.
type;
3407 if (s<stamp && stamp>0)
3415 if (s<stamp && stamp>0)
3424 if (s<stamp && stamp>0)
3438 size_t start = index+1;
3443 if (elseifNode>0 && elseifNode<endifNode)
3448 if (elseNode>0 && elseNode<endifNode)
3465 for (
size_t j=0;j<size;j++)
3468 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 noexcept
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()