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