Commit 5f3d8499 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.5.8-20090129

parent a0924f7d
DOXYGEN Version 1.5.8
DOXYGEN Version 1.5.8-20090129
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (27 December 2008)
Dimitri van Heesch (29 January 2009)
DOXYGEN Version 1.5.8
DOXYGEN Version 1.5.8_20090129
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (27 December 2008)
Dimitri van Heesch (dimitri@stack.nl) (29 January 2009)
......@@ -14,6 +14,10 @@ MOC_DIR = moc
RCC_DIR = rcc
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
macx-g++ {
CONFIG += x86 ppc
}
# Input
HEADERS += doxywizard.h version.h expert.h config.h helplabel.h \
inputbool.h inputstring.h inputint.h inputstrlist.h wizard.h
......
......@@ -543,7 +543,7 @@ EOF
EOF
fi
fi
if test "$f_platform" = "hpux-g++"; then
if test "$f_platform" = "hpux-g++" -o "$f_platform" = "linux-g++"; then
cat >> .tmakeconfig <<EOF
TMAKE_CXXFLAGS += -D_LARGEFILE_SOURCE
EOF
......
......@@ -133,7 +133,7 @@ class ClassDefImpl
/*! The class this class is an instance of. */
ClassDef *templateMaster;
/*! class name with outer class scope, but without namespace scope. */
/*! local class name which could be a typedef'ed alias name. */
QCString className;
/*! If this class is a Objective-C category, then this points to the
......@@ -209,8 +209,8 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
membersMerged = FALSE;
categoryOf = 0;
usedOnly = FALSE;
QCString ns;
extractNamespaceName(name,className,ns);
//QCString ns;
//extractNamespaceName(name,className,ns);
//printf("m_name=%s m_className=%s ns=%s\n",m_name.data(),m_className.data(),ns.data());
if (((QCString)defFileName).right(5)!=".java" &&
......@@ -3025,7 +3025,7 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
if (!scName.isEmpty()) scName+=scopeSeparator;
}
scName+=m_impl->className;
scName+=className();
ArgumentList *al=0;
bool isSpecialization = localName().find('<')!=-1;
if (templateArguments())
......@@ -3052,7 +3052,14 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
QCString ClassDef::className() const
{
return m_impl->className;
if (m_impl->className.isEmpty())
{
return localName();
}
else
{
return m_impl->className;
}
};
void ClassDef::setClassName(const char *name)
......
......@@ -225,7 +225,8 @@ The format is ext=language, where ext is a file extension, and language is one o
the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
.inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
use: inc=Fortran f=C
use: inc=Fortran f=C. Note that for custom extensions you also need to set
FILE_PATTERNS otherwise the files are not read by doxygen.
'>
</option>
<option type='bool' id='BUILTIN_STL_SUPPORT' docs='
......
......@@ -8617,6 +8617,7 @@ static QCString resolveSymlink(QCString path)
QDict<void> nonSymlinks;
QDict<void> known;
QCString result = path;
QCString oldPrefix = "/";
do
{
#ifdef WIN32
......@@ -8637,7 +8638,7 @@ static QCString resolveSymlink(QCString path)
QString target = fi.readLink();
if (QFileInfo(target).isRelative())
{
target = QDir::cleanDirPath(prefix+"/"+target.data());
target = QDir::cleanDirPath(oldPrefix+"/"+target.data());
}
if (sepPos!=-1)
{
......@@ -8656,6 +8657,7 @@ static QCString resolveSymlink(QCString path)
{
nonSymlinks.insert(prefix,(void*)0x8);
}
oldPrefix = prefix;
}
}
while (sepPos!=-1);
......@@ -8698,69 +8700,72 @@ int readDir(QFileInfo *fi,
//printf("killDict=%p count=%d\n",killDict,killDict->count());
const QFileInfoList *list = dir.entryInfoList();
QFileInfoListIterator it( *list );
QFileInfo *cfi;
while ((cfi=it.current()))
if (list)
{
if (exclDict==0 || exclDict->find(cfi->absFilePath())==0)
{ // file should not be excluded
//printf("killDict->find(%s)\n",cfi->absFilePath().data());
if (!cfi->exists() || !cfi->isReadable())
{
if (errorIfNotExist)
QFileInfoListIterator it( *list );
QFileInfo *cfi;
while ((cfi=it.current()))
{
if (exclDict==0 || exclDict->find(cfi->absFilePath())==0)
{ // file should not be excluded
//printf("killDict->find(%s)\n",cfi->absFilePath().data());
if (!cfi->exists() || !cfi->isReadable())
{
err("Warning: source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data());
if (errorIfNotExist)
{
err("Warning: source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data());
}
}
}
else if (cfi->isFile() &&
(!Config_getBool("EXCLUDE_SYMLINKS") || !cfi->isSymLink()) &&
(patList==0 || patternMatch(cfi,patList)) &&
!patternMatch(cfi,exclPatList) &&
(killDict==0 || killDict->find(cfi->absFilePath())==0)
)
{
totalSize+=cfi->size()+cfi->absFilePath().length()+4;
QCString name=convertToQCString(cfi->fileName());
//printf("New file %s\n",name.data());
if (fnDict)
else if (cfi->isFile() &&
(!Config_getBool("EXCLUDE_SYMLINKS") || !cfi->isSymLink()) &&
(patList==0 || patternMatch(cfi,patList)) &&
!patternMatch(cfi,exclPatList) &&
(killDict==0 || killDict->find(cfi->absFilePath())==0)
)
{
FileDef *fd=new FileDef(cfi->dirPath()+"/",name);
FileName *fn=0;
if (!name.isEmpty() && (fn=(*fnDict)[name]))
totalSize+=cfi->size()+cfi->absFilePath().length()+4;
QCString name=convertToQCString(cfi->fileName());
//printf("New file %s\n",name.data());
if (fnDict)
{
fn->append(fd);
FileDef *fd=new FileDef(cfi->dirPath()+"/",name);
FileName *fn=0;
if (!name.isEmpty() && (fn=(*fnDict)[name]))
{
fn->append(fd);
}
else
{
fn = new FileName(cfi->absFilePath(),name);
fn->append(fd);
if (fnList) fnList->inSort(fn);
fnDict->insert(name,fn);
}
}
else
QCString *rs=0;
if (resultList || resultDict)
{
fn = new FileName(cfi->absFilePath(),name);
fn->append(fd);
if (fnList) fnList->inSort(fn);
fnDict->insert(name,fn);
rs=new QCString(cfi->absFilePath());
}
if (resultList) resultList->append(rs);
if (resultDict) resultDict->insert(cfi->absFilePath(),rs);
if (killDict) killDict->insert(cfi->absFilePath(),(void *)0x8);
}
QCString *rs=0;
if (resultList || resultDict)
else if (recursive &&
(!Config_getBool("EXCLUDE_SYMLINKS") || !cfi->isSymLink()) &&
cfi->isDir() && cfi->fileName()!="." &&
!patternMatch(cfi,exclPatList) &&
cfi->fileName()!="..")
{
rs=new QCString(cfi->absFilePath());
cfi->setFile(cfi->absFilePath());
totalSize+=readDir(cfi,fnList,fnDict,exclDict,
patList,exclPatList,resultList,resultDict,errorIfNotExist,
recursive,killDict);
}
if (resultList) resultList->append(rs);
if (resultDict) resultDict->insert(cfi->absFilePath(),rs);
if (killDict) killDict->insert(cfi->absFilePath(),(void *)0x8);
}
else if (recursive &&
(!Config_getBool("EXCLUDE_SYMLINKS") || !cfi->isSymLink()) &&
cfi->isDir() && cfi->fileName()!="." &&
!patternMatch(cfi,exclPatList) &&
cfi->fileName()!="..")
{
cfi->setFile(cfi->absFilePath());
totalSize+=readDir(cfi,fnList,fnDict,exclDict,
patList,exclPatList,resultList,resultDict,errorIfNotExist,
recursive,killDict);
}
++it;
}
++it;
}
return totalSize;
}
......@@ -10472,7 +10477,7 @@ void generateOutput()
QCString const qhpFileName = Qhp::getQhpFileName();
QCString const qchFileName = getQchFileName();
QCString const args = QCString().sprintf("%s -o %s", qhpFileName.data(), qchFileName.data());
QCString const args = QCString().sprintf("%s -o \"%s\"", qhpFileName.data(), qchFileName.data());
QString const oldDir = QDir::currentDirPath();
QDir::setCurrent(Config_getString("HTML_OUTPUT"));
if (portable_system(Config_getString("QHG_LOCATION"), args.data(), FALSE))
......
......@@ -191,17 +191,8 @@ class Entry
/*! Kind of entries that are supported */
enum Sections {
CLASS_SEC = 0x00000001,
//STRUCT_SEC = 0x00000002,
//UNION_SEC = 0x00000004,
//EXCEPTION_SEC = 0x00000008,
NAMESPACE_SEC = 0x00000010,
//INTERFACE_SEC = 0x00000020,
//PROTOCOL_SEC = 0x00000040,
//CATEGORY_SEC = 0x00000080,
COMPOUND_MASK = CLASS_SEC //| STRUCT_SEC | UNION_SEC |
//INTERFACE_SEC | EXCEPTION_SEC |
//PROTOCOL_SEC | CATEGORY_SEC
,
COMPOUND_MASK = CLASS_SEC,
SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
CLASSDOC_SEC = 0x00000800,
......
......@@ -916,7 +916,7 @@ void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
t << "href=\"";
if (ref)
{
if ((dest=Doxygen::tagDestinationDict[ref])) t << relPath << *dest << "/";
if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/";
}
else
{
......
......@@ -372,6 +372,23 @@ void HtmlHelp::initialize()
0x412 Korean
0x804 Chinese (PRC)
0x404 Chinese (Taiwan)
New LCIDs:
0x421 Indonesian
0x41A Croatian
0x418 Romanian
0x424 Slovenian
0x41B Slovak
0x422 Ukrainian
0x81A Serbian (Serbia, Latin)
0x403 Catalan
0x427 Lithuanian
0x436 Afrikaans
0x42A Vietnamese
0x429 Persian (Iran)
0xC01 Arabic (Egypt) - I don't know which version of arabic is used inside translator_ar.h ,
so I have chosen Egypt at random
*/
s_languageDict.setAutoDelete(TRUE);
s_languageDict.clear();
......@@ -381,22 +398,38 @@ void HtmlHelp::initialize()
s_languageDict.insert("finnish", new QCString("0x40B Finnish"));
s_languageDict.insert("french", new QCString("0x40C French"));
s_languageDict.insert("german", new QCString("0x407 German"));
s_languageDict.insert("greece", new QCString("0x408 Greece"));
s_languageDict.insert("greek", new QCString("0x408 Greece"));
s_languageDict.insert("hungarian", new QCString("0x40E Hungarian"));
s_languageDict.insert("italian", new QCString("0x410 Italian"));
s_languageDict.insert("norwegian", new QCString("0x814 Norwegian"));
s_languageDict.insert("polish", new QCString("0x415 Polish"));
s_languageDict.insert("portugese", new QCString("0x816 Portuguese(Portugal)"));
s_languageDict.insert("portuguese", new QCString("0x816 Portuguese(Portugal)"));
s_languageDict.insert("brazil", new QCString("0x416 Portuguese(Brazil)"));
s_languageDict.insert("russian", new QCString("0x419 Russian"));
s_languageDict.insert("spanish", new QCString("0x40A Spannish(Traditional Sort)"));
s_languageDict.insert("spanish", new QCString("0x40A Spanish(Traditional Sort)"));
s_languageDict.insert("swedish", new QCString("0x41D Swedish"));
s_languageDict.insert("turkey", new QCString("0x41F Turkey"));
s_languageDict.insert("turkish", new QCString("0x41F Turkey"));
s_languageDict.insert("japanese", new QCString("0x411 Japanese"));
s_languageDict.insert("japanese-en", new QCString("0x411 Japanese"));
s_languageDict.insert("korean", new QCString("0x412 Korean"));
s_languageDict.insert("korean-en", new QCString("0x412 Korean"));
s_languageDict.insert("chinese", new QCString("0x804 Chinese (PRC)"));
s_languageDict.insert("chinese-traditional", new QCString("0x404 Chinese (Taiwan)"));
// new LCIDs
s_languageDict.insert("indonesian", new QCString("0x412 Indonesian"));
s_languageDict.insert("croatian", new QCString("0x41A Croatian"));
s_languageDict.insert("romanian", new QCString("0x418 Romanian"));
s_languageDict.insert("slovene", new QCString("0x424 Slovenian"));
s_languageDict.insert("slovak", new QCString("0x41B Slovak"));
s_languageDict.insert("ukrainian", new QCString("0x422 Ukrainian"));
s_languageDict.insert("serbian", new QCString("0x81A Serbian (Serbia, Latin)"));
s_languageDict.insert("catalan", new QCString("0x403 Catalan"));
s_languageDict.insert("lithuanian", new QCString("0x427 Lithuanian"));
s_languageDict.insert("afrikaans", new QCString("0x436 Afrikaans"));
s_languageDict.insert("vietnamese", new QCString("0x42A Vietnamese"));
s_languageDict.insert("persian", new QCString("0x429 Persian (Iran)"));
s_languageDict.insert("arabic", new QCString("0xC01 Arabic (Egypt)"));
}
......
......@@ -280,10 +280,12 @@ void MemberList::writePlainDeclarations(OutputList &ol,
}
case MemberDef::EnumValue:
{
if (!m_inGroup) return;
printf("EnumValue!\n");
if (first) ol.startMemberList(),first=FALSE;
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
if (m_inGroup)
{
//printf("EnumValue!\n");
if (first) ol.startMemberList(),first=FALSE;
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
}
}
break;
}
......
......@@ -180,7 +180,7 @@ static char **last_environ;
void portable_setenv(const char *name,const char *value)
{
#ifdef _WIN32
#if defined(_WIN32) && !defined(__CYGWIN__)
SetEnvironmentVariable(name,value);
#else
register char **ep = 0;
......@@ -259,7 +259,7 @@ void portable_setenv(const char *name,const char *value)
void portable_unsetenv(const char *variable)
{
#ifdef _WIN32
#if defined(_WIN32) && !defined(__CYGWIN__)
SetEnvironmentVariable(variable,0);
#else
/* Some systems don't have unsetenv(), so we do it ourselves */
......
......@@ -2619,7 +2619,10 @@ void RTFGenerator::postProcess(QByteArray &a)
for (i=0;i<a.size();i++)
{
unsigned char c = (unsigned char)a.at(i);
if (c>0x80 || mbFlag)
// treat characters > 0x80 as multibyte characters, except when they
// are control characters
if (c>0x80 || (mbFlag && c!='\\' && c!='{' && c!='}'))
{
char s[10];
sprintf(s,"\\'%X",c);
......
......@@ -3998,7 +3998,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
int tempArg=current->name.find('<');
QCString tempName;
if (tempArg==-1) tempName=current->name; else tempName=current->name.left(tempArg);
if (current->type.isEmpty() &&
if (!current->type.isEmpty() &&
(current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
{
//printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n", current->type.data(),current->name.data(),current->args.data());
......
......@@ -114,6 +114,9 @@
// 2008/02/04 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated for "new since 1.5.4" version
//
// 2009/01/09 Jens Seidel (jensseidel@users.sourceforge.net)
// - Resynced the trLegendDocs() method
//
// Todo:
// - see FIXME
......@@ -665,7 +668,7 @@ class TranslatorGerman : public Translator
bool isTemplate)
{
QCString result=(QCString)clName+" ";
if (isTemplate) result+="Template ";
if (isTemplate) result+="Template-";
switch(compType)
{
case ClassDef::Class: result+="Klassen"; break;
......@@ -831,8 +834,7 @@ class TranslatorGerman : public Translator
*/
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
{ // single is true implies a single file
QCString result=(QCString)"Die Dokumentation für diese";
switch(compType)
{
......@@ -1117,7 +1119,7 @@ class TranslatorGerman : public Translator
"class Undocumented { };\n\n"
"/*! Mithilfe öffentlicher Vererbung vererbte Klasse */\n"
"class PublicBase : public Truncated { };\n\n"
"/*! Eine Template Klasse */\n"
"/*! Eine Template-Klasse */\n"
"template<class T> class Templ { };\n\n"
"/*! Mithilfe geschützter Vererbung vererbte Klasse */\n"
"class ProtectedBase { };\n\n"
......@@ -1135,14 +1137,13 @@ class TranslatorGerman : public Translator
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n\n"
"Setzen des Tags \\c MAX_DOT_GRAPH_HEIGHT in der Konfigurationsdatei "
"auf 240 liefert den folgenden Graphen:"
"\\endcode\n"
"Dies liefert den folgenden Graphen:"
"<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Die Rechtecke in obigem Graphen bedeuten:\n"
"<ul>\n"
"<li>Ein schwarz gefülltes Rechteck stellt die Struktur oder "
"<li>Ein grau gefülltes Rechteck stellt die Struktur oder "
"Klasse dar, für die der Graph erzeugt wurde.\n"
"<li>Ein Rechteck mit schwarzem Rahmen kennzeichnet eine dokumentierte "
"Struktur oder Klasse.\n"
......
......@@ -767,8 +767,7 @@ class TranslatorEnglish : public Translator
*/
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
{ // single is true implies a single file
QCString result=(QCString)"The documentation for this ";
switch(compType)
{
......@@ -1731,7 +1730,7 @@ class TranslatorEnglish : public Translator
*/
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Module", " Struct" or " Union"
{
// single is true implies a single file
QCString result=(QCString)"The documentation for this ";
switch(compType)
......
This diff is collapsed.
......@@ -68,6 +68,9 @@
// 2006/06/11
// - Added strings for 1.4.6
//
// 2009/01/09
// - Updated trLegendDocs
//
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
......@@ -776,26 +779,29 @@ class TranslatorCroatian : public Translator
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Ako je \\c MAX_DOT_GRAPH_HEIGHT tag u konfiguracijskoj datoteci "
"postavljen na 200 gornje veze e rezultirati grafikonom:"
"To e rezultirati grafikonom:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Pravokutnici imaju slijedee znaenje:\n"
"<ul>\n"
"<li>Puni crni predstavlja klasu za koji je generiran graf.\n"
"<li>Pravokutnik s crnim rubom predstavlja dokumentiranu klasu.\n"
"<li>Pravokutnik s sivim rubom predstavlja nedokumentiranu klasu.\n"
"<li>Pravokutnik s crvenim rubom predstavlja dokumentiranu klasu\n"
"<li>%A Puni crni predstavlja klasu za koji je generiran graf.\n"
"<li>%A Pravokutnik s crnim rubom predstavlja dokumentiranu klasu.\n"
"<li>%A Pravokutnik s sivim rubom predstavlja nedokumentiranu klasu.\n"
"<li>%A Pravokutnik s crvenim rubom predstavlja dokumentiranu klasu\n"
"Za koju nije prikazan graf naslijeivanja. Graf je odrezan "
"ako ne stane unutar odreenih granica."
"</ul>\n"
"Strelice imaju slijedee znaenje:\n"
"<ul>\n"
"<li>Tamnoplava strelica oznaava public naslijeivanje.\n"
"<li>Tamnozelena strelica oznaava protected naslijeivanje.\n"
"<li>Tamnocrvena strelica oznaava private naslijeivanje.\n"
"<li>Ljubiasta isprekidana strelica se koristi za agregate vezu. "
"<li>%A Tamnoplava strelica oznaava public naslijeivanje.\n"
"<li>%A Tamnozelena strelica oznaava protected naslijeivanje.\n"
"<li>%A Tamnocrvena strelica oznaava private naslijeivanje.\n"
"<li>%A Ljubiasta isprekidana strelica se koristi ako je klasa dio "
"druge klase ili ako se klasa koristi u drugoj klasi. Natpis na "
"strelici je ime varijable u drugoj klasi\n"
"Strelica je oznaena imenom varijable.\n"
"<li>%A uta isprekidana strelica oznaava relaciju izmeu template instance "
"i template klase. Oznaena je imenom template parametra\n"
"</ul>\n");
}
/*! text for the link to the legend page */
......
......@@ -1064,8 +1064,7 @@ class TranslatorKorean : public Translator
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"만약 설정파일에서 \\c MAX_DOT_GRAPH_HEIGHT 태그가 "
"240으로 설정되었다면, 다음과 같은 그래프가 출력될 것입니다. :"
"다음과 같은 그래프가 출력될 것입니다. :"
"<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"위 그래프의 박스들은 다음과 같은 의미를 가집니다. :\n"
......@@ -1789,7 +1788,7 @@ class TranslatorKorean : public Translator
return result;
}
/*! C# Type Contraint list */
/*! C# Type Constraint list */
virtual QCString trTypeConstraints()
{
return "타입 한정자들";
......
This diff is collapsed.
......@@ -1663,7 +1663,10 @@ nextChar:
}
}
ADD_CHAR(c);
if (cliSupport && (c=='^' || c=='%') && i>1 && isId(s.at(i-1)))
if (cliSupport &&
(c=='^' || c=='%') && i>1 && isId(s.at(i-1)) &&
!findOperator(s,i)
)
{
ADD_CHAR(' '); // C++/CLI: Type^ name and Type% name
}
......
......@@ -660,9 +660,14 @@ static void writeFuncProto()
{
QList<Argument> ql;
QCString name,ret;
VhdlDocGen::parseFuncProto(g_FuncProto.data(),ql,name,ret,FALSE);
VhdlDocGen::parseFuncProto(g_FuncProto,ql,name,ret,FALSE);
QStringList qlist=QStringList::split(name.data(),g_FuncProto,FALSE);
if (name.isEmpty())
{
codifyLines(g_FuncProto.data(),g_CurrClass.data());
return;
}
QStringList qlist=QStringList::split(name,g_FuncProto,FALSE);
QCString temp=(QCString)qlist[0];
codifyLines(temp.data(),g_CurrClass.data());
g_FuncProto.stripPrefix(temp.data());
......
......@@ -1049,10 +1049,10 @@ void VhdlDocGen::parseFuncProto(const char* text,QList<Argument>& qlist,
QCString s1(text);
s1=s1.stripWhiteSpace();
int i=s1.find("(",0,FALSE);
int s=s1.find(" ",0,FALSE);
if (i==-1)
int s=s1.find(QRegExp("[ \\t]"));
if (i==-1 || i<s)
s1=VhdlDocGen::getIndexWord(s1.data(),1);
else
else // s<i, s=start of name, i=end of name
s1=s1.mid(s,(i-s));
name=s1.stripWhiteSpace();
......
......@@ -356,7 +356,7 @@ static void parseProcessProto()
getBufText(qcs,0);
if (qcs.contains('(') != qcs.contains(')')) return;
VhdlDocGen::deleteAllChars(qcs,'\n');
VhdlDocGen::parseProcessProto(qcs.data(),name,ql);
VhdlDocGen::parseProcessProto(qcs,name,ql);
current->section=Entry::FUNCTION_SEC;
//current->stat=TRUE;
current->spec=VhdlDocGen::PROCESS;
......@@ -409,7 +409,6 @@ static void parseFunctionProto()
return; // function without a prototype
if (qcs.contains("function",FALSE)==0 && qcs.contains("procedure",FALSE)==0)
return;
//Entry* ppEntry=new Entry;
while (qcs.stripPrefix(" "));
if (qcs.stripPrefix("impure"))
current->exception="impure";
......@@ -417,6 +416,7 @@ static void parseFunctionProto()
current->exception="pure";
VhdlDocGen::parseFuncProto(qcs.data(),ql,name,ret);
//printf("parseFuncProto(%s)=%s,%s\n",qcs.data(),name.data(),ret.data());
current->name=name;
current->startLine=iFuncLine;
current->bodyLine=iFuncLine;
......@@ -442,7 +442,7 @@ static void parseFunctionProto()
}
current->args+" )";
if (ret.data())
if (!ret.isEmpty())
current->spec=VhdlDocGen::FUNCTION;
else
current->spec=VhdlDocGen::PROCEDURE;
......@@ -1051,6 +1051,7 @@ ALLID [^;()\t ]
bb=FALSE;
}
bool ss = VhdlDocGen::isFunctionProto(ttt);
//printf("VhdlDocGen::isFunctionProto(%s)=%d\n",ttt.data(),ss);
if (ss && bb)
{
bufferClear();
......
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