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;
220 ClassDef *ecd=
nullptr;
221 const MemberDef *mdef=
nullptr;
225 if (cd==
nullptr)
return nullptr;
228 if (mdef)
return mdef;
230 if (mdef)
return mdef;
241 QCString tt=d->
name();
258 if (mdef)
return mdef;
260 if (mdef)
return mdef;
270 QCString tt=d->
name();
301 for (
const auto &cdp : cList_it->second)
304 if (mdef)
return mdef;
306 if (mdef)
return mdef;
342 for (
const auto &md : *ml)
344 QCString tkey=cd->
symbolName()+
"@"+md->name();
366 std::vector<ClassDef*> cList;
367 MemberList *mem=cdef->
getMemberList(MemberListType::VariableMembers());
370 for (
const auto &md : *mem)
395 if (cdef==
nullptr)
return nullptr;
397 MemberList *mem=cdef->
getMemberList(MemberListType::PubMethods());
400 for (
const auto &mdef : *mem)
402 QCString mname=mdef->name();
437 if (cd==
nullptr)
return "";
449 if (cd==
nullptr)
return "";
467 std::vector<QCString> ql;
502 for (
const auto &s : ql)
507 QCString s1(qlist[0]);
508 QCString s2(qlist[1]);
510 if (ql.size()==1) s1.
clear();
536 QCString className=citer->className();
538 if (cd != citer.get() && (pos=className.
find(
'-'))!=-1)
540 QCString postfix=className.
mid(pos+1);
543 qll.push_back(className);
551 QCString nn=cd->
name();
554 QCString jj=citer->name();
558 if (QCString(ql[0])==nn)
572 if (ccd==
nullptr)
return;
599 const char* sc=
"--!";
601 static const reg::Ex re(R
"(\n[ \t]*--!)");
602 std::string s = qcs.str();
603 reg::Iterator iter(s,re);
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');
686 static const reg::Ex reg(R
"([\s:|])");
689 if (index <
static_cast<int>(ql.size()))
691 return QCString(ql[index]);
703 return "architecture";
707 return "package body";
748 QCString qcs(&buf[0]);
758 static int stringCounter;
759 QCString qcs(
"PROCESS_");
772 static const reg::Ex reg(R
"([\[\]./<>:\s,;'+*|&=()\"-])");
797 else if (j != 0 && ss)
810 QCString st=temp.
remove(0,j+1);
814 int ii=find.
find(
'"',2);
817 QCString com=find.
left(ii+1);
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();
917 for (
const Argument &arg : al)
923 QCString nn=arg.name;
926 QCString defval = arg.defval;
939 if (
qstricmp(arg.attrib,arg.type) != 0)
941 startFonts(arg.attrib.lower(),
"stringliteral",ol);
967 size_t len=al.
size();
975 for (
const Argument &arg : al)
978 QCString att=arg.defval;
1000 QCString nn=arg.name;
1012 if (!arg.attrib.isEmpty())
1047 for (
const Argument &arg : al)
1053 QCString nn=arg.name;
1076 size_t index=al.
size();
1086 for (
const Argument &arg : al)
1090 QCString attl=arg.defval;
1113 startFonts(QCString(
"in"),
"stringliteral",ol);
1161 for (
const Argument &arg : al)
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;
1276 QCString na=cd->
name();
1321 bool c=largs==
"context";
1348 tagFile <<
" <member kind=\"";
1376 tagFile <<
" <anchorfile>" <<
convertToXML(fn) <<
"</anchorfile>\n";
1387 tagFile <<
" </member>\n";
1396 const Definition *d=
nullptr;
1398 ASSERT(cd!=
nullptr || nd!=
nullptr || fd!=
nullptr || gd!=
nullptr || mod!=
nullptr ||
1405 else if (mod) d=mod;
1417 QCString cname = d->
name();
1439 if (!detailsVisible)
1441 QCString doxyName=mdef->
name();
1460 ClassDef *kl=
nullptr;
1504 name+=
" <"+mdef->
name()+
">";
1513 if (largs==
"context")
1603 QCString name(
"<Entity ");
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())
1820 QCString n=cd->
name();
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)
1920 QCString ucFile(input);
1927 int i=ucFile.
find(
"\n");
1930 QCString temp=ucFile.
left(i);
1945 int in=temp.
find(
"-name");
1948 temp=temp.
remove(0,in+5);
1953 initUCF(entity,QCString(),temp,lineNo,fileName,brief);
1957 static const reg::Ex ee(R
"([\s=])");
1960 QCString ff=temp.
left(in);
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])");
2070 QCString label(ql[0]);
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);
2120 return QCString(label);
2155 QCString entity,arch,inst;
2164 if (cur->includeName==
"entity" || cur->includeName==
"component" )
2166 entity=cur->includeName+
" "+cur->type;
2169 else if (cur->includeName.isEmpty())
2197 if (ar==
nullptr)
return;
2199 if (classEntity==
nullptr)
2206 if (classEntity==cd)
return;
2208 bName=classEntity->
name();
2210 n1=classEntity->
name();
2248 mmd->setTagInfo(&tg);
2255 mmd->setBriefDescription(cur->brief,cur->briefFile,cur->briefLine);
2256 mmd->setBodySegment(cur->startLine,cur->startLine,-1) ;
2257 mmd->setDocumentation(cur->doc,cur->docFile,cur->docLine);
2294 size_t len=ql.size();
2298 for(
size_t i=0;i<len;i++)
2300 QCString n=QCString(ql[i]);
2329 err(
"Possible recursive class relation while inside %s and looking for %s\n",
qPrint(cd->
name()),
qPrint(scd->
name()));
2335 const ClassDef *ccd=bcd.classDef;
2360 for (
auto &bcd : bcl)
2362 ClassDef *ccd = bcd.classDef;
2365 QCString n = bcd.usedName;
2366 int i = n.
find(
'(');
2369 bcd.usedName.append(
"(2)");
2372 static const reg::Ex reg(R
"(\d+)");
2373 QCString s=n.left(i);
2375 std::string t=r.str();
2382 bcd.templSpecifiers=t;
2393 for (
const auto &md :
mdList)
2405 if (mdef==
nullptr)
return;
2407 QCString codeFragment;
2408 const MemberDef* mm=
nullptr;
2430 std::shared_ptr<Entry> root = std::make_shared<Entry>();
2432 parser->parseInput(
"",codeFragment.
data(),root,
nullptr);
2502#define STARTL (FlowChart::WHILE_NO | FlowChart::IF_NO | \
2503 FlowChart::FOR_NO | FlowChart::CASE_NO | \
2504 FlowChart::LOOP_NO | WHEN_NO)
2505#define DECLN (FlowChart::WHEN_NO | \
2506 FlowChart::ELSIF_NO | FlowChart::IF_NO | \
2507 FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2508 FlowChart::CASE_NO | FlowChart::LOOP_NO )
2509#define STARTFIN (FlowChart::START_NO | FlowChart::END_NO)
2510#define LOOP (FlowChart::FOR_NO | FlowChart::WHILE_NO | \
2511 FlowChart::LOOP_NO )
2512#define ENDCL (FlowChart::END_CASE | FlowChart::END_LOOP)
2513#define EEND (FlowChart::ENDIF_NO | FlowChart::ELSE_NO )
2514#define IFF (FlowChart::ELSIF_NO | FlowChart::IF_NO)
2515#define EXITNEXT (FlowChart::EXIT_NO | FlowChart::NEXT_NO )
2516#define EMPTY (EEND | FlowChart::ELSIF_NO)
2517#define EE (FlowChart::ELSE_NO | FlowChart::ELSIF_NO)
2518#define EMPTNODE (ENDCL | EEND | FlowChart::ELSIF_NO)
2519#define FLOWLEN (flowList.size()-1)
2551static std::map<std::string,int> g_keyMap;
2556 if (q.
length()<=80)
return;
2621 static const reg::Ex ep(R
"(\s)");
2645 printf(
"\n NO: %s[%d,%d]",t.c_str(),flo.
stamp,flo.
id);
2652 for (
const auto &flowChart :
flowList)
2662 for (
size_t j=0;j<
flowList.size();j++)
2689 for (
size_t j=0;j<
flowList.size()-1;j++)
2692 int kind = flo.
type;
2727 for (
size_t j=0;j<ql.size();j++)
2734 int diff=
static_cast<int>(max-s.
length());
2743 ql.push_back(s.
str());
2746 for (
size_t j=0;j<ql.size();j++)
2765 for (uint32_t j=0;j < size-1 ;j++)
2782 for (
size_t j=0;j <
flowList.size() ;j++)
2809 t <<
"[shape=none, label=<\n";
2810 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
2811 t <<
"<TR><TD BGCOLOR=\"";
2816 t <<
" </TD></TR></TABLE>>];";
2823 for (
size_t j=0; j<size; j++)
2847 const char *p=str.
data();
2853 case '<': t <<
"<";
break;
2854 case '>': t <<
">";
break;
2855 case '&': t <<
"&";
break;
2856 case '\'': t <<
"'";
break;
2857 case '"': t <<
""";
break;
2858 case '\n': t <<
"<BR ALIGN=\"LEFT\"/>";
break;
2859 default: t << c;
break;
2896 QCString typeString(
text);
2897 QCString expression(
exp);
2900 if (!
text.isEmpty())
2907 expression=
substitute(expression,
"\"",
"\\\"");
2914 if(
text.isEmpty())
return;
2945 case IF_NO : t=
"\nif ("+
exp+
") then (yes)";
break;
2946 case ELSIF_NO: t=
"\nelseif ("+
exp+
") then (yes)";
break;
2947 case ELSE_NO: t=
"\nelse";
break;
2951 t+=
"if ("+
exp+
") then (yes)";
2954 case END_NO:
if (
text.contains(
" function")==0) t=
"\n:"+
text+
";";
2958 case FOR_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2959 case WHILE_NO: t=
"\nwhile ("+
exp+
") is (yes)";
break;
2960 case END_LOOP: t=
"\nendwhile";
break;
2961 case END_CASE: t=
"\nendif\n:end case;";
break;
2964 if (!endL) t+=
"\nstop";
2966 case LOOP_NO: t=
"\nwhile (infinite loop)";
break;
2969 case COMMENT_NO: t=
"\n note left \n "+flo.
label+
"\nend note \n";
break;
2970 case BEGIN_NO: t=
"\n:begin;";
break;
2971 default: assert(
false);
break;
2978 int caseCounter = 0;
2979 int whenCounter = 0;
2983 for (
size_t j=0;j<size;j++)
2998 bool ca = (caseCounter>0 && whenCounter==0);
3026 case IF_NO:
return "if ";
3032 case END_NO:
return "end ";
3036 case FOR_NO:
return "for ";
3042 case LOOP_NO:
return "infinite loop ";
3047 default:
return "--failure--";
3062 QCString dir=
" -o \""+ov+qcs+
"\"";
3063 ov+=
"/flow_design.dot";
3065 QCString vlargs=
"-Tsvg \""+ov+
"\" "+dir ;
3069 err(
"could not create dot file\n");
3075 t <<
" digraph G { \n";
3076 t <<
"rankdir=TB \n";
3077 t <<
"concentrate=true\n";
3078 t <<
"stylesheet=\"doxygen.css\"\n";
3091 QCString fileName = ov+
"/flow_design.dot";
3095 err(
"Cannot open file %s for writing\n",
qPrint(fileName));
3152 g_keyMap.emplace(qq.
str(),fl.
id);
3166 t <<
" [shape=diamond,style=filled,color=\"";
3168 t <<
"\",label=\" ";
3170 if (exit) kl=fl.
text+
" ";
3186 QCString val=fl.
text;
3187 t <<
" [shape=ellipse ,label=\""+val+
"\"]\n";
3191 QCString val=fl.
text;
3192 t <<
"[shape=box , style=rounded label=<\n";
3193 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" >\n ";
3194 t <<
"<TR><TD BGCOLOR=\"";
3198 t <<
" </TD></TR></TABLE>>];";
3213 if (z==
static_cast<int>(q.
length())-1)
3217 t <<
"[shape=none margin=0.1, label=<\n";
3218 t <<
"<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
3221 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.varNode <<
"\" > ";
3225 t <<
"<TR><TD BGCOLOR=\"" <<
flowCol.textNode <<
"\" > ";
3228 t <<
" </TD></TR></TABLE>>];";
3241 auto it = g_keyMap.find(s1.
str());
3242 auto it1 = g_keyMap.find(s2.
str());
3244 assert(it!=g_keyMap.end());
3245 assert(it1!=g_keyMap.end());
3271 t <<
"edge [color=\""+col+
"\",label=\""+
label+
"\"]\n";
3273 if (bFrom) t <<
":s";
3282 size_t index=al.
size();
3283 if (index==0)
return;
3287 prev.
fill(
' ',
static_cast<int>(len)+1);
3290 for (
const Argument &arg : al)
3292 QCString attl=arg.defval+
" ";
3297 attl+=arg.attrib+
" ";
3304 if (--index) attl+=
",\n";
else attl+=
"\n";
3315 for (
size_t j=index+1; j<
flowList.size(); j++)
3332 for (
size_t j=index;j>0;j--)
3355 for (
size_t j=index;j>0;j--)
3369 for (
size_t j=index+1; j<
flowList.size(); j++)
3382 for (
size_t j=index+1; j<
flowList.size(); j++)
3385 int kind = flo.
type;
3393 if (s<stamp && stamp>0)
3401 if (s<stamp && stamp>0)
3410 if (s<stamp && stamp>0)
3424 size_t start = index+1;
3429 if (elseifNode>0 && elseifNode<endifNode)
3434 if (elseNode>0 && elseNode<endifNode)
3451 for (
size_t j=0;j<size;j++)
3454 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.
const T * find(const std::string &key) const
Find an object given the key.
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.
void push_back(const T &value)
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)
std::unique_ptr< OutlineParserInterface > getOutlineParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
std::unique_ptr< CodeParserInterface > getCodeParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
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
size_t size() const
Returns the length of the string, not counting the 0-terminator.
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)
void addWord(const QCString &word, bool hiPriority)
void setCurrentDoc(const Definition *ctx, const QCString &anchor, bool isSourceFile)
Text streaming class that buffers data.
void flush()
Flushes the buffer.
virtual QCString trVhdlType(VhdlSpecifier type, bool single)=0
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.
#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 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()