|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
* Parser for syntax highlighting and references for vhdl subset
|
|
Packit |
1c1d7e |
* written by M. Kreis
|
|
Packit |
1c1d7e |
* supports VHDL-87/93/2008
|
|
Packit |
1c1d7e |
******************************************************************************/
|
|
Packit |
1c1d7e |
%option never-interactive
|
|
Packit |
1c1d7e |
%option case-insensitive
|
|
Packit |
1c1d7e |
%option prefix="vhdlcodeYY"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%{
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*
|
|
Packit |
1c1d7e |
* includes
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
#include <stdio.h>
|
|
Packit |
1c1d7e |
#include <assert.h>
|
|
Packit |
1c1d7e |
#include <ctype.h>
|
|
Packit |
1c1d7e |
#include <qregexp.h>
|
|
Packit |
1c1d7e |
#include <qdir.h>
|
|
Packit |
1c1d7e |
#include <qstringlist.h>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "entry.h"
|
|
Packit |
1c1d7e |
#include "doxygen.h"
|
|
Packit |
1c1d7e |
#include "message.h"
|
|
Packit |
1c1d7e |
#include "outputlist.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
#include "membername.h"
|
|
Packit |
1c1d7e |
#include "searchindex.h"
|
|
Packit |
1c1d7e |
#include "vhdldocgen.h"
|
|
Packit |
1c1d7e |
#include "arguments.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
#include "classdef.h"
|
|
Packit |
1c1d7e |
#include "filedef.h"
|
|
Packit |
1c1d7e |
#include "tooltip.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#define YY_NO_INPUT 1
|
|
Packit |
1c1d7e |
#define YY_NO_UNISTD_H 1
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// Toggle for some debugging info
|
|
Packit |
1c1d7e |
//#define DBG_CTX(x) fprintf x
|
|
Packit |
1c1d7e |
#define DBG_CTX(x) do { } while(0)
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* -----------------------------------------------------------------
|
|
Packit |
1c1d7e |
* statics
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// ----------------- <vhdl> ----------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//static bool isPackBody=FALSE;
|
|
Packit |
1c1d7e |
//static bool isStartMap;
|
|
Packit |
1c1d7e |
static bool isFuncProto=FALSE;
|
|
Packit |
1c1d7e |
static bool isComponent=FALSE;
|
|
Packit |
1c1d7e |
static bool isPackageBody=FALSE;
|
|
Packit |
1c1d7e |
static bool isProto = FALSE;
|
|
Packit |
1c1d7e |
static bool g_startCode = FALSE;
|
|
Packit |
1c1d7e |
static QCString g_PrevString;
|
|
Packit |
1c1d7e |
static QCString g_CurrClass;
|
|
Packit |
1c1d7e |
static QDict<QCString>g_vhdlKeyDict;
|
|
Packit |
1c1d7e |
static QCString g_tempComp;
|
|
Packit |
1c1d7e |
static QCString g_PortMapComp;
|
|
Packit |
1c1d7e |
static MemberDef *g_vhdlMember;
|
|
Packit |
1c1d7e |
static QCString g_FuncProto;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//-----------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static CodeOutputInterface * g_code;
|
|
Packit |
1c1d7e |
static QCString g_parmType;
|
|
Packit |
1c1d7e |
static QCString g_parmName;
|
|
Packit |
1c1d7e |
static const char * g_inputString; //!< the code fragment as text
|
|
Packit |
1c1d7e |
static int g_inputPosition; //!< read offset during parsing
|
|
Packit |
1c1d7e |
static int g_inputLines; //!< number of line in the code fragment
|
|
Packit |
1c1d7e |
static int g_yyLineNr; //!< current line number
|
|
Packit |
1c1d7e |
static bool g_needsTermination;
|
|
Packit |
1c1d7e |
static Definition *g_searchCtx;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static bool g_exampleBlock;
|
|
Packit |
1c1d7e |
static QCString g_exampleName;
|
|
Packit |
1c1d7e |
static QCString g_exampleFile;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static QCString g_classScope;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static QCString g_CurrScope;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static FileDef * g_sourceFileDef;
|
|
Packit |
1c1d7e |
static Definition * g_currentDefinition;
|
|
Packit |
1c1d7e |
static MemberDef * g_currentMemberDef;
|
|
Packit |
1c1d7e |
static bool g_includeCodeFragment;
|
|
Packit |
1c1d7e |
static const char * g_currentFontClass;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static bool g_lexInit = FALSE;
|
|
Packit |
1c1d7e |
static int g_braceCount=0;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void writeFont(const char *s,const char* text);
|
|
Packit |
1c1d7e |
static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName);
|
|
Packit |
1c1d7e |
static bool writeColoredWord(QCString& word );
|
|
Packit |
1c1d7e |
static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE);
|
|
Packit |
1c1d7e |
static void endFontClass();
|
|
Packit |
1c1d7e |
static void startFontClass(const char *s);
|
|
Packit |
1c1d7e |
//-------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void setCurrentDoc(const QCString &anchor)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (Doxygen::searchIndex)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (g_searchCtx)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Doxygen::searchIndex->setCurrentDoc(g_searchCtx,g_searchCtx->anchor(),FALSE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Doxygen::searchIndex->setCurrentDoc(g_sourceFileDef,anchor,TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static bool checkVhdlString(QCString &name)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (name.isEmpty()) return FALSE;
|
|
Packit |
1c1d7e |
static QRegExp regg("[\\s\"]");
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int len=name.length();
|
|
Packit |
1c1d7e |
if (name.at(0)=='"' && name.at(len-1)=='"' && len > 2)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QStringList qrl=QStringList::split(regg,name,FALSE);
|
|
Packit |
1c1d7e |
if (VhdlDocGen::isNumber(qrl[0].utf8()))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->codify("\"");
|
|
Packit |
1c1d7e |
startFontClass("vhdllogic");
|
|
Packit |
1c1d7e |
QCString mid=name.mid(1,len-2); //" 1223 "
|
|
Packit |
1c1d7e |
g_code->codify(mid.data());
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
g_code->codify("\"");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
startFontClass("keyword");
|
|
Packit |
1c1d7e |
g_code->codify(name.data());
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (VhdlDocGen::isNumber(name))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
startFontClass("vhdllogic");
|
|
Packit |
1c1d7e |
g_code->codify(name.data());
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void addToSearchIndex(const char *text)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (Doxygen::searchIndex)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Doxygen::searchIndex->addWord(text,FALSE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! start a new line of code, inserting a line number if g_sourceFileDef
|
|
Packit |
1c1d7e |
* is TRUE. If a definition starts at the current line, then the line
|
|
Packit |
1c1d7e |
* number is linked to the documentation of that definition.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
static void startCodeLine()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//if (g_currentFontClass) { g_code->endFontClass(); }
|
|
Packit |
1c1d7e |
if (g_sourceFileDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//QCString lineNumber,lineAnchor;
|
|
Packit |
1c1d7e |
//lineNumber.sprintf("%05d",g_yyLineNr);
|
|
Packit |
1c1d7e |
//lineAnchor.sprintf("l%05d",g_yyLineNr);
|
|
Packit |
1c1d7e |
// if ((g_yyLineNr % 500) == 0)
|
|
Packit |
1c1d7e |
// fprintf(stderr,"\n starting Line %d:",g_yyLineNr);
|
|
Packit |
1c1d7e |
Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
|
|
Packit |
1c1d7e |
//printf("startCodeLine %d d=%s\n", g_yyLineNr,d ? d->name().data() : "<null>");
|
|
Packit |
1c1d7e |
if (!g_includeCodeFragment && d)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_currentDefinition = d;
|
|
Packit |
1c1d7e |
g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
|
|
Packit |
1c1d7e |
if (!g_tempComp.isEmpty() && g_currentMemberDef )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//ClassDef *cf=VhdlDocGen::getClass(g_tempComp.data());
|
|
Packit |
1c1d7e |
QCString nn=g_currentMemberDef->name();
|
|
Packit |
1c1d7e |
MemberDef* mdeff=VhdlDocGen::findMember(g_tempComp,nn);
|
|
Packit |
1c1d7e |
if (mdeff)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_currentMemberDef=mdeff;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
g_parmType.resize(0);
|
|
Packit |
1c1d7e |
g_parmName.resize(0);
|
|
Packit |
1c1d7e |
QCString lineAnchor;
|
|
Packit |
1c1d7e |
lineAnchor.sprintf("l%05d",g_yyLineNr);
|
|
Packit |
1c1d7e |
if (g_currentMemberDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->writeLineNumber(g_currentMemberDef->getReference(),
|
|
Packit |
1c1d7e |
g_currentMemberDef->getOutputFileBase(),
|
|
Packit |
1c1d7e |
g_currentMemberDef->anchor(),g_yyLineNr);
|
|
Packit |
1c1d7e |
setCurrentDoc(lineAnchor);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (d->isLinkableInProject())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->writeLineNumber(d->getReference(),
|
|
Packit |
1c1d7e |
d->getOutputFileBase(),
|
|
Packit |
1c1d7e |
0,g_yyLineNr);
|
|
Packit |
1c1d7e |
setCurrentDoc(lineAnchor);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->writeLineNumber(0,0,0,g_yyLineNr);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
g_code->startCodeLine(g_sourceFileDef);
|
|
Packit |
1c1d7e |
g_startCode=TRUE;
|
|
Packit |
1c1d7e |
if (g_currentFontClass)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->startFontClass(g_currentFontClass);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void endCodeLine()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
g_code->endCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void nextCodeLine()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (g_startCode)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
endCodeLine(); //
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
const char *fc = g_currentFontClass;
|
|
Packit |
1c1d7e |
if (g_yyLineNr
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_currentFontClass = fc;
|
|
Packit |
1c1d7e |
startCodeLine(); //
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! writes a word to the output.
|
|
Packit |
1c1d7e |
* If curr_class is defined, the word belongs to a class
|
|
Packit |
1c1d7e |
* and will be linked.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void writeWord(const char *word,const char* curr_class=0,bool classLink=FALSE)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
bool found=FALSE;
|
|
Packit |
1c1d7e |
QCString temp;
|
|
Packit |
1c1d7e |
QCString tclass(curr_class);
|
|
Packit |
1c1d7e |
QCString ttt(word);
|
|
Packit |
1c1d7e |
if (ttt.isEmpty()) return;
|
|
Packit |
1c1d7e |
for (unsigned int j=0;j
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char c=ttt.at(j);
|
|
Packit |
1c1d7e |
if (c==' '|| c==',' || c==';' || c==':' || c=='(' || c==')' || c=='\r' || c=='\t' || c=='.')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (found)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!writeColoredWord(temp)) // is it a keyword ?
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//if (VhdlDocGen::findKeyWord(temp))
|
|
Packit |
1c1d7e |
// writeFont("vhdlkeyword",temp.data());
|
|
Packit |
1c1d7e |
//printf("writeWord: %s\n",temp.data());
|
|
Packit |
1c1d7e |
if (!tclass.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!classLink)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,tclass,temp);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateClassOrGlobalLink(*g_code,temp);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!checkVhdlString(temp))
|
|
Packit |
1c1d7e |
g_code->codify(temp.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
temp.resize(0);
|
|
Packit |
1c1d7e |
found=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
char cc[2];
|
|
Packit |
1c1d7e |
cc[0]=c;
|
|
Packit |
1c1d7e |
cc[1]=0;
|
|
Packit |
1c1d7e |
g_code->codify(cc);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
found=TRUE;
|
|
Packit |
1c1d7e |
temp+=c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
} // for
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!temp.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!writeColoredWord(temp))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!tclass.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!classLink)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,tclass,temp); // generateMemLink(*g_code,g_CurrClass,left);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateClassOrGlobalLink(*g_code,temp);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString qc(temp.data());
|
|
Packit |
1c1d7e |
if (VhdlDocGen::isNumber(qc)){
|
|
Packit |
1c1d7e |
startFontClass("vhdllogic");
|
|
Packit |
1c1d7e |
g_code->codify(temp.data());
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
g_code->codify(temp.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}// writeWord
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! write a code fragment `text' that may span multiple lines, inserting
|
|
Packit |
1c1d7e |
* line numbers for each line.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE,bool comment=FALSE)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (text==0) return;
|
|
Packit |
1c1d7e |
//printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
|
|
Packit |
1c1d7e |
const char *p=text,*sp=p;
|
|
Packit |
1c1d7e |
char c;
|
|
Packit |
1c1d7e |
bool done=FALSE;
|
|
Packit |
1c1d7e |
while (!done)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
sp=p;
|
|
Packit |
1c1d7e |
while ((c=*p++) && c!='\n') {}
|
|
Packit |
1c1d7e |
if (c=='\n')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_yyLineNr++;
|
|
Packit |
1c1d7e |
QCString line = sp;
|
|
Packit |
1c1d7e |
line = line.left((int)(p-sp)-1);
|
|
Packit |
1c1d7e |
//*(p-1)='\0';
|
|
Packit |
1c1d7e |
//g_code->codify(sp);
|
|
Packit |
1c1d7e |
if (comment)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeFont("keyword",line.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeWord(line,cl,classlink);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
nextCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (comment)
|
|
Packit |
1c1d7e |
writeFont("keyword",sp);
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
writeWord(sp,cl,classlink);
|
|
Packit |
1c1d7e |
done=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! writes a link to a fragment \a text that may span multiple lines, inserting
|
|
Packit |
1c1d7e |
* line numbers for each line. If \a text contains newlines, the link will be
|
|
Packit |
1c1d7e |
* split into multiple links with the same destination, one for each line.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
static void writeMultiLineCodeLink(CodeOutputInterface &ol,
|
|
Packit |
1c1d7e |
Definition *d,
|
|
Packit |
1c1d7e |
const char *text)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS);
|
|
Packit |
1c1d7e |
TooltipManager::instance()->addTooltip(d);
|
|
Packit |
1c1d7e |
QCString ref = d->getReference();
|
|
Packit |
1c1d7e |
QCString file = d->getOutputFileBase();
|
|
Packit |
1c1d7e |
QCString anchor = d->anchor();
|
|
Packit |
1c1d7e |
QCString tooltip;
|
|
Packit |
1c1d7e |
if (!sourceTooltips) // fall back to simple "title" tooltips
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tooltip = d->briefDescriptionAsTooltip();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
bool done=FALSE;
|
|
Packit |
1c1d7e |
char *p=(char *)text;
|
|
Packit |
1c1d7e |
while (!done)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char *sp=p;
|
|
Packit |
1c1d7e |
char c;
|
|
Packit |
1c1d7e |
while ((c=*p++) && c!='\n') {}
|
|
Packit |
1c1d7e |
if (c=='\n')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_yyLineNr++;
|
|
Packit |
1c1d7e |
*(p-1)='\0';
|
|
Packit |
1c1d7e |
// printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
|
|
Packit |
1c1d7e |
ol.writeCodeLink(ref,file,anchor,sp,tooltip);
|
|
Packit |
1c1d7e |
nextCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeCodeLink(ref,file,anchor,sp,tooltip);
|
|
Packit |
1c1d7e |
done=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void setParameterList(MemberDef *md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
|
|
Packit |
1c1d7e |
ArgumentList *al = md->argumentList();
|
|
Packit |
1c1d7e |
if (al==0) return;
|
|
Packit |
1c1d7e |
ArgumentListIterator ali(*al);
|
|
Packit |
1c1d7e |
Argument *a;
|
|
Packit |
1c1d7e |
for (ali.toFirst();(a=ali.current());++ali)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_parmName = a->name.copy();
|
|
Packit |
1c1d7e |
g_parmType = a->type.copy();
|
|
Packit |
1c1d7e |
int i = g_parmType.find('*');
|
|
Packit |
1c1d7e |
if (i!=-1) g_parmType = g_parmType.left(i);
|
|
Packit |
1c1d7e |
i = g_parmType.find('&';;
|
|
Packit |
1c1d7e |
if (i!=-1) g_parmType = g_parmType.left(i);
|
|
Packit |
1c1d7e |
g_parmType.stripPrefix("const ");
|
|
Packit |
1c1d7e |
g_parmType=g_parmType.stripWhiteSpace();
|
|
Packit |
1c1d7e |
// g_theVarContext.addVariable(g_parmType,g_parmName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! writes a link to a function or procedure
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void generateFuncLink(CodeOutputInterface &ol,MemberDef* mdef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//printf("generateFuncLink(FuncName=%s)\n",mdef->name().data());
|
|
Packit |
1c1d7e |
QCString memberName=mdef->name();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (mdef && mdef->isLinkable()) // is it a linkable class
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeMultiLineCodeLink(ol,mdef,mdef->name());
|
|
Packit |
1c1d7e |
addToSearchIndex(memberName);
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
codifyLines(memberName.data());
|
|
Packit |
1c1d7e |
addToSearchIndex(memberName);
|
|
Packit |
1c1d7e |
} // generateFuncLink
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (memberName.isEmpty()) return;
|
|
Packit |
1c1d7e |
if (clName.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(memberName.data());
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString className=clName;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberDef *md=0;
|
|
Packit |
1c1d7e |
//MemberDef *comp=0;
|
|
Packit |
1c1d7e |
//bool isLocal=FALSE;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
md=VhdlDocGen::findMember(className,memberName);
|
|
Packit |
1c1d7e |
ClassDef *po=VhdlDocGen::getClass(className.data());
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (md==0 && po && (VhdlDocGen::VhdlClasses)po->protection()==VhdlDocGen::PACKBODYCLASS)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString temp=className;//.stripPrefix("_");
|
|
Packit |
1c1d7e |
temp.stripPrefix("_");
|
|
Packit |
1c1d7e |
md=VhdlDocGen::findMember(temp,memberName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (md && md->isLinkable()) // is it a linkable class
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeMultiLineCodeLink(ol,md,memberName);
|
|
Packit |
1c1d7e |
addToSearchIndex(memberName);
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
// nothing found, just write out the word
|
|
Packit |
1c1d7e |
codifyLines(memberName.data());
|
|
Packit |
1c1d7e |
addToSearchIndex(memberName);
|
|
Packit |
1c1d7e |
}// generateMemLink
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString className=clName;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (className.isEmpty()) return;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ClassDef *cd=0;
|
|
Packit |
1c1d7e |
//MemberDef *md=0;
|
|
Packit |
1c1d7e |
//bool isLocal=FALSE;
|
|
Packit |
1c1d7e |
className.stripPrefix("_");
|
|
Packit |
1c1d7e |
cd = getClass(className.data());
|
|
Packit |
1c1d7e |
while (cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//className.stripPrefix("_");
|
|
Packit |
1c1d7e |
QCString temp(clName);
|
|
Packit |
1c1d7e |
temp.stripPrefix("_");
|
|
Packit |
1c1d7e |
if (cd && cd->isLinkable()) // is it a linkable class
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS)
|
|
Packit |
1c1d7e |
//{
|
|
Packit |
1c1d7e |
// temp=VhdlDocGen::getClassName(cd);
|
|
Packit |
1c1d7e |
//}
|
|
Packit |
1c1d7e |
writeMultiLineCodeLink(ol,cd,temp);
|
|
Packit |
1c1d7e |
addToSearchIndex(className);
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
Definition *d = cd->getOuterScope();
|
|
Packit |
1c1d7e |
if (d && d->definitionType()==Definition::TypeClass)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
cd = (ClassDef*)d;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
cd = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// nothing found, just write out the word
|
|
Packit |
1c1d7e |
codifyLines(clName);
|
|
Packit |
1c1d7e |
addToSearchIndex(clName);
|
|
Packit |
1c1d7e |
}// generateClasss or global link
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! counts the number of lines in the input */
|
|
Packit |
1c1d7e |
static int countLines()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
const char *p=g_inputString;
|
|
Packit |
1c1d7e |
char c;
|
|
Packit |
1c1d7e |
int count=1;
|
|
Packit |
1c1d7e |
while ((c=*p))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
p++ ;
|
|
Packit |
1c1d7e |
if (c=='\n') count++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (p>g_inputString && *(p-1)!='\n')
|
|
Packit |
1c1d7e |
{ // last line does not end with a \n, so we add an extra
|
|
Packit |
1c1d7e |
// line and explicitly terminate the line after parsing.
|
|
Packit |
1c1d7e |
count++,
|
|
Packit |
1c1d7e |
g_needsTermination=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return count;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void endFontClass()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (g_currentFontClass)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->endFontClass();
|
|
Packit |
1c1d7e |
g_currentFontClass=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void startFontClass(const char *s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (s==0) return;
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
g_code->startFontClass(s);
|
|
Packit |
1c1d7e |
g_currentFontClass=s;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void writeFont(const char *s,const char* text)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (s==0 || text==0) return;
|
|
Packit |
1c1d7e |
//printf("writeFont(%d,\"%s\")\n",g_yyLineNr,text);
|
|
Packit |
1c1d7e |
g_code->startFontClass(s);
|
|
Packit |
1c1d7e |
g_code->codify(text);
|
|
Packit |
1c1d7e |
g_code->endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//----------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void appStringLower(QCString& qcs,const char* text)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
qcs.resize(0);
|
|
Packit |
1c1d7e |
qcs.append(text);
|
|
Packit |
1c1d7e |
//qcs=qcs.lower();
|
|
Packit |
1c1d7e |
qcs=qcs.stripWhiteSpace();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//static void appString(QCString& qcs,const char* text)
|
|
Packit |
1c1d7e |
//{
|
|
Packit |
1c1d7e |
// qcs.resize(0);
|
|
Packit |
1c1d7e |
// qcs.append(text);
|
|
Packit |
1c1d7e |
//}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static QCString g_temp;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* writes and links a port map statement */
|
|
Packit |
1c1d7e |
static void codifyMapLines(const char *text)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (text==0) return;
|
|
Packit |
1c1d7e |
g_temp.resize(0);
|
|
Packit |
1c1d7e |
//bool dot=FALSE;
|
|
Packit |
1c1d7e |
int wordCounter=0;
|
|
Packit |
1c1d7e |
QCString ctemp;
|
|
Packit |
1c1d7e |
//printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
|
|
Packit |
1c1d7e |
const char *p=text; //,*sp=p;
|
|
Packit |
1c1d7e |
char c;
|
|
Packit |
1c1d7e |
bool done=FALSE;
|
|
Packit |
1c1d7e |
while (!done)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//sp=p;
|
|
Packit |
1c1d7e |
while ((c=*p++) && c!='\n' && c!=':' && c != ' ' && c != '(' && c!='\0' && c!='\t')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (c!=0x9)
|
|
Packit |
1c1d7e |
g_temp+=c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (c=='\0') return;
|
|
Packit |
1c1d7e |
if (!g_temp.isEmpty()) wordCounter++;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!g_temp.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// different kinds of component instantiations
|
|
Packit |
1c1d7e |
// xxx:yyy (generic/port) map(
|
|
Packit |
1c1d7e |
// xxx:(entity/component/configuration) yyy (generic/port) map(
|
|
Packit |
1c1d7e |
// xxx: entity yyy(zzz) (generic/port) map(
|
|
Packit |
1c1d7e |
if (wordCounter==2 || wordCounter==3)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString q=g_temp.lower(); // consider (upper/lower) cases
|
|
Packit |
1c1d7e |
if (q=="entity" || q=="component" || q=="configuration" || q=="port" || q=="generic")
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,g_CurrClass,g_temp);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_PortMapComp=g_temp;
|
|
Packit |
1c1d7e |
generateClassOrGlobalLink(*g_code,g_temp);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,g_CurrClass,g_temp);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ctemp.fill(c,1);
|
|
Packit |
1c1d7e |
codifyLines(ctemp.data());
|
|
Packit |
1c1d7e |
ctemp.resize(0);
|
|
Packit |
1c1d7e |
g_temp.resize(0);
|
|
Packit |
1c1d7e |
}//while
|
|
Packit |
1c1d7e |
}//codifymaplines
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*
|
|
Packit |
1c1d7e |
* writes a function|procedure prototype and links the function|procedure name
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void writeFuncProto()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QList<Argument> ql;
|
|
Packit |
1c1d7e |
QCString name,ret;
|
|
Packit |
1c1d7e |
VhdlDocGen::parseFuncProto(g_FuncProto,ql,name,ret,FALSE);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (name.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(g_FuncProto.data(),g_CurrClass.data());
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QStringList qlist=QStringList::split(name,g_FuncProto,FALSE);
|
|
Packit |
1c1d7e |
QCString temp=qlist[0].utf8();
|
|
Packit |
1c1d7e |
codifyLines(temp.data(),g_CurrClass.data());
|
|
Packit |
1c1d7e |
g_FuncProto.stripPrefix(temp.data());
|
|
Packit |
1c1d7e |
temp.resize(0);
|
|
Packit |
1c1d7e |
temp=g_CurrClass;
|
|
Packit |
1c1d7e |
if (isPackageBody)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
temp.stripPrefix("_");// _{package body name}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
MemberDef *mdef=VhdlDocGen::findFunction(ql,name,temp,FALSE);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (mdef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateFuncLink(*g_code,mdef);
|
|
Packit |
1c1d7e |
g_FuncProto.stripPrefix(name.data());
|
|
Packit |
1c1d7e |
codifyLines(g_FuncProto.data(),g_CurrClass.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(g_FuncProto.data(),g_CurrClass.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}// writeFuncProto
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* writes a process prototype to the output */
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static void writeProcessProto(){
|
|
Packit |
1c1d7e |
codifyLines(g_FuncProto.data(),g_CurrClass.data());
|
|
Packit |
1c1d7e |
g_vhdlKeyDict.clear();
|
|
Packit |
1c1d7e |
}// writeProcessProto
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* writes a keyword */
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static bool writeColoredWord(QCString& word )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString qcs=word.lower();
|
|
Packit |
1c1d7e |
QCString *ss=VhdlDocGen::findKeyWord(qcs);
|
|
Packit |
1c1d7e |
if (ss)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeFont(ss->data(),word.data());
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#undef YY_INPUT
|
|
Packit |
1c1d7e |
#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static int yyread(char *buf,int max_size)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int c=0;
|
|
Packit |
1c1d7e |
while( c < max_size && g_inputString[g_inputPosition] )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
*buf = g_inputString[g_inputPosition++] ;
|
|
Packit |
1c1d7e |
c++; buf++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
B [ \t]
|
|
Packit |
1c1d7e |
BN [ \t\n\r]
|
|
Packit |
1c1d7e |
STRING ["][^"\n]*["]
|
|
Packit |
1c1d7e |
NAME [a-z_A-Z][ a-z_A-Z0-9]*
|
|
Packit |
1c1d7e |
FUNCNAME [a-z_A-Z"][a-z_A-Z0-9+*"/=<>-]*
|
|
Packit |
1c1d7e |
ID "$"?[a-z_A-Z][a-z_A-Z0-9]*
|
|
Packit |
1c1d7e |
SPECSIGN [:;, +*&\/=<>'\t]*
|
|
Packit |
1c1d7e |
DIGITSS [0-9]+|[0-9]+("#")*[0-9_a-fA-F\+\.\-]+("#")*
|
|
Packit |
1c1d7e |
ALLTYPESMAP {B}*[_a-zA-Z0-9. ]+{BN}*
|
|
Packit |
1c1d7e |
ALLTYPESMAP1 {BN}*[_a-zA-Z0-9.() ]+{BN}*
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME}
|
|
Packit |
1c1d7e |
PROCESS ({BN}*{FUNCNAME}{BN}*[:]+{BN}*("process"){BN}*[(]*)|[^a-zA-Z]("process "|"process("){BN}*[ (]*|[^a-zA-Z]("process"){BN}+
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
END1 {B}*("end "){BN}+("if"|"case"|"loop"|"generate"|"for")
|
|
Packit |
1c1d7e |
END2 [^a-zA-Z_]("end"){BN}*[;]
|
|
Packit |
1c1d7e |
END3 {BN}*[^a-zA-Z]("end"){BN}+{FUNCNAME}{BN}*[;]
|
|
Packit |
1c1d7e |
END4 {B}*("end"){BN}+"function"{BN}+{FUNCNAME}{BN}*[;]
|
|
Packit |
1c1d7e |
ENDEFUNC {END3}|{END4}|{END2}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
KEYWORD ("new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in")
|
|
Packit |
1c1d7e |
TYPEKW ^{B}*("type"|"subtype"|"constant"|"attribute"|"signal"|"variable","alias","configuration")
|
|
Packit |
1c1d7e |
FUNC ^{B}*("function"|"procedure"){BN}*{FUNCNAME}{BN}*("(")
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ARITHOP "+"|"-"|"/"|"*"|"%"|"/="|":="
|
|
Packit |
1c1d7e |
ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|="
|
|
Packit |
1c1d7e |
LOGICOP "=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!"
|
|
Packit |
1c1d7e |
BITOP "&"|"|"|"^"|"<<"|">>"|"~"
|
|
Packit |
1c1d7e |
OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
PORT {B}*("port"){BN}*("(")
|
|
Packit |
1c1d7e |
GENERIC {B}*("generic"){BN}*("(")
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
BRACEOPEN [(]{1}
|
|
Packit |
1c1d7e |
BRACECLOSE [)]{1}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
TEXTT {B}*"--"[^\n]*
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MAPCOMPONENT1 ({ALLTYPESMAP}[:]{ALLTYPESMAP}{TEXTT}*{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1})
|
|
Packit |
1c1d7e |
MAPCOMPONENT2 {BN}*("port"|"generic"){BN}+("map"){BN}*("("){1}
|
|
Packit |
1c1d7e |
MAPCOMPONENT3 ({ALLTYPESMAP}[:]{BN}*{ALLTYPESMAP1}{TEXTT}*{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1})
|
|
Packit |
1c1d7e |
MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{ALLTYPESMAP1}{TEXTT}*{BN}*("port"|"generic"){BN}*("map"){BN}*("("){1})
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFIG"|"CONFIG_MODE"|"COOL_CLK"|"DATA_GATE"|"DCI_VALUE"|"DISABLE"|"DRIVE"|"DROP_SPEC"|"ENABLE"|"FAST"|"FEEDBACK"|"FILE"|"FLOAT"|"FROM-THRU-TO"|"FROM-TO"|"HBLKNM"|"HU_SET"|"INREG"|"IOB"|"IOBDELAY"|"IOSTANDARD"|"KEEP"|"KEEPER"|"LOC"|"LOCATE"|"LOCK_PINS"|"MAP"|"MAXDELAY"|"MAXPT"|"MAXSKEW"|"NODELAY"|"NOREDUCE"|"OFFSET"|"OPEN_DRAIN"|"OPT_EFFORT"|"OPTIMIZE"|"PERIOD"|"PIN"|"PRIORITY"|"PROHIBIT"|"PULLDOWN"|"PULLUP"|"PWR_MODE"|"REG"|"RLOC"|"RLOC_ORIGIN"|"RLOC_RANGE"|"SAVE NET"|"FLAG"|"SYSTEM_JITTER"|"TEMPERATURE"|"TIMEGRP"|"TIMESPEC"|"VOLTAGE"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%option noyywrap
|
|
Packit |
1c1d7e |
%option nounput
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%x Bases
|
|
Packit |
1c1d7e |
%x ParseType
|
|
Packit |
1c1d7e |
%x ParseFuncProto
|
|
Packit |
1c1d7e |
%x ParseComponent
|
|
Packit |
1c1d7e |
%x ParsePackage
|
|
Packit |
1c1d7e |
%x ParseProcessProto
|
|
Packit |
1c1d7e |
%x ClassName
|
|
Packit |
1c1d7e |
%x PackageName
|
|
Packit |
1c1d7e |
%x ClassVar
|
|
Packit |
1c1d7e |
%x ClassesName
|
|
Packit |
1c1d7e |
%x Map
|
|
Packit |
1c1d7e |
%x Body
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%%
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
. {
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Map>{BRACEOPEN} {
|
|
Packit |
1c1d7e |
g_braceCount++;
|
|
Packit |
1c1d7e |
writeFont("vhdlchar",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
BEGIN(Map);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Map>[^()\n,--]* { /* write and link a port map lines */
|
|
Packit |
1c1d7e |
QCString tt(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
VhdlDocGen::deleteAllChars(tt,',');
|
|
Packit |
1c1d7e |
QRegExp r("=>");
|
|
Packit |
1c1d7e |
QStringList ql=QStringList::split(r,tt,FALSE);
|
|
Packit |
1c1d7e |
if (ql.count()>=2)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
unsigned int index=0;
|
|
Packit |
1c1d7e |
QCString t1=ql[0].utf8();
|
|
Packit |
1c1d7e |
char cc=t1.at(index);
|
|
Packit |
1c1d7e |
while (cc==' ' || cc=='\t')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char c2[2];
|
|
Packit |
1c1d7e |
c2[0]=cc;
|
|
Packit |
1c1d7e |
c2[1]=0;
|
|
Packit |
1c1d7e |
g_code->codify(c2);
|
|
Packit |
1c1d7e |
index++;
|
|
Packit |
1c1d7e |
if (index>=t1.size()) break;
|
|
Packit |
1c1d7e |
cc=t1.at(index);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString s1=t1;
|
|
Packit |
1c1d7e |
s1=s1.stripWhiteSpace();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// if (!g_PortMapComp.isEmpty())
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,g_PortMapComp,s1);
|
|
Packit |
1c1d7e |
while (index++
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char cc=t1.at(index);
|
|
Packit |
1c1d7e |
if (cc==' ' || cc=='\t')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char c2[2];
|
|
Packit |
1c1d7e |
c2[0]=cc;
|
|
Packit |
1c1d7e |
c2[1]=0;
|
|
Packit |
1c1d7e |
g_code->codify(c2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
codifyLines("=>");
|
|
Packit |
1c1d7e |
index=0;
|
|
Packit |
1c1d7e |
QCString s2=ql[1].utf8();
|
|
Packit |
1c1d7e |
t1=s2;
|
|
Packit |
1c1d7e |
cc=t1.at(index);
|
|
Packit |
1c1d7e |
while (cc==' ' || cc=='\t')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
char c2[2];
|
|
Packit |
1c1d7e |
c2[0]=cc;
|
|
Packit |
1c1d7e |
c2[1]=0;
|
|
Packit |
1c1d7e |
g_code->codify(c2);
|
|
Packit |
1c1d7e |
index++;
|
|
Packit |
1c1d7e |
if (index>=t1.size()) break;
|
|
Packit |
1c1d7e |
cc=t1.at(index);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
s2=s2.stripWhiteSpace();
|
|
Packit |
1c1d7e |
if (!checkVhdlString(s2))
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,g_CurrClass,s2);
|
|
Packit |
1c1d7e |
while (index++
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (t1.at(index)==' ')
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_code->codify(" ");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
BEGIN(Map);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Map>"\n"|"," {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
BEGIN(Map);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Map>{BRACECLOSE} {
|
|
Packit |
1c1d7e |
g_braceCount--;
|
|
Packit |
1c1d7e |
writeFont("vhdlchar",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (g_braceCount==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseFuncProto>{NAME} {
|
|
Packit |
1c1d7e |
QCString tmp(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
tmp=tmp.stripWhiteSpace();
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_vhdlKeyDict.insert(g_PrevString,new QCString(g_PrevString.data()));
|
|
Packit |
1c1d7e |
if (!writeColoredWord(tmp))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,g_CurrClass,tmp);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>{STRING} {
|
|
Packit |
1c1d7e |
QCString qcs(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
VhdlDocGen::deleteAllChars(qcs,'"');
|
|
Packit |
1c1d7e |
VhdlDocGen::deleteAllChars(qcs,' ');
|
|
Packit |
1c1d7e |
if (VhdlDocGen::isNumber(qcs))
|
|
Packit |
1c1d7e |
writeFont("vhdllogic",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
writeFont("keyword",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>"\n" {
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (isProto)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
BEGIN(ParseType);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>{TEXTT} {
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (isProto)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeFont("keyword",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
BEGIN(ParseType);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>{ENDEFUNC} {
|
|
Packit |
1c1d7e |
QRegExp regg("[\\s]");
|
|
Packit |
1c1d7e |
QCString tt(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data());
|
|
Packit |
1c1d7e |
tt=tt.lower();
|
|
Packit |
1c1d7e |
VhdlDocGen::deleteAllChars(tt,';');
|
|
Packit |
1c1d7e |
tt.stripWhiteSpace();
|
|
Packit |
1c1d7e |
QStringList ql=QStringList::split(regg,tt,FALSE);
|
|
Packit |
1c1d7e |
int index=ql.findIndex(QCString("if"))+1;
|
|
Packit |
1c1d7e |
index+=ql.findIndex(QCString("case"))+1;
|
|
Packit |
1c1d7e |
index+=ql.findIndex(QCString("loop"))+1;
|
|
Packit |
1c1d7e |
index+=ql.findIndex(QCString("generate"))+1;
|
|
Packit |
1c1d7e |
if (index==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(ParseType);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>{END1} {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data());
|
|
Packit |
1c1d7e |
g_vhdlKeyDict.clear();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>^{B}*("begin "|"begin") {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data());
|
|
Packit |
1c1d7e |
isFuncProto=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>{SPECSIGN} {
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (isProto)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>["_a-zA-Z0-9]* {
|
|
Packit |
1c1d7e |
QCString val(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (isFuncProto && g_braceCount==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_vhdlKeyDict.insert(g_PrevString,new QCString(g_PrevString.data()));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (isProto)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!writeColoredWord(val))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!isFuncProto && !g_vhdlKeyDict.find(g_PrevString))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
val=val.stripWhiteSpace();
|
|
Packit |
1c1d7e |
if (VhdlDocGen::isNumber(val))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
startFontClass("vhdllogic");
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data());
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,g_CurrClass,val);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
BEGIN(ParseType);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>{BRACEOPEN} {
|
|
Packit |
1c1d7e |
g_braceCount++;
|
|
Packit |
1c1d7e |
g_FuncProto+='(';
|
|
Packit |
1c1d7e |
if (isProto)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeFont("vhdlchar",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
BEGIN(ParseType);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseType>{BRACECLOSE} {
|
|
Packit |
1c1d7e |
g_braceCount--;
|
|
Packit |
1c1d7e |
g_FuncProto+=')';
|
|
Packit |
1c1d7e |
if (isProto)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeFont("vhdlchar",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (g_braceCount==0 && !isProto)// && !isPackageBody)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
isProto=TRUE;
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
writeFuncProto();
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (isPackageBody)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(ParseType);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ClassesName>{FUNCNAME} {
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_CurrClass.resize(0);
|
|
Packit |
1c1d7e |
g_CurrClass.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_CurrClass=g_CurrClass.stripWhiteSpace();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!writeColoredWord(g_CurrScope))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateClassOrGlobalLink(*g_code,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>{BRACEOPEN} {
|
|
Packit |
1c1d7e |
g_braceCount++;
|
|
Packit |
1c1d7e |
g_code->codify(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>{BRACECLOSE} {
|
|
Packit |
1c1d7e |
g_braceCount--;
|
|
Packit |
1c1d7e |
g_code->codify(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (g_braceCount==0 && !isComponent)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_tempComp.resize(0);
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(ParseComponent);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>{B}*"-" {
|
|
Packit |
1c1d7e |
if (strlen(vhdlcodeYYtext)>=2) // found text ?
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeFont("keyword",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeFont("vhdlchar",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>{SPECSIGN} {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>"\n"|" " {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>{DIGITSS} {
|
|
Packit |
1c1d7e |
startFontClass("vhdllogic");
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>{PORT} {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_braceCount=1;
|
|
Packit |
1c1d7e |
isComponent=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>{GENERIC} {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_braceCount=1;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>[_a-zA_Z][_a-zA-Z0-9]* {
|
|
Packit |
1c1d7e |
QCString temp(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (!checkVhdlString(temp)){
|
|
Packit |
1c1d7e |
if (!writeColoredWord(g_PrevString))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,g_tempComp,temp);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseComponent>{STRING} {
|
|
Packit |
1c1d7e |
QCString temp(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (!checkVhdlString(temp))
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseProcessProto>[^()]* {
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseProcessProto>{BRACEOPEN} {
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_braceCount++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParseProcessProto>{BRACECLOSE} {
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_braceCount--;
|
|
Packit |
1c1d7e |
if (g_braceCount==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeProcessProto();
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<ParsePackage>[^:;]* { //found package
|
|
Packit |
1c1d7e |
QCString temp(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
QStringList strl=QStringList::split(".",temp,FALSE);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (strl.count()>2)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString s1=strl[0].utf8();
|
|
Packit |
1c1d7e |
QCString s2=strl[1].utf8();
|
|
Packit |
1c1d7e |
QCString s3=strl[2].utf8();
|
|
Packit |
1c1d7e |
s1.append(".");
|
|
Packit |
1c1d7e |
s3.prepend(".");
|
|
Packit |
1c1d7e |
codifyLines(s1.data(),g_CurrClass.data());
|
|
Packit |
1c1d7e |
ClassDef *cd=VhdlDocGen::getPackageName(s2);
|
|
Packit |
1c1d7e |
if (cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateClassOrGlobalLink(*g_code,s2.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
codifyLines(s2.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
codifyLines(s3.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeFont("keywordflow",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{MAPCOMPONENT1}|{MAPCOMPONENT2}|{MAPCOMPONENT3}|{MAPCOMPONENT4} { // found port or generic map
|
|
Packit |
1c1d7e |
QCString tt(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
/*
|
|
Packit |
1c1d7e |
if (tt.contains(':',FALSE))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
isStartMap=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
isStartMap=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
int j=tt.find('.');
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (j>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString left=tt.left(j+1);
|
|
Packit |
1c1d7e |
codifyLines(left.data());
|
|
Packit |
1c1d7e |
tt=tt.right(tt.length()-j-1);
|
|
Packit |
1c1d7e |
left=VhdlDocGen::getIndexWord(tt.data(),0);
|
|
Packit |
1c1d7e |
if (!left.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (left.contains('('))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
j=left.find('(',FALSE);
|
|
Packit |
1c1d7e |
QCString name=left.left(j);
|
|
Packit |
1c1d7e |
generateClassOrGlobalLink(*g_code,name.data());
|
|
Packit |
1c1d7e |
g_PortMapComp=name;
|
|
Packit |
1c1d7e |
name=tt.right(tt.length()-name.length());
|
|
Packit |
1c1d7e |
codifyLines(name.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
generateClassOrGlobalLink(*g_code,left.data());
|
|
Packit |
1c1d7e |
tt.stripPrefix(left.data()); //=tt.right(tt.length()-left.length()-1);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
g_PortMapComp=left;
|
|
Packit |
1c1d7e |
codifyLines(tt.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (tt.contains(':',FALSE))
|
|
Packit |
1c1d7e |
codifyMapLines(tt.data());
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
codifyLines(tt.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
g_braceCount=1;
|
|
Packit |
1c1d7e |
BEGIN(Map);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*("component"){BN}+{FUNCNAME} { // found component
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
// writeFont("keywordflow",VhdlDocGen::getIndexWord(vhdlcodeYYtext,0).data());
|
|
Packit |
1c1d7e |
// writeFont("vhdlkeyword"," ");
|
|
Packit |
1c1d7e |
QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
|
|
Packit |
1c1d7e |
temp=temp.stripWhiteSpace();
|
|
Packit |
1c1d7e |
VhdlDocGen::deleteAllChars(temp,'\n');
|
|
Packit |
1c1d7e |
g_tempComp=temp;
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,temp.data(),TRUE);
|
|
Packit |
1c1d7e |
g_braceCount=0;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//if (getClass(temp.data()))
|
|
Packit |
1c1d7e |
// generateClassOrGlobalLink(*g_code,temp.data());
|
|
Packit |
1c1d7e |
//else
|
|
Packit |
1c1d7e |
// generateMemLink(*g_code,g_CurrClass,temp);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
isComponent=TRUE;
|
|
Packit |
1c1d7e |
BEGIN(ParseComponent);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{ARCHITECTURE} { // found architecture
|
|
Packit |
1c1d7e |
g_PortMapComp.resize(0);
|
|
Packit |
1c1d7e |
// writeFont("vhdlkeyword",VhdlDocGen::getIndexWord(vhdlcodeYYtext,0).data());
|
|
Packit |
1c1d7e |
// writeFont("vhdlkeyword"," ");
|
|
Packit |
1c1d7e |
// writeFont("vhdlchar",VhdlDocGen::getIndexWord(vhdlcodeYYtext,1).data());
|
|
Packit |
1c1d7e |
// writeFont("vhdlkeyword"," ");
|
|
Packit |
1c1d7e |
// writeFont("vhdlkeyword",VhdlDocGen::getIndexWord(vhdlcodeYYtext,2).data());
|
|
Packit |
1c1d7e |
// writeFont("vhdlkeyword"," ");
|
|
Packit |
1c1d7e |
//QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
|
|
Packit |
1c1d7e |
//temp=temp.stripWhiteSpace();
|
|
Packit |
1c1d7e |
//temp+=("-");
|
|
Packit |
1c1d7e |
//temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
|
|
Packit |
1c1d7e |
QCString temp = VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
|
|
Packit |
1c1d7e |
temp+="::";
|
|
Packit |
1c1d7e |
temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
|
|
Packit |
1c1d7e |
g_CurrClass=temp;
|
|
Packit |
1c1d7e |
VhdlDocGen::deleteAllChars(temp,'\n');
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,temp.data(),TRUE);
|
|
Packit |
1c1d7e |
//generateClassOrGlobalLink(*g_code,temp.data());
|
|
Packit |
1c1d7e |
isPackageBody=FALSE;
|
|
Packit |
1c1d7e |
BEGIN(ClassName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*("package "){BN}*("body"){BN}*{FUNCNAME} { // found package body
|
|
Packit |
1c1d7e |
QCString ss(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,2);
|
|
Packit |
1c1d7e |
QStringList ql=QStringList::split(temp,ss,FALSE);
|
|
Packit |
1c1d7e |
QCString ll=ql[0].utf8();
|
|
Packit |
1c1d7e |
codifyLines(ll.data(),g_CurrClass.data());
|
|
Packit |
1c1d7e |
temp=temp.stripWhiteSpace();
|
|
Packit |
1c1d7e |
temp.prepend("_");
|
|
Packit |
1c1d7e |
generateClassOrGlobalLink(*g_code,temp.data());
|
|
Packit |
1c1d7e |
g_CurrClass.resize(0);
|
|
Packit |
1c1d7e |
g_CurrClass=temp;
|
|
Packit |
1c1d7e |
isProto=FALSE;
|
|
Packit |
1c1d7e |
isPackageBody=TRUE;
|
|
Packit |
1c1d7e |
// BEGIN(ClassesName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{PROCESS} { // found process
|
|
Packit |
1c1d7e |
isFuncProto=TRUE;
|
|
Packit |
1c1d7e |
g_FuncProto.resize(0);
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_vhdlKeyDict.clear();
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (g_PrevString.contains('('))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_braceCount=1;
|
|
Packit |
1c1d7e |
BEGIN(ParseProcessProto);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeProcessProto();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>("end"){BN}+("process") { // end of process
|
|
Packit |
1c1d7e |
isFuncProto=FALSE;
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*("begin "|"begin") {
|
|
Packit |
1c1d7e |
isFuncProto=FALSE;
|
|
Packit |
1c1d7e |
writeFont("vhdlkeyword",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*("use"|"library"){BN}+ { //found package or library
|
|
Packit |
1c1d7e |
writeFont("vhdlkeyword",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
BEGIN(ParsePackage);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*("use"){BN}+("configuration")[^\n]* {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{FUNC} { // found function|procedure
|
|
Packit |
1c1d7e |
g_vhdlKeyDict.clear();
|
|
Packit |
1c1d7e |
g_FuncProto.resize(0);
|
|
Packit |
1c1d7e |
isProto=FALSE;
|
|
Packit |
1c1d7e |
g_FuncProto.append(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
g_braceCount=1;
|
|
Packit |
1c1d7e |
BEGIN(ParseType);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*("entity"|"package"){BN}+ {
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
writeFont("keywordflow",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
isPackageBody=FALSE;
|
|
Packit |
1c1d7e |
BEGIN(ClassesName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{KEYWORD} { // found keyword
|
|
Packit |
1c1d7e |
QCString qcs(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (!writeColoredWord(qcs))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
startFontClass("vhdlchar");
|
|
Packit |
1c1d7e |
g_code->codify(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{ID} {
|
|
Packit |
1c1d7e |
appStringLower(g_PrevString,vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
QCString temp(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
temp=temp.stripWhiteSpace();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!writeColoredWord(temp))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
startFontClass("vhdlchar");
|
|
Packit |
1c1d7e |
generateMemLink(*g_code,g_CurrClass,temp);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases,ParseComponent>{DIGITSS} {
|
|
Packit |
1c1d7e |
startFontClass("vhdllogic");
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*("use"){BN}+("entity"|"component")[^\n]* {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{TYPEKW} {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
if (isFuncProto)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(ParseFuncProto);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{OPERATOR} {
|
|
Packit |
1c1d7e |
startFontClass("vhdlchar");
|
|
Packit |
1c1d7e |
g_code->codify(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>","|"."|":"|"'"|"("|")" {
|
|
Packit |
1c1d7e |
startFontClass("vhdlchar");
|
|
Packit |
1c1d7e |
g_code->codify(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{STRING} {
|
|
Packit |
1c1d7e |
QCString qcs(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
VhdlDocGen::deleteAllChars(qcs,'"');
|
|
Packit |
1c1d7e |
VhdlDocGen::deleteAllChars(qcs,' ');
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (VhdlDocGen::isNumber(qcs))
|
|
Packit |
1c1d7e |
writeFont("vhdllogic",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
writeFont("keyword",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>{B}*"#"[^\n]* {
|
|
Packit |
1c1d7e |
writeFont("keyword",vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*{XILINX}[^\n]* {
|
|
Packit |
1c1d7e |
writeWord(yytext);
|
|
Packit |
1c1d7e |
//codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<Bases>^{B}*"set_"[^\n]* {
|
|
Packit |
1c1d7e |
writeWord(yytext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<*>\n {
|
|
Packit |
1c1d7e |
codifyLines(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
BEGIN(Bases);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<*>. {
|
|
Packit |
1c1d7e |
g_code->codify(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
<*>\n{TEXTT} { // found normal or special comment on its own line
|
|
Packit |
1c1d7e |
QCString text(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
int i=text.find("--");
|
|
Packit |
1c1d7e |
if (text.mid(i,3)=="--!" && // hide special comment
|
|
Packit |
1c1d7e |
Config_getBool(STRIP_CODE_COMMENTS))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_yyLineNr++; // skip complete line
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else // normal comment
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// startFontClass("keyword");
|
|
Packit |
1c1d7e |
codifyLines(text,0,FALSE,TRUE);
|
|
Packit |
1c1d7e |
// endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
<*>{TEXTT} { // found normal or special comment after something
|
|
Packit |
1c1d7e |
QCString text(vhdlcodeYYtext);
|
|
Packit |
1c1d7e |
int i=text.find("--");
|
|
Packit |
1c1d7e |
if (text.mid(i,3)=="--!" &&
|
|
Packit |
1c1d7e |
Config_getBool(STRIP_CODE_COMMENTS))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// hide special comment
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else // normal comment
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// startFontClass("keyword");
|
|
Packit |
1c1d7e |
codifyLines(text,0,FALSE,TRUE);
|
|
Packit |
1c1d7e |
// endFontClass();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%%
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*@ ----------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void resetVhdlCodeParserState()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_vhdlKeyDict.setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
g_vhdlKeyDict.clear();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s,
|
|
Packit |
1c1d7e |
bool exBlock, const char *exName,FileDef *fd,
|
|
Packit |
1c1d7e |
int startLine,int endLine,bool inlineFragment,
|
|
Packit |
1c1d7e |
MemberDef *memberDef,bool,Definition *searchCtx,
|
|
Packit |
1c1d7e |
bool /* collectXRefs */)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd);
|
|
Packit |
1c1d7e |
if (s.isEmpty()) return;
|
|
Packit |
1c1d7e |
printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
|
|
Packit |
1c1d7e |
TooltipManager::instance()->clearTooltips();
|
|
Packit |
1c1d7e |
if (memberDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ClassDef *dd=memberDef->getClassDef();
|
|
Packit |
1c1d7e |
if (dd) g_CurrClass=dd->name();
|
|
Packit |
1c1d7e |
startLine--;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
resetVhdlCodeParserState();
|
|
Packit |
1c1d7e |
g_code = &od;
|
|
Packit |
1c1d7e |
g_inputString = s;
|
|
Packit |
1c1d7e |
g_inputPosition = 0;
|
|
Packit |
1c1d7e |
g_currentFontClass = 0;
|
|
Packit |
1c1d7e |
g_needsTermination = FALSE;
|
|
Packit |
1c1d7e |
g_searchCtx = searchCtx;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (startLine!=-1)
|
|
Packit |
1c1d7e |
g_yyLineNr = startLine;
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
g_yyLineNr = 1;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (endLine!=-1)
|
|
Packit |
1c1d7e |
g_inputLines = endLine+1;
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
g_inputLines = g_yyLineNr + countLines() - 1;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// g_theCallContext.clear();
|
|
Packit |
1c1d7e |
g_classScope = className;
|
|
Packit |
1c1d7e |
g_exampleBlock = exBlock;
|
|
Packit |
1c1d7e |
g_exampleName = exName;
|
|
Packit |
1c1d7e |
g_sourceFileDef = fd;
|
|
Packit |
1c1d7e |
bool cleanupSourceDef = FALSE;
|
|
Packit |
1c1d7e |
if (exBlock && fd==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// create a dummy filedef for the example
|
|
Packit |
1c1d7e |
g_sourceFileDef = new FileDef("",exName);
|
|
Packit |
1c1d7e |
cleanupSourceDef = TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (g_sourceFileDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setCurrentDoc("l00001");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
g_currentDefinition = 0;
|
|
Packit |
1c1d7e |
g_currentMemberDef = 0;
|
|
Packit |
1c1d7e |
g_vhdlMember=0;
|
|
Packit |
1c1d7e |
if (!g_exampleName.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
g_exampleFile = convertNameToFile(g_exampleName+"-example");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
g_includeCodeFragment = inlineFragment;
|
|
Packit |
1c1d7e |
if (!memberDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
startCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
// g_type.resize(0);
|
|
Packit |
1c1d7e |
// g_name.resize(0);
|
|
Packit |
1c1d7e |
// g_args.resize(0);
|
|
Packit |
1c1d7e |
g_parmName.resize(0);
|
|
Packit |
1c1d7e |
g_parmType.resize(0);
|
|
Packit |
1c1d7e |
if(!g_lexInit)
|
|
Packit |
1c1d7e |
VhdlDocGen::init();
|
|
Packit |
1c1d7e |
if (memberDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setParameterList(memberDef);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/*int iLine=*/countLines();
|
|
Packit |
1c1d7e |
vhdlcodeYYrestart( vhdlcodeYYin );
|
|
Packit |
1c1d7e |
BEGIN( Bases );
|
|
Packit |
1c1d7e |
vhdlcodeYYlex();
|
|
Packit |
1c1d7e |
g_lexInit=TRUE;
|
|
Packit |
1c1d7e |
if (g_needsTermination)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
endCodeLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (fd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
TooltipManager::instance()->writeTooltips(*g_code);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (cleanupSourceDef)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// delete the temporary file definition used for this example
|
|
Packit |
1c1d7e |
delete g_sourceFileDef;
|
|
Packit |
1c1d7e |
g_sourceFileDef=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
g_startCode=FALSE;
|
|
Packit |
1c1d7e |
printlex(yy_flex_debug, FALSE, __FILE__, fd ? fd->fileName().data(): NULL);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void codeFreeVhdlScanner()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
#if defined(YY_FLEX_SUBMINOR_VERSION)
|
|
Packit |
1c1d7e |
if (g_lexInit)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
vhdlcodeYYlex_destroy();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#if !defined(YY_FLEX_SUBMINOR_VERSION)
|
|
Packit |
1c1d7e |
extern "C" { // some bogus code to keep the compiler happy
|
|
Packit |
1c1d7e |
void vhdlcodeYYdummy() { yy_flex_realloc(0,0); }
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
|
|
Packit |
1c1d7e |
#error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!"
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|