Commit c454a540 authored by dimitri's avatar dimitri

Release-1.2.16-20020623

parent 784e2b65
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)
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)
1.2.16-20020609
1.2.16-20020623
......@@ -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
}
......
......@@ -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
......
......@@ -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
......@@ -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
......
......@@ -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
......
......@@ -155,6 +155,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_max_dot_graph_height MAX_DOT_GRAPH_HEIGHT
<li> \refitem cfg_max_dot_graph_width MAX_DOT_GRAPH_WIDTH
<li> \refitem cfg_max_initializer_lines MAX_INITIALIZER_LINES
<li> \refitem cfg_multiline_cpp_is_brief MULTILINE_CPP_IS_BRIEF
<li> \refitem cfg_optimize_output_for_c OPTIMIZE_OUTPUT_FOR_C
<li> \refitem cfg_optimize_output_java OPTIMIZE_OUTPUT_JAVA
<li> \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
<dt>\c MULTILINE_CPP_IS_BRIEF <dd>
\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
<dt>\c DETAILS_AT_TOP <dd>
\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.
</dl>
......
......@@ -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]
......
......@@ -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,
......
/******************************************************************************
*
*
*
* 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
<h3>TODO/Wish list</h3>
<ul>
<li>Expand namespaces in the file docs with the contents that are
specific to the file (maybe also expand the classes inside a namespace).
<li>Add support for grouping members, and document then as a group.
<li>Support for K&R-style function arguments.
<li>More output formats: suggested are info format and RTF format.
<li>Split long lists in an index to a set of smaller lists.
<li>Add a nice graphical front-end for creating and modifying the
configuration file (it should be flexible enough to quickly add new options).
<li>Improve the search index generation, so it uses less memory and
is easier to get running.
<li>Generate code metrics (Anyone know a good book about code metrics?)
<li>Add features that you think are missing... So if you know any that are
not yet listed here, please let me know.
</ul>
*/
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
......
......@@ -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());
......
......@@ -1484,6 +1484,15 @@ void Config::create()
"explict @brief command for a brief description. \n",
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"
......@@ -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");
......
This diff is collapsed.
......@@ -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=(width<Config_getInt("MAX_DOT_GRAPH_WIDTH") && height<Config_getInt("MAX_DOT_GRAPH_HEIGHT"));
if (lastFit) // image is small enough
{
minDistance=curDistance;
//printf("Image fits [%d-%d]\n",minDistance,maxDistance);
}
else
{
maxDistance=curDistance;
//printf("Image does not fit [%d-%d]\n",minDistance,maxDistance);
}
curDistance=minDistance+(maxDistance-minDistance)/2;
//printf("curDistance=%d\n",curDistance);
// remove temporary dot file
thisDir.remove(baseName+"_tmp.dot");
} while ((maxDistance-minDistance)>1);
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=(width<maxDotGraphWidth && height<maxDotGraphHeight);
if (graphFits) // graph is small enough
{
minDistance=curDistance;
//printf("Image fits [%d-%d]\n",minDistance,maxDistance);
}
else // graph does not fit anymore with curDistance
{
//printf("Image does not fit [%d-%d]\n",minDistance,maxDistance);
maxDistance=curDistance;
}
curDistance=minDistance+(maxDistance-curDistance)/2;
//printf("curDistance=%d\n",curDistance);
} while ((maxDistance-minDistance)>1);
}
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
......
......@@ -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");
......
......@@ -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 << "<dl compact><dt><b>";
if (file)
{
writeObjectLink(0,file,anchor,title);
}
else
{
docify(title);
}
t << "</b></dt>";
}
void HtmlGenerator::endSimpleSect()
{
t << "</dl>";
}
void HtmlGenerator::startParamList(ParamListTypes,
const char *title)
{
t << "<dl compact><dt><b>";
docify(title);
t << "</b></dt>";
}
void HtmlGenerator::endParamList()
{
t << "</dl>";
}
......@@ -191,8 +191,10 @@ class HtmlGenerator : public OutputGenerator
void writeCCedil(char c) { t << "&" << c << "cedil;"; }
void startDescList(SectionTypes) { t << "<dl compact><dt><b>" << endl; }
void endDescList() { t << "</dl>"; }
void startParamList(ParamListTypes) { t << "<dl compact><dt><b>" << endl; }
void endParamList() { t << "</dl>"; }
void startSimpleSect(SectionTypes,const char *,const char *,const char *);
void endSimpleSect();
void startParamList(ParamListTypes,const char *);
void endParamList();
void endDescTitle() { t << "</b>"; }
void writeDescItem() { t << "<dd>" << endl; }
void startSection(const char *,const char *,bool);
......
......@@ -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<QCString> 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()
"<param name=\"FrameName\" value=\"right\">\n"
"</OBJECT>\n"
"<UL>\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.
......
......@@ -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;
}
......@@ -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);
......
......@@ -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()
{
}
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -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)
......
......@@ -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);
......
......@@ -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 << "}";
}
......@@ -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();
......
......@@ -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);
......
......@@ -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 */
......
......@@ -424,7 +424,20 @@ class XMLGenerator : public OutputDocInterface
endNestedPar();
m_t << "</simplesect>";
}
void startParamList(ParamListTypes t)
void startSimpleSect(SectionTypes st,const char *,const char *,const char *)
{
XML_DB(("(startSimpleSect)\n"));
m_t << "<simplesect kind=\"" << sectionTypeToString(st) << "\">";
startNestedPar();
m_inParStack.top() = TRUE;
}
void endSimpleSect()
{
XML_DB(("(endSimpleSect)\n"));
endNestedPar();
m_t << "</simplesect>";
}
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 << "<parameterlist kind=\"" << kind << "\"><title>"; // non DocBook
m_t << "<parameterlist kind=\"" << kind << "\">"; // non DocBook
startNestedPar();
m_inParStack.top() = TRUE;
m_inParamList = TRUE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment