Commit 38c6a14b authored by dimitri's avatar dimitri

Release-1.5.4-20080123

parent d37b4be3
DOXYGEN Version 1.5.4-20080101 DOXYGEN Version 1.5.4-20080123
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 (01 January 2008) Dimitri van Heesch (23 January 2008)
...@@ -41,9 +41,12 @@ distclean: clean ...@@ -41,9 +41,12 @@ distclean: clean
-rm -r addon/doxywizard/Makefile -rm -r addon/doxywizard/Makefile
-rm -f addon/doxywizard/Makefile.doxywizard -rm -f addon/doxywizard/Makefile.doxywizard
-rm -f addon/doxywizard/doxywizard.pro -rm -f addon/doxywizard/doxywizard.pro
-rm -f addon/doxywizard/obj/*.o
-rm -f addon/doxywizard/moc/moc_* -rm -f addon/doxywizard/moc/moc_*
-rm -f addon/doxywizard/config.cpp -rm -f addon/doxywizard/config.cpp
-rm -f addon/doxywizard/lib
-rm -f addon/doxywizard/objects
-rm -f VERSION
-rm -f packages/rpm/doxygen.spec
DATE=$(shell date "+%B %Y") DATE=$(shell date "+%B %Y")
......
DOXYGEN Version 1.5.4_20080101 DOXYGEN Version 1.5.4_20080123
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) (01 January 2008) Dimitri van Heesch (dimitri@stack.nl) (23 January 2008)
...@@ -20,7 +20,7 @@ doxygen_version_minor=5 ...@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=4 doxygen_version_revision=4
#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=20080101 doxygen_version_mmn=20080123
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -88,6 +88,7 @@ documentation: ...@@ -88,6 +88,7 @@ documentation:
\refitem cmdfcurlyclose \\f} \refitem cmdfcurlyclose \\f}
\refitem cmdfile \\file \refitem cmdfile \\file
\refitem cmdfn \\fn \refitem cmdfn \\fn
\refitem cmdheaderfile \\headerfile
\refitem cmdhideinitializer \\hideinitializer \refitem cmdhideinitializer \\hideinitializer
\refitem cmdhtmlinclude \\htmlinclude \refitem cmdhtmlinclude \\htmlinclude
\refitem cmdhtmlonly \\htmlonly \refitem cmdhtmlonly \\htmlonly
...@@ -259,7 +260,9 @@ doxygen. Unrecognized commands are treated as normal text. ...@@ -259,7 +260,9 @@ doxygen. Unrecognized commands are treated as normal text.
on the default include path (like \<X11/X.h\>). With the \<header-name\> on the default include path (like \<X11/X.h\>). With the \<header-name\>
argument you can also specify how the include statement should look like, argument you can also specify how the include statement should look like,
by adding either quotes or sharp brackets around the name. by adding either quotes or sharp brackets around the name.
Sharp brackets are used if just the name is given. Sharp brackets are used if just the name is given. Note that the
last two arguments can also specified using
the \ref cmdheaderfile "\\headerfile" command.
\par Example: \par Example:
\verbinclude class.h \verbinclude class.h
...@@ -420,6 +423,24 @@ doxygen. Unrecognized commands are treated as normal text. ...@@ -420,6 +423,24 @@ doxygen. Unrecognized commands are treated as normal text.
\sa section \ref cmdvar "\\var" and \ref cmdtypedef "\\typedef". \sa section \ref cmdvar "\\var" and \ref cmdtypedef "\\typedef".
<hr>
\section cmdheaderfile \\headerfile <header-file> [<header-name>]
\addindex \\headerfile
Intended to be used for class, struct, or union documentation, where
the documentation is in front of the definition. The arguments of
this command are the same as the second and third argument of
\ref cmdclass "\\cmdclass".
The header-file name refers to the file that should by included by the
application to obtain the definition of the class, struct, or union.
The \<header-name\> argument can be used to overwrite the
name of the link that is used in the class documentation to something other
than \<header-file\>. This can be useful if the include name is not located
on the default include path (like \<X11/X.h\>). With the \<header-name\>
argument you can also specify how the include statement should look like,
by adding either quotes or sharp brackets around the name.
Sharp brackets are used if just the name is given.
<hr> <hr>
\section cmdhideinitializer \\hideinitializer \section cmdhideinitializer \\hideinitializer
......
...@@ -543,13 +543,13 @@ sources. Doxygen will then generate output that is tailored for VHDL. ...@@ -543,13 +543,13 @@ sources. Doxygen will then generate output that is tailored for VHDL.
\anchor cfg_typedef_hides_struct \anchor cfg_typedef_hides_struct
<dt>\c TYPEDEF_HIDES_STRUCT <dd> <dt>\c TYPEDEF_HIDES_STRUCT <dd>
\addindex TYPEDEF_HIDES_STRUCT \addindex TYPEDEF_HIDES_STRUCT
When \c TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is When \c TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
documented as struct with the name of the typedef. So is documented as struct, union, or enum with the name of the typedef. So
<code>typedef struct TypeS {} TypeT</code>, will appear in the documentation as a struct <code>typedef struct TypeS {} TypeT</code>, will appear in the documentation as a struct
with name \c TypeT. When disabled the typedef will appear as a member of a file, with name \c TypeT. When disabled the typedef will appear as a member of a file,
namespace, or class. And the struct will be named \c TypeS. This can typically namespace, or class. And the struct will be named \c TypeS. This can typically
be useful for C code where the coding convention is that all structs are be useful for C code in case the coding convention dictates that all compound
typedef'ed and only the typedef is referenced never the struct's name. types are typedef'ed and only the typedef is referenced, never the tag name.
</dl> </dl>
...@@ -1189,7 +1189,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ...@@ -1189,7 +1189,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
on Windows. on Windows.
The HTML Help Workshop contains a compiler that can convert all HTML output The HTML Help Workshop contains a compiler that can convert all HTML output
generated by doxygen into a single compressed HTML file (.chm). Compressed generated by doxygen into a single compiled HTML file (.chm). Compiled
HTML files are now used as the Windows 98 help format, and will replace HTML files are now used as the Windows 98 help format, and will replace
the old Windows help format (.hlp) on all Windows platforms in the future. the old Windows help format (.hlp) on all Windows platforms in the future.
Compressed HTML files also contain an index, a table of contents, Compressed HTML files also contain an index, a table of contents,
......
...@@ -39,7 +39,7 @@ The following output formats are \e directly supported by doxygen: ...@@ -39,7 +39,7 @@ The following output formats are \e directly supported by doxygen:
The following output formats are \e indirectly supported by doxygen: The following output formats are \e indirectly supported by doxygen:
<dl> <dl>
<dt><b>Compressed HTML</b> (a.k.a. Windows 98 help) <dt><b>Compiled HTML Help</b> (a.k.a. Windows 98 help)
<dd>Generated by Microsoft's HTML Help workshop from the HTML output if <dd>Generated by Microsoft's HTML Help workshop from the HTML output if
\c GENERATE_HTMLHELP is set to \c YES. \c GENERATE_HTMLHELP is set to \c YES.
<dt><b>PostScript</b> <dt><b>PostScript</b>
......
...@@ -466,7 +466,7 @@ QCString QCString::simplifyWhiteSpace() const ...@@ -466,7 +466,7 @@ QCString QCString::simplifyWhiteSpace() const
QCString &QCString::insert( uint index, const char *s ) QCString &QCString::insert( uint index, const char *s )
{ {
int len = qstrlen(s); int len = s ? qstrlen(s) : 0;
if ( len == 0 ) if ( len == 0 )
return *this; return *this;
uint olen = length(); uint olen = length();
......
...@@ -295,6 +295,7 @@ inline void QCString::duplicate( const char *str) ...@@ -295,6 +295,7 @@ inline void QCString::duplicate( const char *str)
inline QCString &QCString::duplicate( const char *str, int) inline QCString &QCString::duplicate( const char *str, int)
{ {
if (m_data==str) return *this;
if (m_data) free(m_data); if (m_data) free(m_data);
duplicate(str); duplicate(str);
return *this; return *this;
......
...@@ -84,6 +84,7 @@ SCString::~SCString() ...@@ -84,6 +84,7 @@ SCString::~SCString()
SCString &SCString::assign( const char *str ) SCString &SCString::assign( const char *str )
{ {
if (m_data==str) return *this;
if (m_data) free(m_data); if (m_data) free(m_data);
duplicate(str); duplicate(str);
return *this; return *this;
...@@ -562,8 +563,7 @@ SCString &SCString::replace( const QRegExp &rx, const char *str ) ...@@ -562,8 +563,7 @@ SCString &SCString::replace( const QRegExp &rx, const char *str )
QString d = QString::fromLatin1( m_data ); QString d = QString::fromLatin1( m_data );
QString r = QString::fromLatin1( str ); QString r = QString::fromLatin1( str );
d.replace( rx, r ); d.replace( rx, r );
operator=( d.ascii() ); return assign(d.ascii());
return *this;
} }
long SCString::toLong( bool *ok ) const long SCString::toLong( bool *ok ) const
......
...@@ -64,6 +64,7 @@ static bool g_inSpecialComment; ...@@ -64,6 +64,7 @@ static bool g_inSpecialComment;
static QCString g_aliasString; static QCString g_aliasString;
static int g_blockCount; static int g_blockCount;
static int g_lastBlockContext; static int g_lastBlockContext;
static bool g_PythonDocString;
static SrcLangExt g_lang; static SrcLangExt g_lang;
...@@ -273,6 +274,18 @@ void replaceComment(int offset); ...@@ -273,6 +274,18 @@ void replaceComment(int offset);
<Scan>[^"'\/\n\\#\\-]* { /* eat anything that is not " / or \n */ <Scan>[^"'\/\n\\#\\-]* { /* eat anything that is not " / or \n */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<Scan>"\"\"\""! { /* start of python long comment */
if (g_lang!=SrcLangExt_Python)
{
REJECT;
}
else
{
g_PythonDocString = TRUE;
copyToOutput(yytext,yyleng);
BEGIN(CComment);
}
}
<Scan>"\"" { /* start of a string */ <Scan>"\"" { /* start of a string */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
BEGIN(SkipString); BEGIN(SkipString);
...@@ -431,15 +444,34 @@ void replaceComment(int offset); ...@@ -431,15 +444,34 @@ void replaceComment(int offset);
<CComment>"*"+[^*/\\@\n]* { /* stars without slashes */ <CComment>"*"+[^*/\\@\n]* { /* stars without slashes */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<CComment>"\"\"\"" { /* end of Python docstring */
if (g_lang!=SrcLangExt_Python)
{
REJECT;
}
else
{
g_PythonDocString = FALSE;
copyToOutput(yytext,yyleng);
BEGIN(Scan);
}
}
<CComment>\n { /* new line in comment */ <CComment>\n { /* new line in comment */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<CComment>"*"+"/" { /* end of C comment */ <CComment>"*"+"/" { /* end of C comment */
copyToOutput(yytext,yyleng); if (g_lang==SrcLangExt_Python)
BEGIN(Scan); {
REJECT;
}
else
{
copyToOutput(yytext,yyleng);
BEGIN(Scan);
}
} }
<CComment>"\n"/[ \t]*[^#] { /* end of Python comment */ <CComment>"\n"/[ \t]*[^#] { /* end of Python comment */
if (g_lang!=SrcLangExt_Python) if (g_lang!=SrcLangExt_Python || g_PythonDocString)
{ {
REJECT; REJECT;
} }
...@@ -646,6 +678,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName) ...@@ -646,6 +678,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
g_skip = FALSE; g_skip = FALSE;
g_fileName = fileName; g_fileName = fileName;
g_lang = getLanguageFromFileName(fileName); g_lang = getLanguageFromFileName(fileName);
g_PythonDocString = FALSE;
g_lineNr = 0; g_lineNr = 0;
g_condStack.clear(); g_condStack.clear();
g_condStack.setAutoDelete(TRUE); g_condStack.setAutoDelete(TRUE);
......
...@@ -57,6 +57,7 @@ static bool handleWeakGroup(const QCString &); ...@@ -57,6 +57,7 @@ static bool handleWeakGroup(const QCString &);
static bool handleNamespace(const QCString &); static bool handleNamespace(const QCString &);
static bool handlePackage(const QCString &); static bool handlePackage(const QCString &);
static bool handleClass(const QCString &); static bool handleClass(const QCString &);
static bool handleHeaderFile(const QCString &);
static bool handleProtocol(const QCString &); static bool handleProtocol(const QCString &);
static bool handleCategory(const QCString &); static bool handleCategory(const QCString &);
static bool handleUnion(const QCString &); static bool handleUnion(const QCString &);
...@@ -134,6 +135,7 @@ static DocCmdMap docCmdMap[] = ...@@ -134,6 +135,7 @@ static DocCmdMap docCmdMap[] =
{ "namespace", &handleNamespace, TRUE }, { "namespace", &handleNamespace, TRUE },
{ "package", &handlePackage, TRUE }, { "package", &handlePackage, TRUE },
{ "class", &handleClass, TRUE }, { "class", &handleClass, TRUE },
{ "headerfile", &handleHeaderFile, TRUE },
{ "protocol", &handleProtocol, TRUE }, { "protocol", &handleProtocol, TRUE },
{ "category", &handleCategory, TRUE }, { "category", &handleCategory, TRUE },
{ "union", &handleUnion, TRUE }, { "union", &handleUnion, TRUE },
...@@ -1900,6 +1902,12 @@ static bool handleClass(const QCString &) ...@@ -1900,6 +1902,12 @@ static bool handleClass(const QCString &)
return stop; return stop;
} }
static bool handleHeaderFile(const QCString &)
{
BEGIN( ClassDocArg2 );
return FALSE;
}
static bool handleProtocol(const QCString &) static bool handleProtocol(const QCString &)
{ // Obj-C protocol { // Obj-C protocol
bool stop=makeStructuralIndicator(Entry::PROTOCOLDOC_SEC); bool stop=makeStructuralIndicator(Entry::PROTOCOLDOC_SEC);
......
...@@ -1214,6 +1214,7 @@ void Config::check() ...@@ -1214,6 +1214,7 @@ void Config::check()
filePatternList.append("*.dox"); filePatternList.append("*.dox");
filePatternList.append("*.py"); filePatternList.append("*.py");
filePatternList.append("*.f90"); filePatternList.append("*.f90");
filePatternList.append("*.f");
filePatternList.append("*.vhd"); filePatternList.append("*.vhd");
filePatternList.append("*.vhdl"); filePatternList.append("*.vhdl");
if (portable_fileSystemIsCaseSensitive()) if (portable_fileSystemIsCaseSensitive())
...@@ -1234,6 +1235,7 @@ void Config::check() ...@@ -1234,6 +1235,7 @@ void Config::check()
filePatternList.append("*.MM"); filePatternList.append("*.MM");
filePatternList.append("*.PY"); filePatternList.append("*.PY");
filePatternList.append("*.F90"); filePatternList.append("*.F90");
filePatternList.append("*.F");
filePatternList.append("*.VHD"); filePatternList.append("*.VHD");
filePatternList.append("*.VHDL"); filePatternList.append("*.VHDL");
} }
...@@ -1747,13 +1749,13 @@ void Config::create() ...@@ -1747,13 +1749,13 @@ void Config::create()
TRUE TRUE
); );
cb = addBool( "TYPEDEF_HIDES_STRUCT", cb = addBool( "TYPEDEF_HIDES_STRUCT",
"When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is \n" "When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \n"
"documented as struct with the name of the typedef. So \n" "is documented as struct, union, or enum with the name of the typedef. So \n"
"typedef struct TypeS {} TypeT, will appear in the documentation as a struct \n" "typedef struct TypeS {} TypeT, will appear in the documentation as a struct \n"
"with name TypeT. When disabled the typedef will appear as a member of a file, \n" "with name TypeT. When disabled the typedef will appear as a member of a file, \n"
"namespace, or class. And the struct will be named TypeS. This can typically \n" "namespace, or class. And the struct will be named TypeS. This can typically \n"
"be useful for C code where the coding convention is that all structs are \n" "be useful for C code in case the coding convention dictates that all compound \n"
"typedef'ed and only the typedef is referenced never the struct's name.\n", "types are typedef'ed and only the typedef is referenced, never the tag name.\n",
FALSE FALSE
); );
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
...@@ -2305,7 +2307,7 @@ void Config::create() ...@@ -2305,7 +2307,7 @@ void Config::create()
"GENERATE_HTMLHELP", "GENERATE_HTMLHELP",
"If the GENERATE_HTMLHELP tag is set to YES, additional index files \n" "If the GENERATE_HTMLHELP tag is set to YES, additional index files \n"
"will be generated that can be used as input for tools like the \n" "will be generated that can be used as input for tools like the \n"
"Microsoft HTML help workshop to generate a compressed HTML help file (.chm) \n" "Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \n"
"of the generated HTML documentation. \n", "of the generated HTML documentation. \n",
FALSE FALSE
); );
......
...@@ -149,7 +149,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -149,7 +149,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
<ReadFuncArgPtr>{ID} { <ReadFuncArgPtr>{ID} {
g_curArgName=yytext; g_curArgName=yytext;
} }
<ReadFuncArgPtr>")"{B}*"(" { <ReadFuncArgPtr>")"{B}*"(" { // function pointer
g_curArgTypeName+=yytext; g_curArgTypeName+=yytext;
//g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace(); //g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace();
g_readArgContext = ReadFuncArgType; g_readArgContext = ReadFuncArgType;
...@@ -157,6 +157,11 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -157,6 +157,11 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
g_argRoundCount=0; g_argRoundCount=0;
BEGIN( CopyArgRound2 ); BEGIN( CopyArgRound2 );
} }
<ReadFuncArgPtr>")"/{B}*"[" { // pointer to fixed size array
g_curArgTypeName+=yytext;
//g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace();
BEGIN( ReadFuncArgType );
}
<ReadFuncArgPtr>")" { // redundant braces detected / remove them <ReadFuncArgPtr>")" { // redundant braces detected / remove them
int i=g_curArgTypeName.findRev('('),l=g_curArgTypeName.length(); int i=g_curArgTypeName.findRev('('),l=g_curArgTypeName.length();
if (i!=-1) if (i!=-1)
......
...@@ -36,15 +36,12 @@ ...@@ -36,15 +36,12 @@
#include "htags.h" #include "htags.h"
#include "parserintf.h" #include "parserintf.h"
#include "marshal.h" #include "marshal.h"
#include "debug.h"
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
#define pclose _pclose
#endif
#define START_MARKER 0x4445465B // DEF[ #define START_MARKER 0x4445465B // DEF[
#define END_MARKER 0x4445465D // DEF] #define END_MARKER 0x4445465D // DEF]
//-----------------------------------------------------------------------------------------
class DefinitionImpl class DefinitionImpl
{ {
...@@ -476,20 +473,33 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri ...@@ -476,20 +473,33 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri
* stored in \a result. If FALSE is returned the code fragment could not be * stored in \a result. If FALSE is returned the code fragment could not be
* found. * found.
* *
* The file is scanned for a opening bracket ('{') from \a startLine onward. * The file is scanned for a opening bracket ('{') from \a startLine onward
* The line actually containing the bracket is returned via startLine. * The line actually containing the bracket is returned via startLine.
* The file is scanned for a closing bracket ('}') from \a endLine backward. * The file is scanned for a closing bracket ('}') from \a endLine backward.
* The line actually containing the bracket is returned via endLine. * The line actually containing the bracket is returned via endLine.
* Note that for VHDL code the bracket search is not done.
*/ */
static bool readCodeFragment(const char *fileName, static bool readCodeFragment(const char *fileName,
int &startLine,int &endLine,QCString &result) int &startLine,int &endLine,QCString &result)
{ {
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
//printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine); //printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
QCString cmd=getFileFilter(fileName)+" \""+fileName+"\""; QCString filter = getFileFilter(fileName);
FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r"); FILE *f=0;
bool found=vhdlOpt; // for VHDL not bracket search is possible bool usePipe = !filter.isEmpty() && filterSourceFiles;
if (!usePipe) // no filter given or wanted
{
f = fopen(fileName,"r");
}
else // use filter
{
QCString cmd=filter+" \""+fileName+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
f = portable_popen(cmd,"r");
}
bool found=vhdlOpt; // for VHDL no bracket search is possible
if (f) if (f)
{ {
int c=0; int c=0;
...@@ -584,7 +594,14 @@ static bool readCodeFragment(const char *fileName, ...@@ -584,7 +594,14 @@ static bool readCodeFragment(const char *fileName,
endLine=lineNr-1; endLine=lineNr-1;
} }
} }
if (Config_getBool("FILTER_SOURCE_FILES")) pclose(f); else fclose(f); if (usePipe)
{
portable_pclose(f);
}
else
{
fclose(f);
}
} }
result = transcodeCharacterStringToUTF8(result); result = transcodeCharacterStringToUTF8(result);
return found; return found;
......
...@@ -62,8 +62,11 @@ void DocSets::initialize() ...@@ -62,8 +62,11 @@ void DocSets::initialize()
"DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources\n" "DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources\n"
"DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents\n" "DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents\n"
"DOCSET_INSTALL=~/Library/Developer/Shared/Documentation/DocSets\n" "DOCSET_INSTALL=~/Library/Developer/Shared/Documentation/DocSets\n"
"XCODE_INSTALL=$(shell xcode-select -print-path)\n"
"\n" "\n"
"all: always\n" "all: docset\n"
"\n"
"docset:\n"
"\tmkdir -p $(DOCSET_DOCUMENTS)\n" "\tmkdir -p $(DOCSET_DOCUMENTS)\n"
"\tcp Nodes.xml $(DOCSET_RESOURCES)\n" "\tcp Nodes.xml $(DOCSET_RESOURCES)\n"
"\tcp Tokens.xml $(DOCSET_RESOURCES)\n" "\tcp Tokens.xml $(DOCSET_RESOURCES)\n"
...@@ -74,16 +77,16 @@ void DocSets::initialize() ...@@ -74,16 +77,16 @@ void DocSets::initialize()
"\t --exclude Info.plist \\\n" "\t --exclude Info.plist \\\n"
"\t --exclude Makefile -c -f - . \\\n" "\t --exclude Makefile -c -f - . \\\n"
"\t | (cd $(DOCSET_DOCUMENTS); tar xvf -)\n" "\t | (cd $(DOCSET_DOCUMENTS); tar xvf -)\n"
"\tdocsetutil index $(DOCSET_NAME)\n" "\t$(XCODE_INSTALL)/usr/bin/docsetutil index $(DOCSET_NAME)\n"
"\trm -f $(DOCSET_DOCUMENTS)/Nodes.xml\n" "\trm -f $(DOCSET_DOCUMENTS)/Nodes.xml\n"
"\trm -f $(DOCSET_DOCUMENTS)/Info.plist\n" "\trm -f $(DOCSET_DOCUMENTS)/Info.plist\n"
"\trm -f $(DOCSET_DOCUMENTS)/Makefile\n" "\trm -f $(DOCSET_DOCUMENTS)/Makefile\n"
"\trm -f $(DOCSET_RESOURCES)/Nodes.xml\n" "\trm -f $(DOCSET_RESOURCES)/Nodes.xml\n"
"\trm -f $(DOCSET_RESOURCES)/Tokens.xml\n" "\trm -f $(DOCSET_RESOURCES)/Tokens.xml\n"
"\n" "\n"
"install:\n" "install: docset\n"
"\tmkdir -p $(DOCSET_INSTALL)\n" "\tmkdir -p $(DOCSET_INSTALL)\n"
"\tcp -a $(DOCSET_NAME) $(DOCSET_INSTALL)\n" "\tcp -R $(DOCSET_NAME) $(DOCSET_INSTALL)\n"
"\n" "\n"
"uninstall:\n" "uninstall:\n"
"\trm -rf $(DOCSET_INSTALL)\n" "\trm -rf $(DOCSET_INSTALL)\n"
......
...@@ -734,7 +734,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) ...@@ -734,7 +734,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
{ // explicit request { // explicit request
QCString text; QCString text;
text.sprintf("Warning: the name `%s' supplied as " text.sprintf("Warning: the name `%s' supplied as "
"the second argument in the \\class, \\struct, or \\union statement ", "the argument of the \\class, \\struct, \\union, or \\include command ",
root->includeFile.data() root->includeFile.data()
); );
if (ambig) // name is ambigious if (ambig) // name is ambigious
...@@ -8337,6 +8337,7 @@ void copyAndFilterFile(const char *fileName,BufStr &dest) ...@@ -8337,6 +8337,7 @@ void copyAndFilterFile(const char *fileName,BufStr &dest)
else else
{ {
QCString cmd=filterName+" \""+fileName+"\""; QCString cmd=filterName+" \""+fileName+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
FILE *f=portable_popen(cmd,"r"); FILE *f=portable_popen(cmd,"r");
if (!f) if (!f)
{ {
...@@ -8884,7 +8885,8 @@ void initDoxygen() ...@@ -8884,7 +8885,8 @@ void initDoxygen()
ParserInterface *defaultParser = new CLanguageScanner; ParserInterface *defaultParser = new CLanguageScanner;
Doxygen::parserManager = new ParserManager(defaultParser); Doxygen::parserManager = new ParserManager(defaultParser);
Doxygen::parserManager->registerParser(".py",new PythonLanguageScanner); Doxygen::parserManager->registerParser(".py", new PythonLanguageScanner);
Doxygen::parserManager->registerParser(".f", new FortranLanguageScanner);
Doxygen::parserManager->registerParser(".f90", new FortranLanguageScanner); Doxygen::parserManager->registerParser(".f90", new FortranLanguageScanner);
Doxygen::parserManager->registerParser(".vhd", new VHDLLanguageScanner); Doxygen::parserManager->registerParser(".vhd", new VHDLLanguageScanner);
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "parserintf.h" #include "parserintf.h"
#include "portable.h" #include "portable.h"
#include "vhdldocgen.h" #include "vhdldocgen.h"
#include "debug.h"
class DevNullCodeDocInterface : public CodeOutputInterface class DevNullCodeDocInterface : public CodeOutputInterface
{ {
...@@ -1336,7 +1337,9 @@ void FileDef::acquireFileVersion() ...@@ -1336,7 +1337,9 @@ void FileDef::acquireFileVersion()
if (!vercmd.isEmpty()) if (!vercmd.isEmpty())
{ {
msg("Version of %s : ",filepath.data()); msg("Version of %s : ",filepath.data());
FILE *f=portable_popen(vercmd+" \""+filepath+"\"","r"); QCString cmd = vercmd+" \""+filepath+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
FILE *f=portable_popen(cmd,"r");
if (!f) if (!f)
{ {
err("Error: could not execute %s\n",vercmd.data()); err("Error: could not execute %s\n",vercmd.data());
......
...@@ -581,8 +581,8 @@ ARGS {BS}("("[^)]*")"){BS} ...@@ -581,8 +581,8 @@ ARGS {BS}("("[^)]*")"){BS}
NUM_TYPE (complex|integer|logical|real) NUM_TYPE (complex|integer|logical|real)
KIND {ARGS} KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"([0-9]+|{ARGS})) CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}("*"[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS}PRECISION|{CHAR}) TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{B}PRECISION|{CHAR})
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) ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET)
...@@ -630,7 +630,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE) ...@@ -630,7 +630,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
codifyLines(yytext); codifyLines(yytext);
endFontClass(); endFontClass();
} }
<Start>"end"{BS}{COMMANDS}/[ \t\n].* { <Start>"end"({BS_}{COMMANDS})?/[ \t\n].* {
startFontClass("keyword"); startFontClass("keyword");
codifyLines(yytext); codifyLines(yytext);
endFontClass(); endFontClass();
...@@ -687,11 +687,11 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE) ...@@ -687,11 +687,11 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
yy_pop_state(); yy_pop_state();
REJECT; REJECT;
} }
<Start>"end"{BS}"module".* { // just reset currentModule, rest is done in following rule <Start>"end"({BS_}"module")?.* { // just reset currentModule, rest is done in following rule
currentModule=0; currentModule=0;
REJECT; REJECT;
} }
<Start>"end"{BS}("program"|"module"|"type"|"interface") { // <Start>"end"({BS_}("program"|"module"|"type"|"interface"))? { //
endUseScope(); endUseScope();
startFontClass("keyword"); startFontClass("keyword");
codifyLines(yytext); codifyLines(yytext);
...@@ -722,7 +722,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE) ...@@ -722,7 +722,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
<Subprog>"\n" { codifyLines(yytext); <Subprog>"\n" { codifyLines(yytext);
yy_pop_state(); yy_pop_state();
} }
<Start>"end"{BS}{SUBPROG}.* { // Fortran subroutine or function ends <Start>"end"({BS_}{SUBPROG})? { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl; //cout << "===> end function " << yytext << endl;
endUseScope(); endUseScope();
startFontClass("keyword"); startFontClass("keyword");
......
This diff is collapsed.
...@@ -161,22 +161,32 @@ void GroupDef::addFile(const FileDef *def) ...@@ -161,22 +161,32 @@ void GroupDef::addFile(const FileDef *def)
fileList->append(def); fileList->append(def);
} }
void GroupDef::addClass(const ClassDef *cd) bool GroupDef::addClass(const ClassDef *cd)
{ {
if (cd->isHidden()) return; if (cd->isHidden()) return FALSE;
if (Config_getBool("SORT_BRIEF_DOCS")) if (classSDict->find(cd->name())==0)
classSDict->inSort(cd->name(),cd); {
else if (Config_getBool("SORT_BRIEF_DOCS"))
classSDict->append(cd->name(),cd); classSDict->inSort(cd->name(),cd);
else
classSDict->append(cd->name(),cd);
return TRUE;
}
return FALSE;
} }
void GroupDef::addNamespace(const NamespaceDef *def) bool GroupDef::addNamespace(const NamespaceDef *def)
{ {
if (def->isHidden()) return; if (def->isHidden()) return FALSE;
if (Config_getBool("SORT_BRIEF_DOCS")) if (namespaceSDict->find(def->name())==0)
namespaceSDict->inSort(def->name(),def); {
else if (Config_getBool("SORT_BRIEF_DOCS"))
namespaceSDict->append(def->name(),def); namespaceSDict->inSort(def->name(),def);
else
namespaceSDict->append(def->name(),def);
return TRUE;
}
return FALSE;
} }
void GroupDef::addDir(const DirDef *def) void GroupDef::addDir(const DirDef *def)
...@@ -926,8 +936,7 @@ void addClassToGroups(Entry *root,ClassDef *cd) ...@@ -926,8 +936,7 @@ void addClassToGroups(Entry *root,ClassDef *cd)
GroupDef *gd=0; GroupDef *gd=0;
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
{ {
gd->addClass(cd); if (gd->addClass(cd)) cd->makePartOfGroup(gd);
cd->makePartOfGroup(gd);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data()); //printf("Compound %s: in group %s\n",cd->name().data(),s->data());
} }
} }
...@@ -944,8 +953,7 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd) ...@@ -944,8 +953,7 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
//printf("group `%s'\n",s->data()); //printf("group `%s'\n",s->data());
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
{ {
gd->addNamespace(nd); if (gd->addNamespace(nd)) nd->makePartOfGroup(gd);
nd->makePartOfGroup(gd);
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data()); //printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
} }
} }
......
...@@ -51,8 +51,8 @@ class GroupDef : public Definition ...@@ -51,8 +51,8 @@ class GroupDef : public Definition
void setGroupTitle( const char *newtitle ); void setGroupTitle( const char *newtitle );
bool hasGroupTitle( ) { return titleSet; } bool hasGroupTitle( ) { return titleSet; }
void addFile(const FileDef *def); void addFile(const FileDef *def);
void addClass(const ClassDef *def); bool addClass(const ClassDef *def);
void addNamespace(const NamespaceDef *def); bool addNamespace(const NamespaceDef *def);
void addGroup(const GroupDef *def); void addGroup(const GroupDef *def);
void addParentGroup(const GroupDef *def); void addParentGroup(const GroupDef *def);
void addPage(PageDef *def); void addPage(PageDef *def);
......
...@@ -2253,7 +2253,7 @@ void writePageIndex(OutputList &ol) ...@@ -2253,7 +2253,7 @@ void writePageIndex(OutputList &ol)
} }
} }
endIndexHierarchy(ol,0); endIndexHierarchy(ol,0);
Doxygen::indexList.decContentsDepth(); //Doxygen::indexList.decContentsDepth();
endFile(ol); endFile(ol);
ol.popGeneratorState(); ol.popGeneratorState();
} }
......
...@@ -1975,7 +1975,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1975,7 +1975,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCComment,SkipVerbatim>. { <SkipCComment,SkipVerbatim>. {
outputChar(*yytext); outputChar(*yytext);
} }
<CopyCComment>[^*]+ { <CopyCComment>[^*a-z_A-Z]+ {
g_defLitText+=yytext; g_defLitText+=yytext;
g_defText+=escapeAt(yytext); g_defText+=escapeAt(yytext);
} }
...@@ -1989,10 +1989,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1989,10 +1989,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_defLitText+=yytext; g_defLitText+=yytext;
g_defText+=yytext; g_defText+=yytext;
} }
<CopyCComment>. {
g_defLitText+=yytext;
g_defText+=yytext;
}
<RemoveCComment>"*/" { BEGIN(g_lastCContext); } <RemoveCComment>"*/" { BEGIN(g_lastCContext); }
<RemoveCComment>"//" <RemoveCComment>"//"
<RemoveCComment>"/*" <RemoveCComment>"/*"
...@@ -2026,7 +2022,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2026,7 +2022,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_quoteArg=TRUE; g_quoteArg=TRUE;
g_defLitText+=yytext; g_defLitText+=yytext;
} }
<DefineText>{ID} { <DefineText,CopyCComment>{ID} {
g_defLitText+=yytext; g_defLitText+=yytext;
if (g_quoteArg) if (g_quoteArg)
{ {
...@@ -2059,6 +2055,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2059,6 +2055,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
g_quoteArg=FALSE; g_quoteArg=FALSE;
} }
<CopyCComment>. {
g_defLitText+=yytext;
g_defText+=yytext;
}
<DefineText>\\[\r]?\n { <DefineText>\\[\r]?\n {
g_defLitText+=yytext; g_defLitText+=yytext;
outputChar('\n'); outputChar('\n');
......
...@@ -311,7 +311,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -311,7 +311,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
yyFileName, // file yyFileName, // file
brief ? current->briefLine : current->docLine, // line of block start brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief, docBlockInBody ? FALSE : brief,
FALSE, //docBlockJavaStyle, // javadoc style docBlockJavaStyle, // javadoc style // or FALSE,
docBlockInBody, docBlockInBody,
protection, protection,
position, position,
......
...@@ -3143,7 +3143,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -3143,7 +3143,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
// -> omit typedef and use S_t as the struct name // -> omit typedef and use S_t as the struct name
if (typedefHidesStruct && if (typedefHidesStruct &&
isTypedef && isTypedef &&
(current->spec&(Entry::Struct|Entry::Union)) && ((current->spec&(Entry::Struct|Entry::Union)) ||
current->section==Entry::ENUM_SEC )&&
msType.stripWhiteSpace().isEmpty() && msType.stripWhiteSpace().isEmpty() &&
memspecEntry) memspecEntry)
{ {
......
...@@ -1465,6 +1465,20 @@ static bool findOperator(const QCString &s,int i) ...@@ -1465,6 +1465,20 @@ static bool findOperator(const QCString &s,int i)
return TRUE; return TRUE;
} }
static bool findOperator2(const QCString &s,int i)
{
int b = s.findRev("operator",i);
if (b==-1) return FALSE; // not found
b+=8;
while (b<i) // check if there are only non-ascii
// characters in front of the operator
{
if (isId((uchar)s.at(b))) return FALSE;
b++;
}
return TRUE;
}
static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' }; static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' }; static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
...@@ -1599,7 +1613,12 @@ nextChar: ...@@ -1599,7 +1613,12 @@ nextChar:
if (c=='*' || c=='&' || c=='@' || c=='$') if (c=='*' || c=='&' || c=='@' || c=='$')
{ {
uint rl=result.length(); uint rl=result.length();
if (rl>0 && (isId(result.at(rl-1)) || result.at(rl-1)=='>')) result+=' '; if ((rl>0 && (isId(result.at(rl-1)) || result.at(rl-1)=='>')) &&
(c!='*' || !findOperator2(s,i)) // avoid splitting operator* and operator->*
)
{
result+=' ';
}
} }
result+=c; result+=c;
if (cliSupport && (c=='^' || c=='%') && i>1 && isId(s.at(i-1))) result+=' '; // C++/CLI: Type^ name and Type% name if (cliSupport && (c=='^' || c=='%') && i>1 && isId(s.at(i-1))) result+=' '; // C++/CLI: Type^ name and Type% name
...@@ -2141,6 +2160,7 @@ QCString fileToString(const char *name,bool filter) ...@@ -2141,6 +2160,7 @@ QCString fileToString(const char *name,bool filter)
else // filter the input else // filter the input
{ {
QCString cmd=filterName+" \""+name+"\""; QCString cmd=filterName+" \""+name+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
FILE *f=portable_popen(cmd,"r"); FILE *f=portable_popen(cmd,"r");
if (!f) if (!f)
{ {
...@@ -6270,6 +6290,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName) ...@@ -6270,6 +6290,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName)
extLookup.insert(".M", new int(SrcLangExt_ObjC)); extLookup.insert(".M", new int(SrcLangExt_ObjC));
extLookup.insert(".mm", new int(SrcLangExt_ObjC)); extLookup.insert(".mm", new int(SrcLangExt_ObjC));
extLookup.insert(".py", new int(SrcLangExt_Python)); extLookup.insert(".py", new int(SrcLangExt_Python));
extLookup.insert(".f", new int(SrcLangExt_F90));
extLookup.insert(".f90", new int(SrcLangExt_F90)); extLookup.insert(".f90", new int(SrcLangExt_F90));
extLookup.insert(".vhd", new int(SrcLangExt_VHDL)); extLookup.insert(".vhd", new int(SrcLangExt_VHDL));
extLookup.insert(".vhdl", new int(SrcLangExt_VHDL)); extLookup.insert(".vhdl", new int(SrcLangExt_VHDL));
......
...@@ -144,13 +144,13 @@ QCString* VhdlDocGen::findKeyWord(const QCString& word) ...@@ -144,13 +144,13 @@ QCString* VhdlDocGen::findKeyWord(const QCString& word)
if (word.isEmpty() || word.at(0)=='\0') return 0; if (word.isEmpty() || word.at(0)=='\0') return 0;
//printf("VhdlDocGen::findKeyWord(%s)\n",word.data()); //printf("VhdlDocGen::findKeyWord(%s)\n",word.data());
if (g_vhdlKeyDict0.find(word)) if (g_vhdlKeyDict0.find(word.lower()))
return &g_vhdlkeyword; return &g_vhdlkeyword;
if (g_vhdlKeyDict1.find(word)) if (g_vhdlKeyDict1.find(word.lower()))
return &g_vhdltype; return &g_vhdltype;
if (g_vhdlKeyDict2.find(word)) if (g_vhdlKeyDict2.find(word.lower()))
return &g_vhdllogic; return &g_vhdllogic;
return 0; return 0;
...@@ -832,21 +832,23 @@ bool VhdlDocGen::getSigTypeName(QList<QCString>& ql, const char* str,QCString& b ...@@ -832,21 +832,23 @@ bool VhdlDocGen::getSigTypeName(QList<QCString>& ql, const char* str,QCString& b
bool VhdlDocGen::getSigName(QList<QCString>& ql, bool VhdlDocGen::getSigName(QList<QCString>& ql,
const char* str,QCString& buffer) const char* str,QCString& buffer)
{ {
int len,j,ll,index; int j,ll,index;
char *signal = "signal "; char *signal = "signal ";
QCString qmem; QCString qmem;
QCString temp(str); QCString temp(str);
QCString st(str); QCString st(str);
QRegExp semi(","); //QRegExp semi(",");
QRegExp r(":"); //QRegExp r(":");
j = r.match(temp.data(),0,&len);
// colon position
j = temp.find(':');
if (j < 0) return FALSE; // no input definition if (j < 0) return FALSE; // no input definition
st=st.left(j); st=st.left(j); // name only
index=st.find(signal,0,FALSE); index=st.find(signal,0,FALSE);
if (index > -1) if (index > -1) // found "signal "
{ {
qmem=st.remove(index,strlen(signal)); qmem=st.remove(index,strlen(signal)); // strip it
temp=qmem; temp=qmem;
st=qmem; st=qmem;
} }
...@@ -855,56 +857,71 @@ bool VhdlDocGen::getSigName(QList<QCString>& ql, ...@@ -855,56 +857,71 @@ bool VhdlDocGen::getSigName(QList<QCString>& ql,
qmem=temp; qmem=temp;
} }
ll=semi.match(st.data(),0,&len); ll=st.find(',');
if (ll>0) if (ll>0) // multiple names
{ {
while (TRUE) while (TRUE)
{ {
st=st.left(ll); st=st.left(ll).stripWhiteSpace(); // one name
QCString *sig =new QCString(st); QCString *sig =new QCString(st);
ql.insert(0,sig); ql.insert(0,sig);
qmem=qmem.right(qmem.length()-ll-1); qmem=qmem.right(qmem.length()-ll-1); // strip from list
st=qmem; st=qmem; // remainder
ll=semi.match(st.data(),0,&len); ll=st.find(',');
if (ll<0) if (ll<0) // last name
{ {
ll = r.match(st.data(),0,&len); ll = st.find(':');
st=st.left(ll); st=st.left(ll).stripWhiteSpace();
ql.insert(0,new QCString(st)); ql.insert(0,new QCString(st));
break; break;
} }
} }
} }
else else // single name
{ {
st=st.left(j); st=st.stripWhiteSpace();
ql.insert(0,new QCString(st)); ql.insert(0,new QCString(st));
} }
QCString *qdir=new QCString(str); QCString *qdir=new QCString(str);
st=qdir->mid(j+1); st=qdir->mid(j+1); // part after :
//st=st.lower(); st=st.lower().stripWhiteSpace();
st=st.stripWhiteSpace();
*qdir=st; *qdir=st;
ql.insert(0,qdir); ql.insert(0,qdir);
if (st.stripPrefix("inout")) if (st.stripPrefix("inout"))
{ {
buffer+="inout"; buffer+="inout";
return TRUE; return TRUE;
} }
if (st.stripPrefix("INOUT"))
{
buffer+="inout";
return TRUE;
}
if (st.stripPrefix("out")) if (st.stripPrefix("out"))
{ {
buffer+="out"; buffer+="out";
return TRUE; return TRUE;
} }
if (st.stripPrefix("OUT"))
{
buffer+="out";
return TRUE;
}
if (st.stripPrefix("in")) if (st.stripPrefix("in"))
{ {
buffer+="in"; buffer+="in";
return TRUE; return TRUE;
} }
if (st.stripPrefix("IN"))
{
buffer+="in";
return TRUE;
}
return FALSE; return FALSE;
} }
......
...@@ -247,6 +247,7 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0) ...@@ -247,6 +247,7 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0)
for (int k=1;k<count;k++) for (int k=1;k<count;k++)
{ {
printf("adding '%s' '%s'\n",ql.at(0)->data(),ql.at(k)->data());
Entry *pTemp=new Entry; Entry *pTemp=new Entry;
initEntry(pTemp); initEntry(pTemp);
pTemp->startLine = line; pTemp->startLine = line;
......
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib imm32.lib" AdditionalDependencies="$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib gdi32.lib imm32.lib advapi32.lib comdlg32.lib shell32.lib winspool.lib"
OutputFile="..\bin\Debug\doxywizard.exe" OutputFile="..\bin\Debug\doxywizard.exe"
LinkIncremental="2" LinkIncremental="2"
GenerateManifest="false" GenerateManifest="false"
...@@ -158,7 +158,7 @@ ...@@ -158,7 +158,7 @@
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib imm32.lib" AdditionalDependencies="$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib gdi32.lib imm32.lib advapi32.lib comdlg32.lib shell32.lib winspool.lib"
OutputFile="..\bin\doxywizard.exe" OutputFile="..\bin\doxywizard.exe"
LinkIncremental="1" LinkIncremental="1"
GenerateManifest="false" GenerateManifest="false"
......
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