Commit 039f53bb authored by dimitri's avatar dimitri

Release-1.5.6-20080626

parent 52629ec8
DOXYGEN Version 1.5.6 DOXYGEN Version 1.5.6-20080626
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 (17 May 2008) Dimitri van Heesch (26 June 2008)
DOXYGEN Version 1.5.6 DOXYGEN Version 1.5.6_20080626
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) (17 May 2008) Dimitri van Heesch (dimitri@stack.nl) (26 June 2008)
...@@ -20,7 +20,7 @@ doxygen_version_minor=5 ...@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=6 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=NO doxygen_version_mmn=20080626
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
...@@ -669,7 +669,7 @@ fi ...@@ -669,7 +669,7 @@ fi
echo -n " Generating src/lang_cfg.h..." echo -n " Generating src/lang_cfg.h..."
echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>); echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>);
chomp @l; chomp @l;
@allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA")); @allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA,SC"));
foreach my $elem (@l){ foreach my $elem (@l){
$elem =~ tr/a-z/A-Z/; $elem =~ tr/a-z/A-Z/;
$r=0; $r=0;
......
...@@ -1261,8 +1261,9 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ...@@ -1261,8 +1261,9 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
HTML output directory. Running \c make will produce the docset in that HTML output directory. Running \c make will produce the docset in that
directory and running <code>make install</code> will install the docset in directory and running <code>make install</code> will install the docset in
<code>~/Library/Developer/Shared/Documentation/DocSets</code> <code>~/Library/Developer/Shared/Documentation/DocSets</code>
so that Xcode will find it at startup. so that Xcode will find it at startup. See
<a href="http://developer.apple.com/tools/creatingdocsetswithdoxygen.html">
this article</a> for more information.
\anchor cfg_docset_feedname \anchor cfg_docset_feedname
<dt>\c DOCSET_FEEDNAME <dd> <dt>\c DOCSET_FEEDNAME <dd>
......
...@@ -23,14 +23,14 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -23,14 +23,14 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). configuration file (with default name and known as Doxyfile).
Currently (version 1.5.5), 34 languages Currently (version 1.5.6), 35 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, (+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese,
Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish,
Ukrainian.. Swedish, and Ukrainian..
The table of information related to the supported languages follows. The table of information related to the supported languages follows.
It is sorted by language alphabetically. The <b>Status</b> column It is sorted by language alphabetically. The <b>Status</b> column
...@@ -193,7 +193,7 @@ when the translator was updated. ...@@ -193,7 +193,7 @@ when the translator was updated.
<td>Macedonian</td> <td>Macedonian</td>
<td>Slave Jovanovski</td> <td>Slave Jovanovski</td>
<td>slavejovanovski at yahoo dot com</td> <td>slavejovanovski at yahoo dot com</td>
<td>1.5.04</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Norwegian</td> <td>Norwegian</td>
...@@ -237,6 +237,12 @@ when the translator was updated. ...@@ -237,6 +237,12 @@ when the translator was updated.
<td>dmilos at email dot com</td> <td>dmilos at email dot com</td>
<td>1.4.1</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff">
<td>SerbianCyrilic</td>
<td>Nedeljko Stefanovic</td>
<td>stenedjo at yahoo dot com</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Slovak</td> <td>Slovak</td>
<td>Stanislav Kudl&aacute;&#x010d;</td> <td>Stanislav Kudl&aacute;&#x010d;</td>
...@@ -339,7 +345,7 @@ when the translator was updated. ...@@ -339,7 +345,7 @@ when the translator was updated.
~ & Mindaugas Radzius & {\tt\tiny mindaugasradzius@takas.lt} & ~ \\ ~ & Mindaugas Radzius & {\tt\tiny mindaugasradzius@takas.lt} & ~ \\
~ & Aidas Berukstis & {\tt\tiny aidasber@takas.lt} & ~ \\ ~ & Aidas Berukstis & {\tt\tiny aidasber@takas.lt} & ~ \\
\hline \hline
Macedonian & Slave Jovanovski & {\tt\tiny slavejovanovski@yahoo.com} & 1.5.04 \\ Macedonian & Slave Jovanovski & {\tt\tiny slavejovanovski@yahoo.com} & up-to-date \\
\hline \hline
Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.4.6 \\ Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.4.6 \\
\hline \hline
...@@ -356,6 +362,8 @@ when the translator was updated. ...@@ -356,6 +362,8 @@ when the translator was updated.
\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
SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo@yahoo.com} & up-to-date \\
\hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\ Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\
\hline \hline
Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ostri.org} & 1.4.6 \\ Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ostri.org} & 1.4.6 \\
......
...@@ -108,6 +108,9 @@ Alexandr Chelpanov: cav@cryptopro.ru ...@@ -108,6 +108,9 @@ Alexandr Chelpanov: cav@cryptopro.ru
TranslatorSerbian TranslatorSerbian
Dejan Milosavljevic: dmilos@email.com Dejan Milosavljevic: dmilos@email.com
TranslatorSerbianCyrilic
Nedeljko Stefanovic: stenedjo@yahoo.com
TranslatorSlovak TranslatorSlovak
Stanislav Kudl&aacute;&ccaron;: skudlac@pobox.sk Stanislav Kudl&aacute;&ccaron;: skudlac@pobox.sk
......
(1.5.5) (1.5.6)
Doxygen supports the following 34 languages (sorted alphabetically): Doxygen supports the following 35 languages (sorted alphabetically):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, (+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese,
Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish,
Ukrainian. Swedish, and Ukrainian.
Of them, 14 translators are up-to-date, 20 translators are based on Of them, 16 translators are up-to-date, 19 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -29,8 +29,10 @@ still may be some details listed even for them: ...@@ -29,8 +29,10 @@ still may be some details listed even for them:
TranslatorGerman TranslatorGerman
TranslatorItalian TranslatorItalian
TranslatorKorean TranslatorKorean
TranslatorMacedonian
TranslatorPersian TranslatorPersian
TranslatorRussian TranslatorRussian
TranslatorSerbianCyrilic
TranslatorSpanish -- Change the base class to Translator. TranslatorSpanish -- Change the base class to Translator.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -39,9 +41,6 @@ obsolete at the end). The other info shows the estimation of Doxygen ...@@ -39,9 +41,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:
TranslatorMacedonian 1.5.04 22 methods to implement
Note: Change the base class to TranslatorAdapter_1_5_4.
TranslatorJapanese 1.5.4 22 methods to implement TranslatorJapanese 1.5.4 22 methods to implement
TranslatorGreek 1.5.4 22 methods to implement TranslatorGreek 1.5.4 22 methods to implement
TranslatorFrench 1.5.4 22 methods to implement TranslatorFrench 1.5.4 22 methods to implement
...@@ -470,37 +469,6 @@ TranslatorLithuanian (TranslatorAdapter_1_4_6) 24 methods to implement ...@@ -470,37 +469,6 @@ TranslatorLithuanian (TranslatorAdapter_1_4_6) 24 methods to implement
virtual QCString trSubprogramDocumentation() virtual QCString trSubprogramDocumentation()
TranslatorMacedonian (TranslatorAdapter_1_4_6) 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()
TranslatorNorwegian (TranslatorAdapter_1_4_6) 23 methods to implement TranslatorNorwegian (TranslatorAdapter_1_4_6) 23 methods to implement
------------------- -------------------
......
...@@ -1285,69 +1285,71 @@ static void startFontClass(const char *s) ...@@ -1285,69 +1285,71 @@ static void startFontClass(const char *s)
static void writeObjCMethodCall(ObjCCallCtx *ctx) static void writeObjCMethodCall(ObjCCallCtx *ctx)
{ {
if (ctx==0) return; if (ctx==0) return;
if (ctx->methodName.isEmpty()) return;
const char *p = ctx->format.data();
//printf("writeObjCMethodCall(%s) obj=%s method=%s\n",
// ctx->format.data(),ctx->objectTypeOrName.data(),ctx->methodName.data());
char c; char c;
if (!ctx->objectTypeOrName.isEmpty() && ctx->objectTypeOrName.at(0)!='$') const char *p = ctx->format.data();
if (!ctx->methodName.isEmpty())
{ {
//printf("Looking for object=%s method=%s\n",ctx->objectTypeOrName.data(), //printf("writeObjCMethodCall(%s) obj=%s method=%s\n",
// ctx->methodName.data()); // ctx->format.data(),ctx->objectTypeOrName.data(),ctx->methodName.data());
ClassDef *cd = g_theVarContext.findVariable(ctx->objectTypeOrName); if (!ctx->objectTypeOrName.isEmpty() && ctx->objectTypeOrName.at(0)!='$')
if (cd==0) // not a local variable
{ {
if (ctx->objectTypeOrName=="self") //printf("Looking for object=%s method=%s\n",ctx->objectTypeOrName.data(),
// ctx->methodName.data());
ClassDef *cd = g_theVarContext.findVariable(ctx->objectTypeOrName);
if (cd==0) // not a local variable
{ {
if (g_currentDefinition && if (ctx->objectTypeOrName=="self")
g_currentDefinition->definitionType()==Definition::TypeClass)
{ {
ctx->objectType = (ClassDef *)g_currentDefinition; if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{
ctx->objectType = (ClassDef *)g_currentDefinition;
}
} }
} else
else
{
ctx->objectType = getResolvedClass(
g_currentDefinition,
g_sourceFileDef,
ctx->objectTypeOrName,
&ctx->method);
}
//printf(" object is class? %p\n",ctx->objectType);
if (ctx->objectType) // found class
{
ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
//printf(" yes->method=%s\n",ctx->method?ctx->method->name().data():"<none>");
}
else if (ctx->method==0) // search for class variable with the same name
{
//printf(" no\n");
//printf("g_currentDefinition=%p\n",g_currentDefinition);
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{ {
ctx->objectVar = ((ClassDef *)g_currentDefinition)->getMemberByName(ctx->objectTypeOrName); ctx->objectType = getResolvedClass(
//printf(" ctx->objectVar=%p\n",ctx->objectVar); g_currentDefinition,
if (ctx->objectVar) g_sourceFileDef,
ctx->objectTypeOrName,
&ctx->method);
}
//printf(" object is class? %p\n",ctx->objectType);
if (ctx->objectType) // found class
{
ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
//printf(" yes->method=%s\n",ctx->method?ctx->method->name().data():"<none>");
}
else if (ctx->method==0) // search for class variable with the same name
{
//printf(" no\n");
//printf("g_currentDefinition=%p\n",g_currentDefinition);
if (g_currentDefinition &&
g_currentDefinition->definitionType()==Definition::TypeClass)
{ {
ctx->objectType = stripClassName(ctx->objectVar->typeString()); ctx->objectVar = ((ClassDef *)g_currentDefinition)->getMemberByName(ctx->objectTypeOrName);
//printf(" ctx->objectType=%p\n",ctx->objectType); //printf(" ctx->objectVar=%p\n",ctx->objectVar);
if (ctx->objectType) if (ctx->objectVar)
{ {
ctx->method = ctx->objectType->getMemberByName(ctx->methodName); ctx->objectType = stripClassName(ctx->objectVar->typeString());
//printf(" ctx->method=%p\n",ctx->method); //printf(" ctx->objectType=%p\n",ctx->objectType);
if (ctx->objectType)
{
ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
//printf(" ctx->method=%p\n",ctx->method);
}
} }
} }
} }
} }
} else // local variable
else // local variable
{
//printf(" object is local variable\n");
if (cd!=VariableContext::dummyContext)
{ {
ctx->method = cd->getMemberByName(ctx->methodName); //printf(" object is local variable\n");
//printf(" class=%p method=%p\n",cd,ctx->method); if (cd!=VariableContext::dummyContext)
{
ctx->method = cd->getMemberByName(ctx->methodName);
//printf(" class=%p method=%p\n",cd,ctx->method);
}
} }
} }
} }
...@@ -1653,8 +1655,8 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1653,8 +1655,8 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">" TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
SCOPETNAME ((({ID}{TEMPLIST}?){BN}*"::"{BN}*)*)((~{BN}*)?{ID}) SCOPETNAME ((({ID}{TEMPLIST}?){BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*"::"{BN}*)+ SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*"::"{BN}*)+
KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol") KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw")
KEYWORD ("add"|"asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|KEYWORD_OBJC) KEYWORD ("add"|"asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC})
FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while") FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string") TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string")
CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast") CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
......
...@@ -2486,7 +2486,7 @@ void closeGroup(Entry *e,const char *fileName,int) ...@@ -2486,7 +2486,7 @@ void closeGroup(Entry *e,const char *fileName,int)
if (g_memberGroupId!=DOX_NOGROUP) // end of member group if (g_memberGroupId!=DOX_NOGROUP) // end of member group
{ {
MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId); MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId);
if (info) // know group if (info) // known group
{ {
info->doc = g_memberGroupDocs; info->doc = g_memberGroupDocs;
info->docFile = fileName; info->docFile = fileName;
......
...@@ -1423,8 +1423,8 @@ void Config::create() ...@@ -1423,8 +1423,8 @@ void Config::create()
"Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n" "Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n"
"Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n" "Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n"
"Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n" "Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n"
"Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, \n" "Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \n"
"and Ukrainian.\n", "Spanish, Swedish, and Ukrainian.\n",
"English" "English"
); );
#ifdef LANG_ZA #ifdef LANG_ZA
...@@ -1512,6 +1512,9 @@ void Config::create() ...@@ -1512,6 +1512,9 @@ void Config::create()
#ifdef LANG_SR #ifdef LANG_SR
ce->addValue("Serbian"); ce->addValue("Serbian");
#endif #endif
#ifdef LANG_SC
ce->addValue("Serbian-Cyrilic");
#endif
#ifdef LANG_SK #ifdef LANG_SK
ce->addValue("Slovak"); ce->addValue("Slovak");
#endif #endif
...@@ -2354,7 +2357,9 @@ void Config::create() ...@@ -2354,7 +2357,9 @@ void Config::create()
"HTML output directory. Running make will produce the docset in that \n" "HTML output directory. Running make will produce the docset in that \n"
"directory and running \"make install\" will install the docset in \n" "directory and running \"make install\" will install the docset in \n"
"~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \n" "~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \n"
"it at startup.", "it at startup. \n"
"See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html "
"for more information. \n",
FALSE FALSE
); );
cb->addDependency("GENERATE_HTML"); cb->addDependency("GENERATE_HTML");
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
class ArgumentList; class ArgumentList;
extern void stringToArgumentList(const char *argsString,ArgumentList* &argList, extern void stringToArgumentList(const char *argsString,ArgumentList* argList,
QCString *extraTypeChars=0); QCString *extraTypeChars=0);
#endif #endif
...@@ -426,7 +426,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -426,7 +426,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
* \param al a reference to resulting argument list pointer. * \param al a reference to resulting argument list pointer.
*/ */
void stringToArgumentList(const char *argsString,ArgumentList* &al,QCString *extraTypeChars) void stringToArgumentList(const char *argsString,ArgumentList* al,QCString *extraTypeChars)
{ {
if (al==0) return; if (al==0) return;
if (argsString==0) return; if (argsString==0) return;
......
...@@ -468,6 +468,7 @@ static void detectNoDocumentedParams() ...@@ -468,6 +468,7 @@ static void detectNoDocumentedParams()
LockingPtr<ArgumentList> al = g_memberDef->argumentList(); LockingPtr<ArgumentList> al = g_memberDef->argumentList();
LockingPtr<ArgumentList> declAl = g_memberDef->declArgumentList(); LockingPtr<ArgumentList> declAl = g_memberDef->declArgumentList();
QString returnType = g_memberDef->typeString(); QString returnType = g_memberDef->typeString();
bool isPython = getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python;
if (!g_memberDef->hasDocumentedParams() && if (!g_memberDef->hasDocumentedParams() &&
g_hasParamCommand) g_hasParamCommand)
...@@ -489,7 +490,9 @@ static void detectNoDocumentedParams() ...@@ -489,7 +490,9 @@ static void detectNoDocumentedParams()
// see if all parameters have documentation // see if all parameters have documentation
for (ali.toFirst();(a=ali.current()) && allDoc;++ali) for (ali.toFirst();(a=ali.current()) && allDoc;++ali)
{ {
if (!a->name.isEmpty() && a->type!="void") if (!a->name.isEmpty() && a->type!="void" &&
!(isPython && a->name=="self")
)
{ {
allDoc = !a->docs.isEmpty(); allDoc = !a->docs.isEmpty();
} }
...@@ -503,7 +506,9 @@ static void detectNoDocumentedParams() ...@@ -503,7 +506,9 @@ static void detectNoDocumentedParams()
Argument *a; Argument *a;
for (ali.toFirst();(a=ali.current()) && allDoc;++ali) for (ali.toFirst();(a=ali.current()) && allDoc;++ali)
{ {
if (!a->name.isEmpty() && a->type!="void") if (!a->name.isEmpty() && a->type!="void" &&
!(isPython && a->name=="self")
)
{ {
allDoc = !a->docs.isEmpty(); allDoc = !a->docs.isEmpty();
} }
......
...@@ -2350,28 +2350,8 @@ done: ...@@ -2350,28 +2350,8 @@ done:
return result; return result;
} }
//---------------------------------------------------------------------- static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
// Searches the Entry tree for Variable documentation sections.
// If found they are stored in their class or in the global list.
static void buildVarList(EntryNav *rootNav)
{ {
//printf("buildVarList(%s)\n",rootNav->name().data());
int isFuncPtr=-1;
if (!rootNav->name().isEmpty() &&
(rootNav->type().isEmpty() || compoundKeywordDict.find(rootNav->type())==0) &&
(
(rootNav->section()==Entry::VARIABLE_SEC // it's a variable
) ||
(rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable
(isFuncPtr=findFunctionPtr(rootNav->type()))!=-1
) ||
(rootNav->section()==Entry::FUNCTION_SEC && // class variable initialized by constructor
isVarWithConstructor(rootNav)
)
)
) // documented variable
{
rootNav->loadEntry(g_storage); rootNav->loadEntry(g_storage);
Entry *root = rootNav->entry(); Entry *root = rootNav->entry();
...@@ -2493,44 +2473,6 @@ static void buildVarList(EntryNav *rootNav) ...@@ -2493,44 +2473,6 @@ static void buildVarList(EntryNav *rootNav)
else else
mtype=MemberDef::Variable; mtype=MemberDef::Variable;
#if 0 // does not work correctly
//static bool typedefHidesStruct = Config_getBool("TYPEDEF_HIDES_STRUCT");
if (typedefHidesStruct) // substitute names with typedef'ed names
{
QCString baseType = type;
baseType.stripPrefix("typedef ");
if (baseType.stripPrefix("enum "))
{
MemberName *mn=Doxygen::functionNameSDict->find(baseType.stripWhiteSpace());
MemberNameIterator mni(*mn);
MemberDef *md;
for (mni.toFirst();(md=mni.current());++mni)
{
if (md->isEnumerate())
{
md->setName(name);
md->setDefinition(name);
goto nextMember;
}
}
}
else
{
baseType.stripPrefix("struct ");
baseType.stripPrefix("union ");
{
ClassDef *typedefClass = Doxygen::classSDict->find(baseType);
if (typedefClass)
{
typedefClass->setName(name);
typedefClass->setClassName(name);
goto nextMember;
}
}
}
}
#endif
if (!root->relates.isEmpty()) // related variable if (!root->relates.isEmpty()) // related variable
{ {
isRelated=TRUE; isRelated=TRUE;
...@@ -2606,9 +2548,61 @@ static void buildVarList(EntryNav *rootNav) ...@@ -2606,9 +2548,61 @@ static void buildVarList(EntryNav *rootNav)
//printf("Inserting member in global scope %s!\n",scope.data()); //printf("Inserting member in global scope %s!\n",scope.data());
addVariableToFile(rootNav,mtype,scope,name,FALSE,/*0,*/0); addVariableToFile(rootNav,mtype,scope,name,FALSE,/*0,*/0);
} }
nextMember:
nextMember:
rootNav->releaseEntry(); rootNav->releaseEntry();
}
//----------------------------------------------------------------------
// Searches the Entry tree for typedef documentation sections.
// If found they are stored in their class or in the global list.
static void buildTypedefList(EntryNav *rootNav)
{
//printf("buildVarList(%s)\n",rootNav->name().data());
if (!rootNav->name().isEmpty() &&
rootNav->section()==Entry::VARIABLE_SEC &&
rootNav->type().find("typedef ")!=-1 // its a typedef
)
{
addVariable(rootNav);
}
if (rootNav->children())
{
EntryNavListIterator eli(*rootNav->children());
EntryNav *e;
for (;(e=eli.current());++eli)
{
if (e->section()!=Entry::ENUM_SEC)
{
buildTypedefList(e);
}
}
}
}
//----------------------------------------------------------------------
// Searches the Entry tree for Variable documentation sections.
// If found they are stored in their class or in the global list.
static void buildVarList(EntryNav *rootNav)
{
//printf("buildVarList(%s)\n",rootNav->name().data());
int isFuncPtr=-1;
if (!rootNav->name().isEmpty() &&
(rootNav->type().isEmpty() || compoundKeywordDict.find(rootNav->type())==0) &&
(
(rootNav->section()==Entry::VARIABLE_SEC // it's a variable
) ||
(rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable
(isFuncPtr=findFunctionPtr(rootNav->type()))!=-1
) ||
(rootNav->section()==Entry::FUNCTION_SEC && // class variable initialized by constructor
isVarWithConstructor(rootNav)
)
)
) // documented variable
{
addVariable(rootNav,isFuncPtr);
} }
if (rootNav->children()) if (rootNav->children())
{ {
...@@ -4110,8 +4104,10 @@ static bool findClassRelation( ...@@ -4110,8 +4104,10 @@ static bool findClassRelation(
{ {
baseClassName.prepend(scopeName.left(scopeOffset)+"::"); baseClassName.prepend(scopeName.left(scopeOffset)+"::");
} }
baseClassName=stripTemplateSpecifiersFromScope //QCString stripped;
(removeRedundantWhiteSpace(baseClassName)); //baseClassName=stripTemplateSpecifiersFromScope
// (removeRedundantWhiteSpace(baseClassName),TRUE,
// &stripped);
MemberDef *baseClassTypeDef=0; MemberDef *baseClassTypeDef=0;
QCString templSpec; QCString templSpec;
ClassDef *baseClass=getResolvedClass(explicitGlobalScope ? 0 : cd, ClassDef *baseClass=getResolvedClass(explicitGlobalScope ? 0 : cd,
...@@ -9808,6 +9804,13 @@ void parseInput() ...@@ -9808,6 +9804,13 @@ void parseInput()
msg("Searching for enumerations...\n"); msg("Searching for enumerations...\n");
findEnums(rootNav); findEnums(rootNav);
// Since buildVarList calls isVarWithConstructor
// and this calls getResolvedClass we need to process
// typedefs first so the relations between classes via typedefs
// are properly resolved. See bug 536385 for an example.
msg("Searching for documented typedefs...\n");
buildTypedefList(rootNav);
msg("Searching for documented variables...\n"); msg("Searching for documented variables...\n");
buildVarList(rootNav); buildVarList(rootNav);
......
...@@ -131,6 +131,9 @@ ...@@ -131,6 +131,9 @@
#ifdef LANG_MK #ifdef LANG_MK
#include "translator_mk.h" #include "translator_mk.h"
#endif #endif
#ifdef LANG_SC
#include "translator_sc.h"
#endif
#endif // !ENGLISH_ONLY #endif // !ENGLISH_ONLY
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -217,9 +220,7 @@ bool setTranslator(const char *langName) ...@@ -217,9 +220,7 @@ bool setTranslator(const char *langName)
#ifdef LANG_FI #ifdef LANG_FI
else if (L_EQUAL("finnish")) else if (L_EQUAL("finnish"))
{ {
//theTranslator=new TranslatorFinnish; theTranslator=new TranslatorDecoder(new TranslatorFinnish);
theTranslator=new TranslatorEnglish;
err(obsoleteMsg);
} }
#endif #endif
#ifdef LANG_RU #ifdef LANG_RU
...@@ -330,6 +331,12 @@ bool setTranslator(const char *langName) ...@@ -330,6 +331,12 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorDecoder(new TranslatorSerbian); theTranslator=new TranslatorDecoder(new TranslatorSerbian);
} }
#endif #endif
#ifdef LANG_SC
else if (L_EQUAL("serbian-cyrilic"))
{
theTranslator=new TranslatorSerbian;
}
#endif
#ifdef LANG_CA #ifdef LANG_CA
else if (L_EQUAL("catalan")) else if (L_EQUAL("catalan"))
{ {
......
...@@ -1808,7 +1808,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1808,7 +1808,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
Specifier lvirt=virtualness(); Specifier lvirt=virtualness();
if (!isObjCMethod() && if ((!isObjCMethod() || isOptional() || isRequired()) &&
(protection()!=Public || lvirt!=Normal || (protection()!=Public || lvirt!=Normal ||
isFriend() || isRelated() || isFriend() || isRelated() ||
(isInline() && Config_getBool("INLINE_INFO")) || (isInline() && Config_getBool("INLINE_INFO")) ||
...@@ -1855,13 +1855,18 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1855,13 +1855,18 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (isAssign()) sl.append("assign"); if (isAssign()) sl.append("assign");
else if (isCopy()) sl.append("copy"); else if (isCopy()) sl.append("copy");
else if (isRetain()) sl.append("retain"); else if (isRetain()) sl.append("retain");
if (protection()==Protected) sl.append("protected");
else if (protection()==Private) sl.append("private"); if (!isObjCMethod())
else if (protection()==Package) sl.append("package"); {
if (lvirt==Virtual) sl.append("virtual"); if (protection()==Protected) sl.append("protected");
else if (lvirt==Pure) sl.append("pure virtual"); else if (protection()==Private) sl.append("private");
if (isSignal()) sl.append("signal"); else if (protection()==Package) sl.append("package");
if (isSlot()) sl.append("slot");
if (lvirt==Virtual) sl.append("virtual");
else if (lvirt==Pure) sl.append("pure virtual");
if (isSignal()) sl.append("signal");
if (isSlot()) sl.append("slot");
}
} }
if (m_impl->classDef && m_impl->classDef!=container) sl.append("inherited"); if (m_impl->classDef && m_impl->classDef!=container) sl.append("inherited");
} }
......
...@@ -382,7 +382,9 @@ size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft, ...@@ -382,7 +382,9 @@ size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
// avoid a compile error, that is were the CASTNEEDED is for. // avoid a compile error, that is were the CASTNEEDED is for.
#if ((defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109) && \ #if ((defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109) && \
!((defined(_OS_MAC_) || defined(Q_OS_MACX) )&& (_LIBICONV_VERSION==0x010B))) \ !((defined(_OS_MAC_) || defined(Q_OS_MACX) )&& (_LIBICONV_VERSION==0x010B))) \
|| defined(_OS_SOLARIS_)) || defined(_OS_SOLARIS_) \
|| defined(_OS_NETBSD_) \
)
#define CASTNEEDED(x) (x) #define CASTNEEDED(x) (x)
#else #else
#define CASTNEEDED(x) (char **)(x) #define CASTNEEDED(x) (char **)(x)
......
...@@ -535,6 +535,16 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -535,6 +535,16 @@ STARTDOCSYMS ^{B}"##"/[^#]
g_packageCommentAllowed = FALSE; g_packageCommentAllowed = FALSE;
BEGIN( Import ); BEGIN( Import );
} }
^{B}{IDENTIFIER}/{B}"="{B}"property" { // property
current->section = Entry::VARIABLE_SEC;
current->mtype = Property;
current->name = QCString(yytext).stripWhiteSpace();
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
g_packageCommentAllowed = FALSE;
BEGIN(VariableDec);
}
^{B}{IDENTIFIER}/{B}"="[^=] { // variable ^{B}{IDENTIFIER}/{B}"="[^=] { // variable
g_indent=computeIndent(yytext); g_indent=computeIndent(yytext);
current->section = Entry::VARIABLE_SEC; current->section = Entry::VARIABLE_SEC;
...@@ -1129,7 +1139,10 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -1129,7 +1139,10 @@ STARTDOCSYMS ^{B}"##"/[^#]
BEGIN(TripleString); BEGIN(TripleString);
} }
"(" { // tuple "(" { // tuple
current->type = "tuple"; if (current->mtype!=Property)
{
current->type = "tuple";
}
current->initializer+=*yytext; current->initializer+=*yytext;
g_atomStart='('; g_atomStart='(';
g_atomEnd=')'; g_atomEnd=')';
......
...@@ -1254,10 +1254,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1254,10 +1254,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindMembers>{B}*"explicit"{BN}+ { current->spec|=Entry::Explicit; <FindMembers>{B}*"explicit"{BN}+ { current->spec|=Entry::Explicit;
lineCount(); lineCount();
} }
<FindMembers>{B}*"@required"{BN}+ { current->spec|=Entry::Required; <FindMembers>{B}*"@required"{BN}+ { // Objective C 2.0 protocol required section
current->spec=(current->spec & ~Entry::Optional) | Entry::Required;
lineCount(); lineCount();
} }
<FindMembers>{B}*"@optional"{BN}+ { current->spec|=Entry::Optional; <FindMembers>{B}*"@optional"{BN}+ { // Objective C 2.0 protocol optional section
current->spec=(current->spec & ~Entry::Required) | Entry::Optional;
lineCount(); lineCount();
} }
/* /*
...@@ -4064,6 +4066,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4064,6 +4066,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current_root->addSubEntry(current); current_root->addSubEntry(current);
current = new Entry ; current = new Entry ;
initEntry(); initEntry();
// Objective C 2.0: Required/Optional section
if (previous->spec & (Entry::Optional | Entry::Required))
{
current->spec |= previous->spec & (Entry::Optional|Entry::Required);
}
lastCurlyContext = FindMembers; lastCurlyContext = FindMembers;
if ( *yytext == ',' ) if ( *yytext == ',' )
{ {
...@@ -4754,7 +4761,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4754,7 +4761,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<SkipRound>")" { if (--roundCount<=0) <SkipRound>")" { if (--roundCount<=0)
BEGIN ( lastSkipRoundContext ); BEGIN ( lastSkipRoundContext );
} }
<Bases>","|">"|({BN}+"implements"{BN}*) { lineCount(); <Bases>","|(">"({BN}*"{")?)|({BN}+"implements"{BN}*) { lineCount();
if (insideProtocolList) if (insideProtocolList)
{ {
baseName+="-p"; baseName+="-p";
...@@ -4785,7 +4792,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4785,7 +4792,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if (*yytext=='>') if (*yytext=='>')
{ // end of a ObjC protocol list { // end of a ObjC protocol list
insideProtocolList=FALSE; insideProtocolList=FALSE;
unput('{'); // dummy start body if (yyleng==1)
{
unput('{'); // dummy start body
}
else
{
yyless(1);
}
} }
else else
{ {
......
...@@ -1042,8 +1042,7 @@ class TranslatorEnglish : public Translator ...@@ -1042,8 +1042,7 @@ class TranslatorEnglish : public Translator
" Used *m_usedClass;\n" " Used *m_usedClass;\n"
"};\n" "};\n"
"\\endcode\n" "\\endcode\n"
"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file " "This will result in the following graph:"
"is set to 240 this will result in the following graph:"
"<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n" "<p>\n"
"The boxes in the above graph have the following meaning:\n" "The boxes in the above graph have the following meaning:\n"
......
...@@ -24,12 +24,15 @@ ...@@ -24,12 +24,15 @@
// 2007/12/09 // 2007/12/09
// - Initial translation to Macedonian. // - Initial translation to Macedonian.
// //
// 2008/05/22
// - Translation for 1.5.4.
//
// //
#ifndef TRANSLATOR_MK_H #ifndef TRANSLATOR_MK_H
#define TRANSLATOR_MK_H #define TRANSLATOR_MK_H
class TranslatorMacedonian : public TranslatorAdapter_1_4_6 class TranslatorMacedonian : public Translator
{ {
public: public:
...@@ -1558,7 +1561,207 @@ class TranslatorMacedonian : public TranslatorAdapter_1_4_6 ...@@ -1558,7 +1561,207 @@ class TranslatorMacedonian : public TranslatorAdapter_1_4_6
virtual QCString trEnumerationValueDocumentation() virtual QCString trEnumerationValueDocumentation()
{ return "Документија на Набројувања"; } { return "Документија на Набројувања"; }
//////////////////////////////////////////////////////////////////////////
// new since 1.5.4 (mainly for Fortran)
//////////////////////////////////////////////////////////////////////////
/*! header that is put before the list of member subprograms (Fortran). */
virtual QCString trMemberFunctionDocumentationFortran()
{ return "Документација на функции/процедури членови"; }
/*! This is put above each page as a link to the list of annotated data types (Fortran). */
virtual QCString trCompoundListFortran()
{ return "Список на Типови"; }
/*! This is put above each page as a link to all members of compounds (Fortran). */
virtual QCString trCompoundMembersFortran()
{ return "Членови"; }
/*! This is an introduction to the annotated compound list (Fortran). */
virtual QCString trCompoundListDescriptionFortran()
{ return "Список на типови со кратки описи:"; }
/*! This is an introduction to the page with all data types (Fortran). */
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
{
QCString result="Список на сите ";
if (!extractAll)
{
result+="документирани ";
}
result+="членови на типови";
result+=" со врски до ";
if (!extractAll)
{
result+="документацијата за секој член:";
}
else
{
result+="типовите на кои што припаѓаат:";
}
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index (Fortran).
*/
virtual QCString trCompoundIndexFortran()
{ return "Попис на Типови"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all data types (Fortran).
*/
virtual QCString trTypeDocumentation()
{ return "Документација на Типови"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) subprograms (Fortran).
*/
virtual QCString trSubprograms()
{ return "Функции/Процедури"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for subprograms (Fortran)
*/
virtual QCString trSubprogramDocumentation()
{ return "Документација на Функции/Процедури"; }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds (Fortran)
*/
virtual QCString trDataTypes()
{ return "Типови"; }
/*! used as the title of page containing all the index of all modules (Fortran). */
virtual QCString trModulesList()
{ return "Попис на Модули"; }
/*! used as an introduction to the modules list (Fortran) */
virtual QCString trModulesListDescription(bool extractAll)
{
QCString result="Список на сите ";
if (!extractAll) result+="документирани ";
result+="модули со кратки описи:";
return result;
}
/*! used as the title of the HTML page of a module/type (Fortran) */
virtual QCString trCompoundReferenceFortran(const char *clName,
ClassDef::CompoundType compType,
bool isTemplate)
{
QCString result=(QCString)clName + " - Повикување на";
switch(compType)
{
case ClassDef::Class: result+=" Класа"; break;
case ClassDef::Struct: result+=" Тип"; break;
case ClassDef::Union: result+=" Унија"; break;
case ClassDef::Interface: result+=" Интерфејс"; break;
case ClassDef::Protocol: result+=" Протокол"; break;
case ClassDef::Category: result+=" Категорија"; break;
case ClassDef::Exception: result+=" Исклучок"; break;
}
if (isTemplate) result+=" Образец";
return result;
}
/*! used as the title of the HTML page of a module (Fortran) */
virtual QCString trModuleReference(const char *namespaceName)
{
QCString result=namespaceName;
result+=" - Содржина на Модул";
return result;
}
/*! This is put above each page as a link to all members of modules. (Fortran) */
virtual QCString trModulesMembers()
{ return "Членови на Модул"; }
/*! This is an introduction to the page with all modules members (Fortran) */
virtual QCString trModulesMemberDescription(bool extractAll)
{
QCString result="Список на сите ";
if (!extractAll) result+="документирани ";
result+="членови на модулот со врски до ";
if (extractAll)
{
result+="документацијата за секој член:";
}
else
{
result+="модулите на кои што припаѓаат:";
}
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all modules (Fortran).
*/
virtual QCString trModulesIndex()
{ return "Попис на Модули"; }
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trModule(bool first_capital, bool singular)
{
QCString result((first_capital ? "Модул" : "модул"));
if (!singular) result+="и";
return result;
}
/*! This is put at the bottom of a module documentation page and is
* followed by a list of files that were used to generate the page.
*/
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)"Документацијата за ";
switch(compType)
{
case ClassDef::Class: result+="оваа класа"; break;
case ClassDef::Struct: result+="овој тип"; break;
case ClassDef::Union: result+="оваа унија"; break;
case ClassDef::Interface: result+="овој интерфејс"; break;
case ClassDef::Protocol: result+="овој протокол"; break;
case ClassDef::Category: result+="оваа категорија"; break;
case ClassDef::Exception: result+="овој исклучок"; break;
}
result+=" беше создадена од ";
if (single) result+="следнава датотека:"; else result+="следниве датотеки:";
return result;
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trType(bool first_capital, bool singular)
{
QCString result((first_capital ? "Тип" : "тип"));
if (!singular) result+="ови";
return result;
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trSubprogram(bool first_capital, bool singular)
{
QCString result((first_capital ? "Потпрограм" : "потпрограм"));
if (singular){
result+="а";
}else{
result+="и";
}
return result;
}
/*! C# Type Constraint list */
virtual QCString trTypeConstraints()
{
return "Ограничувања на Тип";
}
}; };
#endif #endif
...@@ -674,8 +674,7 @@ class TranslatorDutch : public Translator ...@@ -674,8 +674,7 @@ class TranslatorDutch : public Translator
" Used *m_usedClass;\n" " Used *m_usedClass;\n"
"};\n" "};\n"
"\\endcode\n" "\\endcode\n"
"Als de \\c MAX_DOT_GRAPH_HEIGHT tag in the configuratie file " "Dit voorbeeld zal resulteren in de volgende graaf:"
"op 200 gezet is, zal het bestaande voorbeeld resulteren in de volgende graaf:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n" "<p>\n"
"De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:\n" "De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:\n"
......
This diff is collapsed.
This diff is collapsed.
...@@ -488,7 +488,8 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,Definition ...@@ -488,7 +488,8 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,Definition
*/ */
ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
MemberDef **pMemType,QCString *pTemplSpec, MemberDef **pMemType,QCString *pTemplSpec,
QCString *pResolvedType) QCString *pResolvedType,
ArgumentList *actTemplParams)
{ {
//printf("newResolveTypedef(md=%p,cachedVal=%p)\n",md,md->getCachedTypedefVal()); //printf("newResolveTypedef(md=%p,cachedVal=%p)\n",md,md->getCachedTypedefVal());
bool isCached = md->isTypedefValCached(); // value already cached bool isCached = md->isTypedefValCached(); // value already cached
...@@ -509,7 +510,13 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, ...@@ -509,7 +510,13 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
g_resolvedTypedefs.insert(qname,md); // put on the trace list g_resolvedTypedefs.insert(qname,md); // put on the trace list
ClassDef *typeClass = md->getClassDef();
QCString type = md->typeString(); // get the "value" of the typedef QCString type = md->typeString(); // get the "value" of the typedef
if (typeClass && typeClass->isTemplate() && actTemplParams->count()>0)
{
type = substituteTemplateArgumentsInString(type,
typeClass->templateArguments(),actTemplParams);
}
QCString typedefValue = type; QCString typedefValue = type;
int tl=type.length(); int tl=type.length();
int ip=tl-1; // remove * and & at the end int ip=tl-1; // remove * and & at the end
...@@ -947,7 +954,7 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope, ...@@ -947,7 +954,7 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,
if (newScope) // explicitScope is inside scope => newScope is the result if (newScope) // explicitScope is inside scope => newScope is the result
{ {
Definition *itemScope = item->getOuterScope(); Definition *itemScope = item->getOuterScope();
//printf(" scope traversal successful %s<->%s!\n",item->getOuterScope()->name().data(),newScope->name().data()); //printf(" scope traversal successful %s<->%s!\n",itemScope->name().data(),newScope->name().data());
//if (newScope && newScope->definitionType()==Definition::TypeClass) //if (newScope && newScope->definitionType()==Definition::TypeClass)
//{ //{
// ClassDef *cd = (ClassDef *)newScope; // ClassDef *cd = (ClassDef *)newScope;
...@@ -975,7 +982,7 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope, ...@@ -975,7 +982,7 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,
//printf("scope(%s) is base class of newScope(%s)\n", //printf("scope(%s) is base class of newScope(%s)\n",
// scope->name().data(),newScope->name().data()); // scope->name().data(),newScope->name().data());
} }
else else
{ {
int i=-1; int i=-1;
if (newScope->definitionType()==Definition::TypeNamespace) if (newScope->definitionType()==Definition::TypeNamespace)
...@@ -1027,13 +1034,13 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope, ...@@ -1027,13 +1034,13 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,
i = isAccessibleFromWithExpScope(scope->getOuterScope(),fileScope, i = isAccessibleFromWithExpScope(scope->getOuterScope(),fileScope,
item,explicitScopePart); item,explicitScopePart);
} }
//printf("> result=%d\n",i); //printf(" | result=%d\n",i);
result = (i==-1) ? -1 : i+2; result = (i==-1) ? -1 : i+2;
} }
} }
else // failed to resolve explicitScope else // failed to resolve explicitScope
{ {
//printf("failed to resolve: scope=%s\n",scope->name().data()); //printf(" failed to resolve: scope=%s\n",scope->name().data());
if (scope->definitionType()==Definition::TypeNamespace) if (scope->definitionType()==Definition::TypeNamespace)
{ {
NamespaceDef *nscope = (NamespaceDef*)scope; NamespaceDef *nscope = (NamespaceDef*)scope;
...@@ -1083,6 +1090,7 @@ static void getResolvedSymbol(Definition *scope, ...@@ -1083,6 +1090,7 @@ static void getResolvedSymbol(Definition *scope,
FileDef *fileScope, FileDef *fileScope,
Definition *d, Definition *d,
const QCString &explicitScopePart, const QCString &explicitScopePart,
ArgumentList *actTemplParams,
int &minDistance, int &minDistance,
ClassDef *&bestMatch, ClassDef *&bestMatch,
MemberDef *&bestTypedef, MemberDef *&bestTypedef,
...@@ -1103,7 +1111,7 @@ static void getResolvedSymbol(Definition *scope, ...@@ -1103,7 +1111,7 @@ static void getResolvedSymbol(Definition *scope,
g_visitedNamespaces.clear(); g_visitedNamespaces.clear();
// test accessibility of definition within scope. // test accessibility of definition within scope.
int distance = isAccessibleFromWithExpScope(scope,fileScope,d,explicitScopePart); int distance = isAccessibleFromWithExpScope(scope,fileScope,d,explicitScopePart);
//printf(" distance %s (%p) is %d\n",d->name().data(),d,distance); //printf(" %s; distance %s (%p) is %d\n",scope->name().data(),d->name().data(),d,distance);
if (distance!=-1) // definition is accessible if (distance!=-1) // definition is accessible
{ {
// see if we are dealing with a class or a typedef // see if we are dealing with a class or a typedef
...@@ -1173,7 +1181,7 @@ static void getResolvedSymbol(Definition *scope, ...@@ -1173,7 +1181,7 @@ static void getResolvedSymbol(Definition *scope,
QCString type; QCString type;
minDistance=distance; minDistance=distance;
MemberDef *enumType = 0; MemberDef *enumType = 0;
ClassDef *cd = newResolveTypedef(fileScope,md,&enumType,&spec,&type); ClassDef *cd = newResolveTypedef(fileScope,md,&enumType,&spec,&type,actTemplParams);
if (cd) // type resolves to a class if (cd) // type resolves to a class
{ {
//printf(" bestTypeDef=%p spec=%s type=%s\n",md,spec.data(),type.data()); //printf(" bestTypeDef=%p spec=%s type=%s\n",md,spec.data(),type.data());
...@@ -1248,8 +1256,17 @@ ClassDef *getResolvedClassRec(Definition *scope, ...@@ -1248,8 +1256,17 @@ ClassDef *getResolvedClassRec(Definition *scope,
) )
{ {
//printf("[getResolvedClassRec(%s,%s)\n",scope?scope->name().data():"<global>",n); //printf("[getResolvedClassRec(%s,%s)\n",scope?scope->name().data():"<global>",n);
QCString name=n; QCString name;
QCString explicitScopePart; QCString explicitScopePart;
QCString strippedTemplateParams;
name=stripTemplateSpecifiersFromScope
(removeRedundantWhiteSpace(n),TRUE,
&strippedTemplateParams);
ArgumentList actTemplParams;
if (!strippedTemplateParams.isEmpty()) // template part that was stripped
{
stringToArgumentList(strippedTemplateParams,&actTemplParams);
}
int qualifierIndex = computeQualifiedIndex(name); int qualifierIndex = computeQualifiedIndex(name);
//printf("name=%s qualifierIndex=%d\n",name.data(),qualifierIndex); //printf("name=%s qualifierIndex=%d\n",name.data(),qualifierIndex);
...@@ -1354,7 +1371,7 @@ ClassDef *getResolvedClassRec(Definition *scope, ...@@ -1354,7 +1371,7 @@ ClassDef *getResolvedClassRec(Definition *scope,
int count=0; int count=0;
for (dli.toFirst();(d=dli.current());++dli,++count) // foreach definition for (dli.toFirst();(d=dli.current());++dli,++count) // foreach definition
{ {
getResolvedSymbol(scope,fileScope,d,explicitScopePart, getResolvedSymbol(scope,fileScope,d,explicitScopePart,&actTemplParams,
minDistance,bestMatch,bestTypedef,bestTemplSpec, minDistance,bestMatch,bestTypedef,bestTemplSpec,
bestResolvedType); bestResolvedType);
} }
...@@ -1363,7 +1380,7 @@ ClassDef *getResolvedClassRec(Definition *scope, ...@@ -1363,7 +1380,7 @@ ClassDef *getResolvedClassRec(Definition *scope,
{ {
//printf(" name is unique\n"); //printf(" name is unique\n");
Definition *d = (Definition *)di; Definition *d = (Definition *)di;
getResolvedSymbol(scope,fileScope,d,explicitScopePart, getResolvedSymbol(scope,fileScope,d,explicitScopePart,&actTemplParams,
minDistance,bestMatch,bestTypedef,bestTemplSpec, minDistance,bestMatch,bestTypedef,bestTemplSpec,
bestResolvedType); bestResolvedType);
} }
...@@ -3127,9 +3144,10 @@ static QCString getCanonicalTypeForIdentifier( ...@@ -3127,9 +3144,10 @@ static QCString getCanonicalTypeForIdentifier(
{ {
result = mType->qualifiedName(); result = mType->qualifiedName();
} }
else else // fallback
{ {
resolvedType = resolveTypeDef(d,word); resolvedType = resolveTypeDef(d,word);
//printf("typedef [%s]->[%s]\n",word.data(),resolvedType.data());
if (resolvedType.isEmpty()) // not known as a typedef either if (resolvedType.isEmpty()) // not known as a typedef either
{ {
result = word; result = word;
...@@ -5476,6 +5494,7 @@ QCString stripTemplateSpecifiersFromScope(const QCString &fullName, ...@@ -5476,6 +5494,7 @@ QCString stripTemplateSpecifiersFromScope(const QCString &fullName,
} }
else if (pLastScopeStripped) else if (pLastScopeStripped)
{ {
//printf(" last stripped scope '%s'\n",fullName.mid(i,e-i).data());
*pLastScopeStripped=fullName.mid(i,e-i); *pLastScopeStripped=fullName.mid(i,e-i);
} }
p=e; p=e;
......
...@@ -330,7 +330,8 @@ bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n); ...@@ -330,7 +330,8 @@ bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n);
ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
MemberDef **pMemType=0,QCString *pTemplSpec=0, MemberDef **pMemType=0,QCString *pTemplSpec=0,
QCString *pResolvedType=0); QCString *pResolvedType=0,
ArgumentList *actTemplParams=0);
QCString parseCommentAsText(const QString &doc,const QCString &fileName,int lineNr); QCString parseCommentAsText(const QString &doc,const QCString &fileName,int lineNr);
......
...@@ -234,8 +234,8 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0) ...@@ -234,8 +234,8 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0)
VhdlDocGen::getSigName(ql,str,bufio); VhdlDocGen::getSigName(ql,str,bufio);
int count = ql.count(); int count = ql.count();
QCString brief = current->brief; QCString brief = current->brief;
QCString doc = current->doc; QCString doc = current->doc;
Entry *tmpEntry = current; Entry *tmpEntry = current;
current = new Entry; current = new Entry;
initEntry(current); initEntry(current);
...@@ -257,55 +257,67 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0) ...@@ -257,55 +257,67 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0)
current->brief.resize(0); current->brief.resize(0);
current->doc.resize(0); current->doc.resize(0);
for (int k=1;k<count;k++) if (genPort!=3) // not a unit
{ {
//printf("adding '%s' '%s'\n",ql.at(0)->data(),ql.at(k)->data()); for (int k=1;k<count;k++)
Entry *pTemp=new Entry;
initEntry(pTemp);
pTemp->startLine = line;
pTemp->bodyLine = line;
pTemp->name = ql.at(k)->data();
pTemp->section = Entry::VARIABLE_SEC;
pTemp->brief = brief;
pTemp->doc = doc;
QCString stSpec = ql.at(0)->data();
if (genPort==1)
{
pTemp->spec = VhdlDocGen::PORT;
stSpec.stripPrefix(bufio.data());
stSpec=stSpec.stripWhiteSpace();
pTemp->args = stSpec;
pTemp->type = bufio;
}
else if (genPort==2) // found record
{
pTemp->spec = VhdlDocGen::RECORD;
pTemp->type = stSpec;
pTemp->name.prepend(VhdlDocGen::getRecordNumber());
}
else
{ {
pTemp->spec = VhdlDocGen::GENERIC; //printf("adding '%s' '%s'\n",ql.at(0)->data(),ql.at(k)->data());
pTemp->type = stSpec; Entry *pTemp=new Entry;
} initEntry(pTemp);
addSubEntry(e,pTemp); pTemp->startLine = line;
}// for pTemp->bodyLine = line;
pTemp->name = ql.at(k)->data();
/* found a unit */ pTemp->section = Entry::VARIABLE_SEC;
if (genPort==3) pTemp->brief = brief;
pTemp->doc = doc;
pTemp->mGrpId = current->mGrpId; // copy member group id
QCString stSpec = ql.at(0)->data();
if (genPort==1) // found port
{
pTemp->spec = VhdlDocGen::PORT;
stSpec.stripPrefix(bufio.data());
stSpec=stSpec.stripWhiteSpace();
pTemp->args = stSpec;
pTemp->type = bufio;
addSubEntry(e,pTemp);
}
else if (genPort==2) // found record
{
pTemp->spec = VhdlDocGen::RECORD;
pTemp->type = stSpec;
pTemp->name.prepend(VhdlDocGen::getRecordNumber());
delete current;
current = new Entry(*pTemp); // make a deep copy of pTemp
newEntry(); // add it to lastCompound and make a new current
delete pTemp;
}
else
{
pTemp->spec = VhdlDocGen::GENERIC;
pTemp->type = stSpec;
addSubEntry(e,pTemp);
}
}// for
}
else // found a unit
{ {
Entry *pTemp=new Entry; Entry *pTemp=new Entry;
initEntry(pTemp); initEntry(pTemp);
QCString tt(str); QCString tt(str);
QStringList ql=QStringList::split("=",tt,FALSE); QStringList ql=QStringList::split("=",tt,FALSE);
pTemp->spec=VhdlDocGen::UNITS; pTemp->spec = VhdlDocGen::UNITS;
pTemp->section=Entry::VARIABLE_SEC; pTemp->section = Entry::VARIABLE_SEC;
pTemp->startLine=line; pTemp->startLine = line;
pTemp->bodyLine=line; pTemp->bodyLine = line;
pTemp->type=(QCString)ql[1]; pTemp->brief = brief; // adds brief description to the unit member
pTemp->name=(QCString)ql[0].stripWhiteSpace(); pTemp->doc = doc; // adds doc to the unit member
pTemp->type = ql[1];
pTemp->name = ql[0].stripWhiteSpace();
pTemp->name.prepend(VhdlDocGen::getRecordNumber()); pTemp->name.prepend(VhdlDocGen::getRecordNumber());
addSubEntry(e,pTemp); delete current;
current = new Entry(*pTemp); // make a deep copy
newEntry(); // add it to lastCompound
delete pTemp;
} }
} }
...@@ -561,8 +573,11 @@ ENDFUNC {B}*"end"{BR}+"function"{BR}+{FUNCNAME}{BR}*[;] ...@@ -561,8 +573,11 @@ ENDFUNC {B}*"end"{BR}+"function"{BR}+{FUNCNAME}{BR}*[;]
FUNCIMPURE "impure"|"pure" FUNCIMPURE "impure"|"pure"
FUNCPROC ^{B}*{FUNCIMPURE}*{BR}*("function"|"procedure"){B}* FUNCPROC ^{B}*{FUNCIMPURE}*{BR}*("function"|"procedure"){B}*
ARCHITECTURE ("architecture"){BR}+{NAME}{BR}*("of") ARCHITECTURE ("architecture"){BR}+{NAME}{BR}*("of")
POST "postponed" /* Removed due to bug 538239
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") 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")
*/
PROCESS ({B}*{FUNCNAME}{B}*:{BR}*)?({B}*("postponed"){BR}+)?{B}*("process"){BR}*{PROTO}
ENDPROCESS ("end"){BR}*("process") ENDPROCESS ("end"){BR}*("process")
LIBUSE ^{B}*("use"|"library"){BR}+ LIBUSE ^{B}*("use"|"library"){BR}+
...@@ -614,6 +629,7 @@ ALLID [^;()\t ] ...@@ -614,6 +629,7 @@ ALLID [^;()\t ]
//addSubEntry(current,pEntry); //addSubEntry(current,pEntry);
current->startLine=yyLineNr; current->startLine=yyLineNr;
current->bodyLine=yyLineNr; current->bodyLine=yyLineNr;
newEntry(); // adds the unit to the lastCompound
genPort=3; genPort=3;
BEGIN(ParseRecord); BEGIN(ParseRecord);
} }
...@@ -915,9 +931,7 @@ ALLID [^;()\t ] ...@@ -915,9 +931,7 @@ ALLID [^;()\t ]
current->section=Entry::VARIABLE_SEC; current->section=Entry::VARIABLE_SEC;
current->spec=VhdlDocGen::RECORD; current->spec=VhdlDocGen::RECORD;
addText(vhdlscanYYtext,vhdlscanYYleng); addText(vhdlscanYYtext,vhdlscanYYleng);
addSubEntry(current_root,current); newEntry(); // adds the record to the last compound
current = new Entry;
initEntry(current);
BEGIN(ParseRecord); BEGIN(ParseRecord);
} }
...@@ -932,10 +946,18 @@ ALLID [^;()\t ] ...@@ -932,10 +946,18 @@ ALLID [^;()\t ]
BEGIN(Start); BEGIN(Start);
} }
<ParseRecord>[a-z_][^\n;]* { // parse record body <ParseRecord>[a-z_A-Z0-9][^\n;]*";"({B}*{COMMENT})* { // parse record body
lineCount(); lineCount();
QCString comment;
QCString zz(vhdlscanYYtext); QCString zz(vhdlscanYYtext);
addSignals(zz.data(),yyLineNr,current); if (zz.contains("--!"))
{
QStringList ql=QStringList::split("--!",zz,FALSE);
comment = ql[1];
zz = ql[0];
}
initEntry(current);
addSignals(zz,yyLineNr,current,comment);
addText(vhdlscanYYtext,vhdlscanYYleng); addText(vhdlscanYYtext,vhdlscanYYleng);
BEGIN(ParseRecord); BEGIN(ParseRecord);
} }
...@@ -1094,10 +1116,11 @@ ALLID [^;()\t ] ...@@ -1094,10 +1116,11 @@ ALLID [^;()\t ]
current->section=Entry::VARIABLE_SEC; current->section=Entry::VARIABLE_SEC;
current->type+=qcs.data(); current->type+=qcs.data();
if ((current->spec==VhdlDocGen::SIGNAL || if ((current->spec==VhdlDocGen::SIGNAL ||
current->spec==VhdlDocGen::CONSTANT || current->spec==VhdlDocGen::CONSTANT ||
current->spec==VhdlDocGen::TYPE || current->spec==VhdlDocGen::TYPE ||
current->spec==VhdlDocGen::SUBTYPE current->spec==VhdlDocGen::SUBTYPE ||
current->spec==VhdlDocGen::SHAREDVARIABLE
) && ) &&
qcs.stripPrefix(",")) qcs.stripPrefix(","))
{ {
...@@ -1105,7 +1128,8 @@ ALLID [^;()\t ] ...@@ -1105,7 +1128,8 @@ ALLID [^;()\t ]
ql.setAutoDelete(TRUE); ql.setAutoDelete(TRUE);
QCString buffer; QCString buffer;
if (current->spec==VhdlDocGen::SUBTYPE || if (current->spec==VhdlDocGen::SUBTYPE ||
current->spec==VhdlDocGen::TYPE) current->spec==VhdlDocGen::TYPE
)
{ {
VhdlDocGen::getSigTypeName(ql,qcs.data(),buffer); VhdlDocGen::getSigTypeName(ql,qcs.data(),buffer);
} }
...@@ -1316,7 +1340,6 @@ ALLID [^;()\t ] ...@@ -1316,7 +1340,6 @@ ALLID [^;()\t ]
{ {
//printf("no ; or --: pos=%d semi=%d\n",pos,semi); //printf("no ; or --: pos=%d semi=%d\n",pos,semi);
} }
int diff=openCount-closeCount; int diff=openCount-closeCount;
if (diff<0) if (diff<0)
{ {
......
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