Commit 79ad8414 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.3-20030909

parent 12ea1b84
DOXYGEN Version 1.3.3-20030904 DOXYGEN Version 1.3.3-20030909
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 (04 September 2003) Dimitri van Heesch (09 September 2003)
DOXYGEN Version 1.3.3_20030904 DOXYGEN Version 1.3.3_20030909
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) (04 September 2003) Dimitri van Heesch (dimitri@stack.nl) (09 September 2003)
1.3.3-20030904 1.3.3-20030909
...@@ -917,8 +917,7 @@ function's detailed documentation block. ...@@ -917,8 +917,7 @@ function's detailed documentation block.
HTML files are now used as the Windows 98 help format, and will replace HTML files are now used as the Windows 98 help format, and will replace
the old Windows help format (.hlp) on all Windows platforms in the future. the old Windows help format (.hlp) on all Windows platforms in the future.
Compressed HTML files also contain an index, a table of contents, Compressed HTML files also contain an index, a table of contents,
and you can search for words in the documentation and you can search for words in the documentation.
(which basically renders \c doxysearch obsolete on Windows).
The HTML workshop also contains a viewer for compressed HTML files. The HTML workshop also contains a viewer for compressed HTML files.
\anchor cfg_chm_file \anchor cfg_chm_file
......
...@@ -62,7 +62,6 @@ Written by Dimitri van Heesch\\[2ex] ...@@ -62,7 +62,6 @@ Written by Dimitri van Heesch\\[2ex]
\input{history} \input{history}
\input{doxygen_usage} \input{doxygen_usage}
\input{doxytag_usage} \input{doxytag_usage}
\input{doxysearch_usage}
\input{doxywizard_usage} \input{doxywizard_usage}
\input{installdox_usage} \input{installdox_usage}
\input{output} \input{output}
......
...@@ -85,8 +85,8 @@ ...@@ -85,8 +85,8 @@
<h2>Version 0.3</h2> <h2>Version 0.3</h2>
<h3>Major new features:</h3> <h3>Major new features:</h3>
<ul> <ul>
<li>A search engine <a href="doxysearch_usage.html">doxysearch</a>, <li>A PHP based search engine that allows you to search through the generated
that allows you to search through the generated documentation. documentation.
<li>A configuration file instead of command-line options. A default <li>A configuration file instead of command-line options. A default
configuration file can be generated configuration file can be generated
by <a href="doxygen_usage.html">doxygen</a>. by <a href="doxygen_usage.html">doxygen</a>.
......
...@@ -125,7 +125,7 @@ Compilation is now done by performing the following steps: ...@@ -125,7 +125,7 @@ Compilation is now done by performing the following steps:
\endverbatim \endverbatim
The program should compile without problems and three binaries 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. should be available in the bin directory of the distribution.
<li>Optional: Generate the user manual. <li>Optional: Generate the user manual.
...@@ -314,7 +314,7 @@ virtual function of class QList<PageInfo> is defined] ...@@ -314,7 +314,7 @@ virtual function of class QList<PageInfo> is defined]
\endverbatim \endverbatim
These are generated because the compiler is confused about the object sharing 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: anyway do:
\verbatim \verbatim
...@@ -322,7 +322,6 @@ rm -rf objects ...@@ -322,7 +322,6 @@ rm -rf objects
mkdir objects mkdir objects
cd src cd src
gmake -f Makefile.doxytag gmake -f Makefile.doxytag
gmake -f Makefile.doxysearch
\endverbatim \endverbatim
when configuring with <code>--static</code> I got: when configuring with <code>--static</code> I got:
...@@ -457,8 +456,8 @@ Here is what is required: ...@@ -457,8 +456,8 @@ Here is what is required:
steps. steps.
<li>From Doxygen-1.2.2-20001015 onwards, the distribution includes the part <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, of Qt-2.x.y that is needed for to compile doxygen and doxytag,
and doxysearch. The Windows specific part were also created. The Windows specific part were also created.
As a result doxygen can be compiled on systems without X11 or the As a result doxygen can be compiled on systems without X11 or the
commerical version of Qt. commerical version of Qt.
...@@ -539,8 +538,8 @@ Compilation is now done by performing the following steps: ...@@ -539,8 +538,8 @@ Compilation is now done by performing the following steps:
\endverbatim \endverbatim
This should build the executables This should build the executables
<code>doxygen.exe</code>, <code>doxytag.exe</code>, and <code>doxygen.exe</code> and <code>doxytag.exe</code>
<code>doxysearch.exe</code> using Microsoft's Visual C++ compiler using Microsoft's Visual C++ compiler
(The compiler should not produce any serious warnings or errors). (The compiler should not produce any serious warnings or errors).
You can use also the <code>bcc</code> argument to build You can use also the <code>bcc</code> argument to build
......
...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means ...@@ -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 that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time. 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): are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish, Czech, Danish, Dutch, English, Finnish,
...@@ -55,7 +55,7 @@ when the translator was updated. ...@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD> <TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD> <TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD> <TD>chino@NOSPAM.icmc.sc.usp.br</TD>
<TD>1.3.3</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Catalan</TD> <TD>Catalan</TD>
...@@ -79,7 +79,7 @@ when the translator was updated. ...@@ -79,7 +79,7 @@ when the translator was updated.
<TD>Croatian</TD> <TD>Croatian</TD>
<TD>Boris Bralo</TD> <TD>Boris Bralo</TD>
<TD>boris.bralo@NOSPAM.zg.tel.hr</TD> <TD>boris.bralo@NOSPAM.zg.tel.hr</TD>
<TD>1.3.1</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Czech</TD> <TD>Czech</TD>
...@@ -236,7 +236,7 @@ when the translator was updated. ...@@ -236,7 +236,7 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\ {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline \hline
\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 \hline
Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\ Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\
\hline \hline
...@@ -246,7 +246,7 @@ when the translator was updated. ...@@ -246,7 +246,7 @@ when the translator was updated.
Chinese Traditional & Daniel YC Lin & {\tt daniel@twpda.com} & 1.3.3 \\ Chinese Traditional & Daniel YC Lin & {\tt daniel@twpda.com} & 1.3.3 \\
& Gary Lee & {\tt garylee@ecosine.com.tw} & \\ & Gary Lee & {\tt garylee@ecosine.com.tw} & \\
\hline \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 \hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\ Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
\hline \hline
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.3_20030904 Version: 1.3.3_20030909
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -243,6 +243,7 @@ static bool readCodeFragment(const char *fileName, ...@@ -243,6 +243,7 @@ static bool readCodeFragment(const char *fileName,
if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
QCString cmd=Config_getString("INPUT_FILTER")+" \""+fileName+"\""; QCString cmd=Config_getString("INPUT_FILTER")+" \""+fileName+"\"";
FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r"); FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r");
bool found=FALSE;
if (f) if (f)
{ {
int c=0; int c=0;
...@@ -257,7 +258,6 @@ static bool readCodeFragment(const char *fileName, ...@@ -257,7 +258,6 @@ static bool readCodeFragment(const char *fileName,
if (!feof(f)) if (!feof(f))
{ {
// skip until the opening bracket or lonely : is found // skip until the opening bracket or lonely : is found
bool found=FALSE;
char cn=0; char cn=0;
while (lineNr<=endLine && !feof(f) && !found) while (lineNr<=endLine && !feof(f) && !found)
{ {
...@@ -324,11 +324,11 @@ static bool readCodeFragment(const char *fileName, ...@@ -324,11 +324,11 @@ static bool readCodeFragment(const char *fileName,
result.truncate(braceIndex+1); result.truncate(braceIndex+1);
} }
endLine=lineNr-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 */ /*! Write a reference to the source code defining this definition */
......
...@@ -856,13 +856,17 @@ Definition *buildScopeFromQualifiedName(const QCString name,int level) ...@@ -856,13 +856,17 @@ Definition *buildScopeFromQualifiedName(const QCString name,int level)
QCString nsName = name.mid(idx,l); QCString nsName = name.mid(idx,l);
if (!fullScope.isEmpty()) fullScope+="::"; if (!fullScope.isEmpty()) fullScope+="::";
fullScope+=nsName; fullScope+=nsName;
//printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data()); NamespaceDef *nd=Doxygen::namespaceSDict.find(fullScope);
// introduce bogus namespace if (nd==0)
NamespaceDef *nd=new NamespaceDef( {
// introduce bogus namespace
//printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
nd=new NamespaceDef(
"<generated>",1,fullScope); "<generated>",1,fullScope);
// add namespace to the list // add namespace to the list
Doxygen::namespaceSDict.inSort(fullScope,nd); Doxygen::namespaceSDict.inSort(fullScope,nd);
}
prevScope->addInnerCompound(nd); prevScope->addInnerCompound(nd);
nd->setOuterScope(prevScope); nd->setOuterScope(prevScope);
p=idx+l+2; p=idx+l+2;
...@@ -897,13 +901,13 @@ static void resolveClassNestingRelations() ...@@ -897,13 +901,13 @@ static void resolveClassNestingRelations()
Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,cd->name()); Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,cd->name());
if (d==0) if (d==0)
{ {
//Definition *d = buildScopeFromQualifiedName(cd->name(),cd->name().contains("::")); Definition *d = buildScopeFromQualifiedName(cd->name(),cd->name().contains("::"));
//d->addInnerCompound(nd); d->addInnerCompound(cd);
//nd->setOuterScope(d); cd->setOuterScope(d);
warn(cd->getDefFileName(),cd->getDefLine(), //warn(cd->getDefFileName(),cd->getDefLine(),
"Warning: Internal inconsistency: scope for class %s not " // "Warning: Internal inconsistency: scope for class %s not "
"found!\n",cd->name().data() // "found!\n",cd->name().data()
); // );
} }
else else
{ {
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include <png.h> #include <png.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "pngenc.h" #include "pngenc.h"
#include "message.h" #include "message.h"
...@@ -133,8 +135,15 @@ void PngEncoder::write(const char *name) ...@@ -133,8 +135,15 @@ void PngEncoder::write(const char *name)
png_set_rows(png_ptr,info_ptr,rows); png_set_rows(png_ptr,info_ptr,rows);
file = fopen(name,"wb"); file = fopen(name,"wb");
png_init_io(png_ptr,file); if (file==0)
png_write_png(png_ptr,info_ptr,PNG_TRANSFORM_IDENTITY,NULL); {
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); png_destroy_write_struct(&png_ptr, &info_ptr);
......
...@@ -1061,6 +1061,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1061,6 +1061,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x Ifdef %x Ifdef
%x Ifndef %x Ifndef
%x SkipCComment %x SkipCComment
%x SkipVerbatim
%x SkipCPPComment %x SkipCPPComment
%x RemoveCComment %x RemoveCComment
%x RemoveCPPComment %x RemoveCPPComment
...@@ -1660,14 +1661,22 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1660,14 +1661,22 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar('/');outputChar('*'); outputChar('/');outputChar('*');
//g_commentCount++; //g_commentCount++;
} }
<SkipCComment>[^*\n\/]+ { <SkipCComment>[\\@]"verbatim"{BN}+ {
outputArray(yytext,yyleng); 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++; g_yyLineNr++;
outputChar('\n'); outputChar('\n');
} }
<SkipCComment>. { <SkipCComment,SkipVerbatim>. {
outputChar(*yytext); outputChar(*yytext);
} }
<RemoveCComment>"*/" { BEGIN(g_lastCContext); } <RemoveCComment>"*/" { BEGIN(g_lastCContext); }
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
* Version: 1.3 (2003/05/01) * Version: 1.3 (2003/05/01)
* *
* History: * History:
* 1.3.3:
* - Updated to Doxygen 1.3.3
* 1.3.2: * 1.3.2:
* - Updated to Doxygen 1.3.2 * - Updated to Doxygen 1.3.2
* 1.3: * 1.3:
...@@ -29,7 +31,7 @@ ...@@ -29,7 +31,7 @@
#ifndef TRANSLATOR_BR_H #ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H #define TRANSLATOR_BR_H
class TranslatorBrazilian: public TranslatorAdapter_1_3_3 class TranslatorBrazilian: public Translator
{ {
public: public:
...@@ -1466,7 +1468,7 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_3 ...@@ -1466,7 +1468,7 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_3
// new since 1.3.1 // 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. * to link to the unfiltered list of all members.
*/ */
virtual QCString trAll() virtual QCString trAll()
...@@ -1479,5 +1481,55 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_3 ...@@ -1479,5 +1481,55 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_3
return "Este é o grafo de chamadas para esta função:"; 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 #endif
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
#ifndef TRANSLATOR_HR_H #ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H #define TRANSLATOR_HR_H
class TranslatorCroatian : public TranslatorAdapter_1_3_1 class TranslatorCroatian : public Translator
{ {
private: private:
/*! to avoid macro redefinition from translator_cz.h */ /*! to avoid macro redefinition from translator_cz.h */
...@@ -1130,6 +1130,83 @@ class TranslatorCroatian : public TranslatorAdapter_1_3_1 ...@@ -1130,6 +1130,83 @@ class TranslatorCroatian : public TranslatorAdapter_1_3_1
{ {
return decode("Statiki atributi u paketu"); return decode("Statiki 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("Trai");
}
/*! 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 vaem upitu");
}
else if (numDocuments==1)
{
return decode("Naen <b>1</b> dokument koji odgovara vaem 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("Naena <b>$num</b> dokumenta koji odgovaraju vaem upitu."
"Najbolji su prikazani prvi.");
}
else
{
return decode("Naeno <b>$num</b> dokumenata koji odgovaraju vaem 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("Pronaeno:");
}
}; };
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
* *
* Revision history * 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/06: translated new items used since version 1.3.1
* 2003/04: translated new items used since version 1.3 * 2003/04: translated new items used since version 1.3
* 2002/11: translated new items used since version 1.2.18 * 2002/11: translated new items used since version 1.2.18
...@@ -1448,6 +1449,57 @@ class TranslatorItalian : public TranslatorAdapter_1_3_3 ...@@ -1448,6 +1449,57 @@ class TranslatorItalian : public TranslatorAdapter_1_3_3
return "Questo è il grafo delle chiamate per questa funzione:"; 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 #endif
...@@ -405,6 +405,7 @@ int guessSection(const char *name) ...@@ -405,6 +405,7 @@ int guessSection(const char *name)
return 0; return 0;
} }
// TODO: remove this!
QCString resolveTypeDef(Definition *context,const QCString &qualifiedName, QCString resolveTypeDef(Definition *context,const QCString &qualifiedName,
Definition **typedefContext) Definition **typedefContext)
{ {
...@@ -543,195 +544,6 @@ NamespaceDef *getResolvedNamespace(const char *name) ...@@ -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; static QDict<MemberDef> g_resolvedTypedefs;
// forward declaration // forward declaration
...@@ -744,7 +556,8 @@ ClassDef *getResolvedClassRec(Definition *scope, ...@@ -744,7 +556,8 @@ ClassDef *getResolvedClassRec(Definition *scope,
int isAccessibleFrom(Definition *scope,FileDef *fileScope,Definition *item, int isAccessibleFrom(Definition *scope,FileDef *fileScope,Definition *item,
const QCString &explicitScopePart); 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. * 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 ...@@ -865,7 +678,10 @@ static Definition *followPath(Definition *start,FileDef *fileScope,const QCStrin
return current; // path could be followed 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 if (cl) // see if the class was imported via a using statement
{ {
...@@ -893,7 +709,10 @@ bool accessibleViaUsingClass(const ClassSDict *cl,FileDef *fileScope,Definition ...@@ -893,7 +709,10 @@ bool accessibleViaUsingClass(const ClassSDict *cl,FileDef *fileScope,Definition
return FALSE; 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 if (nl) // check used namespaces for the class
{ {
...@@ -1211,7 +1030,7 @@ QCString removeRedundantWhiteSpace(const QCString &s) ...@@ -1211,7 +1030,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
result+=' '; result+=' ';
result+=s.at(i); 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 "; result+="t ";
csp=0; csp=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