Commit 9fd2c403 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3-rc1-20021207

parent 449d9d2d
DOXYGEN Version 1.3-rc1-20021128
DOXYGEN Version 1.3-rc1-20021207
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (28 November 2002)
Dimitri van Heesch (07 December 2002)
DOXYGEN Version 1.3_rc1_20021128
DOXYGEN Version 1.3_rc1_20021207
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) (28 November 2002)
Dimitri van Heesch (dimitri@stack.nl) (07 December 2002)
1.3-rc1-20021128
1.3-rc1-20021207
......@@ -195,6 +195,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_treeview_width TREEVIEW_WIDTH
\refitem cfg_verbatim_headers VERBATIM_HEADERS
\refitem cfg_warn_format WARN_FORMAT
\refitem cfg_warn_if_doc_error WARN_IF_DOC_ERROR
\refitem cfg_warn_if_undocumented WARN_IF_UNDOCUMENTED
\refitem cfg_warn_logfile WARN_LOGFILE
\refitem cfg_warnings WARNINGS
......@@ -583,6 +584,13 @@ function's detailed documentation block.
for undocumented members. If \c EXTRACT_ALL is set to \c YES then this flag will
automatically be disabled.
\anchor cfg_warn_if_doc_error
<dt>\c WARN_IF_DOC_ERROR <dd>
If \c WARN_IF_DOC_ERROR is set to \c YES, doxygen will generate warnings for
potential errors in the documentation, such as not documenting some
parameters in a documented function, or documenting parameters that
don't exist or using markup commands wrongly.
\anchor cfg_warn_format
<dt>\c WARN_FORMAT <dd>
\addindex WARN_FORMAT
......
......@@ -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.3pre1), 28 languages
Currently (version 1.2.14-20020317), 28 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish,
......@@ -119,9 +119,9 @@ when the translator was updated.
</TR>
<TR BGCOLOR="#ffffff">
<TD>German</TD>
<TD>Jens Seidel<br>Jens Breitenstein</TD>
<TD>jensseidel@NOSPAM.users.sf.net<br>Jens.Breitenstein@NOSPAM.tlc.de</TD>
<TD>1.2.17</TD>
<TD>Jens Seidel</TD>
<TD>jensseidel@NOSPAM.users.sf.net</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Greek</TD>
......@@ -139,7 +139,7 @@ when the translator was updated.
<TD>Italian</TD>
<TD>Alessandro Falappa<br>Ahmed Aldo Faisal</TD>
<TD>alessandro@NOSPAM.falappa.net<br>aaf23@NOSPAM.cam.ac.uk</TD>
<TD>1.2.18</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Japanese</TD>
......@@ -253,14 +253,13 @@ when the translator was updated.
\hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & 1.2.17 \\
\hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & 1.2.17 \\
& Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} & \\
German & Jens Seidel & {\tt jensseidel@users.sf.net} & up-to-date \\
\hline
Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\
\hline
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & 1.2.18 \\
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline
Japanese & Ryunosuke Sato & {\tt puyo@mint.freemail.ne.jp} & 1.2.18 \\
......
......@@ -49,7 +49,7 @@ Alessandro Falappa: alessandro@falappa.net
Ahmed Aldo Faisal: aaf23@cam.ac.uk
Japanese
Ryunosuke Sato: puyo@mint.freemail.ne.jp
Ryunosuke Satoh: sun594@hotmail.com
Kenji Nagamatsu: naga@joyful.club.ne.jp
Korean
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3_rc1_20021128
Version: 1.3_rc1_20021207
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -556,7 +556,7 @@ void ClassDef::distributeMemberGroupDocumentation()
void ClassDef::findSectionsInDocumentation()
{
docFindSections(documentation(),0,this,0);
docFindSections(documentation(),0,this,0,docFile());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
......
......@@ -109,13 +109,15 @@ static int g_lastCContext;
class VariableContext
{
public:
static const ClassDef *dummyContext;
class Scope : public SDict<ClassDef>
{
public:
Scope() : SDict<ClassDef>(17) {}
};
VariableContext()
VariableContext()
{
m_scopes.setAutoDelete(TRUE);
}
......@@ -157,12 +159,14 @@ class VariableContext
void addVariable(const QCString &type,const QCString &name);
ClassDef *findVariable(const QCString &name);
private:
Scope m_globalScope;
QList<Scope> m_scopes;
};
void VariableContext::addVariable(const QCString &type,const QCString &name)
{
//printf("VariableContext::addVariable(%s,%s)\n",type.data(),name.data());
QCString ltype = type.simplifyWhiteSpace();
QCString lname = name.simplifyWhiteSpace();
if (ltype.left(7)=="struct ")
......@@ -191,6 +195,11 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
// probably a template class, try without arguments as well
addVariable(ltype.left(i),name);
}
else // add a dummy entry so the name is hidden
{
//printf("adding dummy context!\n");
scope->append(lname,dummyContext);
}
}
ClassDef *VariableContext::findVariable(const QCString &name)
......@@ -215,6 +224,8 @@ ClassDef *VariableContext::findVariable(const QCString &name)
return result;
}
const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
static VariableContext g_theVarContext;
//-------------------------------------------------------------------
......@@ -539,8 +550,11 @@ static MemberDef *setCallContextForVar(const QCString &name)
ClassDef *mcd = g_theVarContext.findVariable(name);
if (mcd) // local variable
{
//printf("local var `%s' mcd=%s\n",name.data(),mcd->name().data());
g_theCallContext.setClass(mcd);
if (mcd!=VariableContext::dummyContext)
{
//printf("local var `%s' mcd=%s\n",name.data(),mcd->name().data());
g_theCallContext.setClass(mcd);
}
}
else
{
......@@ -611,7 +625,8 @@ static void addDocCrossReference(MemberDef *src,MemberDef *dst)
}
static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,int *clNameLen=0)
static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
bool typeOnly=FALSE)
{
int i=0;
//printf("generateClassOrGlobalLink(clName=%s)\n",clName);
......@@ -621,12 +636,12 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,int
clName++;
}
QCString className=clName;
if (clNameLen) *clNameLen=0;
if (className.isEmpty()) return;
ClassDef *cd=0;
if (!g_theVarContext.findVariable(className)) // not a local variable
{
//printf("not a local var!\n");
Definition *d = g_currentDefinition;
cd = getResolvedClass(d,className);
if (cd==0 && (i=className.find('<'))!=-1)
......@@ -650,11 +665,10 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,int
}
}
writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className);
if (clNameLen) *clNameLen=className.length()-i-1;
}
else
{
if (cd==0) // not a class, see if it is a global enum/variable/typedef.
if (cd==0 && !typeOnly) // not a class, see if it is a global enum/variable/typedef.
{
MemberDef *md = setCallContextForVar(clName);
//printf("is a global md=%p\n",md);
......@@ -677,7 +691,6 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,int
}
codifyLines(clName);
if (clNameLen) *clNameLen=className.length()-1;
}
}
......@@ -804,23 +817,26 @@ static void generateMemberLink(BaseCodeDocInterface &ol,const QCString &varName,
ClassDef *vcd = g_theVarContext.findVariable(varName);
if (vcd)
{
//printf("Class found!\n");
if (getLink(vcd->name(),memName,ol))
{
//printf("Found result!\n");
return;
}
BaseClassListIterator bcli(*vcd->baseClasses());
for ( ; bcli.current() ; ++bcli)
if (vcd!=VariableContext::dummyContext)
{
if (getLink(bcli.current()->classDef->name(),memName,ol))
//printf("Class found!\n");
if (getLink(vcd->name(),memName,ol))
{
//printf("Found result!\n");
return;
}
BaseClassListIterator bcli(*vcd->baseClasses());
for ( ; bcli.current() ; ++bcli)
{
if (getLink(bcli.current()->classDef->name(),memName,ol))
{
//printf("Found result!\n");
return;
}
}
}
}
else // variable not in current context, maybe it is
else // variable not in current context, maybe it is in a parent context
{
vcd = getResolvedClass(g_currentDefinition,g_classScope);
if (vcd && vcd->isLinkable())
......@@ -1536,7 +1552,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<MemberCall2,FuncCall>[a-z_A-Z][:a-z_A-Z0-9]*({B}*"<"[^\n\<\>]*">")? {
addParmType();
g_parmName=yytext;
generateClassOrGlobalLink(*g_code,yytext);
generateClassOrGlobalLink(*g_code,yytext,TRUE);
}
<MemberCall2,FuncCall>, {
g_code->codify(yytext);
......
......@@ -1664,6 +1664,14 @@ void Config::create()
"automatically be disabled. \n",
TRUE
);
cb = addBool(
"WARN_IF_DOC_ERROR",
"If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \n"
"potential errors in the documentation, such as not documenting some \n"
"parameters in a documented function, or documenting parameters that \n"
"don't exist or using markup commands wrongly. \n",
TRUE
);
cs = addString(
"WARN_FORMAT",
"The WARN_FORMAT tag determines the format of the warning messages that \n"
......
This diff is collapsed.
......@@ -59,7 +59,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
DocNode *validatingParseText(const char *input);
/*! Searches for section and anchor commands in the input */
void docFindSections(const char *input,PageInfo *pi,Definition *d,MemberGroup *m);
void docFindSections(const char *input,PageInfo *pi,Definition *d,MemberGroup *m,const char *fileName);
//---------------------------------------------------------------------------
......@@ -156,6 +156,7 @@ template<class T> class CompAccept
protected:
QList<DocNode> m_children;
QList<DocNode> &getChildren() const { return m_children; }
};
......@@ -297,7 +298,7 @@ class DocSymbol : public DocNode
{
public:
enum SymType { Unknown=0, BSlash,At,Less,Greater,Amp,Dollar,Hash,Percent,
Copy, Apos, Quot, Uml, Acute, Grave, Circ, Tilde, Szlig,
Copy, Tm, Reg, Apos, Quot, Uml, Acute, Grave, Circ, Tilde, Szlig,
Cedil, Ring, Nbsp
};
DocSymbol(DocNode *parent,SymType s,char letter='\0') :
......@@ -506,6 +507,7 @@ class DocTitle : public CompAccept<DocTitle>, public DocNode
public:
DocTitle(DocNode *parent) : m_parent(parent) {}
void parse();
void parseFromString(const QString &title);
Kind kind() const { return Kind_Title; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocTitle>::accept(this,v); }
......@@ -856,11 +858,12 @@ class DocSimpleSect : public CompAccept<DocSimpleSect>, public DocNode
enum Type
{
Unknown, See, Return, Author, Authors, Version, Since, Date,
Note, Warning, Pre, Post, Invar, Remark, Attention, User
Note, Warning, Pre, Post, Invar, Remark, Attention, User, Rcs
};
DocSimpleSect(DocNode *parent,Type t);
virtual ~DocSimpleSect();
int parse(bool userTitle);
int parseRcs();
Kind kind() const { return Kind_SimpleSect; }
Type type() const { return m_type; }
DocNode *parent() const { return m_parent; }
......
......@@ -111,7 +111,7 @@ const char *tokToString(int token);
// operations on the scanner
void doctokenizerYYFindSections(const char *input,PageInfo *pi,Definition *d,
MemberGroup *mg);
MemberGroup *mg,const char *fileName);
void doctokenizerYYinit(const char *input,const char *fileName);
void doctokenizerYYcleanup();
void doctokenizerYYpushContext();
......
......@@ -51,6 +51,7 @@ static MemberGroup *g_memberGroup;
static QCString g_secLabel;
static QCString g_secTitle;
static SectionInfo::SectionType g_secType;
static QCString g_endMarker;
struct DocLexerContext
{
......@@ -286,10 +287,10 @@ OPMASK ({BLANK}*{OPNORM}({FUNCARG}?))|({OPCAST}{FUNCARG})
LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 {SCOPEPRE}*"operator"{OPMASK}
WORD1 [^ \t\n\r\\@<>(){}&$#,.]+|"{"|"}"
WORD2 "."|","|"("|")"
WORD1NQ [^ \t\n\r\\@<>(){}&$#,."]+
WORD2NQ "."|","|"("|")"
WORD1 [^ \t\n\r\\@<>()\[\]:;\?{}&$#,.]+|"{"|"}"
WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"
WORD1NQ [^ \t\n\r\\@<>()\[\]:;\?{}&$#,."]+
WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"
HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*">"
HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
......@@ -325,6 +326,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
%s St_SecLabel1
%s St_SecLabel2
%s St_SecTitle
%x St_SecSkip
%%
<St_Para>\r /* skip carriage return */
......@@ -383,9 +385,9 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
}
<St_Para>"$"{ID}":"[^\n$]+"$" { /* RCS tag */
QString tagName(yytext+1);
int i=tagName.find(':');
g_token->name = tagName.left(i);
g_token->text = tagName.mid(i+1,tagName.length()-i-2);
int index=tagName.find(':');
g_token->name = tagName.left(index);
g_token->text = tagName.mid(index+1,tagName.length()-index-2);
return TK_RCSTAG;
}
<St_Para,St_HtmlOnly>"$("{ID}")" { /* environment variable */
......@@ -720,6 +722,41 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
g_secType = SectionInfo::Paragraph;
BEGIN(St_SecLabel2);
}
<St_Sections>{CMD}"verbatim" {
g_endMarker="endverbatim";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"htmlonly" {
g_endMarker="endhtmlonly";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"latexonly" {
g_endMarker="endlatexonly";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"code" {
g_endMarker="endcode";
BEGIN(St_SecSkip);
}
<St_Sections>"<!--" {
g_endMarker="-->";
BEGIN(St_SecSkip);
}
<St_SecSkip>{CMD}{ID} {
if (strcmp(yytext+1,g_endMarker)==0)
{
BEGIN(St_Sections);
}
}
<St_SecSkip>"-->" {
if (strcmp(yytext,g_endMarker)==0)
{
BEGIN(St_Sections);
}
}
<St_SecSkip>[^a-z_A-Z0-9\-]+
<St_SecSkip>.
<St_SecSkip>\n
<St_Sections>.
<St_Sections>\n
<St_SecLabel1>{LABELID} {
......@@ -756,7 +793,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
//--------------------------------------------------------------------------
void doctokenizerYYFindSections(const char *input,PageInfo *pi,Definition *d,
MemberGroup *mg)
MemberGroup *mg,const char *fileName)
{
if (input==0) return;
g_inputString = input;
......@@ -765,6 +802,7 @@ void doctokenizerYYFindSections(const char *input,PageInfo *pi,Definition *d,
g_pageInfo = pi;
g_definition = d;
g_memberGroup = mg;
g_fileName = fileName;
BEGIN(St_Sections);
doctokenizerYYlineno = 1;
doctokenizerYYlex();
......
This diff is collapsed.
......@@ -173,5 +173,7 @@ class DotInclDepGraph
void generateGraphLegend(const char *path);
void writeDotGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,GraphOutputFormat format);
QString getDotImageMapFromFile(const QString& inFile, const QString& outDir);
#endif
......@@ -103,8 +103,9 @@ StringDict Doxygen::tagDestinationDict(257); // all tag locations
// a member group
QDict<void> Doxygen::expandAsDefinedDict(257); // all macros that should be expanded
QIntDict<QCString> Doxygen::memberHeaderDict(1009); // dictionary of the member groups heading
QIntDict<QCString> Doxygen::memberDocDict(1009); // dictionary of the member groups heading
QIntDict<MemberGroupInfo> Doxygen::memGrpInfoDict(1009); // dictionary of the member groups heading
//QIntDict<QCString> Doxygen::memberHeaderDict(1009); // dictionary of the member groups heading
//QIntDict<QCString> Doxygen::memberDocDict(1009); // dictionary of the member groups heading
PageInfo *Doxygen::mainPage = 0;
QTextStream Doxygen::tagFile;
......@@ -173,10 +174,8 @@ void statistics()
compoundKeywordDict.statistics();
fprintf(stderr,"--- expandAsDefinedDict stats ----\n");
Doxygen::expandAsDefinedDict.statistics();
fprintf(stderr,"--- memberHeaderDict stats ----\n");
Doxygen::memberHeaderDict.statistics();
fprintf(stderr,"--- memberDocDict stats ----\n");
Doxygen::memberDocDict.statistics();
fprintf(stderr,"--- memGrpInfoDict stats ----\n");
Doxygen::memGrpInfoDict.statistics();
}
......@@ -1061,10 +1060,13 @@ static void findUsingDirectives(Entry *root)
static void findUsingDeclarations(Entry *root)
{
if (root->section==Entry::USINGDECL_SEC)
if (root->section==Entry::USINGDECL_SEC &&
!(root->parent->section&Entry::COMPOUND_MASK) // not a class/struct member
)
{
//printf("Found using declaration %s at line %d of %s\n",
// root->name.data(),root->startLine,root->fileName.data());
printf("Found using declaration %s at line %d of %s inside section %x\n",
root->name.data(),root->startLine,root->fileName.data(),
root->parent->section);
bool ambig;
if (!root->name.isEmpty())
{
......@@ -1142,6 +1144,88 @@ static void findUsingDeclarations(Entry *root)
//----------------------------------------------------------------------
static void findUsingDeclImports(Entry *root)
{
if (root->section==Entry::USINGDECL_SEC &&
(root->parent->section&Entry::COMPOUND_MASK) // in a class/struct member
)
{
//printf("Found using declaration %s at line %d of %s inside section %x\n",
// root->name.data(),root->startLine,root->fileName.data(),
// root->parent->section);
QCString fullName=removeRedundantWhiteSpace(root->parent->name);
fullName=stripAnonymousNamespaceScope(fullName);
fullName=stripTemplateSpecifiersFromScope(fullName);
ClassDef *cd = getClass(fullName);
if (cd)
{
//printf("found class %s\n",cd->name().data());
int i=root->name.find("::");
if (i!=-1)
{
QCString scope=root->name.left(i);
QCString memName=root->name.right(root->name.length()-i-2);
ClassDef *bcd = getResolvedClass(cd,scope);
if (bcd)
{
//printf("found class %s\n",bcd->name().data());
MemberNameInfoSDict *mndict=bcd->memberNameInfoSDict();
MemberNameInfo *mni = mndict->find(memName);
if (mni)
{
MemberNameInfoIterator mnii(*mni);
MemberInfo *mi;
for ( ; (mi=mnii.current()) ; ++mnii )
{
MemberDef *md = mi->memberDef;
if (md && md->protection()!=Private)
{
//printf("found member %s\n",mni->memberName());
MemberDef *newMd = new MemberDef(
root->fileName,root->startLine,
md->typeString(),memName,md->argsString(),
md->excpString(),root->protection,root->virt,
md->isStatic(),FALSE,md->memberType(),
md->templateArguments(),md->argumentList()
);
cd->insertMember(newMd);
newMd->setMemberClass(cd);
if (!root->doc.isEmpty() || !root->brief.isEmpty())
{
newMd->setDocumentation(root->doc,root->docFile,root->docLine);
newMd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
}
else
{
newMd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
newMd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
}
newMd->setDefinition(md->definition());
newMd->setBitfields(md->bitfieldString());
newMd->addSectionsToDefinition(root->anchors);
newMd->setBodySegment(md->getStartBodyLine(),md->getEndBodyLine());
newMd->setBodyDef(md->getBodyDef());
newMd->setInitializer(md->initializer());
newMd->setMaxInitLines(md->initializerLines());
newMd->setMemberGroupId(root->mGrpId);
newMd->setMemberSpecifiers(md->getMemberSpecifiers());
}
}
}
}
}
}
}
EntryListIterator eli(*root->sublist);
Entry *e;
for (;(e=eli.current());++eli)
{
findUsingDeclImports(e);
}
}
//----------------------------------------------------------------------
static MemberDef *addVariableToClass(
Entry *root,
ClassDef *cd,
......@@ -7702,6 +7786,9 @@ void parseInput()
findMemberDocumentation(root); // may introduce new members !
transferRelatedFunctionDocumentation();
msg("Searching for members imported via using declarations...\n");
findUsingDeclImports(root);
msg("Building page list...\n");
buildPageList(root);
......@@ -7833,7 +7920,7 @@ void generateOutput()
msg("Resolving user defined references...\n");
resolveUserReferences();
msg("Finding anchor and section in the documentation...\n");
msg("Finding anchors and sections in the documentation...\n");
findSectionsInDocumentation();
msg("Generating index page...\n");
......
......@@ -87,8 +87,9 @@ class Doxygen
static FormulaDict formulaNameDict;
static StringDict tagDestinationDict;
static StringDict aliasDict;
static QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading
static QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
static QIntDict<MemberGroupInfo> memGrpInfoDict;
//static QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading
//static QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
static QDict<void> expandAsDefinedDict;
static NamespaceDef *globalScope;
static QDict<RefList> *specialLists; // array of special lists: todo, test, bug, deprecated ...
......
......@@ -132,15 +132,13 @@ struct Grouping
enum GroupPri_t
{
GROUPING_LOWEST,
GROUPING_AUTO_WEAK =
GROUPING_LOWEST, //!< membership in group was defined via \@weakgroup \@{ \@}
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_AUTO_HIGHEST = GROUPING_AUTO_DEF,
GROUPING_INGROUP, //!< membership in group was defined by \@ingroup
GROUPING_HIGHEST =
GROUPING_INGROUP
GROUPING_HIGHEST = GROUPING_INGROUP
};
static const char *getGroupPriName( GroupPri_t priority )
......
......@@ -100,7 +100,7 @@ void FileDef::distributeMemberGroupDocumentation()
void FileDef::findSectionsInDocumentation()
{
docFindSections(documentation(),0,this,0);
docFindSections(documentation(),0,this,0,docFile());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
......
......@@ -106,7 +106,7 @@ void GroupDef::distributeMemberGroupDocumentation()
void GroupDef::findSectionsInDocumentation()
{
docFindSections(documentation(),0,this,0);
docFindSections(documentation(),0,this,0,docFile());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
......
......@@ -91,6 +91,8 @@ void HtmlDocVisitor::visit(DocSymbol *s)
case DocSymbol::Hash: m_t << "#"; break;
case DocSymbol::Percent: m_t << "%"; break;
case DocSymbol::Copy: m_t << "&copy;"; break;
case DocSymbol::Tm: m_t << "&tm;"; break;
case DocSymbol::Reg: m_t << "&reg;"; break;
case DocSymbol::Apos: m_t << "'"; break;
case DocSymbol::Quot: m_t << "\""; break;
case DocSymbol::Uml: m_t << "&" << s->letter() << "uml;"; break;
......@@ -364,11 +366,12 @@ void HtmlDocVisitor::visitPre(DocSimpleSect *s)
case DocSimpleSect::Attention:
m_t << theTranslator->trAttention(); break;
case DocSimpleSect::User: break;
case DocSimpleSect::Rcs: break;
case DocSimpleSect::Unknown: break;
}
// special case 1: user defined title
if (s->type()!=DocSimpleSect::User)
if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
{
m_t << ":</b></dt><dd>";
}
......@@ -644,9 +647,13 @@ void HtmlDocVisitor::visitPre(DocDotFile *df)
QString outDir = Config_getString("HTML_OUTPUT");
writeDotGraphFromFile(df->file(),outDir,baseName,BITMAP);
m_t << "<div align=\"center\">" << endl;
QString mapName = baseName+".map";
QString mapFile = df->file()+".map";
m_t << "<img src=\"" << baseName << "."
<< Config_getEnum("DOT_IMAGE_FORMAT") << "\" alt=\""
<< baseName << "\">" << endl;
<< baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl;
QString imap = getDotImageMapFromFile(df->file(),outDir);
m_t << "<map name=\"" << mapName << "\">" << imap << "</map>" << endl;
if (df->hasCaption())
{
m_t << "<p><strong>";
......
......@@ -117,6 +117,8 @@ void LatexDocVisitor::visit(DocSymbol *s)
case DocSymbol::Hash: m_t << "\\#"; break;
case DocSymbol::Percent: m_t << "\\%"; break;
case DocSymbol::Copy: m_t << "\\copyright"; break;
case DocSymbol::Tm: m_t << "\\texttrademark"; break;
case DocSymbol::Reg: m_t << "\\textregistered"; break;
case DocSymbol::Apos: m_t << "'"; break;
case DocSymbol::Quot: m_t << "''"; break;
case DocSymbol::Uml:
......@@ -406,11 +408,12 @@ void LatexDocVisitor::visitPre(DocSimpleSect *s)
case DocSimpleSect::Attention:
m_t << theTranslator->trAttention(); break;
case DocSimpleSect::User: break;
case DocSimpleSect::Rcs: break;
case DocSimpleSect::Unknown: break;
}
// special case 1: user defined title
if (s->type()!=DocSimpleSect::User)
if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
{
m_t << ":]";
}
......@@ -729,8 +732,13 @@ void LatexDocVisitor::visitPre(DocDotFile *df)
{
baseName=baseName.left(baseName.length()-4);
}
if (baseName.right(4)==".dot")
{
baseName=baseName.left(baseName.length()-4);
}
QString outDir = Config_getString("LATEX_OUTPUT");
writeDotGraphFromFile(df->file(),outDir,baseName,EPS);
QString name = df->file();
writeDotGraphFromFile(name,outDir,baseName,EPS);
if (df->hasCaption())
{
m_t << "\\begin{figure}[H]" << endl;
......
......@@ -246,6 +246,7 @@ static void writeDefaultHeaderPart1(QTextStream &t)
"\\usepackage{graphicx}\n"
"\\usepackage{multicol}\n"
"\\usepackage{float}\n"
"\\usepackage{textcomp}\n"
"\\usepackage{alltt}\n";
if (Config_getBool("PDF_HYPERLINKS"))
{
......
......@@ -80,7 +80,9 @@ void ManDocVisitor::visit(DocSymbol *s)
case DocSymbol::Dollar: m_t << "$"; break;
case DocSymbol::Hash: m_t << "#"; break;
case DocSymbol::Percent: m_t << "%"; break;
case DocSymbol::Copy: m_t << "(c)"; break;
case DocSymbol::Copy: m_t << "(C)"; break;
case DocSymbol::Tm: m_t << "(TM)"; break;
case DocSymbol::Reg: m_t << "(R)"; break;
case DocSymbol::Apos: m_t << "'"; break;
case DocSymbol::Quot: m_t << "''"; break;
case DocSymbol::Uml: m_t << s->letter() << "\\*(4"; break;
......@@ -379,11 +381,12 @@ void ManDocVisitor::visitPre(DocSimpleSect *s)
case DocSimpleSect::Attention:
m_t << theTranslator->trAttention(); break;
case DocSimpleSect::User: break;
case DocSimpleSect::Rcs: break;
case DocSimpleSect::Unknown: break;
}
// special case 1: user defined title
if (s->type()!=DocSimpleSect::User)
if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
{
m_t << ":\\fP" << endl;
m_t << ".RS 4" << endl;
......
......@@ -567,10 +567,11 @@ bool MemberDef::isBriefSectionVisible() const
// "", //getFileDef()->name().data(),
// argsString());
QCString *pMemGrp = Doxygen::memberDocDict[grpId];
MemberGroupInfo *info = Doxygen::memGrpInfoDict[grpId];
//QCString *pMemGrp = Doxygen::memberDocDict[grpId];
bool hasDocs = hasDocumentation() ||
// part of a documented member group
(grpId!=-1 && pMemGrp && !pMemGrp->isEmpty());
(grpId!=-1 && info && !info->doc.isEmpty());
// only include static members with file/namespace scope if
// explicitly enabled in the config file
......@@ -1969,6 +1970,6 @@ void MemberDef::setDeclArgumentList(ArgumentList *al)
void MemberDef::findSectionsInDocumentation()
{
docFindSections(documentation(),0,this,0);
docFindSections(documentation(),0,this,0,docFile());
}
......@@ -37,7 +37,7 @@
//}
MemberGroup::MemberGroup(Definition *parent,
int id,const char *hdr,const char *d) /* : Definition(idToName(id)) */
int id,const char *hdr,const char *d,const char *docFile)
{
//printf("New member group id=%d header=%s desc=%s\n",id,hdr,d);
memberList = new MemberList;
......@@ -49,6 +49,7 @@ MemberGroup::MemberGroup(Definition *parent,
inDeclSection = 0;
m_numDecMembers = -1;
m_parent = parent;
m_docFile = docFile;
//printf("Member group docs=`%s'\n",doc.data());
}
......@@ -216,7 +217,7 @@ void MemberGroup::addListReferences(Definition *def)
void MemberGroup::findSectionsInDocumentation()
{
docFindSections(doc,0,0,this);
docFindSections(doc,0,0,this,m_docFile);
memberList->findSectionsInDocumentation();
}
......@@ -36,7 +36,8 @@ class Definition;
class MemberGroup
{
public:
MemberGroup(Definition *parent,int id,const char *header,const char *docs);
MemberGroup(Definition *parent,int id,const char *header,
const char *docs,const char *docFile);
~MemberGroup();
QCString header() const { return grpHeader; }
int groupId() const { return grpId; }
......@@ -81,6 +82,7 @@ class MemberGroup
bool inSameSection;
int m_numDecMembers;
Definition *m_parent;
QCString m_docFile;
};
class MemberGroupList : public QList<MemberGroup>
......@@ -101,6 +103,13 @@ class MemberGroupSDict : public SIntDict<MemberGroup>
~MemberGroupSDict() {}
};
struct MemberGroupInfo
{
QCString header;
QCString doc;
QCString docFile;
};
//class MemberGroupDict : public QIntDict<MemberGroup>
//{
// public:
......
......@@ -103,65 +103,59 @@ void msg(const char *fmt, ...)
}
}
void warn(const char *file,int line,const char *fmt, ...)
static void do_warn(const char *tag, const char *file, int line, const char *fmt, va_list args)
{
if (Config_getBool("WARNINGS"))
if (!Config_getBool(tag)) return; // warning type disabled
char text[4096];
vsprintf(text, fmt, args);
if (file==0) file="<unknown>";
switch(warnFormatOrder)
{
if (file==0) file="<unknown>";
char text[4096];
va_list args;
va_start(args, fmt);
vsprintf(text, fmt, args);
va_end(args);
switch(warnFormatOrder)
{
case 1: fprintf(warnFile,outputFormat,file,line,text); break;
case 2: fprintf(warnFile,outputFormat,text,line,file); break;
case 3: fprintf(warnFile,outputFormat,line,text,file); break;
case 4: fprintf(warnFile,outputFormat,file,text,line); break;
case 5: fprintf(warnFile,outputFormat,text,file,line); break;
case 6: fprintf(warnFile,outputFormat,line,file,text); break;
default:
printf("Error: warning format has not been initialized!\n");
}
case 1: fprintf(warnFile,outputFormat,file,line,text); break;
case 2: fprintf(warnFile,outputFormat,text,line,file); break;
case 3: fprintf(warnFile,outputFormat,line,text,file); break;
case 4: fprintf(warnFile,outputFormat,file,text,line); break;
case 5: fprintf(warnFile,outputFormat,text,file,line); break;
case 6: fprintf(warnFile,outputFormat,line,file,text); break;
default:
printf("Error: warning format has not been initialized!\n");
}
}
void warn(const char *file,int line,const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
do_warn("WARNINGS", file, line, fmt, args);
va_end(args);
}
void warn_cont(const char *fmt, ...)
{
if (Config_getBool("WARNINGS"))
{
va_list args;
va_start(args, fmt);
vfprintf(warnFile, fmt, args);
va_end(args);
}
if (!Config_getBool("WARNINGS"))
return;
va_list args;
va_start(args, fmt);
vfprintf(warnFile, fmt, args);
va_end(args);
}
void warn_undoc(const char *file,int line,const char *fmt, ...)
{
if (Config_getBool("WARN_IF_UNDOCUMENTED"))
{
if (file==0) file="<unknwon>";
char text[4096];
va_list args;
va_start(args, fmt);
vsprintf(text, fmt, args);
va_end(args);
switch(warnFormatOrder)
{
case 1: fprintf(warnFile,outputFormat,file,line,text); break;
case 2: fprintf(warnFile,outputFormat,text,line,file); break;
case 3: fprintf(warnFile,outputFormat,line,text,file); break;
case 4: fprintf(warnFile,outputFormat,file,text,line); break;
case 5: fprintf(warnFile,outputFormat,text,file,line); break;
case 6: fprintf(warnFile,outputFormat,line,file,text); break;
default:
printf("Error: warning format has not been initialized!\n");
}
}
va_list args;
va_start(args, fmt);
do_warn("WARN_IF_UNDOCUMENTED", file, line, fmt, args);
va_end(args);
}
void warn_doc_error(const char *file,int line,const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
do_warn("WARN_IF_DOC_ERROR", file, line, fmt, args);
va_end(args);
}
void err(const char *fmt, ...)
{
va_list args;
......
......@@ -24,6 +24,7 @@ extern void msg(const char *fmt, ...);
extern void warn(const char *file,int line,const char *fmt, ...);
extern void warn_cont(const char *fmt, ...);
extern void warn_undoc(const char *file,int line,const char *fmt, ...);
extern void warn_doc_error(const char *file,int line,const char *fmt, ...);
extern void err(const char *fmt, ...);
void initWarningFormat();
......
......@@ -65,7 +65,7 @@ void NamespaceDef::distributeMemberGroupDocumentation()
void NamespaceDef::findSectionsInDocumentation()
{
docFindSections(documentation(),0,this,0);
docFindSections(documentation(),0,this,0,docFile());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
......
......@@ -80,7 +80,7 @@ class PageInfo
}
void findSectionsInDocumentation()
{
docFindSections(doc,this,0,0);
docFindSections(doc,this,0,0,defFileName);
}
void writeDocAnchorsToTagFile()
......
......@@ -542,6 +542,8 @@ void PerlModDocVisitor::visit(DocSymbol *sy)
case DocSymbol::Ring: accent = "ring"; break;
case DocSymbol::BSlash: s = "\\\\"; break;
case DocSymbol::Copy: symbol = "copyright"; break;
case DocSymbol::Tm: symbol = "trademark"; break;
case DocSymbol::Reg: symbol = "registered"; break;
case DocSymbol::Szlig: symbol = "szlig"; break;
case DocSymbol::Apos: s = "\\\'"; break;
case DocSymbol::Unknown:
......@@ -770,6 +772,7 @@ void PerlModDocVisitor::visitPre(DocSimpleSect *s)
case DocSimpleSect::Remark: type = "remark"; break;
case DocSimpleSect::Attention: type = "attention"; break;
case DocSimpleSect::User: type = "par"; break;
case DocSimpleSect::Rcs: type = "rcs"; break;
case DocSimpleSect::Unknown:
err("Error: unknown simple section found\n");
break;
......
......@@ -264,6 +264,7 @@ class PrintDocVisitor : public DocVisitor
case DocSimpleSect::Remark: printf("remark"); break;
case DocSimpleSect::Attention: printf("attention"); break;
case DocSimpleSect::User: printf("user"); break;
case DocSimpleSect::Rcs: printf("rcs"); break;
case DocSimpleSect::Unknown: printf("unknown"); break;
}
printf(">\n");
......
......@@ -95,7 +95,9 @@ void RTFDocVisitor::visit(DocSymbol *s)
case DocSymbol::Dollar: m_t << "$"; break;
case DocSymbol::Hash: m_t << "#"; break;
case DocSymbol::Percent: m_t << "%"; break;
case DocSymbol::Copy: m_t << "\251"; break;
case DocSymbol::Copy: m_t << "(C)"; break;
case DocSymbol::Tm: m_t << "(TM)"; break;
case DocSymbol::Reg: m_t << "(R)"; break;
case DocSymbol::Apos: m_t << "'"; break;
case DocSymbol::Quot: m_t << "\""; break;
case DocSymbol::Uml: switch(s->letter())
......@@ -295,7 +297,7 @@ void RTFDocVisitor::visit(DocVerbatim *s)
m_t << "{" << endl;
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
m_t << s->text();
filter(s->text());
m_t << "\\par" << endl;
m_t << "}" << endl;
break;
......@@ -349,7 +351,7 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "{" << endl;
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
m_t << inc->text();
filter(inc->text());
m_t << "\\par" << endl;
m_t << "}" << endl;
break;
......@@ -491,11 +493,12 @@ void RTFDocVisitor::visitPre(DocSimpleSect *s)
case DocSimpleSect::Attention:
m_t << theTranslator->trAttention(); break;
case DocSimpleSect::User: break;
case DocSimpleSect::Rcs: break;
case DocSimpleSect::Unknown: break;
}
// special case 1: user defined title
if (s->type()!=DocSimpleSect::User)
if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
{
m_t << ":}"; // end bold
m_t << "\\par" << endl;
......
......@@ -77,6 +77,7 @@ static int lastClassTemplSpecContext;
static int lastSkipHtmlCommentContext;
static int lastIfContext;
static int lastInternalDocContext;
static int lastPreLineCtrlContext;
static int nextDefContext;
static int overloadContext;
static Protection protection;
......@@ -448,7 +449,8 @@ static void setContext()
insideIDL = fileName.right(4)==".idl" || fileName.right(4)==".odl";
insideJava = fileName.right(5)==".java";
insideCS = fileName.right(3)==".cs";
insidePHP = fileName.right(4)==".php" || fileName.right(4)==".inc";
insidePHP = fileName.right(4)==".php" || fileName.right(5)==".php4" ||
fileName.right(4)==".inc";
if ( insidePHP )
{
useOverrideCommands = TRUE;
......@@ -1366,8 +1368,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->bodyLine = yyLineNr;
BEGIN( Define );
}
<FindMembers>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */
<FindMembers,ReadBody>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */
yyLineNr = atoi(&yytext[1]);
//printf("setting line number to %d\n",yyLineNr);
lastPreLineCtrlContext = YY_START;
BEGIN( PreLineCtrl );
}
<PreLineCtrl>"\""[^\n\"]*"\"" {
......@@ -1375,7 +1379,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<PreLineCtrl>. {}
<PreLineCtrl>\n {
BEGIN(FindMembers);
yyLineNr++;
BEGIN( lastPreLineCtrlContext );
}
<SkipCPP>.
<SkipCPP>\\[\r]*"\n"[\r]* { yyLineNr++ ; }
......@@ -1560,7 +1565,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN( Doc );
}
}
<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}"|"/*"([!*]?){B}*{CMD}"}"{B}*"*/" {
<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" {
if (memberGroupId==NOGROUP && autoGroupStack.isEmpty())
{
warn(yyFileName,yyLineNr,
......@@ -1851,7 +1856,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
/*
<FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); }
*/
<ReadBody>[^\r\n{}"'/]* { current->program += yytext ; }
<ReadBody>[^\r\n\#{}"'/]* { current->program += yytext ; }
<ReadBody>"//".* { current->program += yytext ; }
<ReadBody>\" { current->program += yytext ;
pCopyQuotedString = &current->program;
......@@ -3659,9 +3664,15 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
memberGroupDocs+="\n\n";
}
memberGroupDocs+=current->doc;
Doxygen::memberDocDict.insert(memberGroupId,
new QCString(memberGroupDocs)
);
//Doxygen::memberDocDict.insert(memberGroupId,
// new QCString(memberGroupDocs)
// );
MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(memberGroupId);
if (info)
{
info->doc = memberGroupDocs;
info->docFile = yyFileName;
}
current->doc.resize(0);
current->brief.resize(0);
BEGIN(lastDocContext);
......@@ -4583,9 +4594,13 @@ static void startGroup()
memberGroupHeader="[NOHEADER]";
}
memberGroupId = newMemberGroupId();
Doxygen::memberHeaderDict.insert(memberGroupId,
new QCString(memberGroupHeader.stripWhiteSpace())
);
MemberGroupInfo *info = new MemberGroupInfo;
info->header = memberGroupHeader.stripWhiteSpace();
Doxygen::memGrpInfoDict.insert(memberGroupId,info);
//Doxygen::memberHeaderDict.insert(memberGroupId,
// new QCString(memberGroupHeader.stripWhiteSpace())
// );
memberGroupRelates = current->relates.copy();
memberGroupInside = current->inside.copy();
current->mGrpId = memberGroupId;
......@@ -4609,9 +4624,12 @@ static void startGroupInDoc()
// endGroup();
//}
memberGroupId = newMemberGroupId();
Doxygen::memberHeaderDict.insert(memberGroupId,
new QCString(memberGroupHeader.stripWhiteSpace())
);
MemberGroupInfo *info = new MemberGroupInfo;
info->header = memberGroupHeader.stripWhiteSpace();
Doxygen::memGrpInfoDict.insert(memberGroupId,info);
//Doxygen::memberHeaderDict.insert(memberGroupId,
// new QCString(memberGroupHeader.stripWhiteSpace())
// );
memberGroupRelates = current->relates.copy();
memberGroupInside = current->inside.copy();
current->mGrpId = memberGroupId;
......@@ -4627,9 +4645,15 @@ static void endGroup()
{
if (memberGroupId!=NOGROUP) // end of member group
{
Doxygen::memberDocDict.insert(memberGroupId,
new QCString(memberGroupDocs)
);
//Doxygen::memberDocDict.insert(memberGroupId,
// new QCString(memberGroupDocs)
// );
MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(memberGroupId);
if (info)
{
info->doc = memberGroupDocs;
info->docFile = yyFileName;
}
memberGroupId=NOGROUP;
memberGroupRelates.resize(0);
memberGroupInside.resize(0);
......
......@@ -19,6 +19,7 @@
*
* Revision history
*
* 2002/11: translated new items used since version 1.2.18
* 2002/08: translated new items used since version 1.2.17
* 2002/07: translated new items used since version 1.2.16
* 2002/06: modified trRelatedPagesDescription() method
......@@ -57,7 +58,7 @@
*
* Il plurale dei termini inglesi non tradotti è stato reso con il singolare
* della parola inglese secondo una convenzione spesso ritrovata nella documentazione
* tecnica (ad es "lista dei file" e non "lista dei files")
* tecnica (ad es. "lista dei file" e non "lista dei files")
*
* Se avete suggerimenti sulla traduzione di alcuni termini o volete segnalare
* eventuali sviste potete scrivermi all'indirizzo: alessandro@falappa.net
......@@ -66,7 +67,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
class TranslatorItalian : public TranslatorAdapter_1_2_18
class TranslatorItalian : public Translator
{
public:
......@@ -1370,6 +1371,24 @@ class TranslatorItalian : public TranslatorAdapter_1_2_18
{
return "Lista degli elementi deprecati";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.18
//////////////////////////////////////////////////////////////////////////
/*! Used as a header for declaration section of the events found in
* a C# program
*/
virtual QCString trEvents()
{
return "Eventi";
}
/*! Header used for the documentation section of a class' events. */
virtual QCString trEventDocumentation()
{
return "Documentazione degli eventi";
}
};
#endif
......@@ -3132,7 +3132,8 @@ const char *getOverloadDocs()
}
void addMembersToMemberGroup(MemberList *ml,
MemberGroupSDict *memberGroupSDict,Definition *context)
MemberGroupSDict *memberGroupSDict,
Definition *context)
{
//printf("addMemberToMemberGroup()\n");
MemberListIterator mli(*ml);
......@@ -3151,14 +3152,21 @@ void addMembersToMemberGroup(MemberList *ml,
int groupId=fmd->getMemberGroupId();
if (groupId!=-1)
{
QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId];
QCString *pDocs = Doxygen::memberDocDict[groupId];
if (pGrpHeader)
MemberGroupInfo *info = Doxygen::memGrpInfoDict[groupId];
//QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId];
//QCString *pDocs = Doxygen::memberDocDict[groupId];
if (info)
{
MemberGroup *mg = memberGroupSDict->find(groupId);
if (mg==0)
{
mg = new MemberGroup(context,groupId,*pGrpHeader,pDocs ? pDocs->data() : 0);
mg = new MemberGroup(
context,
groupId,
info->header,
info->doc,
info->docFile
);
memberGroupSDict->append(groupId,mg);
}
mg->insertMember(context,fmd); // insert in member group
......@@ -3172,14 +3180,21 @@ void addMembersToMemberGroup(MemberList *ml,
int groupId=md->getMemberGroupId();
if (groupId!=-1)
{
QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId];
QCString *pDocs = Doxygen::memberDocDict[groupId];
if (pGrpHeader)
MemberGroupInfo *info = Doxygen::memGrpInfoDict[groupId];
//QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId];
//QCString *pDocs = Doxygen::memberDocDict[groupId];
if (info)
{
MemberGroup *mg = memberGroupSDict->find(groupId);
if (mg==0)
{
mg = new MemberGroup(context,groupId,*pGrpHeader,pDocs ? pDocs->data() : 0);
mg = new MemberGroup(
context,
groupId,
info->header,
info->doc,
info->docFile
);
memberGroupSDict->append(groupId,mg);
}
md = ml->take(index); // remove from member list
......
......@@ -76,6 +76,8 @@ void XmlDocVisitor::visit(DocSymbol *s)
case DocSymbol::Hash: m_t << "#"; break;
case DocSymbol::Percent: m_t << "%"; break;
case DocSymbol::Copy: m_t << "<copy/>"; break;
case DocSymbol::Tm: m_t << "<trademark/>"; break;
case DocSymbol::Reg: m_t << "<registered/>"; break;
case DocSymbol::Apos: m_t << "'"; break;
case DocSymbol::Quot: m_t << "\""; break;
case DocSymbol::Uml: m_t << "<umlaut char=\"" << s->letter() << "\"/>"; break;
......@@ -334,7 +336,7 @@ void XmlDocVisitor::visitPre(DocSimpleSect *s)
case DocSimpleSect::Date:
m_t << "date"; break;
case DocSimpleSect::Note:
m_t << "bug"; break;
m_t << "note"; break;
case DocSimpleSect::Warning:
m_t << "warning"; break;
case DocSimpleSect::Pre:
......@@ -349,6 +351,8 @@ void XmlDocVisitor::visitPre(DocSimpleSect *s)
m_t << "attention"; break;
case DocSimpleSect::User:
m_t << "par"; break;
case DocSimpleSect::Rcs:
m_t << "rcs"; break;
case DocSimpleSect::Unknown: break;
}
m_t << "\">";
......
......@@ -479,6 +479,8 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
case Protected: t << "protected"; break;
case Private: t << "private"; break;
}
t << "\" static=\"";
if (md->isStatic()) t << "yes"; else t << "no";
t << "\"";
if (isFunc)
......
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