vhdljjparser.cpp
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Copyright (C) 2014 by M. Kreis
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  */
12 
13 #include <qcstring.h>
14 #include <qfileinfo.h>
15 #include <qstringlist.h>
16 #include "vhdljjparser.h"
17 #include "vhdlcode.h"
18 #include "vhdldocgen.h"
19 #include "message.h"
20 #include "config.h"
21 #include "doxygen.h"
22 #include "util.h"
23 #include "language.h"
24 #include "commentscan.h"
25 #include "index.h"
26 #include "definition.h"
27 #include "searchindex.h"
28 #include "outputlist.h"
29 #include "arguments.h"
30 #include "types.h"
31 #include "VhdlParserIF.h"
32 
33 using namespace vhdl::parser;
34 using namespace std;
35 
37 
39 static int yyLineNr = 1;
40 static int* lineParse;
41 static int iDocLine = -1;
43 static Entry* gBlock = 0;
44 static Entry* previous = 0;
45 //-------------------------------------------------------
46 
47 static Entry* oldEntry;
48 static bool varr=FALSE;
50 
54 
67 
68 int VhdlParser::param_sec = 0;
70 int VhdlParser::currP=0;
72 
74 
75 static struct
76 {
78  bool brief;
79  bool pending;
80  int iDocLine;
81 } str_doc;
82 
83 static bool doxComment=FALSE; // doxygen comment ?
85 static int iCodeLen;
86 
87 bool checkMultiComment(QCString& qcs,int line);
88 QList<Entry>* getEntryAtLine(const Entry* ce,int line);
89 
90 //-------------------------------------
91 
94 
96 {
97  if (VhdlParser::lastEntity) return VhdlParser::lastEntity;
98  if (VhdlParser::lastCompound) return VhdlParser::lastCompound;
99  return NULL;
100 }
101 
103 {
104  int ll=strComment.length();
105  if (!gBlock) gBlock = new Entry;
106  iCodeLen=inputString.findRev(strComment.data())+ll;
107  // fprintf(stderr,"\n startin code..%d %d %d\n",iCodeLen,num_chars,ll);
108  gBlock->reset();
109  int len=strComment.length();
110  QCString name=strComment.right(len-index);//
111  name=VhdlDocGen::getIndexWord(name.data(),1);
112  if (!name)
113  gBlock->name="misc"+ VhdlDocGen::getRecordNumber();
114  else
115  gBlock->name=name;
116 
117  gBlock->startLine=yyLineNr;
118  gBlock->bodyLine=yyLineNr;
119 
120  strComment=strComment.left(index);
121  VhdlDocGen::prepareComment(strComment);
122  gBlock->brief+=strComment;
123 }
124 
125 void makeInlineDoc(int endCode)
126 {
127  int len=endCode-iCodeLen;
128  if (!gBlock) gBlock = new Entry;
129  QCString par=inputString.mid(iCodeLen,len);
130  //fprintf(stderr,"\n inline code: \n<%s>",par.data());
131  gBlock->doc=par;
132  gBlock->inbodyDocs=par;
135  gBlock->fileName = yyFileName;
136  gBlock->endBodyLine=yyLineNr-1;
137  gBlock->lang=SrcLangExt_VHDL;
138  Entry *temp=new Entry(*gBlock);
139  Entry* compound=getVhdlCompound();
140 
141  if (compound)
142  {
143  compound->addSubEntry(temp);
144  }
145  else
146  {
147  temp->type="misc"; // global code like library ieee...
148  VhdlParser::current_root->addSubEntry(temp);
149  }
150  strComment.resize(0);
151  gBlock->reset();
152 }// makeInlineDoc
153 
154 
156 {
157  return fileName.right(ext.length())==ext;
158 }
159 
160 
161 void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root,
162  bool ,QStrList&)
163 {
164  g_thisParser=this;
165  bool inLine=false;
166  inputString=fileBuf;
167 
168  // fprintf(stderr,"\n ============= %s\n ==========\n",fileBuf);
169 
170  if (strlen(fileName)==0)
171  {
172  inLine=true;
173  }
174 
175  yyFileName+=fileName;
176 
177  bool xilinx_ucf=isConstraintFile(yyFileName,".ucf");
178  bool altera_qsf=isConstraintFile(yyFileName,".qsf");
179 
180  // support XILINX(ucf) and ALTERA (qsf) file
181 
182  if (xilinx_ucf)
183  {
184  VhdlDocGen::parseUCF(fileBuf,root,yyFileName,FALSE);
185  return;
186  }
187  if (altera_qsf)
188  {
189  VhdlDocGen::parseUCF(fileBuf,root,yyFileName,TRUE);
190  return;
191  }
192  libUse.setAutoDelete(true);
193  yyLineNr=1;
194  VhdlParser::current_root=root;
195  VhdlParser::lastCompound=0;
196  VhdlParser::lastEntity=0;
197  VhdlParser::currentCompound=0;
198  VhdlParser::lastEntity=0;
199  VhdlParser::current=new Entry();
200  VhdlParser::initEntry(VhdlParser::current);
201  groupEnterFile(fileName,yyLineNr);
202  lineParse=new int[200]; // Dimitri: dangerous constant: should be bigger than largest token id in VhdlParserConstants.h
203  VhdlParserIF::parseVhdlfile(fileBuf,inLine);
204 
205  delete VhdlParser::current;
206  VhdlParser::current=0;
207 
208  if (!inLine)
210 
211  delete[] lineParse;
212  yyFileName.resize(0);
213  libUse.clear();
215 }
216 
218 {
219  yyLineNr++;
220 }
221 
222 void VhdlParser::lineCount(const char* text)
223 {
224  for (const char* c=text ; *c ; ++c )
225  {
226  yyLineNr += (*c == '\n') ;
227  }
228 }
229 
231 {
232  if (!str_doc.pending) return;
233 
234  str_doc.pending=FALSE;
235  oldEntry=0; // prevents endless recursion
236  iDocLine=str_doc.iDocLine;
238  iDocLine=-1;
239 }
240 
242 {
243  e->fileName = yyFileName;
244  e->lang = SrcLangExt_VHDL;
246  initGroupInfo(e);
247 }
248 
250 {
255  {
257  }
258  else
259  {
260  if (lastCompound)
261  {
262  lastCompound->addSubEntry(current);
263  }
264  else
265  {
266  if (lastEntity)
267  {
268  lastEntity->addSubEntry(current);
269  }
270  else
271  {
273  }
274  }
275  }
276  previous = current;
277  current = new Entry ;
279 }
280 
282 {
283  int index=doc.find("\\code");
284 
285  if (index>0)
286  {
287  strComment+=doc;
288  startCodeBlock(index);
290  return true;
291  }
292  return false;
293 }
294 
296 {
297  lineCount(doc);
298 
300  {
301  QCString qcs(doc);
302  qcs=qcs.stripWhiteSpace();
303  qcs.stripPrefix("--#");
305  }
306 }
307 
308 
309 void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
310 {
311  int position=0;
312  static bool isIn;
313  QCString doc;
314  doc.append(doc1);
315  // fprintf(stderr,"\n %s",doc.data());
316  if (doc.isEmpty()) return;
317 
318  if (checkMultiComment(doc,yyLineNr))
319  {
320  strComment.resize(0);
321  return;
322  }
323 
324  isIn=checkInlineCode(doc);
325  bool isEndCode=doc.contains("\\endcode");
326  // empty comment --!
327  if (isEndCode)
328  {
329  int end=inputString.find(doc.data(),iCodeLen);
330  makeInlineDoc(end);
331  strComment.resize(0);
332  isIn=false;
333  }
334  if (isIn)
335  {
336  isIn=false;
337  return;
338  }
339 
341 
342  bool needsEntry=FALSE;
344  int lineNr;
345  if (iDocLine==-1)
346  lineNr=yyLineNr;
347 
348  if (oldEntry==current)
349  {
350  //printf("\n find pending message < %s > at line: %d \n ",doc.data(),iDocLine);
351  str_doc.doc=doc;
352  str_doc.iDocLine=iDocLine;
353  str_doc.brief=brief;
354  str_doc.pending=TRUE;
355  return;
356  }
357 
358  oldEntry=current;
359 
360  if (brief)
361  {
363  }
364  else
365  {
367  }
368  // printf("parseCommentBlock file<%s>\n [%s]\n at line [%d] \n ",yyFileName.data(),doc.data(),iDocLine);
369 
370  int j=doc.find("[plant]");
371  if (j>=0)
372  {
373  doc=doc.remove(j,7);
374  current->stat=true;
375  }
376 
377  while (parseCommentBlock(
378  g_thisParser,
379  current,
380  doc, // text
381  yyFileName, // file
382  iDocLine, // line of block start
383  brief,
384  0,
385  FALSE,
386  protection,
387  position,
388  needsEntry
389  )
390  )
391  {
392  //printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position);
393  if (needsEntry) newEntry();
394  }
395  if (needsEntry)
396  {
397  if (varr)
398  {
399  varr=FALSE;
402  varName="";
403  }
404  newEntry();
405  }
406  iDocLine=-1;
407  strComment.resize(0);
408 }
409 
411 {
412  varName=text;
413  varr=TRUE;
414 }
415 
416 void VhdlParser::addCompInst(const char *n, const char* instName, const char* comp,int iLine)
417 {
420  current->startLine=iLine;
421  current->bodyLine=iLine;
422  current->type=instName; // foo:instname e.g proto or work. proto(ttt)
423  current->exception=genLabels.lower(); // |arch|label1:label2...
424  current->name=n; // foo
425  if (lastCompound)
426  {
427  current->args=lastCompound->name; // architecture name
428  }
429  current->includeName=comp; // component/enity/configuration
430  int u=genLabels.find("|",1);
431  if (u>0)
432  {
433  current->write=genLabels.right(genLabels.length()-u);
434  current->read=genLabels.left(u);
435  }
436  //printf (" \n genlable: [%s] inst: [%s] name: [%s] %d\n",n,instName,comp,iLine);
437 
438  if (lastCompound)
439  {
440  current->args=lastCompound->name;
441  if (true) // !findInstant(current->type))
442  {
444  instFiles.append(new Entry(*current));
445  }
446 
447  Entry *temp=current; // hold current pointer (temp=oldEntry)
448  current=new Entry; // (oldEntry != current)
449  delete temp;
450  }
451  else
452  {
453  newEntry();
454  }
455 }
456 
457 void VhdlParser::addVhdlType(const char *n,int startLine,int section,
458  uint64 spec,const char* args,const char* type,Protection prot)
459 {
460  QCString name(n);
461  if (isFuncProcProced() || VhdlDocGen::getFlowMember()) return;
462 
463  if (parse_sec==GEN_SEC)
464  {
465  spec= VhdlDocGen::GENERIC;
466  }
467 
468  QStringList ql=QStringList::split(",",name,FALSE);
469 
470  for (uint u=0;u<ql.count();u++)
471  {
472  current->name=ql[u].utf8();
473  current->startLine=startLine;
474  current->bodyLine=startLine;
475  current->section=section;
476  current->spec=spec;
478  if (current->args.isEmpty())
479  {
480  current->args=args;
481  }
482  current->type=type;
483  current->protection=prot;
484 
485  if (!lastCompound && (section==Entry::VARIABLE_SEC) && (spec == VhdlDocGen::USE || spec == VhdlDocGen::LIBRARY) )
486  {
487  libUse.append(new Entry(*current));
488  current->reset();
489  }
490  newEntry();
491  }
492 }
493 
494 void VhdlParser::createFunction(const char *imp,uint64 spec,const char *fn)
495 {
496  QCString impure(imp);
497  QCString fname(fn);
498  current->spec=spec;
500 
501  if (impure=="impure" || impure=="pure")
502  {
503  current->exception=impure;
504  }
505 
506  if (parse_sec==GEN_SEC)
507  {
510  }
511 
512  if (currP==VhdlDocGen::PROCEDURE)
513  {
514  current->name=impure;
515  current->exception="";
516  }
517  else
518  {
519  current->name=fname;
520  }
521 
522  if (spec==VhdlDocGen::PROCESS)
523  {
524  current->args=fname;
525  current->name=impure;
527  if (!fname.isEmpty())
528  {
529  QStringList q1=QStringList::split(",",fname);
530  for (uint ii=0;ii<q1.count();ii++)
531  {
532  Argument *arg=new Argument;
533  arg->name=q1[ii].utf8();
534  current->argList->append(arg);
535  }
536  }
537  return;
538  }
539  }
540 
541 
543 {
544  if (currP==VhdlDocGen::FUNCTION ||
545  currP==VhdlDocGen::PROCEDURE ||
546  currP==VhdlDocGen::PROCESS
547  )
548  {
549  return TRUE;
550  }
551  return FALSE;
552 }
553 
555 {
556  label+="|";
557  label+=val;
558 }
559 
561 {
562  int i=q.findRev("|");
563  if (i<0) return "";
564  q = q.left(i);
565  return q;
566 }
567 
568 void VhdlParser::addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf)
569 {
570  VhdlConfNode* co=0;
571  QCString ent;
572  ent=a;
573 
574  if (b)
575  {
576  ent=b;
577  }
578  int level=0;
579 
580  if (!configL.isEmpty())
581  {
582  VhdlConfNode* vc=configL.getLast();
583  level=vc->level;
584  if (levelCounter==0)
585  {
586  pushLabel(forL,ent);
587  }
588  else if (level<levelCounter)
589  {
590  if (!isLeaf)
591  {
592  pushLabel(forL,ent);
593  }
594  }
595  else if (level>levelCounter)
596  {
597  forL=popLabel(forL);
598  }
599  }
600  else
601  {
602  pushLabel(forL,ent);
603  }
604 
605  if (inlineConf)
606  {
607  confName=lastCompound->name;
608  }
609 
610  //fprintf(stderr,"\n[%s %d %d]\n",forL.data(),levelCounter,level);
611  co=new VhdlConfNode(a,b,confName.lower().data(),forL.lower().data(),isLeaf);
612 
613  if (inlineConf)
614  {
615  co->isInlineConf=TRUE;
616  }
617 
618  configL.append(co);
619 }
620 
621 
622 void VhdlParser::addProto(const char *s1,const char *s2,const char *s3,
623  const char *s4,const char *s5,const char *s6)
624 {
625  (void)s5; // avoid unused warning
626  QCString name=s2;
627  QStringList ql=QStringList::split(",",name,FALSE);
628 
629  for (uint u=0;u<ql.count();u++)
630  {
631  Argument *arg=new Argument;
632  arg->name=ql[u].utf8();
633  if (s3)
634  {
635  arg->type=s3;
636  }
637  arg->type+=" ";
638  arg->type+=s4;
639  if (s6)
640  {
641  arg->type+=s6;
642  }
643  if (parse_sec==GEN_SEC && param_sec==0)
644  {
645  arg->defval="gen!";
646  }
647 
648  if (parse_sec==PARAM_SEC)
649  {
650  // assert(false);
651  }
652 
653  arg->defval+=s1;
654  arg->attrib="";//s6;
655 
656  current->argList->append(arg);
657  current->args+=s2;
658  current->args+=",";
659  }
660 }
661 
662 
663 /*
664  * adds the library|use statements to the next class (entity|package|architecture|package body
665  * library ieee
666  * entity xxx
667  * .....
668  * library
669  * package
670  * enity zzz
671  * .....
672  * and so on..
673  */
675 {
676  QList<Entry> epp=libUse;
677  EntryListIterator eli(epp);
678  Entry *rt;
679  for (;(rt=eli.current());++eli)
680  {
681  if (addLibUseClause(rt->name))
682  {
683  Entry *current;
684  EntryListIterator eLib(*root->children());
685  bool bFound=FALSE;
686  for (eLib.toFirst();(current=eLib.current());++eLib)
687  {
688  if (VhdlDocGen::isVhdlClass(current))
689  {
690  if (current->startLine > rt->startLine)
691  {
692  bFound=TRUE;
693  current->addSubEntry(new Entry(*rt));
694  break;
695  }
696  }
697  }//for
698  if (!bFound)
699  {
700  root->addSubEntry(new Entry(*rt));
701  }
702  } //if
703  }// for
704 }//MapLib
705 
707 {
708  static bool showIEEESTD=Config_getBool("FORCE_LOCAL_INCLUDES");
709 
710  if (showIEEESTD) // all standard packages and libraries will not be shown
711  {
712  if (type.lower().stripPrefix("ieee")) return FALSE;
713  if (type.lower().stripPrefix("std")) return FALSE;
714  }
715  return TRUE;
716 }
717 
719 {
720  return yyLineNr;
721 }
722 
724 {
725  lineParse[tok]=yyLineNr;
726 }
727 
729 {
730  int val=lineParse[tok];
731  if (val<0) val=0;
732  //assert(val>=0 && val<=yyLineNr);
733  return val;
734 }
735 
736 
738 {
740  {
741  return;
742  }
743  QCString q,ret;
744 
745  if (currP==VhdlDocGen::FUNCTION)
746  {
747  q=":function( ";
749  q+=")";
750  }
751  else if (currP==VhdlDocGen::PROCEDURE)
752  {
753  q=":procedure (";
755  q+=")";
756  }
757  else
758  {
759  q=":process( "+tempEntry->args;
760  q+=")";
761  }
762 
764 
766 
767  if (currP==VhdlDocGen::FUNCTION)
768  {
769  ret="end function ";
770  }
771  else if (currP==VhdlDocGen::PROCEDURE)
772  {
773  ret="end procedure";
774  }
775  else
776  {
777  ret="end process ";
778  }
779 
781  // FlowChart::printFlowList();
783  currP=0;
784 }
785 
787 {
789 }
790 
792 {
793  bool isEndCode=qcs.contains("\\endcode");
794 
795  int index = qcs.find("\\code");
796  if (isEndCode)
797  {
798  int end = inputString.find(qcs.data(),iCodeLen);
799  makeInlineDoc(end);
800  }
801  else if (index > 0)
802  {
803  // assert(false);
804  strComment=qcs;
805  startCodeBlock(index);
806  strComment.resize(0);
807  }
808 
809  if (!isEndCode && index==-1)
810  {
811  int j=qcs.find("--!");
812  qcs=qcs.right(qcs.length()-3-j);
813  if (!checkMultiComment(qcs,iDocLine))
814  {
816  }
817  }
818 }
819 
820 
822 {
823  QList<Entry> *pTemp=getEntryAtLine(VhdlParser::current_root,line);
824 
825  if (pTemp->isEmpty()) return false;
826 
828  while (!pTemp->isEmpty())
829  {
830  Entry *e=(Entry*)pTemp->getFirst();
831  e->briefLine=line;
832  e->brief+=qcs;
833 
834  pTemp->removeFirst();
835  }
836  return true;
837 }
838 
839 // returns the vhdl parsed types at line xxx
841 {
842  EntryListIterator eli(*ce->children());
843  Entry *rt;
844  for (;(rt=eli.current());++eli)
845  {
846  if (rt->bodyLine==line)
847  {
848  lineEntry.insert(0,rt);
849  }
850 
851  getEntryAtLine(rt,line);
852  }
853  return &lineEntry;
854 }
855 
static QCString name
Definition: declinfo.cpp:673
end
while True: pbar.update(maxval-len(onlies[E][S])) #print iS, "/", len(onlies[E][S]) found = False for...
QCString type
Definition: arguments.h:67
bool resize(uint newlen)
Definition: qcstring.h:225
QCString includeName
include name (3 arg of \class)
Definition: entry.h:259
static QCString getIndexWord(const char *, int index)
void reset()
Definition: entry.cpp:217
static bool varr
bool removeFirst()
Definition: qlist.h:79
static Entry * current_root
Definition: VhdlParser.h:8944
static void oneLineComment(QCString qcs)
QCString stripWhiteSpace() const
Definition: qcstring.cpp:295
This file contains a number of basic enums and types.
uint64 spec
class/member specifiers
Definition: entry.h:243
bool stat
static ?
Definition: entry.h:245
static void pushLabel(QCString &, QCString &)
bool brief
static QCString varName
QList< VhdlConfNode > & getVhdlConfiguration()
bool isEmpty() const
Definition: qcstring.h:189
static void deleteAllChars(QCString &s, char c)
void parsePrototype(const char *text)
static QCString lab
Definition: VhdlParser.h:8954
uint length() const
Definition: qcstring.h:195
static Entry * oldEntry
int contains(char c, bool cs=TRUE) const
Definition: qcstring.cpp:153
void append(const type *d)
Definition: qlist.h:73
static bool isFuncProcProced()
Definition: entry.h:63
Abstract interface for programming language parsers.
Definition: parserintf.h:38
QCString read
property read accessor
Definition: entry.h:271
Definition: types.h:26
static void initEntry(Entry *e)
static int * lineParse
QCString defval
Definition: arguments.h:71
static QCString compSpec
Definition: VhdlParser.h:8949
int briefLine
line number at which the brief desc. was found
Definition: entry.h:264
QList< Entry > & getVhdlInstList()
static void lineCount()
void parseInput(const char *fileName, const char *fileBuf, Entry *root, bool sameTranslationUnit, QStrList &filesInSameTranslationUnit)
int docLine
line number at which the documentation was found
Definition: entry.h:261
const bool FALSE
Definition: qglobal.h:370
ArgumentList * argList
member arguments as a list
Definition: entry.h:254
void addSubEntry(Entry *e)
Definition: entry.cpp:206
QCString name
member name
Definition: entry.h:237
static const MemberDef * getFlowMember()
Definition: vhdldocgen.cpp:95
static struct @12 str_doc
STL namespace.
bool pending
QList< Entry > * getEntryAtLine(const Entry *ce, int line)
static void handleFlowComment(const char *)
static void addConfigureNode(const char *a, const char *b, bool, bool isLeaf, bool inlineConf)
QCString left(uint len) const
Definition: qcstring.cpp:213
bool stripPrefix(const char *prefix)
Definition: qcstring.cpp:201
int find(char c, int index=0, bool cs=TRUE) const
Definition: qcstring.cpp:41
static QCString args
Definition: declinfo.cpp:674
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition: qcstring.cpp:95
static void addVhdlType(const char *n, int startLine, int section, uint64 spec, const char *args, const char *type, Protection prot)
uint count() const
Definition: qvaluelist.h:394
static QCString getRecordNumber()
static bool doxComment
static void resetCodeVhdlParserState()
static void handleCommentBlock(const QCString &doc, bool brief)
bool insert(uint i, const type *d)
Definition: qlist.h:70
static int iCodeLen
static Entry * current_root
static int yyLineNr
static void alignFuncProc(QCString &q, const ArgumentList *al, bool isFunc)
static void mapLibPackage(Entry *root)
This class contains the information about the argument of a function or template. ...
Definition: arguments.h:28
static Entry * tempEntry
Definition: scanner.cpp:10867
QAsciiDict< Entry > fn
type * getLast() const
Definition: qlist.h:96
void groupEnterFile(const char *fileName, int)
static bool isVhdlClass(const Entry *cu)
Definition: vhdldocgen.h:241
const double e
fileName
Definition: dumpTree.py:9
QCString brief
brief description (doc block)
Definition: entry.h:263
int endBodyLine
line number where the definition ends
Definition: entry.h:277
A list of strings.
Definition: qstringlist.h:51
static QCString yyFileName
bool isEmpty() const
Definition: qlist.h:67
const QList< Entry > * children() const
Definition: entry.h:210
static QCString strComment
QCString right(uint len) const
Definition: qcstring.cpp:231
std::void_t< T > n
const double a
static void addCompInst(const char *n, const char *instName, const char *comp, int iLine)
static QCString popLabel(QCString &q)
QCString exception
throw specification
Definition: entry.h:274
int startLine
start line of entry in the source
Definition: entry.h:283
QCString & prepend(const char *s)
Definition: qcstring.cpp:387
static QCString inputString
QCString args
member argument string
Definition: entry.h:252
QCString write
property write accessor
Definition: entry.h:272
A bunch of utility functions.
static Entry * current
Definition: VhdlParser.h:8948
void clear()
Definition: qlist.h:82
static Entry * current
const char * data() const
Definition: qcstring.h:207
type * current() const
Definition: qlist.h:146
Protection protection
class protection
Definition: entry.h:241
#define Config_getBool(val)
Definition: config.cpp:664
static Entry * gBlock
bool isConstraintFile(const QCString &fileName, const QCString &ext)
bool checkMultiComment(QCString &qcs, int line)
static void parseUCF(const char *input, Entry *entity, QCString f, bool vendor)
static ParserInterface * g_thisParser
type * getFirst() const
Definition: qlist.h:95
static void prepareComment(QCString &)
static void addFlowChart(int type, const char *text, const char *exp, const char *label=NULL)
void initGroupInfo(Entry *e)
static QList< Entry > instFiles
QCString mid(uint index, uint len=0xffffffff) const
Definition: qcstring.cpp:246
static QCString confName
Definition: VhdlParser.h:8952
static void initEntry()
QCString inbodyDocs
documentation inside the body of a function
Definition: entry.h:266
QCString doc
documentation block (partly parsed)
Definition: entry.h:260
bool parseCommentBlock(ParserInterface *parser, Entry *curEntry, const QCString &comment, const QCString &fileName, int &lineNr, bool isBrief, bool isAutoBriefOn, bool isInbody, Protection &prot, int &position, bool &newEntryNeeded)
static Entry * lastCompound
Definition: VhdlParser.h:8947
bool checkInlineCode(QCString &doc)
QCString attrib
Definition: arguments.h:66
static void writeFlowChart()
static QCString currName
Definition: VhdlParser.h:8950
static QList< Entry > lineEntry
static QList< VhdlConfNode > configL
static void parseVhdlfile(const char *inputBuffer, bool inLine)
static bool addLibUseClause(const QCString &type)
QCString name
Definition: arguments.h:69
void line(double t, double *p, double &x, double &y, double &z)
Protection protection
static void createFunction(const char *impure, uint64 spec, const char *fname)
static QCString type
Definition: declinfo.cpp:672
QCString fileName
file this entry was extracted from
Definition: entry.h:282
QCString doc
void makeInlineDoc(int endCode)
static Entry * currentCompound
Definition: VhdlParser.h:8959
static bool * b
Definition: config.cpp:1043
void isVhdlDocPending()
Protection
Definition: types.h:26
static Entry * lastEntity
Definition: VhdlParser.h:8946
Entry * getVhdlCompound()
static void setLineParsed(int tok)
static Entry * tempEntry
Definition: VhdlParser.h:8945
static void setMultCommentLine()
static void handleCommentBlock(const char *doc, bool brief)
static QCString forL
Definition: VhdlParser.h:8955
static Entry * previous
QCString lower() const
Definition: qcstring.cpp:263
static QList< Entry > libUse
SrcLangExt lang
programming language in which this entry was found
Definition: entry.h:286
static int iDocLine
static QStringList split(const QString &sep, const QString &str, bool allowEmptyEntries=FALSE)
unsigned uint
Definition: qglobal.h:351
void setAutoDelete(bool enable)
Definition: qlist.h:99
QCString & remove(uint index, uint len)
Definition: qcstring.cpp:391
Interface for the comment block parser.
void startCodeBlock(int index)
const bool TRUE
Definition: qglobal.h:371
static void newEntry()
Definition: pyscanner.cpp:1515
bool isInlineConf
Definition: vhdljjparser.h:93
QCString & append(const char *s)
Definition: qcstring.cpp:383
QCString type
member type
Definition: entry.h:236
int section
entry type (see Sections);
Definition: entry.h:235
int bodyLine
line number of the definition in the source
Definition: entry.h:276
unsigned long long uint64
Definition: VhdlParser.h:8942
static QCString genLabels
Definition: VhdlParser.h:8953
static void addProto(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6)