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
(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.
......@@ -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)
1.3.3-20030904
1.3.3-20030909
......@@ -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
......
......@@ -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}
......
......@@ -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>.
......
......@@ -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
......
......@@ -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
......
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
......
......@@ -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 */
......
......@@ -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
{
......
......@@ -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);
......
......@@ -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); }
......
......@@ -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
......@@ -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("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 @@
*
* 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
......@@ -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;
......
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