Doxygen
FlowChart类 参考

#include <vhdldocgen.h>

+ FlowChart 的协作图:

Public 类型

enum  nodeTypes {
  IF_NO = 1<<1, ELSIF_NO = 1<<2, ELSE_NO = 1<<3, CASE_NO = 1<<4,
  WHEN_NO = 1<<5, EXIT_NO = 1<<6, END_NO = 1<<7, TEXT_NO = 1<<8,
  START_NO = 1<<9, ENDIF_NO = 1<<10, FOR_NO = 1<<11, WHILE_NO = 1<<12,
  END_LOOP = 1<<13, END_CASE = 1<<14, VARIABLE_NO = 1<<15, RETURN_NO = 1<<16,
  LOOP_NO = 1<<17, NEXT_NO = 1<<18, EMPTY_NO = 1<<19, COMMENT_NO = 1<<20,
  BEGIN_NO = 1<<21
}
 

Public 成员函数

 FlowChart (int typ, const QCString &t, const QCString &ex, const QCString &label=QCString())
 
 ~FlowChart ()
 

静态 Public 成员函数

static void createSVG ()
 
static void startDot (TextStream &t)
 
static void endDot (TextStream &t)
 
static void codify (TextStream &t, const QCString &str)
 
static void writeShape (TextStream &t, const FlowChart &fl)
 
static void writeEdge (TextStream &t, int fl_from, int fl_to, int i, bool bFrom=FALSE, bool bTo=FALSE)
 
static void writeEdge (TextStream &t, const FlowChart &fl_from, const FlowChart &fl_to, int i)
 
static void writeFlowLinks (TextStream &t)
 
static QCString getNodeName (int n)
 
static void colTextNodes ()
 
static size_t getNextIfLink (const FlowChart &, size_t)
 
static size_t getNextNode (size_t index, int stamp)
 
static size_t findNode (size_t index, int stamp, int type)
 
static size_t findNode (size_t index, int type)
 
static size_t findNextLoop (size_t j, int stamp)
 
static size_t findPrevLoop (size_t j, int stamp, bool endif=FALSE)
 
static size_t findLabel (size_t j, const QCString &)
 
static void delFlowList ()
 
static const char * getNodeType (int c)
 
static void addFlowChart (int type, const QCString &text, const QCString &exp, const QCString &label=QCString())
 
static void moveToPrevLevel ()
 
static int getTimeStamp ()
 
static void writeFlowChart ()
 
static void alignFuncProc (QCString &q, const ArgumentList &al, bool isFunc)
 
static QCString convertNameToFileName ()
 
static void printNode (const FlowChart &n)
 
static void printFlowTree ()
 
static void buildCommentNodes (TextStream &t)
 
static void alignCommentNode (TextStream &t, QCString com)
 
static void printUmlTree ()
 
static QCString printPlantUmlNode (const FlowChart &flo, bool, bool)
 

Private 属性

int id = 0
 
int stamp = 0
 
int type = 0
 
int line = 0
 
QCString label
 
QCString text
 
QCString exp
 

详细描述

在文件 vhdldocgen.h262 行定义.

成员枚举类型说明

◆ nodeTypes

枚举值
IF_NO 
ELSIF_NO 
ELSE_NO 
CASE_NO 
WHEN_NO 
EXIT_NO 
END_NO 
TEXT_NO 
START_NO 
ENDIF_NO 
FOR_NO 
WHILE_NO 
END_LOOP 
END_CASE 
VARIABLE_NO 
RETURN_NO 
LOOP_NO 
NEXT_NO 
EMPTY_NO 
COMMENT_NO 
BEGIN_NO 

在文件 vhdldocgen.h265 行定义.

265  {
266  IF_NO = 1<<1,
267  ELSIF_NO = 1<<2,
268  ELSE_NO = 1<<3,
269  CASE_NO = 1<<4,
270  WHEN_NO = 1<<5,
271  EXIT_NO = 1<<6,
272  END_NO = 1<<7,
273  TEXT_NO = 1<<8,
274  START_NO = 1<<9,
275  ENDIF_NO = 1<<10,
276  FOR_NO = 1<<11,
277  WHILE_NO = 1<<12,
278  END_LOOP = 1<<13,
279  END_CASE = 1<<14,
280  VARIABLE_NO = 1<<15,
281  RETURN_NO = 1<<16,
282  LOOP_NO = 1<<17,
283  NEXT_NO = 1<<18,
284  EMPTY_NO = 1<<19,
285  COMMENT_NO = 1<<20,
286  BEGIN_NO = 1<<21
287  };

构造及析构函数说明

◆ FlowChart()

FlowChart::FlowChart ( int  typ,
const QCString t,
const QCString ex,
const QCString label = QCString() 
)

在文件 vhdldocgen.cpp3208 行定义.

3209 {
3210  stamp=ifcounter;
3211 
3212  if (typ & STARTL)
3213  {
3214  ifcounter++;
3215  }
3216 
3217  text=t;
3218  exp=ex;
3219  type=typ;
3220  label=lab;
3221 
3222  if (typ & (ELSE_NO | ELSIF_NO))
3223  {
3224  stamp--;
3225  }
3226 
3227  if (typ & (START_NO | END_NO | VARIABLE_NO))
3228  {
3229  stamp=0;
3230  }
3231 
3232  id=nodeCounter++;
3233 }

引用了 ELSE_NO, ELSIF_NO, END_NO, exp, ifcounter, label, nodeCounter, stamp, START_NO, STARTL, text, type , 以及 VARIABLE_NO.

◆ ~FlowChart()

FlowChart::~FlowChart ( )

在文件 vhdldocgen.cpp3204 行定义.

3205 {
3206 }

成员函数说明

◆ addFlowChart()

void FlowChart::addFlowChart ( int  type,
const QCString text,
const QCString exp,
const QCString label = QCString() 
)
static

在文件 vhdldocgen.cpp3235 行定义.

3236 {
3237  if (!VhdlDocGen::getFlowMember()) return;
3238 
3239  QCString typeString(text);
3240  QCString expression(exp);
3241 
3242 
3243  if (!text.isEmpty())
3244  {
3245  typeString=substitute(typeString,";","\n");
3246  }
3247 
3248  if (!exp.isEmpty())
3249  {
3250  expression=substitute(expression,"\"","\\\"");
3251  }
3252 
3253  if (type & (START_NO | VARIABLE_NO))
3254  {
3255  flowList.insert(flowList.begin(),FlowChart(type,typeString,expression,label));
3256  flowList.front().line=1; // TODO: use getLine(); of the parser
3257  }
3258  else
3259  {
3260  flowList.emplace_back(type,typeString,expression,label);
3261  flowList.back().line=1; // TODO: use getLine(); of the parser
3262  }
3263 }

引用了 exp, flowList, VhdlDocGen::getFlowMember(), QCString::isEmpty(), label, START_NO, substitute(), text, type , 以及 VARIABLE_NO.

被这些函数引用 VHDLOutlineParser::createFlow() , 以及 VHDLOutlineParser::handleFlowComment().

◆ alignCommentNode()

void FlowChart::alignCommentNode ( TextStream t,
QCString  com 
)
static

在文件 vhdldocgen.cpp3060 行定义.

3061 {
3062  uint max=0;
3063  QCString s;
3064  StringVector ql=split(com.str(),"\n");
3065  for (size_t j=0;j<ql.size();j++)
3066  {
3067  s=ql[j];
3068  if (max<s.length()) max=s.length();
3069  }
3070 
3071  s=ql.back();
3072  int diff=max-s.length();
3073 
3074  QCString n(1);
3075  if (diff>0)
3076  {
3077  n.fill(' ',2*diff);
3078  n.append(".");
3079  s+=n;
3080  ql.pop_back();
3081  ql.push_back(s.str());
3082  }
3083 
3084  for (size_t j=0;j<ql.size();j++)
3085  {
3086  s=ql[j];
3087  if (j<ql.size()-1)
3088  {
3089  s+="\n";
3090  }
3091  FlowChart::codify(t,s);
3092  }
3093 }

引用了 QCString::append(), codify(), QCString::fill(), QCString::length(), split() , 以及 QCString::str().

被这些函数引用 buildCommentNodes() , 以及 writeShape().

◆ alignFuncProc()

void FlowChart::alignFuncProc ( QCString q,
const ArgumentList al,
bool  isFunc 
)
static

在文件 vhdldocgen.cpp3614 行定义.

3615 {
3616  size_t index=al.size();
3617  if (index==0) return;
3618 
3619  int len=q.length()+VhdlDocGen::getFlowMember()->name().length();
3620  QCString prev,temp;
3621  prev.fill(' ',len+1);
3622 
3623  q+="\n";
3624  for (const Argument &arg : al)
3625  {
3626  QCString attl=arg.defval+" ";
3627  attl+=arg.name+" ";
3628 
3629  if (!isFunc)
3630  {
3631  attl+=arg.attrib+" ";
3632  }
3633  else
3634  {
3635  attl+=" in ";
3636  }
3637  attl+=arg.type;
3638  if (--index) attl+=",\n"; else attl+="\n";
3639 
3640  attl.prepend(prev);
3641  temp+=attl;
3642  }
3643 
3644  q+=temp;
3645 }

引用了 QCString::fill(), VhdlDocGen::getFlowMember(), QCString::length(), Definition::name(), QCString::prepend() , 以及 ArgumentList::size().

被这些函数引用 VHDLOutlineParser::createFlow().

◆ buildCommentNodes()

void FlowChart::buildCommentNodes ( TextStream t)
static

在文件 vhdldocgen.cpp3096 行定义.

3097 {
3098  size_t size=flowList.size();
3099  bool begin=false;
3100 
3101  if (size>0)
3102  {
3103  for (uint j=0;j < size-1 ;j++)
3104  {
3105  FlowChart &fll = flowList[j];
3106  if (fll.type & COMMENT_NO)
3107  {
3108  FlowChart &to=flowList[j+1];
3109  if (to.type & COMMENT_NO)
3110  {
3111  to.label = fll.label+"\n"+to.label;
3112  flowList.erase(flowList.begin()+j);
3113  if (size>0) size--;
3114  if (j>0) j--;
3115  }
3116  }
3117  }// for
3118  }
3119 
3120  for (size_t j=0;j <flowList.size() ;j++)
3121  {
3122  const FlowChart &fll=flowList[j];
3123 
3124  if (fll.type & BEGIN_NO)
3125  {
3126  begin = true;
3127  continue;
3128  }
3129 
3130  if (fll.type & COMMENT_NO)
3131  {
3132  const FlowChart *to;
3133  if (!begin)
3134  {
3135  // comment between function/process .. begin is linked to start node
3136  to = &flowList[0];
3137  }
3138  else if (j>0 && flowList[j-1].line==fll.line)
3139  {
3140  to = &flowList[j-1];
3141  }
3142  else
3143  {
3144  to = &flowList[j+1];
3145  }
3146  t << getNodeName(fll.id);
3147  t << "[shape=none, label=<\n";
3148  t << "<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
3149  t << "<TR><TD BGCOLOR=\"";
3150  t << flowCol.comment;
3151  t << "\" > ";
3152 
3154  t << " </TD></TR></TABLE>>];";
3155  writeEdge(t,fll.id,to->id,2);
3156  }
3157  }// for
3158 
3159  // delete comment nodes;
3160  size=flowList.size();
3161  for (size_t j=0; j<size; j++)
3162  {
3163  FlowChart &fll=flowList[j];
3164  if (fll.type & (COMMENT_NO | BEGIN_NO))
3165  {
3166  size_t diff=FLOWLEN-(j+1);
3167 
3168  if ((fll.type & COMMENT_NO) && diff > 1)
3169  {
3170  flowList[j+1].label = fll.label;
3171  }
3172 
3173  flowList.erase(flowList.begin()+j);
3174 
3175  if (size>0) size--;
3176  if (j>0) j--;
3177  }
3178  }// for;
3179 }

引用了 alignCommentNode(), begin(), BEGIN_NO, COMMENT_NO, flowCol, FLOWLEN, flowList, getNodeName(), id, label, line, type , 以及 writeEdge().

被这些函数引用 writeFlowChart().

◆ codify()

void FlowChart::codify ( TextStream t,
const QCString str 
)
static

在文件 vhdldocgen.cpp3181 行定义.

3182 {
3183  if (!str.isEmpty())
3184  {
3185  const char *p=str.data();
3186  char c;
3187  while (*p)
3188  {
3189  c=*p++;
3190  switch(c)
3191  {
3192  case '<': t << "&lt;"; break;
3193  case '>': t << "&gt;"; break;
3194  case '&': t << "&amp;"; break;
3195  case '\'': t << "&#39;"; break;
3196  case '"': t << "&quot;"; break;
3197  case '\n': t <<"<BR ALIGN=\"LEFT\"/>"; break;
3198  default: t << c; break;
3199  }
3200  }
3201  }
3202 }//codify

引用了 QCString::data() , 以及 QCString::isEmpty().

被这些函数引用 alignCommentNode().

◆ colTextNodes()

void FlowChart::colTextNodes ( )
static

在文件 vhdldocgen.cpp2996 行定义.

2997 {
2998  FlowChart *flno = nullptr;
2999  bool found=FALSE;
3000  for (size_t j=0;j<flowList.size();j++)
3001  {
3002  FlowChart &flo = flowList[j];
3003  if (flo.type&TEXT_NO)
3004  {
3005  if (!found)
3006  {
3007  flno=&flo;
3008  }
3009  else
3010  {
3011  flno->text+=flo.text;
3012  flowList.erase(flowList.begin()+j);
3013  if (j>0) j=j-1;
3014  }
3015  found=TRUE;
3016  }
3017  else
3018  {
3019  found=FALSE;
3020  }
3021  }
3022 
3023  // find if..endif without text
3024  // if..elseif without text
3025  if (!flowList.empty())
3026  {
3027  for (size_t j=0;j<flowList.size()-1;j++)
3028  {
3029  const FlowChart &flo = flowList[j];
3030  int kind = flo.type;
3031  if ( (kind & IFF) || (flo.type & ELSE_NO))
3032  {
3033  const FlowChart &ftemp = flowList[j+1];
3034  if (ftemp.type & EMPTY)
3035  {
3036  FlowChart fc(TEXT_NO,"empty ",QCString());
3037  fc.stamp = flo.stamp;
3038  flowList.insert(flowList.begin()+j+1,fc);
3039  }
3040  }
3041  }
3042  }
3043 
3044 }// colTextNode

引用了 ELSE_NO, EMPTY, FALSE, flowList, IFF, stamp, text, TEXT_NO, TRUE , 以及 type.

被这些函数引用 writeFlowChart().

◆ convertNameToFileName()

QCString FlowChart::convertNameToFileName ( )
static

在文件 vhdldocgen.cpp3351 行定义.

3352 {
3353  return VhdlDocGen::getFlowMember()->name();
3354 }

引用了 VhdlDocGen::getFlowMember() , 以及 Definition::name().

被这些函数引用 createSVG(), printUmlTree() , 以及 HtmlDocVisitor::visitPre().

◆ createSVG()

void FlowChart::createSVG ( )
static

在文件 vhdldocgen.cpp3385 行定义.

3386 {
3387  QCString qcs("/");
3388  QCString ov = Config_getString(HTML_OUTPUT);
3389 
3390  qcs+=FlowChart::convertNameToFileName()+".svg";
3391 
3392  //const MemberDef *m=VhdlDocGen::getFlowMember();
3393  //if (m)
3394  // fprintf(stderr,"\n creating flowchart : %s %s in file %s \n",theTranslator->trVhdlType(m->getMemberSpecifiers(),TRUE),qPrint(m->name()),qPrint(m->getFileDef()->name()));
3395 
3396  QCString dir=" -o \""+ov+qcs+"\"";
3397  ov+="/flow_design.dot";
3398 
3399  QCString vlargs="-Tsvg \""+ov+"\" "+dir ;
3400 
3401  if (Portable::system(Config_getString(DOT_PATH) + "dot",vlargs)!=0)
3402  {
3403  err("could not create dot file");
3404  }
3405 }

引用了 Config_getString, convertNameToFileName(), err() , 以及 Portable::system().

被这些函数引用 writeFlowChart().

◆ delFlowList()

void FlowChart::delFlowList ( )
static

在文件 vhdldocgen.cpp3053 行定义.

3054 {
3055  ifcounter=0;
3056  nodeCounter=0;
3057  flowList.clear();
3058 }

引用了 flowList, ifcounter , 以及 nodeCounter.

被这些函数引用 writeFlowChart().

◆ endDot()

void FlowChart::endDot ( TextStream t)
static

在文件 vhdldocgen.cpp3415 行定义.

3416 {
3417  t << " } \n";
3418 }

被这些函数引用 writeFlowChart().

◆ findLabel()

size_t FlowChart::findLabel ( size_t  j,
const QCString label 
)
static

在文件 vhdldocgen.cpp3687 行定义.

3688 {
3689  for (size_t j=index;j>0;j--)
3690  {
3691  const FlowChart &flo = flowList[j];
3692  if ((flo.type & LOOP) && !flo.label.isEmpty() && qstricmp(flo.label,label)==0)
3693  {
3694  return j;
3695  }
3696  }
3697  err("could not find label: %s",qPrint(label));
3698  return 0;
3699 }

引用了 err(), flowList, QCString::isEmpty(), label, LOOP, qPrint(), qstricmp() , 以及 type.

被这些函数引用 writeFlowLinks().

◆ findNextLoop()

size_t FlowChart::findNextLoop ( size_t  j,
int  stamp 
)
static

在文件 vhdldocgen.cpp3647 行定义.

3648 {
3649  for (size_t j=index+1; j<flowList.size(); j++)
3650  {
3651  const FlowChart &flo = flowList[j];
3652  if (flo.stamp==stamp)
3653  {
3654  continue;
3655  }
3656  if (flo.type&END_LOOP)
3657  {
3658  return j;
3659  }
3660  }
3661  return flowList.size()-1;
3662 }

引用了 END_LOOP, flowList, stamp , 以及 type.

被这些函数引用 writeFlowLinks().

◆ findNode() [1/2]

size_t FlowChart::findNode ( size_t  index,
int  stamp,
int  type 
)
static

在文件 vhdldocgen.cpp3701 行定义.

3702 {
3703  for (size_t j=index+1; j<flowList.size(); j++)
3704  {
3705  const FlowChart &flo = flowList[j];
3706  if (flo.type==type && flo.stamp==stamp)
3707  {
3708  return j;
3709  }
3710  }
3711  return 0;
3712 }// findNode

引用了 flowList, stamp , 以及 type.

被这些函数引用 getNextIfLink(), getNextNode() , 以及 writeFlowLinks().

◆ findNode() [2/2]

static size_t FlowChart::findNode ( size_t  index,
int  type 
)
static

◆ findPrevLoop()

size_t FlowChart::findPrevLoop ( size_t  j,
int  stamp,
bool  endif = FALSE 
)
static

在文件 vhdldocgen.cpp3664 行定义.

3665 {
3666  for (size_t j=index;j>0;j--)
3667  {
3668  const FlowChart &flo = flowList[j];
3669  if (flo.type & LOOP)
3670  {
3671  if (flo.stamp==stamp && endif)
3672  {
3673  return j;
3674  }
3675  else
3676  {
3677  if (flo.stamp<stamp)
3678  {
3679  return j;
3680  }
3681  }
3682  }
3683  }
3684  return flowList.size()-1;
3685 }

引用了 flowList, LOOP, stamp , 以及 type.

被这些函数引用 writeFlowLinks().

◆ getNextIfLink()

size_t FlowChart::getNextIfLink ( const FlowChart fl,
size_t  index 
)
static

在文件 vhdldocgen.cpp3755 行定义.

3756 {
3757  int stamp=fl.stamp;
3758  size_t start = index+1;
3759  size_t endifNode = findNode(start,stamp,ENDIF_NO);
3760  size_t elseifNode = findNode(start,stamp,ELSIF_NO);
3761  size_t elseNode = findNode(start,stamp,ELSE_NO);
3762 
3763  if (elseifNode>0 && elseifNode<endifNode)
3764  {
3765  return elseifNode;
3766  }
3767 
3768  if (elseNode>0 && elseNode<endifNode)
3769  {
3770  return elseNode+1;
3771  }
3772 
3773  stamp=flowList[endifNode].stamp;
3774  return getNextNode(endifNode,stamp);
3775 }

引用了 ELSE_NO, ELSIF_NO, ENDIF_NO, findNode(), flowList, getNextNode() , 以及 stamp.

被这些函数引用 writeFlowLinks().

◆ getNextNode()

size_t FlowChart::getNextNode ( size_t  index,
int  stamp 
)
static

在文件 vhdldocgen.cpp3714 行定义.

3715 {
3716  for (size_t j=index+1; j<flowList.size(); j++)
3717  {
3718  const FlowChart &flo = flowList[j];
3719  int kind = flo.type;
3720  int s = flo.stamp;
3721  if (s>stamp)
3722  {
3723  continue;
3724  }
3725  if (kind & ENDIF_NO)
3726  {
3727  if (s<stamp && stamp>0)
3728  {
3729  stamp--;
3730  continue;
3731  }
3732  }
3733  if (kind & (ELSE_NO | ELSIF_NO))
3734  {
3735  if (s<stamp && stamp>0)
3736  {
3737  stamp--;
3738  }
3739  j=findNode(j,stamp,ENDIF_NO);
3740  continue;
3741  }
3742  if (kind & WHEN_NO)
3743  {
3744  if (s<stamp && stamp>0)
3745  {
3746  stamp--;
3747  }
3748  return findNode(j,stamp-1,END_CASE);
3749  }
3750  return j;
3751  }
3752  return FLOWLEN;
3753 }

引用了 ELSE_NO, ELSIF_NO, END_CASE, ENDIF_NO, findNode(), FLOWLEN, flowList, stamp, type , 以及 WHEN_NO.

被这些函数引用 getNextIfLink() , 以及 writeFlowLinks().

◆ getNodeName()

QCString FlowChart::getNodeName ( int  n)
static

在文件 vhdldocgen.cpp3046 行定义.

3047 {
3048  QCString node;
3049  node.setNum(n);
3050  return node.prepend("node");
3051 }

引用了 QCString::prepend() , 以及 QCString::setNum().

被这些函数引用 buildCommentNodes(), writeEdge() , 以及 writeShape().

◆ getNodeType()

const char * FlowChart::getNodeType ( int  c)
static

在文件 vhdldocgen.cpp3356 行定义.

3357 {
3358  switch(c)
3359  {
3360  case IF_NO: return "if ";
3361  case ELSIF_NO: return "elsif ";
3362  case ELSE_NO: return "else ";
3363  case CASE_NO: return "case ";
3364  case WHEN_NO: return "when ";
3365  case EXIT_NO: return "exit ";
3366  case END_NO: return "end ";
3367  case TEXT_NO: return "text ";
3368  case START_NO: return "start ";
3369  case ENDIF_NO: return "endif ";
3370  case FOR_NO: return "for ";
3371  case WHILE_NO: return "while ";
3372  case END_LOOP: return "end_loop ";
3373  case END_CASE: return "end_case ";
3374  case VARIABLE_NO: return "variable_decl ";
3375  case RETURN_NO: return "return ";
3376  case LOOP_NO: return "infinite loop ";
3377  case NEXT_NO: return "next ";
3378  case COMMENT_NO: return "comment ";
3379  case EMPTY_NO: return "empty ";
3380  case BEGIN_NO: return "<begin> ";
3381  default: return "--failure--";
3382  }
3383 }

引用了 BEGIN_NO, CASE_NO, COMMENT_NO, ELSE_NO, ELSIF_NO, EMPTY_NO, END_CASE, END_LOOP, END_NO, ENDIF_NO, EXIT_NO, FOR_NO, IF_NO, LOOP_NO, NEXT_NO, RETURN_NO, START_NO, TEXT_NO, VARIABLE_NO, WHEN_NO , 以及 WHILE_NO.

被这些函数引用 printNode().

◆ getTimeStamp()

static int FlowChart::getTimeStamp ( )
static

◆ moveToPrevLevel()

void FlowChart::moveToPrevLevel ( )
static

在文件 vhdldocgen.cpp3265 行定义.

3266 {
3267  if (!VhdlDocGen::getFlowMember()) return;
3268  ifcounter--;
3269 }

引用了 VhdlDocGen::getFlowMember() , 以及 ifcounter.

◆ printFlowTree()

void FlowChart::printFlowTree ( )
static

在文件 vhdldocgen.cpp2988 行定义.

2989 {
2990  for (const auto &flowChart : flowList)
2991  {
2992  printNode(flowChart);
2993  }
2994 }

引用了 flowList , 以及 printNode().

被这些函数引用 writeFlowChart().

◆ printNode()

void FlowChart::printNode ( const FlowChart n)
static

在文件 vhdldocgen.cpp2928 行定义.

2929 {
2930  QCString ui="-";
2931  std::string q;
2932  std::string t;
2933 
2934  ui.fill('-',255);
2935 
2936  if (flo.type & STARTL)
2937  {
2938  if (flo.stamp>0)
2939  {
2940  q=ui.left(2*flo.stamp).str();
2941  }
2942  else
2943  {
2944  q=" ";
2945  }
2946  QCString nn=flo.exp.stripWhiteSpace();
2947  printf("\nYES: %s%s[%d,%d]",qPrint(q),qPrint(nn),flo.stamp,flo.id);
2948  }
2949  else
2950  {
2951  if (flo.type & COMMENT_NO)
2952  {
2953  t=flo.label.str();
2954  }
2955  else
2956  {
2957  t=flo.text.str();
2958  }
2959  static const reg::Ex ep(R"(\s)");
2960  t = reg::replace(t,ep,std::string());
2961  if (t.empty())
2962  {
2963  t=" ";
2964  }
2965  if (flo.stamp>0)
2966  {
2967  q=ui.left(2*flo.stamp).str();
2968  }
2969  else
2970  {
2971  q=" ";
2972  }
2973  if (flo.type & EMPTNODE)
2974  {
2975  printf("\n NO: %s%s[%d,%d]",q.c_str(),FlowChart::getNodeType(flo.type),flo.stamp,flo.id);
2976  }
2977  else if (flo.type & COMMENT_NO)
2978  {
2979  printf("\n NO: %s%s[%d,%d]",t.c_str(),FlowChart::getNodeType(flo.type),flo.stamp,flo.id);
2980  }
2981  else
2982  {
2983  printf("\n NO: %s[%d,%d]",t.c_str(),flo.stamp,flo.id);
2984  }
2985  }
2986 }

引用了 COMMENT_NO, EMPTNODE, exp, QCString::fill(), getNodeType(), id, label, QCString::left(), qPrint(), reg::replace(), stamp, STARTL, QCString::str(), QCString::stripWhiteSpace(), text , 以及 type.

被这些函数引用 printFlowTree().

◆ printPlantUmlNode()

QCString FlowChart::printPlantUmlNode ( const FlowChart flo,
bool  ca,
bool  endL 
)
static

在文件 vhdldocgen.cpp3271 行定义.

3272 {
3273  QCString t;
3276  switch (flo.type)
3277  {
3278  case START_NO: t=":"+text+"|"; break;
3279  case IF_NO : t="\nif ("+exp+") then (yes)"; break;
3280  case ELSIF_NO: t="\nelseif ("+exp+") then (yes)"; break;
3281  case ELSE_NO: t="\nelse"; break;
3282  case CASE_NO: t="\n:"+exp+";"; break;
3283  case WHEN_NO: t="\n";
3284  if (!ca) t+="else";
3285  t+="if ("+exp+") then (yes)";
3286  break;
3287  case EXIT_NO: break;
3288  case END_NO: if (text.contains(" function")==0) t="\n:"+text+";";
3289  break;
3290  case TEXT_NO: t="\n:"+text+"]"; break;
3291  case ENDIF_NO: t="\nendif"; break;
3292  case FOR_NO: t="\nwhile ("+exp+") is (yes)"; break;
3293  case WHILE_NO: t="\nwhile ("+exp+") is (yes)"; break;
3294  case END_LOOP: t="\nendwhile"; break;
3295  case END_CASE: t="\nendif\n:end case;"; break;
3296  case VARIABLE_NO:t="\n:"+text+";"; break;
3297  case RETURN_NO: t="\n:"+text+";";
3298  if (!endL) t+="\nstop";
3299  break;
3300  case LOOP_NO: t="\nwhile (infinite loop)"; break;
3301  case NEXT_NO: break;
3302  case EMPTY_NO: break;
3303  case COMMENT_NO: t="\n note left \n "+flo.label+"\nend note \n"; break;
3304  case BEGIN_NO: t="\n:begin;"; break;
3305  default: assert(false); break;
3306  }
3307  return t;
3308 }

引用了 BEGIN_NO, CASE_NO, COMMENT_NO, QCString::contains(), ELSE_NO, ELSIF_NO, EMPTY_NO, END_CASE, END_LOOP, END_NO, ENDIF_NO, EXIT_NO, exp, FOR_NO, IF_NO, label, LOOP_NO, NEXT_NO, RETURN_NO, START_NO, QCString::stripWhiteSpace(), text, TEXT_NO, type, VARIABLE_NO, WHEN_NO , 以及 WHILE_NO.

被这些函数引用 printUmlTree().

◆ printUmlTree()

void FlowChart::printUmlTree ( )
static

在文件 vhdldocgen.cpp3310 行定义.

3311 {
3312  int caseCounter = 0;
3313  int whenCounter = 0;
3314 
3315  QCString qcs;
3316  size_t size=flowList.size();
3317  for (size_t j=0;j<size;j++)
3318  {
3319  bool endList = j==FLOWLEN;
3320  const FlowChart &flo = flowList[j];
3321  if (flo.type==CASE_NO)
3322  {
3323  caseCounter++;
3324  whenCounter=0;
3325  }
3326 
3327  if (flo.type==END_CASE)
3328  {
3329  caseCounter--;
3330  }
3331 
3332  bool ca = (caseCounter>0 && whenCounter==0);
3333 
3334  qcs+=printPlantUmlNode(flo,ca,endList);
3335 
3336  if (flo.type==WHEN_NO)
3337  {
3338  whenCounter++;
3339  }
3340 
3341  }
3342  qcs+="\n";
3343 
3344  QCString htmlOutDir = Config_getString(HTML_OUTPUT);
3345 
3349 }

引用了 CASE_NO, Config_getString, convertNameToFileName(), END_CASE, FLOWLEN, flowList, PlantumlManager::generatePlantUMLOutput(), PlantumlManager::instance(), printPlantUmlNode(), PlantumlManager::PUML_SVG, type, WHEN_NO , 以及 PlantumlManager::writePlantUMLSource().

被这些函数引用 writeFlowChart().

◆ startDot()

void FlowChart::startDot ( TextStream t)
static

在文件 vhdldocgen.cpp3407 行定义.

3408 {
3409  t << " digraph G { \n";
3410  t << "rankdir=TB \n";
3411  t << "concentrate=true\n";
3412  t << "stylesheet=\"doxygen.css\"\n";
3413 }

被这些函数引用 writeFlowChart().

◆ writeEdge() [1/2]

void FlowChart::writeEdge ( TextStream t,
const FlowChart fl_from,
const FlowChart fl_to,
int  i 
)
static

在文件 vhdldocgen.cpp3567 行定义.

3568 {
3569  bool b=fl_from.type & STARTL;
3570  bool c=fl_to.type & STARTL;
3571 
3572 #ifdef DEBUGFLOW
3573  QCString s1(getNodeName(fl_from.id));
3574  QCString s2(getNodeName(fl_to.id));
3575  auto it = g_keyMap.find(s1.str());
3576  auto it1 = g_keyMap.find(s2.str());
3577  // checks if the link is connected to a valid node
3578  assert(it!=g_keyMap.end());
3579  assert(it1!=g_keyMap.end());
3580 #endif
3581 
3582  writeEdge(t,fl_from.id,fl_to.id,i,b,c);
3583 }

引用了 getNodeName(), id, STARTL, QCString::str(), type , 以及 writeEdge().

◆ writeEdge() [2/2]

void FlowChart::writeEdge ( TextStream t,
int  fl_from,
int  fl_to,
int  i,
bool  bFrom = FALSE,
bool  bTo = FALSE 
)
static

在文件 vhdldocgen.cpp3585 行定义.

3586 {
3587  QCString label,col;
3588 
3589  if (i==0)
3590  {
3591  col=flowCol.yesNodeLink;
3592  label="yes";
3593  }
3594  else if (i==1)
3595  {
3596  col=flowCol.noNodeLink;
3597  label="no";
3598  }
3599  else
3600  {
3601  col=flowCol.textNodeLink;
3602  label="";
3603  }
3604 
3605  t << "edge [color=\""+col+"\",label=\""+label+"\"]\n";
3606  t << getNodeName(fl_from);
3607  if (bFrom) t << ":s";
3608  t << "->";
3609  t << getNodeName(fl_to);
3610  if (bTo) t << ":n";
3611  t << "\n";
3612 }

引用了 flowCol, getNodeName() , 以及 label.

被这些函数引用 buildCommentNodes(), writeEdge() , 以及 writeFlowLinks().

◆ writeFlowChart()

void FlowChart::writeFlowChart ( )
static

在文件 vhdldocgen.cpp3420 行定义.

3421 {
3422  // assert(VhdlDocGen::flowMember);
3423 
3424  QCString ov = Config_getString(HTML_OUTPUT);
3425  QCString fileName = ov+"/flow_design.dot";
3426  std::ofstream f(fileName.str(),std::ofstream::out | std::ofstream::binary);
3427  if (!f.is_open())
3428  {
3429  err("Cannot open file %s for writing\n",qPrint(fileName));
3430  return;
3431  }
3432  TextStream t(&f);
3433 
3434  colTextNodes();
3435  // buildCommentNodes(t);
3436 
3437 #ifdef DEBUGFLOW
3438  printFlowTree();
3439 #endif
3440 
3441  if (!Config_getString(PLANTUML_JAR_PATH).isEmpty())
3442  {
3443  printUmlTree();
3444  delFlowList();
3445  t.flush();
3446  f.close();
3447  return;
3448  }
3449 
3450  startDot(t);
3451  buildCommentNodes(t);
3452  for (const auto &fll : flowList)
3453  {
3454  writeShape(t,fll);
3455  }
3456  writeFlowLinks(t);
3457 
3458  FlowChart::endDot(t);
3459  delFlowList();
3460  t.flush();
3461  f.close();
3463 }// writeFlowChart

引用了 buildCommentNodes(), colTextNodes(), Config_getString, createSVG(), delFlowList(), endDot(), err(), flowList, TextStream::flush(), printFlowTree(), printUmlTree(), qPrint(), startDot(), QCString::str(), writeFlowLinks() , 以及 writeShape().

被这些函数引用 VHDLOutlineParser::createFlow().

◆ writeFlowLinks()

void FlowChart::writeFlowLinks ( TextStream t)
static

在文件 vhdldocgen.cpp3777 行定义.

3778 {
3779  size_t size=flowList.size();
3780  if (size<2) return;
3781 
3782  // write start link
3783  writeEdge(t,flowList[0],flowList[1],2);
3784 
3785  for (size_t j=0;j<size;j++)
3786  {
3787  const FlowChart &fll = flowList[j];
3788  int kind = fll.type;
3789  int stamp = fll.stamp;
3790  if (kind & EEND)
3791  {
3792  continue;
3793  }
3794 
3795  if (kind & IFF)
3796  {
3797  writeEdge(t,fll,flowList[j+1],0);
3798  size_t z=getNextIfLink(fll,j);
3799  // assert(z>-1);
3800  writeEdge(t,fll,flowList[z],1);
3801  }
3802  else if (kind & LOOP_NO)
3803  {
3804  writeEdge(t,fll,flowList[j+1],2);
3805  continue;
3806  }
3807  else if (kind & (CASE_NO | FOR_NO | WHILE_NO))
3808  {
3809  if (kind & CASE_NO)
3810  {
3811  writeEdge(t,fll,flowList[j+1],2);
3812  continue;
3813  }
3814  else
3815  {
3816  writeEdge(t,fll,flowList[j+1],0);
3817  }
3818 
3819  kind=END_LOOP;
3820  size_t z=findNode(j+1,fll.stamp,kind);
3821  z=getNextNode(z,flowList[z].stamp);
3822 
3823  // assert(z>-1);
3824  writeEdge(t,fll,flowList[z],1);
3825  continue;
3826  }
3827  else if (kind & (TEXT_NO | VARIABLE_NO))
3828  {
3829  size_t z=getNextNode(j,stamp);
3830  writeEdge(t,fll,flowList[z],2);
3831  }
3832  else if (kind & WHEN_NO)
3833  {
3834  // default value
3835  if (qstricmp(fll.text.simplifyWhiteSpace(),"others")==0)
3836  {
3837  writeEdge(t,fll,flowList[j+1],2);
3838  continue;
3839  }
3840 
3841 
3842  writeEdge(t,fll,flowList[j+1],0);
3843  size_t u=findNode(j,stamp,WHEN_NO);
3844  size_t v=findNode(j,stamp-1,END_CASE);
3845 
3846  if (u>0 && u<v)
3847  {
3848  writeEdge(t,fll,flowList[u],1);
3849  }
3850  else
3851  {
3852  writeEdge(t,fll,flowList[v],1);
3853  }
3854  }
3855  else if (kind & END_CASE)
3856  {
3857  size_t z=FlowChart::getNextNode(j,fll.stamp);
3858  writeEdge(t,fll,flowList[z],2);
3859  }
3860  else if (kind & END_LOOP)
3861  {
3862  size_t z=findPrevLoop(j,fll.stamp,true);
3863  writeEdge(t,fll,flowList[z],2);
3864  }
3865  else if (kind & RETURN_NO)
3866  {
3867  writeEdge(t,fll,flowList[size-1],2);
3868  }
3869  else if (kind & (EXIT_NO | NEXT_NO))
3870  {
3871  size_t z;
3872  bool b = kind==NEXT_NO;
3873  if (!fll.exp.isEmpty())
3874  {
3875  writeEdge(t,fll,flowList[j+1],1);
3876  }
3877  if (!fll.label.isEmpty())
3878  {
3879  z=findLabel(j,fll.label);
3880  if (b)
3881  {
3882  writeEdge(t,fll,flowList[z],0);
3883  }
3884  else
3885  {
3886  z=findNode(z,flowList[z].stamp,END_LOOP);
3887  z=getNextNode(z,flowList[z].stamp);
3888  writeEdge(t,fll,flowList[z],0);
3889  }
3890  continue;
3891  }
3892  else
3893  {
3894  if (b)
3895  {
3896  z=findPrevLoop(j,fll.stamp);
3897  writeEdge(t,fll,flowList[z],0);
3898  continue;
3899  }
3900  else
3901  {
3902  z =findNextLoop(j,fll.stamp-1);
3903  }
3904  z=getNextNode(z,flowList[z].stamp);
3905  }
3906  writeEdge(t,fll,flowList[z],0);
3907  }
3908  } //for
3909 } //writeFlowLinks

引用了 CASE_NO, EEND, END_CASE, END_LOOP, EXIT_NO, exp, findLabel(), findNextLoop(), findNode(), findPrevLoop(), flowList, FOR_NO, getNextIfLink(), getNextNode(), IFF, QCString::isEmpty(), label, LOOP_NO, NEXT_NO, qstricmp(), RETURN_NO, QCString::simplifyWhiteSpace(), stamp, text, TEXT_NO, type, VARIABLE_NO, WHEN_NO, WHILE_NO , 以及 writeEdge().

被这些函数引用 writeFlowChart().

◆ writeShape()

void FlowChart::writeShape ( TextStream t,
const FlowChart fl 
)
static

在文件 vhdldocgen.cpp3465 行定义.

3466 {
3467  if (fl.type & EEND) return;
3468  QCString var;
3469  if (fl.type & LOOP)
3470  {
3471  var=" loop";
3472  }
3473  else if (fl.type & IFF)
3474  {
3475  var=" then";
3476  }
3477  else
3478  {
3479  var="";
3480  }
3481 
3482  t << getNodeName(fl.id);
3483 
3484 #ifdef DEBUGFLOW
3485  QCString qq(getNodeName(fl.id));
3486  g_keyMap.insert({qq.str(),fl.id});
3487 #endif
3488 
3489  bool dec=(fl.type & DECLN);
3490  bool exit=(fl.type & EXITNEXT);
3491  if (exit && !fl.exp.isEmpty())
3492  {
3493  dec=TRUE;
3494  }
3495  if (dec)
3496  {
3497  QCString exp=fl.exp;
3498  alignText(exp);
3499 
3500  t << " [shape=diamond,style=filled,color=\"";
3501  t << flowCol.decisionNode;
3502  t << "\",label=\" ";
3503  QCString kl;
3504  if (exit) kl=fl.text+" ";
3505 
3506  if (!fl.label.isEmpty())
3507  {
3508  kl+=fl.label+":"+exp+var;
3509  }
3510  else
3511  {
3512  kl+=exp+var;
3513  }
3514 
3516  t << "\"]\n";
3517  }
3518  else if (fl.type & ENDCL)
3519  {
3520  QCString val=fl.text;
3521  t << " [shape=ellipse ,label=\""+val+"\"]\n";
3522  }
3523  else if (fl.type & STARTFIN)
3524  {
3525  QCString val=fl.text;
3526  t << "[shape=box , style=rounded label=<\n";
3527  t << "<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"0\" >\n ";
3528  t << "<TR><TD BGCOLOR=\"";
3529  t<< flowCol.startEndNode;
3530  t<< "\"> ";
3532  t << " </TD></TR></TABLE>>];";
3533  }
3534  else
3535  {
3536  if (fl.text.isEmpty()) return;
3537  bool isVar=(fl.type & FlowChart::VARIABLE_NO);
3538  QCString q=fl.text;
3539 
3540  if (exit)
3541  {
3542  q+=" "+fl.label;
3543  }
3544 
3545  int z=q.findRev("\n");
3546 
3547  if (z==(int)q.length()-1)
3548  {
3549  q=q.remove(z,2);
3550  }
3551  t << "[shape=none margin=0.1, label=<\n";
3552  t << "<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"2\" >\n ";
3553  if (isVar)
3554  {
3555  t << "<TR><TD BGCOLOR=\"" << flowCol.varNode << "\" > ";
3556  }
3557  else
3558  {
3559  t << "<TR><TD BGCOLOR=\"" << flowCol.textNode << "\" > ";
3560  }
3562  t << " </TD></TR></TABLE>>];";
3563  }
3564 }

引用了 alignCommentNode(), alignText(), DECLN, EEND, ENDCL, EXITNEXT, exp, QCString::findRev(), flowCol, getNodeName(), id, IFF, QCString::isEmpty(), label, QCString::length(), LOOP, QCString::remove(), STARTFIN, QCString::str(), text, TRUE, type , 以及 VARIABLE_NO.

被这些函数引用 writeFlowChart().

类成员变量说明

◆ exp

QCString FlowChart::exp
private

在文件 vhdldocgen.h338 行定义.

被这些函数引用 addFlowChart(), FlowChart(), printNode(), printPlantUmlNode(), writeFlowLinks() , 以及 writeShape().

◆ id

int FlowChart::id = 0
private

在文件 vhdldocgen.h330 行定义.

被这些函数引用 buildCommentNodes(), printNode(), writeEdge() , 以及 writeShape().

◆ label

QCString FlowChart::label
private

◆ line

int FlowChart::line = 0
private

在文件 vhdldocgen.h334 行定义.

被这些函数引用 buildCommentNodes().

◆ stamp

int FlowChart::stamp = 0
private

◆ text

QCString FlowChart::text
private

◆ type


该类的文档由以下文件生成:
VhdlDocGen::getFlowMember
static const MemberDef * getFlowMember()
Definition: vhdldocgen.cpp:92
PlantumlManager::writePlantUMLSource
QCString writePlantUMLSource(const QCString &outDir, const QCString &fileName, const QCString &content, OutputFormat format, const QCString &engine, const QCString &srcFile, int srcLine)
Write a PlantUML compatible file.
Definition: plantuml.cpp:26
StringVector
std::vector< std::string > StringVector
Definition: containers.h:32
FlowChart::EXIT_NO
@ EXIT_NO
Definition: vhdldocgen.h:271
FlowChart::exp
QCString exp
Definition: vhdldocgen.h:338
FlowChart::getNodeType
static const char * getNodeType(int c)
Definition: vhdldocgen.cpp:3356
EMPTY
#define EMPTY
Definition: vhdldocgen.cpp:2854
FlowChart::getNextNode
static size_t getNextNode(size_t index, int stamp)
Definition: vhdldocgen.cpp:3714
FlowChart::convertNameToFileName
static QCString convertNameToFileName()
Definition: vhdldocgen.cpp:3351
reg::replace
std::string replace(const std::string &str, const Ex &re, const std::string &replacement)
Searching in a given input string for parts that match regular expression re and replaces those parts...
Definition: regex.cpp:740
FlowChart::printNode
static void printNode(const FlowChart &n)
Definition: vhdldocgen.cpp:2928
FlowChart::colTextNodes
static void colTextNodes()
Definition: vhdldocgen.cpp:2996
flowList
std::vector< FlowChart > flowList
Definition: vhdldocgen.cpp:2886
FlowChart::endDot
static void endDot(TextStream &t)
Definition: vhdldocgen.cpp:3415
QCString::length
uint length() const
Returns the length of the string, not counting the 0-terminator.
Definition: qcstring.h:147
FlowChart::text
QCString text
Definition: vhdldocgen.h:337
FlowChart::type
int type
Definition: vhdldocgen.h:332
QCString::findRev
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition: qcstring.cpp:86
QCString::isEmpty
bool isEmpty() const
Returns TRUE iff the string is empty
Definition: qcstring.h:144
FlowChart::TEXT_NO
@ TEXT_NO
Definition: vhdldocgen.h:273
FlowChart::WHEN_NO
@ WHEN_NO
Definition: vhdldocgen.h:270
split
static std::vector< QCString > split(const QCString &str, const QCString &sep, bool allowEmptyEntries=FALSE, bool cleanup=TRUE)
Definition: template.cpp:47
FlowChart::END_CASE
@ END_CASE
Definition: vhdldocgen.h:279
QCString::str
std::string str() const
Definition: qcstring.h:442
FlowChart::getNodeName
static QCString getNodeName(int n)
Definition: vhdldocgen.cpp:3046
PlantumlManager::instance
static PlantumlManager & instance()
Definition: plantuml.cpp:124
FlowChart::printPlantUmlNode
static QCString printPlantUmlNode(const FlowChart &flo, bool, bool)
Definition: vhdldocgen.cpp:3271
ifcounter
static int ifcounter
Definition: vhdldocgen.cpp:2859
err
void err(const char *fmt,...)
Definition: message.cpp:203
FLOWLEN
#define FLOWLEN
Definition: vhdldocgen.cpp:2857
TextStream
Text streaming class that buffers data.
Definition: textstream.h:33
LOOP
#define LOOP
Definition: vhdldocgen.cpp:2848
FlowChart::IF_NO
@ IF_NO
Definition: vhdldocgen.h:266
FlowChart::line
int line
Definition: vhdldocgen.h:334
begin
DirIterator begin(DirIterator it) noexcept
Definition: dir.cpp:123
QCString::contains
int contains(char c, bool cs=TRUE) const
Definition: qcstring.cpp:138
FlowChart::NEXT_NO
@ NEXT_NO
Definition: vhdldocgen.h:283
FlowChart::findPrevLoop
static size_t findPrevLoop(size_t j, int stamp, bool endif=FALSE)
Definition: vhdldocgen.cpp:3664
uint
unsigned uint
Definition: qcstring.h:40
FlowChart::codify
static void codify(TextStream &t, const QCString &str)
Definition: vhdldocgen.cpp:3181
FlowChart::stamp
int stamp
Definition: vhdldocgen.h:331
alignText
void alignText(QCString &q)
Definition: vhdldocgen.cpp:2892
QCString::stripWhiteSpace
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition: qcstring.h:243
FlowChart::writeFlowLinks
static void writeFlowLinks(TextStream &t)
Definition: vhdldocgen.cpp:3777
QCString::left
QCString left(size_t len) const
Definition: qcstring.h:212
FlowChart::ENDIF_NO
@ ENDIF_NO
Definition: vhdldocgen.h:275
FlowChart::writeEdge
static void writeEdge(TextStream &t, int fl_from, int fl_to, int i, bool bFrom=FALSE, bool bTo=FALSE)
Definition: vhdldocgen.cpp:3585
flowCol
static struct @4 flowCol
QCString::simplifyWhiteSpace
QCString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
Definition: qcstring.cpp:180
qstricmp
int qstricmp(const char *str1, const char *str2)
Definition: qcstring.cpp:433
Definition::name
virtual QCString name() const =0
FlowChart::CASE_NO
@ CASE_NO
Definition: vhdldocgen.h:269
FlowChart::LOOP_NO
@ LOOP_NO
Definition: vhdldocgen.h:282
Argument
This class contains the information about the argument of a function or template
Definition: arguments.h:26
FlowChart::FOR_NO
@ FOR_NO
Definition: vhdldocgen.h:276
FlowChart::findNextLoop
static size_t findNextLoop(size_t j, int stamp)
Definition: vhdldocgen.cpp:3647
FlowChart::END_LOOP
@ END_LOOP
Definition: vhdldocgen.h:278
TRUE
#define TRUE
Definition: qcstring.h:36
FlowChart::alignCommentNode
static void alignCommentNode(TextStream &t, QCString com)
Definition: vhdldocgen.cpp:3060
Portable::system
int system(const QCString &command, const QCString &args, bool commandHasConsole=true)
Definition: portable.cpp:42
FlowChart
Definition: vhdldocgen.h:262
STARTFIN
#define STARTFIN
Definition: vhdldocgen.cpp:2847
FlowChart::WHILE_NO
@ WHILE_NO
Definition: vhdldocgen.h:277
QCString::fill
bool fill(char c, int len=-1)
Fills a string with a predefined character
Definition: qcstring.h:175
IFF
#define IFF
Definition: vhdldocgen.cpp:2852
QCString::setNum
QCString & setNum(short n)
Definition: qcstring.h:372
ArgumentList::size
size_t size() const
Definition: arguments.h:93
FlowChart::END_NO
@ END_NO
Definition: vhdldocgen.h:272
substitute
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition: qcstring.cpp:465
FlowChart::buildCommentNodes
static void buildCommentNodes(TextStream &t)
Definition: vhdldocgen.cpp:3096
ENDCL
#define ENDCL
Definition: vhdldocgen.cpp:2850
QCString::remove
QCString & remove(size_t index, size_t len)
Definition: qcstring.h:354
FlowChart::label
QCString label
Definition: vhdldocgen.h:336
FlowChart::getNextIfLink
static size_t getNextIfLink(const FlowChart &, size_t)
Definition: vhdldocgen.cpp:3755
FlowChart::ELSE_NO
@ ELSE_NO
Definition: vhdldocgen.h:268
reg::Ex
Class representing a regular expression.
Definition: regex.h:48
FlowChart::writeShape
static void writeShape(TextStream &t, const FlowChart &fl)
Definition: vhdldocgen.cpp:3465
FlowChart::ELSIF_NO
@ ELSIF_NO
Definition: vhdldocgen.h:267
FlowChart::delFlowList
static void delFlowList()
Definition: vhdldocgen.cpp:3053
qPrint
const char * qPrint(const char *s)
Definition: qcstring.h:589
nodeCounter
static int nodeCounter
Definition: vhdldocgen.cpp:2860
Config_getString
#define Config_getString(name)
Definition: config.h:32
FlowChart::VARIABLE_NO
@ VARIABLE_NO
Definition: vhdldocgen.h:280
FlowChart::createSVG
static void createSVG()
Definition: vhdldocgen.cpp:3385
QCString::data
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string
Definition: qcstring.h:153
FlowChart::START_NO
@ START_NO
Definition: vhdldocgen.h:274
EXITNEXT
#define EXITNEXT
Definition: vhdldocgen.cpp:2853
DECLN
#define DECLN
Definition: vhdldocgen.cpp:2843
FlowChart::printUmlTree
static void printUmlTree()
Definition: vhdldocgen.cpp:3310
PlantumlManager::PUML_SVG
@ PUML_SVG
Definition: plantuml.h:44
PlantumlManager::generatePlantUMLOutput
void generatePlantUMLOutput(const QCString &baseName, const QCString &outDir, OutputFormat format)
Convert a PlantUML file to an image.
Definition: plantuml.cpp:91
FlowChart::findLabel
static size_t findLabel(size_t j, const QCString &)
Definition: vhdldocgen.cpp:3687
FlowChart::startDot
static void startDot(TextStream &t)
Definition: vhdldocgen.cpp:3407
STARTL
#define STARTL
Definition: vhdldocgen.cpp:2840
EEND
#define EEND
Definition: vhdldocgen.cpp:2851
FlowChart::EMPTY_NO
@ EMPTY_NO
Definition: vhdldocgen.h:284
FlowChart::printFlowTree
static void printFlowTree()
Definition: vhdldocgen.cpp:2988
QCString::prepend
QCString & prepend(const char *s)
Definition: qcstring.h:339
FlowChart::BEGIN_NO
@ BEGIN_NO
Definition: vhdldocgen.h:286
FlowChart::findNode
static size_t findNode(size_t index, int stamp, int type)
Definition: vhdldocgen.cpp:3701
FlowChart::RETURN_NO
@ RETURN_NO
Definition: vhdldocgen.h:281
FlowChart::COMMENT_NO
@ COMMENT_NO
Definition: vhdldocgen.h:285
FALSE
#define FALSE
Definition: qcstring.h:33
FlowChart::id
int id
Definition: vhdldocgen.h:330
EMPTNODE
#define EMPTNODE
Definition: vhdldocgen.cpp:2856
QCString
This is an alternative implementation of QCString.
Definition: qcstring.h:108