Commit 04dd14e8 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3-rc2-20021224

parent 1a8ff6f0
DOXYGEN Version 1.3-rc2 DOXYGEN Version 1.3-rc2-20021224
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (16 December 2002) Dimitri van Heesch (24 December 2002)
DOXYGEN Version 1.3_rc2 DOXYGEN Version 1.3_rc2_20021224
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (16 December 2002) Dimitri van Heesch (dimitri@stack.nl) (24 December 2002)
1.3-rc2 1.3-rc2-20021224
...@@ -62,7 +62,8 @@ PREDEFINED = MY_MACRO()= ...@@ -62,7 +62,8 @@ PREDEFINED = MY_MACRO()=
manual for more information. manual for more information.
</ol> </ol>
<li><b>When I set EXTRACT_ALL to NO none of my functions are shown in the documentation.</b></li> <li><b>When I set EXTRACT_ALL to NO none of my functions are shown in the
documentation.</b></li>
In order for global functions, variables, enums, typedefs, and defines In order for global functions, variables, enums, typedefs, and defines
to be documented you should document the file in which these commands are to be documented you should document the file in which these commands are
...@@ -72,6 +73,9 @@ command. ...@@ -72,6 +73,9 @@ command.
Alternatively, you can put all members in a group (or module) Alternatively, you can put all members in a group (or module)
using the \\ingroup command and then document the group using a comment using the \\ingroup command and then document the group using a comment
block containing the \\defgroup command. block containing the \\defgroup command.
For member functions or functions that are part of a namespace you should
document either the class or namespace.
<li><b>How can I make doxygen ignore some code fragment?</b> <li><b>How can I make doxygen ignore some code fragment?</b>
<p> <p>
......
...@@ -181,8 +181,9 @@ Thanks go to: ...@@ -181,8 +181,9 @@ Thanks go to:
All language maintainers for providing translations into many languages. All language maintainers for providing translations into many languages.
<li>Erik Jan Lingen of <a href="http://www.habanera.nl/">Habanera</a>, Mark <li>Erik Jan Lingen of <a href="http://www.habanera.nl/">Habanera</a>, Mark
Roddy, Paul Schwartz, Charles Duffy, Vadym Voznyuk, Philip Walton, Roddy, Paul Schwartz, Charles Duffy, Vadym Voznyuk, Philip Walton,
Dwight Browne, Andreas Fredriksson, Karel Lindveld, and Ivan Lee Dwight Browne, Andreas Fredriksson, Karel Lindveld, Ivan Lee, Albert
for donating money. Vernon, Adam McKee, Vijapurapu Anatharac, Ben Hunsberger and
Walter Wartenweiler for donating money.
<li>The Comms group of <a href="http://www.symbian.com">Symbian</a> for donating <li>The Comms group of <a href="http://www.symbian.com">Symbian</a> for donating
an ultra cool <a href="http://www.psion.com/revoplus">Revo plus</a> an ultra cool <a href="http://www.psion.com/revoplus">Revo plus</a>
organizer! organizer!
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3_rc2 Version: 1.3_rc2_20021224
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -41,7 +41,7 @@ static void replaceCommentMarker(const char *s,int len) ...@@ -41,7 +41,7 @@ static void replaceCommentMarker(const char *s,int len)
p++; p++;
} }
// replace start of comment marker by spaces // replace start of comment marker by spaces
while ((c=*p) && (c=='/' || c=='!')) while ((c=*p) && (c=='/' || c=='!' || c=='#'))
{ {
g_outBuf->addChar(' '); g_outBuf->addChar(' ');
p++; p++;
...@@ -109,6 +109,12 @@ static int yyread(char *buf,int max_size) ...@@ -109,6 +109,12 @@ static int yyread(char *buf,int max_size)
copyToOutput(yytext+i,yyleng-i); copyToOutput(yytext+i,yyleng-i);
BEGIN(SComment); BEGIN(SComment);
} }
<Scan>"//##Documentation".*\n { /* Start of Rational Rose ANSI C++ comment block */
int i=17; //=strlen("//##Documentation");
copyToOutput("/**",3);
copyToOutput(yytext+i,yyleng-i);
BEGIN(SComment);
}
<Scan>"//".*\n { /* one line C++ comment */ <Scan>"//".*\n { /* one line C++ comment */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
...@@ -180,6 +186,12 @@ static int yyread(char *buf,int max_size) ...@@ -180,6 +186,12 @@ static int yyread(char *buf,int max_size)
<SComment>\n[ \t]*"//!".*/\n { <SComment>\n[ \t]*"//!".*/\n {
replaceCommentMarker(yytext,yyleng); replaceCommentMarker(yytext,yyleng);
} }
<SComment>^[ \t]*"//##".*/\n {
replaceCommentMarker(yytext,yyleng);
}
<SComment>\n[ \t]*"//##".*/\n {
replaceCommentMarker(yytext,yyleng);
}
<SComment>\n { /* end of special comment */ <SComment>\n { /* end of special comment */
copyToOutput(" */",3); copyToOutput(" */",3);
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
......
...@@ -620,6 +620,28 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli) ...@@ -620,6 +620,28 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
} }
} }
void Definition::mergeRefItems(Definition *d)
{
if (d->specialListItems())
{
// deep copy the list
if (m_specialListItems==0)
{
m_specialListItems=new QList<ListItemInfo>;
m_specialListItems->setAutoDelete(TRUE);
}
QListIterator<ListItemInfo> slii(*d->specialListItems());
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
if (getSpecialListId(lii->type)==-1)
{
m_specialListItems->append(new ListItemInfo(*lii));
}
}
}
}
int Definition::getSpecialListId(const char *listName) const int Definition::getSpecialListId(const char *listName) const
{ {
if (m_specialListItems) if (m_specialListItems)
......
...@@ -113,6 +113,7 @@ class Definition ...@@ -113,6 +113,7 @@ class Definition
//int testId() const { return m_testId; } //int testId() const { return m_testId; }
//int bugId() const { return m_bugId; } //int bugId() const { return m_bugId; }
void setRefItems(const QList<ListItemInfo> *sli); void setRefItems(const QList<ListItemInfo> *sli);
void mergeRefItems(Definition *d);
int getSpecialListId(const char *listName) const; int getSpecialListId(const char *listName) const;
const QList<ListItemInfo> *specialListItems() const; const QList<ListItemInfo> *specialListItems() const;
......
This diff is collapsed.
...@@ -283,6 +283,7 @@ class DocStyleChange : public DocNode ...@@ -283,6 +283,7 @@ class DocStyleChange : public DocNode
{ if (attribs) m_attribs=*attribs; } { if (attribs) m_attribs=*attribs; }
Kind kind() const { return Kind_StyleChange; } Kind kind() const { return Kind_StyleChange; }
Style style() const { return m_style; } Style style() const { return m_style; }
const char *styleString() const;
bool enable() const { return m_enable; } bool enable() const { return m_enable; }
uint position() const { return m_position; } uint position() const { return m_position; }
DocNode *parent() const { return m_parent; } DocNode *parent() const { return m_parent; }
......
...@@ -162,26 +162,27 @@ static void parseHtmlAttribs(const char *att) ...@@ -162,26 +162,27 @@ static void parseHtmlAttribs(const char *att)
while (i<len && c==' ') { c=attribs.at(++i); } while (i<len && c==' ') { c=attribs.at(++i); }
if (attribs.at(i)=='=') // option has value if (attribs.at(i)=='=') // option has value
{ {
i++; c=attribs.at(++i);
// skip spaces // skip spaces
while (i<len && c==' ') { c=attribs.at(++i); } while (i<len && c==' ') { c=attribs.at(++i); }
if (attribs.at(i)=='\'') // option '...' if (attribs.at(i)=='\'') // option '...'
{ {
i++; c=attribs.at(++i);
startAttrib=i; startAttrib=i;
// search for matching quote // search for matching quote
while (i<len && c!='\'') { c=attribs.at(++i); } while (i<len && c!='\'') { c=attribs.at(++i); }
endAttrib=i; endAttrib=i;
i++; c=attribs.at(++i);
} }
else if (attribs.at(i)=='"') // option "..." else if (attribs.at(i)=='"') // option "..."
{ {
i++; c=attribs.at(++i);
startAttrib=i; startAttrib=i;
// search for matching quote // search for matching quote
while (i<len && c!='"') { c=attribs.at(++i); } while (i<len && c!='"') { c=attribs.at(++i); }
endAttrib=i; endAttrib=i;
i++; c=attribs.at(++i);
} }
else // value without any quotes else // value without any quotes
{ {
...@@ -189,7 +190,7 @@ static void parseHtmlAttribs(const char *att) ...@@ -189,7 +190,7 @@ static void parseHtmlAttribs(const char *att)
// search for separator // search for separator
while (i<len && c!=' ') { c=attribs.at(++i); } while (i<len && c!=' ') { c=attribs.at(++i); }
endAttrib=i; endAttrib=i;
i++; c=attribs.at(++i);
} }
opt.value = attribs.mid(startAttrib,endAttrib-startAttrib); opt.value = attribs.mid(startAttrib,endAttrib-startAttrib);
} }
...@@ -378,7 +379,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -378,7 +379,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
g_token->isEMailAddr=FALSE; g_token->isEMailAddr=FALSE;
return TK_URL; return TK_URL;
} }
<St_Para>[a-z_A-Z0-9.-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-])+[a-z_A-Z0-9\-]+ { // Mail address <St_Para>[a-z_A-Z0-9.-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ { // Mail address
g_token->name=yytext; g_token->name=yytext;
g_token->isEMailAddr=TRUE; g_token->isEMailAddr=TRUE;
return TK_URL; return TK_URL;
...@@ -598,7 +599,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -598,7 +599,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
return 0; return 0;
} }
<St_Ref>{ID} { <St_Ref>({ID}[.-])*{ID} {
g_token->name=yytext; g_token->name=yytext;
return TK_WORD; return TK_WORD;
} }
......
...@@ -2524,8 +2524,8 @@ static void transferFunctionDocumentation() ...@@ -2524,8 +2524,8 @@ static void transferFunctionDocumentation()
// mdec->setGroupDef(mdef->getGroupDef(),mdef->getGroupPri(),mdef->docFile(),mdef->docLine(),mdef->hasDocumentation()); // mdec->setGroupDef(mdef->getGroupDef(),mdef->getGroupPri(),mdef->docFile(),mdef->docLine(),mdef->hasDocumentation());
//} //}
mdec->setRefItems(mdef->specialListItems()); mdec->mergeRefItems(mdef);
mdef->setRefItems(mdec->specialListItems()); mdef->mergeRefItems(mdec);
mdef->setMemberDeclaration(mdec); mdef->setMemberDeclaration(mdec);
mdec->setMemberDefinition(mdef); mdec->setMemberDefinition(mdef);
......
...@@ -166,7 +166,7 @@ void HtmlDocVisitor::visit(DocStyleChange *s) ...@@ -166,7 +166,7 @@ void HtmlDocVisitor::visit(DocStyleChange *s)
else else
{ {
m_insidePre=FALSE; m_insidePre=FALSE;
m_t << "</pre>\n"; m_t << "</pre>";
} }
} }
} }
...@@ -279,24 +279,26 @@ void HtmlDocVisitor::visitPre(DocAutoList *l) ...@@ -279,24 +279,26 @@ void HtmlDocVisitor::visitPre(DocAutoList *l)
{ {
if (l->isEnumList()) if (l->isEnumList())
{ {
m_t << "<ol>\n"; m_t << "<ol>";
} }
else else
{ {
m_t << "<ul>\n"; m_t << "<ul>";
} }
if (!l->isPreformatted()) m_t << "\n";
} }
void HtmlDocVisitor::visitPost(DocAutoList *l) void HtmlDocVisitor::visitPost(DocAutoList *l)
{ {
if (l->isEnumList()) if (l->isEnumList())
{ {
m_t << "</ol>\n"; m_t << "</ol>";
} }
else else
{ {
m_t << "</ul>\n"; m_t << "</ul>";
} }
if (!l->isPreformatted()) m_t << "\n";
} }
void HtmlDocVisitor::visitPre(DocAutoListItem *) void HtmlDocVisitor::visitPre(DocAutoListItem *)
...@@ -318,8 +320,11 @@ void HtmlDocVisitor::visitPost(DocPara *p) ...@@ -318,8 +320,11 @@ void HtmlDocVisitor::visitPost(DocPara *p)
if (!p->isLast() && // omit <p> for last paragraph if (!p->isLast() && // omit <p> for last paragraph
!(p->parent() && // and for parameter sections !(p->parent() && // and for parameter sections
p->parent()->kind()==DocNode::Kind_ParamSect p->parent()->kind()==DocNode::Kind_ParamSect
) )
) m_t << "\n<p>\n"; )
{
m_t << "<p>";
}
} }
void HtmlDocVisitor::visitPre(DocRoot *) void HtmlDocVisitor::visitPre(DocRoot *)
...@@ -391,14 +396,16 @@ void HtmlDocVisitor::visitPost(DocTitle *) ...@@ -391,14 +396,16 @@ void HtmlDocVisitor::visitPost(DocTitle *)
m_t << "</b></dt><dd>"; m_t << "</b></dt><dd>";
} }
void HtmlDocVisitor::visitPre(DocSimpleList *) void HtmlDocVisitor::visitPre(DocSimpleList *sl)
{ {
m_t << "<ul>\n"; m_t << "<ul>";
if (!sl->isPreformatted()) m_t << "\n";
} }
void HtmlDocVisitor::visitPost(DocSimpleList *) void HtmlDocVisitor::visitPost(DocSimpleList *sl)
{ {
m_t << "</ul>\n"; m_t << "</ul>";
if (!sl->isPreformatted()) m_t << "\n";
} }
void HtmlDocVisitor::visitPre(DocSimpleListItem *) void HtmlDocVisitor::visitPre(DocSimpleListItem *)
...@@ -406,9 +413,10 @@ void HtmlDocVisitor::visitPre(DocSimpleListItem *) ...@@ -406,9 +413,10 @@ void HtmlDocVisitor::visitPre(DocSimpleListItem *)
m_t << "<li>"; m_t << "<li>";
} }
void HtmlDocVisitor::visitPost(DocSimpleListItem *) void HtmlDocVisitor::visitPost(DocSimpleListItem *li)
{ {
m_t << "</li>\n"; m_t << "</li>";
if (!li->isPreformatted()) m_t << "\n";
} }
void HtmlDocVisitor::visitPre(DocSection *s) void HtmlDocVisitor::visitPre(DocSection *s)
...@@ -435,14 +443,16 @@ void HtmlDocVisitor::visitPre(DocHtmlList *s) ...@@ -435,14 +443,16 @@ void HtmlDocVisitor::visitPre(DocHtmlList *s)
void HtmlDocVisitor::visitPost(DocHtmlList *s) void HtmlDocVisitor::visitPost(DocHtmlList *s)
{ {
if (s->type()==DocHtmlList::Ordered) if (s->type()==DocHtmlList::Ordered)
m_t << "</ol>\n"; m_t << "</ol>";
else else
m_t << "</ul>\n"; m_t << "</ul>";
if (!s->isPreformatted()) m_t << "\n";
} }
void HtmlDocVisitor::visitPre(DocHtmlListItem *i) void HtmlDocVisitor::visitPre(DocHtmlListItem *i)
{ {
m_t << "<li" << htmlAttribsToString(i->attribs()) << ">\n"; m_t << "<li" << htmlAttribsToString(i->attribs()) << ">";
if (!i->isPreformatted()) m_t << "\n";
} }
void HtmlDocVisitor::visitPost(DocHtmlListItem *) void HtmlDocVisitor::visitPost(DocHtmlListItem *)
......
...@@ -706,6 +706,11 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -706,6 +706,11 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
QCString cname = d->name(); QCString cname = d->name();
QCString cfname = d->getOutputFileBase(); QCString cfname = d->getOutputFileBase();
QCString osname = cname;
// in case of class members that are put in a group the name of the outerscope
// differs from the cname.
if (getOuterScope()) osname=getOuterScope()->name();
HtmlHelp *htmlHelp=0; HtmlHelp *htmlHelp=0;
bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP");
...@@ -926,7 +931,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -926,7 +931,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
!annMemb) !annMemb)
{ {
ol.startMemberDescription(); ol.startMemberDescription();
ol.parseDoc(briefFile(),briefLine(),cname,this,briefDescription(),FALSE); ol.parseDoc(briefFile(),briefLine(),osname,this,briefDescription(),FALSE);
if (detailsVisible) if (detailsVisible)
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
...@@ -1590,8 +1595,8 @@ void MemberDef::warnIfUndocumented() ...@@ -1590,8 +1595,8 @@ void MemberDef::warnIfUndocumented()
(prot!=Private || Config_getBool("EXTRACT_PRIVATE")) (prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
) )
{ {
warn_undoc(m_defFileName,m_defLine,"Warning: Member %s of %s %s is not documented.", warn_undoc(m_defFileName,m_defLine,"Warning: Member %s%s of %s %s is not documented.",
name().data(),t,d->name().data()); name().data(),argsString()?argsString():"",t,d->name().data());
} }
} }
......
...@@ -442,7 +442,7 @@ void loadStylesheet(const char *name, QDict<StyleData>& dict) ...@@ -442,7 +442,7 @@ void loadStylesheet(const char *name, QDict<StyleData>& dict)
{ {
QCString s(4096); // string buffer of max line length QCString s(4096); // string buffer of max line length
s = t.readLine().stripWhiteSpace(); s = t.readLine().stripWhiteSpace();
if (s.length()==0 || s.at(0)=='#') continue; // skip blanks & comments if (s.isEmpty() || s.at(0)=='#') continue; // skip blanks & comments
int sepLength; int sepLength;
int sepStart = separator.match(s,0,&sepLength); int sepStart = separator.match(s,0,&sepLength);
if (sepStart<=0) // no valid assignment statement if (sepStart<=0) // no valid assignment statement
......
...@@ -851,11 +851,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -851,11 +851,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<FindMembers>{BN}{1,80} { <FindMembers>{BN}{1,80} {
lineCount(); lineCount();
} }
<FindMembers>{B}*"package"{BN}+ { // Java package
lineCount();
BEGIN(PackageName);
}
<PackageName>{ID}("."{ID})* { <PackageName>{ID}("."{ID})* {
//current->name = yytext; //current->name = yytext;
//current->fileName = yyFileName; //current->fileName = yyFileName;
...@@ -1284,6 +1279,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1284,6 +1279,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
else // insideJava else // insideJava
BEGIN(JavaImport); BEGIN(JavaImport);
} }
else if (insideJava && strcmp(yytext,"package")==0)
{
lineCount();
BEGIN(PackageName);
}
else if (insideIDL && strcmp(yytext,"case")==0) else if (insideIDL && strcmp(yytext,"case")==0)
{ {
BEGIN(IDLUnionCase); BEGIN(IDLUnionCase);
...@@ -1913,7 +1913,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1913,7 +1913,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current = new Entry(*current); current = new Entry(*current);
if (current->section==Entry::NAMESPACE_SEC || if (current->section==Entry::NAMESPACE_SEC ||
current->section==Entry::INTERFACE_SEC || current->section==Entry::INTERFACE_SEC ||
insideJava insideJava || insidePHP
) )
{ // namespaces and interfaces and java classes ends with a closing bracket without semicolon { // namespaces and interfaces and java classes ends with a closing bracket without semicolon
current->reset(); current->reset();
......
...@@ -101,7 +101,7 @@ class TranslatorGerman : public Translator ...@@ -101,7 +101,7 @@ class TranslatorGerman : public Translator
{ {
QCString result="\\usepackage{ngerman}\n"; QCString result="\\usepackage{ngerman}\n";
result+="\\usepackage{t1enc}% Trennung verbessern bei Umlauten\n"; result+="\\usepackage{t1enc}% Trennung verbessern bei Umlauten\n";
result+="%\\usepackage[latin1]{inputenc}% Kodierung (cp850,latin1,ansinew)"; result+="%\\usepackage[latin1]{inputenc}% Kodierung (cp850,latin1,ansinew)\n";
return result; return result;
} }
......
...@@ -669,25 +669,25 @@ class TranslatorEnglish : public Translator ...@@ -669,25 +669,25 @@ class TranslatorEnglish : public Translator
} }
virtual QCString trPublicMembers() virtual QCString trPublicMembers()
{ return "Public Methods"; } { return "Public Member Functions"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
{ return "Public Slots"; } { return "Public Slots"; }
virtual QCString trSignals() virtual QCString trSignals()
{ return "Signals"; } { return "Signals"; }
virtual QCString trStaticPublicMembers() virtual QCString trStaticPublicMembers()
{ return "Static Public Methods"; } { return "Static Public Member Functions"; }
virtual QCString trProtectedMembers() virtual QCString trProtectedMembers()
{ return "Protected Methods"; } { return "Protected Member Functions"; }
virtual QCString trProtectedSlots() virtual QCString trProtectedSlots()
{ return "Protected Slots"; } { return "Protected Slots"; }
virtual QCString trStaticProtectedMembers() virtual QCString trStaticProtectedMembers()
{ return "Static Protected Methods"; } { return "Static Protected Member Functions"; }
virtual QCString trPrivateMembers() virtual QCString trPrivateMembers()
{ return "Private Methods"; } { return "Private Member Functions"; }
virtual QCString trPrivateSlots() virtual QCString trPrivateSlots()
{ return "Private Slots"; } { return "Private Slots"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Static Private Methods"; } { return "Static Private Member Functions"; }
/*! this function is used to produce a comma-separated list of items. /*! this function is used to produce a comma-separated list of items.
* use generateMarker(i) to indicate where item i should be put. * use generateMarker(i) to indicate where item i should be put.
...@@ -1126,7 +1126,7 @@ class TranslatorEnglish : public Translator ...@@ -1126,7 +1126,7 @@ class TranslatorEnglish : public Translator
/*! Used as a section header for KDE-2 IDL methods */ /*! Used as a section header for KDE-2 IDL methods */
virtual QCString trDCOPMethods() virtual QCString trDCOPMethods()
{ {
return "DCOP Methods"; return "DCOP Member Functions";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
......
...@@ -1414,7 +1414,23 @@ private: ...@@ -1414,7 +1414,23 @@ private:
{ {
return decode( "Spisak zastarelih funkcija èlanica" ); return decode( "Spisak zastarelih funkcija èlanica" );
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.18
//////////////////////////////////////////////////////////////////////////
/*! Used as a header for declaration section of the events found in
* a C# program
*/
virtual QCString trEvents()
{
return "Dogaðaji";
}
/*! Header used for the documentation section of a class' events. */
virtual QCString trEventDocumentation()
{
return "Dokumentacija dogaðaja";
}
}; };
#endif #endif
......
...@@ -317,15 +317,16 @@ QCString generateMarker(int id) ...@@ -317,15 +317,16 @@ QCString generateMarker(int id)
*/ */
QCString stripFromPath(const QCString &path) QCString stripFromPath(const QCString &path)
{ {
const char *s=Config_getList("STRIP_FROM_PATH").first(); QStrList &l = Config_getList("STRIP_FROM_PATH");
const char *s=l.first();
while (s) while (s)
{ {
QCString prefix = s; QCString prefix = s;
if (path.left(prefix.length())==prefix) if (stricmp(path.left(prefix.length()),prefix)==0) // case insensitive compare
{ {
return path.right(path.length()-prefix.length()); return path.right(path.length()-prefix.length());
} }
s = Config_getList("STRIP_FROM_PATH").next(); s = l.next();
} }
return path; return path;
} }
...@@ -1687,11 +1688,11 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA, ...@@ -1687,11 +1688,11 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA,
return FALSE; // more than a difference in name -> no match return FALSE; // more than a difference in name -> no match
} }
} }
else // maybe dst has a name while src has not else // maybe dst has a name while src has not
{ {
dstPos++; dstPos++;
while (dstPos<dstAType.length() && isId(dstAType.at(dstPos))) dstPos++; while (dstPos<dstAType.length() && isId(dstAType.at(dstPos))) dstPos++;
if (dstPos!=dstAType.length()) if (dstPos!=dstAType.length() || !srcA->name.isEmpty())
{ {
NOMATCH NOMATCH
return FALSE; // nope not a name -> no match return FALSE; // nope not a name -> no match
...@@ -1718,13 +1719,17 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA, ...@@ -1718,13 +1719,17 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA,
{ {
srcPos++; srcPos++;
while (srcPos<srcAType.length() && isId(srcAType.at(srcPos))) srcPos++; while (srcPos<srcAType.length() && isId(srcAType.at(srcPos))) srcPos++;
if (srcPos!=srcAType.length()) if (srcPos!=srcAType.length() || !dstA->name.isEmpty())
{ {
NOMATCH NOMATCH
return FALSE; // nope not a name -> no match return FALSE; // nope not a name -> no match
} }
} }
} }
else
{
printf("something else!\n");
}
} }
MATCH MATCH
return TRUE; return TRUE;
...@@ -2574,8 +2579,6 @@ bool resolveLink(/* in */ const char *scName, ...@@ -2574,8 +2579,6 @@ bool resolveLink(/* in */ const char *scName,
/* out */ QCString &resAnchor /* out */ QCString &resAnchor
) )
{ {
//printf("resolveLink clName=`%s' lr=`%s'\n",scName,lr);
*resContext=0; *resContext=0;
*resPageInfo=0; *resPageInfo=0;
...@@ -2583,6 +2586,8 @@ bool resolveLink(/* in */ const char *scName, ...@@ -2583,6 +2586,8 @@ bool resolveLink(/* in */ const char *scName,
FileDef *fd; FileDef *fd;
GroupDef *gd; GroupDef *gd;
PageInfo *pi; PageInfo *pi;
ClassDef *cd;
NamespaceDef *nd;
bool ambig; bool ambig;
if (linkRef.isEmpty()) // no reference name! if (linkRef.isEmpty()) // no reference name!
{ {
...@@ -2620,7 +2625,17 @@ bool resolveLink(/* in */ const char *scName, ...@@ -2620,7 +2625,17 @@ bool resolveLink(/* in */ const char *scName,
*resContext=fd; *resContext=fd;
return TRUE; return TRUE;
} }
else // probably a class or member reference else if ((cd=getClass(linkRef)))
{
*resContext=cd;
return TRUE;
}
else if ((nd=Doxygen::namespaceSDict.find(linkRef)))
{
*resContext=nd;
return TRUE;
}
else // probably a member reference
{ {
MemberDef *md; MemberDef *md;
bool res = resolveRef(scName,lr,inSeeBlock,resContext,&md); bool res = resolveRef(scName,lr,inSeeBlock,resContext,&md);
......
...@@ -58,7 +58,16 @@ inline void writeXMLCodeString(QTextStream &t,const char *s) ...@@ -58,7 +58,16 @@ inline void writeXMLCodeString(QTextStream &t,const char *s)
char c; char c;
while ((c=*s++)) while ((c=*s++))
{ {
if (c==' ') t << "<sp/>"; else t << c; switch(c)
{
case ' ': t << "<sp/>"; break;
case '<': t << "&lt;"; break;
case '>': t << "&gt;"; break;
case '&': t << "&amp;"; break;
case '\'': t << "&apos;"; break;
case '"': t << "&quot;"; break;
default: t << c; break;
}
} }
} }
...@@ -367,7 +376,7 @@ static void writeXMLDocBlock(QTextStream &t, ...@@ -367,7 +376,7 @@ static void writeXMLDocBlock(QTextStream &t,
QCString stext = text.stripWhiteSpace(); QCString stext = text.stripWhiteSpace();
if (stext.isEmpty()) return; if (stext.isEmpty()) return;
// convert the documentation string into an abstract syntax tree // convert the documentation string into an abstract syntax tree
DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,stext,FALSE); DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text+"\n",FALSE);
// create a code generator // create a code generator
XMLCodeGenerator *xmlCodeGen = new XMLCodeGenerator(t); XMLCodeGenerator *xmlCodeGen = new XMLCodeGenerator(t);
// create a parse tree visitor for XML // create a parse tree visitor for XML
......
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