Commit d5150cf4 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.8-20010617

parent df80e278
DOXYGEN Version 1.2.8.1
DOXYGEN Version 1.2.8-20010617
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (10 June 2001)
Dimitri van Heesch (17 June 2001)
......@@ -6,7 +6,7 @@ Just follow these steps:
is already working on support for that language, you will be
assigned as the maintainer for the language. I'll create a
list on Doxygen's homepage, so everyone knows who is doing what.
2) Create a copy of translator_nl.h and name it
2) Create a copy of translator_en.h and name it
translator_<your_2_letter_counter_code>.h
I'll use xx in the rest of this document.
3) Edit language.cpp:
......@@ -19,31 +19,31 @@ Just follow these steps:
}
after the if { ... }
4) Edit doxygen.pro and add translator_xx.h to the HEADERS line in the
file doxygen.pro.
4) Edit libdoxygen.pro.in and add translator_xx.h to the HEADERS line.
5) Edit translator_xx.h:
- Rename TRANSLATOR_NL_H to TRANSLATOR_XX_H twice.
- Rename TranslatorDutch to TranslatorYourlanguage
- In the member latexBabelPackage() change "dutch" into the name of the
- Rename TRANSLATOR_EN_H to TRANSLATOR_XX_H twice.
- Rename TranslatorEnglish to TranslatorYourlanguage
- In the member latexBabelPackage() change "english" into the name of the
latex package that adds support for your language.
- In the member idLanguage() change "english" into the name of your
language (use lower case characters only). Depending on the language you
may also wish to change the member functions latexLanguageSupportCommand()
and idLanguageCharset().
- Edit all the strings that are returned by the members that start
with tr.
Look at the corresponding member in translator.h for the english text
that is returned and translate that into your language.
Try to match punctuation and capitals!
with tr. Try to match punctuation and capitals!
To enter special characters (with accents) you can:
a) Enter them directly if your keyboard supports that and you are
using a Latin-1 font.
Doxygen will translate the characters to proper Latex and
leave the Html and man output for what it is.
b) Use html codes like &auml; for an a with an umlaut.
leave the Html and man output for what it is (which is fine, if
idLanguageCharset() is set correctly).
b) Use html codes like &auml; for an a with an umlaut (i.e. ä).
See the HTML specification for the codes.
6) Recompile everything (do this from the root of the distribution,
because the Makefile.dox* have to be regenerated!)
6) Run configure and make again from the root of the distribution,
in order to regenerate the Makefiles.
7) Now you can use OUTPUT_LANGUAGE = your_language_name
in the config file to generate output in your language.
8) Send translator_xx.h or a diff -u of the changes to me so I can add it
to doxygen.
8) Send translator_xx.h to me so I can add it to doxygen.
Good luck, and let me know if there are problems.
......@@ -45,7 +45,7 @@ distclean: clean
-rm -f addon/xmlgen/*.o
install: doxywizard_install
install: doxywizard_install xmlgen_install
$(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin
......
DOXYGEN Version 1.2.8.1
DOXYGEN Version 1.2.8_20010617
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) (10 June 2001)
Dimitri van Heesch (dimitri@stack.nl) (17 June 2001)
1.2.8.1
1.2.8-20010617
......@@ -10,3 +10,7 @@ tmake:
Makefile.xmlgen: xmlgen.pro
$(ENV) $(PERL) $(TMAKE) xmlgen.pro >Makefile.xmlgen
install:
$(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -m 755 ../../bin/doxygen_xml $(INSTALL)/bin
......@@ -24,7 +24,7 @@ f_dot=NO
f_perl=NO
f_plf_auto=NO
f_prefix=/usr
f_insttool=ginstall
f_insttool=NO
f_english=NO
f_wizard=NO
f_xmlgen=NO
......@@ -116,7 +116,7 @@ Options:
[default: /usr]
--install name Use \`name' as the name of the GNU install tool
[default: install]
[default: autodetect]
--english-only Include support for English only.
......@@ -265,6 +265,40 @@ if test "$f_make" = NO; then
fi
echo "using $f_make"
# - check for install ------------------------------------------------------------
echo -n " Checking for GNU install tool... "
if test "$f_insttool" = NO; then
install_names="ginstall install"
install_dirs="/usr/bin /usr/local/bin /bin /sbin $bin_dirs"
install_prog=NO
install_found=NO
for i in $install_names; do
for j in $install_dirs; do
if test -x "$j/$i"; then
install_found=YES
if $j/$i --version 2>/dev/null | grep GNU >/dev/null; then
install_prog="$j/$i"
break 2
fi
fi
done
done
f_insttool="$install_prog"
fi
if test "$f_insttool" = NO; then
if test "$install_found" = YES; then
echo "GNU version of install is required!"
else
echo "not found!";
fi
echo
exit 2
fi
echo "using $f_insttool";
# - check for dot ------------------------------------------------------------
echo -n " Checking for dot (part of GraphViz)... "
......@@ -401,6 +435,12 @@ EOF
if test $f_wizard = YES; then
echo " \$(MAKE) -C addon/doxywizard install" >> $DST
fi
echo "" >> $DST
echo "xmlgen_install:" >> $DST
if test $f_xmlgen = YES; then
echo " \$(MAKE) -C addon/xmlgen install" >> $DST
fi
echo "" >> $DST
fi
cat $SRC >> $DST
echo " Created $DST from $SRC..."
......
......@@ -129,7 +129,7 @@ Compilation is now done by performing the following steps:
To let doxygen generate the HTML documentation.
\note you will need the stream editor <code>sed</code> for this,
\note You will need the stream editor <code>sed</code> for this,
but this should be available on any Unix platform.
The HTML directory of the distribution will now contain the html
......@@ -137,7 +137,7 @@ Compilation is now done by performing the following steps:
<code>index.html</code> in the
html directory).
<li>Optional: Generate a postscript and pdf version of the manual.
<li>Optional: Generate a PostScript and PDF version of the manual
(you will need <code>latex</code> and <code>dvips</code> and
the ghostscript package for this).
......@@ -153,21 +153,23 @@ Compilation is now done by performing the following steps:
\subsection install_bin_unix Installating the binaries on Unix
If you downloaded the binary distribution for Unix, you can install
doxygen by typing:
After the compilation of the source code do a <code>make install</code>
to install doxygen. If you downloaded the binary distribution for Unix,
type:
\verbatim
./configure
make install
\endverbatim
Binaries are installed in the directory <code>\<prefix\>/bin</code>,
documentation and examples in the directory
<code>\<prefix\>/share/doc/packages/doxygen</code> (use
<code>make install DOCDIR=\<path\></code> to change this).
Binaries are installed into the directory <code>\<prefix\>/bin</code>.
Use <code>make install_docs DOCDIR=\<path\></code> to install the
documentation and examples into the <code>\<path\></code> directory.
<code>\<prefix\></code> defaults to /usr but can be changed with
the <code>--prefix</code> option of the configure script.
The default <code>DOCDIR</code> directory is
<code>\<prefix\>/share/doc/packages/doxygen</code>
Alternatively, you can also copy the binaries from the <code>bin</code>
directory manually to some <code>bin</code> directory in your search path.
......@@ -402,7 +404,7 @@ Here is what is required:
<code>latex</code>, <code>dvips</code> and <code>gswin32</code>.
To get these working under Windows
install the fpTeX distribution. You can download it at:
ftp://ctan.tug.org/tex-archive/systems/win32/web2c/fptex-0.3/
http://www.ese-metz.fr/~popineau/fptex/wwwfptex.html
Make sure the tools are available from a dos box, by adding the
directory they are in to the search path.
......
......@@ -101,8 +101,8 @@ when the translator was updated.
</TR>
<TR BGCOLOR="#ffffff">
<TD>French</TD>
<TD>Christophe Bordeux</TD>
<TD>bordeux@NOSPAM.lig.di.epfl.ch</TD>
<TD>Xavier Outhier</TD>
<TD>xavier.outhier@NOSPAM.anfdata.cz</TD>
<TD>1.2.0</TD>
</TR>
<TR BGCOLOR="#ffffff">
......@@ -217,7 +217,7 @@ when the translator was updated.
\hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & 1.0.0 \\
\hline
French & Christophe Bordeux & {\tt bordeux@lig.di.epfl.ch} & 1.2.0 \\
French & Xavier Outhier & {\tt xavier.outhier@anfdata.cz} & 1.2.0 \\
\hline
German & Jens Seidel & {\tt jensseidel@users.sourceforge.net} & up-to-date \\
& Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} & \\
......
......@@ -27,7 +27,7 @@ Finnish
Olli Korhonen: Olli.Korhonen@ccc.fi
French
Christophe Bordeux: bordeux@lig.di.epfl.ch
Xavier Outhier: xavier.outhier@anfdata.cz
German
Jens Seidel: jensseidel@users.sourceforge.net
......
Name: doxygen
Version: 1.2.8.1
Version: 1.2.8_20010617
Summary: documentation system for C, C++ and IDL
Release: 3
Source: doxygen-%{version}.src.tar.gz
......
......@@ -183,7 +183,8 @@ void ClassDef::insertMember(MemberDef *md)
/********************************************/
/* insert member in the declaration section */
/********************************************/
if (md->isRelated() && (Config_getBool("EXTRACT_PRIVATE") || md->protection()!=Private))
if (md->isRelated() &&
(Config_getBool("EXTRACT_PRIVATE") || md->protection()!=Private))
{
related.append(md);
md->setSectionList(&related);
......
......@@ -898,6 +898,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
%x DocLink
%x DocJavaLink
%x DocLinkText
%x DocJavaLinkText
%x DocSkipWord
%x DocInclude
%x DocDontInclude
......@@ -1056,19 +1057,21 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
BEGIN( DocLinkText );
}
<DocJavaLink>([a-z_A-Z0-9]+".")+ { /* Skip scope prefix (TODO: fix) */ }
<DocJavaLink>([a-z_A-Z0-9]+"#")?[a-z_A-Z0-9]+("("[a-z_A-Z0-9.,~&*()\[\]]*")")? { // TODO: support operators as well!
<DocJavaLink>([a-z_A-Z0-9]*"#")?[a-z_A-Z0-9]+("("[a-z_A-Z0-9.,:~&*()\[\]]*")")? { // TODO: support operators as well!
linkRef = yytext;
linkText = "";
BEGIN( DocJavaLinkText );
}
<DocJavaLink>"}" {
<DocJavaLinkText>"}" {
//printf("Trying to link `%s'\n",linkRef.data());
if (!generateLink(*outDoc,className,linkRef,inSeeBlock,0))
if (!generateLink(*outDoc,className,linkRef,inSeeBlock,linkText.stripWhiteSpace()))
{
warn(yyFileName,yyLineNr,"Warning: link to unknown entity `%s' in the documentation of this entity!",linkRef.data());
}
BEGIN( DocScan );
}
<DocLinkText>. { linkText += *yytext; }
<DocLinkText>"\n" { linkText += " "; }
<DocJavaLinkText,DocLinkText>. { linkText += *yytext; }
<DocJavaLinkText,DocLinkText>"\n" { linkText += " "; }
<DocLink,DocLinkText>{CMD}"endlink" { // <- needed for things like \endlink.
//printf("GenerateLink className=`%s' linkRef=`%s' linkText=`%s'\n",
// className.data(),linkRef.data(),linkText.data());
......
......@@ -772,18 +772,6 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
// bClass->name().data());
if ((bn=m_usedNodes->find(bClass->name()))) // node already present
{
//printf("Base node `%s'\n",bn->m_label.data());
//if (n->m_children)
//{
// QListIterator<DotNode> dnli(*n->m_children);
// DotNode *cn;
// for (dnli.toFirst();(cn=dnli.current());++dnli)
// {
// printf("Child node `%s'\n",cn->m_label.data());
// }
// printf("ref node = %p\n",n->m_children->findRef(bn));
//}
if (n->m_children==0 || n->m_children->findRef(bn)==-1) // no arrow yet
{
n->addChild(bn,bcd->prot);
......@@ -847,7 +835,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
//printf("Trying %s subClasses=%d\n",cd->name().data(),cd->subClasses()->count());
if (!hasVisibleRoot(cd->baseClasses()))
{
if (cd->isVisibleInHierarchy()) // root class in the graph
if (cd->isVisibleInHierarchy()) // root node in the forest
{
QCString tmp_url="";
if (cd->isLinkable())
......@@ -1075,8 +1063,13 @@ DotClassGraph::DotClassGraph(ClassDef *cd,GraphType t,int maxRecursionDepth)
m_recDepth = maxRecursionDepth;
QCString tmp_url="";
if (cd->isLinkable()) tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
QCString className = cd->displayName();
if (cd->templateArguments())
{
className+=tempArgListToString(cd->templateArguments());
}
m_startNode = new DotNode(m_curNodeNumber++,
cd->displayName(),
className,
tmp_url.data(),
0, // distance
TRUE // is a root node
......@@ -1250,7 +1243,7 @@ QCString DotClassGraph::diskName() const
return result;
}
void DotClassGraph::writeGraph(QTextStream &out,
QCString DotClassGraph::writeGraph(QTextStream &out,
GraphOutputFormat format,
const char *path,
bool isTBRank,
......@@ -1295,7 +1288,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
{
err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
if (generateImageMap)
{
......@@ -1305,7 +1298,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
{
err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
<< m_startNode->m_label << "_" << mapName << "\" alt=\"";
......@@ -1336,14 +1329,14 @@ void DotClassGraph::writeGraph(QTextStream &out,
{
err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
if (Config_getBool("USE_PDFLATEX"))
{
......@@ -1354,7 +1347,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
}
int maxWidth = 420; /* approx. page width in points */
......@@ -1370,6 +1363,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
QDir::setCurrent(oldDir);
return baseName;
}
//--------------------------------------------------------------------
......@@ -1461,7 +1455,7 @@ QCString DotInclDepGraph::diskName() const
return convertNameToFile(result);
}
void DotInclDepGraph::writeGraph(QTextStream &out,
QCString DotInclDepGraph::writeGraph(QTextStream &out,
GraphOutputFormat format,
const char *path,
bool generateImageMap
......@@ -1498,7 +1492,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
if (generateImageMap)
......@@ -1510,7 +1504,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
......@@ -1534,14 +1528,14 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
if (Config_getBool("USE_PDFLATEX"))
{
......@@ -1552,7 +1546,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
return;
return baseName;
}
}
int maxWidth = 420; /* approx. page width in points */
......@@ -1571,6 +1565,7 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
QDir::setCurrent(oldDir);
return baseName;
}
bool DotInclDepGraph::isTrivial() const
......
......@@ -119,7 +119,7 @@ class DotClassGraph
DotClassGraph(ClassDef *cd,GraphType t,int maxRecusionDepth=1000);
~DotClassGraph();
bool isTrivial() const;
void writeGraph(QTextStream &t,GraphOutputFormat f,const char *path,
QCString writeGraph(QTextStream &t,GraphOutputFormat f,const char *path,
bool TBRank=TRUE,bool imageMap=TRUE);
QCString diskName() const;
......@@ -142,7 +142,7 @@ class DotInclDepGraph
public:
DotInclDepGraph(FileDef *fd,bool inverse=FALSE);
~DotInclDepGraph();
void writeGraph(QTextStream &t, GraphOutputFormat f,const char *path,
QCString writeGraph(QTextStream &t, GraphOutputFormat f,const char *path,
bool writeImageMap=TRUE);
bool isTrivial() const;
QCString diskName() const;
......
......@@ -3396,7 +3396,9 @@ static void findMember(Entry *root,
scopeName=related.copy();
}
if (related.isEmpty() && root->parent && !root->parent->name.isEmpty())
if (related.isEmpty() && root->parent &&
(root->parent->section&Entry::SCOPE_MASK) &&
!root->parent->name.isEmpty())
{
scopeName = mergeScopes(root->parent->name,scopeName);
}
......@@ -3982,6 +3984,7 @@ static void findMember(Entry *root,
cd->insertMember(md);
cd->insertUsedFile(root->fileName);
md->setRefItems(root->todoId,root->testId,root->bugId);
addMemberToGroups(root,md);
if (newMemberName)
{
//printf("Adding memberName=%s\n",mn->memberName());
......@@ -5986,7 +5989,7 @@ static const char *getArg(int argc,char **argv,int &optind)
char *s=0;
if (strlen(&argv[optind][2])>0)
s=&argv[optind][2];
else if (optind+1<argc)
else if (optind+1<argc && argv[optind+1][0]!='-')
s=argv[++optind];
return s;
}
......
......@@ -121,50 +121,42 @@ struct TagInfo
QCString anchor;
};
struct Grouping {
typedef enum {
GROUPING_LOWEST,
GROUPING_AUTO_WEAK =
GROUPING_LOWEST, //!< membership in group was defined via @weakgroup @{ @}
GROUPING_AUTO_ADD, //!< membership in group was defined via @add[to]group @{ @}
GROUPING_AUTO_DEF, //!< membership in group was defined via @defgroup @{ @}
GROUPING_AUTO_HIGHEST =
GROUPING_AUTO_DEF,
GROUPING_INGROUP, //!< membership in group was defined by @ingroup
GROUPING_HIGHEST =
GROUPING_INGROUP
} GroupPri_t;
struct Grouping
{
enum GroupPri_t
{
GROUPING_LOWEST,
GROUPING_AUTO_WEAK =
GROUPING_LOWEST, //!< membership in group was defined via @weakgroup @{ @}
GROUPING_AUTO_ADD, //!< membership in group was defined via @add[to]group @{ @}
GROUPING_AUTO_DEF, //!< membership in group was defined via @defgroup @{ @}
GROUPING_AUTO_HIGHEST =
GROUPING_AUTO_DEF,
GROUPING_INGROUP, //!< membership in group was defined by @ingroup
GROUPING_HIGHEST =
GROUPING_INGROUP
};
static const char *getGroupPriName( GroupPri_t priority )
static const char *getGroupPriName( GroupPri_t priority )
{
switch( priority )
{
switch( priority )
{
case GROUPING_AUTO_WEAK:
return "@weakgroup";
break;
case GROUPING_AUTO_ADD:
return "@addtogroup";
break;
case GROUPING_AUTO_DEF:
return "@defgroup";
break;
case GROUPING_INGROUP:
return "@ingroup";
break;
default:
return "???";
break;
}
}
case GROUPING_AUTO_WEAK:
return "@weakgroup";
case GROUPING_AUTO_ADD:
return "@addtogroup";
case GROUPING_AUTO_DEF:
return "@defgroup";
case GROUPING_INGROUP:
return "@ingroup";
}
return "???";
}
Grouping( const char *gn, GroupPri_t p ) :
groupname(gn),
pri(p) {}
Grouping( const Grouping &g ) :
groupname(g.groupname),
pri(g.pri) {}
QCString groupname; //!< name of the group
GroupPri_t pri; //!< priority of this definition
Grouping( const char *gn, GroupPri_t p ) : groupname(gn), pri(p) {}
Grouping( const Grouping &g ) : groupname(g.groupname), pri(g.pri) {}
QCString groupname; //!< name of the group
GroupPri_t pri; //!< priority of this definition
};
......
......@@ -168,7 +168,7 @@ void GroupDef::addMembersToMemberGroup()
void GroupDef::insertMember(MemberDef *md,bool docOnly)
{
// fprintf(stderr, "GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
//fprintf(stderr, "GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
MemberNameInfo *mni=0;
if ((mni=(*allMemberNameInfoDict)[md->name()]))
{ // member with this name already found
......@@ -177,7 +177,8 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
for ( ; (srcMi=srcMnii.current()) ; ++srcMnii )
{
MemberDef *srcMd = srcMi->memberDef;
if (matchArguments(srcMd->argumentList(),md->argumentList()))
if (matchArguments(srcMd->argumentList(),md->argumentList()) &&
srcMd->getOuterScope()==md->getOuterScope())
{
return; // member already added
}
......
......@@ -110,7 +110,7 @@ class LatexGenerator : public OutputGenerator
void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ }
void writeAnchor(const char *fileName,const char *name);
void startCodeFragment() { t << "\\footnotesize\\begin{verbatim}"; }
void startCodeFragment() { t << endl << endl << "\\footnotesize\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; }
void startPreFragment() { t << "\\small\\begin{alltt}";
insidePre=TRUE;
......
......@@ -366,7 +366,7 @@ void ManGenerator::startMemberDoc(const char *,const char *,const char *,const c
}
void ManGenerator::startDoxyAnchor(const char *,const char *manName,
const char *, const char *)
const char *, const char *name)
{
// something to be done?
if( !Config_getBool("MAN_LINKS") )
......@@ -374,9 +374,16 @@ void ManGenerator::startDoxyAnchor(const char *,const char *manName,
return; // no
}
// only create file when it doesn't exist
QCString fileName=dir+"/"+buildFileName( manName );
// the name of the link file is derived from the name of the anchor:
// - truncate after an (optional) ::
QCString baseName = name;
int i=baseName.findRev(':');
if (i!=-1) baseName=baseName.right(baseName.length()-i-1);
// - remove dangerous characters and append suffix, then add dir prefix
QCString fileName=dir+"/"+buildFileName( baseName );
QFile linkfile( fileName );
// - only create file if it doesn't exist already
if ( !linkfile.open( IO_ReadOnly ) )
{
if ( linkfile.open( IO_WriteOnly ) )
......
......@@ -518,8 +518,10 @@ bool MemberDef::isBriefSectionVisible() const
Config_getBool("EXTRACT_PRIVATE")
);
return visibleIfStatic && visibleIfDocumented &&
visibleIfEnabled && visibleIfPrivate && !annScope;
bool visible = visibleIfStatic && visibleIfDocumented &&
visibleIfEnabled && visibleIfPrivate && !annScope;
//printf("MemberDef::isBriefSectionVisible() %d\n",visible);
return visible;
}
void MemberDef::writeDeclaration(OutputList &ol,
......@@ -837,19 +839,27 @@ bool MemberDef::isDetailedSectionLinkable() const
// this is not a global static or global statics should be extracted
bool staticFilter = getClassDef()!=0 || !isStatic() || Config_getBool("EXTRACT_STATIC");
// only include members that are non-private unless EXTRACT_PRIVATE is
// set to YES or the member is part of a group
bool privateFilter = (protection()!=Private ||
Config_getBool("EXTRACT_PRIVATE")
);
// member is part of an anonymous scope that is the type of
// another member in the list.
//
bool inAnonymousScope = !briefDescription().isEmpty() && annUsed;
return ((docFilter && staticFilter) || inAnonymousScope);
return ((docFilter && staticFilter && privateFilter) || inAnonymousScope);
}
bool MemberDef::isDetailedSectionVisible(bool inGroup) const
{
bool groupFilter = getGroupDef()==0 || inGroup;
return isDetailedSectionLinkable() && groupFilter;
bool visible = isDetailedSectionLinkable() && groupFilter;
//printf("MemberDef::isDetailedSectionVisible() %d\n",visible);
return visible;
}
/*! Writes the "detailed documentation" section of this member to
......@@ -969,9 +979,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ArgumentList *membAl=memberDefTemplateArguments();
if (membAl==0) membAl=templateArguments();
//if (cd && (!isRelated() || templateArguments()!=0) &&
// ((al=scopeDefTemplateArguments()) || (al=cd->templateArguments()))
// )
if (!Config_getBool("HIDE_SCOPE_NAMES"))
{
if (scopeAl && !related) // class template prefix
......@@ -1413,7 +1420,7 @@ bool MemberDef::isLinkableInProject()
return !name().isEmpty() && name().at(0)!='@' &&
((hasDocumentation() && !isReference())
) &&
(prot!=Private || Config_getBool("EXTRACT_PRIVATE") || isFriend()) && // not a private class member
(prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && // not a private class member
(classDef!=0 || Config_getBool("EXTRACT_STATIC") || !isStatic()); // not a static file/namespace member
}
......@@ -1496,3 +1503,15 @@ void MemberDef::setEnumScope(MemberDef *md)
}
}
void MemberDef::setMemberClass(ClassDef *cd)
{
classDef=cd;
setOuterScope(cd);
}
void MemberDef::setNamespace(NamespaceDef *nd)
{
nspace=nd;
setOuterScope(nd);
}
......@@ -142,7 +142,7 @@ class MemberDef : public Definition
}
void setBitfields(const char *s) { bitfields = s; }
void setMaxInitLines(int lines) { userInitLines=lines; }
void setMemberClass(ClassDef *cd) { classDef=cd; }
void setMemberClass(ClassDef *cd);
void setSectionList(MemberList *sl) { section=sl; }
void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
void setExplicitExternal(bool b) { explExt=b; }
......@@ -202,7 +202,7 @@ class MemberDef : public Definition
ArgumentList *memberDefTemplateArguments() const { return membTAL; }
// namespace related members
void setNamespace(NamespaceDef *nd) { nspace=nd; }
void setNamespace(NamespaceDef *nd);
// member group related members
void setMemberGroup(MemberGroup *grp);
......
......@@ -50,7 +50,7 @@ int MemberList::compareItems(GCI item1, GCI item2)
/*! Count the number of members in this list that are visible in
* the declaration part of a compound's documentation page.
*/
void MemberList::countDecMembers(/*bool inGroup,bool countSubGroups,bool sectionPerType*/)
void MemberList::countDecMembers()
{
if (m_numDecMembers!=-1) return;
......@@ -85,7 +85,8 @@ void MemberList::countDecMembers(/*bool inGroup,bool countSubGroups,bool section
md->hasDocumentation()
) m_defCnt++,m_numDecMembers++;
break;
case MemberDef::Friend: m_friendCnt++,m_numDecMembers++; break;
case MemberDef::Friend: m_friendCnt++,m_numDecMembers++;
break;
default:
err("Error: Unknown member type found for member `%s'\n!",md->name().data());
}
......@@ -347,14 +348,17 @@ void MemberList::writePlainDeclarations(OutputList &ol,
}
case MemberDef::Friend:
{
#if 0
//printf("Writing friend `%s'\n",md->name().data());
QCString type=md->typeString();
//printf("Friend: type=%s name=%s\n",type.data(),md->name().data());
bool isFriendClass = type=="friend class";
if (!isFriendClass)
{
#endif
if (first) ol.startMemberList(),first=FALSE;
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
#if 0
}
else // isFriendClass
// friend is undocumented as a member but it is a class,
......@@ -391,6 +395,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
ol.endMemberItem(FALSE);
}
}
#endif
break;
}
case MemberDef::EnumValue:
......@@ -441,10 +446,7 @@ void MemberList::writeDeclarations(OutputList &ol,
{
//printf("subtitle=`%s'\n",subtitle);
ol.startMemberSubtitle();
if (m_inGroup)
parseDoc(ol,"<generated>",1,0,0,subtitle);
else
parseText(ol,subtitle);
parseDoc(ol,"<generated>",1,0,0,subtitle);
ol.endMemberSubtitle();
}
......
......@@ -31,7 +31,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,
const char *name,const char *lref) :
Definition(df,dl,name)
{
fileName=(QCString)"namespace_"+name;
fileName=(QCString)"namespace"+name;
classSDict = new ClassSDict(257);
namespaceSDict = new NamespaceSDict(257);
m_innerCompounds = new SDict<Definition>(257);
......
......@@ -1372,9 +1372,9 @@ void RTFGenerator::writeStyleInfo(int)
void RTFGenerator::lineBreak()
{
//t << "\\par" << endl;
t << "\\par" << endl;
//newParagraph();
t << "\\line" << endl;
//t << "\\line" << endl;
}
void RTFGenerator::writeString(const char *text)
......@@ -2541,13 +2541,14 @@ void RTFGenerator::endDotGraph(DotClassGraph &g)
{
newParagraph();
g.writeGraph(t,GIF,Config_getString("RTF_OUTPUT"),TRUE,FALSE);
QCString fileName =
g.writeGraph(t,GIF,Config_getString("RTF_OUTPUT"),TRUE,FALSE);
// display the file
t << "{" << endl;
t << Rtf_Style_Reset << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << g.diskName() << ".gif";
t << fileName << ".gif";
t << " \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
t << "}" << endl;
}
......@@ -2560,15 +2561,13 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
{
newParagraph();
g.writeGraph(t,GIF,Config_getString("RTF_OUTPUT"),FALSE);
//QCString diskName = g.diskName();
QCString fileName = g.writeGraph(t,GIF,Config_getString("RTF_OUTPUT"),FALSE);
// display the file
t << "{" << endl;
t << Rtf_Style_Reset << endl;
t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
t << g.diskName() << ".gif";
t << fileName << ".gif";
t << " \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
t << "}" << endl;
}
......
......@@ -462,7 +462,7 @@ class TranslatorCroatian : public Translator
case ClassDef::Interface: result+="suelja (interface)"; break;
case ClassDef::Exception: result+="iznimke (exception)"; break;
}
result+=" je generirana iz " + trFile(false, single) + ": ";
result+=" je generirana iz " + trFile(FALSE, single) + ": ";
return decode(result);
}
......
......@@ -172,7 +172,9 @@
" doc.write(\"<layer id='folder\" + this.id + \"' top=\" + doc.yPos + \" visibility=hidden>\") \n"
" } \n"
" if (browserVersion == 3) \n"
" doc.write(\"<div id='folder\" + this.id + \"' style='display:none;'>\") \n"
" {\n"
" doc.write(\"<div id='folder\" + this.id + \"' style='visibility:hide;'>\") \n"
" }\n"
" \n"
" doc.write(\"\\n<table \") \n"
" if (browserVersion == 1) \n"
......
......@@ -172,7 +172,9 @@ function drawFolder(leftSide)
doc.write("<layer id='folder" + this.id + "' top=" + doc.yPos + " visibility=hidden>")
}
if (browserVersion == 3)
doc.write("<div id='folder" + this.id + "' style='display:none;'>")
{
doc.write("<div id='folder" + this.id + "' style='visibility:hide;'>")
}
doc.write("\n<table ")
if (browserVersion == 1)
......
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