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())
1773 bool hasHeader=!mg->header().isEmpty();
1780 if (!mg->documentation().isEmpty())
1851 fi=codeFragment.
find(
"\n",++fi);
1852 }
while(fi>=0 && j++ <3);
1857 codeFragment=codeFragment.
left(fi);
1858 codeFragment.
append(
"\n .... ");
1866 intf->parseCode( codeOL,
1881 codeOL.endCodeFragment(
"DoxyCode");
1905 while((i=n.
find(
"__"))>0)
1910 while((i=n.
find(
"_1"))>0)
1927 int i=ucFile.
find(
"\n");
1945 int in=temp.
find(
"-name");
1948 temp=temp.
remove(0,in+5);
1957 static const reg::Ex ee(R
"([\s=])");
1965 initUCF(entity,ff,temp,lineNo,fileName,brief);
1971 ucFile=ucFile.
remove(0,i+1);
2001 std::shared_ptr<Entry> current = std::make_shared<Entry>();
2003 current->section=EntryType::makeVariable();
2004 current->bodyLine=line;
2005 current->fileName=fileName;
2006 current->type=
"ucf_const";
2017 current->name= n+
"_";
2022 current->brief=brief;
2023 current->briefLine=line;
2024 current->briefFile=fileName;
2062 if (!entity.
contains(
":"))
return "";
2064 static const reg::Ex exp(R
"([:()\s])");
2072 int index = entity.
findRev(
".");
2075 entity.
remove(0,index+1);
2094 static const reg::Ex exp(R
"([()\s])");
2108 std::string label=ql[0];
2110 int index=entity.
findRev(
".");
2113 entity.
remove(0,index+1);
2164 if (cur->includeName==
"entity" || cur->includeName==
"component" )
2166 entity=cur->includeName+
" "+cur->type;
2169 else if (cur->includeName.isEmpty())
2194 if (ar==
nullptr)
return;
2196 if (classEntity==
nullptr)
2203 if (classEntity==cd)
return;
2205 bName=classEntity->
name();
2207 n1=classEntity->
name();
2245 mmd->setTagInfo(&tg);
2252 mmd->setBriefDescription(cur->brief,cur->briefFile,cur->briefLine);
2253 mmd->setBodySegment(cur->startLine,cur->startLine,-1) ;
2254 mmd->setDocumentation(cur->doc,cur->docFile,cur->docLine);
2291 size_t len=ql.size();
2295 for(
size_t i=0;i<len;i++)
2326 err(
"Possible recursive class relation while inside {} and looking for {}\n",cd->
name(),scd->
name());
2357 for (
auto &bcd : bcl)
2363 int i = n.
find(
'(');
2366 bcd.usedName.append(
"(2)");
2372 std::string t=r.str();
2379 bcd.templSpecifiers=t;
2390 for (
const auto &md :
mdList)
2402 if (mdef==
nullptr)
return;
2427 std::shared_ptr<Entry> root = std::make_shared<Entry>();
2429 parser->parseInput(
"",codeFragment.
data(),root,
nullptr);
2499#define STARTL (FlowChart::WHILE_NO | FlowChart::IF_NO | \
2500 FlowChart::FOR_NO | FlowChart::CASE_NO | \
2501 FlowChart::LOOP_NO | WHEN_NO)
2502#define DECLN (FlowChart::WHEN_NO | \
2503 FlowChart::ELSIF_NO | FlowChart::IF_NO | \
2504 FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2505 FlowChart::CASE_NO | FlowChart::LOOP_NO )
2506#define STARTFIN (FlowChart::START_NO | FlowChart::END_NO)
2507#define LOOP (FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2508 FlowChart::LOOP_NO )
2509#define ENDCL (FlowChart::END_CASE | FlowChart::END_LOOP)
2510#define EEND (FlowChart::ENDIF_NO | FlowChart::ELSE_NO )
2511#define IFF (FlowChart::ELSIF_NO | FlowChart::IF_NO)
2512#define EXITNEXT (FlowChart::EXIT_NO | FlowChart::NEXT_NO )
2513#define EMPTY (EEND | FlowChart::ELSIF_NO)
2514#define EE (FlowChart::ELSE_NO | FlowChart::ELSIF_NO)
2515#define EMPTNODE (ENDCL | EEND | FlowChart::ELSIF_NO)
2516#define FLOWLEN (flowList.size()-1)
2548static std::map<std::string,int> g_keyMap;
2553 if (q.
length()<=80)
return;
2618 static const reg::Ex ep(R
"(\s)");
2642 printf(
"\n NO: %s[%d,%d]",t.c_str(),flo.
stamp,flo.
id);
2649 for (
const auto &flowChart :
flowList)
2659 for (
size_t j=0;j<
flowList.size();j++)
2686 for (
size_t j=0;j<
flowList.size()-1;j++)
2689 int kind = flo.
type;
2724 for (
size_t j=0;j<ql.size();j++)
2731 int diff=
static_cast<int>(max-s.
length());
2740 ql.push_back(s.
str());
2743 for (
size_t j=0;j<ql.size();j++)
2762 for (uint32_t j=0;j < size-1 ;j++)
2779 for (
size_t j=0;j <
flowList.size() ;j++)
2806 t <<
"[shape=none, label=<\n";
2807 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
2808 t <<
"<TR><TD BGCOLOR=\"";
2813 t <<
" </TD></TR></TABLE>>];";
2820 for (
size_t j=0; j<size; j++)
2844 const char *p=str.
data();
2850 case '<': t <<
"<";
break;
2851 case '>': t <<
">";
break;
2852 case '&': t <<
"&";
break;
2853 case '\'': t <<
"'";
break;
2854 case '"': t <<
""";
break;
2855 case '\n': t <<
"<BR ALIGN=\"LEFT\"/>";
break;
2856 default: t << c;
break;
2897 if (!
text.isEmpty())
2904 expression=
substitute(expression,
"\"",
"\\\"");
2911 if(
text.isEmpty())
return;
2942 case IF_NO : t=
"\nif ("+
exp+
") then (yes)";
break;
2943 case ELSIF_NO: t=
"\nelseif ("+
exp+
") then (yes)";
break;
2944 case ELSE_NO: t=
"\nelse";
break;
2948 t+=
"if ("+
exp+
") then (yes)";
2951 case END_NO:
if (
text.contains(
" function")==0) t=
"\n:"+
text+
";";
2955 case FOR_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2956 case WHILE_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2957 case END_LOOP: t=
"\nendwhile";
break;
2958 case END_CASE: t=
"\nendif\n:end case;";
break;
2961 if (!endL) t+=
"\nstop";
2963 case LOOP_NO: t=
"\nwhile (infinite loop)";
break;
2966 case COMMENT_NO: t=
"\n note left \n "+flo.
label+
"\nend note \n";
break;
2967 case BEGIN_NO: t=
"\n:begin;";
break;
2968 default: assert(
false);
break;
2975 int caseCounter = 0;
2976 int whenCounter = 0;
2980 for (
size_t j=0;j<size;j++)
2995 bool ca = (caseCounter>0 && whenCounter==0);
3023 case IF_NO:
return "if ";
3029 case END_NO:
return "end ";
3033 case FOR_NO:
return "for ";
3039 case LOOP_NO:
return "infinite loop ";
3044 default:
return "--failure--";
3060 ov+=
"/flow_design.dot";
3062 QCString vlargs=
"-Tsvg \""+ov+
"\" "+dir ;
3066 err(
"could not create dot file\n");
3072 t <<
" digraph G { \n";
3073 t <<
"rankdir=TB \n";
3074 t <<
"concentrate=true\n";
3075 t <<
"stylesheet=\"doxygen.css\"\n";
3088 QCString fileName = ov+
"/flow_design.dot";
3092 err(
"Cannot open file {} for writing\n",fileName);
3149 g_keyMap.emplace(qq.
str(),fl.
id);
3163 t <<
" [shape=diamond,style=filled,color=\"";
3165 t <<
"\",label=\" ";
3167 if (exit) kl=fl.
text+
" ";
3184 t <<
" [shape=ellipse ,label=\""+val+
"\"]\n";
3189 t <<
"[shape=box , style=rounded label=<\n";
3190 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" >\n ";
3191 t <<
"<TR><TD BGCOLOR=\"";
3195 t <<
" </TD></TR></TABLE>>];";
3210 if (z==
static_cast<int>(q.
length())-1)
3214 t <<
"[shape=none margin=0.1, label=<\n";
3215 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
3218 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.varNode <<
"\" > ";
3222 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.textNode <<
"\" > ";
3225 t <<
" </TD></TR></TABLE>>];";
3238 auto it = g_keyMap.find(s1.
str());
3239 auto it1 = g_keyMap.find(s2.
str());
3241 assert(it!=g_keyMap.end());
3242 assert(it1!=g_keyMap.end());
3268 t <<
"edge [color=\""+col+
"\",label=\""+
label+
"\"]\n";
3270 if (bFrom) t <<
":s";
3279 size_t index=al.
size();
3280 if (index==0)
return;
3284 prev.
fill(
' ',
static_cast<int>(len)+1);
3294 attl+=arg.attrib+
" ";
3301 if (--index) attl+=
",\n";
else attl+=
"\n";
3312 for (
size_t j=index+1; j<
flowList.size(); j++)
3329 for (
size_t j=index;j>0;j--)
3352 for (
size_t j=index;j>0;j--)
3360 err(
"could not find label: '{}'\n",
label);
3366 for (
size_t j=index+1; j<
flowList.size(); j++)
3379 for (
size_t j=index+1; j<
flowList.size(); j++)
3382 int kind = flo.
type;
3390 if (s<stamp && stamp>0)
3398 if (s<stamp && stamp>0)
3407 if (s<stamp && stamp>0)
3421 size_t start = index+1;
3426 if (elseifNode>0 && elseifNode<endifNode)
3431 if (elseNode>0 && elseNode<endifNode)
3448 for (
size_t j=0;j<size;j++)
3451 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.
const MemberGroupRefList & getMemberGroupList() const
Wrapper class for the MemberListType type.
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 startMemberGroupHeader(bool b)
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 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.
Iterator class to iterator 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()