summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2003-09-09 19:57:43 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2003-09-09 19:57:43 (GMT)
commit5042f14501ee003ee5b13173877936f0138f0544 (patch)
treec0925e732c4e9f06ccfc3974882096c5f56db513
parentd20edf5ddd0f90ea5b220ad743bf311f74383fc8 (diff)
downloadDoxygen-5042f14501ee003ee5b13173877936f0138f0544.zip
Doxygen-5042f14501ee003ee5b13173877936f0138f0544.tar.gz
Doxygen-5042f14501ee003ee5b13173877936f0138f0544.tar.bz2
Release-1.3.3-20030909
-rw-r--r--INSTALL4
-rw-r--r--README4
-rw-r--r--VERSION2
-rw-r--r--doc/config.doc3
-rw-r--r--doc/doxygen_manual.tex1
-rw-r--r--doc/history.doc4
-rw-r--r--doc/install.doc13
-rw-r--r--doc/language.doc10
-rw-r--r--packages/rpm/doxygen.spec2
-rw-r--r--src/definition.cpp6
-rw-r--r--src/doxygen.cpp28
-rw-r--r--src/pngenc.cpp13
-rw-r--r--src/pre.l15
-rw-r--r--src/translator_br.h56
-rw-r--r--src/translator_hr.h79
-rw-r--r--src/translator_it.h52
-rw-r--r--src/util.cpp205
17 files changed, 258 insertions, 239 deletions
diff --git a/INSTALL b/INSTALL
index b6ae1f6..3aca7d0 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.3.3-20030904
+DOXYGEN Version 1.3.3-20030909
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (04 September 2003)
+Dimitri van Heesch (09 September 2003)
diff --git a/README b/README
index 77de0ae..d03d9f7 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.3.3_20030904
+DOXYGEN Version 1.3.3_20030909
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) (04 September 2003)
+Dimitri van Heesch (dimitri@stack.nl) (09 September 2003)
diff --git a/VERSION b/VERSION
index 175caed..3314165 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.3-20030904
+1.3.3-20030909
diff --git a/doc/config.doc b/doc/config.doc
index 79690c8..db71631 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -917,8 +917,7 @@ function's detailed documentation block.
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.
Compressed HTML files also contain an index, a table of contents,
- and you can search for words in the documentation
- (which basically renders \c doxysearch obsolete on Windows).
+ and you can search for words in the documentation.
The HTML workshop also contains a viewer for compressed HTML files.
\anchor cfg_chm_file
diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex
index 0c9bac3..33c2f0b 100644
--- a/doc/doxygen_manual.tex
+++ b/doc/doxygen_manual.tex
@@ -62,7 +62,6 @@ Written by Dimitri van Heesch\\[2ex]
\input{history}
\input{doxygen_usage}
\input{doxytag_usage}
-\input{doxysearch_usage}
\input{doxywizard_usage}
\input{installdox_usage}
\input{output}
diff --git a/doc/history.doc b/doc/history.doc
index ffc3513..5c76556 100644
--- a/doc/history.doc
+++ b/doc/history.doc
@@ -85,8 +85,8 @@
<h2>Version 0.3</h2>
<h3>Major new features:</h3>
<ul>
-<li>A search engine <a href="doxysearch_usage.html">doxysearch</a>,
- that allows you to search through the generated documentation.
+<li>A PHP based search engine that allows you to search through the generated
+ documentation.
<li>A configuration file instead of command-line options. A default
configuration file can be generated
by <a href="doxygen_usage.html">doxygen</a>.
diff --git a/doc/install.doc b/doc/install.doc
index 489dbea..f0bdbf6 100644
--- a/doc/install.doc
+++ b/doc/install.doc
@@ -125,7 +125,7 @@ Compilation is now done by performing the following steps:
\endverbatim
The program should compile without problems and three binaries
- (<code>doxygen</code>, <code>doxytag</code>, and <code>doxysearch</code>)
+ (<code>doxygen</code> and <code>doxytag</code>)
should be available in the bin directory of the distribution.
<li>Optional: Generate the user manual.
@@ -314,7 +314,7 @@ virtual function of class QList<PageInfo> is defined]
\endverbatim
These are generated because the compiler is confused about the object sharing
-between \c doxygen and \c doxytag. To compile \c doxytag and \c doxysearch
+between \c doxygen and \c doxytag. To compile \c doxytag
anyway do:
\verbatim
@@ -322,7 +322,6 @@ rm -rf objects
mkdir objects
cd src
gmake -f Makefile.doxytag
-gmake -f Makefile.doxysearch
\endverbatim
when configuring with <code>--static</code> I got:
@@ -457,8 +456,8 @@ Here is what is required:
steps.
<li>From Doxygen-1.2.2-20001015 onwards, the distribution includes the part
- of Qt-2.x.y that is needed for to compile doxygen, doxytag,
- and doxysearch. The Windows specific part were also created.
+ of Qt-2.x.y that is needed for to compile doxygen and doxytag,
+ The Windows specific part were also created.
As a result doxygen can be compiled on systems without X11 or the
commerical version of Qt.
@@ -539,8 +538,8 @@ Compilation is now done by performing the following steps:
\endverbatim
This should build the executables
- <code>doxygen.exe</code>, <code>doxytag.exe</code>, and
- <code>doxysearch.exe</code> using Microsoft's Visual C++ compiler
+ <code>doxygen.exe</code> and <code>doxytag.exe</code>
+ using Microsoft's Visual C++ compiler
(The compiler should not produce any serious warnings or errors).
You can use also the <code>bcc</code> argument to build
diff --git a/doc/language.doc b/doc/language.doc
index dc67fdb..dd926ac 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
-Currently (version 1.3.3-20030824), 29 languages
+Currently (version 1.3.3-20030904), 29 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish,
@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD>
- <TD>1.3.3</TD>
+ <TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Catalan</TD>
@@ -79,7 +79,7 @@ when the translator was updated.
<TD>Croatian</TD>
<TD>Boris Bralo</TD>
<TD>boris.bralo@NOSPAM.zg.tel.hr</TD>
- <TD>1.3.1</TD>
+ <TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Czech</TD>
@@ -236,7 +236,7 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline
\hline
- Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & 1.3.3 \\
+ Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\
\hline
Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\
\hline
@@ -246,7 +246,7 @@ when the translator was updated.
Chinese Traditional & Daniel YC Lin & {\tt daniel@twpda.com} & 1.3.3 \\
& Gary Lee & {\tt garylee@ecosine.com.tw} & \\
\hline
- Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & 1.3.1 \\
+ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
\hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
\hline
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index 5421ad8..f9792a9 100644
--- a/packages/rpm/doxygen.spec
+++ b/packages/rpm/doxygen.spec
@@ -1,6 +1,6 @@
Summary: A documentation system for C/C++.
Name: doxygen
-Version: 1.3.3_20030904
+Version: 1.3.3_20030909
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
diff --git a/src/definition.cpp b/src/definition.cpp
index 2733ab3..c94c7c5 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -243,6 +243,7 @@ static bool readCodeFragment(const char *fileName,
if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
QCString cmd=Config_getString("INPUT_FILTER")+" \""+fileName+"\"";
FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r");
+ bool found=FALSE;
if (f)
{
int c=0;
@@ -257,7 +258,6 @@ static bool readCodeFragment(const char *fileName,
if (!feof(f))
{
// skip until the opening bracket or lonely : is found
- bool found=FALSE;
char cn=0;
while (lineNr<=endLine && !feof(f) && !found)
{
@@ -324,11 +324,11 @@ static bool readCodeFragment(const char *fileName,
result.truncate(braceIndex+1);
}
endLine=lineNr-1;
- return TRUE;
}
}
+ if (Config_getBool("FILTER_SOURCE_FILES")) pclose(f); else fclose(f);
}
- return FALSE;
+ return found;
}
/*! Write a reference to the source code defining this definition */
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index b380d07..19aadee 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -856,13 +856,17 @@ Definition *buildScopeFromQualifiedName(const QCString name,int level)
QCString nsName = name.mid(idx,l);
if (!fullScope.isEmpty()) fullScope+="::";
fullScope+=nsName;
- //printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
- // introduce bogus namespace
- NamespaceDef *nd=new NamespaceDef(
+ NamespaceDef *nd=Doxygen::namespaceSDict.find(fullScope);
+ if (nd==0)
+ {
+ // introduce bogus namespace
+ //printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
+ nd=new NamespaceDef(
"<generated>",1,fullScope);
- // add namespace to the list
- Doxygen::namespaceSDict.inSort(fullScope,nd);
+ // add namespace to the list
+ Doxygen::namespaceSDict.inSort(fullScope,nd);
+ }
prevScope->addInnerCompound(nd);
nd->setOuterScope(prevScope);
p=idx+l+2;
@@ -897,13 +901,13 @@ static void resolveClassNestingRelations()
Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,cd->name());
if (d==0)
{
- //Definition *d = buildScopeFromQualifiedName(cd->name(),cd->name().contains("::"));
- //d->addInnerCompound(nd);
- //nd->setOuterScope(d);
- warn(cd->getDefFileName(),cd->getDefLine(),
- "Warning: Internal inconsistency: scope for class %s not "
- "found!\n",cd->name().data()
- );
+ Definition *d = buildScopeFromQualifiedName(cd->name(),cd->name().contains("::"));
+ d->addInnerCompound(cd);
+ cd->setOuterScope(d);
+ //warn(cd->getDefFileName(),cd->getDefLine(),
+ // "Warning: Internal inconsistency: scope for class %s not "
+ // "found!\n",cd->name().data()
+ // );
}
else
{
diff --git a/src/pngenc.cpp b/src/pngenc.cpp
index 3ed69b3..5a52e2f 100644
--- a/src/pngenc.cpp
+++ b/src/pngenc.cpp
@@ -27,6 +27,8 @@
#include <png.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
#include "pngenc.h"
#include "message.h"
@@ -133,8 +135,15 @@ void PngEncoder::write(const char *name)
png_set_rows(png_ptr,info_ptr,rows);
file = fopen(name,"wb");
- png_init_io(png_ptr,file);
- png_write_png(png_ptr,info_ptr,PNG_TRANSFORM_IDENTITY,NULL);
+ if (file==0)
+ {
+ err("Error opening png file %s for writing: %s!\n",name,strerror(errno));
+ }
+ else
+ {
+ png_init_io(png_ptr,file);
+ png_write_png(png_ptr,info_ptr,PNG_TRANSFORM_IDENTITY,NULL);
+ }
}
png_destroy_write_struct(&png_ptr, &info_ptr);
diff --git a/src/pre.l b/src/pre.l
index 7a3f42f..6a26378 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -1061,6 +1061,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x Ifdef
%x Ifndef
%x SkipCComment
+%x SkipVerbatim
%x SkipCPPComment
%x RemoveCComment
%x RemoveCPPComment
@@ -1660,14 +1661,22 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar('/');outputChar('*');
//g_commentCount++;
}
-<SkipCComment>[^*\n\/]+ {
+<SkipCComment>[\\@]"verbatim"{BN}+ {
outputArray(yytext,yyleng);
+ BEGIN(SkipVerbatim);
}
-<SkipCComment>\n {
+<SkipVerbatim>[\\@]"endverbatim" {
+ outputArray(yytext,yyleng);
+ BEGIN(SkipCComment);
+ }
+<SkipCComment,SkipVerbatim>[^*\n\/]+ {
+ outputArray(yytext,yyleng);
+ }
+<SkipCComment,SkipVerbatim>\n {
g_yyLineNr++;
outputChar('\n');
}
-<SkipCComment>. {
+<SkipCComment,SkipVerbatim>. {
outputChar(*yytext);
}
<RemoveCComment>"*/" { BEGIN(g_lastCContext); }
diff --git a/src/translator_br.h b/src/translator_br.h
index 8f4e501..1f4c9b3 100644
--- a/src/translator_br.h
+++ b/src/translator_br.h
@@ -16,6 +16,8 @@
* Version: 1.3 (2003/05/01)
*
* History:
+ * 1.3.3:
+ * - Updated to Doxygen 1.3.3
* 1.3.2:
* - Updated to Doxygen 1.3.2
* 1.3:
@@ -29,7 +31,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
-class TranslatorBrazilian: public TranslatorAdapter_1_3_3
+class TranslatorBrazilian: public Translator
{
public:
@@ -1466,7 +1468,7 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_3
// new since 1.3.1
//////////////////////////////////////////////////////////////////////////
- /*! Used in the quick index of a class/file/namespace member list page
+ /*! Used in the quick index of a class/file/namespace member list page
* to link to the unfiltered list of all members.
*/
virtual QCString trAll()
@@ -1479,5 +1481,55 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_3
return "Este é o grafo de chamadas para esta funçăo:";
}
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.3
+//////////////////////////////////////////////////////////////////////////
+
+ /*! When the search engine is enabled this text is put in the header
+ * of each page before the field where one can enter the text to search
+ * for.
+ */
+ virtual QCString trSearchForIndex()
+ {
+ return "Procurar por";
+ }
+ /*! This string is used as the title for the page listing the search
+ * results.
+ */
+ virtual QCString trSearchResultsTitle()
+ {
+ return "Resultado da Busca";
+ }
+ /*! This string is put just before listing the search results. The
+ * text can be different depending on the number of documents found.
+ * Inside the text you can put the special marker $num to insert
+ * the number representing the actual number of search results.
+ * The @a numDocuments parameter can be either 0, 1 or 2, where the
+ * value 2 represents 2 or more matches. HTML markup is allowed inside
+ * the returned string.
+ */
+ virtual QCString trSearchResults(int numDocuments)
+ {
+ if (numDocuments==0)
+ {
+ return "Nenhum documento foi encontrado.";
+ }
+ else if (numDocuments==1)
+ {
+ return "Apenas <b>1</b> documento foi encontrado.";
+ }
+ else
+ {
+ return "<b>$num</b> documentos encontrados. "
+ "Os melhores resultados vem primeiro.";
+ }
+ }
+ /*! This string is put before the list of matched words, for each search
+ * result. What follows is the list of words that matched the query.
+ */
+ virtual QCString trSearchMatches()
+ {
+ return "Resultados:";
+ }
};
#endif
diff --git a/src/translator_hr.h b/src/translator_hr.h
index 5a8e2f0..acc21a5 100644
--- a/src/translator_hr.h
+++ b/src/translator_hr.h
@@ -56,7 +56,7 @@
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
-class TranslatorCroatian : public TranslatorAdapter_1_3_1
+class TranslatorCroatian : public Translator
{
private:
/*! to avoid macro redefinition from translator_cz.h */
@@ -1130,6 +1130,83 @@ class TranslatorCroatian : public TranslatorAdapter_1_3_1
{
return decode("Statički atributi u paketu");
}
+ //////////////////////////////////////////////////////////////////////////
+ // new since 1.3.1
+ //////////////////////////////////////////////////////////////////////////
+
+ /*! Used in the quick index of a class/file/namespace member list page
+ * to link to the unfiltered list of all members.
+ */
+ virtual QCString trAll()
+ {
+ return "Sve";
+ }
+ /*! Put in front of the call graph for a function. */
+ virtual QCString trCallGraph()
+ {
+ return "Ovo je dijagram poziva za ovu funkciju:";
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // new since 1.3.3
+ //////////////////////////////////////////////////////////////////////////
+
+ /*! When the search engine is enabled this text is put in the header
+ * of each page before the field where one can enter the text to search
+ * for.
+ */
+ virtual QCString trSearchForIndex()
+ {
+ return decode("Traži");
+ }
+ /*! This string is used as the title for the page listing the search
+ * results.
+ */
+ virtual QCString trSearchResultsTitle()
+ {
+ return "Rezultati pretrage";
+ }
+ /*! This string is put just before listing the search results. The
+ * text can be different depending on the number of documents found.
+ * Inside the text you can put the special marker $num to insert
+ * the number representing the actual number of search results.
+ * The @a numDocuments parameter can be either 0, 1 or 2, where the
+ * value 2 represents 2 or more matches. HTML markup is allowed inside
+ * the returned string.
+ */
+ virtual QCString trSearchResults(int numDocuments)
+ {
+ if (numDocuments==0)
+ {
+ return decode("Nema dokumenta koji odgovaraju vašem upitu");
+ }
+ else if (numDocuments==1)
+ {
+ return decode("Nađen <b>1</b> dokument koji odgovara vašem upitu.");
+ }
+ else if (numDocuments<5)
+ {
+ // croatian handle numbers up to 5 differently
+ // For those of you who like to read comments :
+ // There are only 4 men in the world in croatian.
+ // We say 1 čovjek (man), 2 čovjeka, 3 čovjeka , 4 čovjeka , but 5, 6, 7 ... ljudi (people)
+ // That's deep, isn't it :-)?
+ return decode("Nađena <b>$num</b> dokumenta koji odgovaraju vašem upitu."
+ "Najbolji su prikazani prvi.");
+ }
+ else
+ {
+ return decode("Nađeno <b>$num</b> dokumenata koji odgovaraju vašem upitu."
+ "Najbolji su prikazani prvi.");
+ }
+ }
+ /*! This string is put before the list of matched words, for each search
+ * result. What follows is the list of words that matched the query.
+ */
+ virtual QCString trSearchMatches()
+ {
+ return decode("Pronađeno:");
+ }
};
diff --git a/src/translator_it.h b/src/translator_it.h
index 302c0df..9346593 100644
--- a/src/translator_it.h
+++ b/src/translator_it.h
@@ -19,6 +19,7 @@
*
* Revision history
*
+ * 2003/11: translated new items used since version 1.3.3
* 2003/06: translated new items used since version 1.3.1
* 2003/04: translated new items used since version 1.3
* 2002/11: translated new items used since version 1.2.18
@@ -1448,6 +1449,57 @@ class TranslatorItalian : public TranslatorAdapter_1_3_3
return "Questo č il grafo delle chiamate per questa funzione:";
}
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.3
+//////////////////////////////////////////////////////////////////////////
+
+ /*! When the search engine is enabled this text is put in the header
+ * of each page before the field where one can enter the text to search
+ * for.
+ */
+ virtual QCString trSearchForIndex()
+ {
+ return "Cerca";
+ }
+ /*! This string is used as the title for the page listing the search
+ * results.
+ */
+ virtual QCString trSearchResultsTitle()
+ {
+ return "Risultati della ricerca";
+ }
+ /*! This string is put just before listing the search results. The
+ * text can be different depending on the number of documents found.
+ * Inside the text you can put the special marker $num to insert
+ * the number representing the actual number of search results.
+ * The @a numDocuments parameter can be either 0, 1 or 2, where the
+ * value 2 represents 2 or more matches. HTML markup is allowed inside
+ * the returned string.
+ */
+ virtual QCString trSearchResults(int numDocuments)
+ {
+ if (numDocuments==0)
+ {
+ return "Nessun documento soddisfa la tua richiesta.";
+ }
+ else if (numDocuments==1)
+ {
+ return "Trovato <b>1</b> documento rispondente alla tua richiesta.";
+ }
+ else
+ {
+ return "Trovati <b>$num</b> documenti rispondenti alla tua richiesta. "
+ "Le corrispondenze migliori sono in testa.";
+ }
+ }
+ /*! This string is put before the list of matched words, for each search
+ * result. What follows is the list of words that matched the query.
+ */
+ virtual QCString trSearchMatches()
+ {
+ return "Corrispondenze:";
+ }
+
};
#endif
diff --git a/src/util.cpp b/src/util.cpp
index c6ac2f0..3cd0c80 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -405,6 +405,7 @@ int guessSection(const char *name)
return 0;
}
+// TODO: remove this!
QCString resolveTypeDef(Definition *context,const QCString &qualifiedName,
Definition **typedefContext)
{
@@ -543,195 +544,6 @@ NamespaceDef *getResolvedNamespace(const char *name)
}
}
-//static QDict<Definition> g_resolvedScopes;
-//
-///*
-// * find the fully qualified class name refered to by the input class
-// * or typedef name against the input scope.
-// * loops through scope and each of its parent scopes looking for a
-// * match against the input name. Also recursively calls itself to check
-// * against any imported namespaces in each scope being checked.
-// */
-//ClassDef *getResolvedClassRecursive(
-// Definition *scope,
-// const char *n,
-// bool *pIsTypeDef,
-// QCString *pTemplSpec
-// )
-//{
-// QCString name = n;
-// // bail out if there is no name
-// if (name.isEmpty()) return 0;
-// // use the global scope if no scope was passed
-// if (scope==0) scope=Doxygen::globalScope;
-// ClassDef *cd=0;
-//
-// //printf("===================\n");
-// Definition *typedefScope = 0;
-// //printf("-----------------------------------------------------\n");
-// QCString subst = resolveTypeDef(scope,name,&typedefScope);
-// //printf("trying getResolvedClass(%s,%s) => subst=%s\n",
-// // scope ? scope->name().data() : "<none>", name.data(),subst.data());
-//
-// if (!subst.isEmpty())
-// {
-// //printf(" typedef value=%s typedefScope=%s\n",subst.data(),
-// // typedefScope?typedefScope->qualifiedName().data():0);
-//
-// // strip * and & from n
-// int ip=subst.length()-1;
-// while (ip>=0 && (subst.at(ip)=='*' || subst.at(ip)=='&' ||
-// subst.at(ip)==' ')) ip--;
-// subst=subst.left(ip+1);
-//
-// if (pIsTypeDef) *pIsTypeDef=TRUE;
-// if (subst==name) // avoid resolving "typedef struct foo foo";
-// {
-// cd = Doxygen::classSDict.find(name);
-// if (cd) goto found;
-// }
-// else
-// {
-// int count=0; // recursion detection guard
-// QCString newSubst;
-// QCString typeName = subst;
-// //printf( "---> subst=%s\n",subst.data());
-//
-// while (!(newSubst=resolveTypeDef(typedefScope,typeName)).isEmpty()
-// && count<10)
-// {
-// //printf( "---> newSubst=%s\n",newSubst.data());
-// if (typeName==newSubst)
-// {
-// cd = Doxygen::classSDict.find(subst); // for breaking typedef struct A A;
-// //printf(" getClass: exit `%s' %p\n",subst.data(),cd);
-// if (cd) goto found;
-// break;
-// }
-// subst=newSubst;
-// // strip * and & from n
-// int ip=subst.length()-1;
-// while (ip>=0 && subst.at(ip)=='*' || subst.at(ip)=='&' || subst.at(ip)==' ') ip--;
-// subst=subst.left(ip+1);
-// //printf(" getResolvedClass `%s'->`%s'\n",name.data(),subst.data());
-//
-// typeName=newSubst;
-// //if (index!=-1) typeName.prepend(name.left(index)+"::");
-// count++;
-// }
-// if (count==10)
-// {
-// warn_cont("Warning: possible recursive typedef dependency detected for %s!\n",n);
-// cd = Doxygen::classSDict.find(name);
-// if (cd) goto found;
-// }
-// else
-// {
-// int i;
-// if (typedefScope)
-// {
-// cd = Doxygen::classSDict.find(typedefScope->qualifiedName()+"::"+typeName);
-// }
-// if (cd==0)
-// {
-// cd = Doxygen::classSDict.find(typeName);
-// }
-// //printf(" getClass: subst %s->%s cd=%p\n",name.data(),typeName.data(),cd);
-// if (cd==0 && (i=typeName.find('<'))>0) // try unspecialized version as well
-// {
-// if (pTemplSpec) *pTemplSpec = typeName.right(typeName.length()-i);
-// cd = Doxygen::classSDict.find(typeName.left(i));
-// }
-// //if (cd) goto found;
-// }
-// }
-// // whether we found something or not, we stop searching to prevent
-// // finding false positives.
-// goto found;
-// }
-// else // not a typedef
-// {
-// do
-// {
-// //printf(" %s is not a typedef value in scope %s\n",name.data(),scope?scope->name().data():"<global>");
-// if (pIsTypeDef) *pIsTypeDef=FALSE;
-// if (scope!=Doxygen::globalScope)
-// {
-// cd = Doxygen::classSDict.find(scope->name()+"::"+name);
-// }
-// else
-// {
-// cd = Doxygen::classSDict.find(name);
-// }
-// if (cd==0)
-// {
-// if (scope->definitionType()==Definition::TypeNamespace)
-// {
-// NamespaceDef *nscope = (NamespaceDef*)scope;
-// ClassSDict *cl = nscope->getUsedClasses();
-// if (cl) // see if the class was imported via a using statement
-// {
-// ClassSDict::Iterator cli(*cl);
-// ClassDef *ucd;
-// for (cli.toFirst();(ucd=cli.current());++cli)
-// {
-// //printf("comparing %s<->%s\n",ucd->name().data(),name.data());
-// if (rightScopeMatch(ucd->name(),name))
-// {
-// cd=ucd;
-// break;
-// }
-// }
-// }
-// NamespaceSDict *nl = nscope->getUsedNamespaces();
-// if (nl) // check used namespaces for the class
-// {
-// NamespaceSDict::Iterator nli(*nl);
-// NamespaceDef *und;
-// for (nli.toFirst();(und=nli.current());++nli)
-// {
-// if (g_resolvedScopes.find(und->name())==0)
-// {
-// g_resolvedScopes.insert(und->name(),und);
-// cd = getResolvedClassRecursive(und,name,pIsTypeDef,pTemplSpec);
-// g_resolvedScopes.remove(und->name());
-// if (cd) break;
-// }
-// }
-// }
-// }
-// }
-// if (cd) goto found;
-//
-// if (scope==Doxygen::globalScope) scope=0;
-// else if (scope) scope=scope->getOuterScope();
-// //fprintf(stderr,"scope=%p\n",scope);
-// } while (scope);
-// }
-//
-//found:
-// //printf("getResolvedClass()=%s\n",cd?cd->name().data():"<none>");
-// return cd;
-//}
-//
-//
-//ClassDef *getOldResolvedClass(
-// Definition *scope,
-// const char *n,
-// bool *pIsTypeDef,
-// QCString *pTemplSpec
-// )
-//{
-// g_resolvedScopes.clear();
-// return getResolvedClassRecursive(scope,n,pIsTypeDef,pTemplSpec);
-//}
-//
-
-//-------------------------------------------------------------------------
-//-------------------------------------------------------------------------
-//-------------------------------------------------------------------------
-//-------------------------------------------------------------------------
-
static QDict<MemberDef> g_resolvedTypedefs;
// forward declaration
@@ -744,7 +556,8 @@ ClassDef *getResolvedClassRec(Definition *scope,
int isAccessibleFrom(Definition *scope,FileDef *fileScope,Definition *item,
const QCString &explicitScopePart);
-/*! Returns the class representing the value of the typedef represented by md.
+/*! Returns the class representing the value of the typedef represented by \a md
+ * within file \a fileScope.
*
* Example: typedef A T; will return the class representing A if it is a class.
*
@@ -865,7 +678,10 @@ static Definition *followPath(Definition *start,FileDef *fileScope,const QCStrin
return current; // path could be followed
}
-bool accessibleViaUsingClass(const ClassSDict *cl,FileDef *fileScope,Definition *item,const QCString &explicitScopePart="")
+bool accessibleViaUsingClass(const ClassSDict *cl,
+ FileDef *fileScope,
+ Definition *item,
+ const QCString &explicitScopePart="")
{
if (cl) // see if the class was imported via a using statement
{
@@ -893,7 +709,10 @@ bool accessibleViaUsingClass(const ClassSDict *cl,FileDef *fileScope,Definition
return FALSE;
}
-bool accessibleViaUsingNamespace(const NamespaceSDict *nl,FileDef *fileScope,Definition *item,const QCString &explicitScopePart="")
+bool accessibleViaUsingNamespace(const NamespaceSDict *nl,
+ FileDef *fileScope,
+ Definition *item,
+ const QCString &explicitScopePart="")
{
if (nl) // check used namespaces for the class
{
@@ -1211,7 +1030,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
result+=' ';
result+=s.at(i);
}
- else if (c=='t' && csp==5) // prevent const ::A from being converted to const::A
+ else if (c=='t' && csp==5 && !isId(s.at(i+1))) // prevent const ::A from being converted to const::A
{
result+="t ";
csp=0;