diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/classdef.cpp | 13 | ||||
-rw-r--r-- | src/classlist.cpp | 5 | ||||
-rw-r--r-- | src/commentcnv.l | 2 | ||||
-rw-r--r-- | src/compound.xsd | 354 | ||||
-rw-r--r-- | src/compound_xsd.h | 354 | ||||
-rw-r--r-- | src/definition.cpp | 14 | ||||
-rw-r--r-- | src/docparser.cpp | 67 | ||||
-rw-r--r-- | src/docparser.h | 26 | ||||
-rw-r--r-- | src/docvisitor.h | 15 | ||||
-rw-r--r-- | src/doxygen.cpp | 62 | ||||
-rw-r--r-- | src/htmldocvisitor.cpp | 2 | ||||
-rw-r--r-- | src/index.cpp | 13 | ||||
-rw-r--r-- | src/latexdocvisitor.cpp | 25 | ||||
-rw-r--r-- | src/latexdocvisitor.h | 3 | ||||
-rw-r--r-- | src/mandocvisitor.cpp | 2 | ||||
-rw-r--r-- | src/memberdef.cpp | 1 | ||||
-rw-r--r-- | src/perlmodgen.cpp | 2 | ||||
-rw-r--r-- | src/printdocvisitor.h | 3 | ||||
-rw-r--r-- | src/rtfdocvisitor.cpp | 2 | ||||
-rw-r--r-- | src/scanner.l | 28 | ||||
-rw-r--r-- | src/translator_br.h | 21 | ||||
-rw-r--r-- | src/translator_pt.h | 2 | ||||
-rw-r--r-- | src/translator_sr.h | 2 | ||||
-rw-r--r-- | src/translator_tw.h | 2 | ||||
-rw-r--r-- | src/util.cpp | 43 | ||||
-rw-r--r-- | src/xmldocvisitor.cpp | 18 |
26 files changed, 973 insertions, 108 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index 72ec333..d6f5352 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -134,6 +134,10 @@ QCString ClassDef::displayName() const { n=qualifiedNameWithTemplateParameters(); } + if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + { + n=substitute(n,"::","."); + } return n; } @@ -1117,7 +1121,6 @@ void ClassDef::writeDocumentation(OutputList &ol) // write link to list of all members (HTML only) if (m_allMemberNameInfoSDict->count()>0 && !Config_getBool("OPTIMIZE_OUTPUT_FOR_C") - /* && !Config_getBool("INLINE_INHERITED_MEMB") */ ) { ol.pushGeneratorState(); @@ -2587,14 +2590,6 @@ QCString ClassDef::qualifiedNameWithTemplateParameters( QCString ClassDef::className() const { - //QCString className=m_localName; - //Definition *p=getOuterScope(); - //while (p && p->definitionType()==TypeClass) - //{ - // className.prepend(p->localName()+"::"); - // p=p->getOuterScope(); - //} - //return className; return m_className; }; diff --git a/src/classlist.cpp b/src/classlist.cpp index d234312..c370196 100644 --- a/src/classlist.cpp +++ b/src/classlist.cpp @@ -95,6 +95,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f } ol.startMemberItem(FALSE); QCString tmp = cd->compoundTypeString(); + QCString cname = substitute(cd->className(),"::","."); ol.writeString(tmp); ol.writeString(" "); ol.insertMemberAlign(); @@ -103,13 +104,13 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f ol.writeObjectLink(cd->getReference(), cd->getOutputFileBase(), 0, - cd->className() + cname ); } else { ol.startBold(); - ol.docify(cd->className()); + ol.docify(cname); ol.endBold(); } ol.endMemberItem(); diff --git a/src/commentcnv.l b/src/commentcnv.l index 5df9adf..6faafd5 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -198,7 +198,7 @@ void replaceComment(int offset); <CComment>[^\\@*\n]* { /* anything that is not a '*' */ copyToOutput(yytext,yyleng); } -<CComment>"*"+[^*/\n]* { /* stars without slashes */ +<CComment>"*"+[^*/\\@\n]* { /* stars without slashes */ copyToOutput(yytext,yyleng); } <CComment>\n { /* new line in comment */ diff --git a/src/compound.xsd b/src/compound.xsd index 042f8f5..9fb394a 100644 --- a/src/compound.xsd +++ b/src/compound.xsd @@ -120,9 +120,11 @@ <xsd:attribute name="mutable" type="DoxBool" /> </xsd:complexType> - <xsd:complexType name="descriptionType" mixed="true"> + <xsd:complexType name="descriptionType"> <xsd:sequence> - <xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="internal" type="docInternalType" minOccurs="0" /> </xsd:sequence> </xsd:complexType> @@ -226,6 +228,312 @@ <xsd:attribute name="bodyend" type="xsd:integer" /> </xsd:complexType> + <xsd:complexType name="docSect1Type" mixed="true"> + <xsd:sequence> + <xsd:element name="title" type="xsd:string" /> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="internal" type="docInternalS1Type" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="id" /> + </xsd:complexType> + + <xsd:complexType name="docSect2Type" mixed="true"> + <xsd:sequence> + <xsd:element name="title" type="xsd:string" /> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="internal" type="docInternalS2Type" minOccurs="0" /> + </xsd:sequencee + <xsd:attribute name="id" /> + </xsd:complexType> + + <xsd:complexType name="docSect3Type" mixed="true"> + <xsd:sequence> + <xsd:element name="title" type="xsd:string" /> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect4" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="internal" type="docInternalS3Type" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="id" /> + </xsd:complexType> + + <xsd:complexType name="docSect4Type" mixed="true"> + <xsd:sequence> + <xsd:element name="title" type="xsd:string" /> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="internal" type="docInternalS4Type" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="id" /> + </xsd:complexType> + + <xsd:complexType name="docInternalType" mixed="true"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docInternalS1Type" mixed="true"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docInternalS2Type" mixed="true"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docInternalS3Type" mixed="true"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect3" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docInternalS4Type" mixed="true"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:group name="docTitleCmdGroup"> + <xsd:choice> + <xsd:element name="ulink" type="docURLLink" /> + <xsd:element name="bold" type="docMarkupType" /> + <xsd:element name="emphasis" type="docMarkupType" /> + <xsd:element name="computeroutput" type="docMarkupType" /> + <xsd:element name="subscript" type="docMarkupType" /> + <xsd:element name="superscript" type="docMarkupType" /> + <xsd:element name="center" type="docMarkupType" /> + <xsd:element name="small" type="docMarkupType" /> + <xsd:element name="htmlonly" type="xsd:string" /> + <xsd:element name="latexonly" type="xsd:string" /> + <xsd:element name="anchor" type="docAnchorType" /> + <xsd:element name="formula" type="docFormulaType" /> + <xsd:element name="ref" type="docRefTextType" /> + <xsd:element name="copy" type="docEmptyType" /> + <xsd:element name="trademark" type="docEmptyType" /> + <xsd:element name="registered" type="docEmptyType" /> + <xsd:element name="umlaut" type="docCharType" /> + <xsd:element name="acute" type="docCharType" /> + <xsd:element name="grave" type="docCharType" /> + <xsd:element name="circ" type="docCharType" /> + <xsd:element name="tilde" type="docCharType" /> + <xsd:element name="cedil" type="docCharType" /> + <xsd:element name="ring" type="docCharType" /> + <xsd:element name="szlig" type="docEmptyType" /> + <xsd:element name="nonbreakablespace" type="docEmptyType" /> + </xsd:choice> + </xsd:group> + + <xsd:complexType name="docTitleType" mixed="true"> + <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + </xsd:complexType> + + <xsd:group name="docCmdGroup"> + <xsd:choice> + <xsd:group ref="docTitleCmdGroup"/> + <xsd:element name="linebreak" type="docEmptyType" /> + <xsd:element name="hruler" type="docEmptyType" /> + <xsd:element name="preformatted" type="docMarkupType" /> + <xsd:element name="programlisting" type="listingType" /> + <xsd:element name="verbatim" type="xsd:string" /> + <xsd:element name="indexentry" type="docIndexEntryType" /> + <xsd:element name="orderedlist" type="docListType" /> + <xsd:element name="itemizedlist" type="docListType" /> + <xsd:element name="simplesect" type="docSimpleSectType" /> + <xsd:element name="title" type="docTitleType" /> + <xsd:element name="variablelist" type="docVariableListType" /> + <xsd:element name="table" type="docTableType" /> + <xsd:element name="heading" type="docHeadingType" /> + <xsd:element name="image" type="docImageType" /> + <xsd:element name="dotfile" type="docDotFileType" /> + <xsd:element name="toclist" type="docTocListType" /> + <xsd:element name="language" type="docLanguageType" /> + <xsd:element name="parameterlist" type="docParamListType" /> + <xsd:element name="xrefsect" type="docXRefSectType" /> + <xsd:element name="copydoc" type="docCopyType" /> + </xsd:choice> + </xsd:group> + + <xsd:complexType name="docParaType" mixed="true"> + <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + </xsd:complexType> + + <xsd:complexType name="docMarkupType" mixed="true"> + <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + </xsd:complexType> + + <xsd:complexType name="docURLLink" mixed="true"> + <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + <xsd:attribute name="url" type="xsd:string" /> + </xsd:complexType> + + <xsd:complexType name="docAnchorType" mixed="true"> + <xsd:attribute name="id" /> + </xsd:complexType> + + <xsd:complexType name="docFormulaType" mixed="true"> + <xsd:attribute name="id" /> + </xsd:complexType> + + <xsd:complexType name="docIndexEntryType"> + <xsd:sequence> + <xsd:element name="primaryie" type="xsd:string" /> + <xsd:element name="secondaryie" type="xsd:string" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docListType"> + <xsd:sequence> + <xsd:element name="listitem" type="docListItemType" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docListItemType"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docSimpleSectType"> + <xsd:sequence> + <xsd:element name="title" type="docTitleType" minOccurs="0" /> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="kind" type="DoxSimpleSectKind" /> + </xsd:complexType> + + <xsd:complexType name="docVarListEntryType"> + <xsd:sequence> + <xsd:element name="term" type="docTitleType" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:group name="docVariableListGroup"> + <xsd:sequence> + <xsd:element name="varlistentry" type="docVarListEntryType" /> + <xsd:element name="listitem" type="docListItemType" /> + </xsd:sequence> + </xsd:group> + + <xsd:complexType name="docVariableListType"> + <xsd:sequence> + <xsd:group ref="docVariableListGroup" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docRefTextType" mixed="true"> + <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + <xsd:attribute name="refid" /> + <xsd:attribute name="kindref" /> + <xsd:attribute name="external" /> + </xsd:complexType> + + <xsd:complexType name="docTableType"> + <xsd:sequence> + <xsd:element name="row" type="docRowType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="caption" type="docCaptionType" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="rows" type="xsd:integer" /> + <xsd:attribute name="cols" type="xsd:integer" /> + </xsd:complexType> + + <xsd:complexType name="docRowType"> + <xsd:sequence> + <xsd:element name="entry" type="docEntryType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docEntryType"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="thead" type="DoxBool" /> + </xsd:complexType> + + <xsd:complexType name="docCaptionType" mixed="true"> + <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + </xsd:complexType> + + <xsd:complexType name="docHeadingType" mixed="true"> + <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + <xsd:attribute name="level" type="xsd:integer" /> <!-- todo: range 1-6 --> + </xsd:complexType> + + <xsd:complexType name="docImageType" mixed="true"> + <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + <xsd:attribute name="type" type="DoxImageKind" /> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="width" type="xsd:string" /> + <xsd:attribute name="height" type="xsd:string" /> + </xsd:complexType> + + <xsd:complexType name="docDotFileType" mixed="true"> + <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + + <xsd:complexType name="docTocItemType" mixed="true"> + <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" /> + <xsd:attribute name="id" /> + </xsd:complexType> + + <xsd:complexType name="docTocListType"> + <xsd:sequence> + <xsd:element name="tocitem" type="docTocItemType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="docLanguageType"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="langid" type="xsd:string" /> + </xsd:complexType> + + <xsd:group name="docParamListGroup"> + <xsd:sequence> + <xsd:element name="parametername" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="parameterdescription" type="descriptionType" /> + </xsd:sequence> + </xsd:group> + + <xsd:complexType name="docParamListType"> + <xsd:sequence> + <xsd:group ref="docParamListGroup" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="kind" type="DoxParamListKind" /> + </xsd:complexType> + + <xsd:complexType name="docXRefSectType"> + <xsd:sequence> + <xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="xrefdescription" type="descriptionType" /> + </xsd:sequence> + <xsd:attribute name="id" /> + </xsd:complexType> + + <xsd:complexType name="docCopyType"> + <xsd:sequence> + <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="internal" type="docInternalType" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="link" /> + </xsd:complexType> + + <xsd:complexType name="docCharType"> + <xsd:attribute name="char" type="DoxCharRange"/> + </xsd:complexType> + + <xsd:complexType name="docEmptyType"/> + <!-- Simple types --> <xsd:simpleType name="DoxBool"> @@ -350,12 +658,54 @@ </xsd:restriction> </xsd:simpleType> + <xsd:simpleType name="DoxSimpleSectKind"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="see" /> + <xsd:enumeration value="return" /> + <xsd:enumeration value="author" /> + <xsd:enumeration value="authors" /> + <xsd:enumeration value="version" /> + <xsd:enumeration value="since" /> + <xsd:enumeration value="date" /> + <xsd:enumeration value="note" /> + <xsd:enumeration value="warning" /> + <xsd:enumeration value="pre" /> + <xsd:enumeration value="post" /> + <xsd:enumeration value="invariant" /> + <xsd:enumeration value="remark" /> + <xsd:enumeration value="attention" /> + <xsd:enumeration value="par" /> + <xsd:enumeration value="rcs" /> + </xsd:restriction> + </xsd:simpleType> + <xsd:simpleType name="DoxVersionNumber"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d+\.\d+.*" /> </xsd:restriction> </xsd:simpleType> + <xsd:simpleType name="DoxImageKind"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="html" /> + <xsd:enumeration value="latex" /> + <xsd:enumeration value="rtf" /> + </xsd:restriction> + </xsd:simpleType> + + <xsd:simpleType name="DoxParamListKind"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="param" /> + <xsd:enumeration value="retval" /> + <xsd:enumeration value="exception" /> + </xsd:restriction> + </xsd:simpleType> + + <xsd:simpleType name="DoxCharRange"> + <xsd:restriction base="xsd:string"> + <xsd:pattern value="[aeiouncAEIOUNC]" /> + </xsd:restriction> + </xsd:simpleType> </xsd:schema> diff --git a/src/compound_xsd.h b/src/compound_xsd.h index f914e0e..ca866bb 100644 --- a/src/compound_xsd.h +++ b/src/compound_xsd.h @@ -120,9 +120,11 @@ " <xsd:attribute name=\"mutable\" type=\"DoxBool\" />\n" " </xsd:complexType>\n" "\n" -" <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n" +" <xsd:complexType name=\"descriptionType\">\n" " <xsd:sequence>\n" -" <xsd:any processContents=\"lax\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"internal\" type=\"docInternalType\" minOccurs=\"0\" />\n" " </xsd:sequence>\n" " </xsd:complexType>\n" "\n" @@ -226,6 +228,312 @@ " <xsd:attribute name=\"bodyend\" type=\"xsd:integer\" />\n" " </xsd:complexType>\n" "\n" +" <xsd:complexType name=\"docSect1Type\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"title\" type=\"xsd:string\" /> \n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect2\" type=\"docSect2Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"internal\" type=\"docInternalS1Type\" minOccurs=\"0\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"id\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docSect2Type\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"title\" type=\"xsd:string\" /> \n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect3\" type=\"docSect3Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"internal\" type=\"docInternalS2Type\" minOccurs=\"0\" />\n" +" </xsd:sequencee\n" +" <xsd:attribute name=\"id\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docSect3Type\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"title\" type=\"xsd:string\" /> \n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect4\" type=\"docSect4Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"internal\" type=\"docInternalS3Type\" minOccurs=\"0\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"id\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docSect4Type\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"title\" type=\"xsd:string\" /> \n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"internal\" type=\"docInternalS4Type\" minOccurs=\"0\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"id\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docInternalType\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docInternalS1Type\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect2\" type=\"docSect2Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docInternalS2Type\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect3\" type=\"docSect3Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docInternalS3Type\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect3\" type=\"docSect4Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docInternalS4Type\" mixed=\"true\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +" \n" +" <xsd:group name=\"docTitleCmdGroup\">\n" +" <xsd:choice>\n" +" <xsd:element name=\"ulink\" type=\"docURLLink\" />\n" +" <xsd:element name=\"bold\" type=\"docMarkupType\" />\n" +" <xsd:element name=\"emphasis\" type=\"docMarkupType\" />\n" +" <xsd:element name=\"computeroutput\" type=\"docMarkupType\" />\n" +" <xsd:element name=\"subscript\" type=\"docMarkupType\" />\n" +" <xsd:element name=\"superscript\" type=\"docMarkupType\" />\n" +" <xsd:element name=\"center\" type=\"docMarkupType\" />\n" +" <xsd:element name=\"small\" type=\"docMarkupType\" />\n" +" <xsd:element name=\"htmlonly\" type=\"xsd:string\" />\n" +" <xsd:element name=\"latexonly\" type=\"xsd:string\" />\n" +" <xsd:element name=\"anchor\" type=\"docAnchorType\" />\n" +" <xsd:element name=\"formula\" type=\"docFormulaType\" />\n" +" <xsd:element name=\"ref\" type=\"docRefTextType\" />\n" +" <xsd:element name=\"copy\" type=\"docEmptyType\" />\n" +" <xsd:element name=\"trademark\" type=\"docEmptyType\" />\n" +" <xsd:element name=\"registered\" type=\"docEmptyType\" />\n" +" <xsd:element name=\"umlaut\" type=\"docCharType\" />\n" +" <xsd:element name=\"acute\" type=\"docCharType\" />\n" +" <xsd:element name=\"grave\" type=\"docCharType\" />\n" +" <xsd:element name=\"circ\" type=\"docCharType\" />\n" +" <xsd:element name=\"tilde\" type=\"docCharType\" />\n" +" <xsd:element name=\"cedil\" type=\"docCharType\" />\n" +" <xsd:element name=\"ring\" type=\"docCharType\" />\n" +" <xsd:element name=\"szlig\" type=\"docEmptyType\" />\n" +" <xsd:element name=\"nonbreakablespace\" type=\"docEmptyType\" />\n" +" </xsd:choice>\n" +" </xsd:group>\n" +"\n" +" <xsd:complexType name=\"docTitleType\" mixed=\"true\">\n" +" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:group name=\"docCmdGroup\">\n" +" <xsd:choice>\n" +" <xsd:group ref=\"docTitleCmdGroup\"/>\n" +" <xsd:element name=\"linebreak\" type=\"docEmptyType\" />\n" +" <xsd:element name=\"hruler\" type=\"docEmptyType\" />\n" +" <xsd:element name=\"preformatted\" type=\"docMarkupType\" />\n" +" <xsd:element name=\"programlisting\" type=\"listingType\" />\n" +" <xsd:element name=\"verbatim\" type=\"xsd:string\" />\n" +" <xsd:element name=\"indexentry\" type=\"docIndexEntryType\" />\n" +" <xsd:element name=\"orderedlist\" type=\"docListType\" />\n" +" <xsd:element name=\"itemizedlist\" type=\"docListType\" />\n" +" <xsd:element name=\"simplesect\" type=\"docSimpleSectType\" />\n" +" <xsd:element name=\"title\" type=\"docTitleType\" />\n" +" <xsd:element name=\"variablelist\" type=\"docVariableListType\" />\n" +" <xsd:element name=\"table\" type=\"docTableType\" />\n" +" <xsd:element name=\"heading\" type=\"docHeadingType\" />\n" +" <xsd:element name=\"image\" type=\"docImageType\" />\n" +" <xsd:element name=\"dotfile\" type=\"docDotFileType\" />\n" +" <xsd:element name=\"toclist\" type=\"docTocListType\" />\n" +" <xsd:element name=\"language\" type=\"docLanguageType\" />\n" +" <xsd:element name=\"parameterlist\" type=\"docParamListType\" />\n" +" <xsd:element name=\"xrefsect\" type=\"docXRefSectType\" />\n" +" <xsd:element name=\"copydoc\" type=\"docCopyType\" />\n" +" </xsd:choice>\n" +" </xsd:group>\n" +"\n" +" <xsd:complexType name=\"docParaType\" mixed=\"true\">\n" +" <xsd:group ref=\"docCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docMarkupType\" mixed=\"true\">\n" +" <xsd:group ref=\"docCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docURLLink\" mixed=\"true\">\n" +" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:attribute name=\"url\" type=\"xsd:string\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docAnchorType\" mixed=\"true\">\n" +" <xsd:attribute name=\"id\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docFormulaType\" mixed=\"true\">\n" +" <xsd:attribute name=\"id\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docIndexEntryType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"primaryie\" type=\"xsd:string\" />\n" +" <xsd:element name=\"secondaryie\" type=\"xsd:string\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docListType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"listitem\" type=\"docListItemType\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docListItemType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docSimpleSectType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"title\" type=\"docTitleType\" minOccurs=\"0\" />\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"kind\" type=\"DoxSimpleSectKind\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docVarListEntryType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"term\" type=\"docTitleType\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:group name=\"docVariableListGroup\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"varlistentry\" type=\"docVarListEntryType\" />\n" +" <xsd:element name=\"listitem\" type=\"docListItemType\" />\n" +" </xsd:sequence>\n" +" </xsd:group>\n" +"\n" +" <xsd:complexType name=\"docVariableListType\">\n" +" <xsd:sequence>\n" +" <xsd:group ref=\"docVariableListGroup\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docRefTextType\" mixed=\"true\">\n" +" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:attribute name=\"refid\" />\n" +" <xsd:attribute name=\"kindref\" />\n" +" <xsd:attribute name=\"external\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docTableType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"row\" type=\"docRowType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"caption\" type=\"docCaptionType\" minOccurs=\"0\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"rows\" type=\"xsd:integer\" />\n" +" <xsd:attribute name=\"cols\" type=\"xsd:integer\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docRowType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"entry\" type=\"docEntryType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docEntryType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"thead\" type=\"DoxBool\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docCaptionType\" mixed=\"true\">\n" +" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docHeadingType\" mixed=\"true\">\n" +" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:attribute name=\"level\" type=\"xsd:integer\" /> <!-- todo: range 1-6 -->\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docImageType\" mixed=\"true\">\n" +" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:attribute name=\"type\" type=\"DoxImageKind\" /> \n" +" <xsd:attribute name=\"name\" type=\"xsd:string\" /> \n" +" <xsd:attribute name=\"width\" type=\"xsd:string\" /> \n" +" <xsd:attribute name=\"height\" type=\"xsd:string\" /> \n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docDotFileType\" mixed=\"true\">\n" +" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:attribute name=\"name\" type=\"xsd:string\" /> \n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docTocItemType\" mixed=\"true\">\n" +" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:attribute name=\"id\" /> \n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docTocListType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"tocitem\" type=\"docTocItemType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docLanguageType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"langid\" type=\"xsd:string\" /> \n" +" </xsd:complexType>\n" +"\n" +" <xsd:group name=\"docParamListGroup\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"parametername\" type=\"xsd:string\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"parameterdescription\" type=\"descriptionType\" />\n" +" </xsd:sequence>\n" +" </xsd:group>\n" +"\n" +" <xsd:complexType name=\"docParamListType\">\n" +" <xsd:sequence>\n" +" <xsd:group ref=\"docParamListGroup\" maxOccurs=\"unbounded\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"kind\" type=\"DoxParamListKind\" /> \n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docXRefSectType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"xreftitle\" type=\"xsd:string\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"xrefdescription\" type=\"descriptionType\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"id\" /> \n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docCopyType\">\n" +" <xsd:sequence>\n" +" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" +" <xsd:element name=\"internal\" type=\"docInternalType\" minOccurs=\"0\" />\n" +" </xsd:sequence>\n" +" <xsd:attribute name=\"link\" /> \n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docCharType\">\n" +" <xsd:attribute name=\"char\" type=\"DoxCharRange\"/> \n" +" </xsd:complexType>\n" +"\n" +" <xsd:complexType name=\"docEmptyType\"/>\n" +"\n" " <!-- Simple types -->\n" "\n" " <xsd:simpleType name=\"DoxBool\">\n" @@ -350,12 +658,54 @@ " </xsd:restriction>\n" " </xsd:simpleType>\n" "\n" +" <xsd:simpleType name=\"DoxSimpleSectKind\">\n" +" <xsd:restriction base=\"xsd:string\">\n" +" <xsd:enumeration value=\"see\" />\n" +" <xsd:enumeration value=\"return\" />\n" +" <xsd:enumeration value=\"author\" />\n" +" <xsd:enumeration value=\"authors\" />\n" +" <xsd:enumeration value=\"version\" />\n" +" <xsd:enumeration value=\"since\" />\n" +" <xsd:enumeration value=\"date\" />\n" +" <xsd:enumeration value=\"note\" />\n" +" <xsd:enumeration value=\"warning\" />\n" +" <xsd:enumeration value=\"pre\" />\n" +" <xsd:enumeration value=\"post\" />\n" +" <xsd:enumeration value=\"invariant\" />\n" +" <xsd:enumeration value=\"remark\" />\n" +" <xsd:enumeration value=\"attention\" />\n" +" <xsd:enumeration value=\"par\" />\n" +" <xsd:enumeration value=\"rcs\" />\n" +" </xsd:restriction>\n" +" </xsd:simpleType>\n" +"\n" " <xsd:simpleType name=\"DoxVersionNumber\">\n" " <xsd:restriction base=\"xsd:string\">\n" " <xsd:pattern value=\"\\d+\\.\\d+.*\" />\n" " </xsd:restriction>\n" " </xsd:simpleType>\n" "\n" +" <xsd:simpleType name=\"DoxImageKind\">\n" +" <xsd:restriction base=\"xsd:string\">\n" +" <xsd:enumeration value=\"html\" />\n" +" <xsd:enumeration value=\"latex\" />\n" +" <xsd:enumeration value=\"rtf\" />\n" +" </xsd:restriction>\n" +" </xsd:simpleType>\n" +"\n" +" <xsd:simpleType name=\"DoxParamListKind\">\n" +" <xsd:restriction base=\"xsd:string\">\n" +" <xsd:enumeration value=\"param\" />\n" +" <xsd:enumeration value=\"retval\" />\n" +" <xsd:enumeration value=\"exception\" />\n" +" </xsd:restriction>\n" +" </xsd:simpleType>\n" +"\n" +" <xsd:simpleType name=\"DoxCharRange\">\n" +" <xsd:restriction base=\"xsd:string\">\n" +" <xsd:pattern value=\"[aeiouncAEIOUNC]\" />\n" +" </xsd:restriction>\n" +" </xsd:simpleType>\n" "\n" "</xsd:schema>\n" "\n" diff --git a/src/definition.cpp b/src/definition.cpp index 1482ab7..75c2931 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -126,6 +126,7 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, { if (d==0) return; //printf("Definition::setDocumentation(%s,%s,%d,%d)\n",d,docFile,docLine,stripWhiteSpace); + QCString doc; if (stripWhiteSpace) { // strip leading empty lines in front of the text, but not the @@ -141,20 +142,21 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, s++; } if (c=='\0') return; - m_doc=d+so; + doc=d+so; // zero any trailing whitespace - int e=m_doc.length()-1; - while (e>=0 && (c=m_doc.at(e)) && (c==' ' || c=='\r' || c=='\n')) + int e=doc.length()-1; + while (e>=0 && (c=doc.at(e)) && (c==' ' || c=='\r' || c=='\n')) { - m_doc.at(e)='\0'; + doc.at(e)='\0'; e--; } } else // don't strip whitespace { - m_doc=d; + doc=d; } //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data()); + m_doc=doc; m_docFile = docFile; m_docLine = docLine; } @@ -163,7 +165,7 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri { if (b==0) return; //printf("Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine); - m_brief=QCString(b).stripWhiteSpace(); + m_brief=QCString(b).stripWhiteSpace(); int bl=m_brief.length(); if (bl>0) // add puntuation if needed { diff --git a/src/docparser.cpp b/src/docparser.cpp index 56f1f55..1b584b3 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -2143,7 +2143,7 @@ endhref: //--------------------------------------------------------------------------- -int DocInternal::parse() +int DocInternal::parse(int level) { int retval=RetVal_OK; g_nodeStack.push(this); @@ -2170,25 +2170,24 @@ int DocInternal::parse() { warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid list item found",doctokenizerYYlineno); } - } while (retval!=0 && retval!=RetVal_Section); + } while (retval!=0 && + retval!=RetVal_Section && + retval!=RetVal_Subsection && + retval!=RetVal_Subsubsection && + retval!=RetVal_Paragraph + ); if (lastPar) lastPar->markLast(); - // then parse any number of level1 sections - while (retval==RetVal_Section) + // then parse any number of level-n sections + while ((level==1 && retval==RetVal_Section) || + (level==2 && retval==RetVal_Subsection) || + (level==3 && retval==RetVal_Subsubsection) || + (level==4 && retval==RetVal_Paragraph) + ) { - //SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId]; - //int secLev = sec->type==SectionInfo::Subsection ? 2 : 1; - //if (secLev!=1) // wrong level - //{ - // warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Expected level 1 section, found a section with level %d.",secLev); - // break; - //} - //else - //{ - DocSection *s=new DocSection(this,1,g_token->sectionId); - m_children.append(s); - retval = s->parse(); - //} + DocSection *s=new DocSection(this,level,g_token->sectionId); + m_children.append(s); + retval = s->parse(); } if (retval==RetVal_Internal) @@ -2503,6 +2502,32 @@ getrow: return retval==RetVal_EndTable ? RetVal_OK : retval; } +uint DocHtmlTable::numCols() const +{ + uint cols=0; + QListIterator<DocNode> cli(m_children); + DocNode *n; + for (cli.toFirst();(n=cli.current());++cli) + { + ASSERT(n->kind()==DocNode::Kind_HtmlRow); + cols=QMAX(cols,((DocHtmlRow *)n)->numCells()); + } + return cols; +} + +void DocHtmlTable::accept(DocVisitor *v) +{ + v->visitPre(this); + // for HTML output we put the caption first + if (m_caption && v->id()==DocVisitor_Html) m_caption->accept(v); + QListIterator<DocNode> cli(m_children); + DocNode *n; + for (cli.toFirst();(n=cli.current());++cli) n->accept(v); + // for other output formats we put the caption last + if (m_caption && v->id()!=DocVisitor_Html) m_caption->accept(v); + v->visitPost(this); +} + //--------------------------------------------------------------------------- int DocHtmlDescTitle::parse() @@ -4496,6 +4521,12 @@ int DocSection::parse() retval=0; // stop parsing } + else if (retval==RetVal_Internal) + { + DocInternal *in = new DocInternal(this); + m_children.append(in); + retval = in->parse(m_level+1); + } else { } @@ -4659,7 +4690,7 @@ void DocRoot::parse() { DocInternal *in = new DocInternal(this); m_children.append(in); - retval = in->parse(); + retval = in->parse(1); } diff --git a/src/docparser.h b/src/docparser.h index 383f23c..1554037 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -821,7 +821,7 @@ class DocInternal : public CompAccept<DocInternal>, public DocNode { public: DocInternal(DocNode *parent) : m_parent(parent) {} - int parse(); + int parse(int); Kind kind() const { return Kind_Internal; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { CompAccept<DocInternal>::accept(this,v); } @@ -1103,6 +1103,7 @@ class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode private: DocNode * m_parent; HtmlAttribList m_attribs; + bool m_atTop; }; /*! @brief Node representing a HTML table row */ @@ -1137,27 +1138,8 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode bool hasCaption() { return m_caption!=0; } const HtmlAttribList &attribs() const { return m_attribs; } int parse(); - uint numCols() const - { - uint cols=0; - QListIterator<DocNode> cli(m_children); - DocNode *n; - for (cli.toFirst();(n=cli.current());++cli) - { - ASSERT(n->kind()==DocNode::Kind_HtmlRow); - cols=QMAX(cols,((DocHtmlRow *)n)->numCells()); - } - return cols; - } - void accept(DocVisitor *v) - { - v->visitPre(this); - QListIterator<DocNode> cli(m_children); - DocNode *n; - for (cli.toFirst();(n=cli.current());++cli) n->accept(v); - if (m_caption) m_caption->accept(v); - v->visitPost(this); - } + uint numCols() const; + void accept(DocVisitor *v); private: DocNode * m_parent; diff --git a/src/docvisitor.h b/src/docvisitor.h index 949781e..3815cbb 100644 --- a/src/docvisitor.h +++ b/src/docvisitor.h @@ -19,6 +19,14 @@ #ifndef _DOCVISITOR_H #define _DOCVISITOR_H +// ids +const int DocVisitor_Html = 0; +const int DocVisitor_Latex = 1; +const int DocVisitor_XML = 2; +const int DocVisitor_RTF = 3; +const int DocVisitor_Man = 4; +const int DocVisitor_Other = 5; + // forward declarations class DocWord; class DocWhiteSpace; @@ -38,7 +46,6 @@ class DocVerbatim; class DocXRefItem; class DocHtmlList; class DocHtmlListItem; -//class DocHtmlPre; class DocHtmlDescList; class DocHtmlDescTitle; class DocHtmlDescData; @@ -74,8 +81,12 @@ class DocText; */ class DocVisitor { + int m_id; public: + DocVisitor(int id) : m_id(id) {} virtual ~DocVisitor() {} + int id() const { return m_id; } + /*! @name Visitor functions for leaf nodes * @{ */ @@ -120,8 +131,6 @@ class DocVisitor virtual void visitPost(DocHtmlListItem *) = 0; virtual void visitPre(DocHtmlListItem *) = 0; virtual void visitPost(DocHtmlList *) = 0; - //virtual void visitPre(DocHtmlPre *) = 0; - //virtual void visitPost(DocHtmlPre *) = 0; virtual void visitPre(DocHtmlDescList *) = 0; virtual void visitPost(DocHtmlDescList *) = 0; virtual void visitPre(DocHtmlDescTitle *) = 0; diff --git a/src/doxygen.cpp b/src/doxygen.cpp index c4c88a3..addf597 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -840,6 +840,34 @@ static void buildClassDocList(Entry *root) } } +Definition *buildScopeFromQualifiedName(const QCString name,int level) +{ + int i=0; + int p=0,l; + Definition *prevScope=Doxygen::globalScope; + QCString fullScope; + while (i<level) + { + int idx=getScopeFragment(name,p,&l); + QCString nsName = name.mid(idx,l); + if (!fullScope.isEmpty()) fullScope+="::"; + fullScope+=nsName; + //printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data()); + // introduce bogus namespace + NamespaceDef *nd=new NamespaceDef( + "<generated>",1,fullScope); + + // add namespace to the list + Doxygen::namespaceSDict.inSort(fullScope,nd); + prevScope->addInnerCompound(nd); + nd->setOuterScope(prevScope); + p=idx+l+2; + prevScope=nd; + i++; + } + return prevScope; +} + static void resolveClassNestingRelations() { ClassSDict::Iterator cli(Doxygen::classSDict); @@ -986,13 +1014,11 @@ static void buildNamespaceList(Entry *root) //printf("adding namespace %s to context %s\n",nd->name().data(),d?d->name().data():"none"); if (d==0) { + Definition *d = buildScopeFromQualifiedName(fullName,fullName.contains("::")); + d->addInnerCompound(nd); + nd->setOuterScope(d); // TODO: Due to the order in which the tag file is written // a nested class can be found before its parent! - // - //warn(root->fileName,root->startLine, - // "Warning: Internal inconsistency: scope for namespace %s not " - // "found!\n",fullName.data() - // ); } else { @@ -2226,8 +2252,8 @@ static void buildFunctionList(Entry *root) ); // otherwise, allow a duplicate global member with the same argument list - //printf("combining function with prototype found=%d `%s'<->`%s'!\n", - // found,fd->absFilePath().data(),root->fileName.data()); + //printf("combining function with prototype found=%d in namespace %s\n", + // found,nsName.data()); // merge argument lists //mergeArguments(root->argList,md->argumentList()); @@ -2266,10 +2292,19 @@ static void buildFunctionList(Entry *root) md->setArgumentList(argList); } } + else if (!md->documentation().isEmpty() && !root->doc.isEmpty()) + { + warn(root->docFile,root->docLine,"Warning: ignoring the detailed description found here, since another one was found at line %d of file %s!",md->docLine(),md->docFile().data()); + } + if (md->briefDescription().isEmpty() && !root->brief.isEmpty()) { md->setBriefDescription(root->brief,root->briefFile,root->briefLine); } + else if (!md->briefDescription().isEmpty() && !root->brief.isEmpty()) + { + warn(root->briefFile,root->briefLine,"Warning: ignoring the brief description found here, since another one was found at line %d of file %s!",md->briefLine(),md->briefFile().data()); + } md->addSectionsToDefinition(root->anchors); @@ -2279,10 +2314,17 @@ static void buildFunctionList(Entry *root) if (md->getGroupDef()==0 && root->groups->first()) { // if we do addMemberToGroups here an undocumented declaration may prevent - // the documented implementation below from being added + // the documented implementation below it from being added //addMemberToGroups(root,md); GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()]; - md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty()); + if (gd) + { + bool success = gd->insertMember(md); + if (success) + { + md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty()); + } + } } else if (md->getGroupDef()!=0 && root->groups->count()==0) { @@ -8198,7 +8240,7 @@ void generateOutput() cleanUpDoxygen(); if (Debug::isFlagSet(Debug::Time)) { - printf("Total elapsed time: %.3f seconds\n(of which %.3f seconds waiting for external tools to finish)\n", + msg("Total elapsed time: %.3f seconds\n(of which %.3f seconds waiting for external tools to finish)\n", ((double)Doxygen::runningTime.elapsed())/1000.0, Doxygen::sysElapsedTime ); diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 4fb2be5..8d75de9 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -43,7 +43,7 @@ static QString htmlAttribsToString(const HtmlAttribList &attribs) //------------------------------------------------------------------------- HtmlDocVisitor::HtmlDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) - : m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE) + : DocVisitor(DocVisitor_Html), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE) { } diff --git a/src/index.cpp b/src/index.cpp index c76b5d6..c4d463a 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -1485,6 +1485,15 @@ void writeAlphabeticalClassList(OutputList &ol) //if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName(); //QCString cname=cd->className(); extractNamespaceName(cd->name(),cname,namesp); + QCString nsDispName; + if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + { + nsDispName=substitute(namesp,"::","."); + } + else + { + nsDispName=namesp.copy(); + } ol.writeObjectLink(cd->getReference(), cd->getOutputFileBase(),0,cname); @@ -1495,11 +1504,11 @@ void writeAlphabeticalClassList(OutputList &ol) if (nd && nd->isLinkable()) { ol.writeObjectLink(nd->getReference(), - nd->getOutputFileBase(),0,namesp); + nd->getOutputFileBase(),0,nsDispName); } else { - ol.docify(namesp); + ol.docify(nsDispName); } ol.docify(")"); } diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 8b80907..bc20db5 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -80,7 +80,7 @@ QString LatexDocVisitor::escapeMakeIndexChars(const char *s) LatexDocVisitor::LatexDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) - : m_t(t), m_ci(ci), m_insidePre(FALSE), m_insideItem(FALSE), m_hide(FALSE) + : DocVisitor(DocVisitor_Latex), m_t(t), m_ci(ci), m_insidePre(FALSE), m_insideItem(FALSE), m_hide(FALSE) { } @@ -99,7 +99,7 @@ void LatexDocVisitor::visit(DocLinkedWord *w) if (m_hide) return; startLink(w->ref(),w->file(),w->anchor()); filter(w->word()); - endLink(); + endLink(w->ref(),w->file(),w->anchor()); } void LatexDocVisitor::visit(DocWhiteSpace *w) @@ -797,10 +797,10 @@ void LatexDocVisitor::visitPre(DocLink *lnk) startLink(lnk->ref(),lnk->file(),lnk->anchor()); } -void LatexDocVisitor::visitPost(DocLink *) +void LatexDocVisitor::visitPost(DocLink *lnk) { if (m_hide) return; - endLink(); + endLink(lnk->ref(),lnk->file(),lnk->anchor()); } void LatexDocVisitor::visitPre(DocRef *ref) @@ -810,10 +810,10 @@ void LatexDocVisitor::visitPre(DocRef *ref) if (!ref->hasLinkText()) filter(ref->targetTitle()); } -void LatexDocVisitor::visitPost(DocRef *) +void LatexDocVisitor::visitPost(DocRef *ref) { if (m_hide) return; - endLink(); + endLink(ref->ref(),ref->file(),ref->anchor()); } void LatexDocVisitor::visitPre(DocSecRefItem *) @@ -942,10 +942,10 @@ void LatexDocVisitor::visitPre(DocInternalRef *ref) startLink(0,ref->file(),ref->anchor()); } -void LatexDocVisitor::visitPost(DocInternalRef *) +void LatexDocVisitor::visitPost(DocInternalRef *ref) { if (m_hide) return; - endLink(); + endLink(0,ref->file(),ref->anchor()); } void LatexDocVisitor::visitPre(DocCopy *) @@ -986,9 +986,16 @@ void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QSt } } -void LatexDocVisitor::endLink() +void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QString &anchor) { m_t << "}"; + if (ref.isEmpty() && !Config_getBool("PDF_HYPERLINKS")) + { + m_t << "{\\rm (" << theTranslator->trPageAbbreviation(); + m_t << "\\,\\pageref{" << file; + if (!anchor.isEmpty()) m_t << "_" << anchor; + m_t << "})}"; + } } void LatexDocVisitor::pushEnabled() diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h index f0a8204..0b168d5 100644 --- a/src/latexdocvisitor.h +++ b/src/latexdocvisitor.h @@ -135,7 +135,8 @@ class LatexDocVisitor : public DocVisitor void filter(const char *str); void startLink(const QString &ref,const QString &file, const QString &anchor); - void endLink(); + void endLink(const QString &ref,const QString &file, + const QString &anchor); QString escapeMakeIndexChars(const char *s); void pushEnabled(); diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 3353182..2908460 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -27,7 +27,7 @@ #include "message.h" ManDocVisitor::ManDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) - : m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE), + : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE), m_indent(0) { } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index c9b36c8..dfa8d07 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -84,6 +84,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, if (defArgList==0) return; // member has no function like argument list if (!md->isDefine()) ol.docify(" "); + //printf("writeDefArgList(%d)\n",defArgList->count()); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); ol.endMemberDocName(); diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 8f38d2d..2574f6b 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -413,7 +413,7 @@ private: }; PerlModDocVisitor::PerlModDocVisitor(PerlModOutput &output) - : m_output(output), m_textmode(false) + : DocVisitor(DocVisitor_Other), m_output(output), m_textmode(false) { m_output.openList("doc"); } diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index b06e0a6..1241659 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -25,7 +25,8 @@ class PrintDocVisitor : public DocVisitor { public: - PrintDocVisitor() : m_indent(0), m_needsEnter(FALSE), m_insidePre(FALSE) {} + PrintDocVisitor() : DocVisitor(DocVisitor_Other), m_indent(0), + m_needsEnter(FALSE), m_insidePre(FALSE) {} //-------------------------------------- diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index ac1febb..2221d2d 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -28,7 +28,7 @@ #include "message.h" RTFDocVisitor::RTFDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) - : m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_indentLevel(1) + : DocVisitor(DocVisitor_RTF), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_indentLevel(1) { } diff --git a/src/scanner.l b/src/scanner.l index 8b47179..9d9d7e3 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -157,6 +157,7 @@ static QCString xrefItemKey; static QCString xrefItemTitle; static QCString xrefListTitle; +static QCString g_skipBlockName; //----------------------------------------------------------------------------- @@ -2809,6 +2810,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] lastCContext = YY_START; BEGIN(SkipCxxComment); } +<SkipInits>\" { + lastStringContext=YY_START; + BEGIN( SkipString ); + } <SkipInits>; { warn(yyFileName,yyLineNr, "Warning: Found ';' while parsing initializer list! " @@ -3855,31 +3860,37 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] <Doc,PageDoc,ClassDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] { lastVerbState=YY_START; current->doc+="\\verbatim"; + g_skipBlockName="verbatim"; BEGIN(SkipVerbatim); } <JavaDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] { lastVerbState=YY_START; current->brief+="\\verbatim"; + g_skipBlockName="verbatim"; BEGIN(SkipVerbatim); } <Doc,PageDoc,ClassDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] { lastVerbState=YY_START; current->doc+="\\latexonly"; + g_skipBlockName="latexonly"; BEGIN(SkipVerbatim); } <JavaDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] { lastVerbState=YY_START; current->brief+="\\latexonly"; + g_skipBlockName="latexonly"; BEGIN(SkipVerbatim); } <Doc,PageDoc,ClassDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] { lastVerbState=YY_START; current->doc+="\\htmlonly"; + g_skipBlockName="htmlonly"; BEGIN(SkipVerbatim); } <JavaDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] { lastVerbState=YY_START; current->brief+="\\htmlonly"; + g_skipBlockName="htmlonly"; BEGIN(SkipVerbatim); } <Doc,PageDoc,ClassDoc>{CMD}"addindex"{B}+[^\n]+ { @@ -3946,7 +3957,13 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] <SkipVerbatim>. { current->doc+=*yytext; } -<SkipCode>{CMD}"endcode" { +<SkipVerbatim><<EOF>> { + warn(yyFileName,yyLineNr, + "Warning: reached end of file while inside a @%s block; check for missing @end%s!",g_skipBlockName.data(),g_skipBlockName.data() + ); + yyterminate(); + } +<SkipCode>{CMD}"endcode"/[^a-z_A-Z0-9] { *pSkipDoc+="\\endcode"; BEGIN(lastCodeState); } @@ -3975,6 +3992,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] <SkipCode>. { *pSkipDoc+=*yytext; } +<SkipCode><<EOF>> { + warn(yyFileName,yyLineNr, + "Warning: reached end of file while inside a @code block; check for missing @endcode!" + ); + yyterminate(); + } <AnchorLabel>{LABELID} { SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor); Doxygen::sectionDict.insert(yytext,si); @@ -4494,6 +4517,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] current->name = current->name.stripWhiteSpace(); newDocState(); } +<DefLineDoc,LineDoc,AfterDocLine>{SECTIONCMD} { + warn(yyFileName,yyLineNr,"Command %s not allowed in single-line C++ comment! Ignoring.",yytext); + } <Doc>[a-z_A-Z0-9]+ { current->doc += yytext; } <Doc,PageDoc,AfterDoc,LineDoc,ClassDoc>("\\\\"|"@@") { current->doc += yytext; } <Doc>. { current->doc += *yytext; } diff --git a/src/translator_br.h b/src/translator_br.h index a9066d7..2f433b3 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -16,6 +16,8 @@ * Version: 1.3 (2003/05/01) * * History: + * 1.3.2: + * - Updated to Doxygen 1.3.2 * 1.3: * - Updated to Doxygen 1.3.x. * 1.2.19: @@ -27,7 +29,7 @@ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -class TranslatorBrazilian: public TranslatorAdapter_1_3_1 +class TranslatorBrazilian: public Translator { public: @@ -1460,5 +1462,22 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_1 return "Atributos Estáticos do Pacote"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.3.1 +////////////////////////////////////////////////////////////////////////// + + /*! Used in the quick index of a class/file/namespace member list page + * to link to the unfiltered list of all members. + */ + virtual QCString trAll() + { + return "Todos"; + } + /*! Put in front of the call graph for a function. */ + virtual QCString trCallGraph() + { + return "Este é o grafo de chamadas para esta função:"; + } + }; #endif diff --git a/src/translator_pt.h b/src/translator_pt.h index 7444a10..2bc323e 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -40,7 +40,7 @@ #ifndef TRANSLATOR_PT_H #define TRANSLATOR_PT_H -class TranslatorPortuguese : public TranslatorAdapter_1_3_1 +class TranslatorPortuguese : public Translator { public: diff --git a/src/translator_sr.h b/src/translator_sr.h index 532d54e..8fe5973 100644 --- a/src/translator_sr.h +++ b/src/translator_sr.h @@ -20,7 +20,7 @@ // translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu> -class TranslatorSerbian : public TranslatorAdapter_1_3_1 +class TranslatorSerbian : public Translator { private: QCString decode(const QCString& sInput) diff --git a/src/translator_tw.h b/src/translator_tw.h index a22c39e..bccfece 100644 --- a/src/translator_tw.h +++ b/src/translator_tw.h @@ -41,7 +41,7 @@ // Translator class (by the local maintainer) when the localized // translator is made up-to-date again. -class TranslatorChinesetraditional : public TranslatorAdapter_1_2_16 +class TranslatorChinesetraditional : public Translator { public: diff --git a/src/util.cpp b/src/util.cpp index 9509c0a..832ff5f 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -641,12 +641,49 @@ ClassDef *getResolvedClass( } else // not a typedef { - //printf(" not a typedef value\n"); + //printf(" %s is not a typedef value in scope %s\n",name.data(),scope?scope->name().data():"<global>"); if (pIsTypeDef) *pIsTypeDef=FALSE; if (scope!=Doxygen::globalScope) + { cd = Doxygen::classSDict.find(scope->name()+"::"+name); + } else + { cd = Doxygen::classSDict.find(name); + } + if (cd==0) + { + if (scope->definitionType()==Definition::TypeNamespace) + { + NamespaceDef *nscope = (NamespaceDef*)scope; + ClassList *cl = nscope->getUsedClasses(); + if (cl) // see if the class was imported via a using statement + { + ClassListIterator cli(*cl); + ClassDef *ucd; + for (cli.toFirst();(ucd=cli.current());++cli) + { + //printf("comparing %s<->%s\n",ucd->name().data(),name.data()); + if (rightScopeMatch(ucd->name(),name)) + { + cd=ucd; + break; + } + } + } + NamespaceList *nl = nscope->getUsedNamespaces(); + if (nl) // check used namespaces for the class + { + NamespaceListIterator nli(*nl); + NamespaceDef *und; + for (nli.toFirst();(und=nli.current());++nli) + { + cd = getResolvedClass(und,name,pIsTypeDef,pTemplSpec); + if (cd) break; + } + } + } + } if (cd) goto found; } @@ -831,7 +868,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,const char * /*n //int scopeOffset=scopeName.length(); do // for each scope (starting with full scope and going to empty scope) { - //printf("Searching in %s...\n",curScope?curScope->name().data():"<global>"); + //printf("Searching %s in %s...\n",word.data(),curScope?curScope->name().data():"<global>"); QCString fullName = word; QCString prefix; replaceNamespaceAliases(fullName,fullName.length()); @@ -2749,7 +2786,7 @@ bool generateLink(OutputDocInterface &od,const char *clName, //PageDef *pageDef=0; QCString anchor,linkText=linkToText(lt); //printf("generateLink linkText=%s\n",linkText.data()); - if (resolveLink(clName,lr,inSeeBlock,&compound,/*&pageInfo,*/anchor)) + if (resolveLink(clName,lr,inSeeBlock,&compound,anchor)) { //if (pageInfo) // link to page //{ diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index 4320d17..51dac52 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -28,7 +28,7 @@ #include "util.h" XmlDocVisitor::XmlDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) - : m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE) + : DocVisitor(DocVisitor_XML), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE) { } @@ -424,13 +424,15 @@ void XmlDocVisitor::visitPost(DocSimpleListItem *) void XmlDocVisitor::visitPre(DocSection *s) { if (m_hide) return; - m_t << "<sect" << s->level()+1 << " id=\"" << s->id() << "\">"; + m_t << "<sect" << s->level() << " id=\"" << s->id() << "\">" << endl; + m_t << "<title>"; filter(s->title()); - m_t << "</sect" << s->level()+1 << ">\n"; + m_t << "</title>" << endl; } -void XmlDocVisitor::visitPost(DocSection *) +void XmlDocVisitor::visitPost(DocSection *s) { + m_t << "</sect" << s->level() << ">\n"; } void XmlDocVisitor::visitPre(DocHtmlList *s) @@ -575,13 +577,13 @@ void XmlDocVisitor::visitPost(DocHRef *) void XmlDocVisitor::visitPre(DocHtmlHeader *header) { if (m_hide) return; - m_t << "<heading" << header->level() << ">"; + m_t << "<heading level=\"" << header->level() << "\">"; } -void XmlDocVisitor::visitPost(DocHtmlHeader *header) +void XmlDocVisitor::visitPost(DocHtmlHeader *) { if (m_hide) return; - m_t << "</heading" << header->level() << ">\n"; + m_t << "</heading>\n"; } void XmlDocVisitor::visitPre(DocImage *img) @@ -689,7 +691,7 @@ void XmlDocVisitor::visitPost(DocSecRefList *) void XmlDocVisitor::visitPre(DocLanguage *l) { if (m_hide) return; - m_t << "<language id=\"" << l->id() << "\">"; + m_t << "<language langid=\"" << l->id() << "\">"; } void XmlDocVisitor::visitPost(DocLanguage *) |