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 Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (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. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, 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 ...@@ -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 than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). 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): are supported (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
...@@ -156,7 +156,7 @@ when the translator was updated. ...@@ -156,7 +156,7 @@ when the translator was updated.
<td>Japanese</td> <td>Japanese</td>
<td>Ryunosuke Satoh<br>Kenji Nagamatsu<br>Iwasa Kazmi</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>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>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>JapaneseEn</td> <td>JapaneseEn</td>
...@@ -228,7 +228,7 @@ when the translator was updated. ...@@ -228,7 +228,7 @@ when the translator was updated.
<td>Slovene</td> <td>Slovene</td>
<td>Matja&#x017e; Ostrover&#x0161;nik</td> <td>Matja&#x017e; Ostrover&#x0161;nik</td>
<td>matjaz.ostroversnik at ztm dot si</td> <td>matjaz.ostroversnik at ztm dot si</td>
<td>1.2.16</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Spanish</td> <td>Spanish</td>
...@@ -302,7 +302,7 @@ when the translator was updated. ...@@ -302,7 +302,7 @@ when the translator was updated.
Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & up-to-date \\ Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & up-to-date \\
~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\ ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\
\hline \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} & ~ \\ ~ & Kenji Nagamatsu & {\tt\tiny naga@joyful.club.ne.jp} & ~ \\
~ & Iwasa Kazmi & {\tt\tiny iwasa@cosmo-system.jp} & ~ \\ ~ & Iwasa Kazmi & {\tt\tiny iwasa@cosmo-system.jp} & ~ \\
\hline \hline
...@@ -332,7 +332,7 @@ when the translator was updated. ...@@ -332,7 +332,7 @@ when the translator was updated.
\hline \hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\ Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\
\hline \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 \hline
Spanish & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & 1.3.8 \\ Spanish & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & 1.3.8 \\
\hline \hline
......
...@@ -170,9 +170,11 @@ The generated \f$\mbox{\LaTeX}\f$ documentation must first be compiled by ...@@ -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). a \f$\mbox{\LaTeX}\f$ compiler (I use a recent teTeX distribution).
To simplify the process of compiling the generated To simplify the process of compiling the generated
documentation, \c doxygen writes a \c Makefile into the \c latex directory. 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 The contents and targets in the \c Makefile depend on the setting of
<code>make</code> of course). This file can then be viewed using \c xdvi or \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 converted into a PostScript file \c refman.ps by
typing <code>make ps</code> (this requires <code>dvips</code>). typing <code>make ps</code> (this requires <code>dvips</code>).
...@@ -183,9 +185,12 @@ ghostscript to convert PostScript into something your printer understands. ...@@ -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 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>). interpreter; just type <code>make pdf</code> (or <code>make pdf_2on1</code>).
To get the best results for PDF output you should set To get the best results for PDF output you should set
the \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS" 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 \subsection rtf_out RTF output
\addindex RTF \addindex RTF
......
(1.4.4) (1.4.5)
Doxygen supports the following 31 languages (sorted alphabetically): Doxygen supports the following 31 languages (sorted alphabetically):
...@@ -8,7 +8,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean ...@@ -8,7 +8,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, (+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. 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. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -30,10 +30,12 @@ still may be some details listed even for them: ...@@ -30,10 +30,12 @@ still may be some details listed even for them:
TranslatorHungarian TranslatorHungarian
TranslatorIndonesian -- Remove the obsolete methods (never used). TranslatorIndonesian -- Remove the obsolete methods (never used).
TranslatorItalian TranslatorItalian
TranslatorJapanese -- Change the base class to Translator.
TranslatorKorean TranslatorKorean
TranslatorLithuanian TranslatorLithuanian
TranslatorPolish -- Remove the obsolete methods (never used). TranslatorPolish -- Remove the obsolete methods (never used).
TranslatorRussian TranslatorRussian
TranslatorSlovene
TranslatorSwedish TranslatorSwedish
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -47,12 +49,10 @@ must be implemented to become up-to-date: ...@@ -47,12 +49,10 @@ must be implemented to become up-to-date:
TranslatorRomanian 1.4.1 1 method to implement TranslatorRomanian 1.4.1 1 method to implement
TranslatorChinese 1.4.1 1 method to implement TranslatorChinese 1.4.1 1 method to implement
TranslatorNorwegian 1.3.9 7 methods 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 TranslatorDanish 1.3.9 7 methods to implement
TranslatorSpanish 1.3.8 8 methods to implement TranslatorSpanish 1.3.8 8 methods to implement
TranslatorPortuguese 1.3.3 12 methods to implement TranslatorPortuguese 1.3.3 12 methods to implement
TranslatorSlovak 1.2.18 21 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 TranslatorGreek 1.2.11 26 methods to implement
TranslatorFinnish obsolete 95 methods to implement TranslatorFinnish obsolete 95 methods to implement
...@@ -387,20 +387,10 @@ TranslatorIndonesian (Translator) ...@@ -387,20 +387,10 @@ TranslatorIndonesian (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorJapanese (TranslatorAdapter_1_3_9) 7 methods to implement TranslatorJapanese (TranslatorAdapter_1_3_9)
------------------ ------------------
Implements 185 of the required methods. Implements 192 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)
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
...@@ -615,51 +605,6 @@ TranslatorSlovak (TranslatorAdapter_1_2_18) 21 methods to implement ...@@ -615,51 +605,6 @@ TranslatorSlovak (TranslatorAdapter_1_2_18) 21 methods to implement
virtual QCString trNoDescriptionAvailable() 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 TranslatorSpanish (TranslatorAdapter_1_3_8) 8 methods to implement
----------------- -----------------
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<type>void</type> <type>void</type>
<name>example</name> <name>example</name>
<anchorfile>class_test.html</anchorfile> <anchorfile>class_test.html</anchorfile>
<anchor>example_28_29</anchor> <anchor>f7c9e353df7549b5697c934fb0331252</anchor>
<arglist>()</arglist> <arglist>()</arglist>
</member> </member>
</compound> </compound>
......
...@@ -320,7 +320,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -320,7 +320,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
BEGIN(CComment); 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); copyToOutput(yytext,yyleng);
if (yytext[2]=='[') if (yytext[2]=='[')
{ {
......
...@@ -293,7 +293,7 @@ static void groupAddDocs(Entry *e,const char *fileName); ...@@ -293,7 +293,7 @@ static void groupAddDocs(Entry *e,const char *fileName);
*/ */
static ParserInterface *langParser; // the language parser that is calling us 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 int inputPosition; // read pointer
static QCString yyFileName; // file name that is read from static QCString yyFileName; // file name that is read from
static int yyLineNr; // line number in the input static int yyLineNr; // line number in the input
...@@ -2215,8 +2215,9 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2215,8 +2215,9 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
guards.clear(); guards.clear();
langParser = parser; langParser = parser;
current = curEntry; current = curEntry;
if (comment.isEmpty()) return FALSE; // avoid empty strings
inputString = comment; inputString = comment;
if (inputString==0) return FALSE; // avoid empty strings inputString.append(" ");
inputPosition = position; inputPosition = position;
yyLineNr = lineNr; yyLineNr = lineNr;
yyFileName = fileName; yyFileName = fileName;
...@@ -2229,6 +2230,12 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2229,6 +2230,12 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
outputXRef.resize(0); outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc ); setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle; briefEndsAtDot = isJavaDocStyle;
Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n"
"input=[%s]\n",fileName.data(),lineNr,comment.data()
);
commentScanYYrestart( commentScanYYin ); commentScanYYrestart( commentScanYYin );
BEGIN( Comment ); BEGIN( Comment );
commentScanYYlex(); commentScanYYlex();
...@@ -2253,9 +2260,8 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2253,9 +2260,8 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
openGroup(current,yyFileName,yyLineNr); openGroup(current,yyFileName,yyLineNr);
} }
Debug::print(Debug::CommentScan,0,"CommentScanner\n%s:%d\n" Debug::print(Debug::CommentScan,0,
"input=[%s]\nbrief=[%s]\ndocs=[%s]\n------------\n", "brief=[%s]\ndocs=[%s]\n===========\n",
fileName.data(),lineNr,comment.data(),
current->brief.data(),current->doc.data() current->brief.data(),current->doc.data()
); );
......
#include <md5.h>
#include "dirdef.h" #include "dirdef.h"
#include "filename.h" #include "filename.h"
#include "doxygen.h" #include "doxygen.h"
...@@ -66,32 +68,42 @@ void DirDef::addFile(FileDef *fd) ...@@ -66,32 +68,42 @@ void DirDef::addFile(FileDef *fd)
fd->setDirDef(this); fd->setDirDef(this);
} }
static QCString escapeDirName(const QCString &anchor) static QCString encodeDirName(const QCString &anchor)
{ {
QCString result; QCString result;
int l = anchor.length(),i;
for (i=0;i<l;i++) // convert to md5 hash
{ uchar md5_sig[16];
char c = anchor.at(i); QCString sigStr(33);
if ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9')) MD5Buffer((const unsigned char *)anchor.data(),anchor.length(),md5_sig);
{ MD5SigToString(md5_sig,sigStr.data(),33);
result+=c; return sigStr;
}
else // old algorithm
{
static char hexStr[]="0123456789ABCDEF"; // int l = anchor.length(),i;
char escChar[]={ '_', 0, 0, 0 }; // for (i=0;i<l;i++)
escChar[1]=hexStr[c>>4]; // {
escChar[2]=hexStr[c&0xf]; // char c = anchor.at(i);
result+=escChar; // if ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9'))
} // {
} // result+=c;
return result; // }
// 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 QCString DirDef::getOutputFileBase() const
{ {
return "dir_"+escapeDirName(name()); return "dir_"+encodeDirName(name());
//return QCString().sprintf("dir_%06d",m_dirCount); //return QCString().sprintf("dir_%06d",m_dirCount);
} }
......
...@@ -1958,7 +1958,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance) ...@@ -1958,7 +1958,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
if (bfd) if (bfd)
{ {
in = bfd->absFilePath(); in = bfd->absFilePath();
doc = bfd->isLinkable() && bfd->isHidden(); doc = bfd->isLinkable() && !bfd->isHidden();
src = bfd->generateSourceFile(); src = bfd->generateSourceFile();
} }
if (doc || src || !Config_getBool("HIDE_UNDOC_RELATIONS")) if (doc || src || !Config_getBool("HIDE_UNDOC_RELATIONS"))
...@@ -1967,7 +1967,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance) ...@@ -1967,7 +1967,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
if (bfd) url=bfd->getOutputFileBase().copy(); if (bfd) url=bfd->getOutputFileBase().copy();
if (!doc && src) if (!doc && src)
{ {
url+="-source"; url=bfd->getSourceFileBase();
} }
DotNode *bn = m_usedNodes->find(in); DotNode *bn = m_usedNodes->find(in);
if (bn) // file is already a node in the graph if (bn) // file is already a node in the graph
......
...@@ -3511,6 +3511,85 @@ static bool isRecursiveBaseClass(const QCString &scope,const QCString &name) ...@@ -3511,6 +3511,85 @@ static bool isRecursiveBaseClass(const QCString &scope,const QCString &name)
return result; 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( static bool findClassRelation(
Entry *root, Entry *root,
Definition *context, Definition *context,
...@@ -3603,23 +3682,8 @@ static bool findClassRelation( ...@@ -3603,23 +3682,8 @@ static bool findClassRelation(
{ {
// TODO: here we should try to find the correct template specialization // TODO: here we should try to find the correct template specialization
// but for now, we only look for the unspecializated base class. // but for now, we only look for the unspecializated base class.
// locate end of template int e=findEndOfTemplate(baseClassName,i+1);
int e=i+1; if (e!=-1) // end of template was found at e
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
{ {
templSpec=baseClassName.mid(i,e-i); templSpec=baseClassName.mid(i,e-i);
baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e); baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e);
......
...@@ -569,7 +569,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title, ...@@ -569,7 +569,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title,
} }
t << "\" rel=\"stylesheet\" type=\"text/css\">\n"; 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"; t << "</head><body>\n";
} }
......
...@@ -655,6 +655,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -655,6 +655,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
%x CopyArgSharp %x CopyArgSharp
%x CopyArgComment %x CopyArgComment
%x CopyArgCommentLine %x CopyArgCommentLine
%x CopyArgVerbatim
/** Prototype scanner states */ /** Prototype scanner states */
...@@ -2855,10 +2856,35 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2855,10 +2856,35 @@ IDLATTR ("["[^\]]*"]"){BN}*
unput(lastCopyArgChar); unput(lastCopyArgChar);
BEGIN( lastCommentInArgContext ); 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>[^\\\@\n]+ { fullArgString+=yytext; }
<CopyArgCommentLine>. { fullArgString+=*yytext; } <CopyArgCommentLine>. { fullArgString+=*yytext; }
<CopyArgComment>\n { fullArgString+=*yytext; yyLineNr++; } <CopyArgComment,CopyArgVerbatim>\n { fullArgString+=*yytext; yyLineNr++; }
<CopyArgComment>. { fullArgString+=*yytext; } <CopyArgComment,CopyArgVerbatim>. { fullArgString+=*yytext; }
<CopyArgComment>{CMD}("brief"|"short"){B}+ { <CopyArgComment>{CMD}("brief"|"short"){B}+ {
warn(yyFileName,yyLineNr, warn(yyFileName,yyLineNr,
"Warning: Ignoring %cbrief command inside argument documentation",*yytext "Warning: Ignoring %cbrief command inside argument documentation",*yytext
......
...@@ -1112,14 +1112,14 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -1112,14 +1112,14 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
t << "\">"; t << "\">";
if (!bcd->templSpecifiers.isEmpty()) if (!bcd->templSpecifiers.isEmpty())
{ {
convertToXML( t << convertToXML(
insertTemplateSpecifierInScope( insertTemplateSpecifierInScope(
bcd->classDef->displayName(),bcd->templSpecifiers) bcd->classDef->displayName(),bcd->templSpecifiers)
); );
} }
else else
{ {
convertToXML(bcd->classDef->displayName()); t << convertToXML(bcd->classDef->displayName());
} }
t << "</basecompoundref>" << endl; t << "</basecompoundref>" << endl;
} }
......
...@@ -36,13 +36,12 @@ TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib ...@@ -36,13 +36,12 @@ TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
TMAKE_LINK = c++ TMAKE_LINK = c++
TMAKE_LINK_SHLIB = c++ TMAKE_LINK_SHLIB = c++
TMAKE_LFLAGS = TMAKE_LFLAGS = -Wl,-search_paths_first
TMAKE_LFLAGS_RELEASE = TMAKE_LFLAGS_RELEASE =
TMAKE_LFLAGS_DEBUG = TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -shared TMAKE_LFLAGS_SHLIB = -shared
# soname does not work on fbsd 2.x TMAKE_LFLAGS_SONAME = -dynamiclib -install_name
#TMAKE_LFLAGS_SONAME = -Wl,-soname
TMAKE_LIBS = TMAKE_LIBS =
TMAKE_LIBS_X11 = 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