From c454a5400393a54586d81517c42f7419b43b3f23 Mon Sep 17 00:00:00 2001 From: dimitri Date: Sun, 23 Jun 2002 09:46:45 +0000 Subject: Release-1.2.16-20020623 --- INSTALL | 4 +- README | 4 +- VERSION | 2 +- addon/doxmlparser/examples/metrics/main.cpp | 7 +- doc/Makefile.in | 2 +- doc/Makefile.latex | 2 +- doc/Makefile.win_make.in | 2 +- doc/Makefile.win_nmake.in | 2 +- doc/config.doc | 13 +++- doc/doxygen_manual.tex | 3 +- doc/language.doc | 2 +- doc/todo.doc | 37 ---------- packages/rpm/doxygen.spec | 2 +- src/classdef.cpp | 7 +- src/config.l | 14 +++- src/doc.l | 103 ++++++++-------------------- src/dot.cpp | 91 ++++++++++++------------ src/doxygen.cpp | 23 ++++--- src/htmlgen.cpp | 36 ++++++++++ src/htmlgen.h | 6 +- src/htmlhelp.cpp | 80 ++++++++++++++++++++- src/latexgen.cpp | 34 ++++++++- src/latexgen.h | 6 +- src/mangen.cpp | 46 ++++++++++--- src/mangen.h | 6 +- src/memberdef.cpp | 25 +++---- src/outputgen.h | 5 +- src/outputlist.cpp | 3 +- src/outputlist.h | 12 +++- src/rtfgen.cpp | 86 +++++++++++++++++------ src/rtfgen.h | 4 +- src/scanner.l | 4 +- src/translator_es.h | 2 +- src/xmlgen.cpp | 17 ++++- 34 files changed, 438 insertions(+), 254 deletions(-) delete mode 100644 doc/todo.doc diff --git a/INSTALL b/INSTALL index 8186a6c..7045f48 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.16-20020609 +DOXYGEN Version 1.2.16-20020623 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (09 June 2002) +Dimitri van Heesch (23 June 2002) diff --git a/README b/README index 1cf6e7d..761129d 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.2.16_20020609 +DOXYGEN Version 1.2.16_20020623 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) (09 June 2002) +Dimitri van Heesch (dimitri@stack.nl) (23 June 2002) diff --git a/VERSION b/VERSION index 8ef3cd1..763243a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.16-20020609 +1.2.16-20020623 diff --git a/addon/doxmlparser/examples/metrics/main.cpp b/addon/doxmlparser/examples/metrics/main.cpp index 6c2ad1a..9553172 100644 --- a/addon/doxmlparser/examples/metrics/main.cpp +++ b/addon/doxmlparser/examples/metrics/main.cpp @@ -92,7 +92,7 @@ int main(int argc,char **argv) ICompound *comp; for (cli->toFirst();(comp=cli->current());cli->toNext()) { - printf("Processing %s...\n",comp->name().data()); + printf("Processing %s...\n",comp->name()->latin1()); bool hasDocs = isDocumented(comp->briefDescription(),comp->detailedDescription()); switch (comp->kind()) { @@ -108,7 +108,6 @@ int main(int argc,char **argv) case ICompound::File: numFiles++; break; case ICompound::Group: numGroups++; break; case ICompound::Page: numPages++; break; - case ICompound::Package: numPackages++; break; default: break; } @@ -120,7 +119,7 @@ int main(int argc,char **argv) IMember *mem; for (mli->toFirst();(mem=mli->current());mli->toNext()) { - IParamIterator *pli = mem->params(); + IParamIterator *pli = mem->parameters(); IParam *par; if (comp->kind()==ICompound::Class || comp->kind()==ICompound::Struct || @@ -203,7 +202,7 @@ int main(int argc,char **argv) { numParams++; } - if (mem->typeString()!="void") + if (QString(mem->typeString()->latin1())!="void") { numParams++; // count non-void return types as well } diff --git a/doc/Makefile.in b/doc/Makefile.in index 6dfddcc..0c8711b 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -23,7 +23,7 @@ all: language FORCE @cp Makefile.latex ../latex/Makefile @sed -e "s/\$$VERSION/$(VERSION)/g" doxygen_manual.tex >../latex/doxygen_manual.tex @sed -e "s/\$$VERSION/$(VERSION)/g" doxygen.sty >../latex/doxygen.sty - @cp doxygen_logo.eps ../latex + @epstopdf doxygen_logo.eps -o=../latex/doxygen_logo.pdf clean: rm -rf ../html ../latex *.bak translator_report.txt diff --git a/doc/Makefile.latex b/doc/Makefile.latex index 07e453f..57efde9 100644 --- a/doc/Makefile.latex +++ b/doc/Makefile.latex @@ -28,4 +28,4 @@ doxygen_manual.pdf: doxygen_manual.tex doxygen.sty echo "Rerunning latex...." pdflatex doxygen_manual.tex clean: - rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.pdf + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log doxygen_manual.pdf diff --git a/doc/Makefile.win_make.in b/doc/Makefile.win_make.in index 1f576cb..bcf28e4 100644 --- a/doc/Makefile.win_make.in +++ b/doc/Makefile.win_make.in @@ -22,7 +22,7 @@ all: language FORCE @copy Makefile.latex ..\latex\Makefile @sed -e "s/\$$VERSION/$(VERSION)/g" doxygen_manual.tex >..\latex\doxygen_manual.tex @sed -e "s/\$$VERSION/$(VERSION)/g" doxygen.sty >..\latex\doxygen.sty - @copy doxygen_logo.eps ..\latex + @epstopdf doxygen_logo.eps -o=..\latex\doxygen_logo.pdf clean: del /s /q ..\html ..\latex diff --git a/doc/Makefile.win_nmake.in b/doc/Makefile.win_nmake.in index bd79a33..d38116a 100644 --- a/doc/Makefile.win_nmake.in +++ b/doc/Makefile.win_nmake.in @@ -22,7 +22,7 @@ all: language FORCE @copy Makefile.latex ..\latex\Makefile @sed -e "s/\$$VERSION/$(VERSION)/g" doxygen_manual.tex >..\latex\doxygen_manual.tex @sed -e "s/\$$VERSION/$(VERSION)/g" doxygen.sty >..\latex\doxygen.sty - @copy doxygen_logo.eps ..\latex + @epstopdf doxygen_logo.eps -o=..\latex\doxygen_logo.pdf clean: del /s /q ..\html ..\latex diff --git a/doc/config.doc b/doc/config.doc index fa9c5c3..b0043c4 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -155,6 +155,7 @@ followed by the descriptions of the tags grouped by category.
  • \refitem cfg_max_dot_graph_height MAX_DOT_GRAPH_HEIGHT
  • \refitem cfg_max_dot_graph_width MAX_DOT_GRAPH_WIDTH
  • \refitem cfg_max_initializer_lines MAX_INITIALIZER_LINES +
  • \refitem cfg_multiline_cpp_is_brief MULTILINE_CPP_IS_BRIEF
  • \refitem cfg_optimize_output_for_c OPTIMIZE_OUTPUT_FOR_C
  • \refitem cfg_optimize_output_java OPTIMIZE_OUTPUT_JAVA
  • \refitem cfg_output_directory OUTPUT_DIRECTORY @@ -401,6 +402,15 @@ followed by the descriptions of the tags grouped by category. comment as the brief description. If set to NO (the default), the Javadoc-style will behave just like the Qt-style comments. +\anchor cfg_multiline_cpp_is_brief +
    \c MULTILINE_CPP_IS_BRIEF
    + \addindex MULTILINE_CPP_IS_BRIEF + The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen + treat a multi-line C++ special comment block (i.e. a block of //! or /// + comments) as a brief description. This used to be the default behaviour. + The new default is to treat a multi-line C++ comment block as a detailed + description. Set this tag to YES if you prefer the old behaviour instead. + \anchor cfg_details_at_top
    \c DETAILS_AT_TOP
    \addindex DETAILS_AT_TOP @@ -1171,7 +1181,8 @@ EXTRA_PACKAGES = times \addindex SKIP_FUNCTION_MACROS If the \c SKIP_FUNCTION_MACROS tag is set to \c YES (the default) then doxygen's preprocessor will remove all function-like macros that are alone - on a line and do not end with a semicolon. Such function macros are typically + on a line, have an all uppercase name, and do not end with a semicolon. + Such function macros are typically used for boiler-plate code, and will confuse the parser if not removed. diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex index 8e9068e..91a6764 100644 --- a/doc/doxygen_manual.tex +++ b/doc/doxygen_manual.tex @@ -33,8 +33,7 @@ \setlength{\footrulewidth}{0.4pt} \begin{document} \begin{titlepage} -\setlength{\epsfxsize}{\textwidth} -\epsffile{doxygen_logo.eps} +\includegraphics[width=\textwidth]{doxygen_logo} \begin{center} Manual for version $VERSION\\[2ex] Written by Dimitri van Heesch\\[2ex] diff --git a/doc/language.doc b/doc/language.doc index 89ac96b..700fef2 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means that the text fragments that doxygen generates can be produced in languages other than English (the default) at configuration time. -Currently (version 1.2.16-20020603), 27 languages +Currently (version 1.2.16-20020616), 27 languages are supported (sorted alphabetically): Brazilian Portuguese, Chinese, Chinese Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, diff --git a/doc/todo.doc b/doc/todo.doc deleted file mode 100644 index 5ab9df0..0000000 --- a/doc/todo.doc +++ /dev/null @@ -1,37 +0,0 @@ -/****************************************************************************** - * - * - * - * Copyright (C) 1997-2001 by Dimitri van Heesch. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation under the terms of the GNU General Public License is hereby - * granted. No representations are made about the suitability of this software - * for any purpose. It is provided "as is" without express or implied warranty. - * See the GNU General Public License for more details. - * - * Documents produced by Doxygen are derivative works derived from the - * input used in their production; they are not affected by this license. - * - */ - -/*! \page todo Doxygen TODO's - -

    TODO/Wish list

    -
      -
    • Expand namespaces in the file docs with the contents that are - specific to the file (maybe also expand the classes inside a namespace). -
    • Add support for grouping members, and document then as a group. -
    • Support for K&R-style function arguments. -
    • More output formats: suggested are info format and RTF format. -
    • Split long lists in an index to a set of smaller lists. -
    • Add a nice graphical front-end for creating and modifying the - configuration file (it should be flexible enough to quickly add new options). -
    • Improve the search index generation, so it uses less memory and - is easier to get running. -
    • Generate code metrics (Anyone know a good book about code metrics?) -
    • Add features that you think are missing... So if you know any that are - not yet listed here, please let me know. -
    - -*/ diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index 388a4bc..9b53d86 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,6 +1,6 @@ Summary: A documentation system for C/C++. Name: doxygen -Version: 1.2.16_20020609 +Version: 1.2.16_20020623 Release: 1 Epoch: 1 Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz diff --git a/src/classdef.cpp b/src/classdef.cpp index 1231e09..9f8f4df 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -728,14 +728,11 @@ void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput, // write examples if (exampleFlag) { - ol.startDescList(BaseOutputDocInterface::Examples); - parseText(ol,theTranslator->trExamples()+": "); - ol.endDescTitle(); + ol.startSimpleSect(BaseOutputDocInterface::Examples,0,0,theTranslator->trExamples()+": "); ol.writeDescItem(); ol.newParagraph(); writeExample(ol,m_exampleSDict); - //ol.endDescItem(); - ol.endDescList(); + ol.endSimpleSect(); } ol.newParagraph(); writeSourceDef(ol,name()); diff --git a/src/config.l b/src/config.l index ab4a52f..3c647cc 100644 --- a/src/config.l +++ b/src/config.l @@ -1485,6 +1485,15 @@ void Config::create() FALSE ); cb = addBool( + "MULTILINE_CPP_IS_BRIEF", + "The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \n" + "treat a multi-line C++ special comment block (i.e. a block of //! or /// \n" + "comments) as a brief description. This used to be the default behaviour. \n" + "The new default is to treat a multi-line C++ comment block as a detailed \n" + "description. Set this tag to YES if you prefer the old behaviour instead. \n", + FALSE + ); + cb = addBool( "DETAILS_AT_TOP", "If the DETAILS_AT_TOP tag is set to YES then Doxygen \n" "will output the detailed description near the top, like JavaDoc.\n" @@ -2188,8 +2197,9 @@ void Config::create() "SKIP_FUNCTION_MACROS", "If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \n" "doxygen's preprocessor will remove all function-like macros that are alone \n" - "on a line and do not end with a semicolon. Such function macros are typically \n" - "used for boiler-plate code, and will confuse the parser if not removed. \n", + "on a line, have an all uppercase name, and do not end with a semicolon. Such \n" + "function macros are typically used for boiler-plate code, and will confuse the \n" + "parser if not removed. \n", TRUE ); cb->addDependency("ENABLE_PREPROCESSING"); diff --git a/src/doc.l b/src/doc.l index c98a057..e2d708f 100644 --- a/src/doc.l +++ b/src/doc.l @@ -551,7 +551,7 @@ static void endBlock() } else { - outDoc->endDescList(); + outDoc->endSimpleSect(); } currentListIndent.pop(); inParamBlock=inRetValBlock=inSeeBlock=inReturnBlock=inAuthorBlock= @@ -928,7 +928,7 @@ static void checkArgName(const QCString &name,bool isParam) if (!Config_getBool("WARN_IF_UNDOCUMENTED")) return; //printf("name=%s\n",name.data()); - static QRegExp re("[a-zA-Z0-9_]+"); + static QRegExp re("[a-zA-Z0-9_]+\\.*"); int p=0,i=0,l; while ((i=re.match(name,p,&l))!=-1) { @@ -1103,7 +1103,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) SCOPEMASK {ID}?(("::"|"#")?(~)?{ID})+ URLCHAR [a-z_A-Z0-9\!\~\:\;\'\$\?\@\&\%\#\.\-\+\/\=] -URLMASK (([a-z_A-Z][^\>\"\n]*{URLCHAR})|({URLCHAR}+))("("{URLCHAR}*")")? +URLMASK (([a-z_A-Z][^\>\"\n]*{URLCHAR})|({URLCHAR}+))([({]{URLCHAR}*[)}])? NONTERM [\{\}\[\]\`\~\@\|\-\+\#\$\/\\\!\%\^\&\*()a-z_A-Z<>0-9\x80-\xff] WORD ({NONTERM}+([^\n\t ]*{NONTERM}+)?)|("\""[^\n\"]*"\"") ATTR ({B}+[^>\n]*)? @@ -1456,9 +1456,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (b) endBlock(); inParBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Par); - outDoc->docify(title); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Par,0,0,title); outDoc->writeDescItem(); } else @@ -1478,9 +1476,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inWarningBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Warning); - scanString(theTranslator->trWarning()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Warning,0,0,theTranslator->trWarning()+": "); outDoc->writeDescItem(); } else @@ -1499,9 +1495,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inRemarkBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Remark); - scanString(theTranslator->trRemarks()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Remark,0,0,theTranslator->trRemarks()+": "); outDoc->writeDescItem(); } else @@ -1520,9 +1514,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inAttentionBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Attention); - scanString(theTranslator->trAttention()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Attention,0,0,theTranslator->trAttention()+": "); outDoc->writeDescItem(); } else @@ -1541,9 +1533,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inNoteBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Note); - scanString(theTranslator->trNote()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Note,0,0,theTranslator->trNote()+": "); outDoc->writeDescItem(); } else @@ -1562,9 +1552,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inPreBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Pre); - scanString(theTranslator->trPrecondition()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Pre,0,0,theTranslator->trPrecondition()+": "); outDoc->writeDescItem(); } else @@ -1583,9 +1571,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inPostBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Post); - scanString(theTranslator->trPostcondition()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Post,0,0,theTranslator->trPostcondition()+": "); outDoc->writeDescItem(); } else @@ -1604,9 +1590,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inInvarBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Invar); - scanString(theTranslator->trInvariant()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Invar,0,0,theTranslator->trInvariant()+": "); outDoc->writeDescItem(); } else @@ -1625,9 +1609,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inVersionBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Version); - scanString(theTranslator->trVersion()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Version,0,0,theTranslator->trVersion()+": "); outDoc->writeDescItem(); } else @@ -1646,9 +1628,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inSinceBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Since); - scanString(theTranslator->trSince()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Since,0,0,theTranslator->trSince()+": "); outDoc->writeDescItem(); } else @@ -1667,9 +1647,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inDateBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Date); - scanString(theTranslator->trDate()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Date,0,0,theTranslator->trDate()+": "); outDoc->writeDescItem(); } else @@ -1692,12 +1670,10 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? endArgumentList(); if (inBlock()) endBlock(); currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Todo); - outDoc->writeObjectLink(0,"todo",item->listAnchor,theTranslator->trTodo()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Todo,"todo",item->listAnchor,theTranslator->trTodo()+": "); outDoc->writeDescItem(); internalParseDocument(item->text); - outDoc->endDescList(); + outDoc->endSimpleSect(); currentListIndent.pop(); } } @@ -1716,12 +1692,10 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? endArgumentList(); if (inBlock()) endBlock(); currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Test); - outDoc->writeObjectLink(0,"test",item->listAnchor,theTranslator->trTest()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Test,"test",item->listAnchor,theTranslator->trTest()+": "); outDoc->writeDescItem(); internalParseDocument(item->text); - outDoc->endDescList(); + outDoc->endSimpleSect(); currentListIndent.pop(); } } @@ -1740,12 +1714,10 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? endArgumentList(); if (inBlock()) endBlock(); currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Bug); - outDoc->writeObjectLink(0,"bug",item->listAnchor,theTranslator->trBug()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Bug,"bug",item->listAnchor,theTranslator->trBug()+": "); outDoc->writeDescItem(); internalParseDocument(item->text); - outDoc->endDescList(); + outDoc->endSimpleSect(); currentListIndent.pop(); } } @@ -1760,9 +1732,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inDeprecatedBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Deprecated); - scanString(theTranslator->trDeprecated()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Deprecated,0,0,theTranslator->trDeprecated()+": "); outDoc->writeDescItem(); } else @@ -1783,12 +1753,10 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? endArgumentList(); if (inBlock()) endBlock(); currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::RCS); - scanString(tagName+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::RCS,0,0,tagName+": "); outDoc->writeDescItem(); scanString(tagText); - outDoc->endDescList(); + outDoc->endSimpleSect(); currentListIndent.pop(); } {CMD}"author"[s]?{BSEP} { @@ -1802,10 +1770,9 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inAuthorBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Author); bool singular = ((QString)yytext).find('s')==-1; - scanString(theTranslator->trAuthor(TRUE,singular)+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Author, + 0,0,theTranslator->trAuthor(TRUE,singular)+": "); outDoc->writeDescItem(); } else @@ -1824,9 +1791,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inReturnBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::Return); - scanString(theTranslator->trReturns()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::Return,0,0,theTranslator->trReturns()+" :"); outDoc->writeDescItem(); } } @@ -1841,9 +1806,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inSeeBlock=TRUE; currentListIndent.push("P"); - outDoc->startDescList(BaseOutputDocInterface::See); - scanString(theTranslator->trSeeAlso()+": "); - outDoc->endDescTitle(); + outDoc->startSimpleSect(BaseOutputDocInterface::See,0,0,theTranslator->trSeeAlso()+": "); outDoc->writeDescItem(); } else @@ -1863,9 +1826,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inParamBlock=TRUE; currentListIndent.push("P"); - outDoc->startParamList(BaseOutputDocInterface::Param); - scanString(theTranslator->trParameters()+": "); - outDoc->endDescTitle(); + outDoc->startParamList(BaseOutputDocInterface::Param,theTranslator->trParameters()+": "); outDoc->writeDescItem(); outDoc->startDescTable(); } @@ -1887,9 +1848,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inRetValBlock=TRUE; currentListIndent.push("P"); - outDoc->startParamList(BaseOutputDocInterface::RetVal); - scanString(theTranslator->trReturnValues()+": "); - outDoc->endDescTitle(); + outDoc->startParamList(BaseOutputDocInterface::RetVal,theTranslator->trReturnValues()+": "); outDoc->writeDescItem(); outDoc->startDescTable(); } @@ -1911,9 +1870,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? if (inBlock()) endBlock(); inExceptionBlock=TRUE; currentListIndent.push("P"); - outDoc->startParamList(BaseOutputDocInterface::Exception); - scanString(theTranslator->trExceptions()+": "); - outDoc->endDescTitle(); + outDoc->startParamList(BaseOutputDocInterface::Exception,theTranslator->trExceptions()+": "); outDoc->writeDescItem(); outDoc->startDescTable(); } diff --git a/src/dot.cpp b/src/dot.cpp index 478de8a..ef0e053 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -1221,66 +1221,67 @@ static void findMaximalDotGraph(DotNode *root, bool backArrows=TRUE ) { - bool lastFit; - int minDistance=1; - int maxDistance=maxDist; - int curDistance=maxDistance; + int minDistance=1; // min distance that shows only direct children. + int curDistance=2; // current distance to try + int maxDistance=maxDist; // max distance that show whole graph int width=0; int height=0; + int maxDotGraphWidth = Config_getInt("MAX_DOT_GRAPH_WIDTH"); + int maxDotGraphHeight = Config_getInt("MAX_DOT_GRAPH_HEIGHT"); // binary search for the maximal inheritance depth that fits in a reasonable // sized image (dimensions: Config_getInt("MAX_DOT_GRAPH_WIDTH"), Config_getInt("MAX_DOT_GRAPH_HEIGHT")) - do + if (maxDistance>1) { - writeDotGraph(root,format,baseName,lrRank,renderParents, - curDistance,backArrows); - - QCString dotArgs(4096); - // create annotated dot file - dotArgs.sprintf("-Tdot \"%s.dot\" -o \"%s_tmp.dot\"",baseName.data(),baseName.data()); - if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0) + do { - err("Problems running dot. Check your installation!\n"); - return; - } + writeDotGraph(root,format,baseName,lrRank,renderParents, + curDistance,backArrows); - // extract bounding box from the result - readBoundingBoxDot(baseName+"_tmp.dot",&width,&height); - width = width *96/72; // 96 pixels/inch, 72 points/inch - height = height*96/72; // 96 pixels/inch, 72 points/inch - //printf("Found bounding box (%d,%d) max (%d,%d)\n",width,height, - // Config_getInt("MAX_DOT_GRAPH_WIDTH"),Config_getInt("MAX_DOT_GRAPH_HEIGHT")); - - lastFit=(width1); + QCString dotArgs(4096); + // create annotated dot file + dotArgs.sprintf("-Tdot \"%s.dot\" -o \"%s_tmp.dot\"",baseName.data(),baseName.data()); + if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0) + { + err("Problems running dot. Check your installation!\n"); + return; + } - if (!lastFit) - { - writeDotGraph(root, + // extract bounding box from the result + readBoundingBoxDot(baseName+"_tmp.dot",&width,&height); + width = width *96/72; // 96 pixels/inch, 72 points/inch + height = height*96/72; // 96 pixels/inch, 72 points/inch + //printf("Found bounding box (%d,%d) max (%d,%d)\n",width,height, + // Config_getInt("MAX_DOT_GRAPH_WIDTH"),Config_getInt("MAX_DOT_GRAPH_HEIGHT")); + + // remove temporary dot file + thisDir.remove(baseName+"_tmp.dot"); + + bool graphFits=(width1); + } + + writeDotGraph(root, format, baseName, - lrRank || (curDistance==1 && width>Config_getInt("MAX_DOT_GRAPH_WIDTH")), + lrRank || (minDistance==1 && width>Config_getInt("MAX_DOT_GRAPH_WIDTH")), renderParents, minDistance, backArrows ); - } } QCString DotClassGraph::diskName() const diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 0322193..ba0fc99 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -6350,31 +6350,36 @@ static void readFiles(BufStr &output) int fileNameSize=fileName.length(); + bool multiLineIsBrief = Config_getBool("MULTILINE_CPP_IS_BRIEF"); + BufStr tempBuf(10000); + BufStr *bufPtr = multiLineIsBrief ? &tempBuf : &output; // add begin filename marker - tempBuf.addChar(0x06); + bufPtr->addChar(0x06); // copy filename - tempBuf.addArray(fileName.data(),fileNameSize); + bufPtr->addArray(fileName.data(),fileNameSize); // add end filename marker - tempBuf.addChar(0x06); - tempBuf.addChar('\n'); + bufPtr->addChar(0x06); + bufPtr->addChar('\n'); if (Config_getBool("ENABLE_PREPROCESSING")) { msg("Preprocessing %s...\n",s->data()); - preprocessFile(fileName,tempBuf); + preprocessFile(fileName,*bufPtr); } else { msg("Reading %s...\n",s->data()); - copyAndFilterFile(fileName,tempBuf); + copyAndFilterFile(fileName,*bufPtr); } - tempBuf.addChar('\n'); /* to prevent problems under Windows ? */ + bufPtr->addChar('\n'); /* to prevent problems under Windows ? */ - convertCppComments(&tempBuf,&output); - //output.addArray(tempBuf.data(),tempBuf.curPos()); + if (multiLineIsBrief) + { + convertCppComments(&tempBuf,&output); + } s=inputFiles.next(); //printf("-------> adding new line\n"); diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 80e2dc5..b165408 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -1176,3 +1176,39 @@ void HtmlGenerator::writeLineNumber(const char *ref,const char *file, } codify(" "); } + +void HtmlGenerator::startSimpleSect(SectionTypes, + const char *file,const char *anchor, + const char *title) +{ + t << "
    "; + if (file) + { + writeObjectLink(0,file,anchor,title); + } + else + { + docify(title); + } + t << "
    "; +} + +void HtmlGenerator::endSimpleSect() +{ + t << "
    "; +} + +void HtmlGenerator::startParamList(ParamListTypes, + const char *title) +{ + t << "
    "; + docify(title); + t << "
    "; +} + +void HtmlGenerator::endParamList() +{ + t << "
    "; +} + + diff --git a/src/htmlgen.h b/src/htmlgen.h index 55322ed..1075e49 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -191,8 +191,10 @@ class HtmlGenerator : public OutputGenerator void writeCCedil(char c) { t << "&" << c << "cedil;"; } void startDescList(SectionTypes) { t << "
    " << endl; } void endDescList() { t << "
    "; } - void startParamList(ParamListTypes) { t << "
    " << endl; } - void endParamList() { t << "
    "; } + void startSimpleSect(SectionTypes,const char *,const char *,const char *); + void endSimpleSect(); + void startParamList(ParamListTypes,const char *); + void endParamList(); void endDescTitle() { t << ""; } void writeDescItem() { t << "
    " << endl; } void startSection(const char *,const char *,bool); diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index 71941b5..6bdded6 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -27,6 +27,7 @@ #include "config.h" #include "message.h" #include "doxygen.h" +#include "language.h" //---------------------------------------------------------------------------- @@ -248,6 +249,8 @@ HtmlHelp *HtmlHelp::getInstance() return theInstance; } +static QDict s_languageDict; + /*! This will create a contents file (index.hhc) and a index file (index.hhk) * and write the header of those files. * It also creates a project file (index.hhp) @@ -294,8 +297,80 @@ void HtmlHelp::initialize() "\n" "\n" "
      \n"; + + /* language codes for Html help + 0x405 Czech + 0x406 Danish + 0x413 Dutch + 0xC09 English (Australia) + 0x809 English (Britain) + 0x1009 English (Canada) + 0x1809 English (Ireland) + 0x1409 English (New Zealand) + 0x1C09 English (South Africa) + 0x409 English (United States) + 0x40B Finnish + 0x40C French + 0x407 German + 0x408 Greece + 0x40E Hungarian + 0x410 Italian + 0x814 Norwegian + 0x415 Polish + 0x816 Portuguese(Portugal) + 0x416 Portuguese(Brazil) + 0x419 Russian + 0x80A Spanish(Mexico) + 0xC0A Spanish(Modern Sort) + 0x40A Spanish(Traditional Sort) + 0x41D Swedish + 0x41F Turkey + 0x411 Japanese + 0x412 Korean + 0x804 Chinese (PRC) + 0x404 Chinese (Taiwan) + */ + s_languageDict.setAutoDelete(TRUE); + s_languageDict.clear(); + s_languageDict.insert("czech", new QCString("0x405 Czech")); + s_languageDict.insert("danish", new QCString("0x406 Danish")); + s_languageDict.insert("dutch", new QCString("0x413 Dutch")); + s_languageDict.insert("finnish", new QCString("0x40B Finnish")); + s_languageDict.insert("french", new QCString("0x40C French")); + s_languageDict.insert("german", new QCString("0x40C German")); + s_languageDict.insert("greece", new QCString("0x408 Greece")); + s_languageDict.insert("hungarian",new QCString("0x40E Hungarian")); + s_languageDict.insert("italian", new QCString("0x410 Italian")); + s_languageDict.insert("norwegian",new QCString("0x814 Norwegian")); + s_languageDict.insert("polish", new QCString("0x815 Polish")); + s_languageDict.insert("portugese",new QCString("0x815 Portuguese(Portugal)")); + s_languageDict.insert("brazil", new QCString("0x416 Portuguese(Brazil)")); + s_languageDict.insert("russian", new QCString("0x419 Russian")); + s_languageDict.insert("spanish", new QCString("0x40A Spannish(Traditional Sort)")); + s_languageDict.insert("swedish", new QCString("0x41D Swedish")); + s_languageDict.insert("turkey", new QCString("0x41F Turkey")); + s_languageDict.insert("japanese", new QCString("0x411 Japanese")); + s_languageDict.insert("korean", new QCString("0x412 Korean")); + s_languageDict.insert("chinese", new QCString("0x804 Chinese (PRC)")); } + +static QCString getLanguageString() +{ + if (!theTranslator->idLanguage().isEmpty()) + { + QCString *s = s_languageDict[theTranslator->idLanguage()]; + if (s) + { + return *s; + } + } + // default language + return "0x409 English (United States)"; +} + + + void HtmlHelp::createProjectFile() { /* Write the project file */ @@ -308,6 +383,8 @@ void HtmlHelp::createProjectFile() t.setEncoding(QTextStream::Latin1); #endif + + QCString indexName="index"+htmlFileExtension; if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"+htmlFileExtension; t << "[OPTIONS]\n" @@ -317,7 +394,7 @@ void HtmlHelp::createProjectFile() "Default Window=main\n" "Default topic=" << indexName << "\n" "Index file=index.hhk\n" - "Language=0x409 English (United States)\n"; + "Language=" << getLanguageString() << endl; if (Config_getBool("BINARY_TOC")) t << "Binary TOC=YES\n"; if (Config_getBool("GENERATE_CHI")) t << "Create CHI file=YES\n"; t << "Title=" << Config_getString("PROJECT_NAME") << endl << endl; @@ -372,6 +449,7 @@ void HtmlHelp::finalize() delete kf; createProjectFile(); + s_languageDict.clear(); } /*! Increase the level of the contents hierarchy. diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 2508b98..90b8bc4 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -196,7 +196,7 @@ void LatexGenerator::init() #if defined(_MSC_VER) // ps2pdf.bat does not work properly from a makefile using GNU make! << "\tgswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " - "-sOutputFile=refman_2on1.pdf -c save pop -f refman_2on1.ps" << endl + "-sOutputFile=refman_2on1.pdf -c save pop -f refman_2on1.ps" << endl; #else << "\tps2pdf refman_2on1.ps refman_2on1.pdf" << endl; #endif @@ -1916,3 +1916,35 @@ void LatexGenerator::endDescItem() } } +void LatexGenerator::startSimpleSect(SectionTypes,const char *file, + const char *anchor,const char *title) +{ + t << "\\begin{Desc}\n\\item["; + if (file) + { + writeObjectLink(0,file,anchor,title); + } + else + { + docify(title); + } + t << "]"; +} + +void LatexGenerator::endSimpleSect() +{ + t << "\\end{Desc}" << endl; +} + +void LatexGenerator::startParamList(ParamListTypes,const char *title) +{ + t << "\\begin{Desc}\n\\item["; + docify(title); + t << "]"; +} + +void LatexGenerator::endParamList() +{ + t << "\\end{Desc}" << endl; +} + diff --git a/src/latexgen.h b/src/latexgen.h index e96acb8..e29a813 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -208,8 +208,10 @@ class LatexGenerator : public OutputGenerator void endMemberDescription() { t << "\\item\\end{CompactList}"; } void startDescList(SectionTypes) { t << "\\begin{Desc}\n\\item["; } void endDescList() { t << "\\end{Desc}" << endl; } - void startParamList(ParamListTypes) { t << "\\begin{Desc}\n\\item["; } - void endParamList() { t << "\\end{Desc}" << endl; } + void startSimpleSect(SectionTypes,const char *,const char *,const char *); + void endSimpleSect(); + void startParamList(ParamListTypes,const char *title); + void endParamList(); void endDescTitle() { t << "]"; } void writeDescItem() { t << "\\par" << endl; } void startSection(const char *,const char *,bool); diff --git a/src/mangen.cpp b/src/mangen.cpp index c6d7b9f..8812387 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -320,16 +320,6 @@ void ManGenerator::startDescList(SectionTypes) startBold(); } -void ManGenerator::startParamList(ParamListTypes) -{ - if (!firstCol) - { t << endl << ".PP" << endl; - firstCol=TRUE; paragraph=TRUE; - col=0; - } - paragraph=FALSE; -} - void ManGenerator::startTitle() { if (!firstCol) t << endl; @@ -582,4 +572,40 @@ void ManGenerator::endSection(const char *,bool sub) } } +void ManGenerator::startSimpleSect(SectionTypes,const char *, + const char *,const char *title) +{ + if (!firstCol) + { t << endl << ".PP" << endl; + firstCol=TRUE; paragraph=TRUE; + col=0; + } + paragraph=FALSE; + startBold(); + docify(title); + endBold(); + paragraph=TRUE; +} + +void ManGenerator::endSimpleSect() +{ +} + +void ManGenerator::startParamList(ParamListTypes,const char *title) +{ + if (!firstCol) + { t << endl << ".PP" << endl; + firstCol=TRUE; paragraph=TRUE; + col=0; + } + paragraph=FALSE; + startBold(); + docify(title); + endBold(); + paragraph=TRUE; +} + +void ManGenerator::endParamList() +{ +} diff --git a/src/mangen.h b/src/mangen.h index ffca2a5..3277716 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -181,8 +181,10 @@ class ManGenerator : public OutputGenerator void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; } void startDescList(SectionTypes); void endDescList() {} - void startParamList(ParamListTypes); - void endParamList() {} + void startSimpleSect(SectionTypes,const char *,const char *,const char *); + void endSimpleSect(); + void startParamList(ParamListTypes,const char *title); + void endParamList(); void endDescTitle(); void writeDescItem(); void startSection(const char *,const char *,bool); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index b43436b..99f9b4b 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -1221,9 +1221,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, if (docArgList && docArgList->hasDocumentation()) { //printf("***** argumentList is documented\n"); - ol.startParamList(BaseOutputDocInterface::Param); - parseText(ol,theTranslator->trParameters()+": "); - ol.endDescTitle(); + ol.startParamList(BaseOutputDocInterface::Param,theTranslator->trParameters()+": "); ol.writeDescItem(); ol.startDescTable(); ArgumentListIterator ali(*docArgList); @@ -1241,7 +1239,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, } } ol.endDescTable(); - ol.endDescList(); + ol.endParamList(); } if (isEnumerate()) @@ -1258,12 +1256,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, if (first) { //ol.newParagraph(); - ol.startDescList(BaseOutputDocInterface::EnumValues); - parseText(ol,theTranslator->trEnumerationValues()); - ol.docify(":"); - ol.endDescTitle(); + ol.startSimpleSect(BaseOutputDocInterface::EnumValues,0,0,theTranslator->trEnumerationValues()+": "); ol.writeDescItem(); - //ol.startItemList(); ol.startDescTable(); } @@ -1312,7 +1306,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, { //ol.endItemList(); ol.endDescTable(); - ol.endDescList(); + ol.endSimpleSect(); ol.writeChar('\n'); } } @@ -1457,14 +1451,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, // write the list of examples that use this member if (hasExamples()) { - ol.startDescList(BaseOutputDocInterface::Examples); - parseText(ol,theTranslator->trExamples()+": "); - //ol.writeBoldString("Examples: "); - ol.endDescTitle(); + ol.startSimpleSect(BaseOutputDocInterface::Examples,0,0,theTranslator->trExamples()+": "); ol.writeDescItem(); writeExample(ol,getExamples()); //ol.endDescItem(); - ol.endDescList(); + ol.endSimpleSect(); } // write reference to the source writeSourceDef(ol,cname); @@ -1472,6 +1463,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, writeSourceReffedBy(ol,cname); writeInlineCode(ol,cname); + ol.disableAllBut(OutputGenerator::RTF); + ol.newParagraph(); + ol.enableAll(); + ol.endIndent(); // enable LaTeX again //if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex); diff --git a/src/outputgen.h b/src/outputgen.h index 2eecb44..f10afc7 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -226,7 +226,10 @@ class BaseOutputDocInterface virtual void writeCCedil(char) = 0; virtual void startDescList(SectionTypes t) = 0; virtual void endDescList() = 0; - virtual void startParamList(ParamListTypes t) = 0; + virtual void startSimpleSect(SectionTypes t,const char *file, + const char *anchor,const char *title) = 0; + virtual void endSimpleSect() = 0; + virtual void startParamList(ParamListTypes t,const char *title) = 0; virtual void endParamList() = 0; virtual void endDescTitle() = 0; virtual void writeDescItem() = 0; diff --git a/src/outputlist.cpp b/src/outputlist.cpp index df9751f..7e91e35 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -261,7 +261,6 @@ FORALL1(int a1,a1) FORALL1(DotClassGraph &a1,a1) FORALL1(DotInclDepGraph &a1,a1) FORALL1(DotGfxHierarchyTable &a1,a1) -FORALL1(ParamListTypes a1,a1) FORALL1(SectionTypes a1,a1) #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) FORALL1(bool a1,a1) @@ -270,6 +269,7 @@ FORALL2(bool a1,bool a2,a1,a2) FORALL4(const char *a1,const char *a2,const char *a3,bool a4,a1,a2,a3,a4) #endif FORALL2(int a1,bool a2,a1,a2) +FORALL2(ParamListTypes a1,const char *a2,a1,a2) FORALL1(IndexSections a1,a1) FORALL2(const char *a1,const char *a2,a1,a2) FORALL2(const char *a1,bool a2,a1,a2) @@ -277,6 +277,7 @@ FORALL3(ClassDiagram &a1,const char *a2,const char *a3,a1,a2,a3) FORALL3(const char *a1,const char *a2,const char *a3,a1,a2,a3) FORALL3(const char *a1,const char *a2,bool a3,a1,a2,a3) FORALL3(uchar a1,uchar a2,uchar a3,a1,a2,a3) +FORALL4(SectionTypes a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4) FORALL4(const char *a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4) FORALL4(const char *a1,const char *a2,const char *a3,int a4,a1,a2,a3,a4) diff --git a/src/outputlist.h b/src/outputlist.h index 3a6b71a..79f02d3 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -331,8 +331,13 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startDescList,t); } void endDescList() { forall(&OutputGenerator::endDescList); } - void startParamList(ParamListTypes t) - { forall(&OutputGenerator::startParamList,t); } + void startSimpleSect(SectionTypes t,const char *file,const char *anchor, + const char *title) + { forall(&OutputGenerator::startSimpleSect,t,file,anchor,title); } + void endSimpleSect() + { forall(&OutputGenerator::endSimpleSect); } + void startParamList(ParamListTypes t,const char *title) + { forall(&OutputGenerator::startParamList,t,title); } void endParamList() { forall(&OutputGenerator::endParamList); } void endDescTitle() @@ -489,7 +494,6 @@ class OutputList : public OutputDocInterface FORALLPROTO1(DotClassGraph &); FORALLPROTO1(DotInclDepGraph &); FORALLPROTO1(DotGfxHierarchyTable &); - FORALLPROTO1(ParamListTypes); FORALLPROTO1(SectionTypes); #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) FORALLPROTO1(bool); @@ -498,12 +502,14 @@ class OutputList : public OutputDocInterface FORALLPROTO4(const char *,const char *,const char *,int); #endif FORALLPROTO2(int,bool); + FORALLPROTO2(ParamListTypes,const char *); FORALLPROTO2(const char *,const char *); FORALLPROTO2(const char *,bool); FORALLPROTO3(const char *,const char *,bool); FORALLPROTO3(uchar,uchar,uchar); FORALLPROTO3(const char *,const char *,const char *); FORALLPROTO3(ClassDiagram &,const char *,const char *); + FORALLPROTO4(SectionTypes,const char *,const char *,const char *); FORALLPROTO4(const char *,const char *,const char *,const char *); FORALLPROTO4(const char *,const char *,const char *,bool); diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 1dc2d2b..a6d5a9f 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -502,7 +502,8 @@ bool StyleData::setStyle(const char* s, const char* styleName) static const QRegExp subgroup("^{[^}]*}\\s*"); static const QRegExp any_clause("^\\\\[a-z][a-z0-9-]*\\s*"); - int len; + int len = 0; // length of a particular RTF formatting control + int ref_len = 0; // length of the whole formatting section of a style int start = s_clause.match(s, 0, &len); if (start < 0) { @@ -514,6 +515,7 @@ bool StyleData::setStyle(const char* s, const char* styleName) // search for the end of pure formatting codes const char* end = s + len; + ref_len = len; bool haveNewDefinition = TRUE; for(;;) { @@ -523,7 +525,10 @@ bool StyleData::setStyle(const char* s, const char* styleName) if (0 != subgroup.match(end, 0, &len)) break; else + { end += len; + ref_len += len; + } } else if (*end == '\\') { @@ -534,6 +539,7 @@ bool StyleData::setStyle(const char* s, const char* styleName) if (0 != any_clause.match(end, 0, &len)) break; end += len; + ref_len += len; } else if (*end == 0) { // no style-definition part, keep default value @@ -544,8 +550,9 @@ bool StyleData::setStyle(const char* s, const char* styleName) break; } delete[] reference; - reference = new char[len + 1]; - memcpy(reference, s, len); reference[len] = 0; + reference = new char[ref_len + 1]; + memcpy(reference, s, ref_len); + reference[ref_len] = 0; if (haveNewDefinition) { delete[] definition; @@ -2047,24 +2054,6 @@ void RTFGenerator::endDescList() t << "}"; } -void RTFGenerator::startParamList(ParamListTypes) -{ - DBG_RTF(t << "{\\comment (startParamList)}" << endl) - t << "{"; // ends at endParamList - t << "{"; // ends at endDescTitle - startBold(); - newParagraph(); -} - -void RTFGenerator::endParamList() -{ - DBG_RTF(t << "{\\comment (endParamList)}" << endl) - newParagraph(); - decrementIndentLevel(); - m_omitParagraph = TRUE; - t << "}"; -} - void RTFGenerator::startSection(const char *,const char *title,bool sub) { @@ -2896,3 +2885,58 @@ void RTFGenerator::endMemberGroup(bool hasHeader) t << "}"; } +void RTFGenerator::startSimpleSect(SectionTypes,const char *file,const char *anchor,const char *title) +{ + DBG_RTF(t << "{\\comment (startSimpleSect)}" << endl) + t << "{"; // ends at endDescList + t << "{"; // ends at endDescTitle + startBold(); + newParagraph(); + if (file) + { + writeObjectLink(0,file,anchor,title); + } + else + { + docify(title); + } + endBold(); + t << "}"; + newParagraph(); + incrementIndentLevel(); + t << Rtf_Style_Reset << Rtf_DList_DepthStyle(); +} + +void RTFGenerator::endSimpleSect() +{ + DBG_RTF(t << "{\\comment (endSimpleSect)}" << endl) + newParagraph(); + decrementIndentLevel(); + m_omitParagraph = TRUE; + t << "}"; +} + +void RTFGenerator::startParamList(ParamListTypes,const char *title) +{ + DBG_RTF(t << "{\\comment (startParamList)}" << endl) + t << "{"; // ends at endParamList + t << "{"; // ends at endDescTitle + startBold(); + newParagraph(); + docify(title); + endBold(); + t << "}"; + newParagraph(); + incrementIndentLevel(); + t << Rtf_Style_Reset << Rtf_DList_DepthStyle(); +} + +void RTFGenerator::endParamList() +{ + DBG_RTF(t << "{\\comment (endParamList)}" << endl) + newParagraph(); + decrementIndentLevel(); + m_omitParagraph = TRUE; + t << "}"; +} + diff --git a/src/rtfgen.h b/src/rtfgen.h index fa70b13..7c6640a 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -177,7 +177,9 @@ class RTFGenerator : public OutputGenerator void endMemberDescription(); void startDescList(SectionTypes); void endDescList(); - void startParamList(ParamListTypes); + void startSimpleSect(SectionTypes,const char *,const char *,const char *); + void endSimpleSect(); + void startParamList(ParamListTypes,const char *); void endParamList(); void endDescTitle(); void writeDescItem(); diff --git a/src/scanner.l b/src/scanner.l index 93663c1..29c1861 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -445,7 +445,7 @@ static int yyread(char *buf,int max_size) %} CMD ("\\"|"@") -SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"ingroup"|"latexonly"|"htmlonly"|"{"|"verbatim"|"dotfile") +SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"ingroup"|"latexonly"|"htmlonly"|"{"|"verbatim"|"dotfile"|"defgroup"|"addtogroup"|"weakgroup") BN [ \t\n\r] BL [ \t\r]*"\n" B [ \t] @@ -1043,7 +1043,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) lineCount(); QCString scope=yytext; current->name=removeRedundantWhiteSpace(substitute(scope,".","::")); - printf("import name = %s -> %s\n",yytext,current->name.data()); + //printf("import name = %s -> %s\n",yytext,current->name.data()); current->fileName = yyFileName; current->section=Entry::USINGDECL_SEC; current_root->addSubEntry(current); diff --git a/src/translator_es.h b/src/translator_es.h index 49e47e7..73db6b7 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -50,7 +50,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_2_7 */ virtual QCString latexLanguageSupportCommand() { - return ""; + return "\\usepackage[spanish]{babel}"; } /*! return the language charset. This will be used for the HTML output */ diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index f8f1fe9..8dbd3c1 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -424,7 +424,20 @@ class XMLGenerator : public OutputDocInterface endNestedPar(); m_t << ""; } - void startParamList(ParamListTypes t) + void startSimpleSect(SectionTypes st,const char *,const char *,const char *) + { + XML_DB(("(startSimpleSect)\n")); + m_t << ""; + startNestedPar(); + m_inParStack.top() = TRUE; + } + void endSimpleSect() + { + XML_DB(("(endSimpleSect)\n")); + endNestedPar(); + m_t << ""; + } + void startParamList(ParamListTypes t,const char *) { XML_DB(("(startParamList)\n")); startParMode(); @@ -435,7 +448,7 @@ class XMLGenerator : public OutputDocInterface case RetVal: kind="retval"; break; case Exception: kind="exception"; break; } - m_t << ""; // non DocBook + m_t << "<parameterlist kind=\"" << kind << "\">"; // non DocBook startNestedPar(); m_inParStack.top() = TRUE; m_inParamList = TRUE; -- cgit v0.12