Commit 8b0ae7ca authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.4.6-20060202

parent e6060ed2
DOXYGEN Version 1.4.6-20060115 DOXYGEN Version 1.4.6-20060202
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 (15 January 2006) Dimitri van Heesch (02 February 2006)
DOXYGEN Version 1.4.6_20060115 DOXYGEN Version 1.4.6_20060202
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) (15 January 2006) Dimitri van Heesch (dimitri@stack.nl) (02 February 2006)
...@@ -20,7 +20,7 @@ doxygen_version_minor=4 ...@@ -20,7 +20,7 @@ doxygen_version_minor=4
doxygen_version_revision=6 doxygen_version_revision=6
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20060115 doxygen_version_mmn=20060202
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -222,7 +222,7 @@ declaration and the detailed description before the member definition. ...@@ -222,7 +222,7 @@ declaration and the detailed description before the member definition.
If you want to document the members of a file, struct, union, class, or enum, If you want to document the members of a file, struct, union, class, or enum,
and you want to put the documentation for these members inside the compound, and you want to put the documentation for these members inside the compound,
it is sometimes desired to place the documentation block after the member it is sometimes desired to place the documentation block after the member
instead of before. For this purpose you should put an additional \< marker instead of before. For this purpose you have to put an additional \< marker
in the comment block. in the comment block.
Here are some examples: Here are some examples:
......
...@@ -814,6 +814,7 @@ static bool getLinkInScope(const QCString &c, // scope ...@@ -814,6 +814,7 @@ static bool getLinkInScope(const QCString &c, // scope
Definition *d = md->getOuterScope()==Doxygen::globalScope ? Definition *d = md->getOuterScope()==Doxygen::globalScope ?
md->getBodyDef() : md->getOuterScope(); md->getBodyDef() : md->getOuterScope();
if (md->getGroupDef()) d = md->getGroupDef(); if (md->getGroupDef()) d = md->getGroupDef();
//printf("d=%p linkable=%d\n",d,d?d->isLinkable():0);
if (d && d->isLinkable()) if (d && d->isLinkable())
{ {
g_theCallContext.setClass(stripClassName(md->typeString())); g_theCallContext.setClass(stripClassName(md->typeString()));
...@@ -1777,7 +1778,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -1777,7 +1778,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
<SkipCPP>"//" { <SkipCPP>"//" {
g_code->codify(yytext); g_code->codify(yytext);
} }
<Body>"{" { <Body,FuncCall>"{" {
g_theVarContext.pushScope(); g_theVarContext.pushScope();
g_scopeStack.push(INNERBLOCK); g_scopeStack.push(INNERBLOCK);
......
...@@ -90,6 +90,7 @@ ...@@ -90,6 +90,7 @@
<xsd:simpleContent> <xsd:simpleContent>
<xsd:extension base="xsd:string"> <xsd:extension base="xsd:string">
<xsd:attribute name="refid" type="xsd:string" /> <xsd:attribute name="refid" type="xsd:string" />
<xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/>
</xsd:extension> </xsd:extension>
</xsd:simpleContent> </xsd:simpleContent>
</xsd:complexType> </xsd:complexType>
......
...@@ -90,6 +90,7 @@ ...@@ -90,6 +90,7 @@
" <xsd:simpleContent>\n" " <xsd:simpleContent>\n"
" <xsd:extension base=\"xsd:string\">\n" " <xsd:extension base=\"xsd:string\">\n"
" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n" " <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" use=\"optional\"/>\n"
" </xsd:extension>\n" " </xsd:extension>\n"
" </xsd:simpleContent>\n" " </xsd:simpleContent>\n"
" </xsd:complexType>\n" " </xsd:complexType>\n"
......
...@@ -309,7 +309,7 @@ HR { height: 1px; ...@@ -309,7 +309,7 @@ HR { height: 1px;
padding: 2px; padding: 2px;
} }
.memitem { .memitem {
width: 100%; padding: 4px;
background-color: #eef3f5; background-color: #eef3f5;
border-width: 1px; border-width: 1px;
border-style: solid; border-style: solid;
...@@ -318,6 +318,7 @@ HR { height: 1px; ...@@ -318,6 +318,7 @@ HR { height: 1px;
} }
.memname { .memname {
white-space: nowrap; white-space: nowrap;
font-weight: bold;
} }
.memdoc{ .memdoc{
padding-left: 10px; padding-left: 10px;
......
...@@ -309,7 +309,7 @@ ...@@ -309,7 +309,7 @@
" padding: 2px;\n" " padding: 2px;\n"
"}\n" "}\n"
".memitem {\n" ".memitem {\n"
" width: 100%;\n" " padding: 4px;\n"
" background-color: #eef3f5;\n" " background-color: #eef3f5;\n"
" border-width: 1px;\n" " border-width: 1px;\n"
" border-style: solid;\n" " border-style: solid;\n"
...@@ -318,6 +318,7 @@ ...@@ -318,6 +318,7 @@
"}\n" "}\n"
".memname {\n" ".memname {\n"
" white-space: nowrap;\n" " white-space: nowrap;\n"
" font-weight: bold;\n"
"}\n" "}\n"
".memdoc{\n" ".memdoc{\n"
" padding-left: 10px;\n" " padding-left: 10px;\n"
......
...@@ -1238,48 +1238,55 @@ void HtmlGenerator::endIndexValue(const char *,bool) ...@@ -1238,48 +1238,55 @@ void HtmlGenerator::endIndexValue(const char *,bool)
void HtmlGenerator::startMemberDocList() void HtmlGenerator::startMemberDocList()
{ {
DBG_HTML(t << "<!-- startMemberDocList -->" << endl;) DBG_HTML(t << "<!-- startMemberDocList -->" << endl;)
t << "<table class=\"memlist\">" << endl; //t << "<table class=\"memlist\">" << endl;
t << " <tr>" << endl; //t << " <tr>" << endl;
t << " <td>" << endl; //t << " <td>" << endl;
} }
void HtmlGenerator::endMemberDocList() void HtmlGenerator::endMemberDocList()
{ {
DBG_HTML(t << "<!-- endMemberDocList -->" << endl;) DBG_HTML(t << "<!-- endMemberDocList -->" << endl;)
t << " </td>" << endl; //t << " </td>" << endl;
t << " </tr>" << endl; //t << " </tr>" << endl;
t << "</table>" << endl; //t << "</table>" << endl;
} }
void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *) void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *)
{ {
DBG_HTML(t << "<!-- startMemberDoc -->" << endl;) DBG_HTML(t << "<!-- startMemberDoc -->" << endl;)
t << "<p>" << endl; //t << "<p>" << endl;
t << "<table class=\"memitem\">" << endl; t << "\n<div class=\"memitem\">" << endl;
t << " <tr>" << endl; //t << "<table>" << endl;
t << " <td>" << endl; //t << " <tr>" << endl;
t << " <table class=\"memproto\">" << endl; //t << " <td>" << endl;
//t << " <table class=\"memproto\">" << endl;
t << "<div class=\"memproto\">" << endl;
} }
void HtmlGenerator::startMemberDocPrefixItem() void HtmlGenerator::startMemberDocPrefixItem()
{ {
DBG_HTML(t << "<!-- startMemberDocPrefixItem -->" << endl;) DBG_HTML(t << "<!-- startMemberDocPrefixItem -->" << endl;)
t << " <tr>" << endl; //t << " <tr>" << endl;
t << " <td class=\"memtemplate\" colspan=\"5\">"; //t << " <td class=\"memtemplate\" colspan=\"5\">";
t << "<div class=\"memtemplate\">" << endl;
} }
void HtmlGenerator::endMemberDocPrefixItem() void HtmlGenerator::endMemberDocPrefixItem()
{ {
DBG_HTML(t << "<!-- endMemberDocPrefixItem -->" << endl;) DBG_HTML(t << "<!-- endMemberDocPrefixItem -->" << endl;)
t << "</td>" << endl; //t << "</td>" << endl;
t << " </tr>" << endl; //t << " </tr>" << endl;
t << "</div>" << endl;
} }
void HtmlGenerator::startMemberDocName(bool /*align*/) void HtmlGenerator::startMemberDocName(bool /*align*/)
{ {
DBG_HTML(t << "<!-- startMemberDocName -->" << endl;) DBG_HTML(t << "<!-- startMemberDocName -->" << endl;)
t << " <table class=\"memname\">" << endl;
t << " <tr>" << endl; t << " <tr>" << endl;
t << " <td class=\"memname\">"; t << " <td class=\"memname\">";
} }
...@@ -1376,8 +1383,10 @@ void HtmlGenerator::endMemberDoc(bool hasArgs) ...@@ -1376,8 +1383,10 @@ void HtmlGenerator::endMemberDoc(bool hasArgs)
t << " </tr>" << endl; t << " </tr>" << endl;
} }
t << " </table>" << endl; t << " </table>" << endl;
t << " </td>" << endl; //t << " </td>" << endl;
t << " </tr>" << endl; //t << " </tr>" << endl;
//t << "</table>" << endl;
t << "</div>" << endl;
} }
void HtmlGenerator::startDotGraph() void HtmlGenerator::startDotGraph()
...@@ -1462,25 +1471,15 @@ void HtmlGenerator::endMemberGroup(bool) ...@@ -1462,25 +1471,15 @@ void HtmlGenerator::endMemberGroup(bool)
void HtmlGenerator::startIndent() void HtmlGenerator::startIndent()
{ {
// I really wanted to use CSS here to provide an indented section, but
// alas, Netscape is buggy enough to sometimes "forget" to end the
// indent cause a staircase effect where the indent continuously increases.
// It's back to abusing tables :-(
//t << "<div class=\"in\">" << endl;
DBG_HTML(t << "<!-- startIndent -->" << endl;) DBG_HTML(t << "<!-- startIndent -->" << endl;)
t << " <tr>\n" t << "<div class=\"memdoc\">\n";
" <td >\n";
} }
void HtmlGenerator::endIndent() void HtmlGenerator::endIndent()
{ {
DBG_HTML(t << "<!-- endIndent -->" << endl;) DBG_HTML(t << "<!-- endIndent -->" << endl;)
t << " </td>\n" t << endl << "</div>" << endl << "</div><p>" << endl;
" </tr>\n"
"</table>\n";
//t << "</div>" << endl;
} }
void HtmlGenerator::addIndexItem(const char *,const char *) void HtmlGenerator::addIndexItem(const char *,const char *)
......
...@@ -191,7 +191,7 @@ void LatexDocVisitor::visit(DocURL *u) ...@@ -191,7 +191,7 @@ void LatexDocVisitor::visit(DocURL *u)
if (u->isEmail()) m_t << "mailto:"; if (u->isEmail()) m_t << "mailto:";
m_t << u->url() << "}"; m_t << u->url() << "}";
} }
m_t << "{\\tt "; m_t << "\\texttt{";
filter(u->url()); filter(u->url());
m_t << "}"; m_t << "}";
} }
...@@ -214,13 +214,13 @@ void LatexDocVisitor::visit(DocStyleChange *s) ...@@ -214,13 +214,13 @@ void LatexDocVisitor::visit(DocStyleChange *s)
switch (s->style()) switch (s->style())
{ {
case DocStyleChange::Bold: case DocStyleChange::Bold:
if (s->enable()) m_t << "{\\bf "; else m_t << "}"; if (s->enable()) m_t << "\\textbf{"; else m_t << "}";
break; break;
case DocStyleChange::Italic: case DocStyleChange::Italic:
if (s->enable()) m_t << "{\\em "; else m_t << "\\/}"; if (s->enable()) m_t << "\\textit{"; else m_t << "\\/}";
break; break;
case DocStyleChange::Code: case DocStyleChange::Code:
if (s->enable()) m_t << "{\\tt "; else m_t << "}"; if (s->enable()) m_t << "\\texttt{ "; else m_t << "}";
break; break;
case DocStyleChange::Subscript: case DocStyleChange::Subscript:
if (s->enable()) m_t << "$_{\\mbox{"; else m_t << "}}$ "; if (s->enable()) m_t << "$_{\\mbox{"; else m_t << "}}$ ";
...@@ -257,11 +257,11 @@ void LatexDocVisitor::visit(DocVerbatim *s) ...@@ -257,11 +257,11 @@ void LatexDocVisitor::visit(DocVerbatim *s)
switch(s->type()) switch(s->type())
{ {
case DocVerbatim::Code: case DocVerbatim::Code:
m_t << "\n\n\\footnotesize\\begin{verbatim}"; m_t << "\n\n\\begin{Code}\\begin{verbatim}";
Doxygen::parserManager->getParser(m_langExt) Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,s->context(),s->text().latin1(), ->parseCode(m_ci,s->context(),s->text().latin1(),
s->isExample(),s->exampleFile()); s->isExample(),s->exampleFile());
m_t << "\\end{verbatim}\n\\normalsize" << endl; m_t << "\\end{verbatim}\\end{Code}\n" << endl;
break; break;
case DocVerbatim::Verbatim: case DocVerbatim::Verbatim:
m_t << "\n\n\\footnotesize\\begin{verbatim}"; m_t << "\n\n\\footnotesize\\begin{verbatim}";
...@@ -322,7 +322,7 @@ void LatexDocVisitor::visit(DocInclude *inc) ...@@ -322,7 +322,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
{ {
case DocInclude::IncWithLines: case DocInclude::IncWithLines:
{ {
m_t << "\n\n\\footnotesize\\begin{verbatim}"; m_t << "\n\n\\begin{DocInclude}\\begin{verbatim}";
QFileInfo cfi( inc->file() ); QFileInfo cfi( inc->file() );
FileDef fd( cfi.dirPath(), cfi.fileName() ); FileDef fd( cfi.dirPath(), cfi.fileName() );
Doxygen::parserManager->getParser(inc->extension()) Doxygen::parserManager->getParser(inc->extension())
...@@ -330,25 +330,25 @@ void LatexDocVisitor::visit(DocInclude *inc) ...@@ -330,25 +330,25 @@ void LatexDocVisitor::visit(DocInclude *inc)
inc->text().latin1(), inc->text().latin1(),
inc->isExample(), inc->isExample(),
inc->exampleFile(), &fd); inc->exampleFile(), &fd);
m_t << "\\end{verbatim}\n\\normalsize" << endl; m_t << "\\end{verbatim}\n\\end{DocInclude}" << endl;
} }
break; break;
case DocInclude::Include: case DocInclude::Include:
m_t << "\n\n\\footnotesize\\begin{verbatim}"; m_t << "\n\n\\begin{DocInclude}\\begin{verbatim}";
Doxygen::parserManager->getParser(inc->extension()) Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(), ->parseCode(m_ci,inc->context(),
inc->text().latin1(),inc->isExample(), inc->text().latin1(),inc->isExample(),
inc->exampleFile()); inc->exampleFile());
m_t << "\\end{verbatim}\n\\normalsize" << endl; m_t << "\\end{verbatim}\n\\end{DocInclude}" << endl;
break; break;
case DocInclude::DontInclude: case DocInclude::DontInclude:
break; break;
case DocInclude::HtmlInclude: case DocInclude::HtmlInclude:
break; break;
case DocInclude::VerbInclude: case DocInclude::VerbInclude:
m_t << "\n\n\\footnotesize\\begin{verbatim}"; m_t << "\n\n\\begin{VerbInclude}\\begin{verbatim}";
m_t << inc->text(); m_t << inc->text();
m_t << "\\end{verbatim}\n\\normalsize" << endl; m_t << "\\end{verbatim}\n\\end{VerbInclude}" << endl;
break; break;
} }
} }
...@@ -359,7 +359,7 @@ void LatexDocVisitor::visit(DocIncOperator *op) ...@@ -359,7 +359,7 @@ void LatexDocVisitor::visit(DocIncOperator *op)
// op->type(),op->isFirst(),op->isLast(),op->text().data()); // op->type(),op->isFirst(),op->isLast(),op->text().data());
if (op->isFirst()) if (op->isFirst())
{ {
if (!m_hide) m_t << "\n\n\\footnotesize\\begin{verbatim}"; if (!m_hide) m_t << "\n\n\\begin{DocInclude}\\begin{verbatim}";
pushEnabled(); pushEnabled();
m_hide = TRUE; m_hide = TRUE;
} }
...@@ -378,7 +378,7 @@ void LatexDocVisitor::visit(DocIncOperator *op) ...@@ -378,7 +378,7 @@ void LatexDocVisitor::visit(DocIncOperator *op)
if (op->isLast()) if (op->isLast())
{ {
popEnabled(); popEnabled();
if (!m_hide) m_t << "\\end{verbatim}\n\\normalsize" << endl; if (!m_hide) m_t << "\\end{verbatim}\n\\end{DocInclude}" << endl;
} }
else else
{ {
...@@ -718,7 +718,7 @@ void LatexDocVisitor::visitPre(DocHRef *href) ...@@ -718,7 +718,7 @@ void LatexDocVisitor::visitPre(DocHRef *href)
m_t << href->url(); m_t << href->url();
m_t << "}"; m_t << "}";
} }
m_t << "{\\tt "; m_t << "\texttt{";
} }
void LatexDocVisitor::visitPost(DocHRef *) void LatexDocVisitor::visitPost(DocHRef *)
...@@ -746,12 +746,12 @@ void LatexDocVisitor::visitPre(DocImage *img) ...@@ -746,12 +746,12 @@ void LatexDocVisitor::visitPre(DocImage *img)
if (m_hide) return; if (m_hide) return;
if (img->hasCaption()) if (img->hasCaption())
{ {
m_t << "\\begin{figure}[H]" << endl; m_t << "\\begin{Image}" << endl;
m_t << "\\begin{center}" << endl; m_t << "\\begin{center}" << endl;
} }
else else
{ {
m_t << "\\mbox{"; m_t << "\\begin{ImageNoCaption}\\mbox{";
} }
QString gfxName = img->name(); QString gfxName = img->name();
if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf") if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf")
...@@ -789,7 +789,10 @@ void LatexDocVisitor::visitPost(DocImage *img) ...@@ -789,7 +789,10 @@ void LatexDocVisitor::visitPost(DocImage *img)
if (img->hasCaption()) if (img->hasCaption())
{ {
m_t << "\\end{center}" << endl; m_t << "\\end{center}" << endl;
m_t << "\\end{figure}" << endl; m_t << "\\end{Image}" << endl;
}
else{
m_t << "\\end{ImageNoCaption}" << endl;
} }
} }
else // other format else // other format
...@@ -969,7 +972,7 @@ void LatexDocVisitor::visitPre(DocXRefItem *x) ...@@ -969,7 +972,7 @@ void LatexDocVisitor::visitPre(DocXRefItem *x)
} }
else else
{ {
m_t << "{\\bf "; m_t << "\\textbf{";
} }
m_insideItem=TRUE; m_insideItem=TRUE;
filter(x->title()); filter(x->title());
...@@ -1025,11 +1028,10 @@ void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QSt ...@@ -1025,11 +1028,10 @@ void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QSt
if (!file.isEmpty() && !anchor.isEmpty()) m_t << "_"; if (!file.isEmpty() && !anchor.isEmpty()) m_t << "_";
if (!anchor.isEmpty()) m_t << anchor; if (!anchor.isEmpty()) m_t << anchor;
m_t << "}{"; m_t << "}{";
} }
else else
{ {
m_t << "{\\bf "; m_t << "\\doxyref{";
} }
} }
...@@ -1038,11 +1040,11 @@ void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QStri ...@@ -1038,11 +1040,11 @@ void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QStri
m_t << "}"; m_t << "}";
if (ref.isEmpty() && !Config_getBool("PDF_HYPERLINKS")) if (ref.isEmpty() && !Config_getBool("PDF_HYPERLINKS"))
{ {
m_t << "{\\rm ("; m_t << "{";
filter(theTranslator->trPageAbbreviation()); filter(theTranslator->trPageAbbreviation());
m_t << "\\,\\pageref{" << file; m_t << "}{" << file;
if (!anchor.isEmpty()) m_t << "_" << anchor; if (!anchor.isEmpty()) m_t << "_" << anchor;
m_t << "})}"; m_t << "}";
} }
} }
...@@ -1084,12 +1086,12 @@ void LatexDocVisitor::startDotFile(const QString &fileName, ...@@ -1084,12 +1086,12 @@ void LatexDocVisitor::startDotFile(const QString &fileName,
writeDotGraphFromFile(name,outDir,baseName,EPS); writeDotGraphFromFile(name,outDir,baseName,EPS);
if (hasCaption) if (hasCaption)
{ {
m_t << "\\begin{figure}[H]" << endl; m_t << "\\begin{Image}" << endl;
m_t << "\\begin{center}" << endl; m_t << "\\begin{center}" << endl;
} }
else else
{ {
m_t << "\\mbox{"; m_t << "\\begin{ImageNoCaption}\\mbox{";
} }
m_t << "\\includegraphics"; m_t << "\\includegraphics";
if (!width.isEmpty()) if (!width.isEmpty())
...@@ -1111,11 +1113,15 @@ void LatexDocVisitor::startDotFile(const QString &fileName, ...@@ -1111,11 +1113,15 @@ void LatexDocVisitor::startDotFile(const QString &fileName,
void LatexDocVisitor::endDotFile(bool hasCaption) void LatexDocVisitor::endDotFile(bool hasCaption)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "}" << endl; // end mbox or caption m_t << "}" << endl; // end caption or mbox
if (hasCaption) if (hasCaption)
{ {
m_t << "\\end{center}" << endl; m_t << "\\end{center}" << endl;
m_t << "\\end{figure}" << endl; m_t << "\\end{Image}" << endl;
}
else
{
m_t << "\\end{ImageNoCaption}" << endl;
} }
} }
...@@ -335,6 +335,20 @@ static void writeDefaultStyleSheetPart3(QTextStream &t) ...@@ -335,6 +335,20 @@ static void writeDefaultStyleSheetPart3(QTextStream &t)
{ {
t << "}}\n"; t << "}}\n";
t << "\\cfoot{}\n"; t << "\\cfoot{}\n";
t << "\\newenvironment{Code}\n";
t << "{\\footnotesize}\n";
t << "{\\normalsize}\n";
t << "\\newcommand{\\doxyref}[3]{\\textbf{#1} (\\textnormal{#2}\\,\\pageref{#3})}\n";
t << "\\newenvironment{DocInclude}\n";
t << "{\\footnotesize}\n";
t << "{\\normalsize}\n";
t << "\\newenvironment{VerbInclude}\n";
t << "{\\footnotesize}\n";
t << "{\\normalsize}\n";
t << "\\newenvironment{Image}\n";
t << "{\\begin{figure}[H]}\n";
t << "{\\end{figure}}\n";
t << "\\newenvironment{ImageNoCaption}{}{}\n";
t << "\\newenvironment{CompactList}\n"; t << "\\newenvironment{CompactList}\n";
t << "{\\begin{list}{}{\n"; t << "{\\begin{list}{}{\n";
t << " \\setlength{\\leftmargin}{0.5cm}\n"; t << " \\setlength{\\leftmargin}{0.5cm}\n";
...@@ -910,7 +924,7 @@ void LatexGenerator::endHtmlLink() ...@@ -910,7 +924,7 @@ void LatexGenerator::endHtmlLink()
void LatexGenerator::writeStartAnnoItem(const char *,const char *, void LatexGenerator::writeStartAnnoItem(const char *,const char *,
const char *path,const char *name) const char *path,const char *name)
{ {
t << "\\item\\contentsline{section}{{\\bf "; t << "\\item\\contentsline{section}{\\textbf{";
if (path) docify(path); if (path) docify(path);
docify(name); docify(name);
t << "} "; t << "} ";
...@@ -945,7 +959,7 @@ void LatexGenerator::endIndexValue(const char *name,bool hasBrief) ...@@ -945,7 +959,7 @@ void LatexGenerator::endIndexValue(const char *name,bool hasBrief)
//void LatexGenerator::writeClassLink(const char *,const char *, //void LatexGenerator::writeClassLink(const char *,const char *,
// const char *,const char *name) // const char *,const char *name)
//{ //{
// t << "{\\bf "; // t << "\\textbf{";
// docify(name); // docify(name);
// t << "}"; // t << "}";
//} //}
...@@ -961,7 +975,7 @@ void LatexGenerator::startTextLink(const char *f,const char *anchor) ...@@ -961,7 +975,7 @@ void LatexGenerator::startTextLink(const char *f,const char *anchor)
} }
else else
{ {
t << "{\\bf "; t << "\\textbf{";
} }
} }
...@@ -985,7 +999,7 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f, ...@@ -985,7 +999,7 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f,
} }
else else
{ {
t << "{\\bf "; t << "\\textbf{";
docify(text); docify(text);
t << "}"; t << "}";
} }
...@@ -993,15 +1007,15 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f, ...@@ -993,15 +1007,15 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f,
void LatexGenerator::startPageRef() void LatexGenerator::startPageRef()
{ {
t << " {\\rm ("; t << " \\doxyref{";
} }
void LatexGenerator::endPageRef(const char *clname, const char *anchor) void LatexGenerator::endPageRef(const char *clname, const char *anchor)
{ {
t << "\\,\\pageref{"; t << "}{";
if (clname) t << clname; if (clname) t << clname;
if (anchor) t << "_" << anchor; if (anchor) t << "_" << anchor;
t << "})}"; t << "}";
} }
void LatexGenerator::writeCodeLink(const char *,const char *, void LatexGenerator::writeCodeLink(const char *,const char *,
...@@ -1406,7 +1420,7 @@ void LatexGenerator::endMemberList() ...@@ -1406,7 +1420,7 @@ void LatexGenerator::endMemberList()
void LatexGenerator::startMemberGroupHeader(bool hasHeader) void LatexGenerator::startMemberGroupHeader(bool hasHeader)
{ {
if (hasHeader) t << "\\begin{Indent}"; if (hasHeader) t << "\\begin{Indent}";
t << "{\\bf "; t << "\\textbf{";
} }
void LatexGenerator::endMemberGroupHeader() void LatexGenerator::endMemberGroupHeader()
......
...@@ -115,14 +115,14 @@ class LatexGenerator : public OutputGenerator ...@@ -115,14 +115,14 @@ class LatexGenerator : public OutputGenerator
void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ } void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ }
void writeAnchor(const char *fileName,const char *name); void writeAnchor(const char *fileName,const char *name);
void startCodeFragment() { t << endl << endl << "\\footnotesize\\begin{verbatim}"; } void startCodeFragment() { t << endl << endl << "\\begin{Code}\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; } void endCodeFragment() { t << "\\end{verbatim}\\end{Code}" << endl; }
void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; } void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
void startCodeLine() { col=0; } void startCodeLine() { col=0; }
void endCodeLine() { codify("\n"); } void endCodeLine() { codify("\n"); }
void startEmphasis() { t << "{\\em "; } void startEmphasis() { t << "{\\em "; }
void endEmphasis() { t << "}"; } void endEmphasis() { t << "}"; }
void startBold() { t << "{\\bf "; } void startBold() { t << "\\textbf{"; }
void endBold() { t << "}"; } void endBold() { t << "}"; }
void startDescription(); void startDescription();
void endDescription(); void endDescription();
......
...@@ -79,7 +79,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr ...@@ -79,7 +79,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
const QCString & /*scopeName*/,MemberDef *md) const QCString & /*scopeName*/,MemberDef *md)
{ {
ArgumentList *defArgList=md->isDocsForDefinition() ? ArgumentList *defArgList=(md->isDocsForDefinition() && !md->isProperty()) ?
md->argumentList() : md->declArgumentList(); md->argumentList() : md->declArgumentList();
//printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition()); //printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition());
if (defArgList==0) if (defArgList==0)
...@@ -1150,6 +1150,25 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1150,6 +1150,25 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.endTypewriter(); ol.endTypewriter();
} }
if (isProperty())
{
ol.writeLatexSpacing();
ol.startTypewriter();
ol.docify(" [");
QStrList sl;
if (isGettable()) sl.append("get");
if (isSettable()) sl.append("set");
const char *s=sl.first();
while (s)
{
ol.docify(s);
s=sl.next();
if (s) ol.docify(", ");
}
ol.docify("]");
ol.endTypewriter();
}
if (!detailsVisible && !annMemb) if (!detailsVisible && !annMemb)
{ {
ol.endDoxyAnchor(cfname,anchor()); ol.endDoxyAnchor(cfname,anchor());
......
...@@ -154,6 +154,20 @@ static void newVariable() ...@@ -154,6 +154,20 @@ static void newVariable()
newEntry(); newEntry();
} }
static void newFunction()
{
if (current->name.left(2)=="__" && current->name.right(2)=="__")
{
// special method name, see
// http://docs.python.org/ref/specialnames.html
current->protection=Public;
}
else if (current->name.at(0)=='_')
{
current->protection=Private;
}
}
static inline int computeIndent(const char *s) static inline int computeIndent(const char *s)
{ {
int col=0; int col=0;
...@@ -804,6 +818,7 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -804,6 +818,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
} }
current->name = yytext; current->name = yytext;
current->name = current->name.stripWhiteSpace(); current->name = current->name.stripWhiteSpace();
newFunction();
} }
{B}"(" { {B}"(" {
...@@ -984,7 +999,7 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -984,7 +999,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
} }
<ClassInheritance>{ <ClassInheritance>{
({BB}|[(,)]) { // syntactic sugar for the list ({BB}|[\(,\)]) { // syntactic sugar for the list
} }
":" { // begin of the class definition ":" { // begin of the class definition
......
...@@ -158,6 +158,9 @@ static bool docBlockInBody; ...@@ -158,6 +158,9 @@ static bool docBlockInBody;
static bool docBlockJavaStyle; static bool docBlockJavaStyle;
static char docBlockTerm; static char docBlockTerm;
static QCString idlAttr;
static QCString idlProp;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -657,6 +660,10 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -657,6 +660,10 @@ IDLATTR ("["[^\]]*"]"){BN}*
%x CopyArgCommentLine %x CopyArgCommentLine
%x CopyArgVerbatim %x CopyArgVerbatim
%x IDLAttribute
%x IDLProp
%x IDLPropName
/** Prototype scanner states */ /** Prototype scanner states */
%x Prototype %x Prototype
...@@ -2189,11 +2196,14 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2189,11 +2196,14 @@ IDLATTR ("["[^\]]*"]"){BN}*
} }
<FindMembers>"[" { <FindMembers>"[" {
if (current->name.isEmpty() || current->name=="typedef") // IDL function property if (current->name.isEmpty() || current->name=="typedef") // IDL function property
{ {
squareCount=1; squareCount=1;
lastSquareContext = YY_START; lastSquareContext = YY_START;
BEGIN(SkipSquare); idlAttr.resize(0);
idlProp.resize(0);
current->mtype = mtype;
BEGIN( IDLAttribute );
} }
else else
{ {
...@@ -2202,6 +2212,75 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2202,6 +2212,75 @@ IDLATTR ("["[^\]]*"]"){BN}*
BEGIN( Array ) ; BEGIN( Array ) ;
} }
} }
<IDLAttribute>"]" {
// end of IDL function attribute
if (--squareCount<=0)
{
lineCount();
if (current->mtype == Property)
BEGIN( IDLPropName );
else
BEGIN( lastSquareContext );
}
}
<IDLAttribute>"propput" {
current->mtype = Property;
current->memSpec |= Entry::Settable;
}
<IDLAttribute>"propget" {
current->mtype = Property;
current->memSpec |= Entry::Gettable;
}
<IDLAttribute>. {
}
<IDLPropName>{BN}*{ID}{BN}* {
// return type (probably HRESULT) - skip it
}
<IDLPropName>{ID}{BN}*"(" {
current->name = yytext;
current->name = current->name.left(current->name.length()-1).stripWhiteSpace();
current->startLine = yyLineNr;
BEGIN( IDLProp );
}
<IDLProp>{BN}*"["[^\]]*"]"{BN}* { // attribute of a parameter
idlAttr += yytext;
}
<IDLProp>{ID} { // property type
idlProp = yytext;
}
<IDLProp>{BN}*{ID}{BN}*"," { // Rare: Another parameter ([propput] HRESULT Item(int index, [in] Type theRealProperty);)
if (!current->args)
current->args = "(";
else
current->args += ", ";
current->args += idlAttr;
current->args += " ";
current->args += idlProp; // prop was actually type of extra parameter
current->args += " ";
current->args += yytext;
current->args = current->args.left(current->args.length() - 1); // strip comma
idlProp.resize(0);
idlAttr.resize(0);
BEGIN( IDLProp );
}
<IDLProp>{BN}*{ID}{BN}*")"{BN}* {
// the parameter name for the property - just skip.
}
<IDLProp>";" {
current->fileName = yyFileName;
current->type = idlProp;
current->args = current->args.simplifyWhiteSpace();
if (current->args)
current->args += ")";
current->name = current->name.stripWhiteSpace();
current->section = Entry::VARIABLE_SEC;
current_root->addSubEntry(current);
current = new Entry;
initEntry();
BEGIN( FindMembers );
}
<IDLProp>. {
}
<Array>"]" { current->args += *yytext ; <Array>"]" { current->args += *yytext ;
if (--squareCount<=0) if (--squareCount<=0)
BEGIN( FindMembers ) ; BEGIN( FindMembers ) ;
......
...@@ -953,7 +953,15 @@ static void writeInnerClasses(const ClassSDict *cl,QTextStream &t) ...@@ -953,7 +953,15 @@ static void writeInnerClasses(const ClassSDict *cl,QTextStream &t)
if (cd->name().find('@')==-1) // skip anonymous scopes if (cd->name().find('@')==-1) // skip anonymous scopes
{ {
t << " <innerclass refid=\"" << cd->getOutputFileBase() t << " <innerclass refid=\"" << cd->getOutputFileBase()
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl; << "\" prot=\"";
switch(cd->protection())
{
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: t << "package"; break;
}
t << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
} }
} }
} }
......
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