Doxygen
Loading...
Searching...
No Matches
vhdldocgen.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2015 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#ifndef VHDLDOCGEN_H
17#define VHDLDOCGEN_H
18
19/**
20 * This class implements functions for parsing and generating
21 * vhdl documents
22 */
23
24#include "dstring.h"
25#include "entry.h"
26
27class ClassDef;
28class Definition;
29class Entry;
30class FileDef;
31class GroupDef;
32class MemberDef;
34class MemberList;
35class ModuleDef;
36class NamespaceDef;
37class OutputList;
38class TextStream;
39
41{
42 VhdlConfNode(const DString &a,const DString &b,const DString &config,const DString &cs,bool leaf)
43 {
44 arch=a; // architecture e.g. for iobuffer
45 arch=arch.lower();
46 binding=b; // binding e.g. use entity work.xxx(bev)
48 confVhdl=config; // configuration foo is bar
49 compSpec=cs;
50 isInlineConf=false; // primary configuration?
51 isLeaf=leaf;
52 }
53
58 int level = 0;
59 bool isLeaf = false;
60 bool isInlineConf = false;
61
62};
63
64
65/** Class for generating documentation specific for VHDL */
67{
68 public:
69
70 enum VhdlClasses // Overlays: Protection
71 {
72 ENTITYCLASS, // Overlays: Public
73 PACKBODYCLASS, // Overlays: Protected
74 ARCHITECTURECLASS, // Overlays: Private
75 PACKAGECLASS // Overlays: Package
76 };
78 {
79 switch (prot)
80 {
81 case Protection::Public: return ENTITYCLASS;
82 case Protection::Protected: return PACKBODYCLASS;
83 case Protection::Private: return ARCHITECTURECLASS;
84 case Protection::Package: return PACKAGECLASS;
85 }
86 return ENTITYCLASS;
87 }
88
89 static void init();
90 static DString convertFileNameToClassName(const DString &name);
91 // --- used by vhdlscanner.l -----------
92
93 static bool isSubClass(ClassDef* cd,ClassDef *scd, bool followInstances,int level);
94
95 static DString getIndexWord(const DString &,int index);
96 static bool deleteCharRev(DString &s,char c);
97 static void deleteAllChars(DString &s,char c);
98 static void parseFuncProto(const DString &text,
99 DString& name,
100 DString& ret,
101 bool doc=false);
102 // -----------------------------------
103
104 static void computeVhdlComponentRelations();
105
106 static const char* findKeyWord(const DString& word);
107
108 static ClassDef* getPackageName(const DString& name);
109 static const MemberDef* findMember(const DString& className,
110 const DString& memName);
111 static void findAllPackages(ClassDef*);
112 static const MemberDef* findMemberDef(ClassDef* cd,
113 const DString& key,
114 MemberListType type);
115 static ClassDef *getClass(const DString &name);
116 static const MemberDef* findFunction(const DString& name,
117 const DString& package);
118 static DString getClassTitle(const ClassDef*);
119 static void writeInlineClassLink(const ClassDef*,
120 OutputList &ol);
121 static void writeTagFile(MemberDefMutable *mdef,TextStream &tagFile);
122
123 static bool isConstraint(const MemberDef *mdef);
124 static bool isConfig(const MemberDef *mdef);
125 static bool isAlias(const MemberDef *mdef);
126 static bool isLibrary(const MemberDef *mdef);
127 static bool isGeneric(const MemberDef *mdef);
128 static bool isPort(const MemberDef *mdef);
129 static bool isComponent(const MemberDef *mdef);
130 static bool isPackage(const MemberDef *mdef);
131 static bool isEntity(const MemberDef *mdef);
132 static bool isConstant(const MemberDef *mdef);
133 static bool isVType(const MemberDef *mdef);
134 static bool isSubType(const MemberDef *mdef);
135 static bool isVhdlFunction(const MemberDef *mdef);
136 static bool isProcess(const MemberDef *mdef);
137 static bool isSignal(const MemberDef *mdef);
138 static bool isAttribute(const MemberDef *mdef);
139 static bool isSignals(const MemberDef *mdef);
140 static bool isProcedure(const MemberDef *mdef);
141 static bool isRecord(const MemberDef *mdef);
142 static bool isArchitecture(const MemberDef *mdef);
143 static bool isUnit(const MemberDef *mdef);
144 static bool isPackageBody(const MemberDef *mdef);
145 static bool isVariable(const MemberDef *mdef);
146 static bool isFile(const MemberDef *mdef);
147 static bool isGroup(const MemberDef *mdef);
148 static bool isCompInst(const MemberDef *mdef);
149 static bool isMisc(const MemberDef *mdef);
150
151 //-----------------------------------------------------
152
153 static void prepareComment(DString&);
154 static void formatString(const DString&,OutputList& ol,const MemberDef*);
155
156 static void writeFormatString(const DString&,OutputList& ol,const MemberDef*);
157 static void writeFunctionProto(OutputList& ol,const ArgumentList &al,const MemberDef*);
158 static void writeProcessProto(OutputList& ol,const ArgumentList &al,const MemberDef*);
159 static void writeProcedureProto(OutputList& ol, const ArgumentList &al,const MemberDef*);
160 static bool writeFuncProcDocu(const MemberDef *mdef, OutputList& ol,const ArgumentList &al,bool type=false);
161 static void writeRecordProto(const MemberDef *mdef, OutputList& ol,const ArgumentList &al);
162
163 static bool writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition* d, OutputList &ol);
164
165 static void writeVhdlDeclarations(const MemberList*,OutputList&,const GroupDef*,const ClassDef*,const FileDef*,const NamespaceDef*,const ModuleDef *);
166
168 const ClassDef *cd,const NamespaceDef *nd,const FileDef *fd,const GroupDef *gd,const ModuleDef *mod,
169 bool inGroup);
170
171 static void writePlainVHDLDeclarations(const MemberList* ml,OutputList &ol,
172 const ClassDef *cd,const NamespaceDef *nd,const FileDef *fd,const GroupDef *gd,const ModuleDef *mod,
173 VhdlSpecifier specifier);
174
175 static void writeVHDLDeclarations(const MemberList* ml,OutputList &ol,
176 const ClassDef *cd,const NamespaceDef *nd,const FileDef *fd,const GroupDef *gd,const ModuleDef *mod,
177 const DString &title,const DString &subtitle,bool showEnumValues,VhdlSpecifier type);
178
179 static bool writeClassType(const ClassDef *,OutputList &ol ,DString & cname);
180
181 static DString convertArgumentListToString(const ArgumentList &al,bool f);
182 static DString getProcessNumber();
183 static DString getRecordNumber();
184
185 static DString getClassName(const ClassDef*);
186 static bool isNumber(const std::string& s);
187 static DString getProtectionName(int prot);
188
189 static void parseUCF(const DString &input,Entry* entity,const DString &f,bool vendor);
190
191 static const ClassDef* findArchitecture(const ClassDef *cd);
192
194
195 static void writeSource(const MemberDef *mdef,OutputList& ol,const DString & cname);
196
197 static DString parseForConfig(DString & entity,DString & arch);
198 static DString parseForBinding(DString & entity,DString & arch);
199 static void addBaseClass(ClassDef* cd,ClassDef *ent);
200 static ClassDef* findVhdlClass(const DString &className );
201
202 // flowcharts
203 static void createFlowChart(const MemberDef*);
204 //static void addFlowImage(const TextStream &,const DString &);
205
206 static void setFlowMember( const MemberDef *flowMember);
207 static const MemberDef *getFlowMember();
208
209 static bool isVhdlClass (const Entry *cu)
210 {
211 return cu->vhdlSpec==VhdlSpecifier::ENTITY ||
215 }
216
217 static void resetCodeVhdlParserState();
218
219 private:
220 static void findAllArchitectures(std::vector<DString>& ql,const ClassDef *cd);
221 static bool compareArgList(const ArgumentList &,const ArgumentList &);
222 static void writeVhdlLink(const ClassDef* cdd ,OutputList& ol,DString& type,DString& name,DString& beh);
223 static void writeStringLink(const MemberDef *mdef,DString mem,OutputList& ol);
224 static void writeRecUnitDocu( const MemberDef *md, OutputList& ol,DString largs);
225 static void writeRecordUnit(DString & largs,DString & ltype,OutputList& ol,MemberDefMutable *mdef);
226};
227
228//-------------------------------------------------------------------------------------------------------------------
229//-------------- VHDL Flowcharts -------------------------------------------------------------------------------
230//-------------------------------------------------------------------------------------------------------------------
231
232
233//#define DEBUGFLOW
234
236{
237 public:
239 IF_NO = 1<<1,
240 ELSIF_NO = 1<<2,
241 ELSE_NO = 1<<3,
242 CASE_NO = 1<<4,
243 WHEN_NO = 1<<5,
244 EXIT_NO = 1<<6,
245 END_NO = 1<<7,
246 TEXT_NO = 1<<8,
247 START_NO = 1<<9,
248 ENDIF_NO = 1<<10,
249 FOR_NO = 1<<11,
250 WHILE_NO = 1<<12,
251 END_LOOP = 1<<13,
252 END_CASE = 1<<14,
253 VARIABLE_NO = 1<<15,
254 RETURN_NO = 1<<16,
255 LOOP_NO = 1<<17,
256 NEXT_NO = 1<<18,
257 EMPTY_NO = 1<<19,
258 COMMENT_NO = 1<<20,
259 BEGIN_NO = 1<<21
260 };
261
262 //---------- create svg -------------------------------------------------------------
263 static void createSVG();
264 static void startDot(TextStream &t);
265 static void endDot(TextStream &t);
266 static void codify(TextStream &t,const DString &str);
267 static void writeShape(TextStream &t,const FlowChart &fl);
268 static void writeEdge(TextStream &t,int fl_from,int fl_to,int i,bool bFrom=false,bool bTo=false);
269 static void writeEdge(TextStream &t,const FlowChart &fl_from,const FlowChart &fl_to,int i);
270 static void writeFlowLinks(TextStream &t);
271
272 static DString getNodeName(int n);
273 static void colTextNodes();
274
275 static size_t getNextIfLink(const FlowChart&,size_t);
276 static size_t getNextNode(size_t index,int stamp);
277 static size_t findNode(size_t index,int stamp,int type);
278 static size_t findNode(size_t index,int type);
279 static size_t findNextLoop(size_t j,int stamp);
280 static size_t findPrevLoop(size_t j,int stamp,bool endif=false);
281 static size_t findLabel(size_t j,const DString &);
282 static void delFlowList();
283 static const char* getNodeType(int c);
284
285 static void addFlowChart(int type,const DString &text,const DString &exp,const DString &label=DString());
286 static void moveToPrevLevel();
287 static int getTimeStamp();
288 static void writeFlowChart();
289 static void alignFuncProc(DString & q,const ArgumentList &al,bool isFunc);
291 static void printNode(const FlowChart& n);
292 static void printFlowTree();
293 static void buildCommentNodes(TextStream &t);
294 static void alignCommentNode(TextStream &t,DString com);
295
296 static void printUmlTree();
297 static DString printPlantUmlNode(const FlowChart &flo,bool,bool);
298
299 FlowChart(int typ,const DString &t,const DString &ex,const DString &label=DString());
300
301private:
302 int id = 0;
303 int stamp = 0;
304 int type = 0;
305
306 int line = 0;
307
311};
312
313extern std::vector<FlowChart> flowList;
314
315#endif
This class represents an function or template argument list.
Definition arguments.h:66
A abstract class representing of a compound symbol.
Definition classdef.h:100
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:88
DString()=default
DString lower() const
Definition dstring.h:330
The common base class of all entity definitions found in the sources.
Definition definition.h:77
Represents an unstructured piece of information, about an entity found in the sources.
Definition entry.h:115
VhdlSpecifier vhdlSpec
VHDL specifiers.
Definition entry.h:182
A model of a file symbol.
Definition filedef.h:97
static DString printPlantUmlNode(const FlowChart &flo, bool, bool)
DString text
Definition vhdldocgen.h:309
DString exp
Definition vhdldocgen.h:310
static DString convertNameToFileName()
static void alignCommentNode(TextStream &t, DString com)
static size_t findNode(size_t index, int type)
static void printFlowTree()
static void addFlowChart(int type, const DString &text, const DString &exp, const DString &label=DString())
static void startDot(TextStream &t)
DString label
Definition vhdldocgen.h:308
static const char * getNodeType(int c)
static int getTimeStamp()
static void writeEdge(TextStream &t, int fl_from, int fl_to, int i, bool bFrom=false, bool bTo=false)
static void codify(TextStream &t, const DString &str)
static void delFlowList()
static size_t getNextNode(size_t index, int stamp)
static void writeFlowChart()
static void colTextNodes()
static void createSVG()
static size_t findNextLoop(size_t j, int stamp)
static size_t findPrevLoop(size_t j, int stamp, bool endif=false)
static void alignFuncProc(DString &q, const ArgumentList &al, bool isFunc)
static void writeShape(TextStream &t, const FlowChart &fl)
static size_t getNextIfLink(const FlowChart &, size_t)
static void printNode(const FlowChart &n)
FlowChart(int typ, const DString &t, const DString &ex, const DString &label=DString())
static void moveToPrevLevel()
static size_t findLabel(size_t j, const DString &)
static size_t findNode(size_t index, int stamp, int type)
static void buildCommentNodes(TextStream &t)
static void printUmlTree()
static void writeFlowLinks(TextStream &t)
static void endDot(TextStream &t)
static DString getNodeName(int n)
A model of a group of symbols.
Definition groupdef.h:48
A model of a class/file/namespace member symbol.
Definition memberdef.h:45
A list of MemberDef objects as shown in documentation sections.
Definition memberlist.h:125
Wrapper class for the MemberListType type.
Definition types.h:346
An abstract interface of a namespace symbol.
Class representing a list of output generators that are written to in parallel.
Definition outputlist.h:311
Text streaming class that buffers data.
Definition textstream.h:36
Class for generating documentation specific for VHDL.
Definition vhdldocgen.h:67
static void findAllPackages(ClassDef *)
@ ARCHITECTURECLASS
Definition vhdldocgen.h:74
static const char * findKeyWord(const DString &word)
static bool writeVHDLTypeDocumentation(const MemberDef *mdef, const Definition *d, OutputList &ol)
static bool isArchitecture(const MemberDef *mdef)
static DString getClassTitle(const ClassDef *)
static bool isGroup(const MemberDef *mdef)
static bool isSignal(const MemberDef *mdef)
static void correctMemberProperties(MemberDefMutable *md)
static const MemberDef * findFunction(const DString &name, const DString &package)
static bool compareArgList(const ArgumentList &, const ArgumentList &)
static const MemberDef * getFlowMember()
static void writeStringLink(const MemberDef *mdef, DString mem, OutputList &ol)
static bool isProcess(const MemberDef *mdef)
static DString getProtectionName(int prot)
static void prepareComment(DString &)
static void parseFuncProto(const DString &text, DString &name, DString &ret, bool doc=false)
static void deleteAllChars(DString &s, char c)
static bool isConstant(const MemberDef *mdef)
static bool isAttribute(const MemberDef *mdef)
static void createFlowChart(const MemberDef *)
static void writeVHDLDeclarations(const MemberList *ml, OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, const DString &title, const DString &subtitle, bool showEnumValues, VhdlSpecifier type)
static void writeProcessProto(OutputList &ol, const ArgumentList &al, const MemberDef *)
static const MemberDef * findMember(const DString &className, const DString &memName)
static void writeRecordUnit(DString &largs, DString &ltype, OutputList &ol, MemberDefMutable *mdef)
static bool isLibrary(const MemberDef *mdef)
static ClassDef * findVhdlClass(const DString &className)
static bool isUnit(const MemberDef *mdef)
static void addBaseClass(ClassDef *cd, ClassDef *ent)
static void writeProcedureProto(OutputList &ol, const ArgumentList &al, const MemberDef *)
static DString convertArgumentListToString(const ArgumentList &al, bool f)
static DString convertFileNameToClassName(const DString &name)
static bool isMisc(const MemberDef *mdef)
static bool isConfig(const MemberDef *mdef)
static void writeRecUnitDocu(const MemberDef *md, OutputList &ol, DString largs)
static void resetCodeVhdlParserState()
static void writeVhdlLink(const ClassDef *cdd, OutputList &ol, DString &type, DString &name, DString &beh)
static bool isEntity(const MemberDef *mdef)
static void writeInlineClassLink(const ClassDef *, OutputList &ol)
static bool deleteCharRev(DString &s, char c)
static bool isNumber(const std::string &s)
static DString getIndexWord(const DString &, int index)
static bool isPort(const MemberDef *mdef)
static void writeSource(const MemberDef *mdef, OutputList &ol, const DString &cname)
static void writeTagFile(MemberDefMutable *mdef, TextStream &tagFile)
static void setFlowMember(const MemberDef *flowMember)
static bool isFile(const MemberDef *mdef)
static bool isVhdlClass(const Entry *cu)
Definition vhdldocgen.h:209
static bool isSignals(const MemberDef *mdef)
static DString getClassName(const ClassDef *)
static bool isVariable(const MemberDef *mdef)
static bool isVhdlFunction(const MemberDef *mdef)
static bool isVType(const MemberDef *mdef)
static ClassDef * getPackageName(const DString &name)
static void parseUCF(const DString &input, Entry *entity, const DString &f, bool vendor)
static void formatString(const DString &, OutputList &ol, const MemberDef *)
static void init()
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 DString parseForBinding(DString &entity, DString &arch)
static DString getProcessNumber()
static DString getRecordNumber()
static void writeVhdlDeclarations(const MemberList *, OutputList &, const GroupDef *, const ClassDef *, const FileDef *, const NamespaceDef *, const ModuleDef *)
static const ClassDef * findArchitecture(const ClassDef *cd)
static VhdlClasses convert(Protection prot)
Definition vhdldocgen.h:77
static DString parseForConfig(DString &entity, DString &arch)
static bool isSubType(const MemberDef *mdef)
static bool isPackageBody(const MemberDef *mdef)
static void computeVhdlComponentRelations()
static bool isCompInst(const MemberDef *mdef)
static bool isRecord(const MemberDef *mdef)
static void writeFormatString(const DString &, OutputList &ol, const MemberDef *)
static bool isSubClass(ClassDef *cd, ClassDef *scd, bool followInstances, int level)
static bool isPackage(const MemberDef *mdef)
static const MemberDef * findMemberDef(ClassDef *cd, const DString &key, MemberListType type)
This function returns the entity|package in which the key (type) is found.
static void findAllArchitectures(std::vector< DString > &ql, const ClassDef *cd)
static bool isComponent(const MemberDef *mdef)
static bool isConstraint(const MemberDef *mdef)
static bool writeClassType(const ClassDef *, OutputList &ol, DString &cname)
static bool isGeneric(const MemberDef *mdef)
static void writeRecordProto(const MemberDef *mdef, OutputList &ol, const ArgumentList &al)
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 void writePlainVHDLDeclarations(const MemberList *ml, OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const ModuleDef *mod, VhdlSpecifier specifier)
ClassDef * getClass(const DString &n)
DString arch
Definition vhdldocgen.h:55
DString compSpec
Definition vhdldocgen.h:57
VhdlConfNode(const DString &a, const DString &b, const DString &config, const DString &cs, bool leaf)
Definition vhdldocgen.h:42
DString binding
Definition vhdldocgen.h:56
DString confVhdl
Definition vhdldocgen.h:54
bool isInlineConf
Definition vhdldocgen.h:60
Protection
Definition types.h:32
VhdlSpecifier
Definition types.h:770
std::vector< FlowChart > flowList