Commit 570375c3 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.4.2-20050410

parent 4fa6a604
DOXYGEN Version 1.4.2 DOXYGEN Version 1.4.2-20050410
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 (28 March 2005) Dimitri van Heesch (10 April 2005)
...@@ -46,17 +46,18 @@ distclean: clean ...@@ -46,17 +46,18 @@ distclean: clean
DATE=$(shell date "+%B %Y") DATE=$(shell date "+%B %Y")
MAN1DIR = man/man1
install: doxywizard_install install: doxywizard_install
$(INSTTOOL) -d $(INSTALL)/bin $(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin $(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin $(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin
$(INSTTOOL) -d $(INSTALL)/man/man1 $(INSTTOOL) -d $(INSTALL)/$(MAN1DIR)
cat doc/doxygen.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/man/man1/doxygen.1 ; \ cat doc/doxygen.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxygen.1 ; \
cat doc/doxytag.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/man/man1/doxytag.1 ; \ cat doc/doxytag.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxytag.1 ; \
cat doc/doxywizard.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/man/man1/doxywizard.1 ; cat doc/doxywizard.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxywizard.1 ;
install_docs: install install_docs:
$(INSTTOOL) -d $(DOCDIR) $(INSTTOOL) -d $(DOCDIR)
cp -r doc $(DOCDIR) cp -r doc $(DOCDIR)
cp -r examples $(DOCDIR) cp -r examples $(DOCDIR)
......
DOXYGEN Version 1.4.2 DOXYGEN Version 1.4.2_20050410
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) (28 March 2005) Dimitri van Heesch (dimitri@stack.nl) (10 April 2005)
1.4.2 1.4.2-20050410
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "doxywizard.h" #include "doxywizard.h"
#include "expert.h" #include "expert.h"
#include "config.h" #include "config.h"
#include "version.h"
const int messageTimeout = 5000; //!< status bar message timeout in millisec. const int messageTimeout = 5000; //!< status bar message timeout in millisec.
...@@ -1310,9 +1311,9 @@ void MainWidget::about() ...@@ -1310,9 +1311,9 @@ void MainWidget::about()
{ {
QString msg; QString msg;
QTextStream t(&msg,IO_WriteOnly); QTextStream t(&msg,IO_WriteOnly);
t << "<qt><center>A tool to configure and run doxygen " t << QString("<qt><center>A tool to configure and run doxygen version ")+versionString+
"on your source files.</center><p><br>" " on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2004</center><p>" "<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2005</center><p>"
"</qt>"; "</qt>";
QMessageBox::about(this,"Doxygen GUI",msg); QMessageBox::about(this,"Doxygen GUI",msg);
} }
......
...@@ -28,7 +28,7 @@ f_insttool=NO ...@@ -28,7 +28,7 @@ f_insttool=NO
f_english=NO f_english=NO
f_wizard=NO f_wizard=NO
f_thread=NO f_thread=NO
f_langs=nl,se,cz,fr,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za f_langs=nl,se,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za
while test -n "$1"; do while test -n "$1"; do
case $1 in case $1 in
...@@ -145,12 +145,18 @@ if test -z "$f_platform"; then ...@@ -145,12 +145,18 @@ if test -z "$f_platform"; then
;; ;;
Darwin:*) Darwin:*)
f_platform=macosx-c++ f_platform=macosx-c++
if test "$f_insttool" = NO; then
f_insttool=/usr/bin/install
fi
;; ;;
FreeBSD:*) FreeBSD:*)
f_platform=freebsd-g++ f_platform=freebsd-g++
;; ;;
HP-UX:*) HP-UX:*)
f_platform=hpux-g++ f_platform=hpux-g++
if test "$f_insttool" = NO; then
f_insttool=/usr/bin/install
fi
;; ;;
IRIX64:*) IRIX64:*)
f_platform=irix-64 f_platform=irix-64
...@@ -181,6 +187,9 @@ if test -z "$f_platform"; then ...@@ -181,6 +187,9 @@ if test -z "$f_platform"; then
;; ;;
SunOS:5*) SunOS:5*)
f_platform=solaris-g++ f_platform=solaris-g++
if test "$f_insttool" = NO; then
f_insttool=/usr/bin/install
fi
;; ;;
ULTRIX:*) ULTRIX:*)
f_platform=ultrix-g++ f_platform=ultrix-g++
...@@ -523,7 +532,7 @@ fi ...@@ -523,7 +532,7 @@ fi
echo -n " Generating src/lang_cfg.h..." echo -n " Generating src/lang_cfg.h..."
echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>); echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>);
chomp @l; chomp @l;
@allowed=(split(/,/,"NL,SE,CZ,FR,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA")); @allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA"));
foreach my $elem (@l){ foreach my $elem (@l){
$elem =~ tr/a-z/A-Z/; $elem =~ tr/a-z/A-Z/;
$r=0; $r=0;
......
...@@ -72,6 +72,9 @@ doxygen -w html header.html footer.html stylesheet.css ...@@ -72,6 +72,9 @@ doxygen -w html header.html footer.html stylesheet.css
\verbatim \verbatim
doxygen -w latex header.tex doxygen.sty doxygen -w latex header.tex doxygen.sty
\endverbatim \endverbatim
If you need non-default options (for instance to use pdflatex) you need
to make a config file with those options set correctly and then specify
that config file as the forth argument.
<li>For RTF output, you can generate the default style sheet file (see <li>For RTF output, you can generate the default style sheet file (see
\ref cfg_rtf_stylesheet_file "RTF_STYLESHEET_FILE") using: \ref cfg_rtf_stylesheet_file "RTF_STYLESHEET_FILE") using:
\verbatim \verbatim
......
...@@ -23,13 +23,13 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -23,13 +23,13 @@ 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.1-20050315), 30 languages Currently (version 1.4.2), 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,
German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En), German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian, (+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Slovak, Slovene, Spanish, Swedish, and Ukrainian.. Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian..
The table of information related to the supported languages follows. The table of information related to the supported languages follows.
It is sorted by language alphabetically. The <b>Status</b> column It is sorted by language alphabetically. The <b>Status</b> column
...@@ -140,6 +140,12 @@ when the translator was updated. ...@@ -140,6 +140,12 @@ when the translator was updated.
<td>akiss at users dot sourceforge dot net<br>foldvari lost at cyberspace</td> <td>akiss at users dot sourceforge dot net<br>foldvari lost at cyberspace</td>
<td>1.4.1</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff">
<td>Indonesian</td>
<td>Hendy Irawan</td>
<td>ceefour at gauldong dot net</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Italian</td> <td>Italian</td>
<td>Alessandro Falappa<br>Ahmed Aldo Faisal</td> <td>Alessandro Falappa<br>Ahmed Aldo Faisal</td>
...@@ -291,6 +297,8 @@ when the translator was updated. ...@@ -291,6 +297,8 @@ when the translator was updated.
Hungarian & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & 1.4.1 \\ Hungarian & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & 1.4.1 \\
~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & ~ \\ ~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & ~ \\
\hline \hline
Indonesian & Hendy Irawan & {\tt\tiny ceefour@gauldong.net} & up-to-date \\
\hline
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
......
...@@ -58,6 +58,9 @@ TranslatorHungarian ...@@ -58,6 +58,9 @@ TranslatorHungarian
&Aacute;kos Kiss: akiss@users.sourceforge.net &Aacute;kos Kiss: akiss@users.sourceforge.net
F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace
TranslatorIndonesian
Hendy Irawan: ceefour@gauldong.net
TranslatorItalian TranslatorItalian
Alessandro Falappa: alessandro@falappa.net Alessandro Falappa: alessandro@falappa.net
Ahmed Aldo Faisal: aaf23@cam.ac.uk Ahmed Aldo Faisal: aaf23@cam.ac.uk
......
(1.4.1-20050315) (1.4.2)
Doxygen supports the following 30 languages (sorted alphabetically): Doxygen supports the following 31 languages (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,
German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En), German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian, (+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Slovak, Slovene, Spanish, Swedish, and Ukrainian. Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
Of them, 9 translators are up-to-date, 21 translators are based on Of them, 10 translators are up-to-date, 21 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -23,6 +23,7 @@ still may be some details listed even for them: ...@@ -23,6 +23,7 @@ still may be some details listed even for them:
TranslatorDutch -- Remove the obsolete methods (never used). TranslatorDutch -- Remove the obsolete methods (never used).
TranslatorEnglish -- Remove the obsolete methods (never used). TranslatorEnglish -- Remove the obsolete methods (never used).
TranslatorGerman -- Remove the obsolete methods (never used). TranslatorGerman -- Remove the obsolete methods (never used).
TranslatorIndonesian -- Remove the obsolete methods (never used).
TranslatorItalian TranslatorItalian
TranslatorRussian TranslatorRussian
TranslatorSwedish TranslatorSwedish
...@@ -476,6 +477,25 @@ TranslatorHungarian (TranslatorAdapter_1_4_1) 1 method to implement ...@@ -476,6 +477,25 @@ TranslatorHungarian (TranslatorAdapter_1_4_1) 1 method to implement
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorIndonesian (Translator)
--------------------
Implements 192 of the required methods.
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
virtual QCString trField(bool first_capital, bool singular)
virtual QCString trPackageDocumentation()
virtual QCString trSources()
virtual QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
virtual QCString trHeaderFiles()
virtual QCString trBugsAndLimitations()
virtual QCString trEnumerationValueDocumentation()
virtual QCString trNoDescriptionAvailable()
TranslatorJapanese (TranslatorAdapter_1_3_9) 7 methods to implement TranslatorJapanese (TranslatorAdapter_1_3_9) 7 methods to implement
------------------ ------------------
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.4.2 Version: 1.4.2_20050410
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -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") { /* start of a verbatim block */ <CComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code")/[ \r\t\n] { /* start of a verbatim block */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
g_blockName=&yytext[1]; g_blockName=&yytext[1];
g_lastCommentContext = YY_START; g_lastCommentContext = YY_START;
...@@ -423,7 +423,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -423,7 +423,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
BEGIN(g_readLineCtx); BEGIN(g_readLineCtx);
} }
<CComment,ReadLine>("\\\\"|"@@")[~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command <CComment,ReadLine>[\\@][\\@][~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section <CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section
...@@ -507,6 +507,7 @@ void replaceComment(int offset) ...@@ -507,6 +507,7 @@ void replaceComment(int offset)
*/ */
void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName) void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
{ {
//printf("convertCppComments(%s)\n",fileName);
g_inBuf = inBuf; g_inBuf = inBuf;
g_outBuf = outBuf; g_outBuf = outBuf;
g_inBufPos = 0; g_inBufPos = 0;
......
...@@ -19,7 +19,10 @@ ...@@ -19,7 +19,10 @@
#include "qtbc.h" #include "qtbc.h"
#include "entry.h" #include "entry.h"
bool parseCommentBlock(/* in,out */ Entry *curEntry, class ParserInterface;
bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in,out */ Entry *curEntry,
/* in */ const QCString &comment, /* in */ const QCString &comment,
/* in */ const QCString &fileName, /* in */ const QCString &fileName,
/* in */ int lineNr, /* in */ int lineNr,
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
#include "reflist.h" #include "reflist.h"
#include "code.h" #include "code.h"
#include "debug.h" #include "debug.h"
#include "parserintf.h"
// forward declarations // forward declarations
static void handleBrief(const QCString &); static void handleBrief(const QCString &);
...@@ -288,6 +289,7 @@ class GuardedSection ...@@ -288,6 +289,7 @@ class GuardedSection
* statics * statics
*/ */
static ParserInterface *langParser; // the language parser that is calling us
static const char * inputString; // input string static const char * 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
...@@ -322,6 +324,7 @@ static QCString xrefListTitle; ...@@ -322,6 +324,7 @@ static QCString xrefListTitle;
static Protection protection; static Protection protection;
static bool xrefAppendFlag; static bool xrefAppendFlag;
static bool inGroupParamFound;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -812,10 +815,11 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -812,10 +815,11 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN(ReadFormulaLong); BEGIN(ReadFormulaLong);
} }
<Comment>{CMD}"{" { // begin of a group <Comment>{CMD}"{" { // begin of a group
handleGroupStartCommand(nameHeader); langParser->handleGroupStartCommand(nameHeader);
} }
<Comment>{CMD}"}" { // end of a group <Comment>{CMD}"}" { // end of a group
handleGroupEndCommand(); langParser->handleGroupEndCommand();
nameHeader.resize(0);
} }
<Comment>{CMD}[$@\\&~<>#%] { // escaped character <Comment>{CMD}[$@\\&~<>#%] { // escaped character
addOutput(yytext); addOutput(yytext);
...@@ -1507,12 +1511,15 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1507,12 +1511,15 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
current->groups->append( current->groups->append(
new Grouping(yytext, Grouping::GROUPING_INGROUP) new Grouping(yytext, Grouping::GROUPING_INGROUP)
); );
BEGIN( Comment ); inGroupParamFound=TRUE;
} }
<InGroupParam>{DOCNL} { // missing argument <InGroupParam>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr, if (!inGroupParamFound)
"Warning: Missing group name for \\ingroup command" {
); warn(yyFileName,yyLineNr,
"Warning: Missing group name for \\ingroup command"
);
}
if (*yytext=='\n') yyLineNr++; if (*yytext=='\n') yyLineNr++;
addOutput('\n'); addOutput('\n');
BEGIN( Comment ); BEGIN( Comment );
...@@ -1530,7 +1537,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1530,7 +1537,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<FnParam>{DOCNL} { // end of argument <FnParam>{DOCNL} { // end of argument
if (*yytext=='\n') yyLineNr++; if (*yytext=='\n') yyLineNr++;
addOutput('\n'); addOutput('\n');
parsePrototype(functionProto); langParser->parsePrototype(functionProto);
BEGIN( Comment ); BEGIN( Comment );
} }
<FnParam>{LC} { // line continuation <FnParam>{LC} { // line continuation
...@@ -1558,7 +1565,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1558,7 +1565,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
else // overload declaration else // overload declaration
{ {
makeStructuralIndicator(Entry::OVERLOADDOC_SEC); makeStructuralIndicator(Entry::OVERLOADDOC_SEC);
parsePrototype(functionProto); langParser->parsePrototype(functionProto);
} }
BEGIN( Comment ); BEGIN( Comment );
} }
...@@ -1913,6 +1920,7 @@ static void handleEndIf(const QCString &) ...@@ -1913,6 +1920,7 @@ static void handleEndIf(const QCString &)
static void handleIngroup(const QCString &) static void handleIngroup(const QCString &)
{ {
inGroupParamFound=FALSE;
BEGIN( InGroupParam ); BEGIN( InGroupParam );
} }
...@@ -2010,7 +2018,8 @@ static void checkFormula() ...@@ -2010,7 +2018,8 @@ static void checkFormula()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bool parseCommentBlock(/* in,out */ Entry *curEntry, bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in,out */ Entry *curEntry,
/* in */ const QCString &comment, /* in */ const QCString &comment,
/* in */ const QCString &fileName, /* in */ const QCString &fileName,
/* in */ int lineNr, /* in */ int lineNr,
...@@ -2025,6 +2034,7 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry, ...@@ -2025,6 +2034,7 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry,
initParser(); initParser();
guards.setAutoDelete(TRUE); guards.setAutoDelete(TRUE);
guards.clear(); guards.clear();
langParser = parser;
current = curEntry; current = curEntry;
inputString = comment; inputString = comment;
if (inputString==0) return FALSE; // avoid empty strings if (inputString==0) return FALSE; // avoid empty strings
......
...@@ -253,6 +253,7 @@ ...@@ -253,6 +253,7 @@
<xsd:complexType name="locationType"> <xsd:complexType name="locationType">
<xsd:attribute name="file" type="xsd:string" /> <xsd:attribute name="file" type="xsd:string" />
<xsd:attribute name="line" type="xsd:integer" /> <xsd:attribute name="line" type="xsd:integer" />
<xsd:attribute name="bodyfile" type="xsd:string" />
<xsd:attribute name="bodystart" type="xsd:integer" /> <xsd:attribute name="bodystart" type="xsd:integer" />
<xsd:attribute name="bodyend" type="xsd:integer" /> <xsd:attribute name="bodyend" type="xsd:integer" />
</xsd:complexType> </xsd:complexType>
......
...@@ -253,6 +253,7 @@ ...@@ -253,6 +253,7 @@
" <xsd:complexType name=\"locationType\">\n" " <xsd:complexType name=\"locationType\">\n"
" <xsd:attribute name=\"file\" type=\"xsd:string\" />\n" " <xsd:attribute name=\"file\" type=\"xsd:string\" />\n"
" <xsd:attribute name=\"line\" type=\"xsd:integer\" />\n" " <xsd:attribute name=\"line\" type=\"xsd:integer\" />\n"
" <xsd:attribute name=\"bodyfile\" type=\"xsd:string\" />\n"
" <xsd:attribute name=\"bodystart\" type=\"xsd:integer\" />\n" " <xsd:attribute name=\"bodystart\" type=\"xsd:integer\" />\n"
" <xsd:attribute name=\"bodyend\" type=\"xsd:integer\" />\n" " <xsd:attribute name=\"bodyend\" type=\"xsd:integer\" />\n"
" </xsd:complexType>\n" " </xsd:complexType>\n"
......
...@@ -249,7 +249,7 @@ static bool readCodeFragment(const char *fileName, ...@@ -249,7 +249,7 @@ static bool readCodeFragment(const char *fileName,
{ {
//printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine); //printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
QCString cmd=getFileFilter(fileName)+" \""+fileName+"\""; QCString cmd="\"" + getFileFilter(fileName)+"\" \""+fileName+"\"";
FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r"); FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r");
bool found=FALSE; bool found=FALSE;
if (f) if (f)
......
...@@ -864,7 +864,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) ...@@ -864,7 +864,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member)) resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member))
{ {
//printf("resolveRef %s = %p (linkable?=%d)\n",g_token->name.data(),member,member ? member->isLinkable() : FALSE); //printf("resolveRef %s = %p (linkable?=%d)\n",g_token->name.data(),member,member ? member->isLinkable() : FALSE);
if (member) // member link if (member && member->isLinkable()) // member link
{ {
children.append(new children.append(new
DocLinkedWord(parent,name, DocLinkedWord(parent,name,
...@@ -874,7 +874,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) ...@@ -874,7 +874,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
) )
); );
} }
else // compound link else if (compound->isLinkable()) // compound link
{ {
if (compound->definitionType()==Definition::TypeFile) if (compound->definitionType()==Definition::TypeFile)
{ {
...@@ -892,8 +892,12 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) ...@@ -892,8 +892,12 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
) )
); );
} }
else // not linkable
{
children.append(new DocWord(parent,name));
}
} }
else if (!g_insideHtmlLink && g_token->name.at(len-1)==':') else if (!g_insideHtmlLink && len>1 && g_token->name.at(len-1)==':')
{ {
// special case, where matching Foo: fails to be an Obj-C reference, // special case, where matching Foo: fails to be an Obj-C reference,
// but Foo itself might be linkable. // but Foo itself might be linkable.
......
This diff is collapsed.
...@@ -123,7 +123,4 @@ void readConfiguration(int argc, char **argv); ...@@ -123,7 +123,4 @@ void readConfiguration(int argc, char **argv);
void parseInput(); void parseInput();
void generateOutput(); void generateOutput();
//#undef USE_TMP_FILE
#define USE_TMP_FILE
#endif #endif
...@@ -97,6 +97,15 @@ FileDef::FileDef(const char *p,const char *nm, ...@@ -97,6 +97,15 @@ FileDef::FileDef(const char *p,const char *nm,
memberGroupSDict = new MemberGroupSDict; memberGroupSDict = new MemberGroupSDict;
memberGroupSDict->setAutoDelete(TRUE); memberGroupSDict->setAutoDelete(TRUE);
acquireFileVersion(); acquireFileVersion();
// members in the detailed part of the documentation
docDefineMembers.setInFile(TRUE);
docProtoMembers.setInFile(TRUE);
docTypedefMembers.setInFile(TRUE);
docEnumMembers.setInFile(TRUE);
docFuncMembers.setInFile(TRUE);
docVarMembers.setInFile(TRUE);
} }
/*! destroy the file definition */ /*! destroy the file definition */
...@@ -675,6 +684,8 @@ void FileDef::addMembersToMemberGroup() ...@@ -675,6 +684,8 @@ void FileDef::addMembersToMemberGroup()
void FileDef::insertMember(MemberDef *md) void FileDef::insertMember(MemberDef *md)
{ {
//printf("%s:FileDef::insertMember(%s)\n",name().data(),md->name().data()); //printf("%s:FileDef::insertMember(%s)\n",name().data(),md->name().data());
if (allMemberList.find(md)!=-1) return;
allMemberList.append(md); allMemberList.append(md);
bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
...@@ -1220,7 +1231,7 @@ void FileDef::acquireFileVersion() ...@@ -1220,7 +1231,7 @@ void FileDef::acquireFileVersion()
if (!vercmd.isEmpty()) if (!vercmd.isEmpty())
{ {
msg("Version of %s : ",filepath.data()); msg("Version of %s : ",filepath.data());
FILE *f=popen(vercmd+" "+filepath,"r"); FILE *f=popen("\""+vercmd+"\" \""+filepath+"\"","r");
if (!f) if (!f)
{ {
err("Error: could not execute %s\n",vercmd.data()); err("Error: could not execute %s\n",vercmd.data());
......
...@@ -178,7 +178,7 @@ class FileDef : public Definition ...@@ -178,7 +178,7 @@ class FileDef : public Definition
MemberList decFuncMembers; MemberList decFuncMembers;
MemberList decVarMembers; MemberList decVarMembers;
// members in the documentation part of the documentation // members in the detailed part of the documentation
MemberList docDefineMembers; MemberList docDefineMembers;
MemberList docProtoMembers; MemberList docProtoMembers;
MemberList docTypedefMembers; MemberList docTypedefMembers;
......
...@@ -327,8 +327,8 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -327,8 +327,8 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
break; break;
default: default:
err("GroupDef::insertMembers(): " err("GroupDef::insertMembers(): "
"member `%s' with class scope `%s' inserted in group scope `%s'!\n", "member `%s' (typeid=%d) with scope `%s' inserted in group scope `%s'!\n",
md->name().data(), md->name().data(),md->memberType(),
md->getClassDef() ? md->getClassDef()->name().data() : "", md->getClassDef() ? md->getClassDef()->name().data() : "",
name().data()); name().data());
} }
......
...@@ -1368,7 +1368,9 @@ void HtmlGenerator::writeLineNumber(const char *ref,const char *file, ...@@ -1368,7 +1368,9 @@ void HtmlGenerator::writeLineNumber(const char *ref,const char *file,
} }
else else
{ {
startCodeAnchor(lineAnchor);
codify(lineNumber); codify(lineNumber);
endCodeAnchor();
} }
codify(" "); codify(" ");
} }
......
...@@ -2704,7 +2704,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) ...@@ -2704,7 +2704,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
MemberDef *md=members->first(); MemberDef *md=members->first();
while (md) while (md)
{ {
if (md->isDetailedSectionVisible(TRUE)) if (md->isDetailedSectionVisible(TRUE,FALSE))
{ {
if (first) if (first)
{ {
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#define LANG_SE #define LANG_SE
#define LANG_CZ #define LANG_CZ
#define LANG_FR #define LANG_FR
#define LANG_ID
#define LANG_IT #define LANG_IT
#define LANG_DE #define LANG_DE
#define LANG_JP #define LANG_JP
......
...@@ -34,6 +34,9 @@ ...@@ -34,6 +34,9 @@
#ifdef LANG_FR #ifdef LANG_FR
#include "translator_fr.h" #include "translator_fr.h"
#endif #endif
#ifdef LANG_ID
#include "translator_id.h"
#endif
#ifdef LANG_IT #ifdef LANG_IT
#include "translator_it.h" #include "translator_it.h"
#endif #endif
...@@ -165,6 +168,12 @@ bool setTranslator(const char *langName) ...@@ -165,6 +168,12 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorFrench; theTranslator=new TranslatorFrench;
} }
#endif #endif
#ifdef LANG_ID
else if (L_EQUAL("indonesian"))
{
theTranslator=new TranslatorIndonesian;
}
#endif
#ifdef LANG_IT #ifdef LANG_IT
else if (L_EQUAL("italian")) else if (L_EQUAL("italian"))
{ {
......
...@@ -100,6 +100,7 @@ HEADERS = bufstr.h \ ...@@ -100,6 +100,7 @@ HEADERS = bufstr.h \
translator_gr.h \ translator_gr.h \
translator_hr.h \ translator_hr.h \
translator_hu.h \ translator_hu.h \
translator_id.h \
translator_it.h \ translator_it.h \
translator_je.h \ translator_je.h \
translator_jp.h \ translator_jp.h \
......
...@@ -676,13 +676,22 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) ...@@ -676,13 +676,22 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
} }
void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
FileDef *,GroupDef *gd) FileDef *fd,GroupDef *gd,bool onlyText)
{ {
QCString sep = Config_getBool("OPTIMIZE_OUTPUT_JAVA") ? "." : "::"; QCString sep = Config_getBool("OPTIMIZE_OUTPUT_JAVA") ? "." : "::";
QCString n = name(); QCString n = name();
if (classDef && gd) n.prepend(classDef->name()+sep); if (classDef && gd) n.prepend(classDef->name()+sep);
else if (nspace && gd) n.prepend(nspace->name()+sep); else if (nspace && (gd || fd)) n.prepend(nspace->name()+sep);
ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n); if (!onlyText) // write link
{
ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
}
else // write only text
{
ol.startBold();
ol.docify(n);
ol.endBold();
}
} }
/*! If this member has an anonymous class/struct/union as its type, then /*! If this member has an anonymous class/struct/union as its type, then
...@@ -901,10 +910,10 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -901,10 +910,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
QCString cname = d->name(); QCString cname = d->name();
QCString cfname = getOutputFileBase(); QCString cfname = getOutputFileBase();
QCString osname = cname; //QCString osname = cname;
// in case of class members that are put in a group the name of the outerscope // in case of class members that are put in a group the name of the outerscope
// differs from the cname. // differs from the cname.
if (getOuterScope()) osname=getOuterScope()->name(); //if (getOuterScope()) osname=getOuterScope()->name();
HtmlHelp *htmlHelp=0; HtmlHelp *htmlHelp=0;
bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP");
...@@ -942,6 +951,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -942,6 +951,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
} }
} }
// *** write template lists
if (tArgList) if (tArgList)
{ {
if (!isAnonymous) ol.startMemberTemplateParams(); if (!isAnonymous) ol.startMemberTemplateParams();
...@@ -949,10 +959,9 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -949,10 +959,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (!isAnonymous) ol.endMemberTemplateParams(); if (!isAnonymous) ol.endMemberTemplateParams();
} }
// *** write type
QCString ltype(type); QCString ltype(type);
if (mtype==Typedef) ltype.prepend("typedef "); if (mtype==Typedef) ltype.prepend("typedef ");
// strip `static' keyword from ltype
//if (ltype.left(7)=="static ") ltype=ltype.right(ltype.length()-7);
// strip `friend' keyword from ltype // strip `friend' keyword from ltype
if (ltype.left(7)=="friend ") ltype=ltype.right(ltype.length()-7); if (ltype.left(7)=="friend ") ltype=ltype.right(ltype.length()-7);
static QRegExp r("@[0-9]+"); static QRegExp r("@[0-9]+");
...@@ -1034,7 +1043,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1034,7 +1043,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.insertMemberAlign(tArgList!=0); ol.insertMemberAlign(tArgList!=0);
} }
// write name // *** write name
if (!name().isEmpty() && name().at(0)!='@') // hide annonymous stuff if (!name().isEmpty() && name().at(0)!='@') // hide annonymous stuff
{ {
//printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable()); //printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable());
...@@ -1074,12 +1083,13 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1074,12 +1083,13 @@ void MemberDef::writeDeclaration(OutputList &ol,
// descriptions are enabled or there is no detailed description. // descriptions are enabled or there is no detailed description.
{ {
if (annMemb) annMemb->annUsed=annUsed=TRUE; if (annMemb) annMemb->annUsed=annUsed=TRUE;
ol.startBold(); ClassDef *rcd = cd;
ol.docify(name()); if (isReference() && classDef) rcd = classDef;
ol.endBold(); writeLink(ol,rcd,nd,fd,gd,TRUE);
} }
} }
// *** write arguments
if (argsString() && !isObjCMethod()) if (argsString() && !isObjCMethod())
{ {
if (!isDefine()) ol.writeString(" "); if (!isDefine()) ol.writeString(" ");
...@@ -1087,12 +1097,14 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1087,12 +1097,14 @@ void MemberDef::writeDeclaration(OutputList &ol,
linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),argsString()); linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),argsString());
} }
// *** write exceptions
if (excpString()) if (excpString())
{ {
ol.writeString(" "); ol.writeString(" ");
ol.docify(excpString()); ol.docify(excpString());
} }
// *** write bitfields
if (!bitfields.isEmpty()) // add bitfields if (!bitfields.isEmpty()) // add bitfields
{ {
linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),bitfields.simplifyWhiteSpace()); linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),bitfields.simplifyWhiteSpace());
...@@ -1113,6 +1125,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -1113,6 +1125,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),init); linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),init);
} }
} }
if (isObjCMethod() && isImplementation()) if (isObjCMethod() && isImplementation())
{ {
ol.startTypewriter(); ol.startTypewriter();
...@@ -1217,11 +1230,13 @@ bool MemberDef::isDetailedSectionLinkable() const ...@@ -1217,11 +1230,13 @@ bool MemberDef::isDetailedSectionLinkable() const
return ((docFilter && staticFilter && privateFilter && friendCompoundFilter) /*|| inAnonymousScope*/); return ((docFilter && staticFilter && privateFilter && friendCompoundFilter) /*|| inAnonymousScope*/);
} }
bool MemberDef::isDetailedSectionVisible(bool inGroup) const bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
{ {
bool groupFilter = getGroupDef()==0 || inGroup; bool groupFilter = getGroupDef()==0 || inGroup;
bool fileFilter = getNamespaceDef()==0 || !inFile;
bool visible = isDetailedSectionLinkable() && groupFilter && !isReference(); bool visible = isDetailedSectionLinkable() && groupFilter && fileFilter &&
!isReference();
//printf("MemberDef::isDetailedSectionVisible() %d\n",visible); //printf("MemberDef::isDetailedSectionVisible() %d\n",visible);
return visible; return visible;
} }
...@@ -1237,7 +1252,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1237,7 +1252,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{ {
// if this member is in a group find the real scope name. // if this member is in a group find the real scope name.
bool hasParameterList = FALSE; bool hasParameterList = FALSE;
bool hasDocs = isDetailedSectionVisible(inGroup); bool inFile = container->definitionType()==Definition::TypeFile;
bool hasDocs = isDetailedSectionVisible(inGroup,inFile);
//printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n", //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup); // name().data(),hasDocs,container->definitionType(),inGroup);
if ( !hasDocs ) return; if ( !hasDocs ) return;
...@@ -1287,6 +1303,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1287,6 +1303,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
int i=0,l; int i=0,l;
static QRegExp r("@[0-9]+"); static QRegExp r("@[0-9]+");
//----------------------------------------
ol.pushGeneratorState(); ol.pushGeneratorState();
...@@ -1398,6 +1415,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1398,6 +1415,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
} }
} }
} }
ol.startMemberDocName(isObjCMethod()); ol.startMemberDocName(isObjCMethod());
if (cd && cd->isObjectiveC()) if (cd && cd->isObjectiveC())
{ {
...@@ -1431,7 +1449,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1431,7 +1449,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//printf("end >%s< i=%d\n",ldef.data(),i); //printf("end >%s< i=%d\n",ldef.data(),i);
if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- "); if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
} }
linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef); linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef);
hasParameterList=writeDefArgumentList(ol,cd,scopeName,this); hasParameterList=writeDefArgumentList(ol,cd,scopeName,this);
if (hasOneLineInitializer()) // add initializer if (hasOneLineInitializer()) // add initializer
{ {
...@@ -1865,6 +1885,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1865,6 +1885,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex); //if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState(); ol.popGeneratorState();
//------------------------------------------------
if (!Config_getBool("EXTRACT_ALL") && if (!Config_getBool("EXTRACT_ALL") &&
Config_getBool("WARN_IF_UNDOCUMENTED") && Config_getBool("WARN_IF_UNDOCUMENTED") &&
Config_getBool("WARN_NO_PARAMDOC")) Config_getBool("WARN_NO_PARAMDOC"))
......
...@@ -153,7 +153,7 @@ class MemberDef : public Definition ...@@ -153,7 +153,7 @@ class MemberDef : public Definition
bool isLinkable() const; bool isLinkable() const;
bool hasDocumentation() const; // overrides hasDocumentation in definition.h bool hasDocumentation() const; // overrides hasDocumentation in definition.h
bool isBriefSectionVisible() const; bool isBriefSectionVisible() const;
bool isDetailedSectionVisible(bool inGroup=FALSE) const; bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
bool isDetailedSectionLinkable() const; bool isDetailedSectionLinkable() const;
bool isDocumentedFriendClass() const; bool isDocumentedFriendClass() const;
...@@ -185,8 +185,6 @@ class MemberDef : public Definition ...@@ -185,8 +185,6 @@ class MemberDef : public Definition
void setTagInfo(TagInfo *i); void setTagInfo(TagInfo *i);
// output generation // output generation
void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
void writeDeclaration(OutputList &ol, void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup); bool inGroup);
...@@ -308,6 +306,10 @@ class MemberDef : public Definition ...@@ -308,6 +306,10 @@ class MemberDef : public Definition
bool visited; bool visited;
private: private:
void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool onlyText=FALSE);
ClassDef *classDef; // member of or related to ClassDef *classDef; // member of or related to
FileDef *fileDef; // member of file definition FileDef *fileDef; // member of file definition
MemberDef *enumScope; // the enclosing scope, if this is an enum field MemberDef *enumScope; // the enclosing scope, if this is an enum field
......
...@@ -32,6 +32,7 @@ MemberList::MemberList() : QList<MemberDef>() ...@@ -32,6 +32,7 @@ MemberList::MemberList() : QList<MemberDef>()
m_numDecMembers=-1; // special value indicating that computation is needed m_numDecMembers=-1; // special value indicating that computation is needed
m_numDocMembers=-1; // special value indicating that computation is needed m_numDocMembers=-1; // special value indicating that computation is needed
m_inGroup=FALSE; m_inGroup=FALSE;
m_inFile=FALSE;
} }
MemberList::~MemberList() MemberList::~MemberList()
...@@ -124,7 +125,7 @@ void MemberList::countDocMembers() ...@@ -124,7 +125,7 @@ void MemberList::countDocMembers()
MemberDef *md; MemberDef *md;
for (mli.toFirst();(md=mli.current());++mli) for (mli.toFirst();(md=mli.current());++mli)
{ {
if (md->isDetailedSectionVisible(m_inGroup)) if (md->isDetailedSectionVisible(m_inGroup,m_inFile))
{ {
// do not count enum values, since they do not produce entries of their own // do not count enum values, since they do not produce entries of their own
if (md->memberType()!=MemberDef::EnumValue) m_numDocMembers++; if (md->memberType()!=MemberDef::EnumValue) m_numDocMembers++;
......
...@@ -57,7 +57,8 @@ class MemberList : public QList<MemberDef> ...@@ -57,7 +57,8 @@ class MemberList : public QList<MemberDef>
void writeDocumentationPage(OutputList &ol, void writeDocumentationPage(OutputList &ol,
const char *scopeName, Definition *container); const char *scopeName, Definition *container);
void addMemberGroup(MemberGroup *mg); void addMemberGroup(MemberGroup *mg);
void setInGroup(bool group) { m_inGroup=group; } void setInGroup(bool inGroup) { m_inGroup=inGroup; }
void setInFile(bool inFile) { m_inFile=inFile; }
void addListReferences(Definition *def); void addListReferences(Definition *def);
void findSectionsInDocumentation(); void findSectionsInDocumentation();
MemberGroupList *getMemberGroupList() const { return memberGroupList; } MemberGroupList *getMemberGroupList() const { return memberGroupList; }
...@@ -68,7 +69,8 @@ class MemberList : public QList<MemberDef> ...@@ -68,7 +69,8 @@ class MemberList : public QList<MemberDef>
int m_numDecMembers; // number of members in the brief part of the memberlist int m_numDecMembers; // number of members in the brief part of the memberlist
int m_numDocMembers; // number of members in the detailed part of the memberlist int m_numDocMembers; // number of members in the detailed part of the memberlist
MemberGroupList *memberGroupList; MemberGroupList *memberGroupList;
bool m_inGroup; // is this list part of a group bool m_inGroup; // is this list part of a group definition
bool m_inFile; // is this list part of a file definition
}; };
class MemberListIterator : public QListIterator<MemberDef> class MemberListIterator : public QListIterator<MemberDef>
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2005 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef PARSERINTF_H
#define PARSERINTF_H
#include <qdict.h>
class Entry;
/** \brief Abstract interface for programming language parsers.
*
* By implementing the methods of this interface one can add
* a new language parser to doxygen. The parser can make use of the
* comment block parser to parse the contents of special comment blocks.
*/
class ParserInterface
{
public:
/** Parses a single file.
* @param[in] fileName The full name of the file.
* @param[in] fileBuf The contents of the file (zero terminated).
* @param[in,out] root The root of the tree of Entry *nodes
* representing the information extracted from the file.
*/
virtual void parse(const char *fileName,const char *fileBuf,Entry *root) = 0;
/** Callback function called by the comment block scanner.
* It provides a string \a text containing the prototype of a function
* or variable. The parser should parse this and store the information
* in the Entry node that corresponds with the node for which the
* comment block parser was invoked.
*/
virtual void parsePrototype(const char *text) = 0;
/** Callback function called by the comment block scanner upon encountering
* a group block start command (@@{). If the group has a header
* specified via the @@name command, this will be passed via
* the \a header parameter, if not the \a header parameter will be 0.
*/
virtual void handleGroupStartCommand(const char *header) = 0;
/** Callback function called by the comment block scanner upon encountering
* a group block end command (@@}).
*/
virtual void handleGroupEndCommand() = 0;
};
/** \brief Manages programming language parsers.
*
* This class manages the language parsers in the system. One can
* register parsers, and obtain a parser given a file extension.
*/
class ParserManager
{
public:
/** Creates the parser manager object.
* @param defaultParser The default parser that is used when
* no explicit extension has been register for
* a given input file.
*/
ParserManager(ParserInterface *defaultParser)
: m_defaultParser(defaultParser) {}
/** Registers a new parser.
* @param[in] extension The file extension that will trigger
* the use of this parser (e.g. ".py", or ".bas").
* @param[in] parser The parser that is to be used for the
* given extension.
*/
void registerParser(const char *extension,ParserInterface *parser)
{
m_parsers.insert(extension,parser);
}
/** Gets the interface to the parser associated with given \a extension,
* if there is no parser explicitly registered for the supplied extension,
* the interface to the default parser will be returned.
*/
ParserInterface *getParser(const char *extension)
{
if (extension==0) return m_defaultParser;
ParserInterface *intf = m_parsers.find(extension);
return intf ? intf : m_defaultParser;
}
private:
QDict<ParserInterface> m_parsers;
ParserInterface *m_defaultParser;
};
#endif
...@@ -195,7 +195,7 @@ static FILE *checkAndOpenFile(const QCString &absName) ...@@ -195,7 +195,7 @@ static FILE *checkAndOpenFile(const QCString &absName)
QCString filterName = getFileFilter(absName); QCString filterName = getFileFilter(absName);
if (!filterName.isEmpty()) if (!filterName.isEmpty())
{ {
QCString cmd = filterName+" \""+absName+"\""; QCString cmd = "\"" + filterName+"\" \""+absName+"\"";
f=popen(cmd,"r"); f=popen(cmd,"r");
if (!f) err("Error: could not execute filter %s\n",cmd.data()); if (!f) err("Error: could not execute filter %s\n",cmd.data());
} }
...@@ -1779,7 +1779,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1779,7 +1779,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
<SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ { <SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
g_blockName=&yytext[1]; g_blockName=QCString(&yytext[1]).stripWhiteSpace();
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */ <SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */
...@@ -1789,7 +1789,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1789,7 +1789,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipCComment); BEGIN(SkipCComment);
} }
} }
<SkipCComment,SkipVerbatim>[^*\x06\n\/]+ { <SkipCComment,SkipVerbatim>[^*\\@\x06\n\/]+ {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
} }
<SkipCComment,SkipVerbatim>\n { <SkipCComment,SkipVerbatim>\n {
...@@ -2235,7 +2235,7 @@ void preprocessFile(const char *fileName,BufStr &output) ...@@ -2235,7 +2235,7 @@ void preprocessFile(const char *fileName,BufStr &output)
} }
else else
{ {
QCString cmd = inputFilter+" \""+fileName+"\""; QCString cmd = "\"" + inputFilter+"\" \""+fileName+"\"";
preYYin = popen(cmd,"r"); preYYin = popen(cmd,"r");
if (!preYYin) if (!preYYin)
{ {
......
...@@ -18,13 +18,31 @@ ...@@ -18,13 +18,31 @@
#ifndef SCANNER_H #ifndef SCANNER_H
#define SCANNER_H #define SCANNER_H
#include "parserintf.h"
/** \brief C-like language parser using state-based lexical scanning.
*
* This is the language parser for doxygen. It is somewhat fuzzy and
* supports C++ and various languages that are closely related to C++,
* such as C,C#,Objective-C,Java,PHP,and IDL.
*/
class CLanguageScanner : public ParserInterface
{
public:
void parse(const char *fileName,const char *fileBuf,Entry *root);
void parsePrototype(const char *text);
void handleGroupStartCommand(const char *header);
void handleGroupEndCommand();
};
#if 0
#include "qtbc.h" #include "qtbc.h"
class OutputList; class OutputList;
class Entry; class Entry;
// Public interface provided by the language scanner // Public interface provided by the language scanner
void parseMain(Entry *);
void parseMain(Entry *,const char *fileName); void parseMain(Entry *,const char *fileName);
// Internal callback interface for comment block scanner // Internal callback interface for comment block scanner
...@@ -33,3 +51,5 @@ void handleGroupStartCommand(const char *header); ...@@ -33,3 +51,5 @@ void handleGroupStartCommand(const char *header);
void handleGroupEndCommand(); void handleGroupEndCommand();
#endif #endif
#endif
This diff is collapsed.
...@@ -21,15 +21,24 @@ function readHeader($file) ...@@ -21,15 +21,24 @@ function readHeader($file)
function computeIndex($word) function computeIndex($word)
{ {
if (strlen($word)<2) return -1; $lword = strtolower($word);
$l = strlen($lword);
for ($i=0;$i<$l;$i++)
{
$c = ord($lword{$i});
$v = (($v & 0xfc00) ^ ($v << 6) ^ $c) & 0xffff;
}
return $v;
//if (strlen($word)<2) return -1;
// high char of the index // high char of the index
$hi = ord($word{0}); //$hi = ord($word{0});
if ($hi==0) return -1; //if ($hi==0) return -1;
// low char of the index // low char of the index
$lo = ord($word{1}); //$lo = ord($word{1});
if ($lo==0) return -1; //if ($lo==0) return -1;
// return index // return index
return $hi*256+$lo; //return $hi*256+$lo;
} }
function search($file,$word,&$statsList) function search($file,$word,&$statsList)
......
...@@ -21,15 +21,24 @@ ...@@ -21,15 +21,24 @@
"\n" "\n"
"function computeIndex($word)\n" "function computeIndex($word)\n"
"{\n" "{\n"
" if (strlen($word)<2) return -1;\n" " $lword = strtolower($word);\n"
" $l = strlen($lword);\n"
" for ($i=0;$i<$l;$i++)\n"
" {\n"
" $c = ord($lword{$i});\n"
" $v = (($v & 0xfc00) ^ ($v << 6) ^ $c) & 0xffff;\n"
" }\n"
" return $v;\n"
"\n"
" //if (strlen($word)<2) return -1;\n"
" // high char of the index\n" " // high char of the index\n"
" $hi = ord($word{0});\n" " //$hi = ord($word{0});\n"
" if ($hi==0) return -1;\n" " //if ($hi==0) return -1;\n"
" // low char of the index\n" " // low char of the index\n"
" $lo = ord($word{1});\n" " //$lo = ord($word{1});\n"
" if ($lo==0) return -1;\n" " //if ($lo==0) return -1;\n"
" // return index\n" " // return index\n"
" return $hi*256+$lo;\n" " //return $hi*256+$lo;\n"
"}\n" "}\n"
"\n" "\n"
"function search($file,$word,&$statsList)\n" "function search($file,$word,&$statsList)\n"
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "searchindex.h" #include "searchindex.h"
#include "config.h" #include "config.h"
#include <qfile.h> #include <qfile.h>
#include <ctype.h>
// file format: (all multi-byte values are stored in big endian format) // file format: (all multi-byte values are stored in big endian format)
...@@ -75,15 +76,24 @@ void SearchIndex::setCurrentDoc(const char *name,const char *baseName,const char ...@@ -75,15 +76,24 @@ void SearchIndex::setCurrentDoc(const char *name,const char *baseName,const char
m_urls.insert(m_urlIndex,new URL(name,url)); m_urls.insert(m_urlIndex,new URL(name,url));
} }
static int charsToIndex(const char *word) static int charsToIndex(const char *word)
{ {
if (word==0) return -1; if (word==0) return -1;
uint c1=word[0];
if (c1==0) return -1; register ushort h=0;
uint c2=word[1]; const char *k = word;
if (c2==0) return -1; ushort mask=0xfc00;
return c1*256+c2; while ( *k )
{
h = (h&mask)^(h<<6)^(*k++);
}
//uint c1=word[0];
//if (c1==0) return -1;
//uint c2=word[1];
//if (c2==0) return -1;
//return c1*256+c2;
return h;
} }
void SearchIndex::addWord(const char *word,bool hiPriority) void SearchIndex::addWord(const char *word,bool hiPriority)
...@@ -91,6 +101,7 @@ void SearchIndex::addWord(const char *word,bool hiPriority) ...@@ -91,6 +101,7 @@ void SearchIndex::addWord(const char *word,bool hiPriority)
//printf("SearchIndex::addWord(%s,%d)\n",word,hiPriority); //printf("SearchIndex::addWord(%s,%d)\n",word,hiPriority);
//QString wStr=QString(word).lower(); //QString wStr=QString(word).lower();
QString wStr(word); QString wStr(word);
wStr=wStr.lower();
if (wStr.isEmpty()) return; if (wStr.isEmpty()) return;
IndexWord *w = m_words[wStr]; IndexWord *w = m_words[wStr];
if (w==0) if (w==0)
......
...@@ -54,47 +54,30 @@ const char Translator::ISO88592ToWin1250Tab[] = { ...@@ -54,47 +54,30 @@ const char Translator::ISO88592ToWin1250Tab[] = {
/*! The translation table used by Koi8RToWindows1251() method. */ /*! The translation table used by Koi8RToWindows1251() method. */
Q_UINT16 Translator::Koi8RToWindows1251Tab[128] = const unsigned char Translator::Koi8RToWindows1251Tab[128] =
{ 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, { 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219/**/, 0x221A, 0x2248, 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, 254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, 222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9, 207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218
0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A,
0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A
}; };
/*! The translation table used by Windows1251ToKoi8R() method. */ /*! The translation table used by Windows1251ToKoi8R() method. */
Q_UINT16 Translator::Windows1251ToKoi8RTab[128] = const unsigned char Translator::Windows1251ToKoi8RTab[128] =
{ 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, { 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
0xFFFD, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
}; };
/*! Returns the string converted from windows-1250 to iso-8859-2. */ /*! Returns the string converted from windows-1250 to iso-8859-2. */
/* The method was designed initially for translator_cz.h. /* The method was designed initially for translator_cz.h.
* It is used for on-line encoding conversion related to * It is used for on-line encoding conversion related to
...@@ -155,19 +138,16 @@ QCString Translator::ISO88592ToWin1250(const QCString & sInput) ...@@ -155,19 +138,16 @@ QCString Translator::ISO88592ToWin1250(const QCString & sInput)
QCString Translator::Koi8RToWindows1251( const QCString & sInput ) QCString Translator::Koi8RToWindows1251( const QCString & sInput )
{ {
QString result; QCString result(sInput);
int len = sInput.length(); int len = sInput.length();
result.setUnicode(0, len);
QChar* uc = (QChar*)result.unicode(); // const_cast
const unsigned char * c = (const unsigned char *)(const char*)sInput; const unsigned char * c = (const unsigned char *)(const char*)sInput;
unsigned char *dc = (unsigned char*)(const char*)result;
for( int i=0; i<len; i++ ) { for( int i=0; i<len; i++ ) {
if ( c[i] > 127 ) if ( c[i] > 127 )
uc[i] = Koi8RToWindows1251Tab[c[i]-128]; dc[i] = Koi8RToWindows1251Tab[c[i]-128];
else
uc[i] = c[i];
} }
return result.local8Bit(); return result;
} }
...@@ -176,19 +156,16 @@ QCString Translator::Koi8RToWindows1251( const QCString & sInput ) ...@@ -176,19 +156,16 @@ QCString Translator::Koi8RToWindows1251( const QCString & sInput )
Encoding table got from QT:qtextcodec.cpp */ Encoding table got from QT:qtextcodec.cpp */
QCString Translator::Windows1251ToKoi8R( const QCString & sInput ) QCString Translator::Windows1251ToKoi8R( const QCString & sInput )
{ {
QString result; QCString result(sInput);
int len = sInput.length(); int len = sInput.length();
result.setUnicode(0, len);
QChar* uc = (QChar*)result.unicode(); // const_cast
const unsigned char * c = (const unsigned char *)(const char*)sInput; const unsigned char * c = (const unsigned char *)(const char*)sInput;
unsigned char *dc = (unsigned char*)(const char*)result;
for( int i=0; i<len; i++ ) { for( int i=0; i<len; i++ ) {
if ( c[i] > 127 ) if ( c[i] > 127 )
uc[i] = Windows1251ToKoi8RTab[c[i]-128]; dc[i] = Windows1251ToKoi8RTab[c[i]-128];
else
uc[i] = c[i];
} }
return result.local8Bit(); return result;
} }
/*! returns the caracter converted from hankaku-kana to zenkakukana. /*! returns the caracter converted from hankaku-kana to zenkakukana.
......
...@@ -29,8 +29,8 @@ class Translator ...@@ -29,8 +29,8 @@ class Translator
/* Tables for encoding conversions. */ /* Tables for encoding conversions. */
static const char Win1250ToISO88592Tab[]; static const char Win1250ToISO88592Tab[];
static const char ISO88592ToWin1250Tab[]; static const char ISO88592ToWin1250Tab[];
static Q_UINT16 Koi8RToWindows1251Tab[128]; static const unsigned char Koi8RToWindows1251Tab[128];
static Q_UINT16 Windows1251ToKoi8RTab[128]; static const unsigned char Windows1251ToKoi8RTab[128];
protected: protected:
/*! Returns the string converted from windows-1250 to iso-8859-2. */ /*! Returns the string converted from windows-1250 to iso-8859-2. */
......
This diff is collapsed.
...@@ -99,6 +99,10 @@ ...@@ -99,6 +99,10 @@
// 2005/03/20 Jens Seidel (jensseidel@users.sourceforge.net) // 2005/03/20 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated for "new since 1.4.1" version // - Updated for "new since 1.4.1" version
// //
// 2005/04/09 Jens Seidel (jensseidel@users.sourceforge.net)
// - Changed Todo list translation as suggested in
// http://bugzilla.gnome.org/show_bug.cgi?id=172818
//
// Todo: // Todo:
// - see FIXME // - see FIXME
...@@ -1074,7 +1078,7 @@ class TranslatorGerman : public Translator ...@@ -1074,7 +1078,7 @@ class TranslatorGerman : public Translator
/*! Used as the header of the todo list */ /*! Used as the header of the todo list */
virtual QCString trTodoList() virtual QCString trTodoList()
{ {
return "Liste der zu erledigenden Dinge"; return "Ausstehende Aufgaben";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
......
This diff is collapsed.
This diff is collapsed.
...@@ -141,7 +141,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile) ...@@ -141,7 +141,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile)
} }
fullCmd += " "; fullCmd += " ";
fullCmd += args; fullCmd += args;
Debug::print(Debug::ExtCmd,0,"Executing external command \"%s\"\n",fullCmd.data()); Debug::print(Debug::ExtCmd,0,"Executing external command `%s`\n",fullCmd.data());
#if !defined(_WIN32) || defined(__CYGWIN__) #if !defined(_WIN32) || defined(__CYGWIN__)
isBatchFile=isBatchFile; isBatchFile=isBatchFile;
...@@ -3354,6 +3354,7 @@ bool getScopeDefs(const char *docScope,const char *scope, ...@@ -3354,6 +3354,7 @@ bool getScopeDefs(const char *docScope,const char *scope,
static bool isLowerCase(QCString &s) static bool isLowerCase(QCString &s)
{ {
char *p=s.data(); char *p=s.data();
if (p==0) return TRUE;
int c; int c;
while ((c=*p++)) if (!islower(c)) return FALSE; while ((c=*p++)) if (!islower(c)) return FALSE;
return TRUE; return TRUE;
......
...@@ -805,6 +805,11 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -805,6 +805,11 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
<< md->getDefLine() << "\""; << md->getDefLine() << "\"";
if (md->getStartBodyLine()!=-1) if (md->getStartBodyLine()!=-1)
{ {
FileDef *bodyDef = md->getBodyDef();
if (bodyDef)
{
t << " bodyfile=\"" << bodyDef->absFilePath() << "\"";
}
t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\"" t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\""
<< md->getEndBodyLine() << "\""; << md->getEndBodyLine() << "\"";
} }
...@@ -1220,6 +1225,11 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -1220,6 +1225,11 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
<< cd->getDefLine() << "\""; << cd->getDefLine() << "\"";
if (cd->getStartBodyLine()!=-1) if (cd->getStartBodyLine()!=-1)
{ {
FileDef *bodyDef = cd->getBodyDef();
if (bodyDef)
{
t << " bodyfile=\"" << bodyDef->absFilePath() << "\"";
}
t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\"" t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
<< cd->getEndBodyLine() << "\""; << cd->getEndBodyLine() << "\"";
} }
...@@ -1564,7 +1574,8 @@ static void generateXMLForPage(PageDef *pd,QTextStream &ti,bool isExample) ...@@ -1564,7 +1574,8 @@ static void generateXMLForPage(PageDef *pd,QTextStream &ti,bool isExample)
t << "\" kind=\"" << kindName << "\">" << endl; t << "\" kind=\"" << kindName << "\">" << endl;
t << " <compoundname>" << convertToXML(pd->name()) t << " <compoundname>" << convertToXML(pd->name())
<< "</compoundname>" << endl; << "</compoundname>" << endl;
SectionInfo *si = Doxygen::sectionDict.find(pd->name());
SectionInfo *si = Doxygen::sectionDict.find(pageName);
if (si) if (si)
{ {
t << " <title>" << convertToXML(si->title) << "</title>" << endl; t << " <title>" << convertToXML(si->title) << "</title>" << endl;
......
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