Commit 26ded37d authored by dimitri's avatar dimitri

Release-1.2.1-20000829

parent 8726fc64
DOXYGEN Version 1.2.1
DOXYGEN Version 1.2.1-20000829
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (13 August 2000)
Dimitri van Heesch (29 August 2000)
DOXYGEN Version 1.2.1
DOXYGEN Version 1.2.1-20000829
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (13 August 2000)
Dimitri van Heesch (29 August 2000)
1.2.1
1.2.1-20000829
......@@ -813,6 +813,20 @@ void checkConfig()
s=Config::includePath.next();
}
// check aliases
s=Config::aliasList.first();
while (s)
{
QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*=");
QCString alias=s;
alias=alias.stripWhiteSpace();
if (alias.find(re)!=0)
{
err("Illegal alias format `%s'. Use \"name=value\"\n",alias.data());
}
s=Config::aliasList.next();
}
// check dot path
if (!Config::dotPath.isEmpty())
{
......
......@@ -1014,6 +1014,18 @@ void init()
"disable (NO) the test list. This list is created by putting \\test \n"
"commands in the documentation.\n"
);
ConfigList::add( "aliasList",
"ALIASES",
"",
"list of aliases",
"This tag can be used to specify a number of aliases that acts \n"
"as commands in the documentation. An alias has the form \"\\name=value\". \n"
"For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n"
"put the command \\sideeffect (or @sideeffect) in the documentation, which \n"
"will result in a user defined paragraph with heading \"Side Effects:\". \n"
"You can put \\n's in the value part of an alias to insert newlines. \n"
"Predefined commands cannot be overwritten using aliases. \n"
);
//-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Messages","configuration options related to warning and progress messages");
//-----------------------------------------------------------------------------------------------
......
......@@ -282,7 +282,7 @@ Doxygen. Unrecognized commands are treated as normal text.
(either global or as a member of a class). This command is needed if a
comment block is \e not located before the function declaration
or definition. A full function declaration should be specified after the
\fn command. The argument ends at the end of the line.
\\fn command. The argument ends at the end of the line.
\par Example:
\verbinclude func.h
......
......@@ -39,12 +39,12 @@ You should use the \\mainpage command inside a comment block like this:
In order for global functions, variables, enums, typedefs, and defines
to be documented you should document the file in which these commands are
located using a comment block containing a \file (or @file)
located using a comment block containing a \\file (or \@file)
command.
Alternatively, you can put all members in a group (or module)
using the \ingroup command and then document the group using a comment
block containing the \defgroup command.
using the \\ingroup command and then document the group using a comment
block containing the \\defgroup command.
<li><b>How can I avoid that some code fragment is parsed by Doxyen?</b>
<p>
......
......@@ -111,7 +111,7 @@
special <code>//!</code> C++ line comments.
<li>Unrelated members can now be documented. A page containing a
list of these members is generated.
<li>Added an <code>\include</code> command to insert blocks of source code
<li>Added an <code>\\include</code> command to insert blocks of source code
into the documentation.
<li>Warnings are generated for members that are undocumented.
<li>You can now specify your own HTML headers and footers for the
......
......@@ -62,7 +62,7 @@
documentation, because of possible ambiguities or lack of
information about the context in which the code fragment is found.
<li>It is not possible to insert a non-member function f in a class A
using the \relates command, if class A already has a member with name f
using the \\relates command, if class A already has a member with name f
and the same argument list.
<li>There is only very limited support for member specialization at the
moment. It only works if there is a specialized template class as
......
Name: doxygen
Version: 1.2.1
Version: 1.2.1-20000829
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -1200,9 +1200,11 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.writeString(")");
memberWritten=TRUE;
}
if ((protect!=Public || md->isStatic() || virt!=Normal ||
md->isFriend() || md->isRelated() ||
md->getMemberSpecifiers()!=0
if ((protect!=Public || virt!=Normal ||
md->isFriend() || md->isRelated() || md->isExplicit() ||
md->isMutable() || (md->isInline() && Config::inlineInfoFlag) ||
md->isSignal() || md->isSlot() ||
md->isStatic()
)
&& memberWritten)
{
......
......@@ -447,7 +447,9 @@ static bool getLink(const char *className,
{
md->addSourceReference(g_currentMemberDef);
}
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data());
//printf("d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getOutputFileBase().data(),d->name().data(),md->name().data());
//printf("g_classVar=`%s' type=`%s'\n",g_classVar ? g_classVar->name().data() : "none",md->typeString());
writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(),
md->anchor(),text ? text : memberName);
return TRUE;
......@@ -559,8 +561,36 @@ static void generateMemberLink(OutputList &ol,const char *varName,
ClassDef *vcd = getResolvedClass(g_classScope);
if (vcd && vcd->isLinkable())
{
//printf("Found class for variable `%s'\n",varName);
//printf("Found class %s for variable `%s'\n",g_classScope.data(),varName);
MemberName *vmn=memberNameDict[varName];
if (vmn==0)
{
int vi;
QCString vn=varName;
QCString scope;
if ((vi=vn.findRev("::"))!=-1) // explicit scope A::b(), probably static member
{
ClassDef *jcd = getClass(vn.left(vi));
vn=vn.right(vn.length()-vi-2);
vmn=memberNameDict[vn];
//printf("Trying name `%s' scope=%s\n",vn.data(),scope.data());
MemberNameIterator vmni(*vmn);
MemberDef *vmd;
for (;(vmd=vmni.current());++vmni)
{
if ((vmd->isVariable() || vmd->isFunction()) &&
vmd->getClassDef()==jcd)
{
//printf("Found variable type=%s\n",vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString());
if (mcd && mcd->isLinkable())
{
if (generateClassMemberLink(ol,mcd,memName)) return;
}
}
}
}
}
if (vmn)
{
//printf("There is a variable with name `%s'\n",varName);
......
/* This file was generated by configgen on Sat Aug 12 16:16:35 2000
/* This file was generated by configgen on Fri Aug 25 21:22:11 2000
* from config_templ.h
*
* DO NOT EDIT!
......@@ -68,6 +68,7 @@ struct Config
static QStrList sectionFilterList; // list of section filters that are enabled
static bool generateTodoList; // do we want a todo list?
static bool generateTestList; // do we want a test list?
static QStrList aliasList; // list of aliases
static bool quietFlag; // generate progress messages flag
static bool warningFlag; // generate warnings flag
static bool warningUndocFlag; // generate undocumented warnings
......
/* This file was generated by configgen on Sun Aug 13 14:05:26 2000
/* This file was generated by configgen on Fri Aug 25 21:22:11 2000
* from config_templ.l
*
* DO NOT EDIT!
......@@ -105,6 +105,7 @@ int Config::tabSize = 8;
QStrList Config::sectionFilterList;
bool Config::generateTodoList = TRUE;
bool Config::generateTestList = TRUE;
QStrList Config::aliasList;
bool Config::quietFlag = FALSE;
bool Config::warningFlag = TRUE;
bool Config::warningUndocFlag = TRUE;
......@@ -361,6 +362,8 @@ static void readIncludeFile(const char *incName)
<Start>"ENABLED_SECTIONS"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::sectionFilterList; elemStr=""; }
<Start>"GENERATE_TODOLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTodoList; }
<Start>"GENERATE_TESTLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTestList; }
<Start>"ALIASES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::aliasList; l->clear(); elemStr=""; }
<Start>"ALIASES"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::aliasList; elemStr=""; }
<Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; }
<Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; }
<Start>"WARN_IF_UNDOCUMENTED"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningUndocFlag; }
......@@ -595,6 +598,14 @@ void dumpConfig()
}
printf("generateTodoList=`%d'\n",Config::generateTodoList);
printf("generateTestList=`%d'\n",Config::generateTestList);
{
char *is=Config::aliasList.first();
while (is)
{
printf("aliasList=`%s'\n",is);
is=Config::aliasList.next();
}
}
printf("# configuration options related to warning and progress messages\n");
printf("quietFlag=`%d'\n",Config::quietFlag);
printf("warningFlag=`%d'\n",Config::warningFlag);
......@@ -817,6 +828,7 @@ void Config::init()
Config::sectionFilterList.clear();
Config::generateTodoList = TRUE;
Config::generateTestList = TRUE;
Config::aliasList.clear();
Config::quietFlag = FALSE;
Config::warningFlag = TRUE;
Config::warningUndocFlag = TRUE;
......@@ -1308,6 +1320,20 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::generateTestList);
t << "\n";
if (!sl)
{
t << "\n";
t << "# This tag can be used to specify a number of aliases that acts \n";
t << "# as commands in the documentation. An alias has the form \"\\name=value\". \n";
t << "# For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n";
t << "# put the command \\sideeffect (or @sideeffect) in the documentation, which \n";
t << "# will result in a user defined paragraph with heading \"Side Effects:\". \n";
t << "# Predefined commands cannot be overwritten using aliases. \n";
t << "\n";
}
t << "ALIASES = ";
writeStringList(t,Config::aliasList);
t << "\n";
if (!sl)
{
t << "\n";
}
......@@ -2374,6 +2400,7 @@ void substituteEnvironmentVars()
substEnvVarsInString( Config::outputLanguage );
substEnvVarsInStrList( Config::stripFromPath );
substEnvVarsInStrList( Config::sectionFilterList );
substEnvVarsInStrList( Config::aliasList );
substEnvVarsInString( Config::warnFormat );
substEnvVarsInStrList( Config::inputSources );
substEnvVarsInStrList( Config::filePatternList );
......@@ -2636,6 +2663,20 @@ void checkConfig()
s=Config::includePath.next();
}
// check aliases
s=Config::aliasList.first();
while (s)
{
QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*=");
QCString alias=s;
alias=alias.stripWhiteSpace();
if (alias.find(re)!=0)
{
err("Illegal alias format `%s'. Use \"name=value\"\n",alias.data());
}
s=Config::aliasList.next();
}
// check dot path
if (!Config::dotPath.isEmpty())
{
......
......@@ -1246,7 +1246,7 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path,
}
void ClassDiagram::writeImageMap(QTextStream &t,const char *path,
void ClassDiagram::writeImage(QTextStream &t,const char *path,
const char *fileName, bool generateMap)
{
uint baseRows=base->computeRows();
......
......@@ -123,7 +123,7 @@ class ClassDiagram
~ClassDiagram();
void writeFigure(QTextStream &t,const char *path,
const char *file);
void writeImageMap(QTextStream &t,const char *path,
void writeImage(QTextStream &t,const char *path,
const char *file,bool generateMap=TRUE);
private:
TreeDiagram *base;
......
This diff is collapsed.
......@@ -1043,13 +1043,27 @@ static void findMaximalDotGraph(DotNode *root,
QCString DotClassGraph::diskName() const
{
return m_diskName + "_coll_graph";
QString result=m_diskName.copy();
switch (m_graphType)
{
case Implementation:
result+="_coll_graph";
break;
case Interface:
result+="_intf_graph";
break;
case Inheritance:
result+="_inherit_graph";
break;
}
return result;
}
void DotClassGraph::writeGraph(QTextStream &out,
GraphOutputFormat format,
const char *path,
bool isTBRank)
bool isTBRank,
bool generateImageMap)
{
QDir d(path);
// store the original directory
......@@ -1094,6 +1108,8 @@ void DotClassGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir);
return;
}
if (generateImageMap)
{
// run dot again to create an image map
dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"",
Config::dotPath.data(),baseName.data(),baseName.data());
......@@ -1120,9 +1136,10 @@ void DotClassGraph::writeGraph(QTextStream &out,
out << "\"></center>" << endl;
out << "<map name=\"" << m_startNode->m_label << "_" << mapName << "\">" << endl;
convertMapFile(out,baseName+".map");
out << "</map><p>" << endl;
out << "</map>" << endl;
thisDir.remove(baseName+".map");
}
}
else if (format==EPS) // run dot to create a .eps image
{
QCString dotCmd(4096);
......@@ -1251,12 +1268,16 @@ DotInclDepGraph::~DotInclDepGraph()
QCString DotInclDepGraph::diskName() const
{
return m_diskName + "_incldep";
QCString result=m_diskName.copy();
if (m_inverse) result+="_dep";
result+="_incl";
return result;
}
void DotInclDepGraph::writeGraph(QTextStream &out,
GraphOutputFormat format,
const char *path
const char *path,
bool generateImageMap
)
{
QDir d(path);
......@@ -1292,6 +1313,8 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
return;
}
if (generateImageMap)
{
// run dot again to create an image map
dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"",
Config::dotPath.data(),baseName.data(),baseName.data());
......@@ -1309,9 +1332,10 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
out << "</center>" << endl;
out << "<map name=\"" << mapName << "_map\">" << endl;
convertMapFile(out,baseName+".map");
out << "</map><p>" << endl;
out << "</map>" << endl;
thisDir.remove(baseName+".map");
}
}
else if (format==EPS)
{
// run dot to create a .eps image
......
......@@ -120,7 +120,7 @@ class DotClassGraph
~DotClassGraph();
bool isTrivial() const;
void writeGraph(QTextStream &t,GraphOutputFormat f,const char *path,
bool TBRank=TRUE);
bool TBRank=TRUE,bool imageMap=TRUE);
QCString diskName() const;
private:
......@@ -141,7 +141,8 @@ class DotInclDepGraph
public:
DotInclDepGraph(FileDef *fd,bool inverse=FALSE);
~DotInclDepGraph();
void writeGraph(QTextStream &t, GraphOutputFormat f,const char *path);
void writeGraph(QTextStream &t, GraphOutputFormat f,const char *path,
bool writeImageMap=TRUE);
bool isTrivial() const;
QCString diskName() const;
......
This diff is collapsed.
......@@ -99,6 +99,7 @@ extern FormulaList formulaList;
extern FormulaDict formulaDict;
extern FormulaDict formulaNameDict;
extern StringDict tagDestinationDict;
extern StringDict aliasDict;
extern QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading
extern QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
extern QDict<void> expandAsDefinedDict;
......
......@@ -26,7 +26,7 @@ HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \
translator_nl.h translator_se.h translator_cz.h translator_fr.h \
translator_it.h formula.h debug.h membergroup.h htmlhelp.h \
translator_ru.h translator_pl.h dot.h rtfgen.h xml.h xml_dtd.h \
reflist.h page.h sortdict.h
reflist.h page.h sortdict.h translator_hu.h
SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \
memberdef.cpp membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......
......@@ -577,7 +577,7 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d,
<< " border=\"0\"></center>" << endl
<< "<map name=\"" << name << "_map\">" << endl;
d.writeImageMap(t,dir,fileName);
d.writeImage(t,dir,fileName);
}
void HtmlGenerator::startColorFont(uchar red,uchar green,uchar blue)
......
......@@ -31,6 +31,7 @@
#include "translator_hr.h"
#include "translator_pl.h"
#include "translator_pt.h"
#include "translator_hu.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
......@@ -100,6 +101,10 @@ bool setTranslator(const char *langName)
{
theTranslator=new TranslatorPortuguese;
}
else if (L_EQUAL("hungarian"))
{
theTranslator=new TranslatorHungarian;
}
#endif
else // use the default language (i.e. english)
{
......
......@@ -108,7 +108,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 << "\\small\\begin{verbatim}"; }
void startCodeFragment() { t << "\\footnotesize\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; }
void startPreFragment() { t << "\\small\\begin{alltt}"; }
void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl; }
......
......@@ -972,10 +972,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
rmd = rmd->reimplements();
}
if (isStatic() || protection()!=Public ||
lvirt!=Normal || isSignal() || isFriend() ||
isRelated() || isSlot() ||
getMemberSpecifiers()!=0
if (protection()!=Public || lvirt!=Normal ||
isFriend() || isRelated() || isExplicit() ||
isMutable() || (isInline() && Config::inlineInfoFlag) ||
isSignal() || isSlot() ||
isStatic()
)
{
// write the member specifier list
......
......@@ -1737,7 +1737,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d,
newParagraph();
// create a gif file
d.writeImageMap(t,dir,fileName,FALSE);
d.writeImage(t,dir,fileName,FALSE);
// display the file
t << "{" << endl;
......@@ -2160,11 +2160,8 @@ void RTFGenerator::startDotGraph()
void RTFGenerator::endDotGraph(DotClassGraph &g)
{
newParagraph();
DBG_RTF(t <<"{\\comment This would be an image map..." << endl)
g.writeGraph(t,GIF,Config::rtfOutputDir);
t << "}" << endl;
g.writeGraph(t,GIF,Config::rtfOutputDir,TRUE,FALSE);
// display the file
t << "{" << endl;
......@@ -2182,11 +2179,8 @@ void RTFGenerator::startInclDepGraph()
void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
{
newParagraph();
DBG_RTF(t <<"{\\comment This would be an image map..." << endl)
g.writeGraph(t,GIF,Config::rtfOutputDir);
t << "}" << endl;
g.writeGraph(t,GIF,Config::rtfOutputDir,FALSE);
//QCString diskName = g.diskName();
......
This diff is collapsed.
This diff is collapsed.
/******************************************************************************
*
*
*
* Copyright (C) 1997-2000 by Dimitri van Heesch.
*
* Initial Italian Translation by Ahmed Aldo Faisal
* Revised and completed by Alessandro Falappa (June 1999)
* Updates:
* 2000/08: translated new items used since version 1.1.3, 1.1.4, 1.1.5 and 1.2.0
* 2000/03: translated new items used since version 1.0 and 1.1.0
* 1999/19: entirely rewritten the translation to correct small variations due
* to feature additions and to conform to the layout of the latest
......@@ -179,8 +178,7 @@ class TranslatorItalian : public Translator
/*! This is an introduction to the annotated compound list. */
QCString trCompoundListDescription()
{ return "Queste sono le classi, structs, "
"unions e interfacce con una loro breve descrizione:";
{ return "Queste sono le classi, structs, unions e interfacce con una loro breve descrizione:";
}
/*! This is an introduction to the page with all class members. */
......@@ -427,7 +425,7 @@ class TranslatorItalian : public Translator
/*! this text is generated when the \warning command is used. */
QCString trWarning()
{ return "Attenzione"; }
{ return "Avvertimento"; }
/*! this text is generated when the \bug command is used. */
QCString trBugsAndLimitations()
......@@ -728,7 +726,7 @@ class TranslatorItalian : public Translator
}
//////////////////////////////////////////////////////////////////////////
// new since 1.0.0
// new since 0.49-991205
//////////////////////////////////////////////////////////////////////////
QCString trDeprecated()
......@@ -737,7 +735,7 @@ class TranslatorItalian : public Translator
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
// new since 1.0.0
//////////////////////////////////////////////////////////////////////////
/*! this text is put before a collaboration diagram */
......@@ -806,11 +804,15 @@ class TranslatorItalian : public Translator
{
return "Indice delle pagine";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
QCString trNote()
{
return "Nota";
}
QCString trPublicTypes()
{
return "Tipi pubblici";
......@@ -847,6 +849,127 @@ class TranslatorItalian : public Translator
{
return "Attributi privati statici";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a todo item */
virtual QCString trTodo()
{
return "Da Fare";
}
/*! Used as the header of the todo list */
virtual QCString trTodoList()
{
return "Lista di cose da fare";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////
virtual QCString trReferencedBy()
{
return "Referenziato da";
}
virtual QCString trRemarks()
{
return "Osservazioni";
}
virtual QCString trAttention()
{
return "Attenzione";
}
virtual QCString trInclByDepGraph()
{
return "Queato grafo mostra quali files includono direttamente o indirettamente questo file:";
}
virtual QCString trSince()
{
return "A partire da";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
virtual QCString trLegendTitle()
{
return "Legenda del grafo";
}
/*! page explaining how the dot graph's should be interpreted */
virtual QCString trLegendDocs()
{
return
"Questa pagina spiega come interpretare i grafi generati da doxygen.<p>\n"
"Considerate l'esempio seguente:\n"
"\\code\n"
"/*! Invisible class because of truncation */\n"
"class Invisible { };\n\n"
"/*! Truncated class, inheritance relation is hidden */\n"
"class Truncated : public Invisible { };\n\n"
"/* Class not documented with doxygen comments */\n"
"class Undocumented { };\n\n"
"/*! Class that is inherited using public inheritance */\n"
"class PublicBase : public Truncated { };\n\n"
"/*! Class that is inherited using protected inheritance */\n"
"class ProtectedBase { };\n\n"
"/*! Class that is inherited using private inheritance */\n"
"class PrivateBase { };\n\n"
"/*! Class that is used by the Inherited class */\n"
"class Used { };\n\n"
"/*! Super class that inherits a number of other classes */\n"
"class Inherited : public PublicBase,\n"
" protected ProtectedBase,\n"
" private PrivateBase,\n"
" public Undocumented\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Se il tag \\c MAX_DOT_GRAPH_HEIGHT nel file di configurazione "
"è impostato a 200 verrà prodotto il grafo seguente:"
"<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p>\n"
"I riquadri nel grafo qui sopra hanno il seguente significato:\n"
"<ul>\n"
"<li>Il riquadro nero pieno rappresenta la struct o la classe per la quale il grafo è stato generato.\n"
"<li>Un riquadro con un bordo nero denota una struct o una classe documentata.\n"
"<li>Un riquadro con un bordo grigio indica una struct o una classe non documentata.\n"
"<li>Un riquadro con un bordo rosso indica una struct o una classe per la quale non sono mostrate tutte le relazioni di ereditarietà/contenimento (un grafo viene troncato se non rientra nei limiti prestabiliti)."
"</ul>\n"
"Le frecce hanno il seguente significato:\n"
"<ul>\n"
"<li>Una freccia blu scuro indica una relazione di ereditarietà pubblica tra due classi.\n"
"<li>Una freccia verde indica un'ereditarietà protetta.\n"
"<li>Una freccia rossa indica un'ereditarietà privata.\n"
"<li>Una freccia viola tratteggiata indica che una classe è contenuta o usata da un'altra classe."
" La freccia viene etichettata con la o le variabili attraverso cui la struct o la classe puntata dalla freccia è accessibile.\n"
"</ul>\n";
}
/*! text for the link to the legend page */
virtual QCString trLegend()
{
return "legenda";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.0
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a test item */
virtual QCString trTest()
{
return "Test";
}
/*! Used as the header of the test list */
virtual QCString trTestList()
{
return "Lista dei test";
}
};
#endif
......@@ -897,6 +897,94 @@ class TranslatorPolish : public Translator
{
return "Od";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
QCString trLegendTitle()
{
return "Legenda Wykresu";
}
/*! page explaining how the dot graph's should be interpreted */
QCString trLegendDocs()
{
return
"Ta strona wyja¶nia jak interpretowaæ wykresy, które s± wygenerowane "
"przez doxygen.<p>\n"
"Rozwa¿ nastêpuj±cy przyk³ad:\n"
"\\code\n"
"/*! Klasa Niewidzialna z powodu okrojenia */\n"
"class Niewidzialna { };\n\n"
"/*! Klasa Okrojona, relacja dziedziczenia jest ukryta */\n"
"class Okrojona : public Niewidzialna { };\n\n"
"/* Klasa nie udokumentowana komentarzami doxygen */\n"
"class Nieudokumentowana { };\n\n"
"/*! Klasa, która jest dziedziczona publicznie */\n"
"class PublicznaBaza : public Okrojona { };\n\n"
"/*! Klasa, która jest dziedziczona przy u¿yciu dziedziczenia chronionego */\n"
"class ChronionaBaza { };\n\n"
"/*! Klasa, która jest dziedziczona prywatnie */\n"
"class PrywatnaBaza { };\n\n"
"/*! Klasa, która jest u¿yta przez klasê Dziedziczona */\n"
"class Uzyta { };\n\n"
"/*! Superklasa, która dziedziczy kilka innych klas */\n"
"class Dziedziczona : public PublicznaBaza,\n"
" protected ChronionaBaza,\n"
" private PrywatnaBaza,\n"
" public Nieudokumentowana\n"
"{\n"
" private:\n"
" Uzyta *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Je¶li znacznik \\c MAX_DOT_GRAPH_HEIGHT w pliku konfiguracji "
"jest ustawiony na 200, odniesie to rezultat w nastêpuj±cym wykresie:"
"<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p>\n"
"Pude³ka w powy¿szym wykresie maj± nastêpuj±ce znaczenie:\n"
"<ul>\n"
"<li>Wype³nione czarne pude³ko reprezentuje strukturê lub klasê dla "
"której zosta³ wygenerowany wykres.\n"
"<li>Pude³ko z czarn± obwolut± oznacza udokumentowan± strukturê lub klasê.\n"
"<li>Pude³ko z szar± obwolut± oznacza nieudokumentowan± strukturê lub klasê.\n"
"<li>Pude³ko z czerwon± obwolut± oznacza udokumentowan± strukturê lub klasê dla\n"
"której nie s± pokazane wszystkie relacje dziedziczenia/zawierania. Wykres jest "
"okrojony, je¶li nie mie¶ci siê w okre¶lonych brzegach."
"</ul>\n"
"Strza³ki maj± nastêpuj±ce znaczenie:\n"
"<ul>\n"
"<li>Ciemno niebieska strza³ka jest u¿ywana do wizualizacji relacji "
"dziedziczenia publicznego pomiêdzy dwiema klasami.\n"
"<li>Ciemno zielona strza³ka jest u¿ywana dla dziedziczenia chronionego.\n"
"<li>Ciemno czerwona strza³ka jest u¿ywana dla dziedziczenia prywatnego.\n"
"<li>Fioletowa przerywana strza³ka jest u¿ywana je¶li klasa jest zawarta "
"lub u¿yta przez inn± klasê. Strza³ka jest podpisana zmienn±(ymi) "
"przez które wskazywana klasa lub struktura jest dostêpna. \n"
"</ul>\n";
}
/*! text for the link to the legend page */
QCString trLegend()
{
return "legenda";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.0
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a test item */
QCString trTest()
{
return "Test";
}
/*! Used as the header of the test list */
QCString trTestList()
{
return "Lista Testu";
}
};
#endif
......@@ -871,8 +871,9 @@ void endFile(OutputList &ol,bool external)
void setAnchors(char id,MemberList *ml,int groupId)
{
int count=0;
MemberDef *md=ml->first();
while (md)
MemberListIterator mli(*ml);
MemberDef *md;
for (;(md=mli.current());++mli)
{
QCString anchor;
if (groupId==-1)
......@@ -881,7 +882,6 @@ void setAnchors(char id,MemberList *ml,int groupId)
anchor.sprintf("%c%d_%d",id,groupId,count++);
//printf("Member %s anchor %s\n",md->name(),anchor.data());
md->setAnchor(anchor);
md=ml->next();
}
}
......@@ -1605,7 +1605,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
)
{
//printf(" Found fcd=%p\n",fcd);
MemberDef *mmd=mn->first();
MemberListIterator mmli(*mn);
MemberDef *mmd;
int mdist=maxInheritanceDepth;
ArgumentList *argList=0;
if (args)
......@@ -1613,7 +1614,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
argList=new ArgumentList;
stringToArgumentList(args,argList);
}
while (mmd)
for (mmli.toFirst();(mmd=mmli.current());++mmli)
{
if (mmd->isLinkable())
{
......@@ -1631,7 +1632,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
}
}
}
mmd=mn->next();
}
if (argList)
{
......@@ -1641,8 +1641,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
// no exact match found, but if args="()" an arbitrary member will do
{
//printf(" >Searching for arbitrary member\n");
mmd=mn->first();
while (mmd)
for (mmli.toFirst();(mmd=mmli.current());++mmli)
{
if (//(mmd->protection()!=Private || Config::extractPrivateFlag) &&
//(
......@@ -1664,7 +1663,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md=mmd;
}
}
mmd=mn->next();
}
}
//printf(" >Succes=%d\n",mdist<maxInheritanceDepth);
......@@ -1711,15 +1709,13 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{
//printf("Function inside existing namespace `%s'\n",namespaceName.data());
bool found=FALSE;
MemberDef *mmd=mn->first();
while (mmd && !found)
MemberListIterator mmli(*mn);
MemberDef *mmd;
for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
{
//printf("mmd->getNamespaceDef()=%p fnd=%p\n",
// mmd->getNamespaceDef(),fnd);
if (mmd->getNamespaceDef()==fnd &&
//(mmd->isReference() || mmd->hasDocumentation())
mmd->isLinkable()
)
if (mmd->getNamespaceDef()==fnd && mmd->isLinkable())
{ // namespace is found
bool match=TRUE;
ArgumentList *argList=0;
......@@ -1740,25 +1736,19 @@ bool getDefs(const QCString &scName,const QCString &memberName,
delete argList; argList=0;
}
}
mmd=mn->next();
}
if (!found && !strcmp(args,"()"))
// no exact match found, but if args="()" an arbitrary
// member will do
{
MemberDef *mmd=mn->first();
while (mmd && !found)
for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
{
if (mmd->getNamespaceDef()==fnd &&
//(mmd->isReference() || mmd->hasDocumentation())
mmd->isLinkable()
)
if (mmd->getNamespaceDef()==fnd && mmd->isLinkable())
{
nd=fnd;
md=mmd;
found=TRUE;
}
mmd=mn->next();
}
}
if (found) return TRUE;
......@@ -1766,8 +1756,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
else // no scope => global function
{
//printf("Function with global scope `%s' args=`%s'\n",namespaceName.data(),args);
md=mn->first();
while (md)
MemberListIterator mli(*mn);
for (mli.toFirst();(md=mli.current());++mli)
{
if (md->isLinkable())
{
......@@ -1798,7 +1788,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
}
}
}
md=mn->next();
}
if (!strcmp(args,"()"))
{
......@@ -2256,21 +2245,21 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
{
if (fn->count()==1)
{
return fn->first();
return fn->getFirst();
}
else // file name alone is ambigious
{
int count=0;
FileDef *fd=fn->first();
FileNameIterator fni(*fn);
FileDef *fd;
FileDef *lastMatch=0;
while (fd)
for (fni.toFirst();(fd=fni.current());++fni)
{
if (path.isEmpty() || fd->getPath().right(path.length())==path)
{
count++;
lastMatch=fd;
}
fd=fn->next();
}
ambig=(count>1);
return lastMatch;
......@@ -2295,14 +2284,14 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n)
FileName *fn;
if ((fn=(*fnDict)[name]))
{
FileDef *fd=fn->first();
while (fd)
FileNameIterator fni(*fn);
FileDef *fd;
for (fni.toFirst();(fd=fni.current());++fni)
{
if (path.isEmpty() || fd->getPath().right(path.length())==path)
{
result+=" "+fd->absFilePath()+"\n";
}
fd=fn->next();
}
}
return result;
......
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