diff options
author | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2006-02-04 15:33:47 (GMT) |
---|---|---|
committer | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2006-02-04 15:33:47 (GMT) |
commit | a9a600c4692a1d0b0a6a09362db1d6da8bda9a30 (patch) | |
tree | 2d45018d20008480ccea03a78fa6fc37908676d9 | |
parent | 0165662ac50544cad138573c42097999327b84bc (diff) | |
download | Doxygen-a9a600c4692a1d0b0a6a09362db1d6da8bda9a30.zip Doxygen-a9a600c4692a1d0b0a6a09362db1d6da8bda9a30.tar.gz Doxygen-a9a600c4692a1d0b0a6a09362db1d6da8bda9a30.tar.bz2 |
Release-1.4.6-20060202
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | README | 4 | ||||
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | doc/docblocks.doc | 2 | ||||
-rw-r--r-- | src/code.l | 3 | ||||
-rw-r--r-- | src/compound.xsd | 1 | ||||
-rw-r--r-- | src/compound_xsd.h | 1 | ||||
-rw-r--r-- | src/doxygen.css | 3 | ||||
-rw-r--r-- | src/doxygen_css.h | 3 | ||||
-rw-r--r-- | src/htmlgen.cpp | 59 | ||||
-rw-r--r-- | src/latexdocvisitor.cpp | 62 | ||||
-rw-r--r-- | src/latexgen.cpp | 30 | ||||
-rw-r--r-- | src/latexgen.h | 6 | ||||
-rw-r--r-- | src/memberdef.cpp | 21 | ||||
-rw-r--r-- | src/pyscanner.l | 17 | ||||
-rw-r--r-- | src/scanner.l | 87 | ||||
-rw-r--r-- | src/xmlgen.cpp | 10 |
17 files changed, 230 insertions, 85 deletions
@@ -1,7 +1,7 @@ -DOXYGEN Version 1.4.6-20060115 +DOXYGEN Version 1.4.6-20060202 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (15 January 2006) +Dimitri van Heesch (02 February 2006) @@ -1,4 +1,4 @@ -DOXYGEN Version 1.4.6_20060115 +DOXYGEN Version 1.4.6_20060202 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) (15 January 2006) +Dimitri van Heesch (dimitri@stack.nl) (02 February 2006) @@ -20,7 +20,7 @@ doxygen_version_minor=4 doxygen_version_revision=6 #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"` diff --git a/doc/docblocks.doc b/doc/docblocks.doc index de1e94d..789cc92 100644 --- a/doc/docblocks.doc +++ b/doc/docblocks.doc @@ -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, 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 -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. Here are some examples: @@ -814,6 +814,7 @@ static bool getLinkInScope(const QCString &c, // scope Definition *d = md->getOuterScope()==Doxygen::globalScope ? md->getBodyDef() : md->getOuterScope(); if (md->getGroupDef()) d = md->getGroupDef(); + //printf("d=%p linkable=%d\n",d,d?d->isLinkable():0); if (d && d->isLinkable()) { g_theCallContext.setClass(stripClassName(md->typeString())); @@ -1777,7 +1778,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} <SkipCPP>"//" { g_code->codify(yytext); } -<Body>"{" { +<Body,FuncCall>"{" { g_theVarContext.pushScope(); g_scopeStack.push(INNERBLOCK); diff --git a/src/compound.xsd b/src/compound.xsd index 627fab5..f08e5e6 100644 --- a/src/compound.xsd +++ b/src/compound.xsd @@ -90,6 +90,7 @@ <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="refid" type="xsd:string" /> + <xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> diff --git a/src/compound_xsd.h b/src/compound_xsd.h index 3783b45..9a73283 100644 --- a/src/compound_xsd.h +++ b/src/compound_xsd.h @@ -90,6 +90,7 @@ " <xsd:simpleContent>\n" " <xsd:extension base=\"xsd:string\">\n" " <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n" +" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" use=\"optional\"/>\n" " </xsd:extension>\n" " </xsd:simpleContent>\n" " </xsd:complexType>\n" diff --git a/src/doxygen.css b/src/doxygen.css index 1b47802..985d89d 100644 --- a/src/doxygen.css +++ b/src/doxygen.css @@ -309,7 +309,7 @@ HR { height: 1px; padding: 2px; } .memitem { - width: 100%; + padding: 4px; background-color: #eef3f5; border-width: 1px; border-style: solid; @@ -318,6 +318,7 @@ HR { height: 1px; } .memname { white-space: nowrap; + font-weight: bold; } .memdoc{ padding-left: 10px; diff --git a/src/doxygen_css.h b/src/doxygen_css.h index 8268b16..5a944bc 100644 --- a/src/doxygen_css.h +++ b/src/doxygen_css.h @@ -309,7 +309,7 @@ " padding: 2px;\n" "}\n" ".memitem {\n" -" width: 100%;\n" +" padding: 4px;\n" " background-color: #eef3f5;\n" " border-width: 1px;\n" " border-style: solid;\n" @@ -318,6 +318,7 @@ "}\n" ".memname {\n" " white-space: nowrap;\n" +" font-weight: bold;\n" "}\n" ".memdoc{\n" " padding-left: 10px;\n" diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 04d5a9f..c6666bd 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -1238,48 +1238,55 @@ void HtmlGenerator::endIndexValue(const char *,bool) void HtmlGenerator::startMemberDocList() { DBG_HTML(t << "<!-- startMemberDocList -->" << endl;) - t << "<table class=\"memlist\">" << endl; - t << " <tr>" << endl; - t << " <td>" << endl; + //t << "<table class=\"memlist\">" << endl; + //t << " <tr>" << endl; + //t << " <td>" << endl; } void HtmlGenerator::endMemberDocList() { DBG_HTML(t << "<!-- endMemberDocList -->" << endl;) - t << " </td>" << endl; - t << " </tr>" << endl; - t << "</table>" << endl; + //t << " </td>" << endl; + //t << " </tr>" << endl; + //t << "</table>" << endl; } void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *) { DBG_HTML(t << "<!-- startMemberDoc -->" << endl;) - t << "<p>" << endl; - - t << "<table class=\"memitem\">" << endl; - t << " <tr>" << endl; - t << " <td>" << endl; - t << " <table class=\"memproto\">" << endl; + //t << "<p>" << endl; + + t << "\n<div class=\"memitem\">" << endl; + //t << "<table>" << endl; + //t << " <tr>" << endl; + //t << " <td>" << endl; + //t << " <table class=\"memproto\">" << endl; + t << "<div class=\"memproto\">" << endl; } void HtmlGenerator::startMemberDocPrefixItem() { DBG_HTML(t << "<!-- startMemberDocPrefixItem -->" << endl;) - t << " <tr>" << endl; - t << " <td class=\"memtemplate\" colspan=\"5\">"; + //t << " <tr>" << endl; + //t << " <td class=\"memtemplate\" colspan=\"5\">"; + t << "<div class=\"memtemplate\">" << endl; } void HtmlGenerator::endMemberDocPrefixItem() { DBG_HTML(t << "<!-- endMemberDocPrefixItem -->" << endl;) - t << "</td>" << endl; - t << " </tr>" << endl; + //t << "</td>" << endl; + //t << " </tr>" << endl; + t << "</div>" << endl; } void HtmlGenerator::startMemberDocName(bool /*align*/) { DBG_HTML(t << "<!-- startMemberDocName -->" << endl;) + + t << " <table class=\"memname\">" << endl; + t << " <tr>" << endl; t << " <td class=\"memname\">"; } @@ -1376,8 +1383,10 @@ void HtmlGenerator::endMemberDoc(bool hasArgs) t << " </tr>" << endl; } t << " </table>" << endl; - t << " </td>" << endl; - t << " </tr>" << endl; + //t << " </td>" << endl; + //t << " </tr>" << endl; + //t << "</table>" << endl; + t << "</div>" << endl; } void HtmlGenerator::startDotGraph() @@ -1462,25 +1471,15 @@ void HtmlGenerator::endMemberGroup(bool) 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;) - t << " <tr>\n" - " <td >\n"; + t << "<div class=\"memdoc\">\n"; } void HtmlGenerator::endIndent() { DBG_HTML(t << "<!-- endIndent -->" << endl;) - t << " </td>\n" - " </tr>\n" - "</table>\n"; - //t << "</div>" << endl; + t << endl << "</div>" << endl << "</div><p>" << endl; } void HtmlGenerator::addIndexItem(const char *,const char *) diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 1af9ae4..edbe979 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -191,7 +191,7 @@ void LatexDocVisitor::visit(DocURL *u) if (u->isEmail()) m_t << "mailto:"; m_t << u->url() << "}"; } - m_t << "{\\tt "; + m_t << "\\texttt{"; filter(u->url()); m_t << "}"; } @@ -214,13 +214,13 @@ void LatexDocVisitor::visit(DocStyleChange *s) switch (s->style()) { case DocStyleChange::Bold: - if (s->enable()) m_t << "{\\bf "; else m_t << "}"; + if (s->enable()) m_t << "\\textbf{"; else m_t << "}"; break; case DocStyleChange::Italic: - if (s->enable()) m_t << "{\\em "; else m_t << "\\/}"; + if (s->enable()) m_t << "\\textit{"; else m_t << "\\/}"; break; case DocStyleChange::Code: - if (s->enable()) m_t << "{\\tt "; else m_t << "}"; + if (s->enable()) m_t << "\\texttt{ "; else m_t << "}"; break; case DocStyleChange::Subscript: if (s->enable()) m_t << "$_{\\mbox{"; else m_t << "}}$ "; @@ -257,11 +257,11 @@ void LatexDocVisitor::visit(DocVerbatim *s) switch(s->type()) { case DocVerbatim::Code: - m_t << "\n\n\\footnotesize\\begin{verbatim}"; + m_t << "\n\n\\begin{Code}\\begin{verbatim}"; Doxygen::parserManager->getParser(m_langExt) ->parseCode(m_ci,s->context(),s->text().latin1(), s->isExample(),s->exampleFile()); - m_t << "\\end{verbatim}\n\\normalsize" << endl; + m_t << "\\end{verbatim}\\end{Code}\n" << endl; break; case DocVerbatim::Verbatim: m_t << "\n\n\\footnotesize\\begin{verbatim}"; @@ -322,7 +322,7 @@ void LatexDocVisitor::visit(DocInclude *inc) { case DocInclude::IncWithLines: { - m_t << "\n\n\\footnotesize\\begin{verbatim}"; + m_t << "\n\n\\begin{DocInclude}\\begin{verbatim}"; QFileInfo cfi( inc->file() ); FileDef fd( cfi.dirPath(), cfi.fileName() ); Doxygen::parserManager->getParser(inc->extension()) @@ -330,25 +330,25 @@ void LatexDocVisitor::visit(DocInclude *inc) inc->text().latin1(), inc->isExample(), inc->exampleFile(), &fd); - m_t << "\\end{verbatim}\n\\normalsize" << endl; + m_t << "\\end{verbatim}\n\\end{DocInclude}" << endl; } break; case DocInclude::Include: - m_t << "\n\n\\footnotesize\\begin{verbatim}"; + m_t << "\n\n\\begin{DocInclude}\\begin{verbatim}"; Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), inc->text().latin1(),inc->isExample(), inc->exampleFile()); - m_t << "\\end{verbatim}\n\\normalsize" << endl; + m_t << "\\end{verbatim}\n\\end{DocInclude}" << endl; break; case DocInclude::DontInclude: break; case DocInclude::HtmlInclude: break; case DocInclude::VerbInclude: - m_t << "\n\n\\footnotesize\\begin{verbatim}"; + m_t << "\n\n\\begin{VerbInclude}\\begin{verbatim}"; m_t << inc->text(); - m_t << "\\end{verbatim}\n\\normalsize" << endl; + m_t << "\\end{verbatim}\n\\end{VerbInclude}" << endl; break; } } @@ -359,7 +359,7 @@ void LatexDocVisitor::visit(DocIncOperator *op) // op->type(),op->isFirst(),op->isLast(),op->text().data()); 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(); m_hide = TRUE; } @@ -378,7 +378,7 @@ void LatexDocVisitor::visit(DocIncOperator *op) if (op->isLast()) { popEnabled(); - if (!m_hide) m_t << "\\end{verbatim}\n\\normalsize" << endl; + if (!m_hide) m_t << "\\end{verbatim}\n\\end{DocInclude}" << endl; } else { @@ -718,7 +718,7 @@ void LatexDocVisitor::visitPre(DocHRef *href) m_t << href->url(); m_t << "}"; } - m_t << "{\\tt "; + m_t << "\texttt{"; } void LatexDocVisitor::visitPost(DocHRef *) @@ -746,12 +746,12 @@ void LatexDocVisitor::visitPre(DocImage *img) if (m_hide) return; if (img->hasCaption()) { - m_t << "\\begin{figure}[H]" << endl; + m_t << "\\begin{Image}" << endl; m_t << "\\begin{center}" << endl; } else { - m_t << "\\mbox{"; + m_t << "\\begin{ImageNoCaption}\\mbox{"; } QString gfxName = img->name(); if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf") @@ -789,7 +789,10 @@ void LatexDocVisitor::visitPost(DocImage *img) if (img->hasCaption()) { m_t << "\\end{center}" << endl; - m_t << "\\end{figure}" << endl; + m_t << "\\end{Image}" << endl; + } + else{ + m_t << "\\end{ImageNoCaption}" << endl; } } else // other format @@ -969,7 +972,7 @@ void LatexDocVisitor::visitPre(DocXRefItem *x) } else { - m_t << "{\\bf "; + m_t << "\\textbf{"; } m_insideItem=TRUE; filter(x->title()); @@ -1025,11 +1028,10 @@ void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QSt if (!file.isEmpty() && !anchor.isEmpty()) m_t << "_"; if (!anchor.isEmpty()) m_t << anchor; m_t << "}{"; - } else { - m_t << "{\\bf "; + m_t << "\\doxyref{"; } } @@ -1038,11 +1040,11 @@ void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QStri m_t << "}"; if (ref.isEmpty() && !Config_getBool("PDF_HYPERLINKS")) { - m_t << "{\\rm ("; + m_t << "{"; filter(theTranslator->trPageAbbreviation()); - m_t << "\\,\\pageref{" << file; + m_t << "}{" << file; if (!anchor.isEmpty()) m_t << "_" << anchor; - m_t << "})}"; + m_t << "}"; } } @@ -1084,12 +1086,12 @@ void LatexDocVisitor::startDotFile(const QString &fileName, writeDotGraphFromFile(name,outDir,baseName,EPS); if (hasCaption) { - m_t << "\\begin{figure}[H]" << endl; + m_t << "\\begin{Image}" << endl; m_t << "\\begin{center}" << endl; } else { - m_t << "\\mbox{"; + m_t << "\\begin{ImageNoCaption}\\mbox{"; } m_t << "\\includegraphics"; if (!width.isEmpty()) @@ -1111,11 +1113,15 @@ void LatexDocVisitor::startDotFile(const QString &fileName, void LatexDocVisitor::endDotFile(bool hasCaption) { if (m_hide) return; - m_t << "}" << endl; // end mbox or caption + m_t << "}" << endl; // end caption or mbox if (hasCaption) { m_t << "\\end{center}" << endl; - m_t << "\\end{figure}" << endl; + m_t << "\\end{Image}" << endl; + } + else + { + m_t << "\\end{ImageNoCaption}" << endl; } } diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 396ebbe..66aa16c 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -335,6 +335,20 @@ static void writeDefaultStyleSheetPart3(QTextStream &t) { t << "}}\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 << "{\\begin{list}{}{\n"; t << " \\setlength{\\leftmargin}{0.5cm}\n"; @@ -910,7 +924,7 @@ void LatexGenerator::endHtmlLink() void LatexGenerator::writeStartAnnoItem(const char *,const char *, const char *path,const char *name) { - t << "\\item\\contentsline{section}{{\\bf "; + t << "\\item\\contentsline{section}{\\textbf{"; if (path) docify(path); docify(name); t << "} "; @@ -945,7 +959,7 @@ void LatexGenerator::endIndexValue(const char *name,bool hasBrief) //void LatexGenerator::writeClassLink(const char *,const char *, // const char *,const char *name) //{ -// t << "{\\bf "; +// t << "\\textbf{"; // docify(name); // t << "}"; //} @@ -961,7 +975,7 @@ void LatexGenerator::startTextLink(const char *f,const char *anchor) } else { - t << "{\\bf "; + t << "\\textbf{"; } } @@ -985,7 +999,7 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f, } else { - t << "{\\bf "; + t << "\\textbf{"; docify(text); t << "}"; } @@ -993,15 +1007,15 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f, void LatexGenerator::startPageRef() { - t << " {\\rm ("; + t << " \\doxyref{"; } void LatexGenerator::endPageRef(const char *clname, const char *anchor) { - t << "\\,\\pageref{"; + t << "}{"; if (clname) t << clname; if (anchor) t << "_" << anchor; - t << "})}"; + t << "}"; } void LatexGenerator::writeCodeLink(const char *,const char *, @@ -1406,7 +1420,7 @@ void LatexGenerator::endMemberList() void LatexGenerator::startMemberGroupHeader(bool hasHeader) { if (hasHeader) t << "\\begin{Indent}"; - t << "{\\bf "; + t << "\\textbf{"; } void LatexGenerator::endMemberGroupHeader() diff --git a/src/latexgen.h b/src/latexgen.h index 6a7a484..bfca4ed 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -115,14 +115,14 @@ class LatexGenerator : public OutputGenerator void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ } void writeAnchor(const char *fileName,const char *name); - void startCodeFragment() { t << endl << endl << "\\footnotesize\\begin{verbatim}"; } - void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; } + void startCodeFragment() { t << endl << endl << "\\begin{Code}\\begin{verbatim}"; } + void endCodeFragment() { t << "\\end{verbatim}\\end{Code}" << endl; } void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; } void startCodeLine() { col=0; } void endCodeLine() { codify("\n"); } void startEmphasis() { t << "{\\em "; } void endEmphasis() { t << "}"; } - void startBold() { t << "{\\bf "; } + void startBold() { t << "\\textbf{"; } void endBold() { t << "}"; } void startDescription(); void endDescription(); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 2f40015..6d2761c 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -79,7 +79,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, const QCString & /*scopeName*/,MemberDef *md) { - ArgumentList *defArgList=md->isDocsForDefinition() ? + ArgumentList *defArgList=(md->isDocsForDefinition() && !md->isProperty()) ? md->argumentList() : md->declArgumentList(); //printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition()); if (defArgList==0) @@ -1150,6 +1150,25 @@ void MemberDef::writeDeclaration(OutputList &ol, 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) { ol.endDoxyAnchor(cfname,anchor()); diff --git a/src/pyscanner.l b/src/pyscanner.l index 15caa43..d29b2c1 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -154,6 +154,20 @@ static void newVariable() 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) { int col=0; @@ -804,6 +818,7 @@ STARTDOCSYMS ^{B}"##"/[^#] } current->name = yytext; current->name = current->name.stripWhiteSpace(); + newFunction(); } {B}"(" { @@ -984,7 +999,7 @@ STARTDOCSYMS ^{B}"##"/[^#] } <ClassInheritance>{ - ({BB}|[(,)]) { // syntactic sugar for the list + ({BB}|[\(,\)]) { // syntactic sugar for the list } ":" { // begin of the class definition diff --git a/src/scanner.l b/src/scanner.l index 4465b9a..bb941f7 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -158,6 +158,9 @@ static bool docBlockInBody; static bool docBlockJavaStyle; static char docBlockTerm; +static QCString idlAttr; +static QCString idlProp; + //----------------------------------------------------------------------------- @@ -657,6 +660,10 @@ IDLATTR ("["[^\]]*"]"){BN}* %x CopyArgCommentLine %x CopyArgVerbatim +%x IDLAttribute +%x IDLProp +%x IDLPropName + /** Prototype scanner states */ %x Prototype @@ -2189,11 +2196,14 @@ IDLATTR ("["[^\]]*"]"){BN}* } <FindMembers>"[" { - if (current->name.isEmpty() || current->name=="typedef") // IDL function property - { - squareCount=1; + if (current->name.isEmpty() || current->name=="typedef") // IDL function property + { + squareCount=1; lastSquareContext = YY_START; - BEGIN(SkipSquare); + idlAttr.resize(0); + idlProp.resize(0); + current->mtype = mtype; + BEGIN( IDLAttribute ); } else { @@ -2202,6 +2212,75 @@ IDLATTR ("["[^\]]*"]"){BN}* 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 ; if (--squareCount<=0) BEGIN( FindMembers ) ; diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 22f8e68..a479842 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -953,7 +953,15 @@ static void writeInnerClasses(const ClassSDict *cl,QTextStream &t) if (cd->name().find('@')==-1) // skip anonymous scopes { 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; } } } |