Commit 56bc9bda authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.1.5_20000709

parent adb81f79
DOXYGEN Version 1.1.5 DOXYGEN Version 1.1.5-20000709
CONTENTS CONTENTS
-------- --------
...@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX: ...@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have: 1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.5.src.tar.gz # uncompress the archive gunzip doxygen-1.1.5-20000709.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.5.src.tar # unpack it tar xf doxygen-1.1.5-20000709.src.tar # unpack it
2. Run the configure script: 2. Run the configure script:
...@@ -255,4 +255,4 @@ The latest version of doxygen can be obtained at ...@@ -255,4 +255,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (02 July 2000) Dimitri van Heesch (09 July 2000)
DOXYGEN Version 1.1.5 DOXYGEN Version 1.1.5-20000709
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (02 July 2000) Dimitri van Heesch (09 July 2000)
1.1.5 1.1.5-20000709
...@@ -326,9 +326,9 @@ void configStrToVal() ...@@ -326,9 +326,9 @@ void configStrToVal()
"Using the default of 1024 pixels!\n"); "Using the default of 1024 pixels!\n");
width=1024; width=1024;
} }
else if (width<250) // clip to lower bound else if (width<100) // clip to lower bound
{ {
width=250; width=100;
} }
else if (width>30000) // clip to upper bound else if (width>30000) // clip to upper bound
{ {
...@@ -351,9 +351,9 @@ void configStrToVal() ...@@ -351,9 +351,9 @@ void configStrToVal()
"Using the default of 1024 pixels!\n"); "Using the default of 1024 pixels!\n");
height=1024; height=1024;
} }
else if (height<250) // clip to lower bound else if (height<100) // clip to lower bound
{ {
height=250; height=100;
} }
else if (height>30000) // clip to upper bound else if (height>30000) // clip to upper bound
{ {
...@@ -625,6 +625,28 @@ void checkConfig() ...@@ -625,6 +625,28 @@ void checkConfig()
err("Could not create output directory %s\n",Config::manOutputDir.data()); err("Could not create output directory %s\n",Config::manOutputDir.data());
exit(1); exit(1);
} }
// expand the relative stripFromPath values
char *sfp = Config::stripFromPath.first();
while (sfp)
{
QCString path = sfp;
if (path.at(0)!='/' && (path.length()<=2 || path.at(1)!=':'))
{
QFileInfo fi(path);
if (fi.exists() && fi.isDir())
{
int i = Config::stripFromPath.at();
Config::stripFromPath.remove();
if (Config::stripFromPath.at()==i) // did not remove last item
Config::stripFromPath.insert(i,fi.absFilePath()+"/");
else
Config::stripFromPath.append(fi.absFilePath()+"/");
}
}
sfp = Config::stripFromPath.next();
}
// Test to see if HTML header is valid // Test to see if HTML header is valid
if (!Config::headerFile.isEmpty()) if (!Config::headerFile.isEmpty())
......
...@@ -762,7 +762,7 @@ void init() ...@@ -762,7 +762,7 @@ void init()
"information to generate all constant output in the proper language. \n" "information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n" "The default language is English, other supported languages are: \n"
"Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n" "Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n"
"Spanish and Russian\n" "Spanish, Russian, Croatian and Polish.\n"
); );
ConfigString::addFixedValue("outputLanguage","English"); ConfigString::addFixedValue("outputLanguage","English");
ConfigString::addFixedValue("outputLanguage","Dutch"); ConfigString::addFixedValue("outputLanguage","Dutch");
...@@ -771,11 +771,12 @@ void init() ...@@ -771,11 +771,12 @@ void init()
ConfigString::addFixedValue("outputLanguage","Czech"); ConfigString::addFixedValue("outputLanguage","Czech");
ConfigString::addFixedValue("outputLanguage","Swedish"); ConfigString::addFixedValue("outputLanguage","Swedish");
ConfigString::addFixedValue("outputLanguage","German"); ConfigString::addFixedValue("outputLanguage","German");
ConfigString::addFixedValue("outputLanguage","Russian");
ConfigString::addFixedValue("outputLanguage","Japanese");
ConfigString::addFixedValue("outputLanguage","Finnish"); ConfigString::addFixedValue("outputLanguage","Finnish");
ConfigString::addFixedValue("outputLanguage","Japanese");
ConfigString::addFixedValue("outputLanguage","Spanish"); ConfigString::addFixedValue("outputLanguage","Spanish");
ConfigString::addFixedValue("outputLanguage","Russian");
ConfigString::addFixedValue("outputLanguage","Croatian"); ConfigString::addFixedValue("outputLanguage","Croatian");
ConfigString::addFixedValue("outputLanguage","Polish");
ConfigBool::add( "noIndexFlag", ConfigBool::add( "noIndexFlag",
"DISABLE_INDEX", "DISABLE_INDEX",
"FALSE", "FALSE",
...@@ -821,7 +822,7 @@ void init() ...@@ -821,7 +822,7 @@ void init()
"HIDE_UNDOC_CLASSES", "HIDE_UNDOC_CLASSES",
"FALSE", "FALSE",
"hide undocumented members.", "hide undocumented members.",
"If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all \n" "If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \n"
"undocumented classes that are normally visible in the class hierarchy. \n" "undocumented classes that are normally visible in the class hierarchy. \n"
"If set to NO (the default) these class will be included in the various \n" "If set to NO (the default) these class will be included in the various \n"
"overviews. This option has no effect if EXTRACT_ALL is enabled. \n" "overviews. This option has no effect if EXTRACT_ALL is enabled. \n"
...@@ -1555,7 +1556,7 @@ void init() ...@@ -1555,7 +1556,7 @@ void init()
"this value, doxygen will try to truncate the graph, so that it fits within \n" "this value, doxygen will try to truncate the graph, so that it fits within \n"
"the specified constraint. Beware that most browsers cannot cope with very \n" "the specified constraint. Beware that most browsers cannot cope with very \n"
"large images. \n", "large images. \n",
250,30000 100,30000
); );
addDependency("maxDotGraphWidth","haveDotFlag"); addDependency("maxDotGraphWidth","haveDotFlag");
ConfigInt::add( "maxDotGraphHeight", ConfigInt::add( "maxDotGraphHeight",
...@@ -1567,7 +1568,7 @@ void init() ...@@ -1567,7 +1568,7 @@ void init()
"this value, doxygen will try to truncate the graph, so that it fits within \n" "this value, doxygen will try to truncate the graph, so that it fits within \n"
"the specified constraint. Beware that most browsers cannot cope with very \n" "the specified constraint. Beware that most browsers cannot cope with very \n"
"large images. \n", "large images. \n",
250,30000 100,30000
); );
addDependency("maxDotGraphHeight","haveDotFlag"); addDependency("maxDotGraphHeight","haveDotFlag");
......
...@@ -354,7 +354,9 @@ if test "$f_shared" = NO; then ...@@ -354,7 +354,9 @@ if test "$f_shared" = NO; then
TMAKE_LFLAGS = -non_shared TMAKE_LFLAGS = -non_shared
EOF EOF
elif test "$f_platform" = "solaris-cc"; then elif test "$f_platform" = "solaris-cc"; then
cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -Bstatic TMAKE_LFLAGS = -Bstatic
EOF
else else
cat >> .tmakeconfig <<EOF cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -static TMAKE_LFLAGS = -static
......
...@@ -25,6 +25,7 @@ GENERATE_MAN = NO ...@@ -25,6 +25,7 @@ GENERATE_MAN = NO
GENERATE_LATEX = YES GENERATE_LATEX = YES
GENERATE_HTML = YES GENERATE_HTML = YES
GENERATE_HTMLHELP = YES GENERATE_HTMLHELP = YES
GENERATE_RTF = NO
ENABLE_PREPROCESSING = NO ENABLE_PREPROCESSING = NO
INPUT = index.doc install.doc starting.doc faq.doc trouble.doc \ INPUT = index.doc install.doc starting.doc faq.doc trouble.doc \
history.doc features.doc \ history.doc features.doc \
......
...@@ -685,12 +685,17 @@ Public/Protected/Private/... section. ...@@ -685,12 +685,17 @@ Public/Protected/Private/... section.
sectioning command is encountered. sectioning command is encountered.
<hr> <hr>
\subsection cmdpar \par (paragraph title) { paragraph } \subsection cmdpar \par [(paragraph title)] { paragraph }
\addindex \par \addindex \par
Starts a paragraph with a user defined heading. The heading is If a paragraph title is given this command starts a paragraph with a
specified using the paragraph title argument and extends until the end of the user defined heading. The heading extends until the end of the
line. The paragraph will be indented. line. The paragraph following the command will be indented.
If no paragraph title is given this command will start a new paragraph.
This will also work inside other paragraph commands
(like \\param or \\warning) without ending the that command.
The text of the paragraph has no special internal structure. All visual The text of the paragraph has no special internal structure. All visual
enhancement commands may be used inside the paragraph. enhancement commands may be used inside the paragraph.
The \\par command ends when a blank line or some other The \\par command ends when a blank line or some other
......
...@@ -188,7 +188,8 @@ followed by the descriptions of the tags grouped by category. ...@@ -188,7 +188,8 @@ followed by the descriptions of the tags grouped by category.
documentation generated by doxygen is written. Doxygen will use this documentation generated by doxygen is written. Doxygen will use this
information to generate all constant output in the proper language. information to generate all constant output in the proper language.
The default language is English, other supported languages are: The default language is English, other supported languages are:
Dutch, French, Italian, Czech, Swedish, German and Japanese. Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese,
Spanish, Russian, Croatian and Polish.
\anchor cfg_disable_index \anchor cfg_disable_index
<dt>\c DISABLE_INDEX <dd> <dt>\c DISABLE_INDEX <dd>
......
...@@ -180,6 +180,20 @@ Here is a list of the languages and their current maintainers: ...@@ -180,6 +180,20 @@ Here is a list of the languages and their current maintainers:
</TD> </TD>
</TR> </TR>
<TR BGCOLOR="#ffffff">
<TD>
Polish
</TD>
<TD>
Grzegorz Kowal
</TD>
<TD>
<a href="mailto:g_kowal@NOSPAM.poczta.onet.pl">
g_kowal@NOSPAM.poczta.onet.pl</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD> <TD>
Dutch Dutch
...@@ -227,6 +241,8 @@ Here is a list of the languages and their current maintainers: ...@@ -227,6 +241,8 @@ Here is a list of the languages and their current maintainers:
\hline \hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} \\ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} \\
\hline \hline
Polish & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} \\
\hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} \\ Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} \\
\hline \hline
\end{tabular} \end{tabular}
......
...@@ -2,5 +2,6 @@ PROJECT_NAME = "AfterDocs" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "AfterDocs"
OUTPUT_DIRECTORY = afterdoc OUTPUT_DIRECTORY = afterdoc
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = afterdoc.h INPUT = afterdoc.h
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Author Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Author Command"
OUTPUT_DIRECTORY = author OUTPUT_DIRECTORY = author
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = author.cpp INPUT = author.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Automatic link generation" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Automatic link generation"
OUTPUT_DIRECTORY = autolink OUTPUT_DIRECTORY = autolink
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = autolink.cpp INPUT = autolink.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Class Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Class Command"
OUTPUT_DIRECTORY = class OUTPUT_DIRECTORY = class
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = class.h INPUT = class.h
QUIET = YES QUIET = YES
...@@ -2,6 +2,7 @@ PROJECT_NAME = "Define Command" ...@@ -2,6 +2,7 @@ PROJECT_NAME = "Define Command"
OUTPUT_DIRECTORY = define OUTPUT_DIRECTORY = define
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = define.h INPUT = define.h
ENABLE_PREPROCESSING = YES ENABLE_PREPROCESSING = YES
QUIET = YES QUIET = YES
...@@ -4,6 +4,7 @@ HAVE_DOT = YES ...@@ -4,6 +4,7 @@ HAVE_DOT = YES
EXTRACT_ALL = YES EXTRACT_ALL = YES
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
ENABLE_PREPROCESSING = YES ENABLE_PREPROCESSING = YES
INPUT = . INPUT = .
FILE_PATTERNS = diagrams_*.h FILE_PATTERNS = diagrams_*.h
......
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Enum Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Enum Command"
OUTPUT_DIRECTORY = enum OUTPUT_DIRECTORY = enum
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = enum.h INPUT = enum.h
QUIET = YES QUIET = YES
...@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = example ...@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = example
GENERATE_TAGFILE = example.tag GENERATE_TAGFILE = example.tag
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = example.cpp INPUT = example.cpp
EXAMPLE_PATH = example_test.cpp EXAMPLE_PATH = example_test.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "File Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "File Command"
OUTPUT_DIRECTORY = file OUTPUT_DIRECTORY = file
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = file.h INPUT = file.h
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Fn Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Fn Command"
OUTPUT_DIRECTORY = func OUTPUT_DIRECTORY = func
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = func.h INPUT = func.h
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Grouping" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Grouping"
OUTPUT_DIRECTORY = group OUTPUT_DIRECTORY = group
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = group.cpp INPUT = group.cpp
QUIET = YES QUIET = YES
...@@ -2,6 +2,7 @@ PROJECT_NAME = "Include Command" ...@@ -2,6 +2,7 @@ PROJECT_NAME = "Include Command"
OUTPUT_DIRECTORY = include OUTPUT_DIRECTORY = include
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = include.cpp INPUT = include.cpp
EXAMPLE_PATH = example_test.cpp EXAMPLE_PATH = example_test.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "JavaDoc Style" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "JavaDoc Style"
OUTPUT_DIRECTORY = jdstyle OUTPUT_DIRECTORY = jdstyle
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = jdstyle.cpp INPUT = jdstyle.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Member Grouping" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Member Grouping"
OUTPUT_DIRECTORY = memgrp OUTPUT_DIRECTORY = memgrp
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = memgrp.cpp INPUT = memgrp.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Overloaded Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Overloaded Command"
OUTPUT_DIRECTORY = overload OUTPUT_DIRECTORY = overload
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = overload.cpp INPUT = overload.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Page Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Page Command"
OUTPUT_DIRECTORY = page OUTPUT_DIRECTORY = page
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = page.doc INPUT = page.doc
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Par Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Par Command"
OUTPUT_DIRECTORY = par OUTPUT_DIRECTORY = par
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = par.cpp INPUT = par.cpp
QUIET = YES QUIET = YES
/*! \class Test /*! \class Test
* Normal text. * Normal text.
*
* \par User defined paragraph: * \par User defined paragraph:
* Contents of the paragraph. * Contents of the paragraph.
* *
* \par
* New paragraph under the same heading.
*
* \note
* This note consists of two paragraphs.
* This is the first paragraph.
*
* \par
* And this is the second paragraph.
*
* More normal text. * More normal text.
*/ */
......
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Qt Style" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Qt Style"
OUTPUT_DIRECTORY = qtstyle OUTPUT_DIRECTORY = qtstyle
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = qtstyle.cpp INPUT = qtstyle.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Relates Command" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Relates Command"
OUTPUT_DIRECTORY = relates OUTPUT_DIRECTORY = relates
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = relates.cpp INPUT = relates.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Resolving Typedefs" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Resolving Typedefs"
OUTPUT_DIRECTORY = restypedef OUTPUT_DIRECTORY = restypedef
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = restypedef.cpp INPUT = restypedef.cpp
QUIET = YES QUIET = YES
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Structural commands" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Structural commands"
OUTPUT_DIRECTORY = structcmd OUTPUT_DIRECTORY = structcmd
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = structcmd.h INPUT = structcmd.h
QUIET = YES QUIET = YES
...@@ -2,6 +2,7 @@ PROJECT_NAME = "Tag Files" ...@@ -2,6 +2,7 @@ PROJECT_NAME = "Tag Files"
OUTPUT_DIRECTORY = tag OUTPUT_DIRECTORY = tag
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = tag.cpp INPUT = tag.cpp
TAGFILES = example.tag TAGFILES = example.tag
PERL_PATH = perl PERL_PATH = perl
......
...@@ -2,5 +2,6 @@ PROJECT_NAME = "Template Test" ...@@ -2,5 +2,6 @@ PROJECT_NAME = "Template Test"
OUTPUT_DIRECTORY = template OUTPUT_DIRECTORY = template
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO
INPUT = templ.cpp INPUT = templ.cpp
QUIET = YES QUIET = YES
Name: doxygen Name: doxygen
Version: 1.1.5 Version: 1.1.5-20000709
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 1 Release: 1
Source0: doxygen-%{version}.src.tar.gz Source0: doxygen-%{version}.src.tar.gz
......
...@@ -45,7 +45,7 @@ static QCString stripExtension(const char *fName) ...@@ -45,7 +45,7 @@ static QCString stripExtension(const char *fName)
ClassDef::ClassDef( ClassDef::ClassDef(
const char *defFileName,int defLine, const char *defFileName,int defLine,
const char *nm,CompoundType ct, const char *nm,CompoundType ct,
const char *ref,const char *fName) const char *lref,const char *fName)
: Definition(defFileName,defLine,removeRedundantWhiteSpace(nm)) : Definition(defFileName,defLine,removeRedundantWhiteSpace(nm))
{ {
//name=n; //name=n;
...@@ -53,9 +53,9 @@ ClassDef::ClassDef( ...@@ -53,9 +53,9 @@ ClassDef::ClassDef(
fileName=stripExtension(fName); fileName=stripExtension(fName);
else else
fileName="class_"+nameToFile(nm); fileName="class_"+nameToFile(nm);
if (ref) if (lref)
{ {
//url=(QCString)"doxygen=\""+ref+":\" href=\""+fileName; //url=(QCString)"doxygen=\""+lref+":\" href=\""+fileName;
exampleList = 0; exampleList = 0;
exampleDict = 0; exampleDict = 0;
} }
...@@ -74,7 +74,7 @@ ClassDef::ClassDef( ...@@ -74,7 +74,7 @@ ClassDef::ClassDef(
allMemberNameInfoList->setAutoDelete(TRUE); allMemberNameInfoList->setAutoDelete(TRUE);
allMemberNameInfoDict = new MemberNameInfoDict(1009); allMemberNameInfoDict = new MemberNameInfoDict(1009);
visited=FALSE; visited=FALSE;
setReference(ref); setReference(lref);
compType=ct; compType=ct;
incInfo=0; incInfo=0;
tempArgs=0; tempArgs=0;
...@@ -551,17 +551,17 @@ static void writeInheritanceSpecifier(OutputList &ol,BaseClassDef *bcd) ...@@ -551,17 +551,17 @@ static void writeInheritanceSpecifier(OutputList &ol,BaseClassDef *bcd)
} }
} }
void ClassDef::setIncludeFile(FileDef *fd,const char *incName,bool local) void ClassDef::setIncludeFile(FileDef *fd,const char *includeName,bool local)
{ {
//printf("ClassDef::setInclude(%p,%s,%d)\n",fd,incName,local); //printf("ClassDef::setInclude(%p,%s,%d)\n",fd,includeName,local);
if (!incInfo) incInfo=new IncludeInfo; if (!incInfo) incInfo=new IncludeInfo;
if ((incName && incInfo->includeName.isEmpty()) || if ((includeName && incInfo->includeName.isEmpty()) ||
(fd!=0 && incInfo->fileDef==0) (fd!=0 && incInfo->fileDef==0)
) )
{ {
//printf("Setting file info\n"); //printf("Setting file info\n");
incInfo->fileDef = fd; incInfo->fileDef = fd;
incInfo->includeName = incName; incInfo->includeName = includeName;
incInfo->local = local; incInfo->local = local;
} }
} }
...@@ -776,6 +776,14 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -776,6 +776,14 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.startDotGraph(); ol.startDotGraph();
parseText(ol,theTranslator->trClassDiagram(name())); parseText(ol,theTranslator->trClassDiagram(name()));
ol.endDotGraph(inheritanceGraph); ol.endDotGraph(inheritanceGraph);
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<font size=2><center>[");
ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend());
ol.writeString("]</center></font>");
ol.popGeneratorState();
}
ol.popGeneratorState(); ol.popGeneratorState();
} }
} }
...@@ -800,6 +808,14 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -800,6 +808,14 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.startDotGraph(); ol.startDotGraph();
parseText(ol,theTranslator->trCollaborationDiagram(name())); parseText(ol,theTranslator->trCollaborationDiagram(name()));
ol.endDotGraph(usageImplGraph); ol.endDotGraph(usageImplGraph);
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<font size=2><center>[");
ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend());
ol.writeString("]</center></font>");
ol.popGeneratorState();
}
ol.popGeneratorState(); ol.popGeneratorState();
} }
} }
......
...@@ -829,7 +829,7 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -829,7 +829,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# information to generate all constant output in the proper language. \n"; t << "# information to generate all constant output in the proper language. \n";
t << "# The default language is English, other supported languages are: \n"; t << "# The default language is English, other supported languages are: \n";
t << "# Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n"; t << "# Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n";
t << "# Spanish and Russian\n"; t << "# Spanish, Russian, Croatian and Polish.\n";
t << "\n"; t << "\n";
} }
t << "OUTPUT_LANGUAGE = "; t << "OUTPUT_LANGUAGE = ";
...@@ -894,7 +894,7 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -894,7 +894,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
t << "# If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all \n"; t << "# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \n";
t << "# undocumented classes that are normally visible in the class hierarchy. \n"; t << "# undocumented classes that are normally visible in the class hierarchy. \n";
t << "# If set to NO (the default) these class will be included in the various \n"; t << "# If set to NO (the default) these class will be included in the various \n";
t << "# overviews. This option has no effect if EXTRACT_ALL is enabled. \n"; t << "# overviews. This option has no effect if EXTRACT_ALL is enabled. \n";
...@@ -1994,9 +1994,9 @@ void configStrToVal() ...@@ -1994,9 +1994,9 @@ void configStrToVal()
"Using the default of 1024 pixels!\n"); "Using the default of 1024 pixels!\n");
width=1024; width=1024;
} }
else if (width<250) // clip to lower bound else if (width<100) // clip to lower bound
{ {
width=250; width=100;
} }
else if (width>30000) // clip to upper bound else if (width>30000) // clip to upper bound
{ {
...@@ -2019,9 +2019,9 @@ void configStrToVal() ...@@ -2019,9 +2019,9 @@ void configStrToVal()
"Using the default of 1024 pixels!\n"); "Using the default of 1024 pixels!\n");
height=1024; height=1024;
} }
else if (height<250) // clip to lower bound else if (height<100) // clip to lower bound
{ {
height=250; height=100;
} }
else if (height>30000) // clip to upper bound else if (height>30000) // clip to upper bound
{ {
...@@ -2333,6 +2333,28 @@ void checkConfig() ...@@ -2333,6 +2333,28 @@ void checkConfig()
err("Could not create output directory %s\n",Config::manOutputDir.data()); err("Could not create output directory %s\n",Config::manOutputDir.data());
exit(1); exit(1);
} }
// expand the relative stripFromPath values
char *sfp = Config::stripFromPath.first();
while (sfp)
{
QCString path = sfp;
if (path.at(0)!='/' && (path.length()<=2 || path.at(1)!=':'))
{
QFileInfo fi(path);
if (fi.exists() && fi.isDir())
{
int i = Config::stripFromPath.at();
Config::stripFromPath.remove();
if (Config::stripFromPath.at()==i) // did not remove last item
Config::stripFromPath.insert(i,fi.absFilePath()+"/");
else
Config::stripFromPath.append(fi.absFilePath()+"/");
}
}
sfp = Config::stripFromPath.next();
}
// Test to see if HTML header is valid // Test to see if HTML header is valid
if (!Config::headerFile.isEmpty()) if (!Config::headerFile.isEmpty())
......
...@@ -270,7 +270,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -270,7 +270,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
{ {
a->type = g_curArgTypeName.stripWhiteSpace(); a->type = g_curArgTypeName.stripWhiteSpace();
} }
a->array = g_curArgArray.copy(); a->array = removeRedundantWhiteSpace(g_curArgArray);
a->defval = g_curArgDefValue.copy(); a->defval = g_curArgDefValue.copy();
a->docs = g_curArgDocs.stripWhiteSpace(); a->docs = g_curArgDocs.stripWhiteSpace();
//printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data()); //printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data());
......
...@@ -324,21 +324,22 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) ...@@ -324,21 +324,22 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
parseText(ol,theTranslator->trReferencedBy()); parseText(ol,theTranslator->trReferencedBy());
ol.docify(" "); ol.docify(" ");
QCString defLine=theTranslator->trWriteList(sourceRefList->count()); QCString ldefLine=theTranslator->trWriteList(sourceRefList->count());
QRegExp marker("@[0-9]+"); QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen; int index=0,newIndex,matchLen;
// now replace all markers in inheritLine with links to the classes // now replace all markers in inheritLine with links to the classes
while ((newIndex=marker.match(defLine,index,&matchLen))!=-1) while ((newIndex=marker.match(ldefLine,index,&matchLen))!=-1)
{ {
bool ok; bool ok;
parseText(ol,defLine.mid(index,newIndex-index)); parseText(ol,ldefLine.mid(index,newIndex-index));
uint entryIndex = defLine.mid(newIndex+1,matchLen-1).toUInt(&ok); uint entryIndex = ldefLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
MemberDef *md=sourceRefList->at(entryIndex); MemberDef *md=sourceRefList->at(entryIndex);
if (ok && md) if (ok && md)
{ {
QCString scope=md->getScopeString(); QCString scope=md->getScopeString();
QCString name=md->name(); QCString name=md->name();
//printf("class=%p scope=%s scopeName=%s\n",md->memberClass(),scope.data(),scopeName);
if (!scope.isEmpty() && scope!=scopeName) if (!scope.isEmpty() && scope!=scopeName)
{ {
name.prepend(scope+"::"); name.prepend(scope+"::");
...@@ -358,7 +359,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) ...@@ -358,7 +359,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
} }
index=newIndex+matchLen; index=newIndex+matchLen;
} }
parseText(ol,defLine.right(defLine.length()-index)); parseText(ol,ldefLine.right(ldefLine.length()-index));
ol.writeString("."); ol.writeString(".");
} }
ol.popGeneratorState(); ol.popGeneratorState();
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#include "message.h" #include "message.h"
#include "util.h" #include "util.h"
#include "config.h" #include "config.h"
#include "language.h"
#include "scanner.h"
#include <qdir.h> #include <qdir.h>
#include <qfile.h> #include <qfile.h>
...@@ -55,7 +57,11 @@ static const char *edgeStyleMap[] = ...@@ -55,7 +57,11 @@ static const char *edgeStyleMap[] =
static bool convertMapFile(QTextStream &t,const char *mapName) static bool convertMapFile(QTextStream &t,const char *mapName)
{ {
QFile f(mapName); QFile f(mapName);
if (!f.open(IO_ReadOnly)) return FALSE; if (!f.open(IO_ReadOnly))
{
err("Error opening map file %s for inclusion in the docs!\n",mapName);
return FALSE;
}
const int maxLineLen=1024; const int maxLineLen=1024;
char buf[maxLineLen]; char buf[maxLineLen];
char url[maxLineLen]; char url[maxLineLen];
...@@ -1016,11 +1022,10 @@ static void findMaximalDotGraph(DotNode *root, ...@@ -1016,11 +1022,10 @@ static void findMaximalDotGraph(DotNode *root,
// remove temporary dot file // remove temporary dot file
thisDir.remove(baseName+"_tmp.dot"); thisDir.remove(baseName+"_tmp.dot");
} while (maxDistance-minDistance>1); } while ((maxDistance-minDistance)>1);
if (!lastFit) if (!lastFit)
{ {
//printf("Using last fit %d\n",minDistance);
writeDotGraph(root, writeDotGraph(root,
format, format,
baseName, baseName,
...@@ -1082,6 +1087,7 @@ void DotClassGraph::writeGraph(QTextStream &out, ...@@ -1082,6 +1087,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
if (system(dotCmd)!=0) if (system(dotCmd)!=0)
{ {
err("Error: Problems running dot. Check your installation!\n"); err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return; return;
} }
// run dot again to create an image map // run dot again to create an image map
...@@ -1090,6 +1096,7 @@ void DotClassGraph::writeGraph(QTextStream &out, ...@@ -1090,6 +1096,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
if (system(dotCmd)!=0) if (system(dotCmd)!=0)
{ {
err("Error: Problems running dot. Check your installation!\n"); err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return; return;
} }
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#" out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
...@@ -1101,18 +1108,20 @@ void DotClassGraph::writeGraph(QTextStream &out, ...@@ -1101,18 +1108,20 @@ void DotClassGraph::writeGraph(QTextStream &out,
} }
else if (format==EPS) // run dot to create a .eps image else if (format==EPS) // run dot to create a .eps image
{ {
QCString dotCmd; QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tps \"%s.dot\" -o \"%s.eps\"", dotCmd.sprintf("%sdot -Tps \"%s.dot\" -o \"%s.eps\"",
Config::dotPath.data(),baseName.data(),baseName.data()); Config::dotPath.data(),baseName.data(),baseName.data());
if (system(dotCmd)!=0) if (system(dotCmd)!=0)
{ {
err("Error: Problems running dot. Check your installation!\n"); err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return; return;
} }
int width,height; int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height)) if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{ {
err("Error: Could not extract bounding box from .eps!\n"); err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return; return;
} }
int maxWidth = 420; /* approx. page width in points */ int maxWidth = 420; /* approx. page width in points */
...@@ -1125,7 +1134,7 @@ void DotClassGraph::writeGraph(QTextStream &out, ...@@ -1125,7 +1134,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
"\\end{center}\n" "\\end{center}\n"
"\\end{figure}\n"; "\\end{figure}\n";
} }
thisDir.remove(baseName+".dot"); //thisDir.remove(baseName+".dot");
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
} }
...@@ -1240,12 +1249,13 @@ void DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1240,12 +1249,13 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
if (format==GIF) if (format==GIF)
{ {
// run dot to create a .gif image // run dot to create a .gif image
QCString dotCmd; QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tgif \"%s.dot\" -o \"%s.gif\"", dotCmd.sprintf("%sdot -Tgif \"%s.dot\" -o \"%s.gif\"",
Config::dotPath.data(),baseName.data(),baseName.data()); Config::dotPath.data(),baseName.data(),baseName.data());
if (system(dotCmd)!=0) if (system(dotCmd)!=0)
{ {
err("Problems running dot. Check your installation!\n"); err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return; return;
} }
...@@ -1255,11 +1265,13 @@ void DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1255,11 +1265,13 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
if (system(dotCmd)!=0) if (system(dotCmd)!=0)
{ {
err("Problems running dot. Check your installation!\n"); err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return; return;
} }
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#" out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
<< mapName << "_map\"></center>" << endl; << mapName << "_map\">";
out << "</center>" << endl;
out << "<map name=\"" << mapName << "_map\">" << endl; out << "<map name=\"" << mapName << "_map\">" << endl;
convertMapFile(out,baseName+".map"); convertMapFile(out,baseName+".map");
out << "</map><p>" << endl; out << "</map><p>" << endl;
...@@ -1268,18 +1280,20 @@ void DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1268,18 +1280,20 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
else if (format==EPS) else if (format==EPS)
{ {
// run dot to create a .eps image // run dot to create a .eps image
QCString dotCmd; QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tps \"%s.dot\" -o \"%s.eps\"", dotCmd.sprintf("%sdot -Tps \"%s.dot\" -o \"%s.eps\"",
Config::dotPath.data(),baseName.data(),baseName.data()); Config::dotPath.data(),baseName.data(),baseName.data());
if (system(dotCmd)!=0) if (system(dotCmd)!=0)
{ {
err("Problems running dot. Check your installation!\n"); err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return; return;
} }
int width,height; int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height)) if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{ {
err("Error: Could not extract bounding box from .eps!\n"); err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return; return;
} }
int maxWidth = 420; /* approx. page width in points */ int maxWidth = 420; /* approx. page width in points */
...@@ -1302,3 +1316,57 @@ bool DotInclDepGraph::isTrivial() const ...@@ -1302,3 +1316,57 @@ bool DotInclDepGraph::isTrivial() const
{ {
return m_startNode->m_children==0; return m_startNode->m_children==0;
} }
//-------------------------------------------------------------
void generateGraphLegend(const char *path)
{
QFile dotFile((QCString)path+"/graph_legend.dot");
if (!dotFile.open(IO_WriteOnly))
{
err("Could not open file %s for writing\n",
convertToQCString(dotFile.name()).data());
return;
}
QTextStream dotText(&dotFile);
dotText << "digraph inheritance\n";
dotText << "{\n";
dotText << " Node7 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node8 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node8 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_publicbase.html\"];\n";
dotText << " Node9 -> Node8 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node9 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"red\",URL=\"$class_truncated.html\"];\n";
dotText << " Node11 -> Node7 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node11 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_protectedbase.html\"];\n";
dotText << " Node12 -> Node7 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node12 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_privatebase.html\"];\n";
dotText << " Node13 -> Node7 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node13 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey\"];\n";
dotText << " Node14 -> Node7 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n";
dotText << " Node14 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_used.html\"];\n";
dotText << "}\n";
dotFile.close();
QDir d(path);
// store the original directory
if (!d.exists())
{
err("Error: Output dir %s does not exist!\n",path); exit(1);
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
// goto the html output directory (i.e. path)
QDir::setCurrent(d.absPath());
// run dot to generate the a .gif image from the graph
QCString dotCmd(4096);
dotCmd.sprintf("%sdot -Tgif graph_legend.dot -o graph_legend.gif",
Config::dotPath.data());
if (system(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
}
QDir::setCurrent(oldDir);
}
...@@ -154,3 +154,6 @@ class DotInclDepGraph ...@@ -154,3 +154,6 @@ class DotInclDepGraph
int m_maxDistance; int m_maxDistance;
bool m_inverse; bool m_inverse;
}; };
void generateGraphLegend(const char *path);
...@@ -656,6 +656,7 @@ static void buildNamespaceList(Entry *root) ...@@ -656,6 +656,7 @@ static void buildNamespaceList(Entry *root)
FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig);
// insert the namespace in the file definition // insert the namespace in the file definition
if (fd) fd->insertNamespace(nd); if (fd) fd->insertNamespace(nd);
addNamespaceToGroups(root,nd);
} }
else /* if (!root->doc.isEmpty() || else /* if (!root->doc.isEmpty() ||
!root->brief.isEmpty() || !root->brief.isEmpty() ||
...@@ -1493,7 +1494,10 @@ static void buildMemberList(Entry *root) ...@@ -1493,7 +1494,10 @@ static void buildMemberList(Entry *root)
} }
else if (root->parent && else if (root->parent &&
!(root->parent->section & Entry::COMPOUND_MASK) && !(root->parent->section & Entry::COMPOUND_MASK) &&
root->name.find("::")==-1 && root->name.find("::")==-1 && // TODO: remove this check
// it breaks cases like
// func<A::B>(), but it is needed
// for detect that A::func() is a member
root->relates.isEmpty() && root->relates.isEmpty() &&
root->type.left(7)!="extern " && root->type.left(7)!="extern " &&
root->type.left(8)!="typedef " root->type.left(8)!="typedef "
...@@ -2678,7 +2682,9 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl ...@@ -2678,7 +2682,9 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
} }
namespaceName=removeAnnonymousScopes(namespaceName); namespaceName=removeAnnonymousScopes(namespaceName);
//printf("namespaceName=`%s' className=`%s'\n",namespaceName.data(),className.data());
// merge class and namespace scopes again // merge class and namespace scopes again
scopeName.resize(0);
if (!namespaceName.isEmpty()) if (!namespaceName.isEmpty())
{ {
if (className.isEmpty()) if (className.isEmpty())
...@@ -3292,14 +3298,14 @@ static void findMemberDocumentation(Entry *root) ...@@ -3292,14 +3298,14 @@ static void findMemberDocumentation(Entry *root)
if (!root->type.isEmpty()) if (!root->type.isEmpty())
{ {
findMember(root, findMember(root,
root->type+" "+ root->type+" "+
root->inside+ root->inside+
root->name+ root->name+
root->args+ root->args+
root->exception, root->exception,
root->relates, root->relates,
FALSE,isFunc); FALSE,isFunc);
} }
else else
{ {
...@@ -4576,8 +4582,8 @@ static void generateSearchIndex() ...@@ -4576,8 +4582,8 @@ static void generateSearchIndex()
if (f.open(IO_WriteOnly)) if (f.open(IO_WriteOnly))
{ {
QTextStream t(&f); QTextStream t(&f);
t << Config::docURL << endl << Config::cgiURL t << Config::docURL << "/" << endl
<< "/" << Config::cgiName << endl; << Config::cgiURL << "/" << Config::cgiName << endl;
f.close(); f.close();
} }
else else
...@@ -5112,7 +5118,7 @@ int main(int argc,char **argv) ...@@ -5112,7 +5118,7 @@ int main(int argc,char **argv)
#endif #endif
initPreprocessor(); initPreprocessor();
/************************************************************************** /**************************************************************************
* Handle arguments * * Handle arguments *
**************************************************************************/ **************************************************************************/
...@@ -5218,6 +5224,15 @@ int main(int argc,char **argv) ...@@ -5218,6 +5224,15 @@ int main(int argc,char **argv)
exampleNameDict = new FileNameDict(1009); exampleNameDict = new FileNameDict(1009);
imageNameDict = new FileNameDict(257); imageNameDict = new FileNameDict(257);
if (!Config::docURL.isEmpty())
{
tagDestinationDict.insert("_doc",new QCString(Config::docURL));
}
if (!Config::cgiURL.isEmpty())
{
tagDestinationDict.insert("_cgi",new QCString(Config::cgiURL+"/"+Config::cgiName));
}
/************************************************************************** /**************************************************************************
* Initialize some global constants * Initialize some global constants
**************************************************************************/ **************************************************************************/
...@@ -5555,6 +5570,9 @@ int main(int argc,char **argv) ...@@ -5555,6 +5570,9 @@ int main(int argc,char **argv)
msg("Generating page index...\n"); msg("Generating page index...\n");
writePageIndex(*outputList); writePageIndex(*outputList);
msg("Generating graph info page...\n");
writeGraphInfo(*outputList);
msg("Generating search index...\n"); msg("Generating search index...\n");
generateSearchIndex(); generateSearchIndex();
......
...@@ -25,7 +25,7 @@ HEADERS = doxygen.h scanner.h classdef.h classlist.h memberdef.h \ ...@@ -25,7 +25,7 @@ HEADERS = doxygen.h scanner.h classdef.h classlist.h memberdef.h \
namespacedef.h version.h language.h translator.h \ namespacedef.h version.h language.h translator.h \
translator_nl.h translator_se.h translator_cz.h translator_fr.h \ translator_nl.h translator_se.h translator_cz.h translator_fr.h \
translator_it.h formula.h debug.h membergroup.h htmlhelp.h \ translator_it.h formula.h debug.h membergroup.h htmlhelp.h \
translator_ru.h dot.h rtfgen.h translator_ru.h translator_pl.h dot.h rtfgen.h
SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp \ SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp \
membername.cpp index.cpp memberlist.cpp \ membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \ entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......
...@@ -204,7 +204,7 @@ void printFooter() ...@@ -204,7 +204,7 @@ void printFooter()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void message(char *fmt,...) void message(const char *fmt,...)
{ {
printHeader(); printHeader();
printf("<h2>"); printf("<h2>");
...@@ -413,7 +413,7 @@ void searchIndex(const char *word,SearchResults *results) ...@@ -413,7 +413,7 @@ void searchIndex(const char *word,SearchResults *results)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
int sortResults(const void *a1,const void *a2) extern "C" int sortResults(const void *a1,const void *a2)
{ {
SearchDoc **d1=(SearchDoc **)a1; SearchDoc **d1=(SearchDoc **)a1;
SearchDoc **d2=(SearchDoc **)a2; SearchDoc **d2=(SearchDoc **)a2;
......
...@@ -34,14 +34,14 @@ ...@@ -34,14 +34,14 @@
\a the file name, and \a ref is an HTML anchor name if the \a the file name, and \a ref is an HTML anchor name if the
file was read from a tag file or 0 otherwise file was read from a tag file or 0 otherwise
*/ */
FileDef::FileDef(const char *p,const char *nm,const char *ref) FileDef::FileDef(const char *p,const char *nm,const char *lref)
: Definition((QCString)p+nm,1,nm) : Definition((QCString)p+nm,1,nm)
{ {
path=p; path=p;
filepath=path+nm; filepath=path+nm;
filename=nameToFile(nm); filename=nameToFile(nm);
diskname=filename.copy(); diskname=filename.copy();
setReference(ref); setReference(lref);
classList = new ClassList; classList = new ClassList;
includeList = new QList<IncludeInfo>; includeList = new QList<IncludeInfo>;
includeList->setAutoDelete(TRUE); includeList->setAutoDelete(TRUE);
......
...@@ -111,7 +111,8 @@ void HtmlGenerator::startQuickIndexItem(const char *s,const char *l) ...@@ -111,7 +111,8 @@ void HtmlGenerator::startQuickIndexItem(const char *s,const char *l)
{ {
t << "<a class=\"qindexRef\" "; t << "<a class=\"qindexRef\" ";
t << "doxygen=\"" << s << ":"; t << "doxygen=\"" << s << ":";
if ((dest=tagDestinationDict[s])) t << *dest << "/"; if ((dest=tagDestinationDict[s])) t << *dest;
if (strcmp(s,"_cgi")!=0) t << "/"; // small hack to get the cgi binary link right
t << "\" "; t << "\" ";
} }
else else
...@@ -121,7 +122,8 @@ void HtmlGenerator::startQuickIndexItem(const char *s,const char *l) ...@@ -121,7 +122,8 @@ void HtmlGenerator::startQuickIndexItem(const char *s,const char *l)
t << "href=\""; t << "href=\"";
if (s) if (s)
{ {
if ((dest=tagDestinationDict[s])) t << *dest << "/"; if ((dest=tagDestinationDict[s])) t << *dest;
if (strcmp(s,"_cgi")!=0) t << "/";
} }
t << l << "\">"; t << l << "\">";
} }
......
...@@ -310,11 +310,11 @@ void Image::drawRect(int x,int y,int w,int h,uchar colIndex,uint mask) ...@@ -310,11 +310,11 @@ void Image::drawRect(int x,int y,int w,int h,uchar colIndex,uint mask)
drawVertLine(x+w-1,y,y+h-1,colIndex,mask); drawVertLine(x+w-1,y,y+h-1,colIndex,mask);
} }
void Image::fillRect(int x,int y,int width,int height,uchar colIndex,uint mask) void Image::fillRect(int x,int y,int lwidth,int lheight,uchar colIndex,uint mask)
{ {
int xp,yp,xi,yi; int xp,yp,xi,yi;
for (yp=y,yi=0;yp<y+height;yp++,yi++) for (yp=y,yi=0;yp<y+lheight;yp++,yi++)
for (xp=x,xi=0;xp<x+width;xp++,xi++) for (xp=x,xi=0;xp<x+lwidth;xp++,xi++)
if (mask&(1<<((xi+yi)&0x1f))) if (mask&(1<<((xi+yi)&0x1f)))
setPixel(xp,yp,colIndex); setPixel(xp,yp,colIndex);
} }
......
...@@ -1491,6 +1491,23 @@ void writeGroupList(OutputList &ol) ...@@ -1491,6 +1491,23 @@ void writeGroupList(OutputList &ol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void writeGraphInfo(OutputList &ol)
{
if (!Config::haveDotFlag) return;
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
generateGraphLegend(Config::htmlOutputDir);
startFile(ol,"graph_legend","Graph Legend");
startTitle(ol,0);
parseText(ol,theTranslator->trLegendTitle());
endTitle(ol,0,0);
parseDoc(ol,"graph_legend",1,0,0,theTranslator->trLegendDocs());
endFile(ol);
ol.popGeneratorState();
}
//----------------------------------------------------------------------------
void writeGroupIndex(OutputList &ol) void writeGroupIndex(OutputList &ol)
{ {
if (documentedGroups==0) return; if (documentedGroups==0) return;
...@@ -1522,6 +1539,8 @@ void writeGroupIndex(OutputList &ol) ...@@ -1522,6 +1539,8 @@ void writeGroupIndex(OutputList &ol)
ol.popGeneratorState(); ol.popGeneratorState();
} }
//----------------------------------------------------------------------------
void writeIndex(OutputList &ol) void writeIndex(OutputList &ol)
{ {
// save old generator state // save old generator state
......
...@@ -62,6 +62,7 @@ void writeGroupIndex(OutputList &ol); ...@@ -62,6 +62,7 @@ void writeGroupIndex(OutputList &ol);
void writeNamespaceIndex(OutputList &ol); void writeNamespaceIndex(OutputList &ol);
void writeNamespaceMemberIndex(OutputList &ol); void writeNamespaceMemberIndex(OutputList &ol);
void writeGraphicalClassHierarchy(OutputList &ol); void writeGraphicalClassHierarchy(OutputList &ol);
void writeGraphInfo(OutputList &ol);
int countClassHierarchy(); int countClassHierarchy();
int countClassMembers(); int countClassMembers();
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "translator_fi.h" #include "translator_fi.h"
#include "translator_ru.h" #include "translator_ru.h"
#include "translator_hr.h" #include "translator_hr.h"
#include "translator_pl.h"
#endif #endif
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -90,6 +91,10 @@ bool setTranslator(const char *langName) ...@@ -90,6 +91,10 @@ bool setTranslator(const char *langName)
{ {
theTranslator=new TranslatorCroatian; theTranslator=new TranslatorCroatian;
} }
else if (L_EQUAL("polish"))
{
theTranslator=new TranslatorPolish;
}
#endif #endif
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
...@@ -484,14 +484,14 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -484,14 +484,14 @@ void MemberDef::writeDeclaration(OutputList &ol,
//printf("md->name()=`%s' Protection=%d\n",name().data(),protection()); //printf("md->name()=`%s' Protection=%d\n",name().data(),protection());
if (inGroup && protection()==Private && !Config::extractPrivateFlag) return; if (inGroup && protection()==Private && !Config::extractPrivateFlag) return;
QCString type=typeString(); QCString ltype=type.copy();
// strip `static' keyword from type // strip `static' keyword from ltype
if (type.left(7)=="static ") type=type.right(type.length()-7); if (ltype.left(7)=="static ") ltype=ltype.right(ltype.length()-7);
// strip `friend' keyword from type // strip `friend' keyword from ltype
if (type.left(7)=="friend ") type=type.right(type.length()-7); if (ltype.left(7)=="friend ") ltype=ltype.right(ltype.length()-7);
static QRegExp r("@[0-9]+"); static QRegExp r("@[0-9]+");
i=-1; i=-1;
if ((type.isEmpty() || (i=r.match(type,0,&l))==-1) || !enumUsed()) if ((ltype.isEmpty() || (i=r.match(ltype,0,&l))==-1) || !enumUsed())
{ {
if (!Config::genTagFile.isEmpty()) if (!Config::genTagFile.isEmpty())
...@@ -541,20 +541,20 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -541,20 +541,20 @@ void MemberDef::writeDeclaration(OutputList &ol,
// search for the last anonymous scope in the member type // search for the last anonymous scope in the member type
ClassDef *annoClassDef=0; ClassDef *annoClassDef=0;
//while (i!=-1 && cname.find(type.mid(i,l))!=-1) //while (i!=-1 && cname.find(ltype.mid(i,l))!=-1)
//{ //{
// i=r.match(type,i+l,&l); // i=r.match(ltype,i+l,&l);
//} //}
int il=i-1,ir=i+l; int il=i-1,ir=i+l;
if (i!=-1) // found anonymous scope in type if (i!=-1) // found anonymous scope in type
{ {
// extract anonymous scope // extract anonymous scope
while (il>=0 && (isId(type.at(il)) || type.at(il)==':' || type.at(il)=='@')) il--; while (il>=0 && (isId(ltype.at(il)) || ltype.at(il)==':' || ltype.at(il)=='@')) il--;
if (il>0) il++; if (il>0) il++;
while (ir<(int)type.length() && (isId(type.at(ir)) || type.at(ir)==':' || type.at(ir)=='@')) ir++; while (ir<(int)ltype.length() && (isId(ltype.at(ir)) || ltype.at(ir)==':' || ltype.at(ir)=='@')) ir++;
//QCString annName = type.mid(i,l); //QCString annName = ltype.mid(i,l);
QCString annName = type.mid(il,ir-il); QCString annName = ltype.mid(il,ir-il);
// if inside a class or namespace try to prepend the scope name // if inside a class or namespace try to prepend the scope name
if ((cd || nd) && annName.left(cname.length())!=cname) if ((cd || nd) && annName.left(cname.length())!=cname)
...@@ -612,7 +612,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -612,7 +612,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (i!=-1) // member has an anonymous type if (i!=-1) // member has an anonymous type
{ {
//printf("annoClassDef=%p annMemb=%p scopeName=`%s' anonymous=`%s'\n", //printf("annoClassDef=%p annMemb=%p scopeName=`%s' anonymous=`%s'\n",
// annoClassDef,annMemb,cname.data(),type.mid(i,l).data()); // annoClassDef,annMemb,cname.data(),ltype.mid(i,l).data());
if (annoClassDef) // type is an anonymous compound if (annoClassDef) // type is an anonymous compound
{ {
...@@ -624,7 +624,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -624,7 +624,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
ol.writeNonBreakableSpace(); ol.writeNonBreakableSpace();
} }
QCString varName=type.right(type.length()-ir).stripWhiteSpace(); QCString varName=ltype.right(ltype.length()-ir).stripWhiteSpace();
ol.docify("}"); ol.docify("}");
if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@')) if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@'))
{ {
...@@ -639,27 +639,27 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -639,27 +639,27 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
if (getAnonymousEnumType()) // type is an anonymous enum if (getAnonymousEnumType()) // type is an anonymous enum
{ {
linkifyText(ol,cname,name(),type.left(i),TRUE); linkifyText(ol,cname,name(),ltype.left(i),TRUE);
ol+=*getAnonymousEnumType()->enumDecl(); ol+=*getAnonymousEnumType()->enumDecl();
linkifyText(ol,cname,name(),type.right(type.length()-i-l),TRUE); linkifyText(ol,cname,name(),ltype.right(ltype.length()-i-l),TRUE);
} }
else else
{ {
type = type.left(i) + " { ... } " + type.right(type.length()-i-l); ltype = ltype.left(i) + " { ... } " + ltype.right(ltype.length()-i-l);
linkifyText(ol,cname,name(),type,TRUE); linkifyText(ol,cname,name(),ltype,TRUE);
} }
} }
} }
else else
{ {
linkifyText(ol,cname,name(),type,TRUE); linkifyText(ol,cname,name(),ltype,TRUE);
} }
bool htmlOn = ol.isEnabled(OutputGenerator::Html); bool htmlOn = ol.isEnabled(OutputGenerator::Html);
if (htmlOn && Config::htmlAlignMemberFlag && !type.isEmpty()) if (htmlOn && Config::htmlAlignMemberFlag && !ltype.isEmpty())
{ {
ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html);
} }
if (!type.isEmpty()) ol.docify(" "); if (!ltype.isEmpty()) ol.docify(" ");
if (htmlOn) if (htmlOn)
{ {
ol.enable(OutputGenerator::Html); ol.enable(OutputGenerator::Html);
...@@ -821,16 +821,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -821,16 +821,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// prepend scope if there is any. TODO: make this optional for C only docs // prepend scope if there is any. TODO: make this optional for C only docs
if (scopeName) doxyName.prepend((QCString)scopeName+"::"); if (scopeName) doxyName.prepend((QCString)scopeName+"::");
QCString def = definition(); QCString ldef = definition();
if (isEnumerate()) if (isEnumerate())
{ {
if (name().at(0)=='@') if (name().at(0)=='@')
{ {
def = "anonymous enum"; ldef = "anonymous enum";
} }
else else
{ {
def.prepend("enum "); ldef.prepend("enum ");
} }
} }
int i=0,l; int i=0,l;
...@@ -844,7 +844,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -844,7 +844,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
HtmlHelp *htmlHelp = 0; HtmlHelp *htmlHelp = 0;
if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance(); if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance();
if ((isVariable() || isTypedef()) && (i=r.match(def,0,&l))!=-1) if ((isVariable() || isTypedef()) && (i=r.match(ldef,0,&l))!=-1)
{ {
// find enum type and insert it in the definition // find enum type and insert it in the definition
MemberListIterator vmli(*ml); MemberListIterator vmli(*ml);
...@@ -852,7 +852,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -852,7 +852,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
bool found=FALSE; bool found=FALSE;
for ( ; (vmd=vmli.current()) && !found ; ++vmli) for ( ; (vmd=vmli.current()) && !found ; ++vmli)
{ {
if (vmd->isEnumerate() && def.mid(i,l)==vmd->name()) if (vmd->isEnumerate() && ldef.mid(i,l)==vmd->name())
{ {
ol.startDoxyAnchor(cfname,cname,anchor(),doxyName); ol.startDoxyAnchor(cfname,cname,anchor(),doxyName);
ol.startMemberDoc(cname,name(),anchor(),name()); ol.startMemberDoc(cname,name(),anchor(),name());
...@@ -860,9 +860,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -860,9 +860,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{ {
htmlHelp->addIndexItem(cname,name(),cfname,anchor()); htmlHelp->addIndexItem(cname,name(),cfname,anchor());
} }
linkifyText(ol,scopeName,name(),def.left(i)); linkifyText(ol,scopeName,name(),ldef.left(i));
ol+=*vmd->enumDecl(); ol+=*vmd->enumDecl();
linkifyText(ol,scopeName,name(),def.right(def.length()-i-l)); linkifyText(ol,scopeName,name(),ldef.right(ldef.length()-i-l));
found=TRUE; found=TRUE;
} }
...@@ -877,16 +877,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -877,16 +877,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
htmlHelp->addIndexItem(cname,name(),cfname,anchor()); htmlHelp->addIndexItem(cname,name(),cfname,anchor());
} }
// strip anonymous compound names from definition // strip anonymous compound names from definition
int si=def.find(' '),pi,ei=i+l; int si=ldef.find(' '),pi,ei=i+l;
if (si==-1) si=0; if (si==-1) si=0;
while ((pi=r.match(def,i+l,&l))!=-1) ei=i=pi+l; while ((pi=r.match(ldef,i+l,&l))!=-1) ei=i=pi+l;
// first si characters of def contain compound type name // first si characters of ldef contain compound type name
ol.docify(def.left(si)); ol.docify(ldef.left(si));
ol.docify(" { ... } "); ol.docify(" { ... } ");
// last ei characters of def contain pointer/reference specifiers // last ei characters of ldef contain pointer/reference specifiers
int ni=def.find("::",si); int ni=ldef.find("::",si);
if (ni>=ei) ei=ni+2; if (ni>=ei) ei=ni+2;
linkifyText(ol,scopeName,name(),def.right(def.length()-ei)); linkifyText(ol,scopeName,name(),ldef.right(ldef.length()-ei));
} }
} }
else else
...@@ -931,19 +931,19 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -931,19 +931,19 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
int ir=cName.findRev('>'); int ir=cName.findRev('>');
if (il!=-1 && ir!=-1 && ir>il) if (il!=-1 && ir!=-1 && ir>il)
{ {
def=addTemplateNames(def, ldef=addTemplateNames(ldef,
cName.left(il), /* class without template spec */ cName.left(il), /* class without template spec */
cName.mid(il,ir-il+1) /* templ spec */ cName.mid(il,ir-il+1) /* templ spec */
); );
} }
else if (scopeAl) else if (scopeAl)
{ {
def=addTemplateNames(def,cName,tempArgListToString(scopeAl)); ldef=addTemplateNames(ldef,cName,tempArgListToString(scopeAl));
} }
} }
} }
ol.startMemberDocName(); ol.startMemberDocName();
linkifyText(ol,scopeName,name(),def); linkifyText(ol,scopeName,name(),ldef);
writeDefArgumentList(ol,cd,scopeName,this); writeDefArgumentList(ol,cd,scopeName,this);
if (!init.isEmpty() && initLines==0 && maxInitLines>0) // add initializer if (!init.isEmpty() && initLines==0 && maxInitLines>0) // add initializer
{ {
...@@ -965,16 +965,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -965,16 +965,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
} }
} }
Specifier virt=virtualness(); Specifier lvirt=virtualness();
MemberDef *rmd=reimplements(); MemberDef *rmd=reimplements();
while (rmd && virt==Normal) while (rmd && lvirt==Normal)
{ {
virt = rmd->virtualness()==Normal ? Normal : Virtual; lvirt = rmd->virtualness()==Normal ? Normal : Virtual;
rmd = rmd->reimplements(); rmd = rmd->reimplements();
} }
if (isStatic() || protection()!=Public || if (isStatic() || protection()!=Public ||
virt!=Normal || isSignal() || isFriend() || lvirt!=Normal || isSignal() || isFriend() ||
isRelated() || isSlot() || isRelated() || isSlot() ||
getMemberSpecifiers()!=0 getMemberSpecifiers()!=0
) )
...@@ -995,8 +995,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -995,8 +995,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (isStatic()) sl.append("static"); if (isStatic()) sl.append("static");
if (protection()==Protected) sl.append("protected"); if (protection()==Protected) sl.append("protected");
else if (protection()==Private) sl.append("private"); else if (protection()==Private) sl.append("private");
if (virt==Virtual) sl.append("virtual"); if (lvirt==Virtual) sl.append("virtual");
else if (virt==Pure) sl.append("pure virtual"); else if (lvirt==Pure) sl.append("pure virtual");
if (isSignal()) sl.append("signal"); if (isSignal()) sl.append("signal");
if (isSlot()) sl.append("slot"); if (isSlot()) sl.append("slot");
} }
...@@ -1163,7 +1163,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1163,7 +1163,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (bmd && (bcd=bmd->memberClass())) if (bmd && (bcd=bmd->memberClass()))
{ {
#if 0 #if 0
if (virt!=Normal) // search for virtual member of the deepest base class if (lvirt!=Normal) // search for virtual member of the deepest base class
{ {
MemberDef *lastBmd=bmd; MemberDef *lastBmd=bmd;
while (lastBmd) while (lastBmd)
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "message.h" #include "message.h"
NamespaceDef::NamespaceDef(const char *df,int dl, NamespaceDef::NamespaceDef(const char *df,int dl,
const char *name,const char *ref) : const char *name,const char *lref) :
Definition(df,dl,name) Definition(df,dl,name)
{ {
fileName="namespace_"+nameToFile(name); fileName="namespace_"+nameToFile(name);
...@@ -37,7 +37,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl, ...@@ -37,7 +37,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,
//memList = new MemberList; //memList = new MemberList;
usingDirList = 0; usingDirList = 0;
usingDeclList = 0; usingDeclList = 0;
setReference(ref); setReference(lref);
memberGroupList = new MemberGroupList; memberGroupList = new MemberGroupList;
memberGroupList->setAutoDelete(TRUE); memberGroupList->setAutoDelete(TRUE);
memberGroupDict = new MemberGroupDict(1009); memberGroupDict = new MemberGroupDict(1009);
......
...@@ -90,8 +90,9 @@ void OutputGenerator::pushGeneratorState() ...@@ -90,8 +90,9 @@ void OutputGenerator::pushGeneratorState()
void OutputGenerator::popGeneratorState() void OutputGenerator::popGeneratorState()
{ {
bool *b = genStack->pop(); bool *lb = genStack->pop();
ASSERT(b!=0); ASSERT(lb!=0);
if (b==0) return; // for some robustness against superfluous \endhtmlonly commands. if (lb==0) return; // for some robustness against superfluous \endhtmlonly commands.
if (*b) enable(); else disable(); if (*lb) enable(); else disable();
} }
...@@ -796,7 +796,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type) ...@@ -796,7 +796,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
FileDef *fd; FileDef *fd;
if ((fd=findFileDef(imageNameDict,fileName,ambig))) if ((fd=findFileDef(imageNameDict,fileName,ambig)))
{ {
QFile inImage(fd->absFilePath().data()); QFile inImage(QString(fd->absFilePath().data()));
if (inImage.open(IO_ReadOnly)) if (inImage.open(IO_ReadOnly))
{ {
result = fileName; result = fileName;
...@@ -816,7 +816,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type) ...@@ -816,7 +816,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
break; break;
} }
QCString outputFile = outputDir+"/"+result; QCString outputFile = outputDir+"/"+result;
QFile outImage(outputFile.data()); QFile outImage(QString(outputFile.data()));
if (outImage.open(IO_WriteOnly)) // copy the image if (outImage.open(IO_WriteOnly)) // copy the image
{ {
char *buffer = new char[inImage.size()]; char *buffer = new char[inImage.size()];
...@@ -1300,19 +1300,28 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -1300,19 +1300,28 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
insideArgumentList=TRUE; insideArgumentList=TRUE;
} }
} }
<DocScan>{CMD}"par"{B}+ { <DocScan>(({B}*"\n"){2,}{B}*)?{CMD}"par"{B}* {
BEGIN(DocPar); BEGIN(DocPar);
} }
<DocPar>[^\n]*{BN} { <DocPar>[^\n]*{BN} {
endArgumentList(); QCString title=QCString(yytext).stripWhiteSpace();
if (inBlock()) endBlock(); bool b = inBlock();
inParBlock=TRUE; if (!title.isEmpty())
outDoc->startDescList(); {
outDoc->startBold(); endArgumentList();
outDoc->docify(((QCString)yytext).stripWhiteSpace()); if (b) endBlock();
outDoc->endBold(); inParBlock=TRUE;
outDoc->endDescTitle(); outDoc->startDescList();
outDoc->writeDescItem(); outDoc->startBold();
outDoc->docify(title);
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
else
{
outDoc->newParagraph();
}
BEGIN(DocScan); BEGIN(DocScan);
} }
<DocScan>{CMD}"warning"/{BN} { <DocScan>{CMD}"warning"/{BN} {
...@@ -2397,7 +2406,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -2397,7 +2406,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
BEGIN( NextSemi ); BEGIN( NextSemi );
} }
<FindMembers>{B}*"typename"{BN}+ { lineCount(); } <FindMembers>{B}*"typename"{BN}+ { lineCount(); }
<FindMembers>{B}*"namespace"{BN}+ { <FindMembers>{B}*"namespace"{BN}*/[^a-z_A-Z0-9] {
isTypedef=FALSE; isTypedef=FALSE;
current->section = Entry::NAMESPACE_SEC; current->section = Entry::NAMESPACE_SEC;
current->type = "namespace" ; current->type = "namespace" ;
...@@ -2417,6 +2426,16 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -2417,6 +2426,16 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
lineCount(); lineCount();
BEGIN( CompoundName ); BEGIN( CompoundName );
} }
<FindMembers>{B}*"library"{BN}+ {
isTypedef=FALSE;
current->section = Entry::NAMESPACE_SEC;
current->type = "library" ;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount();
BEGIN( CompoundName );
}
<FindMembers>{B}*"interface"{BN}+ { // M$/Corba IDL interface <FindMembers>{B}*"interface"{BN}+ { // M$/Corba IDL interface
isTypedef=FALSE; isTypedef=FALSE;
current->section = Entry::INTERFACE_SEC; current->section = Entry::INTERFACE_SEC;
...@@ -4852,8 +4871,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -4852,8 +4871,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
copyArgString = &current->args; copyArgString = &current->args;
BEGIN( ReadFuncArgType ) ; BEGIN( ReadFuncArgType ) ;
} }
<ClassDocFunc>"("({B}*"*")+ { <ClassDocFunc>"("({ID}"::")*({B}*"*")+ {
current->name+="(*"; current->name+=yytext;
BEGIN( ClassDocFuncPtr ); BEGIN( ClassDocFuncPtr );
} }
<ClassDocFuncPtr>{SCOPENAME} { <ClassDocFuncPtr>{SCOPENAME} {
......
...@@ -325,7 +325,7 @@ void SuffixTree::insertWord(const char *word,int index,bool inName) ...@@ -325,7 +325,7 @@ void SuffixTree::insertWord(const char *word,int index,bool inName)
{ {
QCString suffix=word; QCString suffix=word;
uint i; uint i;
for (i=2;i<suffix.length()-1;i++) for (i=2;i<suffix.length();i++)
{ {
//printf("Inserting suffix %s\n",suffix.right(i).data()); //printf("Inserting suffix %s\n",suffix.right(i).data());
nodes+=root->insert(suffix.right(i),index,inName?1:0,FALSE); nodes+=root->insert(suffix.right(i),index,inName?1:0,FALSE);
......
...@@ -899,6 +899,78 @@ class Translator ...@@ -899,6 +899,78 @@ class Translator
{ {
return "Since"; return "Since";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
virtual QCString trLegendTitle()
{
return "Graph Legend";
}
/*! page explaining how the dot graph's should be interpreted */
virtual QCString trLegendDocs()
{
return
"This page explains how to interpret the graphs that are generated "
"by doxygen.<p>\n"
"Consider the following example:\n"
"\\code\n"
"/*! Invisible class because of truncation */\n"
"class Invisible { };\n\n"
"/*! Truncated class, inheritance relation is hidden */\n"
"class Truncated : public Invisible { };\n\n"
"/* Class not documented with doxygen comments */\n"
"class Undocumented { };\n\n"
"/*! Class that is inherited using public inheritance */\n"
"class PublicBase : public Truncated { };\n\n"
"/*! Class that is inherited using protected inheritance */\n"
"class ProtectedBase { };\n\n"
"/*! Class that is inherited using private inheritance */\n"
"class PrivateBase { };\n\n"
"/*! Class that is used by the Inherited class */\n"
"class Used { };\n\n"
"/*! Super class that inherits a number of other classes */\n"
"class Inherited : public PublicBase,\n"
" protected ProtectedBase,\n"
" private PrivateBase,\n"
" public Undocumented\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
"is set to 200 this will result in the following graph:"
"<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p>\n"
"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
"<li>A filled black box represents the struct or class for which the "
"graph is generated.\n"
"<li>A box with a black border denotes a documented struct or class.\n"
"<li>A box with a grey border denotes an undocumented struct or class.\n"
"<li>A box with a red border denotes a documented struct or class for\n"
"which not all inheritance/containment relations are shown. A graph is "
"truncated if it does not fit within the specified boundaries."
"</ul>\n"
"The arrows have the following meaning:\n"
"<ul>\n"
"<li>A dark blue arrow is used to visualize a public inheritance "
"relation between two classes.\n"
"<li>A dark green arrow is used for protected inheritance.\n"
"<li>A dark red arrow is used for private inheritance.\n"
"<li>A purple dashed arrow is used if a class is contained or used "
"by another class. The arrow is labeled with the variable(s) "
"through which the pointed class or struct is accessible. \n"
"</ul>\n";
}
/*! text for the link to the legend page */
virtual QCString trLegend()
{
return "legend";
}
}; };
#endif #endif
...@@ -516,7 +516,8 @@ class TranslatorCzech : public Translator ...@@ -516,7 +516,8 @@ class TranslatorCzech : public Translator
/*! used as the title of the HTML page of a class/struct/union */ /*! used as the title of the HTML page of a class/struct/union */
virtual QCString trCompoundReference(const char *clName, virtual QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType) ClassDef::CompoundType compType,
bool /*isTemplate*/)
{ {
QCString result=(QCString)clName+" "; QCString result=(QCString)clName+" ";
switch(compType) switch(compType)
......
...@@ -583,11 +583,48 @@ class TranslatorCroatian : public Translator ...@@ -583,11 +583,48 @@ class TranslatorCroatian : public Translator
{ {
return "Static private atributi"; return "Static private atributi";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a todo item */
virtual QCString trTodo()
{
return "Za uraditi";
}
/*! Used as the header of the todo list */
virtual QCString trTodoList()
{
return "Ostalo za uraditi";
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.1.1 // new since 1.1.4
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trReferencedBy()
{
return "Referencirano od";
}
virtual QCString trRemarks()
{
return "Napomene";
}
virtual QCString trAttention()
{
return "Panja";
}
virtual QCString trInclByDepGraph()
{
return "Ovaj graf pokazuje koje datoteke izravno "
"ili neizravno ukljuuju ovu datoteku:";
}
virtual QCString trSince()
{
return "Od";
}
}; };
#endif #endif
This diff is collapsed.
...@@ -559,35 +559,35 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext) ...@@ -559,35 +559,35 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
//bool manEnabled = ol.isEnabled(OutputGenerator::Man); //bool manEnabled = ol.isEnabled(OutputGenerator::Man);
//bool texEnabled = ol.isEnabled(OutputGenerator::Latex); //bool texEnabled = ol.isEnabled(OutputGenerator::Latex);
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
QCString extLink,absPath; QCString extLink;
if (ext) { extLink="_doc"; absPath=Config::docURL+"/"; } if (ext) { extLink="_doc"; }
//if (manEnabled) ol.disable(OutputGenerator::Man); //if (manEnabled) ol.disable(OutputGenerator::Man);
//if (texEnabled) ol.disable(OutputGenerator::Latex); //if (texEnabled) ol.disable(OutputGenerator::Latex);
if (compact) ol.startCenter(); else ol.startItemList(); if (compact) ol.startCenter(); else ol.startItemList();
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"index.html"); ol.startQuickIndexItem(extLink,"index.html");
parseText(ol,theTranslator->trMainPage()); parseText(ol,theTranslator->trMainPage());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
if (documentedGroups>0) if (documentedGroups>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"modules.html"); ol.startQuickIndexItem(extLink,"modules.html");
parseText(ol,theTranslator->trModules()); parseText(ol,theTranslator->trModules());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedNamespaces>0) if (documentedNamespaces>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"namespaces.html"); ol.startQuickIndexItem(extLink,"namespaces.html");
parseText(ol,theTranslator->trNamespaceList()); parseText(ol,theTranslator->trNamespaceList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (hierarchyClasses>0) if (hierarchyClasses>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"hierarchy.html"); ol.startQuickIndexItem(extLink,"hierarchy.html");
parseText(ol,theTranslator->trClassHierarchy()); parseText(ol,theTranslator->trClassHierarchy());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
...@@ -596,75 +596,75 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext) ...@@ -596,75 +596,75 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
if (Config::alphaIndexFlag) if (Config::alphaIndexFlag)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"classes.html"); ol.startQuickIndexItem(extLink,"classes.html");
parseText(ol,theTranslator->trAlphabeticalList()); parseText(ol,theTranslator->trAlphabeticalList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"annotated.html"); ol.startQuickIndexItem(extLink,"annotated.html");
parseText(ol,theTranslator->trCompoundList()); parseText(ol,theTranslator->trCompoundList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedHtmlFiles>0) if (documentedHtmlFiles>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"files.html"); ol.startQuickIndexItem(extLink,"files.html");
parseText(ol,theTranslator->trFileList()); parseText(ol,theTranslator->trFileList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
//if (documentedIncludeFiles>0 && Config::verbatimHeaderFlag) //if (documentedIncludeFiles>0 && Config::verbatimHeaderFlag)
//{ //{
// if (!compact) ol.writeListItem(); // if (!compact) ol.writeListItem();
// ol.startQuickIndexItem(extLink,absPath+"headers.html"); // ol.startQuickIndexItem(extLink,"headers.html");
// parseText(ol,theTranslator->trHeaderFiles()); // parseText(ol,theTranslator->trHeaderFiles());
// ol.endQuickIndexItem(); // ol.endQuickIndexItem();
//} //}
//if (Config::sourceBrowseFlag) //if (Config::sourceBrowseFlag)
//{ //{
// if (!compact) ol.writeListItem(); // if (!compact) ol.writeListItem();
// ol.startQuickIndexItem(extLink,absPath+"sources.html"); // ol.startQuickIndexItem(extLink,"sources.html");
// parseText(ol,theTranslator->trSources()); // parseText(ol,theTranslator->trSources());
// ol.endQuickIndexItem(); // ol.endQuickIndexItem();
//} //}
if (documentedNamespaceMembers>0) if (documentedNamespaceMembers>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"namespacemembers.html"); ol.startQuickIndexItem(extLink,"namespacemembers.html");
parseText(ol,theTranslator->trNamespaceMembers()); parseText(ol,theTranslator->trNamespaceMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedMembers>0) if (documentedMembers>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"functions.html"); ol.startQuickIndexItem(extLink,"functions.html");
parseText(ol,theTranslator->trCompoundMembers()); parseText(ol,theTranslator->trCompoundMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedFunctions>0) if (documentedFunctions>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"globals.html"); ol.startQuickIndexItem(extLink,"globals.html");
parseText(ol,theTranslator->trFileMembers()); parseText(ol,theTranslator->trFileMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (pageList.count()>0) if (pageList.count()>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"pages.html"); ol.startQuickIndexItem(extLink,"pages.html");
parseText(ol,theTranslator->trRelatedPages()); parseText(ol,theTranslator->trRelatedPages());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (exampleList.count()>0) if (exampleList.count()>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"examples.html"); ol.startQuickIndexItem(extLink,"examples.html");
parseText(ol,theTranslator->trExamples()); parseText(ol,theTranslator->trExamples());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (Config::searchEngineFlag) if (Config::searchEngineFlag)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem("_cgi",Config::cgiURL+"/"+Config::cgiName); ol.startQuickIndexItem("_cgi","");
parseText(ol,theTranslator->trSearch()); parseText(ol,theTranslator->trSearch());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
......
#!/usr/bin/perl #!/usr/bin/perl
############################################################################ ############################################################################
# $Id$ #
# #
# Generates a tmake project file. # Generates a tmake project file.
# #
......
#!/usr/bin/perl #!/usr/bin/perl
############################################################################ ############################################################################
# $Id$ #
# #
# Creates a Makefile from a template and a project file. # Creates a Makefile from a template and a project file.
# #
......
/**************************************************************************** /****************************************************************************
** $Id$ **
** **
** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. ** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved.
** **
......
/**************************************************************************** /****************************************************************************
** $Id$ **
** **
** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. ** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved.
** **
......
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