Commit 720d85ed authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.7.5.1-20111117

parent 8491e9fb
DOXYGEN Version 1.7.5.1-20111027
DOXYGEN Version 1.7.5.1-20111117
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (27 October 2011)
Dimitri van Heesch (17 November 2011)
DOXYGEN Version 1.7.5.1_20111027
DOXYGEN Version 1.7.5.1_20111117
Please read INSTALL for compilation instructions.
......@@ -26,4 +26,4 @@ forum.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (27 October 2011)
Dimitri van Heesch (dimitri@stack.nl) (17 November 2011)
......@@ -20,7 +20,7 @@ doxygen_version_minor=7
doxygen_version_revision=5.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20111027
doxygen_version_mmn=20111117
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -414,7 +414,7 @@ Here is the same example again but now using doxygen style comments:
\endhtmlonly
Since python looks more like Java than like C or C++, you should set
\ref cfg_optimize_output_java "OPTMIZE_OUTPUT_JAVA" to \c YES in the
\ref cfg_optimize_output_java "OPTIMIZE_OUTPUT_JAVA" to \c YES in the
config file.
......
......@@ -13,7 +13,6 @@
% input used in their production; they are not affected by this license.
\documentclass[a4paper]{report}
\usepackage{a4wide}
\usepackage{makeidx}
\usepackage{fancyhdr}
\usepackage{float}
......
......@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile).
Currently (version 1.7.4), 39 languages
Currently (version 1.7.5), 39 languages
are supported (sorted alphabetically):
Afrikaans, Arabic, Armenian, Brazilian Portuguese, Catalan, Chinese,
Chinese Traditional, Croatian, Czech, Danish, Dutch, English,
......
(1.7.4)
(1.7.5)
Doxygen supports the following 39 languages (sorted alphabetically):
......
......@@ -3,12 +3,5 @@
<compound kind="class">
<name>Test</name>
<filename>class_test.html</filename>
<member kind="function">
<type>void</type>
<name>example</name>
<anchorfile>class_test.html</anchorfile>
<anchor>a47b775f65718978f1ffcd96376f8ecfa</anchor>
<arglist>()</arglist>
</member>
</compound>
</tagfile>
......@@ -165,8 +165,8 @@ QHG_LOCATION =
GENERATE_ECLIPSEHELP = YES
ECLIPSE_DOC_ID = org.doxygen.qtools
DISABLE_INDEX = YES
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
ENUM_VALUES_PER_LINE = 4
USE_INLINE_TREES = YES
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
......
......@@ -49,6 +49,7 @@ distclean: clean
ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp commentscan.cpp \
declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp \
pycode.cpp pyscanner.cpp fortrancode.cpp fortranscanner.cpp \
vhdlscanner.cpp vhdlcode.cpp tclscanner.cpp
vhdlscanner.cpp vhdlcode.cpp tclscanner.cpp vhdlparser.h \
vhdlparser.cpp
FORCE:
......@@ -1774,7 +1774,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
{
ol.writeString(" ");
ol.insertMemberAlign();
VhdlDocGen::writeClassType(this,ol,cname);
ol.writeString(VhdlDocGen::getProtectionName((VhdlDocGen::VhdlClasses)protection()));
}
ol.endMemberItem();
......@@ -1962,12 +1962,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
endTitle(ol,getOutputFileBase(),displayName());
writeDocumentationContents(ol,pageTitle);
if (generateTreeView)
{
writeNavigationPath(ol);
}
endFile(ol,TRUE);
endFileWithNavPath(this,ol);
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
......@@ -3153,7 +3148,6 @@ void ClassDef::determineIntfUsageRelation()
QCString ClassDef::compoundTypeString() const
{
if (m_impl->compType==Interface && getLanguage()==SrcLangExt_ObjC) return "class";
if (getLanguage()==SrcLangExt_Fortran)
{
switch (m_impl->compType)
......@@ -3175,7 +3169,7 @@ QCString ClassDef::compoundTypeString() const
case Class: return "class";
case Struct: return "struct";
case Union: return "union";
case Interface: return "interface";
case Interface: return getLanguage()==SrcLangExt_ObjC ? "class" : "interface";
case Protocol: return "protocol";
case Category: return "category";
case Exception: return "exception";
......@@ -3714,7 +3708,7 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,co
{
if (getLanguage()==SrcLangExt_VHDL) // use specific declarations function
{
VhdlDocGen::writeVhdlDeclarations(ml,ol,0,this,0);
VhdlDocGen::writeVhdlDeclarations(ml,ol,0,this,0,0);
}
else // use generic declaration function
{
......
......@@ -655,7 +655,7 @@ static void setParameterList(MemberDef *md)
}
}
static ClassDef *stripClassName(const char *s)
static ClassDef *stripClassName(const char *s,Definition *d=g_currentDefinition)
{
int pos=0;
QCString type = s;
......@@ -667,11 +667,11 @@ static ClassDef *stripClassName(const char *s)
ClassDef *cd=0;
if (!g_classScope.isEmpty())
{
cd=getResolvedClass(g_currentDefinition,g_sourceFileDef,g_classScope+"::"+clName);
cd=getResolvedClass(d,g_sourceFileDef,g_classScope+"::"+clName);
}
if (cd==0)
{
cd=getResolvedClass(g_currentDefinition,g_sourceFileDef,clName);
cd=getResolvedClass(d,g_sourceFileDef,clName);
}
//printf("stripClass trying `%s' = %p\n",clName.data(),cd);
if (cd)
......@@ -701,7 +701,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
if (md)
{
//printf("name=%s scope=%s\n",locName.data(),scope.data());
g_theCallContext.setClass(stripClassName(md->typeString()));
g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
return md;
}
}
......@@ -714,7 +714,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
if (md)
{
//printf("name=%s scope=%s\n",locName.data(),scope.data());
g_theCallContext.setClass(stripClassName(md->typeString()));
g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
return md;
}
}
......@@ -747,7 +747,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
if (g_scopeStack.top()!=CLASSBLOCK)
{
//fprintf(stderr,"class member `%s' mcd=%s\n",name.data(),mcd->name().data());
g_theCallContext.setClass(stripClassName(md->typeString()));
g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
}
return md;
}
......@@ -763,7 +763,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
MemberDef *md=mn->getFirst();
if (!md->isStatic() || md->getBodyDef()==g_sourceFileDef)
{
g_theCallContext.setClass(stripClassName(md->typeString()));
g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
return md;
}
return 0;
......@@ -782,7 +782,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
// defined as external.
if (!md->isStatic() || md->getBodyDef()==g_sourceFileDef)
{
g_theCallContext.setClass(stripClassName(md->typeString()));
g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
//printf("returning member %s in source file %s\n",md->name().data(),g_sourceFileDef->name().data());
return md;
}
......@@ -801,7 +801,7 @@ static void updateCallContextForSmartPointer()
MemberDef *md;
if (cd && (md=cd->isSmartPointer()))
{
ClassDef *ncd = stripClassName(md->typeString());
ClassDef *ncd = stripClassName(md->typeString(),md->getOuterScope());
if (ncd)
{
g_theCallContext.setClass(ncd);
......@@ -890,7 +890,7 @@ static bool getLinkInScope(const QCString &c, // scope
//fprintf(stderr,"d=%p linkable=%d\n",d,d?d->isLinkable():0);
if (d && d->isLinkable())
{
g_theCallContext.setClass(stripClassName(md->typeString()));
g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
//printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n",
// g_currentDefinition,g_currentMemberDef,g_insideBody);
......@@ -1106,7 +1106,7 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
}
}
ClassDef *typeClass = stripClassName(removeAnonymousScopes(xmd->typeString()));
ClassDef *typeClass = stripClassName(removeAnonymousScopes(xmd->typeString()),xmd->getOuterScope());
//fprintf(stderr,"%s -> typeName=%p\n",xmd->typeString(),typeClass);
g_theCallContext.setClass(typeClass);
......@@ -1219,7 +1219,7 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
vmd->getClassDef()==jcd)
{
//printf("Found variable type=%s\n",vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString(),vmd->getOuterScope());
if (mcd && mcd->isLinkable())
{
if (generateClassMemberLink(ol,mcd,memName)) return;
......@@ -1240,7 +1240,7 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
vmd->getClassDef()==vcd)
{
//printf("Found variable type=%s\n",vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString(),vmd->getOuterScope());
if (mcd && mcd->isLinkable())
{
if (generateClassMemberLink(ol,mcd,memName)) return;
......
......@@ -209,8 +209,13 @@ For example adding &quot;sideeffect=\par Side Effects:\n&quot; will allow you to
put the command \sideeffect (or @sideeffect) in the documentation, which
will result in a user-defined paragraph with heading &quot;Side Effects:&quot;.
You can put \n&apos;s in the value part of an alias to insert newlines.
'>
</option>
'/>
<option type='list' id='TCL_SUBST' format='string' docs='
This tag can be used to specify a number of word-keyword mappings (TCL only).
A mapping has the form &quot;name=value&quot;. For example adding
&quot;class=itcl::class&quot; will allow you to use the command class in the
itcl::class meaning.
'/>
<option type='bool' id='OPTIMIZE_OUTPUT_FOR_C' docs='
Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
sources only. Doxygen will then generate output that is more tailored for C.
......@@ -809,7 +814,7 @@ each generated HTML page. If it is left blank doxygen will generate a
standard header. Note that when using a custom header you are responsible
for the proper inclusion of any scripts and style sheets that doxygen
needs, which is dependent on the configuration options used.
It is adviced to generate a default header using "doxygen -w html
It is advised to generate a default header using "doxygen -w html
header.html footer.html stylesheet.css YourConfigFile" and then modify
that header. Note that the header is subject to change so you typically
have to redo this when upgrading to a newer version of doxygen or when
......@@ -826,7 +831,7 @@ style sheet that is used by each HTML page. It can be used to
fine-tune the look of the HTML output. If the tag is left blank doxygen
will generate a default style sheet. Note that doxygen will try to copy
the style sheet file to the HTML output directory, so don&apos;t put your own
stylesheet in the HTML output directory as well, or it will be erased!
style sheet in the HTML output directory as well, or it will be erased!
' defval='' depends='GENERATE_HTML'/>
<option type='list' id='HTML_EXTRA_FILES' format='file' docs='
The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
......@@ -838,7 +843,7 @@ the files will be copied as-is; there are no commands or markers available.
' depends='GENERATE_HTML'/>
<option type='int' id='HTML_COLORSTYLE_HUE' docs='
The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
Doxygen will adjust the colors in the stylesheet and background images
Doxygen will adjust the colors in the style sheet and background images
according to this color. Hue is specified as an angle on a colorwheel,
see http://en.wikipedia.org/wiki/Hue for more information.
For instance the value 0 represents red, 60 is yellow, 120 is green,
......@@ -1211,7 +1216,7 @@ programs which support those fields.
Note: wordpad (write) and others do not support links.
' defval='0' depends='GENERATE_RTF'/>
<option type='string' id='RTF_STYLESHEET_FILE' format='file' docs='
Load stylesheet definitions from file. Syntax is similar to doxygen&apos;s
Load style sheet definitions from file. Syntax is similar to doxygen&apos;s
config file, i.e. a series of assignments. You only have to provide
replacements, missing definitions are set to their default value.
' defval='' depends='GENERATE_RTF'/>
......@@ -1456,7 +1461,7 @@ set the path where dot can find it.
If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
will generate a graph for each documented class showing the direct and
indirect inheritance relations. Setting this tag to YES will force the
the CLASS_DIAGRAMS tag to NO.
CLASS_DIAGRAMS tag to NO.
' defval='1' depends='HAVE_DOT'/>
<option type='bool' id='COLLABORATION_GRAPH' docs='
If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
......
......@@ -294,6 +294,14 @@ void addConfigOptions(Config *cfg)
"You can put \\n's in the value part of an alias to insert newlines."
);
//----
cl = cfg->addList(
"TCL_SUBST",
"This tag can be used to specify a number of word-keyword mappings (TCL only).\n"
"A mapping has the form \"name=value\". For example adding\n"
"\"class=itcl::class\" will allow you to use the command class in the\n"
"itcl::class meaning."
);
//----
cb = cfg->addBool(
"OPTIMIZE_OUTPUT_FOR_C",
"Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C\n"
......@@ -1156,7 +1164,7 @@ void addConfigOptions(Config *cfg)
"standard header. Note that when using a custom header you are responsible\n"
" for the proper inclusion of any scripts and style sheets that doxygen\n"
"needs, which is dependent on the configuration options used.\n"
"It is adviced to generate a default header using \"doxygen -w html\n"
"It is advised to generate a default header using \"doxygen -w html\n"
"header.html footer.html stylesheet.css YourConfigFile\" and then modify\n"
"that header. Note that the header is subject to change so you typically\n"
"have to redo this when upgrading to a newer version of doxygen or when\n"
......@@ -1181,7 +1189,7 @@ void addConfigOptions(Config *cfg)
"fine-tune the look of the HTML output. If the tag is left blank doxygen\n"
"will generate a default style sheet. Note that doxygen will try to copy\n"
"the style sheet file to the HTML output directory, so don't put your own\n"
"stylesheet in the HTML output directory as well, or it will be erased!"
"style sheet in the HTML output directory as well, or it will be erased!"
);
cs->setWidgetType(ConfigString::File);
cs->addDependency("GENERATE_HTML");
......@@ -1201,7 +1209,7 @@ void addConfigOptions(Config *cfg)
ci = cfg->addInt(
"HTML_COLORSTYLE_HUE",
"The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.\n"
"Doxygen will adjust the colors in the stylesheet and background images\n"
"Doxygen will adjust the colors in the style sheet and background images\n"
"according to this color. Hue is specified as an angle on a colorwheel,\n"
"see http://en.wikipedia.org/wiki/Hue for more information.\n"
"For instance the value 0 represents red, 60 is yellow, 120 is green,\n"
......@@ -1807,7 +1815,7 @@ void addConfigOptions(Config *cfg)
//----
cs = cfg->addString(
"RTF_STYLESHEET_FILE",
"Load stylesheet definitions from file. Syntax is similar to doxygen's\n"
"Load style sheet definitions from file. Syntax is similar to doxygen's\n"
"config file, i.e. a series of assignments. You only have to provide\n"
"replacements, missing definitions are set to their default value."
);
......@@ -2198,7 +2206,7 @@ void addConfigOptions(Config *cfg)
"If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen\n"
"will generate a graph for each documented class showing the direct and\n"
"indirect inheritance relations. Setting this tag to YES will force the\n"
"the CLASS_DIAGRAMS tag to NO.",
"CLASS_DIAGRAMS tag to NO.",
TRUE
);
cb->addDependency("HAVE_DOT");
......
......@@ -426,15 +426,9 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.endContents();
if (generateTreeView)
{
writeNavigationPath(ol);
}
endFileWithNavPath(this,ol);
endFile(ol,TRUE);
ol.popGeneratorState();
}
void DirDef::setLevel()
......@@ -735,12 +729,8 @@ void DirRelation::writeDocumentation(OutputList &ol)
ol.endContents();
if (generateTreeView)
{
m_src->writeNavigationPath(ol);
}
endFileWithNavPath(m_src,ol);
endFile(ol,TRUE);
ol.popGeneratorState();
}
......
......@@ -301,7 +301,7 @@ LISTITEM {BLANK}*{OPTSTARS}"-"("#")?{WS}
ENDLIST {BLANK}*{OPTSTARS}"."{BLANK}*\n
ATTRIB {ID}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=]
URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)*
URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)+
FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+]
FILEECHAR [a-z_A-Z0-9\-\+]
HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)*
......@@ -469,6 +469,11 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
}
return TK_COMMAND;
}
<St_Para>("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK}/\. { // URL.
g_token->name=yytext;
g_token->isEMailAddr=FALSE;
return TK_URL;
}
<St_Para>("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK} { // URL
g_token->name=yytext;
g_token->isEMailAddr=FALSE;
......
......@@ -537,11 +537,12 @@ static bool readSVGSize(const QCString &fileName,int *width,int *height)
if (numBytes>0)
{
buf[numBytes]='\0';
if (strncmp(buf,"<!--zoomable-->",15)==0)
if (strncmp(buf,"<!--zoomable ",13)==0)
{
//printf("Found zoomable for %s!\n",fileName.data());
*width=-1;
*height=-1;
sscanf(buf,"<!--zoomable %d",height);
//printf("Found zoomable for %s!\n",fileName.data());
found=TRUE;
}
else if (sscanf(buf,"<svg width=\"%dpt\" height=\"%dpt\"",width,height)==2)
......@@ -569,18 +570,23 @@ static void writeSVGNotSupported(FTextStream &out)
static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath,
const QCString &baseName,const QCString &absImgName)
{
int width=600,height=450;
int width=600,height=600;
if (!readSVGSize(absImgName,&width,&height))
{
return FALSE;
}
if (width==-1 && height==-1)
if (width==-1)
{
if (height<=60)
height=60;
else
height+=40; // add some extra space for zooming
if (height>600) height=600; // clip to maximum height of 600 pixels
out << "<div class=\"zoom\">";
//out << "<object type=\"image/svg+xml\" data=\""
//out << "<embed type=\"image/svg+xml\" src=\""
out << "<iframe scrolling=\"no\" frameborder=\"0\" src=\""
<< relPath << baseName << ".svg\" width=\"100%\" height=\"600\">";
<< relPath << baseName << ".svg\" width=\"100%\" height=\"" << height << "\">";
}
else
{
......@@ -595,7 +601,7 @@ static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath,
//out << "</object>";
//out << "</embed>";
out << "</iframe>";
if (width==-1 && height==-1)
if (width==-1)
{
out << "</div>";
}
......@@ -959,7 +965,7 @@ bool DotFilePatcher::run()
if (foundSize)
{
// insert special replacement header for interactive SVGs
t << "<!--zoomable-->\n";
t << "<!--zoomable " << height << " -->\n";
t << svgZoomHeader;
t << "var viewWidth = " << width << ";\n";
t << "var viewHeight = " << height << ";\n";
......@@ -1492,7 +1498,6 @@ static QCString convertLabel(const QCString &l)
return result;
}
#if 0
static QCString escapeTooltip(const QCString &tooltip)
{
QCString result;
......@@ -1503,13 +1508,12 @@ static QCString escapeTooltip(const QCString &tooltip)
{
switch(c)
{
case '\\': result+="\\\\"; break;
default: result+=c; break;
case '"': result+="\\\""; break;
default: result+=c; break;
}
}
return result;
}
#endif
static void writeBoxMemberList(FTextStream &t,
char prot,MemberList *ml,ClassDef *scope,
......@@ -1653,7 +1657,7 @@ void DotNode::writeBox(FTextStream &t,
}
if (!m_tooltip.isEmpty())
{
t << ",tooltip=\"" << /*escapeTooltip(m_tooltip)*/ m_tooltip << "\"";
t << ",tooltip=\"" << escapeTooltip(m_tooltip) << "\"";
}
}
t << "];" << endl;
......@@ -2010,6 +2014,9 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
{
//printf("DotGfxHierarchyTable::writeGraph(%s)\n",name);
//printf("m_rootNodes=%p count=%d\n",m_rootNodes,m_rootNodes->count());
static bool vhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (m_rootSubgraphs->count()==0) return;
QDir d(path);
......@@ -2028,6 +2035,18 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
for (dnli.toFirst();(n=dnli.current());++dnli)
{
QCString baseName;
if (vhdl)
{
QCString l=n->m_url;
l=VhdlDocGen::convertFileNameToClassName(l);
ClassDef *cd=Doxygen::classSDict->find(l);
if (cd==0) continue;
// only entities are shown
if ((VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
continue;
}
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
baseName.sprintf("inherit_graph_%d",count++);
//baseName = convertNameToFile(baseName);
......
......@@ -5890,15 +5890,15 @@ static void findMember(EntryNav *rootNav,
if (count==0 && !(isFriend && funcType=="class"))
{
int candidates=0;
ClassDef *ccd = 0, *ecd = 0;
MemberDef *cmd = 0, *emd = 0;
ClassDef *ecd = 0, *ucd = 0;
MemberDef *emd = 0, *umd = 0;
if (mn->count()>0)
{
//printf("Assume template class\n");
for (mni.toFirst();(md=mni.current());++mni)
{
ccd=md->getClassDef();
cmd=md;
ClassDef *ccd=md->getClassDef();
MemberDef *cmd=md;
//printf("ccd->name()==%s className=%s\n",ccd->name().data(),className.data());
if (ccd!=0 && rightScopeMatch(ccd->name(),className))
{
......@@ -5911,8 +5911,19 @@ static void findMember(EntryNav *rootNav,
}
if (md->argsString()==argListToString(root->argList,TRUE,FALSE))
{ // exact argument list match -> remember
ecd = ccd;
emd = cmd;
ucd = ecd = ccd;
umd = emd = cmd;
Debug::print(Debug::FindMembers,0,
"7. new candidate className=%s scope=%s args=%s exact match\n",
className.data(),ccd->name().data(),md->argsString());
}
else // arguments do not match, but member name and scope do -> remember
{
ucd = ccd;
umd = cmd;
Debug::print(Debug::FindMembers,0,
"7. new candidate className=%s scope=%s args=%s no match\n",
className.data(),ccd->name().data(),md->argsString());
}
candidates++;
}
......@@ -5921,11 +5932,11 @@ static void findMember(EntryNav *rootNav,
static bool strictProtoMatching = Config_getBool("STRICT_PROTO_MATCHING");
if (!strictProtoMatching)
{
if (candidates==1 && ccd && cmd)
if (candidates==1 && ucd && umd)
{
// we didn't find an actual match on argument lists, but there is only 1 member with this
// name in the same scope, so that has to be the one.
addMemberDocs(rootNav,cmd,funcDecl,0,overloaded,0);
addMemberDocs(rootNav,umd,funcDecl,0,overloaded,0);
return;
}
else if (candidates>1 && ecd && emd)
......@@ -8586,120 +8597,6 @@ static QCString fixSlashes(QCString &s)
#endif
//----------------------------------------------------------------------------
// generate files for the search engine
//static void generateSearchIndex()
//{
// if (Config_getBool("SEARCHENGINE") && Config_getBool("GENERATE_HTML"))
// {
// // create search index
// QCString fileName;
// writeSearchButton(Config_getString("HTML_OUTPUT"));
//
//#if !defined(_WIN32)
// // create cgi script
// fileName = Config_getString("HTML_OUTPUT")+"/"+Config_getString("CGI_NAME");
// QFile f(fileName);
// if (f.open(IO_WriteOnly))
// {
// QTextStream t(&f);
// t << "#!/bin/sh" << endl
// << "DOXYSEARCH=" << Config_getString("BIN_ABSPATH") << "/doxysearch" << endl
// << "DOXYPATH=\"" << Config_getString("DOC_ABSPATH") << " ";
//
// QStrList &extDocPaths=Config_getList("EXT_DOC_PATHS");
// char *s= extDocPaths.first();
// while (s)
// {
// t << s << " ";
// s=extDocPaths.next();
// }
//
// t << "\"" << endl
// << "if [ -f $DOXYSEARCH ]" << endl
// << "then" << endl
// << " $DOXYSEARCH $DOXYPATH" << endl
// << "else" << endl
// << " echo \"Content-Type: text/html\"" << endl
// << " echo \"\"" << endl
// << " echo \"<h2>error: $DOXYSEARCH not found. Check cgi script!</h2>\"" << endl
// << "fi" << endl;
//
// f.close();
// struct stat stat_struct;
// stat(fileName,&stat_struct);
// chmod(fileName,stat_struct.st_mode|S_IXUSR|S_IXGRP|S_IXOTH);
// }
// else
// {
// err("error: Cannot open file %s for writing\n",fileName.data());
// }
//#else /* Windows platform */
// // create cgi program
// fileName = Config_getString("CGI_NAME").copy();
// if (fileName.right(4)==".cgi")
// fileName=fileName.left(fileName.length()-4);
// fileName+=".c";
// fileName.prepend(Config_getString("HTML_OUTPUT")+"/");
// QFile f(fileName);
// if (f.open(IO_WriteOnly))
// {
// QTextStream t(&f);
// t << "#include <stdio.h>" << endl;
// t << "#include <stdlib.h>" << endl;
// t << "#include <process.h>" << endl;
// t << endl;
// t << "const char *DOXYSEARCH = \"" <<
// fixSlashes(Config_getString("BIN_ABSPATH")) << "\\\\doxysearch.exe\";" << endl;
// t << "const char *DOXYPATH = \"" <<
// fixSlashes(Config_getString("DOC_ABSPATH")) << "\";" << endl;
// t << endl;
// t << "int main(void)" << endl;
// t << "{" << endl;
// t << " char buf[1024];" << endl;
// t << " sprintf(buf,\"%s %s\",DOXYSEARCH,DOXYPATH);" << endl;
// t << " if (system(buf))" << endl;
// t << " {" << endl;
// t << " printf(\"Content-Type: text/html\\n\\n\");" << endl;
// t << " printf(\"<h2>error: failed to execute %s</h2>\\n\",DOXYSEARCH);" << endl;
// t << " exit(1);" << endl;
// t << " }" << endl;
// t << " return 0;" << endl;
// t << "}" << endl;
// f.close();
// }
// else
// {
// err("error: Cannot open file %s for writing\n",fileName.data());
// }
//#endif /* !defined(_WIN32) */
//
// // create config file
// fileName = Config_getString("HTML_OUTPUT")+"/search.cfg";
// f.setName(fileName);
// if (f.open(IO_WriteOnly))
// {
// QTextStream t(&f);
// t << Config_getString("DOC_URL") << "/" << endl
// << Config_getString("CGI_URL") << "/" << Config_getString("CGI_NAME") << endl;
// f.close();
// }
// else
// {
// err("error: Cannot open file %s for writing\n",fileName.data());
// }
// //g_outputList->generateExternalIndex();
// g_outputList->pushGeneratorState();
// g_outputList->disableAllBut(OutputGenerator::Html);
// startFile(*g_outputList,"header"+Doxygen::htmlFileExtension,0,"Search Engine",TRUE);
// g_outputList->endPlainFile();
// g_outputList->startPlainFile("footer"+Doxygen::htmlFileExtension);
// endFile(*g_outputList,TRUE);
// g_outputList->popGeneratorState();
// }
//}
//----------------------------------------------------------------------------
static bool openOutputFile(const char *outFile,QFile &f)
......@@ -10490,7 +10387,7 @@ void parseInput()
computeTemplateClassRelations();
flushUnresolvedRelations();
computeClassRelations();
VhdlDocGen::computeVhdlComponentRelations();
//VhdlDocGen::computeVhdlComponentRelations(); // @MARTIN: removed because it breaks non-vhdl code
g_classEntries.clear();
msg("Add enum values to enums...\n");
......
......@@ -2,7 +2,8 @@
body, table, div, p, dl {
font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
font-size: 12px;
font-size: 13px;
line-height: 1.5;
}
/* @group Heading Levels */
......@@ -126,7 +127,7 @@ a.code {
}
a.codeRef {
color: ##60;
color: #4665A2;
}
/* @end */
......
......@@ -2,7 +2,8 @@
"\n"
"body, table, div, p, dl {\n"
" font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;\n"
" font-size: 12px;\n"
" font-size: 13px;\n"
" line-height: 1.5;\n"
"}\n"
"\n"
"/* @group Heading Levels */\n"
......@@ -126,7 +127,7 @@
"}\n"
"\n"
"a.codeRef {\n"
" color: ##60;\n"
" color: #4665A2; \n"
"}\n"
"\n"
"/* @end */\n"
......
......@@ -278,7 +278,8 @@ class Entry
Protocol = 0x0100,
Category = 0x0200,
SealedClass = 0x0400,
AbstractClass = 0x0800
AbstractClass = 0x0800,
Enum = 0x1000 // for Java-style enums
};
enum GroupDocType
{
......
......@@ -697,12 +697,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.endContents();
if (generateTreeView)
{
writeNavigationPath(ol);
}
endFile(ol,TRUE);
endFileWithNavPath(this,ol);
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
......@@ -831,15 +826,7 @@ void FileDef::writeSource(OutputList &ol)
);
ol.endCodeFragment();
ol.endContents();
if (generateTreeView)
{
writeNavigationPath(ol);
endFile(ol,TRUE);
}
else
{
endFile(ol);
}
endFileWithNavPath(this,ol);
ol.enableAll();
}
......@@ -1628,7 +1615,8 @@ void FileDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,con
{
if (optVhdl) // use specific declarations function
{
VhdlDocGen::writeVhdlDeclarations(ml,ol,0,0,this);
VhdlDocGen::writeVhdlDeclarations(ml,ol,0,0,this,0);
}
else
{
......
......@@ -654,7 +654,7 @@ ARGS {BS}({ARGS_L0}|{ARGS_L1}|{ARGS_L2})
NUM_TYPE (complex|integer|logical|real)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS})
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLEX|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS})
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|ELEMENTAL)
......
......@@ -178,6 +178,7 @@ static Protection defaultProtection;
static Protection typeProtection;
static int typeMode = false;
static InterfaceType ifType = IF_NONE;
static bool functionLine = FALSE;
static char stringStartSymbol; // single or double quote
......@@ -246,7 +247,7 @@ NOARGS {BS}"\n"
NUM_TYPE (complex|integer|logical|real)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?)
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLEX|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?)
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE)
......@@ -303,6 +304,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*-----------------------------------------------------------------------------------*/
<*>^.*\n { // prepass: look for line continuations
functionLine = FALSE;
//fprintf(stderr, "---%s", yytext);
......@@ -982,10 +984,13 @@ private {
BEGIN(SubprogBody);
}
<SubprogBody>result{BS}\({BS}{ID} {
result= yytext;
result= result.right(result.length()-result.find("(")-1);
result= result.stripWhiteSpace();
modifiers[current_root->parent()][current_root->name.lower()].returnName = result;
if (functionLine)
{
result= yytext;
result= result.right(result.length()-result.find("(")-1);
result= result.stripWhiteSpace();
modifiers[current_root->parent()][current_root->name.lower()].returnName = result;
}
//cout << "=====> got result " << result << endl;
}
......@@ -1907,6 +1912,7 @@ static void addSubprogram(const char *text)
subrCurrent.prepend(current);
current->section = Entry::FUNCTION_SEC ;
QCString subtype = text; subtype=subtype.lower().stripWhiteSpace();
functionLine = subtype=="function";
current->type += " " + subtype;
current->type = current->type.stripWhiteSpace();
current->fileName = yyFileName;
......
......@@ -1422,7 +1422,7 @@ void GroupDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,co
MemberList * ml = getMemberList(lt);
if (optimizeVhdl && ml)
{
VhdlDocGen::writeVhdlDeclarations(ml,ol,this,0,0);
VhdlDocGen::writeVhdlDeclarations(ml,ol,this,0,0,0);
return;
}
if (ml)
......
......@@ -2,6 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/>
......
......@@ -2,6 +2,7 @@
"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
"<head>\n"
"<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"
"<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n"
"<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->\n"
"<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->\n"
"<link href=\"$relpath$tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
......
......@@ -33,7 +33,7 @@
#include "htmlhelp.h"
#include "docparser.h"
#include "htmldocvisitor.h"
#include "index.h"
#include "searchindex.h"
#include "pagedef.h"
#include "debug.h"
#include "dirdef.h"
......@@ -992,7 +992,7 @@ static QCString substituteHtmlKeywords(const QCString &s,const char *title,
{
path.prepend(relPath);
}
mathJaxJs = "<script src=\"" + path + "MathJax.js\">\n"
mathJaxJs = "<script type=\"text/x-mathjax-config\">\n"
" MathJax.Hub.Config({\n"
" extensions: [\"tex2jax.js\"";
QStrList &mathJaxExtensions = Config_getList("MATHJAX_EXTENSIONS");
......@@ -1006,6 +1006,7 @@ static QCString substituteHtmlKeywords(const QCString &s,const char *title,
" jax: [\"input/TeX\",\"output/HTML-CSS\"],\n"
"});\n"
"</script>";
mathJaxJs += "<script src=\"" + path + "MathJax.js\"></script>\n";
}
// first substitute generic keywords
......
This diff is collapsed.
......@@ -258,6 +258,7 @@ void startFile(OutputList &ol,const char *name,const char *manName,
const char *title,HighlightedItem hli=HLI_None,
bool additionalIndices=FALSE,const char *altSidebarName=0);
void endFile(OutputList &ol,bool skipNavIndex=FALSE);
void endFileWithNavPath(Definition *d,OutputList &ol);
void initClassMemberIndices();
void initFileMemberIndices();
......@@ -266,8 +267,4 @@ void addClassMemberNameToIndex(MemberDef *md);
void addFileMemberNameToIndex(MemberDef *md);
void addNamespaceMemberNameToIndex(MemberDef *md);
// search engine
void writeJavascriptSearchIndex();
void writeSearchCategories(FTextStream &t);
#endif
......@@ -255,7 +255,7 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
m_sHandler.insert("class/memberdecl/nestedclasses",
new StartElementHandlerSection(this,LayoutDocEntry::ClassNestedClasses,&LayoutParser::startSectionEntry,
vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) :
vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE) :
fortranOpt ? theTranslator->trDataTypes() :
theTranslator->trCompounds()
));
......@@ -400,13 +400,13 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandler(this,&LayoutParser::startMemberDecl));
m_sHandler.insert("namespace/memberdecl/nestednamespaces",
new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry,
javaOpt ? theTranslator->trPackages() :
javaOpt || vhdlOpt ? theTranslator->trPackages() :
fortranOpt ? theTranslator->trModules() :
theTranslator->trNamespaces()
));
m_sHandler.insert("namespace/memberdecl/classes",
new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry,
vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) :
vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE) :
fortranOpt ? theTranslator->trDataTypes() :
theTranslator->trCompounds()
));
......@@ -480,7 +480,7 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandler(this,&LayoutParser::startMemberDecl));
m_sHandler.insert("file/memberdecl/classes",
new StartElementHandlerSection(this,LayoutDocEntry::FileClasses,&LayoutParser::startSectionEntry,
vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) :
vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE) :
fortranOpt ? theTranslator->trDataTypes() :
theTranslator->trCompounds()
));
......@@ -558,7 +558,7 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandler(this,&LayoutParser::startMemberDecl));
m_sHandler.insert("group/memberdecl/classes",
new StartElementHandlerSection(this,LayoutDocEntry::GroupClasses,&LayoutParser::startSectionEntry,
vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE) :
vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE) :
fortranOpt ? theTranslator->trDataTypes() :
theTranslator->trCompounds()
));
......@@ -827,21 +827,21 @@ class LayoutParser : public QXmlDefaultHandler
},
{ "namespaces",
LayoutNavEntry::Namespaces,
javaOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModules() : theTranslator->trNamespaces(),
javaOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
javaOpt ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
javaOpt || vhdlOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModules() : theTranslator->trNamespaces(),
javaOpt || vhdlOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
javaOpt || vhdlOpt ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
"namespaces"
},
{ "namespacelist",
LayoutNavEntry::NamespaceList,
javaOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
javaOpt || vhdlOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
QCString(),
javaOpt ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
javaOpt || vhdlOpt ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
"namespaces"
},
{ "namespacemembers",
LayoutNavEntry::NamespaceMembers,
javaOpt ? theTranslator->trPackageMembers() : fortranOpt ? theTranslator->trModulesMembers() : theTranslator->trNamespaceMembers(),
javaOpt || vhdlOpt ? theTranslator->trPackageMembers() : fortranOpt ? theTranslator->trModulesMembers() : theTranslator->trNamespaceMembers(),
QCString(),
fortranOpt ? theTranslator->trModulesMemberDescription(extractAll) : theTranslator->trNamespaceMemberDescription(extractAll),
"namespacemembers"
......@@ -862,7 +862,7 @@ class LayoutParser : public QXmlDefaultHandler
},
{ "classlist",
LayoutNavEntry::ClassList,
theTranslator->trCompoundList(),
fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trCompoundList(),
QCString(),
fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
"annotated"
......
......@@ -250,6 +250,7 @@ SOURCES = ce_lex.cpp \
version.cpp \
vhdlcode.cpp \
vhdldocgen.cpp \
vhdlparser.cpp \
vhdlscanner.cpp \
xmldocvisitor.cpp \
xmlgen.cpp
......
......@@ -63,9 +63,6 @@ sub GenerateDep {
#$ GenerateDep("fortrancode.cpp","fortrancode.l");
$(LEX) -i -PfcodeYY -t fortrancode.l | $(INCBUFSIZE) >fortrancode.cpp
#$ GenerateDep("vhdlscanner.cpp","vhdlscanner.l");
$(LEX) -i -PvhdlscanYY -t vhdlscanner.l | $(INCBUFSIZE) >vhdlscanner.cpp
#$ GenerateDep("vhdlcode.cpp","vhdlcode.l");
$(LEX) -i -PvhdlcodeYY -t vhdlcode.l | $(INCBUFSIZE) >vhdlcode.cpp
......@@ -98,8 +95,18 @@ sub GenerateDep {
#$ GenerateDep("ce_parse.h","constexp.y");
$(YACC) -l -d -p cppExpYY constexp.y -o ce_parse.c
-rm ce_parse.c
-rm ce_parse.c
#$ GenerateDep("vhdlscanner.cpp","vhdlscanner.l","vhdlparser.h");
$(LEX) -i -PvhdlScanYY -t vhdlscanner.l | $(INCBUFSIZE) >vhdlscanner.cpp
#$ GenerateDep("vhdlparser.cpp","vhdlparser.y");
$(YACC) -l -p vhdlScanYY vhdlparser.y -o vhdlparser.cpp
#$ GenerateDep("vhdlparser.h","vhdlparser.y");
$(YACC) -l -d -p vhdlScanYY vhdlparser.y -o vhdlparser.c
-rm vhdlparser.c
#$ GenerateDep("layout.cpp","layout_default.h");
TO_C_CMD=sed -e "s/\\\\/\\\\\\\\/g" -e "s/\"/\\\\\"/g" -e "s/^/\"/g" -e "s/$$/\\\\n\"/g"
......
......@@ -464,7 +464,7 @@ void MemberList::writeDeclarations(OutputList &ol,
// 2. This might need to be repeated below for memberGroupLists
if (optimizeVhdl) // use specific declarations function
{
VhdlDocGen::writeVhdlDeclarations(this,ol,0,cd,0);
VhdlDocGen::writeVhdlDeclarations(this,ol,0,cd,0,0);
}
else
{
......@@ -585,8 +585,7 @@ void MemberList::writeDocumentationPage(OutputList &ol,
{
md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
ol.endContents();
container->writeNavigationPath(ol);
endFile(ol,TRUE);
endFileWithNavPath(container,ol);
}
else
{
......
......@@ -564,12 +564,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
ol.endContents();
if (generateTreeView)
{
writeNavigationPath(ol);
}
endFile(ol,TRUE);
endFileWithNavPath(this,ol);
if (generateTagFile)
{
......@@ -813,8 +808,13 @@ bool NamespaceSDict::declVisible() const
void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool localName)
{
if (count()==0) return; // no namespaces in the list
if (Config_getBool("OPTIMIZE_OUTPUT_VHDL")) return;
SDict<NamespaceDef>::Iterator ni(*this);
NamespaceDef *nd;
bool found=FALSE;
......
......@@ -149,14 +149,12 @@ function newNode(o, po, text, link, childrenData, lastNode)
$(a).parent().parent().addClass('selected');
$(a).parent().parent().attr('id','selected');
var anchor = $(aname);
var targetDiv = anchor.next();
$(targetDiv).children('.memproto,.memdoc').effect("highlight",{},3000);
$("#doc-content").animate({
scrollTop: anchor.position().top +
$('#doc-content').scrollTop() -
$('#doc-content').offset().top
},500,function(){
$(location).attr('href',aname);
window.location.replace(aname);
});
};
}
......@@ -308,7 +306,7 @@ function showNode(o, node, index)
var anchor = $($(location).attr('hash'));
var targetDiv = anchor.next();
$(targetDiv).children('.memproto,.memdoc').
effect("highlight", {}, 3000);
effect("highlight", {}, 1500);
}
else
{
......@@ -363,6 +361,36 @@ function initNavTree(toroot,relpath)
}
},true);
$(window).bind('hashchange', function(){
if (window.location.hash && window.location.hash.length>1){
var anchor = $(window.location.hash);
var targetDiv = anchor.next();
$(targetDiv).children('.memproto,.memdoc').effect("highlight",{},1500);
var docContent = $('#doc-content');
if (docContent && anchor && anchor[0] && anchor[0].ownerDocument){
docContent.scrollTop(anchor.position().top+docContent.scrollTop()-docContent.offset().top);
}
var a;
if ($(location).attr('hash')){
var link=stripPath($(location).attr('pathname'))+':'+
$(location).attr('hash').substring(1);
a=$('.item a[class*=\""'+link+'"\"]');
}
if (a && a.length){
$('.item').removeClass('selected');
$('.item').removeAttr('id');
a.parent().parent().addClass('selected');
a.parent().parent().attr('id','selected');
var anchor = $($(location).attr('hash'));
var targetDiv = anchor.next();
showRoot();
}
} else {
var docContent = $('#doc-content');
if (docContent){ docContent.scrollTop(0); }
}
})
$(window).load(showRoot);
}
......@@ -149,14 +149,12 @@
" $(a).parent().parent().addClass('selected');\n"
" $(a).parent().parent().attr('id','selected');\n"
" var anchor = $(aname);\n"
" var targetDiv = anchor.next();\n"
" $(targetDiv).children('.memproto,.memdoc').effect(\"highlight\",{},3000);\n"
" $(\"#doc-content\").animate({\n"
" scrollTop: anchor.position().top +\n"
" $('#doc-content').scrollTop() -\n"
" $('#doc-content').offset().top\n"
" },500,function(){\n"
" $(location).attr('href',aname);\n"
" window.location.replace(aname);\n"
" });\n"
" };\n"
" }\n"
......@@ -308,7 +306,7 @@
" var anchor = $($(location).attr('hash'));\n"
" var targetDiv = anchor.next();\n"
" $(targetDiv).children('.memproto,.memdoc').\n"
" effect(\"highlight\", {}, 3000);\n"
" effect(\"highlight\", {}, 1500);\n"
" }\n"
" else\n"
" {\n"
......@@ -363,6 +361,36 @@
" }\n"
" },true);\n"
"\n"
" $(window).bind('hashchange', function(){\n"
" if (window.location.hash && window.location.hash.length>1){\n"
" var anchor = $(window.location.hash);\n"
" var targetDiv = anchor.next();\n"
" $(targetDiv).children('.memproto,.memdoc').effect(\"highlight\",{},1500);\n"
" var docContent = $('#doc-content');\n"
" if (docContent && anchor && anchor[0] && anchor[0].ownerDocument){\n"
" docContent.scrollTop(anchor.position().top+docContent.scrollTop()-docContent.offset().top);\n"
" }\n"
" var a;\n"
" if ($(location).attr('hash')){\n"
" var link=stripPath($(location).attr('pathname'))+':'+\n"
" $(location).attr('hash').substring(1);\n"
" a=$('.item a[class*=\\\"\"'+link+'\"\\\"]');\n"
" }\n"
" if (a && a.length){\n"
" $('.item').removeClass('selected');\n"
" $('.item').removeAttr('id');\n"
" a.parent().parent().addClass('selected');\n"
" a.parent().parent().attr('id','selected');\n"
" var anchor = $($(location).attr('hash'));\n"
" var targetDiv = anchor.next();\n"
" showRoot();\n"
" }\n"
" } else {\n"
" var docContent = $('#doc-content');\n"
" if (docContent){ docContent.scrollTop(0); }\n"
" }\n"
" })\n"
"\n"
" $(window).load(showRoot);\n"
"}\n"
"\n"
......@@ -147,8 +147,7 @@ void PageDef::writeDocumentation(OutputList &ol)
if (generateTreeView && getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
{
ol.endContents();
getOuterScope()->writeNavigationPath(ol);
endFile(ol,TRUE);
endFileWithNavPath(getOuterScope(),ol);
}
else
{
......
......@@ -212,7 +212,7 @@ static void initEntry()
{
if (insideJava)
{
protection = (current_root->spec & Entry::Interface) ? Public : Package;
protection = (current_root->spec & (Entry::Interface|Entry::Enum)) ? Public : Package;
}
current->protection = protection ;
current->mtype = mtype;
......@@ -1592,7 +1592,15 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?"{" |
<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?{BN}+ { // for IDL: typedef [something] enum
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::ENUM_SEC ;
if (insideJava)
{
current->section = Entry::CLASS_SEC;
current->spec = Entry::Enum;
}
else
{
current->section = Entry::ENUM_SEC ;
}
addType( current ) ;
current->type += " enum" ;
current->fileName = yyFileName;
......@@ -2440,7 +2448,19 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
<ReadInitializer>[;,] {
//printf(">> initializer `%s' <<\n",current->initializer.data());
if (*yytext==';' || lastInitializerContext==FindFields)
if (*yytext==';' && (current_root->spec&Entry::Enum))
{
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->args = current->args.simplifyWhiteSpace();
current->name = current->name.stripWhiteSpace();
current->section = Entry::VARIABLE_SEC;
current_root->addSubEntry(current);
current = new Entry;
initEntry();
BEGIN(FindMembers);
}
else if (*yytext==';' || lastInitializerContext==FindFields)
{
unput(*yytext);
BEGIN(lastInitializerContext);
......@@ -2878,7 +2898,6 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
initEntry();
}
BEGIN( FindMembers ) ;
}
<FindMembers>"[" {
......@@ -3058,8 +3077,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
initEntry();
}
// TODO: skip until the end of the scope
BEGIN( SkipRemainder );
BEGIN( FindMembers );
}
else
{
......@@ -3078,7 +3096,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
{
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->type = "@"; // enum marker
if (!(current_root->spec&Entry::Enum))
{
current->type = "@"; // enum marker
}
current->args = current->args.simplifyWhiteSpace();
current->name = current->name.stripWhiteSpace();
current->section = Entry::VARIABLE_SEC;
......@@ -5772,7 +5793,7 @@ static void parseCompounds(Entry *rt)
inputString = ce->program;
inputPosition = 0;
scanYYrestart( scanYYin ) ;
if (ce->section==Entry::ENUM_SEC)
if (ce->section==Entry::ENUM_SEC || (ce->spec&Entry::Enum))
BEGIN( FindFields ) ;
else
BEGIN( FindMembers ) ;
......@@ -5798,7 +5819,7 @@ static void parseCompounds(Entry *rt)
}
else if (insideJava)
{
current->protection = protection = Package ;
current->protection = protection = (ce->spec & (Entry::Interface|Entry::Enum)) ? Public : Package;
}
else if (ce->spec&(Entry::Interface | Entry::Ref | Entry::Value | Entry::Struct | Entry::Union))
{
......
......@@ -13,6 +13,7 @@
right: 0px;
width: 170px;
z-index: 102;
background-color: white;
}
#MSearchBox .left
......@@ -217,6 +218,10 @@ a.SRScope:focus, a.SRScope:active {
text-decoration: underline;
}
span.SRScope {
padding-left: 4px;
}
.SRPage .SRStatus {
padding: 2px 5px;
font-size: 8pt;
......
......@@ -707,3 +707,72 @@ function SearchResults(name)
return false;
}
}
function setKeyActions(elem,action)
{
elem.setAttribute('onkeydown',action);
elem.setAttribute('onkeypress',action);
elem.setAttribute('onkeyup',action);
}
function setClassAttr(elem,attr)
{
elem.setAttribute('class',attr);
elem.setAttribute('className',attr);
}
function createResults()
{
var results = document.getElementById("SRResults");
for (var e=0; e<searchData.length; e++)
{
var id = searchData[e][0];
var srResult = document.createElement('div');
srResult.setAttribute('id','SR_'+id);
setClassAttr(srResult,'SRResult');
var srEntry = document.createElement('div');
setClassAttr(srEntry,'SREntry');
var srLink = document.createElement('a');
srLink.setAttribute('id','Item'+e);
setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
setClassAttr(srLink,'SRSymbol');
srLink.innerHTML = searchData[e][1][0];
srEntry.appendChild(srLink);
if (searchData[e][1].length==2) // single result
{
srLink.setAttribute('href',searchData[e][1][1][0]);
if (searchData[e][1][1][1])
{
srLink.setAttribute('target','_parent');
}
var srScope = document.createElement('span');
setClassAttr(srScope,'SRScope');
srScope.innerHTML = searchData[e][1][1][2];
srEntry.appendChild(srScope);
}
else // multiple results
{
srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
var srChildren = document.createElement('div');
setClassAttr(srChildren,'SRChildren');
for (var c=0; c<searchData[e][1].length-1; c++)
{
var srChild = document.createElement('a');
srChild.setAttribute('id','Item'+e+'_c'+c);
setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
setClassAttr(srChild,'SRScope');
srChild.setAttribute('href',searchData[e][1][c+1][0]);
if (searchData[e][1][c+1][1])
{
srChild.setAttribute('target','_parent');
}
srChild.innerHTML = searchData[e][1][c+1][2];
srChildren.appendChild(srChild);
}
srEntry.appendChild(srChildren);
}
srResult.appendChild(srEntry);
results.appendChild(srResult);
}
}
......@@ -13,6 +13,7 @@
" right: 0px;\n"
" width: 170px;\n"
" z-index: 102;\n"
" background-color: white;\n"
"}\n"
"\n"
"#MSearchBox .left\n"
......@@ -217,6 +218,10 @@
" text-decoration: underline;\n"
"}\n"
"\n"
"span.SRScope {\n"
" padding-left: 4px;\n"
"}\n"
"\n"
".SRPage .SRStatus {\n"
" padding: 2px 5px;\n"
" font-size: 8pt;\n"
......
......@@ -707,3 +707,72 @@
" return false;\n"
" }\n"
"}\n"
"\n"
"function setKeyActions(elem,action)\n"
"{\n"
" elem.setAttribute('onkeydown',action);\n"
" elem.setAttribute('onkeypress',action);\n"
" elem.setAttribute('onkeyup',action);\n"
"}\n"
"\n"
"function setClassAttr(elem,attr)\n"
"{\n"
" elem.setAttribute('class',attr);\n"
" elem.setAttribute('className',attr);\n"
"}\n"
"\n"
"function createResults()\n"
"{\n"
" var results = document.getElementById(\"SRResults\");\n"
" for (var e=0; e<searchData.length; e++)\n"
" {\n"
" var id = searchData[e][0];\n"
" var srResult = document.createElement('div');\n"
" srResult.setAttribute('id','SR_'+id);\n"
" setClassAttr(srResult,'SRResult');\n"
" var srEntry = document.createElement('div');\n"
" setClassAttr(srEntry,'SREntry');\n"
" var srLink = document.createElement('a');\n"
" srLink.setAttribute('id','Item'+e);\n"
" setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');\n"
" setClassAttr(srLink,'SRSymbol');\n"
" srLink.innerHTML = searchData[e][1][0];\n"
" srEntry.appendChild(srLink);\n"
" if (searchData[e][1].length==2) // single result\n"
" {\n"
" srLink.setAttribute('href',searchData[e][1][1][0]);\n"
" if (searchData[e][1][1][1])\n"
" {\n"
" srLink.setAttribute('target','_parent');\n"
" }\n"
" var srScope = document.createElement('span');\n"
" setClassAttr(srScope,'SRScope');\n"
" srScope.innerHTML = searchData[e][1][1][2];\n"
" srEntry.appendChild(srScope);\n"
" }\n"
" else // multiple results\n"
" {\n"
" srLink.setAttribute('href','javascript:searchResults.Toggle(\"SR_'+id+'\")');\n"
" var srChildren = document.createElement('div');\n"
" setClassAttr(srChildren,'SRChildren');\n"
" for (var c=0; c<searchData[e][1].length-1; c++)\n"
" {\n"
" var srChild = document.createElement('a');\n"
" srChild.setAttribute('id','Item'+e+'_c'+c);\n"
" setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');\n"
" setClassAttr(srChild,'SRScope');\n"
" srChild.setAttribute('href',searchData[e][1][c+1][0]);\n"
" if (searchData[e][1][c+1][1])\n"
" {\n"
" srChild.setAttribute('target','_parent');\n"
" }\n"
" srChild.innerHTML = searchData[e][1][c+1][2];\n"
" srChildren.appendChild(srChild);\n"
" }\n"
" srEntry.appendChild(srChildren);\n"
" }\n"
" srResult.appendChild(srEntry);\n"
" results.appendChild(srResult);\n"
" }\n"
"}\n"
"\n"
This diff is collapsed.
......@@ -25,6 +25,10 @@
#include <qintdict.h>
#include <qvector.h>
class FTextStream;
//------- server side search index ----------------------
struct URL
{
URL(const char *n,const char *u) : name(n), url(u) {}
......@@ -67,5 +71,9 @@ class SearchIndex
int m_urlIndex;
};
//------- client side search index ----------------------
void writeJavascriptSearchIndex();
void writeSearchCategories(FTextStream &t);
#endif
This diff is collapsed.
This diff is collapsed.
......@@ -66,7 +66,7 @@ function show()
windowWidth = 800;
windowHeight = 600;
}
minZoom = Math.min(windowHeight/viewHeight,windowWidth/viewWidth);
minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);
maxZoom = minZoom+1.5;
zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps);
zoomOutFactor = 1.0/zoomInFactor;
......@@ -168,6 +168,7 @@ function doZoom(g,point,zoomFactor)
function handleMouseWheel(evt)
{
if (!evt) evt = window.evt;
if (!evt.shiftKey) return; // only zoom when shift is pressed
if (evt.preventDefault) evt.preventDefault();
evt.returnValue = false;
......
......@@ -66,7 +66,7 @@
" windowWidth = 800;\n"
" windowHeight = 600;\n"
" }\n"
" minZoom = Math.min(windowHeight/viewHeight,windowWidth/viewWidth);\n"
" minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);\n"
" maxZoom = minZoom+1.5;\n"
" zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps);\n"
" zoomOutFactor = 1.0/zoomInFactor;\n"
......@@ -168,6 +168,7 @@
"function handleMouseWheel(evt) \n"
"{\n"
" if (!evt) evt = window.evt;\n"
" if (!evt.shiftKey) return; // only zoom when shift is pressed\n"
" if (evt.preventDefault) evt.preventDefault();\n"
" evt.returnValue = false;\n"
"\n"
......
This diff is collapsed.
......@@ -6274,6 +6274,10 @@ g_lang2extMap[] =
{ "python", "python", SrcLangExt_Python },
{ "fortran", "fortran", SrcLangExt_Fortran },
{ "vhdl", "vhdl", SrcLangExt_VHDL },
{ "vhd", "vhd", SrcLangExt_VHDL },
{ "ucf", "vhd", SrcLangExt_VHDL },
{ "qsf", "vhd", SrcLangExt_VHDL },
{ "dbusxml", "dbusxml", SrcLangExt_XML },
{ "tcl", "tcl", SrcLangExt_Tcl },
{ 0, 0, (SrcLangExt)0 }
......@@ -6340,6 +6344,9 @@ void initDefaultExtensionMapping()
updateLanguageMapping(".vhd", "vhdl");
updateLanguageMapping(".vhdl", "vhdl");
updateLanguageMapping(".tcl", "tcl");
updateLanguageMapping(".ucf", "vhdl");
updateLanguageMapping(".qsf", "vhdl");
//updateLanguageMapping(".xml", "dbusxml");
}
......
......@@ -119,7 +119,7 @@ static void setCurrentDoc(const QCString &name,const QCString &base,const QCStri
}
}
static bool checkString(QCString &name)
static bool checkVhdlString(QCString &name)
{
if (name.isEmpty()) return FALSE;
static QRegExp regg("[\\s\"]");
......@@ -286,7 +286,7 @@ static void writeWord(const char *word,const char* curr_class=0,bool classLink=F
}
else
{
if (!checkString(temp))
if (!checkVhdlString(temp))
g_code->codify(temp.data());
}
}
......@@ -775,6 +775,8 @@ MAPCOMPONENT2 {BN}*("port"|"generic"){BN}+("map"){BN}*("("){1}
MAPCOMPONENT3 ({ALLTYPESMAP}[:]{BN}*{ALLTYPESMAP1}{TEXTT}*{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1})
MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{ALLTYPESMAP1}{TEXTT}*{BN}*("port"|"generic"){BN}*("map"){BN}*("("){1})
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"
%option noyywrap
%option nounput
......@@ -856,7 +858,7 @@ MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{
cc=t1.at(index);
}
s2=s2.stripWhiteSpace();
if (!checkString(s2))
if (!checkVhdlString(s2))
generateMemLink(*g_code,g_CurrClass,s2);
while (index++<t1.size())
{
......@@ -1114,7 +1116,7 @@ MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{
<ParseComponent>[_a-zA_Z][_a-zA-Z0-9]* {
QCString temp(vhdlcodeYYtext);
appStringLower(g_PrevString,vhdlcodeYYtext);
if (!checkString(temp)){
if (!checkVhdlString(temp)){
if (!writeColoredWord(g_PrevString))
{
generateMemLink(*g_code,g_tempComp,temp);
......@@ -1124,7 +1126,7 @@ MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{
<ParseComponent>{STRING} {
QCString temp(vhdlcodeYYtext);
if (!checkString(temp))
if (!checkVhdlString(temp))
codifyLines(vhdlcodeYYtext);
}
......@@ -1214,8 +1216,8 @@ MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{
else
{
generateClassOrGlobalLink(*g_code,left.data());
tt=tt.right(tt.length()-left.length()-1);
tt.prepend(" ");
tt.stripPrefix(left.data()); //=tt.right(tt.length()-left.length()-1);
g_PortMapComp=left;
codifyLines(tt.data());
}
......@@ -1424,6 +1426,19 @@ MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{
writeFont("keyword",vhdlcodeYYtext);
}
<Bases>{B}*"#"[^\n]* {
writeFont("keyword",vhdlcodeYYtext);
}
<Bases>^{B}*{XILINX}[^\n]* {
writeWord(yytext);
//codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
}
<Bases>^{B}*"set_"[^\n]* {
writeWord(yytext);
}
<*>\n {
codifyLines(vhdlcodeYYtext);
BEGIN(Bases);
......@@ -1443,7 +1458,7 @@ MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{
}
else // normal comment
{
startFontClass("comment");
startFontClass("keyword");
codifyLines(text);
endFontClass();
}
......@@ -1458,7 +1473,7 @@ MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{
}
else // normal comment
{
startFontClass("comment");
startFontClass("keyword");
codifyLines(text);
endFontClass();
}
......@@ -1541,6 +1556,7 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
{
setParameterList(memberDef);
}
int iLine=countLines();
vhdlcodeYYrestart( vhdlcodeYYin );
BEGIN( Bases );
vhdlcodeYYlex();
......@@ -1555,6 +1571,7 @@ void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString
delete g_sourceFileDef;
g_sourceFileDef=0;
}
assert(g_yyLineNr==iLine);
return;
}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -1954,6 +1954,28 @@
>
</File>
<File
RelativePath="..\src\vhdlparser.cpp"
>
</File>
<File
RelativePath="..\src\vhdlparser.hpp"
>
</File>
<File
RelativePath="..\src\vhdlparser.y"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Running bison on vhdlparser.y"
CommandLine="runbison.bat $(InputDir)&#x0D;&#x0A;"
Outputs="$(InputDir)\..\src\vhdlparser.cpp"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\vhdlscanner.l"
>
<FileConfiguration
......
bison -l -d -p cppExpYY %1\..\src\constexp.y -o %1\..\src\ce_parse.c
del %1\..\src\ce_parse.c
bison -l -p cppExpYY %1\..\src\constexp.y -o %1\..\src\ce_parse.cpp
bison -l -d -p vhdlScanYY %1\..\src\vhdlparser.y -o %1\..\src\vhdlparser.c
del %1\..\src\vhdlparser.c
bison -l -p vhdlScanYY %1\..\src\vhdlparser.y -o %1\..\src\vhdlparser.cpp
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment