Commit 6cd51b02 authored by dimitri's avatar dimitri

Release-1.5.6

parent 2f0a01b6
DOXYGEN Version 1.5.5-20080420 DOXYGEN Version 1.5.6
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 (20 April 2008) Dimitri van Heesch (17 May 2008)
DOXYGEN Version 1.5.5_20080420 DOXYGEN Version 1.5.6
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (20 April 2008) Dimitri van Heesch (dimitri@stack.nl) (17 May 2008)
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
doxygen_version_major=1 doxygen_version_major=1
doxygen_version_minor=5 doxygen_version_minor=5
doxygen_version_revision=5 doxygen_version_revision=6
#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=20080420 doxygen_version_mmn=NO
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -1358,6 +1358,12 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ...@@ -1358,6 +1358,12 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
with previous releases of Doxygen, the values YES and NO are equivalent with previous releases of Doxygen, the values YES and NO are equivalent
to FRAME and NONE respectively. to FRAME and NONE respectively.
Via custom stylesheets (see \ref cfg_html_stylesheet "HTML_STYLESHEET")
one can further \ref doxygen_finetune "fine tune" the look of the index.
As an example, the default style sheet generated by doxygen has an
example that shows how to put an image at the root of the tree instead of
the \ref cfg_project_name "project name".
\anchor cfg_treeview_width \anchor cfg_treeview_width
<dt>\c TREEVIEW_WIDTH <dd> <dt>\c TREEVIEW_WIDTH <dd>
\addindex TREEVIEW_WIDTH \addindex TREEVIEW_WIDTH
......
...@@ -46,34 +46,34 @@ Written by Dimitri van Heesch\\[2ex] ...@@ -46,34 +46,34 @@ Written by Dimitri van Heesch\\[2ex]
\pagenumbering{arabic} \pagenumbering{arabic}
\include{index} \include{index}
\part{User Manual} \part{User Manual}
\input{install} \chapter{Installation}\label{install}\hypertarget{install}{}\input{install}
\input{starting} \chapter{Getting Started}\label{starting}\hypertarget{starting}{}\input{starting}
\input{docblocks} \chapter{Documenting the code}\label{docblocks}\hypertarget{docblocks}{}\input{docblocks}
\input{lists} \chapter{Lists}\label{lists}\hypertarget{lists}{}\input{lists}
\input{grouping} \chapter{Grouping}\label{grouping}\hypertarget{grouping}{}\input{grouping}
\input{formulas} \chapter{Including Formulas}\label{formulas}\hypertarget{formulas}{}\input{formulas}
\input{diagrams} \chapter{Graphs and diagrams}\label{diagrams}\hypertarget{diagrams}{}\input{diagrams}
\input{preprocessing} \chapter{Preprocessing}\label{preprocessing}\hypertarget{preprocessing}{}\input{preprocessing}
\input{autolink} \chapter{Automatic link generation}\label{autolink}\hypertarget{autolink}{}\input{autolink}
\input{output} \chapter{Output Formats}\label{output}\hypertarget{output}{}\input{output}
\input{external} \chapter{Custom Commands}\label{custcmd}\hypertarget{custcmd}{}\input{custcmd}
\input{faq} \chapter{Link to external documentation}\label{external}\hypertarget{external}{}\input{external}
\input{trouble} \chapter{Frequently Asked Questions}\label{faq}\hypertarget{faq}{}\input{faq}
\chapter{Troubleshootinh}\label{trouble}\hypertarget{trouble}{}\input{trouble}
\part{Reference Manual} \part{Reference Manual}
\input{features} \chapter{Features}\label{features}\hypertarget{features}{}\input{features}
\input{history} \chapter{Doxygen History}\label{history}\hypertarget{history}{}\input{history}
\input{doxygen_usage} \chapter{Doxygen usage}\label{doxygen_usage}\hypertarget{doxygen_usage}{}\input{doxygen_usage}
\input{doxytag_usage} \chapter{Doxytag usage}\label{doxytag_usage}\hypertarget{doxytag_usage}{}\input{doxytag_usage}
\input{doxywizard_usage} \chapter{Doxywizard usage}\label{doxywizard_usage}\hypertarget{doxywizard_usage}{}\input{doxywizard_usage}
\input{installdox_usage} \chapter{Installdox usage}\label{installdox_usage}\hypertarget{installdox_usage}{}\input{installdox_usage}
\input{config} \chapter{Configuration}\label{config}\hypertarget{config}{}\input{config}
\input{commands} \chapter{Special Commands}\label{commands}\hypertarget{commands}{}\input{commands}
\input{htmlcmds} \chapter{HTML commands}\label{htmlcmds}\hypertarget{htmlcmds}{}\input{htmlcmds}
\input{xmlcmds} \chapter{XML commands}\label{xmlcmds}\hypertarget{xmlcmds}{}\input{xmlcmds}
\part{Developers Manual} \part{Developers Manual}
\input{arch} \chapter{Doxygen's internals}\label{arch}\hypertarget{arch}{}\input{arch}
\input{perlmod} \chapter{Perl Module Output format}\label{perlmod}\hypertarget{perlmod}{}\input{perlmod}
%\input{perlmod_tree} \chapter{Internationalization}\label{langhowto}\hypertarget{langhowto}{}\input{langhowto}
\input{langhowto}
\printindex \printindex
\end{document} \end{document}
...@@ -54,6 +54,7 @@ to the new configuration file. Any new options will have their default value. ...@@ -54,6 +54,7 @@ to the new configuration file. Any new options will have their default value.
Note that comments that you may have added in the original configuration file Note that comments that you may have added in the original configuration file
will be lost. will be lost.
\anchor doxygen_finetune
If you want to fine-tune the way the output looks, doxygen allows you If you want to fine-tune the way the output looks, doxygen allows you
generate default style sheet, header, and footer files that you can edit generate default style sheet, header, and footer files that you can edit
afterwards: afterwards:
......
...@@ -229,7 +229,7 @@ when the translator was updated. ...@@ -229,7 +229,7 @@ when the translator was updated.
<td>Russian</td> <td>Russian</td>
<td>Alexandr Chelpanov</td> <td>Alexandr Chelpanov</td>
<td>cav at cryptopro dot ru</td> <td>cav at cryptopro dot ru</td>
<td>1.5.4</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Serbian</td> <td>Serbian</td>
...@@ -352,7 +352,7 @@ when the translator was updated. ...@@ -352,7 +352,7 @@ when the translator was updated.
\hline \hline
Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.4.1 \\ Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.4.1 \\
\hline \hline
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & 1.5.4 \\ Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\
\hline \hline
Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.4.1 \\ Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.4.1 \\
\hline \hline
......
...@@ -168,10 +168,13 @@ tree. ...@@ -168,10 +168,13 @@ tree.
<p>As you can see, the documentation contained in <b>$doxydocs</b> <p>As you can see, the documentation contained in <b>$doxydocs</b>
does not present any special impediment to be processed by a simple does not present any special impediment to be processed by a simple
Perl script. To be able to generate meaningful output using the Perl script.
<!--
To be able to generate meaningful output using the
documentation contained in <b>$doxydocs</b> you'll probably need to documentation contained in <b>$doxydocs</b> you'll probably need to
know the semantics of the nodes of the documentation tree, which we know the semantics of the nodes of the documentation tree, which we
present in \ref perlmod_tree "this page". present in \ref perlmod_tree "this page".
-->
\section doxymodel_format Data structure describing the Perl Module documentation tree. \section doxymodel_format Data structure describing the Perl Module documentation tree.
......
...@@ -9,7 +9,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean ...@@ -9,7 +9,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and
Ukrainian. Ukrainian.
Of them, 13 translators are up-to-date, 21 translators are based on Of them, 14 translators are up-to-date, 20 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -30,6 +30,7 @@ still may be some details listed even for them: ...@@ -30,6 +30,7 @@ still may be some details listed even for them:
TranslatorItalian TranslatorItalian
TranslatorKorean TranslatorKorean
TranslatorPersian TranslatorPersian
TranslatorRussian
TranslatorSpanish -- Change the base class to Translator. TranslatorSpanish -- Change the base class to Translator.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -38,7 +39,6 @@ obsolete at the end). The other info shows the estimation of Doxygen ...@@ -38,7 +39,6 @@ obsolete at the end). The other info shows the estimation of Doxygen
version when the class was last updated and number of methods that version when the class was last updated and number of methods that
must be implemented to become up-to-date: must be implemented to become up-to-date:
TranslatorRussian 1.5.4 22 methods to implement
TranslatorMacedonian 1.5.04 22 methods to implement TranslatorMacedonian 1.5.04 22 methods to implement
Note: Change the base class to TranslatorAdapter_1_5_4. Note: Change the base class to TranslatorAdapter_1_5_4.
...@@ -690,37 +690,6 @@ TranslatorRomanian (TranslatorAdapter_1_4_1) 24 methods to implement ...@@ -690,37 +690,6 @@ TranslatorRomanian (TranslatorAdapter_1_4_1) 24 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorRussian (TranslatorAdapter_1_5_4) 22 methods to implement
-----------------
Implements 194 of the required methods.
Missing methods (should be implemented):
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)
virtual QCString trSubprograms()
virtual QCString trModulesListDescription(bool extractAll)
virtual QCString trModulesList()
virtual QCString trTypeConstraints()
virtual QCString trMemberFunctionDocumentationFortran()
virtual QCString trCompoundListDescriptionFortran()
virtual QCString trTypeDocumentation()
virtual QCString trModuleReference(const char * namespaceName)
virtual QCString trModulesMemberDescription(bool extractAll)
virtual QCString trModulesMembers()
virtual QCString trModulesIndex()
virtual QCString trCompoundListFortran()
virtual QCString trDataTypes()
virtual QCString trCompoundIndexFortran()
virtual QCString trSubprogram(bool first_capital, bool singular)
virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate)
virtual QCString trType(bool first_capital, bool singular)
virtual QCString trModule(bool first_capital, bool singular)
virtual QCString trCompoundMembersFortran()
virtual QCString trSubprogramDocumentation()
TranslatorSerbian (TranslatorAdapter_1_4_1) 24 methods to implement TranslatorSerbian (TranslatorAdapter_1_4_1) 24 methods to implement
----------------- -----------------
......
...@@ -943,7 +943,7 @@ void ClassDef::showUsedFiles(OutputList &ol) ...@@ -943,7 +943,7 @@ void ClassDef::showUsedFiles(OutputList &ol)
} }
ol.writeListItem(); ol.writeListItem();
QCString path=fd->getPath().copy(); QCString path=fd->getPath();
if (Config_getBool("FULL_PATH_NAMES")) if (Config_getBool("FULL_PATH_NAMES"))
{ {
ol.docify(stripFromPath(path)); ol.docify(stripFromPath(path));
......
...@@ -2170,6 +2170,8 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -2170,6 +2170,8 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
} }
<UsingName>\n { codifyLines(yytext); BEGIN(Body); } <UsingName>\n { codifyLines(yytext); BEGIN(Body); }
<UsingName>. { codifyLines(yytext); BEGIN(Body); } <UsingName>. { codifyLines(yytext); BEGIN(Body); }
<Body,FuncCall>"$"?"this"("->"|".") { g_code->codify(yytext); // this-> for C++, this. for C#
}
<Body>{KEYWORD}/([^a-z_A-Z0-9]) { <Body>{KEYWORD}/([^a-z_A-Z0-9]) {
startFontClass("keyword"); startFontClass("keyword");
codifyLines(yytext); codifyLines(yytext);
...@@ -2409,7 +2411,6 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -2409,7 +2411,6 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_code->codify(yytext); g_code->codify(yytext);
endFontClass(); endFontClass();
} }
<Body,FuncCall>"$"?"this->" { g_code->codify(yytext); }
<Body>"."|"->" { <Body>"."|"->" {
g_code->codify(yytext); g_code->codify(yytext);
g_memCallContext = YY_START; g_memCallContext = YY_START;
......
...@@ -2413,6 +2413,13 @@ void Config::create() ...@@ -2413,6 +2413,13 @@ void Config::create()
FALSE FALSE
); );
cb->addDependency("GENERATE_HTML"); cb->addDependency("GENERATE_HTML");
cs = addString(
"CHM_INDEX_ENCODING",
"If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\n"
"is used to encode HtmlHelp index (hhk), content (hhc) and project file\n"
"content.\n"
);
cs->addDependency("GENERATE_HTML");
cb = addBool( cb = addBool(
"BINARY_TOC", "BINARY_TOC",
"If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \n" "If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \n"
......
...@@ -400,7 +400,11 @@ static void checkUndocumentedParams() ...@@ -400,7 +400,11 @@ static void checkUndocumentedParams()
QString argName = g_memberDef->isDefine() ? a->type : a->name; QString argName = g_memberDef->isDefine() ? a->type : a->name;
argName=argName.stripWhiteSpace(); argName=argName.stripWhiteSpace();
if (argName.right(3)=="...") argName=argName.left(argName.length()-3); if (argName.right(3)=="...") argName=argName.left(argName.length()-3);
if (!argName.isEmpty() && g_paramsFound.find(argName)==0 && a->docs.isEmpty()) if (getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python && argName=="self")
{
// allow undocumented self parameter for Python
}
else if (!argName.isEmpty() && g_paramsFound.find(argName)==0 && a->docs.isEmpty())
{ {
found = TRUE; found = TRUE;
break; break;
...@@ -418,7 +422,11 @@ static void checkUndocumentedParams() ...@@ -418,7 +422,11 @@ static void checkUndocumentedParams()
{ {
QString argName = g_memberDef->isDefine() ? a->type : a->name; QString argName = g_memberDef->isDefine() ? a->type : a->name;
argName=argName.stripWhiteSpace(); argName=argName.stripWhiteSpace();
if (!argName.isEmpty() && g_paramsFound.find(argName)==0) if (getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python && argName=="self")
{
// allow undocumented self parameter for Python
}
else if (!argName.isEmpty() && g_paramsFound.find(argName)==0)
{ {
if (!first) if (!first)
{ {
......
...@@ -417,6 +417,21 @@ ...@@ -417,6 +417,21 @@
" margin-top: 1em; \n" " margin-top: 1em; \n"
" font-size: 11pt; \n" " font-size: 11pt; \n"
"}\n" "}\n"
"\n"
"/* The following two styles can be used to replace the root node title */\n"
"/* with an image of your choice. Simply uncomment the next two styles, */\n"
"/* specify the name of your image and be sure to set \'height\' to the */\n"
"/* proper pixel height of your image. */\n"
"\n"
"/* .directory h3.swap { */\n"
"/* height: 61px; */\n"
"/* background-repeat: no-repeat; */\n"
"/* background-image: url(\"yourimage.gif\"); */\n"
"/* } */\n"
"/* .directory h3.swap span { */\n"
"/* display: none; */\n"
"/* } */\n"
"\n"
".directory > h3 { \n" ".directory > h3 { \n"
" margin-top: 0; \n" " margin-top: 0; \n"
"}\n" "}\n"
......
...@@ -348,8 +348,8 @@ static bool getFortranTypeDefs(const QCString &tname, const QCString &moduleName ...@@ -348,8 +348,8 @@ static bool getFortranTypeDefs(const QCString &tname, const QCString &moduleName
searches for definition of function memberName searches for definition of function memberName
@param memberName the name of the function/variable @param memberName the name of the function/variable
@param moduleName name of enclosing module or null, if global entry @param moduleName name of enclosing module or null, if global entry
@param memberDef the entry, if found or null @param md the entry, if found or null
@param useList array of data of USE-statement @param usedict array of data of USE-statement
@returns true, if found @returns true, if found
*/ */
static bool getFortranDefs(const QCString &memberName, const QCString &moduleName, static bool getFortranDefs(const QCString &memberName, const QCString &moduleName,
......
...@@ -705,7 +705,7 @@ void FTVHelp::generateTreeView(QString* OutString) ...@@ -705,7 +705,7 @@ void FTVHelp::generateTreeView(QString* OutString)
t << "\n"; t << "\n";
t << " <body class=\"ftvtree\">\n"; t << " <body class=\"ftvtree\">\n";
t << " <div class=\"directory\">\n"; t << " <div class=\"directory\">\n";
t << " <h3>"; t << " <h3 class=\"swap\"><span>";
QCString &projName = Config_getString("PROJECT_NAME"); QCString &projName = Config_getString("PROJECT_NAME");
if (projName.isEmpty()) if (projName.isEmpty())
{ {
...@@ -715,7 +715,7 @@ void FTVHelp::generateTreeView(QString* OutString) ...@@ -715,7 +715,7 @@ void FTVHelp::generateTreeView(QString* OutString)
{ {
t << projName; t << projName;
} }
t << "</h3>\n"; t << "</span></h3>\n";
} }
else else
{ {
......
...@@ -1444,7 +1444,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket) ...@@ -1444,7 +1444,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
t << " <td>"; t << " <td>";
if (closeBracket) t << "&nbsp;)"; if (closeBracket) t << "&nbsp;)";
t << "&nbsp;</td>" << endl; t << "&nbsp;</td>" << endl;
t << " <td width=\"100%\">"; t << " <td>";
} }
else else
{ {
...@@ -1455,7 +1455,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket) ...@@ -1455,7 +1455,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
t << " <td>"; t << " <td>";
if (closeBracket) t << ")"; if (closeBracket) t << ")";
t << "</td>" << endl; t << "</td>" << endl;
t << " <td></td><td></td><td width=\"100%\">"; t << " <td></td><td></td><td>";
} }
} }
else else
......
...@@ -22,12 +22,14 @@ ...@@ -22,12 +22,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <qlist.h> #include <qlist.h>
#include <qdict.h> #include <qdict.h>
#include "qtextcodec.h"
#include "htmlhelp.h" #include "htmlhelp.h"
#include "config.h" #include "config.h"
#include "message.h" #include "message.h"
#include "doxygen.h" #include "doxygen.h"
#include "language.h" #include "language.h"
#include "portable.h"
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
...@@ -268,8 +270,13 @@ HtmlHelp::HtmlHelp() : indexFileDict(1009) ...@@ -268,8 +270,13 @@ HtmlHelp::HtmlHelp() : indexFileDict(1009)
dc = 0; dc = 0;
cf = kf = 0; cf = kf = 0;
index = new HtmlHelpIndex; index = new HtmlHelpIndex;
m_fromUtf8 = (void *)(-1);
} }
HtmlHelp::~HtmlHelp()
{
if (m_fromUtf8!=(void *)(-1)) portable_iconv_close(m_fromUtf8);
}
#if 0 #if 0
/*! return a reference to the one and only instance of this class. /*! return a reference to the one and only instance of this class.
*/ */
...@@ -289,6 +296,10 @@ static QDict<QCString> s_languageDict; ...@@ -289,6 +296,10 @@ static QDict<QCString> s_languageDict;
*/ */
void HtmlHelp::initialize() void HtmlHelp::initialize()
{ {
const char *str = Config_getString("CHM_INDEX_ENCODING");
if(!str) str = "Windows-1250";
m_fromUtf8 = portable_iconv_open(str,"UTF-8");
/* open the contents file */ /* open the contents file */
QCString fName = Config_getString("HTML_OUTPUT") + "/index.hhc"; QCString fName = Config_getString("HTML_OUTPUT") + "/index.hhc";
cf = new QFile(fName); cf = new QFile(fName);
...@@ -299,7 +310,7 @@ void HtmlHelp::initialize() ...@@ -299,7 +310,7 @@ void HtmlHelp::initialize()
} }
/* Write the header of the contents file */ /* Write the header of the contents file */
cts.setDevice(cf); cts.setDevice(cf);
cts.setEncoding(QTextStream::UnicodeUTF8); cts.setEncoding(QTextStream::Latin1);
cts << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n" cts << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n"
"<HTML><HEAD></HEAD><BODY>\n" "<HTML><HEAD></HEAD><BODY>\n"
"<OBJECT type=\"text/site properties\">\n" "<OBJECT type=\"text/site properties\">\n"
...@@ -317,7 +328,7 @@ void HtmlHelp::initialize() ...@@ -317,7 +328,7 @@ void HtmlHelp::initialize()
} }
/* Write the header of the contents file */ /* Write the header of the contents file */
kts.setDevice(kf); kts.setDevice(kf);
kts.setEncoding(QTextStream::UnicodeUTF8); kts.setEncoding(QTextStream::Latin1);
kts << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n" kts << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n"
"<HTML><HEAD></HEAD><BODY>\n" "<HTML><HEAD></HEAD><BODY>\n"
"<OBJECT type=\"text/site properties\">\n" "<OBJECT type=\"text/site properties\">\n"
...@@ -409,7 +420,7 @@ void HtmlHelp::createProjectFile() ...@@ -409,7 +420,7 @@ void HtmlHelp::createProjectFile()
{ {
QTextStream t(&f); QTextStream t(&f);
#if QT_VERSION >= 200 #if QT_VERSION >= 200
t.setEncoding(QTextStream::UnicodeUTF8); t.setEncoding(QTextStream::Latin1);
#endif #endif
...@@ -430,7 +441,7 @@ void HtmlHelp::createProjectFile() ...@@ -430,7 +441,7 @@ void HtmlHelp::createProjectFile()
"Language=" << getLanguageString() << endl; "Language=" << getLanguageString() << endl;
if (Config_getBool("BINARY_TOC")) t << "Binary TOC=YES\n"; if (Config_getBool("BINARY_TOC")) t << "Binary TOC=YES\n";
if (Config_getBool("GENERATE_CHI")) t << "Create CHI file=YES\n"; if (Config_getBool("GENERATE_CHI")) t << "Create CHI file=YES\n";
t << "Title=" << Config_getString("PROJECT_NAME") << endl << endl; t << "Title=" << recode(Config_getString("PROJECT_NAME")) << endl << endl;
t << "[WINDOWS]" << endl; t << "[WINDOWS]" << endl;
...@@ -440,7 +451,7 @@ void HtmlHelp::createProjectFile() ...@@ -440,7 +451,7 @@ void HtmlHelp::createProjectFile()
// the font-size one is not normally settable by the HTML Help Workshop // the font-size one is not normally settable by the HTML Help Workshop
// utility but the way to set it is described here: // utility but the way to set it is described here:
// http://support.microsoft.com/?scid=kb%3Ben-us%3B240062&x=17&y=18 // http://support.microsoft.com/?scid=kb%3Ben-us%3B240062&x=17&y=18
t << "main=\"" << Config_getString("PROJECT_NAME") << "\",\"index.hhc\"," t << "main=\"" << recode(Config_getString("PROJECT_NAME")) << "\",\"index.hhc\","
"\"index.hhk\",\"" << indexName << "\",\"" << "\"index.hhk\",\"" << indexName << "\",\"" <<
indexName << "\",,,,,0x23520,,0x10387e,,,,,,,,0" << endl << endl; indexName << "\",,,,,0x23520,,0x10387e,,,,,,,,0" << endl << endl;
...@@ -527,6 +538,28 @@ void HtmlHelp::decContentsDepth() ...@@ -527,6 +538,28 @@ void HtmlHelp::decContentsDepth()
--dc; --dc;
} }
QCString HtmlHelp::recode(const QCString &s)
{
int iSize = s.length();
int oSize = iSize*4+1;
QCString output(oSize);
size_t iLeft = iSize;
size_t oLeft = oSize;
const char *iPtr = s.data();
char *oPtr = output.data();
if (!portable_iconv(m_fromUtf8,&iPtr,&iLeft,&oPtr,&oLeft))
{
oSize -= oLeft;
output.resize(oSize+1);
output.at(oSize)='\0';
return output;
}
else
{
return s;
}
}
/*! Add an list item to the contents file. /*! Add an list item to the contents file.
* \param isDir boolean indicating if this is a dir or file entry * \param isDir boolean indicating if this is a dir or file entry
* \param name the name of the item. * \param name the name of the item.
...@@ -546,10 +579,9 @@ void HtmlHelp::addContentsItem(bool isDir, ...@@ -546,10 +579,9 @@ void HtmlHelp::addContentsItem(bool isDir,
file = 0; file = 0;
anchor = 0; anchor = 0;
} }
int i; for (i=0;i<dc;i++) cts << " "; int i; for (i=0;i<dc;i++) cts << " ";
cts << "<LI><OBJECT type=\"text/sitemap\">"; cts << "<LI><OBJECT type=\"text/sitemap\">";
cts << "<param name=\"Name\" value=\"" << name << "\">"; cts << "<param name=\"Name\" value=\"" << recode(name) << "\">";
if (file) // made file optional param - KPW if (file) // made file optional param - KPW
{ {
cts << "<param name=\"Local\" value=\"" << file << Doxygen::htmlFileExtension; cts << "<param name=\"Local\" value=\"" << file << Doxygen::htmlFileExtension;
......
...@@ -64,6 +64,7 @@ class HtmlHelp : public IndexIntf ...@@ -64,6 +64,7 @@ class HtmlHelp : public IndexIntf
public: public:
//static HtmlHelp *getInstance(); //static HtmlHelp *getInstance();
HtmlHelp(); HtmlHelp();
~HtmlHelp();
void initialize(); void initialize();
void finalize(); void finalize();
void incContentsDepth(); void incContentsDepth();
...@@ -88,6 +89,8 @@ class HtmlHelp : public IndexIntf ...@@ -88,6 +89,8 @@ class HtmlHelp : public IndexIntf
QStrList indexFiles; QStrList indexFiles;
QDict<void> indexFileDict; QDict<void> indexFileDict;
static HtmlHelp *theInstance; static HtmlHelp *theInstance;
QCString recode(const QCString &s);
void *m_fromUtf8;
}; };
#endif /* HTMLHELP_H */ #endif /* HTMLHELP_H */
......
...@@ -726,6 +726,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos) ...@@ -726,6 +726,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
//printf("expandExpression(%s,%s)\n",expr.data(),rest ? rest->data() : 0); //printf("expandExpression(%s,%s)\n",expr.data(),rest ? rest->data() : 0);
QCString macroName; QCString macroName;
QCString expMacro; QCString expMacro;
bool definedTest=FALSE;
int i=pos,l,p,len; int i=pos,l,p,len;
while ((p=getNextId(expr,i,&l))!=-1) // search for an macro name while ((p=getNextId(expr,i,&l))!=-1) // search for an macro name
{ {
...@@ -737,7 +738,14 @@ static void expandExpression(QCString &expr,QCString *rest,int pos) ...@@ -737,7 +738,14 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
if (g_expandedDict->find(macroName)==0) // expand macro if (g_expandedDict->find(macroName)==0) // expand macro
{ {
Define *def=isDefined(macroName); Define *def=isDefined(macroName);
if (def && def->nargs==-1) // simple macro if (definedTest) // macro name was found after defined
{
if (def) expMacro = " 1 "; else expMacro = " 0 ";
replaced=TRUE;
len=l;
definedTest=FALSE;
}
else if (def && def->nargs==-1) // simple macro
{ {
// substitute the definition of the macro // substitute the definition of the macro
//printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data()); //printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
...@@ -759,6 +767,11 @@ static void expandExpression(QCString &expr,QCString *rest,int pos) ...@@ -759,6 +767,11 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
replaced=replaceFunctionMacro(expr,rest,p+l,len,def,expMacro); replaced=replaceFunctionMacro(expr,rest,p+l,len,def,expMacro);
len+=l; len+=l;
} }
else if (macroName=="defined")
{
//printf("found defined inside macro definition '%s'\n",expr.right(expr.length()-p).data());
definedTest=TRUE;
}
if (replaced) // expand the macro and rescan the expression if (replaced) // expand the macro and rescan the expression
{ {
...@@ -767,7 +780,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos) ...@@ -767,7 +780,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
QCString resultExpr=expMacro; QCString resultExpr=expMacro;
QCString restExpr=expr.right(expr.length()-len-p); QCString restExpr=expr.right(expr.length()-len-p);
processConcatOperators(resultExpr); processConcatOperators(resultExpr);
if (!def->nonRecursive) if (def && !def->nonRecursive)
{ {
g_expandedDict->insert(macroName,def); g_expandedDict->insert(macroName,def);
expandExpression(resultExpr,&restExpr,0); expandExpression(resultExpr,&restExpr,0);
...@@ -1900,6 +1913,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1900,6 +1913,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar('*');outputChar('/'); outputChar('*');outputChar('/');
if (--g_commentCount<=0) if (--g_commentCount<=0)
{ {
if (g_lastCContext==Start)
// small hack to make sure that ^... rule will
// match when going to Start... Example: "/*...*/ some stuff..."
{
YY_CURRENT_BUFFER->yy_at_bol=1;
}
BEGIN(g_lastCContext); BEGIN(g_lastCContext);
} }
} }
......
...@@ -598,6 +598,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -598,6 +598,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x ClassCategory %x ClassCategory
%x ClassTemplSpec %x ClassTemplSpec
%x CliPropertyType %x CliPropertyType
%x CliPropertyIndex
%x CliOverride %x CliOverride
%x Bases %x Bases
%x BasesProt %x BasesProt
...@@ -934,8 +935,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -934,8 +935,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
addType( current ); addType( current );
current->name = yytext; current->name = yytext;
} }
<CliPropertyType>"["{ID}"]" { // C++/CLI indexed property <CliPropertyType>"[" { // C++/CLI indexed property
current->args = yytext; current->name += yytext;
BEGIN( CliPropertyIndex );
} }
<CliPropertyType>"{" { <CliPropertyType>"{" {
curlyCount=0; curlyCount=0;
...@@ -955,6 +957,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -955,6 +957,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
addType( current ); addType( current );
current->type += yytext; current->type += yytext;
} }
<CliPropertyIndex>"]" {
BEGIN( CliPropertyType );
current->name+=yytext;
}
<CliPropertyIndex>. {
current->name+=yytext;
}
<FindMembers>{B}*"property"{BN}+ { <FindMembers>{B}*"property"{BN}+ {
if (!current->type.isEmpty()) if (!current->type.isEmpty())
{ {
...@@ -1719,7 +1728,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1719,7 +1728,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
sharpCount++; sharpCount++;
} }
<EndTemplate>">>" { <EndTemplate>">>" {
if (insideJava || insideCS) if (insideJava || insideCS || insideCli)
{ {
unput('>'); unput('>');
unput(' '); unput(' ');
...@@ -4034,6 +4043,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4034,6 +4043,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if ( insidePHP && !containsWord(current->type,"function")) if ( insidePHP && !containsWord(current->type,"function"))
{ {
initEntry(); initEntry();
if ( *yytext == '{' )
{
lastCurlyContext = FindMembers;
curlyCount=0;
BEGIN( SkipCurly );
}
else
{
BEGIN( FindMembers );
}
} }
else else
{ {
...@@ -4543,7 +4562,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4543,7 +4562,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<ClassVar>":" { <ClassVar>":" {
current->type.resize(0); current->type.resize(0);
if ((current->spec & Entry::Interface) || if ((current->spec & Entry::Interface) ||
(current->spec & Entry::Struct) || (current->spec & Entry::Struct) ||
(current->spec & Entry::Ref) ||
(current->spec & Entry::Value) ||
insidePHP || insideCS || insideD || insideObjC insidePHP || insideCS || insideD || insideObjC
) )
baseProt=Public; baseProt=Public;
...@@ -4704,6 +4725,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4704,6 +4725,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
<Specialization>{BN}+ { lineCount(); *specName +=' '; } <Specialization>{BN}+ { lineCount(); *specName +=' '; }
<Specialization>"<<" { *specName += yytext; } <Specialization>"<<" { *specName += yytext; }
<Specialization>">>"/{B}*"::" { // M$ C++ extension to allow >> to close a template...
unput('>');
unput(' ');
unput('>');
}
<Specialization>">>" { <Specialization>">>" {
if (insideCS) // for C# >> ends a nested template if (insideCS) // for C# >> ends a nested template
{ {
......
This diff is collapsed.
...@@ -589,7 +589,7 @@ static void codifyMapLines(char *text) ...@@ -589,7 +589,7 @@ static void codifyMapLines(char *text)
else else
{ {
generateClassOrGlobalLink(*g_code,sp); generateClassOrGlobalLink(*g_code,sp);
g_PortMapComp=tt; if (dot) g_PortMapComp=tt;
} }
dot=FALSE; dot=FALSE;
g_temp.resize(0); g_temp.resize(0);
...@@ -620,7 +620,7 @@ static void codifyMapLines(char *text) ...@@ -620,7 +620,7 @@ static void codifyMapLines(char *text)
//if (dot==TRUE) //if (dot==TRUE)
//{ //{
QCString tt=g_temp; QCString tt=g_temp;
tt=tt.lower(); // tt=tt.lower();
QCString *ss; QCString *ss;
if ((ss=VhdlDocGen::findKeyWord(tt))) if ((ss=VhdlDocGen::findKeyWord(tt)))
......
...@@ -1165,28 +1165,31 @@ QCString VhdlDocGen::trTypeString(int type) ...@@ -1165,28 +1165,31 @@ QCString VhdlDocGen::trTypeString(int type)
{ {
switch(type) switch(type)
{ {
case VhdlDocGen::LIBRARY: return "Library"; case VhdlDocGen::LIBRARY: return "Library";
case VhdlDocGen::ENTITY: return "Entity"; case VhdlDocGen::ENTITY: return "Entity";
case VhdlDocGen::PACKAGE_BODY: return "Package Body"; case VhdlDocGen::PACKAGE_BODY: return "Package Body";
case VhdlDocGen::ATTRIBUTE: return "Attribute"; case VhdlDocGen::ATTRIBUTE: return "Attribute";
case VhdlDocGen::PACKAGE: return "Package"; case VhdlDocGen::PACKAGE: return "Package";
case VhdlDocGen::SIGNAL: return "Signal"; case VhdlDocGen::SIGNAL: return "Signal";
case VhdlDocGen::COMPONENT: return "Component"; case VhdlDocGen::COMPONENT: return "Component";
case VhdlDocGen::CONSTANT: return "Constant"; case VhdlDocGen::CONSTANT: return "Constant";
case VhdlDocGen::TYPE: return "Type"; case VhdlDocGen::TYPE: return "Type";
case VhdlDocGen::SUBTYPE: return "Subtype"; case VhdlDocGen::SUBTYPE: return "Subtype";
case VhdlDocGen::FUNCTION: return "Function"; case VhdlDocGen::FUNCTION: return "Function";
case VhdlDocGen::RECORD: return "Record"; case VhdlDocGen::RECORD: return "Record";
case VhdlDocGen::PROCEDURE: return "Procedure"; case VhdlDocGen::PROCEDURE: return "Procedure";
case VhdlDocGen::ARCHITECTURE: return "Architecture"; case VhdlDocGen::ARCHITECTURE: return "Architecture";
case VhdlDocGen::USE: return "Package"; case VhdlDocGen::USE: return "Package";
case VhdlDocGen::PROCESS: return "Process"; case VhdlDocGen::PROCESS: return "Process";
case VhdlDocGen::PORT: return "Port"; case VhdlDocGen::PORT: return "Port";
case VhdlDocGen::GENERIC: return "Generic"; case VhdlDocGen::GENERIC: return "Generic";
case VhdlDocGen::DOCUMENT: return "Doc"; case VhdlDocGen::DOCUMENT: return "Doc";
case VhdlDocGen::UNITS: return "Units"; case VhdlDocGen::UNITS: return "Units";
case VhdlDocGen::PORTMAP: return "Port Map"; case VhdlDocGen::PORTMAP: return "Port Map";
default: return ""; case VhdlDocGen::SHAREDVARIABLE: return "Shared Variable";
case VhdlDocGen::GROUP: return "Group";
case VhdlDocGen::VFILE: return "File";
default: return "";
} }
} // convertType } // convertType
...@@ -1497,6 +1500,14 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const ...@@ -1497,6 +1500,14 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const
} }
ol.startBold(); ol.startBold();
ol.docify(" )"); ol.docify(" )");
const char *exp=mdef->excpString();
if(exp)
{
ol.insertMemberAlign();
ol.docify("[ ");
ol.docify(exp);
ol.docify(" ]");
}
ol.endBold(); ol.endBold();
} }
...@@ -1542,16 +1553,18 @@ void VhdlDocGen::writeFuncProcDocu( ...@@ -1542,16 +1553,18 @@ void VhdlDocGen::writeFuncProcDocu(
ArgumentListIterator ali(*al); ArgumentListIterator ali(*al);
int index=ali.count(); int index=ali.count();
if (index==0){ if (index==0)
{
ol.docify(" ( ) "); ol.docify(" ( ) ");
return; return;
} }
ol.startParameterList(TRUE); ol.startParameterList(FALSE);
Argument *arg; Argument *arg;
bool first=TRUE; bool first=TRUE;
for (;(arg=ali.current());++ali) for (;(arg=ali.current());++ali)
{ {
ol.startParameterType(first,""); ol.startParameterType(first,"");
if (first) ol.writeChar('(');
if (!VhdlDocGen::isProcess(md)) if (!VhdlDocGen::isProcess(md))
{ {
if (TRUE) //VhdlDocGen::isProcedure(md)) if (TRUE) //VhdlDocGen::isProcedure(md))
...@@ -1685,6 +1698,9 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml, ...@@ -1685,6 +1698,9 @@ void VhdlDocGen::writeVhdlDeclarations(MemberList* ml,
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::PROCEDURE,FALSE),0,FALSE,VhdlDocGen::PROCEDURE); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::PROCEDURE,FALSE),0,FALSE,VhdlDocGen::PROCEDURE);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::RECORD,FALSE),0,FALSE,VhdlDocGen::RECORD); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::RECORD,FALSE),0,FALSE,VhdlDocGen::RECORD);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::UNITS,FALSE),0,FALSE,VhdlDocGen::UNITS); VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::UNITS,FALSE),0,FALSE,VhdlDocGen::UNITS);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::SHAREDVARIABLE,FALSE),0,FALSE,VhdlDocGen::SHAREDVARIABLE);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::VFILE,FALSE),0,FALSE,VhdlDocGen::VFILE);
VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::GROUP,FALSE),0,FALSE,VhdlDocGen::GROUP);
} }
...@@ -1764,6 +1780,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, ...@@ -1764,6 +1780,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
if (VhdlDocGen::isRecord(mdef)) Doxygen::tagFile << "record"; if (VhdlDocGen::isRecord(mdef)) Doxygen::tagFile << "record";
if (VhdlDocGen::isLibrary(mdef)) Doxygen::tagFile << "library"; if (VhdlDocGen::isLibrary(mdef)) Doxygen::tagFile << "library";
if (VhdlDocGen::isPackage(mdef)) Doxygen::tagFile << "package"; if (VhdlDocGen::isPackage(mdef)) Doxygen::tagFile << "package";
if (VhdlDocGen::isVariable(mdef)) Doxygen::tagFile << "shared variable";
if (VhdlDocGen::isFile(mdef)) Doxygen::tagFile << "file";
if (VhdlDocGen::isGroup(mdef)) Doxygen::tagFile << "group";
Doxygen::tagFile << "\">" << endl; Doxygen::tagFile << "\">" << endl;
Doxygen::tagFile << " <type>" << convertToXML(mdef->typeString()) << "</type>" << endl; Doxygen::tagFile << " <type>" << convertToXML(mdef->typeString()) << "</type>" << endl;
...@@ -1940,6 +1959,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, ...@@ -1940,6 +1959,9 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
case VhdlDocGen::TYPE: case VhdlDocGen::TYPE:
case VhdlDocGen::SUBTYPE: case VhdlDocGen::SUBTYPE:
case VhdlDocGen::CONSTANT: case VhdlDocGen::CONSTANT:
case VhdlDocGen::SHAREDVARIABLE:
case VhdlDocGen::VFILE:
case VhdlDocGen::GROUP:
writeLink(mdef,ol); writeLink(mdef,ol);
ol.docify(" "); ol.docify(" ");
ol.insertMemberAlign(); ol.insertMemberAlign();
...@@ -2236,6 +2258,15 @@ QCString VhdlDocGen::trVhdlType(int type,bool sing) ...@@ -2236,6 +2258,15 @@ QCString VhdlDocGen::trVhdlType(int type,bool sing)
return "Doc"; return "Doc";
case VhdlDocGen::UNITS: case VhdlDocGen::UNITS:
return "Units"; return "Units";
case VhdlDocGen::SHAREDVARIABLE:
if (sing) return "Shared Variable";
return "Shared Variables";
case VhdlDocGen::VFILE:
if (sing) return "File";
return "Files";
case VhdlDocGen::GROUP:
if (sing) return "Group";
return "Groups";
default: default:
return "Class"; return "Class";
} }
......
...@@ -69,7 +69,10 @@ class VhdlDocGen ...@@ -69,7 +69,10 @@ class VhdlDocGen
DOCUMENT, //18 0x12 DOCUMENT, //18 0x12
UNITS, UNITS,
GENERIC, GENERIC,
PORTMAP PORTMAP,
GROUP,
VFILE,
SHAREDVARIABLE
}; };
VhdlDocGen(); VhdlDocGen();
...@@ -171,6 +174,12 @@ class VhdlDocGen ...@@ -171,6 +174,12 @@ class VhdlDocGen
{ return mdef->getMemberSpecifiers()==VhdlDocGen::UNITS; } { return mdef->getMemberSpecifiers()==VhdlDocGen::UNITS; }
static bool isPackageBody(const MemberDef *mdef) static bool isPackageBody(const MemberDef *mdef)
{ return mdef->getMemberSpecifiers()==VhdlDocGen::PACKAGE_BODY; } { return mdef->getMemberSpecifiers()==VhdlDocGen::PACKAGE_BODY; }
static bool isVariable(const MemberDef *mdef)
{ return mdef->getMemberSpecifiers()==VhdlDocGen::SHAREDVARIABLE; }
static bool isFile(const MemberDef *mdef)
{ return mdef->getMemberSpecifiers()==VhdlDocGen::VFILE; }
static bool isGroup(const MemberDef *mdef)
{ return mdef->getMemberSpecifiers()==VhdlDocGen::GROUP; }
//----------------------------------------------------- //-----------------------------------------------------
// translatable items // translatable items
......
...@@ -199,6 +199,18 @@ void getType(Entry* p,char* text) ...@@ -199,6 +199,18 @@ void getType(Entry* p,char* text)
{ {
p->spec=VhdlDocGen::UNITS; p->spec=VhdlDocGen::UNITS;
} }
else if (name.contains("shared",false) && name.contains("variable",false))
{
p->spec=VhdlDocGen::SHAREDVARIABLE;
}
else if (stricmp(name.data(),"file" )==0)
{
p->spec=VhdlDocGen::VFILE;
}
else if (stricmp(name.data(),"group" )==0)
{
p->spec=VhdlDocGen::GROUP;
}
else else
{ {
err("wrong type"); err("wrong type");
...@@ -369,6 +381,11 @@ static void parseFunctionProto() ...@@ -369,6 +381,11 @@ static void parseFunctionProto()
if (qcs.contains("function",FALSE)==0 && qcs.contains("procedure",FALSE)==0) if (qcs.contains("function",FALSE)==0 && qcs.contains("procedure",FALSE)==0)
return; return;
//Entry* ppEntry=new Entry; //Entry* ppEntry=new Entry;
while (qcs.stripPrefix(" "));
if (qcs.stripPrefix("impure"))
current->exception="impure";
else if (qcs.stripPrefix("pure"))
current->exception="pure";
VhdlDocGen::parseFuncProto(qcs.data(),ql,name,ret); VhdlDocGen::parseFuncProto(qcs.data(),ql,name,ret);
current->name=name; current->name=name;
...@@ -541,15 +558,18 @@ ENDEFF ("if"|"case"|"loop"|"generate"){BR}*[;] ...@@ -541,15 +558,18 @@ ENDEFF ("if"|"case"|"loop"|"generate"){BR}*[;]
ENDE3 {BR}*[^a-zA-Z]("end"){BR}+{FUNCNAME}{BR}*[;] ENDE3 {BR}*[^a-zA-Z]("end"){BR}+{FUNCNAME}{BR}*[;]
ENDFUNC {B}*"end"{BR}+"function"{BR}+{FUNCNAME}{BR}*[;] ENDFUNC {B}*"end"{BR}+"function"{BR}+{FUNCNAME}{BR}*[;]
FUNCPROC ^{B}*("function"|"procedure"){B}* FUNCIMPURE "impure"|"pure"
FUNCPROC ^{B}*{FUNCIMPURE}*{BR}*("function"|"procedure"){B}*
ARCHITECTURE ("architecture"){BR}+{NAME}{BR}*("of") ARCHITECTURE ("architecture"){BR}+{NAME}{BR}*("of")
PROCESS ({BR}*{FUNCNAME}{B}*[:]{BR}*("process"){BR}*{PROTO})|("process"){BR}*("("){BR}*{PROTO}|[^a-zA-Z]("process"){CR}|[^a-zA-Z]("process"){BR}+("is") POST "postponed"
PROCESS ({BR}*{FUNCNAME}{B}*[:]{BR}*{POST}{BR}("process"){BR}*{PROTO})|("process"){BR}*("("){BR}*{PROTO}|[^a-zA-Z]("process"){CR}|[^a-zA-Z]("process"){BR}+("is")
ENDPROCESS ("end"){BR}*("process") ENDPROCESS ("end"){BR}*("process")
LIBUSE ^{B}*("use"|"library"){BR}+ LIBUSE ^{B}*("use"|"library"){BR}+
ENTITY ^{B}*("component"|"entity"|"package"){BR}+ ENTITY ^{B}*("component"|"entity"|"package"){BR}+
PBODY ("package"){B}+("body"){BR}+{NAME} PBODY ("package"){B}+("body"){BR}+{NAME}
SIGTYPES ^{B}*("subtype"|"type"|"constant"|"attribute"|"signal"|"units"){BR}+ SHARED ("shared"){BR}+("variable")
SIGTYPES ^{B}*({SHARED}|"file"|"group"|"subtype"|"type"|"constant"|"attribute"|"signal"|"units"){BR}+
ALLTYPESMAP {B}*[_a-zA-ZA_Z0-9. ]*{B}* ALLTYPESMAP {B}*[_a-zA-ZA_Z0-9. ]*{B}*
...@@ -691,6 +711,7 @@ ALLID [^;()\t ] ...@@ -691,6 +711,7 @@ ALLID [^;()\t ]
{ {
isBody=0; isBody=0;
scantype=0; scantype=0;
lastCompound=0;
current->section=Entry::CLASS_SEC; current->section=Entry::CLASS_SEC;
current->spec=VhdlDocGen::ENTITY; current->spec=VhdlDocGen::ENTITY;
current->protection=Public; current->protection=Public;
...@@ -1443,7 +1464,41 @@ static void initEntry(Entry *e) ...@@ -1443,7 +1464,41 @@ static void initEntry(Entry *e)
static void newEntry() static void newEntry()
{ {
current_root->addSubEntry(current); // Add only enties/architectures/packages to root
// and signals to classes where they were found
// ENTITY dlatch_93 IS -- VHDL'93-Syntax !!!
// PORT (d, clk : IN bit;
// q, qbar : OUT bit);
// GROUP path IS (SIGNAL, SIGNAL);
// GROUP d_to_q : path (d, q);
// ATTRIBUTE propagation : time;
// END dlatch_93;
if (current->spec==VhdlDocGen::ENTITY ||
current->spec==VhdlDocGen::PACKAGE ||
current->spec==VhdlDocGen::ARCHITECTURE ||
current->spec==VhdlDocGen::PACKAGE_BODY)
{
current_root->addSubEntry(current);
}
else
{
if (lastCompound)
{
lastCompound->addSubEntry(current);
}
else
{
if (lastEntity)
{
lastEntity->addSubEntry(current);
}
else
{
current_root->addSubEntry(current); // should not happen!
}
}
}
previous = current; previous = current;
current = new Entry ; current = new Entry ;
initEntry(current); initEntry(current);
......
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