Commit c9ed38ab authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.4.5-20051010

parent c1cf420f
DOXYGEN Version 1.4.5
DOXYGEN Version 1.4.5-20051010
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (04 October 2005)
Dimitri van Heesch (10 October 2005)
DOXYGEN Version 1.4.5
DOXYGEN Version 1.4.5_20051010
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) (04 October 2005)
Dimitri van Heesch (dimitri@stack.nl) (10 October 2005)
1.4.5
1.4.5-20051010
......@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile).
Currently (version 1.4.4), 31 languages
Currently (version 1.4.5), 31 languages
are supported (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
......@@ -156,7 +156,7 @@ when the translator was updated.
<td>Japanese</td>
<td>Ryunosuke Satoh<br>Kenji Nagamatsu<br>Iwasa Kazmi</td>
<td>sun594 at hotmail dot com<br>naga at joyful dot club dot ne dot jp<br>iwasa at cosmo-system dot jp</td>
<td>1.3.9</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>JapaneseEn</td>
......@@ -228,7 +228,7 @@ when the translator was updated.
<td>Slovene</td>
<td>Matja&#x017e; Ostrover&#x0161;nik</td>
<td>matjaz.ostroversnik at ztm dot si</td>
<td>1.2.16</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Spanish</td>
......@@ -302,7 +302,7 @@ when the translator was updated.
Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & up-to-date \\
~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\
\hline
Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & 1.3.9 \\
Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & up-to-date \\
~ & Kenji Nagamatsu & {\tt\tiny naga@joyful.club.ne.jp} & ~ \\
~ & Iwasa Kazmi & {\tt\tiny iwasa@cosmo-system.jp} & ~ \\
\hline
......@@ -332,7 +332,7 @@ when the translator was updated.
\hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\
\hline
Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ztm.si} & 1.2.16 \\
Slovene & Matja\v{z} Ostrover\v{s}nik & {\tt\tiny matjaz.ostroversnik@ztm.si} & up-to-date \\
\hline
Spanish & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & 1.3.8 \\
\hline
......
......@@ -170,9 +170,11 @@ The generated \f$\mbox{\LaTeX}\f$ documentation must first be compiled by
a \f$\mbox{\LaTeX}\f$ compiler (I use a recent teTeX distribution).
To simplify the process of compiling the generated
documentation, \c doxygen writes a \c Makefile into the \c latex directory.
By typing \c make in the \c latex directory the dvi file \c refman.dvi
will be generated (provided that you have a make tool called
<code>make</code> of course). This file can then be viewed using \c xdvi or
The contents and targets in the \c Makefile depend on the setting of
\ref cfg_use_pdflatex "USE_PDFLATEX". If it is disabled (set to \c NO), then
typing \c make in the \c latex directory a dvi file called \c refman.dvi
will be generated. This file can then be viewed using \c xdvi or
converted into a PostScript file \c refman.ps by
typing <code>make ps</code> (this requires <code>dvips</code>).
......@@ -183,9 +185,12 @@ ghostscript to convert PostScript into something your printer understands.
Conversion to PDF is also possible if you have installed the ghostscript
interpreter; just type <code>make pdf</code> (or <code>make pdf_2on1</code>).
To get the best results for PDF output you should set
the \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS"
and \ref cfg_use_pdflatex "USE_PDFLATEX" tags to \c YES.
and \ref cfg_use_pdflatex "USE_PDFLATEX" tags to \c YES.
In this case the \c Makefile will only contain a target to build
\c refman.pdf directly.
\subsection rtf_out RTF output
\addindex RTF
......
(1.4.4)
(1.4.5)
Doxygen supports the following 31 languages (sorted alphabetically):
......@@ -8,7 +8,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
Of them, 18 translators are up-to-date, 13 translators are based on
Of them, 20 translators are up-to-date, 11 translators are based on
some adapter class, and 2 are English based.
----------------------------------------------------------------------
......@@ -30,10 +30,12 @@ still may be some details listed even for them:
TranslatorHungarian
TranslatorIndonesian -- Remove the obsolete methods (never used).
TranslatorItalian
TranslatorJapanese -- Change the base class to Translator.
TranslatorKorean
TranslatorLithuanian
TranslatorPolish -- Remove the obsolete methods (never used).
TranslatorRussian
TranslatorSlovene
TranslatorSwedish
----------------------------------------------------------------------
......@@ -47,12 +49,10 @@ must be implemented to become up-to-date:
TranslatorRomanian 1.4.1 1 method to implement
TranslatorChinese 1.4.1 1 method to implement
TranslatorNorwegian 1.3.9 7 methods to implement
TranslatorJapanese 1.3.9 7 methods to implement
TranslatorDanish 1.3.9 7 methods to implement
TranslatorSpanish 1.3.8 8 methods to implement
TranslatorPortuguese 1.3.3 12 methods to implement
TranslatorSlovak 1.2.18 21 methods to implement
TranslatorSlovene 1.2.16 23 methods to implement
TranslatorGreek 1.2.11 26 methods to implement
TranslatorFinnish obsolete 95 methods to implement
......@@ -387,20 +387,10 @@ TranslatorIndonesian (Translator)
virtual QCString trNoDescriptionAvailable()
TranslatorJapanese (TranslatorAdapter_1_3_9) 7 methods to implement
TranslatorJapanese (TranslatorAdapter_1_3_9)
------------------
Implements 185 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
virtual QCString trDirDescription()
virtual QCString trDirReference(const char * dirName)
virtual QCString trDir(bool first_capital, bool singular)
Implements 192 of the required methods.
Obsolete methods (should be removed, never used):
......@@ -615,51 +605,6 @@ TranslatorSlovak (TranslatorAdapter_1_2_18) 21 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorSlovene (TranslatorAdapter_1_2_16) 23 methods to implement
-----------------
Implements 169 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation()
virtual QCString trDirIndex()
virtual QCString trPackageMembers()
virtual QCString trStaticPackageMembers()
virtual QCString trDirDocumentation()
virtual QCString trSearchResultsTitle()
virtual QCString trDirectories()
virtual QCString trDeprecatedList()
virtual QCString trDirDescription()
virtual QCString trStaticPackageAttribs()
virtual QCString trCallGraph()
virtual QCString trPackageTypes()
virtual QCString trSearchResults(int numDocuments)
virtual QCString trPackageAttribs()
virtual QCString trSearchMatches()
virtual QCString trEvents()
virtual QCString trSourceFile(QCString & filename)
virtual QCString trDirReference(const char * dirName)
virtual QCString trDir(bool first_capital, bool singular)
virtual QCString trSearchForIndex()
virtual QCString trAll()
virtual QCString trRTFTableOfContents()
Obsolete methods (should be removed, never used):
QCString trHeaderFilesDescription()
virtual QCString trField(bool first_capital, bool singular)
virtual QCString trPackageDocumentation()
QCString trSources()
QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
QCString trHeaderFiles()
QCString trBugsAndLimitations()
QCString trEnumerationValueDocumentation()
QCString trNoDescriptionAvailable()
TranslatorSpanish (TranslatorAdapter_1_3_8) 8 methods to implement
-----------------
......
......@@ -7,7 +7,7 @@
<type>void</type>
<name>example</name>
<anchorfile>class_test.html</anchorfile>
<anchor>example_28_29</anchor>
<anchor>f7c9e353df7549b5697c934fb0331252</anchor>
<arglist>()</arglist>
</member>
</compound>
......
......@@ -320,7 +320,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng);
BEGIN(CComment);
}
<CComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"|"f$"|"f["|"f{")/[^a-z_A-Z0-9] { /* start of a verbatim block */
<CComment,ReadLine>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"|"f$"|"f["|"f{")/[^a-z_A-Z0-9] { /* start of a verbatim block */
copyToOutput(yytext,yyleng);
if (yytext[2]=='[')
{
......
......@@ -293,7 +293,7 @@ static void groupAddDocs(Entry *e,const char *fileName);
*/
static ParserInterface *langParser; // the language parser that is calling us
static const char * inputString; // input string
static QCString inputString; // input string
static int inputPosition; // read pointer
static QCString yyFileName; // file name that is read from
static int yyLineNr; // line number in the input
......@@ -2215,8 +2215,9 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
guards.clear();
langParser = parser;
current = curEntry;
if (comment.isEmpty()) return FALSE; // avoid empty strings
inputString = comment;
if (inputString==0) return FALSE; // avoid empty strings
inputString.append(" ");
inputPosition = position;
yyLineNr = lineNr;
yyFileName = fileName;
......@@ -2229,6 +2230,12 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle;
Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n"
"input=[%s]\n",fileName.data(),lineNr,comment.data()
);
commentScanYYrestart( commentScanYYin );
BEGIN( Comment );
commentScanYYlex();
......@@ -2253,9 +2260,8 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
openGroup(current,yyFileName,yyLineNr);
}
Debug::print(Debug::CommentScan,0,"CommentScanner\n%s:%d\n"
"input=[%s]\nbrief=[%s]\ndocs=[%s]\n------------\n",
fileName.data(),lineNr,comment.data(),
Debug::print(Debug::CommentScan,0,
"brief=[%s]\ndocs=[%s]\n===========\n",
current->brief.data(),current->doc.data()
);
......
#include <md5.h>
#include "dirdef.h"
#include "filename.h"
#include "doxygen.h"
......@@ -66,32 +68,42 @@ void DirDef::addFile(FileDef *fd)
fd->setDirDef(this);
}
static QCString escapeDirName(const QCString &anchor)
static QCString encodeDirName(const QCString &anchor)
{
QCString result;
int l = anchor.length(),i;
for (i=0;i<l;i++)
{
char c = anchor.at(i);
if ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9'))
{
result+=c;
}
else
{
static char hexStr[]="0123456789ABCDEF";
char escChar[]={ '_', 0, 0, 0 };
escChar[1]=hexStr[c>>4];
escChar[2]=hexStr[c&0xf];
result+=escChar;
}
}
return result;
// convert to md5 hash
uchar md5_sig[16];
QCString sigStr(33);
MD5Buffer((const unsigned char *)anchor.data(),anchor.length(),md5_sig);
MD5SigToString(md5_sig,sigStr.data(),33);
return sigStr;
// old algorithm
// int l = anchor.length(),i;
// for (i=0;i<l;i++)
// {
// char c = anchor.at(i);
// if ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9'))
// {
// result+=c;
// }
// else
// {
// static char hexStr[]="0123456789ABCDEF";
// char escChar[]={ '_', 0, 0, 0 };
// escChar[1]=hexStr[c>>4];
// escChar[2]=hexStr[c&0xf];
// result+=escChar;
// }
// }
// return result;
}
QCString DirDef::getOutputFileBase() const
{
return "dir_"+escapeDirName(name());
return "dir_"+encodeDirName(name());
//return QCString().sprintf("dir_%06d",m_dirCount);
}
......
......@@ -1958,7 +1958,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
if (bfd)
{
in = bfd->absFilePath();
doc = bfd->isLinkable() && bfd->isHidden();
doc = bfd->isLinkable() && !bfd->isHidden();
src = bfd->generateSourceFile();
}
if (doc || src || !Config_getBool("HIDE_UNDOC_RELATIONS"))
......@@ -1967,7 +1967,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
if (bfd) url=bfd->getOutputFileBase().copy();
if (!doc && src)
{
url+="-source";
url=bfd->getSourceFileBase();
}
DotNode *bn = m_usedNodes->find(in);
if (bn) // file is already a node in the graph
......
......@@ -3511,6 +3511,85 @@ static bool isRecursiveBaseClass(const QCString &scope,const QCString &name)
return result;
}
/*! Searches for the end of a template in prototype \a s starting from
* character position \a startPos. If the end was found the position
* of the closing \> is returned, otherwise -1 is returned.
*
* Handles exotic cases such as
* \code
* Class<(id<0)>
* Class<bits<<2>
* Class<"<">
* Class<'<'>
* Class<(")<")>
* \endcode
*/
static int findEndOfTemplate(const QCString &s,int startPos)
{
// locate end of template
int e=startPos;
int brCount=1;
int roundCount=0;
int len = s.length();
bool insideString=FALSE;
bool insideChar=FALSE;
char pc = 0;
while (e<len && brCount!=0)
{
char c=s.at(e);
switch(c)
{
case '<':
if (!insideString && !insideChar)
{
if (e<len-1 && s.at(e+1)=='<')
e++;
else if (roundCount==0)
brCount++;
}
break;
case '>':
if (!insideString && !insideChar)
{
if (e<len-1 && s.at(e+1)=='>')
e++;
else if (roundCount==0)
brCount--;
}
break;
case '(':
if (!insideString && !insideChar)
roundCount++;
break;
case ')':
if (!insideString && !insideChar)
roundCount--;
break;
case '"':
if (!insideChar)
{
if (insideString && pc!='\\')
insideString=FALSE;
else
insideString=TRUE;
}
break;
case '\'':
if (!insideString)
{
if (insideChar && pc!='\\')
insideChar=FALSE;
else
insideChar=TRUE;
}
break;
}
pc = c;
e++;
}
return brCount==0 ? e : -1;
}
static bool findClassRelation(
Entry *root,
Definition *context,
......@@ -3603,23 +3682,8 @@ static bool findClassRelation(
{
// TODO: here we should try to find the correct template specialization
// but for now, we only look for the unspecializated base class.
// locate end of template
int e=i+1;
int brCount=1;
int typeLen = baseClassName.length();
while (e<typeLen && brCount!=0)
{
if (baseClassName.at(e)=='<')
{
if (e<typeLen-1 && baseClassName.at(e+1)=='<') e++; else brCount++;
}
if (baseClassName.at(e)=='>')
{
if (e<typeLen-1 && baseClassName.at(e+1)=='>') e++; else brCount--;
}
e++;
}
if (brCount==0) // end of template was found at e
int e=findEndOfTemplate(baseClassName,i+1);
if (e!=-1) // end of template was found at e
{
templSpec=baseClassName.mid(i,e-i);
baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e);
......
......@@ -569,7 +569,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title,
}
t << "\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "</head><body>\n";
}
......
......@@ -655,6 +655,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
%x CopyArgSharp
%x CopyArgComment
%x CopyArgCommentLine
%x CopyArgVerbatim
/** Prototype scanner states */
......@@ -2855,10 +2856,35 @@ IDLATTR ("["[^\]]*"]"){BN}*
unput(lastCopyArgChar);
BEGIN( lastCommentInArgContext );
}
<CopyArgCommentLine>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!)
docBlockName=&yytext[1];
fullArgString+=yytext;
BEGIN(CopyArgVerbatim);
}
<CopyArgCommentLine>{CMD}("f$"|"f["|"f{") {
docBlockName=&yytext[1];
if (docBlockName.at(1)=='{')
{
docBlockName.at(1)='}';
}
fullArgString+=yytext;
BEGIN(CopyArgVerbatim);
}
<CopyArgVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode"|"f$"|"f]"|"f}")/[^a-z_A-Z0-9] { // end of verbatim block
fullArgString+=yytext;
if (yytext[1]=='f') // end of formula
{
BEGIN(CopyArgCommentLine);
}
if (&yytext[4]==docBlockName)
{
BEGIN(CopyArgCommentLine);
}
}
<CopyArgCommentLine>[^\\\@\n]+ { fullArgString+=yytext; }
<CopyArgCommentLine>. { fullArgString+=*yytext; }
<CopyArgComment>\n { fullArgString+=*yytext; yyLineNr++; }
<CopyArgComment>. { fullArgString+=*yytext; }
<CopyArgComment,CopyArgVerbatim>\n { fullArgString+=*yytext; yyLineNr++; }
<CopyArgComment,CopyArgVerbatim>. { fullArgString+=*yytext; }
<CopyArgComment>{CMD}("brief"|"short"){B}+ {
warn(yyFileName,yyLineNr,
"Warning: Ignoring %cbrief command inside argument documentation",*yytext
......
......@@ -1112,14 +1112,14 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
t << "\">";
if (!bcd->templSpecifiers.isEmpty())
{
convertToXML(
insertTemplateSpecifierInScope(
t << convertToXML(
insertTemplateSpecifierInScope(
bcd->classDef->displayName(),bcd->templSpecifiers)
);
}
else
{
convertToXML(bcd->classDef->displayName());
t << convertToXML(bcd->classDef->displayName());
}
t << "</basecompoundref>" << endl;
}
......
......@@ -36,13 +36,12 @@ TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
TMAKE_LINK = c++
TMAKE_LINK_SHLIB = c++
TMAKE_LFLAGS =
TMAKE_LFLAGS = -Wl,-search_paths_first
TMAKE_LFLAGS_RELEASE =
TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -shared
# soname does not work on fbsd 2.x
#TMAKE_LFLAGS_SONAME = -Wl,-soname
TMAKE_LFLAGS_SONAME = -dynamiclib -install_name
TMAKE_LIBS =
TMAKE_LIBS_X11 =
......
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