Commit aa9c5319 authored by dimitri's avatar dimitri

Release-1.5.8-20090304

parent 27b5dd5b
DOXYGEN Version 1.5.8-20090129 DOXYGEN Version 1.5.8-20090304
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 (29 January 2009) Dimitri van Heesch (04 March 2009)
DOXYGEN Version 1.5.8_20090129 DOXYGEN Version 1.5.8_20090304
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) (29 January 2009) Dimitri van Heesch (dimitri@stack.nl) (04 March 2009)
...@@ -498,7 +498,7 @@ static QString getStringOption( ...@@ -498,7 +498,7 @@ static QString getStringOption(
bool Expert::htmlOutputPresent(const QString &workingDir) const bool Expert::htmlOutputPresent(const QString &workingDir) const
{ {
bool generateHtml = getBoolOption(m_options,QString::fromAscii("GENERATE_HTML")); bool generateHtml = getBoolOption(m_options,QString::fromAscii("GENERATE_HTML"));
if (!generateHtml) return false; if (!generateHtml || workingDir.isEmpty()) return false;
QString indexFile = getHtmlOutputIndex(workingDir); QString indexFile = getHtmlOutputIndex(workingDir);
QFileInfo fi(indexFile); QFileInfo fi(indexFile);
return fi.exists() && fi.isFile(); return fi.exists() && fi.isFile();
......
...@@ -101,7 +101,7 @@ void InputString::setValue(const QString &s) ...@@ -101,7 +101,7 @@ void InputString::setValue(const QString &s)
{ {
m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>")); m_lab->setText(QString::fromAscii("<qt><font color='red'>")+m_id+QString::fromAscii("</font></qt>"));
} }
if (m_le) m_le->setText( m_str ); if (m_le && m_le->text()!=m_str) m_le->setText( m_str );
emit changed(); emit changed();
} }
} }
......
...@@ -38,7 +38,7 @@ f_app=NO ...@@ -38,7 +38,7 @@ f_app=NO
f_thread=NO f_thread=NO
f_flex=NO f_flex=NO
f_bison=NO f_bison=NO
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,ar,fa,vi,tr f_langs=nl,sv,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,ar,fa,vi,tr,eo
while test -n "$1"; do while test -n "$1"; do
case $1 in case $1 in
...@@ -648,7 +648,7 @@ fi ...@@ -648,7 +648,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,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA,SC,VI,TR")); @allowed=(split(/,/,"NL,SV,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA,SC,VI,TR,EO"));
foreach my $elem (@l){ foreach my $elem (@l){
$elem =~ tr/a-z/A-Z/; $elem =~ tr/a-z/A-Z/;
$r=0; $r=0;
......
...@@ -1219,18 +1219,22 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ...@@ -1219,18 +1219,22 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
If the tag is left blank doxygen will generate a If the tag is left blank doxygen will generate a
standard header. standard header.
The following commands have a special meaning inside the header: The following markers have a special meaning inside the header and footer:
<code>\$title</code>, <code>\$datetime</code>, <code>\$date</code>, <dl>
<code>\$doxygenversion</code>, <code>\$projectname</code>, and <dt><code>\$title</code><dd>will be replaced with the title of the page.
<code>\$projectnumber</code>. <dt><code>\$datetime</code><dd>will be replaced with current the date and time.
Doxygen will replace them by respectively <dt><code>\$date</code><dd>will be replaced with the current date.
the title of the page, the current date and time, only the current date, <dt><code>\$year</code><dd>will be replaces with the current year.
the version number of doxygen, the project name (see \c PROJECT_NAME), or the <dt><code>\$doxygenversion</code><dd>will be replaced with the version of doxygen
project number (see \c PROJECT_NUMBER). <dt><code>\$projectname</code><dd>will be replaced with the name of
the project (see \c PROJECT_NAME)
<dt><code>\$projectnumber</code><dd>will be replaced with the project number
(see \c PROJECT_NUMBER)
<dt><code>\$relpath\$</code><dd>
If \c CREATE_SUBDIRS is enabled, the command <code>\$relpath\$</code> can be If \c CREATE_SUBDIRS is enabled, the command <code>\$relpath\$</code> can be
used to produce a relative path to the root of the HTML output directory, used to produce a relative path to the root of the HTML output directory,
e.g. use \$relpath\$doxygen.css, to refer to the standard style sheet. e.g. use \$relpath\$doxygen.css, to refer to the standard style sheet.
</dl>
See also section \ref doxygen_usage for information on how to generate See also section \ref doxygen_usage for information on how to generate
the default header that doxygen normally uses. the default header that doxygen normally uses.
......
...@@ -70,7 +70,7 @@ In both cases the intermediate *'s are optional, so ...@@ -70,7 +70,7 @@ In both cases the intermediate *'s are optional, so
is also valid. is also valid.
<li> A third alternative is to use a block of at least two C++ comment <li> A third alternative is to use a block of <i>at least two</i> C++ comment
lines, where each line starts with an additional slash or an lines, where each line starts with an additional slash or an
exclamation mark. Here are examples of the two cases: exclamation mark. Here are examples of the two cases:
...@@ -88,6 +88,8 @@ or ...@@ -88,6 +88,8 @@ or
//! //!
\endverbatim \endverbatim
Note that a blank line ends a documentation block in this case.
<li> <li>
Some people like to make their comment blocks more visible in the Some people like to make their comment blocks more visible in the
......
...@@ -23,14 +23,15 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -23,14 +23,15 @@ 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.5.7.1), 37 languages Currently (version 1.5.8), 38 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean Finnish, French, German, Greek, Hungarian, Indonesian, Italian,
(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian,
Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, Persian, Polish, Portuguese, Romanian, Russian, Serbian,
Swedish, Turkish, Ukrainian, and Vietnamese.. SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
and Vietnamese..
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
...@@ -117,6 +118,12 @@ when the translator was updated. ...@@ -117,6 +118,12 @@ when the translator was updated.
<td>dimitri at stack dot nl</td> <td>dimitri at stack dot nl</td>
<td>up-to-date</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff">
<td>Esperanto</td>
<td>Ander Martinez</td>
<td>dwarfnauko at gmail dot com</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Finnish</td> <td>Finnish</td>
<td>Antti Laine</td> <td>Antti Laine</td>
...@@ -223,7 +230,7 @@ when the translator was updated. ...@@ -223,7 +230,7 @@ when the translator was updated.
<td>Romanian</td> <td>Romanian</td>
<td>Ionut Dumitrascu<br>Alexandru Iosup</td> <td>Ionut Dumitrascu<br>Alexandru Iosup</td>
<td>reddumy at yahoo dot com<br>aiosup at yahoo dot com</td> <td>reddumy at yahoo dot com<br>aiosup at yahoo dot com</td>
<td>1.4.1</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Russian</td> <td>Russian</td>
...@@ -257,8 +264,8 @@ when the translator was updated. ...@@ -257,8 +264,8 @@ when the translator was updated.
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Spanish</td> <td>Spanish</td>
<td>Bartomeu<br>Francisco Oltra Thennet</td> <td>Bartomeu<br>Francisco Oltra Thennet<br>David Vaquero</td>
<td>bartomeu at loteria3cornella dot com<br>foltra at puc dot cl</td> <td>bartomeu at loteria3cornella dot com<br>foltra at puc dot cl<br>david at grupoikusnet dot com</td>
<td>up-to-date</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
...@@ -325,6 +332,8 @@ when the translator was updated. ...@@ -325,6 +332,8 @@ when the translator was updated.
\hline \hline
English & Dimitri van Heesch & {\tt\tiny dimitri@stack.nl} & up-to-date \\ English & Dimitri van Heesch & {\tt\tiny dimitri@stack.nl} & up-to-date \\
\hline \hline
Esperanto & Ander Martinez & {\tt\tiny dwarfnauko@gmail.com} & up-to-date \\
\hline
Finnish & Antti Laine & {\tt\tiny antti.a.laine@tut.fi} & up-to-date \\ Finnish & Antti Laine & {\tt\tiny antti.a.laine@tut.fi} & up-to-date \\
\hline \hline
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.5.4 \\ French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.5.4 \\
...@@ -368,7 +377,7 @@ when the translator was updated. ...@@ -368,7 +377,7 @@ when the translator was updated.
\hline \hline
Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\ Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
\hline \hline
Romanian & Ionut Dumitrascu & {\tt\tiny reddumy@yahoo.com} & 1.4.1 \\ Romanian & Ionut Dumitrascu & {\tt\tiny reddumy@yahoo.com} & up-to-date \\
~ & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & ~ \\ ~ & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & ~ \\
\hline \hline
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\ Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\
...@@ -383,6 +392,7 @@ when the translator was updated. ...@@ -383,6 +392,7 @@ when the translator was updated.
\hline \hline
Spanish & Bartomeu & {\tt\tiny bartomeu@loteria3cornella.com} & up-to-date \\ Spanish & Bartomeu & {\tt\tiny bartomeu@loteria3cornella.com} & up-to-date \\
~ & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & ~ \\ ~ & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & ~ \\
~ & David Vaquero & {\tt\tiny david@grupoikusnet.com} & ~ \\
\hline \hline
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.4.6 \\ Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.4.6 \\
\hline \hline
......
...@@ -62,10 +62,10 @@ Just follow these steps: ...@@ -62,10 +62,10 @@ Just follow these steps:
at two places in the script: at two places in the script:
<ol> <ol>
<li>After the <code>f_langs=</code> is statement, in lower case. <li>After the <code>f_langs=</code> is statement, in lower case.
<li>In the string that following <code>@allowed=</code> in upper case. <li>In the string that following <code>\@allowed=</code> in upper case.
</ol> </ol>
The rerun the configure script such that is generates src/lang_cfg.h. The rerun the configure script such that is generates src/lang_cfg.h.
This file should now contain a #define for your language code. This file should now contain a \#define for your language code.
<li>Edit language.cpp: <li>Edit language.cpp:
Add a Add a
\verbatim \verbatim
......
...@@ -45,6 +45,9 @@ Dimitri van Heesch: dimitri@stack.nl ...@@ -45,6 +45,9 @@ Dimitri van Heesch: dimitri@stack.nl
TranslatorEnglish TranslatorEnglish
Dimitri van Heesch: dimitri@stack.nl Dimitri van Heesch: dimitri@stack.nl
TranslatorEsperanto
Ander Martinez: dwarfnauko@gmail.com
TranslatorFinnish TranslatorFinnish
Antti Laine: antti.a.laine@tut.fi Antti Laine: antti.a.laine@tut.fi
...@@ -69,6 +72,7 @@ Alessandro Falappa: alessandro@falappa.net ...@@ -69,6 +72,7 @@ Alessandro Falappa: alessandro@falappa.net
Ahmed Aldo Faisal: aaf23@cam.ac.uk Ahmed Aldo Faisal: aaf23@cam.ac.uk
TranslatorJapanese TranslatorJapanese
Hiroki Iseri: goyoki@gmail.com
Ryunosuke Satoh: sun594@hotmail.com Ryunosuke Satoh: sun594@hotmail.com
Kenji Nagamatsu: naga@joyful.club.ne.jp Kenji Nagamatsu: naga@joyful.club.ne.jp
Iwasa Kazmi: iwasa@cosmo-system.jp Iwasa Kazmi: iwasa@cosmo-system.jp
...@@ -121,6 +125,7 @@ Matja&zcaron; Ostrover&scaron;nik: matjaz.ostroversnik@ostri.org ...@@ -121,6 +125,7 @@ Matja&zcaron; Ostrover&scaron;nik: matjaz.ostroversnik@ostri.org
TranslatorSpanish TranslatorSpanish
Bartomeu: bartomeu@loteria3cornella.com Bartomeu: bartomeu@loteria3cornella.com
Francisco Oltra Thennet: foltra@puc.cl Francisco Oltra Thennet: foltra@puc.cl
David Vaquero: david@grupoikusnet.com
TranslatorSwedish TranslatorSwedish
Mikael Hallin: mikaelhallin@yahoo.se Mikael Hallin: mikaelhallin@yahoo.se
......
(1.5.7.1) (1.5.8)
Doxygen supports the following 37 languages (sorted alphabetically): Doxygen supports the following 38 languages (sorted alphabetically):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean Finnish, French, German, Greek, Hungarian, Indonesian, Italian,
(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian,
Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, Persian, Polish, Portuguese, Romanian, Russian, Serbian,
Swedish, Turkish, Ukrainian, and Vietnamese. SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
and Vietnamese.
Of them, 20 translators are up-to-date, 17 translators are based on
Of them, 22 translators are up-to-date, 16 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -26,16 +27,18 @@ still may be some details listed even for them: ...@@ -26,16 +27,18 @@ still may be some details listed even for them:
TranslatorCzech TranslatorCzech
TranslatorDutch TranslatorDutch
TranslatorEnglish TranslatorEnglish
TranslatorFinnish -- Change the base class to Translator. TranslatorEsperanto
TranslatorFinnish
TranslatorGerman TranslatorGerman
TranslatorItalian TranslatorItalian
TranslatorKorean TranslatorKorean
TranslatorMacedonian TranslatorMacedonian
TranslatorPersian TranslatorPersian
TranslatorRomanian
TranslatorRussian TranslatorRussian
TranslatorSerbianCyrilic TranslatorSerbianCyrilic
TranslatorSerbian TranslatorSerbian
TranslatorSpanish -- Change the base class to Translator. TranslatorSpanish
TranslatorTurkish TranslatorTurkish
TranslatorVietnamese TranslatorVietnamese
...@@ -59,7 +62,6 @@ must be implemented to become up-to-date: ...@@ -59,7 +62,6 @@ must be implemented to become up-to-date:
TranslatorArabic 1.4.6 23 methods to implement TranslatorArabic 1.4.6 23 methods to implement
TranslatorAfrikaans 1.4.6 24 methods to implement TranslatorAfrikaans 1.4.6 24 methods to implement
TranslatorUkrainian 1.4.1 24 methods to implement TranslatorUkrainian 1.4.1 24 methods to implement
TranslatorRomanian 1.4.1 24 methods to implement
TranslatorPortuguese 1.3.3 35 methods to implement TranslatorPortuguese 1.3.3 35 methods to implement
TranslatorSlovak 1.2.18 44 methods to implement TranslatorSlovak 1.2.18 44 methods to implement
...@@ -79,6 +81,7 @@ The situation should be checked. The .cpp files and .h files excluding ...@@ -79,6 +81,7 @@ The situation should be checked. The .cpp files and .h files excluding
the '*translator*' files in doxygen/src directory were simply searched the '*translator*' files in doxygen/src directory were simply searched
for occurence of the method identifiers: for occurence of the method identifiers:
QCString trDCOPMethods()
QCString trFunctionPrototypeDocumentation() QCString trFunctionPrototypeDocumentation()
...@@ -195,12 +198,6 @@ TranslatorDanish (TranslatorAdapter_1_5_4) 22 methods to implement ...@@ -195,12 +198,6 @@ TranslatorDanish (TranslatorAdapter_1_5_4) 22 methods to implement
virtual QCString trSubprogramDocumentation() virtual QCString trSubprogramDocumentation()
TranslatorFinnish (TranslatorEnglish)
-----------------
Implements 216 of the required methods.
TranslatorFrench (TranslatorAdapter_1_5_4) 22 methods to implement TranslatorFrench (TranslatorAdapter_1_5_4) 22 methods to implement
---------------- ----------------
...@@ -600,51 +597,6 @@ TranslatorPortuguese (TranslatorAdapter_1_3_3) 35 methods to implement ...@@ -600,51 +597,6 @@ TranslatorPortuguese (TranslatorAdapter_1_3_3) 35 methods to implement
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorRomanian (TranslatorAdapter_1_4_1) 24 methods to implement
------------------
Implements 192 of the required methods.
Missing methods (should be implemented):
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
virtual QCString trOverloadText()
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, bool single)
virtual QCString trSubprograms()
virtual QCString trModulesListDescription(bool extractAll)
virtual QCString trModulesList()
virtual QCString trTypeConstraints()
virtual QCString trMemberFunctionDocumentationFortran()
virtual QCString trCompoundListDescriptionFortran()
virtual QCString trTypeDocumentation()
virtual QCString trModuleReference(const char * namespaceName)
virtual QCString trModulesMemberDescription(bool extractAll)
virtual QCString trModulesMembers()
virtual QCString trModulesIndex()
virtual QCString trCompoundListFortran()
virtual QCString trDataTypes()
virtual QCString trCompoundIndexFortran()
virtual QCString trSubprogram(bool first_capital, bool singular)
virtual QCString trCallerGraph()
virtual QCString trCompoundReferenceFortran(const char * clName, ClassDef::CompoundType compType, bool isTemplate)
virtual QCString trType(bool first_capital, bool singular)
virtual QCString trModule(bool first_capital, bool singular)
virtual QCString trCompoundMembersFortran()
virtual QCString trSubprogramDocumentation()
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 trNoDescriptionAvailable()
TranslatorSlovak (TranslatorAdapter_1_2_18) 44 methods to implement TranslatorSlovak (TranslatorAdapter_1_2_18) 44 methods to implement
---------------- ----------------
...@@ -743,12 +695,6 @@ TranslatorSlovene (TranslatorAdapter_1_4_6) 24 methods to implement ...@@ -743,12 +695,6 @@ TranslatorSlovene (TranslatorAdapter_1_4_6) 24 methods to implement
virtual QCString trSubprogramDocumentation() virtual QCString trSubprogramDocumentation()
TranslatorSpanish (TranslatorAdapter_1_5_4)
-----------------
Implements 216 of the required methods.
TranslatorSwedish (TranslatorAdapter_1_4_6) 24 methods to implement TranslatorSwedish (TranslatorAdapter_1_4_6) 24 methods to implement
----------------- -----------------
......
...@@ -51,7 +51,7 @@ Here is the list of tags supported by doxygen: ...@@ -51,7 +51,7 @@ Here is the list of tags supported by doxygen:
<li><tt>\<paramref name="paramName"\></tt> Refers to a parameter with name <li><tt>\<paramref name="paramName"\></tt> Refers to a parameter with name
"paramName". Similar to using \ref cmda "\\a". "paramName". Similar to using \ref cmda "\\a".
<li><tt>\<permission\></tt> Identifies the security accessibility of a member. <li><tt>\<permission\></tt> Identifies the security accessibility of a member.
Ignored by doygen. Ignored by doxygen.
<li><tt>\<remarks\></tt> Identifies the detailed description. <li><tt>\<remarks\></tt> Identifies the detailed description.
<li><tt>\<returns\></tt> Marks a piece of text as the return value of a <li><tt>\<returns\></tt> Marks a piece of text as the return value of a
function or method. Similar to using \ref cmdreturn "\\return". function or method. Similar to using \ref cmdreturn "\\return".
......
...@@ -942,8 +942,7 @@ void ClassDef::showUsedFiles(OutputList &ol) ...@@ -942,8 +942,7 @@ void ClassDef::showUsedFiles(OutputList &ol)
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
//if (Config_getBool("SHOW_USED_FILES"))
//{
ol.writeRuler(); ol.writeRuler();
if (fortranOpt) if (fortranOpt)
{ {
...@@ -1018,13 +1017,11 @@ void ClassDef::showUsedFiles(OutputList &ol) ...@@ -1018,13 +1017,11 @@ void ClassDef::showUsedFiles(OutputList &ol)
} }
ol.popGeneratorState(); ol.popGeneratorState();
} }
file=m_impl->files.next(); file=m_impl->files.next();
} }
if (!first) ol.endItemList(); if (!first) ol.endItemList();
//}
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -2752,7 +2749,7 @@ QCString ClassDef::getSourceFileBase() const ...@@ -2752,7 +2749,7 @@ QCString ClassDef::getSourceFileBase() const
} }
else else
{ {
return convertNameToFile(m_impl->fileName+"-source"); return convertNameToFile(m_impl->fileName)+"_source";
} }
} }
......
...@@ -842,7 +842,7 @@ static bool getLinkInScope(const QCString &c, // scope ...@@ -842,7 +842,7 @@ static bool getLinkInScope(const QCString &c, // scope
FileDef *fd; FileDef *fd;
NamespaceDef *nd; NamespaceDef *nd;
GroupDef *gd; GroupDef *gd;
//printf("getLinkInScope: trying `%s'::`%s'\n",c.data(),m.data()); //fprintf(stderr,"getLinkInScope: trying `%s'::`%s'\n",c.data(),m.data());
if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) && if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) &&
md->isLinkable()) md->isLinkable())
{ {
...@@ -862,7 +862,7 @@ static bool getLinkInScope(const QCString &c, // scope ...@@ -862,7 +862,7 @@ static bool getLinkInScope(const QCString &c, // scope
Definition *d = md->getOuterScope()==Doxygen::globalScope ? Definition *d = md->getOuterScope()==Doxygen::globalScope ?
md->getBodyDef() : md->getOuterScope(); md->getBodyDef() : md->getOuterScope();
if (md->getGroupDef()) d = md->getGroupDef(); if (md->getGroupDef()) d = md->getGroupDef();
//printf("d=%p linkable=%d\n",d,d?d->isLinkable():0); //fprintf(stderr,"d=%p linkable=%d\n",d,d?d->isLinkable():0);
if (d && d->isLinkable()) if (d && d->isLinkable())
{ {
g_theCallContext.setClass(stripClassName(md->typeString())); g_theCallContext.setClass(stripClassName(md->typeString()));
...@@ -1009,7 +1009,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, ...@@ -1009,7 +1009,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
} }
else // not a class, maybe a global member else // not a class, maybe a global member
{ {
//printf("class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly); //fprintf(stderr,"class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly);
if (!isLocal && (md!=0 || (cd==0 && !typeOnly))) // not a class, see if it is a global enum/variable/typedef. if (!isLocal && (md!=0 || (cd==0 && !typeOnly))) // not a class, see if it is a global enum/variable/typedef.
{ {
if (md==0) // not found as a typedef if (md==0) // not found as a typedef
...@@ -1032,7 +1032,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, ...@@ -1032,7 +1032,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
} }
if (md) if (md)
{ {
//printf("is a global md=%p g_currentDefinition=%s\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>"); //fprintf(stderr,"is a global md=%p g_currentDefinition=%s linkable=%d\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>",md->isLinkable());
if (md->isLinkable()) if (md->isLinkable())
{ {
ol.linkableSymbol(g_yyLineNr,md->name(),md, ol.linkableSymbol(g_yyLineNr,md->name(),md,
...@@ -1049,6 +1049,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, ...@@ -1049,6 +1049,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
} }
// nothing found, just write out the word // nothing found, just write out the word
//fprintf(stderr,"not found!\n");
ol.linkableSymbol(g_yyLineNr,clName,0, ol.linkableSymbol(g_yyLineNr,clName,0,
g_currentMemberDef?g_currentMemberDef:g_currentDefinition); g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
codifyLines(clName); codifyLines(clName);
...@@ -1085,13 +1086,15 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const ...@@ -1085,13 +1086,15 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ? Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ?
xmd->getBodyDef() : xmd->getOuterScope(); xmd->getBodyDef() : xmd->getOuterScope();
if (xmd->getGroupDef()) xd = xmd->getGroupDef(); if (xmd->getGroupDef()) xd = xmd->getGroupDef();
if (xd) if (xd && xd->isLinkable())
{ {
//printf("g_currentDefiniton=%p g_currentMemberDef=%p xmd=%p g_insideBody=%d\n",g_currentDefinition,g_currentMemberDef,xmd,g_insideBody); //printf("g_currentDefiniton=%p g_currentMemberDef=%p xmd=%p g_insideBody=%d\n",g_currentDefinition,g_currentMemberDef,xmd,g_insideBody);
if (xmd->templateMaster()) xmd = xmd->templateMaster(); if (xmd->templateMaster()) xmd = xmd->templateMaster();
if (xmd->isLinkable())
{
// add usage reference // add usage reference
if (g_currentDefinition && g_currentMemberDef && if (g_currentDefinition && g_currentMemberDef &&
/*xmd!=g_currentMemberDef &&*/ g_insideBody) /*xmd!=g_currentMemberDef &&*/ g_insideBody)
...@@ -1107,6 +1110,7 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const ...@@ -1107,6 +1110,7 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
addToSearchIndex(memName); addToSearchIndex(memName);
return TRUE; return TRUE;
} }
}
return FALSE; return FALSE;
} }
...@@ -2993,6 +2997,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -2993,6 +2997,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
endFontClass(); endFontClass();
BEGIN( g_lastCContext ) ; BEGIN( g_lastCContext ) ;
} }
<SkipCxxComment>[^\r\n]*"\\"[\r]?\n { // line continuation
codifyLines(yytext);
}
<SkipCxxComment>[^\r\n]+ { <SkipCxxComment>[^\r\n]+ {
g_code->codify(yytext); g_code->codify(yytext);
} }
......
...@@ -35,11 +35,11 @@ documentation generated by doxygen is written. Doxygen will use this ...@@ -35,11 +35,11 @@ documentation generated by doxygen is written. Doxygen will use this
information to generate all constant output in the proper language. information to generate all constant output in the proper language.
The default language is English, other supported languages are: The default language is English, other supported languages are:
Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
Spanish, Swedish, and Ukrainian. Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
'> '>
<value name='Afrikaans'/> <value name='Afrikaans'/>
<value name='Arabic'/> <value name='Arabic'/>
...@@ -52,6 +52,8 @@ Spanish, Swedish, and Ukrainian. ...@@ -52,6 +52,8 @@ Spanish, Swedish, and Ukrainian.
<value name='Danish'/> <value name='Danish'/>
<value name='Dutch'/> <value name='Dutch'/>
<value name='English'/> <value name='English'/>
<value name='Esperanto'/>
<value name='Farsi'/>
<value name='Finnish'/> <value name='Finnish'/>
<value name='French'/> <value name='French'/>
<value name='German'/> <value name='German'/>
...@@ -63,7 +65,7 @@ Spanish, Swedish, and Ukrainian. ...@@ -63,7 +65,7 @@ Spanish, Swedish, and Ukrainian.
<value name='Korean'/> <value name='Korean'/>
<value name='Korean-en'/> <value name='Korean-en'/>
<value name='Norwegian'/> <value name='Norwegian'/>
<value name='Farsi'/> <value name='Macedonian'/>
<value name='Persian'/> <value name='Persian'/>
<value name='Polish'/> <value name='Polish'/>
<value name='Portuguese'/> <value name='Portuguese'/>
...@@ -74,7 +76,9 @@ Spanish, Swedish, and Ukrainian. ...@@ -74,7 +76,9 @@ Spanish, Swedish, and Ukrainian.
<value name='Slovene'/> <value name='Slovene'/>
<value name='Spanish'/> <value name='Spanish'/>
<value name='Swedish'/> <value name='Swedish'/>
<value name='Turkish'/>
<value name='Ukrainian'/> <value name='Ukrainian'/>
<value name='Vietnamese'/>
</option> </option>
<option type='bool' id='BRIEF_MEMBER_DESC' docs=' <option type='bool' id='BRIEF_MEMBER_DESC' docs='
If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
...@@ -437,11 +441,6 @@ The appearance of the initializer of individual variables and defines in the ...@@ -437,11 +441,6 @@ The appearance of the initializer of individual variables and defines in the
documentation can be controlled using \showinitializer or \hideinitializer documentation can be controlled using \showinitializer or \hideinitializer
command in the documentation regardless of this setting. command in the documentation regardless of this setting.
' minval='0' maxval='10000' defval='30'/> ' minval='0' maxval='10000' defval='30'/>
<option type='bool' id='SHOW_USED_FILES' docs='
Set the SHOW_USED_FILES tag to NO to disable the list of files generated
at the bottom of the documentation of classes and structs. If set to YES the
list will mention the files that were used to generate the documentation.
' defval='1'/>
<option type='bool' id='SHOW_DIRECTORIES' docs=' <option type='bool' id='SHOW_DIRECTORIES' docs='
If the sources in your project are distributed over multiple directories If the sources in your project are distributed over multiple directories
then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
...@@ -975,6 +974,12 @@ This option is also used when generating formulas in HTML. ...@@ -975,6 +974,12 @@ This option is also used when generating formulas in HTML.
If LATEX_HIDE_INDICES is set to YES then doxygen will not If LATEX_HIDE_INDICES is set to YES then doxygen will not
include the index chapters (such as File Index, Compound Index, etc.) include the index chapters (such as File Index, Compound Index, etc.)
in the output. in the output.
' defval='0' depends='GENERATE_LATEX'/>
<option type='bool' id='LATEX_SOURCE_CODE' docs='
If LATEX_SOURCE_CODE is set to YES then doxygen will include
source code with syntax highlighting in the LaTeX output.
Note that which sources are shown also depends on other settings
such as SOURCE_BROWSER.
' defval='0' depends='GENERATE_LATEX'/> ' defval='0' depends='GENERATE_LATEX'/>
</group> </group>
<group name='RTF' docs='configuration options related to the RTF output'> <group name='RTF' docs='configuration options related to the RTF output'>
...@@ -1367,6 +1372,7 @@ the various graphs. ...@@ -1367,6 +1372,7 @@ the various graphs.
The SEARCHENGINE tag specifies whether or not a search engine should be The SEARCHENGINE tag specifies whether or not a search engine should be
used. If set to NO the values of all tags below this one will be ignored. used. If set to NO the values of all tags below this one will be ignored.
' defval='0'/> ' defval='0'/>
<option type='obsolete' id='SHOW_USED_FILES'/>
<option type='obsolete' id='USE_WINDOWS_ENCODING'/> <option type='obsolete' id='USE_WINDOWS_ENCODING'/>
<option type='obsolete' id='DETAILS_AT_TOP'/> <option type='obsolete' id='DETAILS_AT_TOP'/>
<option type='obsolete' id='QTHELP_FILE'/> <option type='obsolete' id='QTHELP_FILE'/>
......
...@@ -70,11 +70,11 @@ void addConfigOptions(Config *cfg) ...@@ -70,11 +70,11 @@ void addConfigOptions(Config *cfg)
"information to generate all constant output in the proper language. \n" "information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n" "The default language is English, other supported languages are: \n"
"Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n" "Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n"
"Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n" "Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, \n"
"Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n" "Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English \n"
"Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n" "messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, \n"
"Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \n" "Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, \n"
"Spanish, Swedish, and Ukrainian.", "Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.",
"English" "English"
); );
ce->addValue("Afrikaans"); ce->addValue("Afrikaans");
...@@ -88,6 +88,8 @@ void addConfigOptions(Config *cfg) ...@@ -88,6 +88,8 @@ void addConfigOptions(Config *cfg)
ce->addValue("Danish"); ce->addValue("Danish");
ce->addValue("Dutch"); ce->addValue("Dutch");
ce->addValue("English"); ce->addValue("English");
ce->addValue("Esperanto");
ce->addValue("Farsi");
ce->addValue("Finnish"); ce->addValue("Finnish");
ce->addValue("French"); ce->addValue("French");
ce->addValue("German"); ce->addValue("German");
...@@ -99,7 +101,7 @@ void addConfigOptions(Config *cfg) ...@@ -99,7 +101,7 @@ void addConfigOptions(Config *cfg)
ce->addValue("Korean"); ce->addValue("Korean");
ce->addValue("Korean-en"); ce->addValue("Korean-en");
ce->addValue("Norwegian"); ce->addValue("Norwegian");
ce->addValue("Farsi"); ce->addValue("Macedonian");
ce->addValue("Persian"); ce->addValue("Persian");
ce->addValue("Polish"); ce->addValue("Polish");
ce->addValue("Portuguese"); ce->addValue("Portuguese");
...@@ -110,7 +112,9 @@ void addConfigOptions(Config *cfg) ...@@ -110,7 +112,9 @@ void addConfigOptions(Config *cfg)
ce->addValue("Slovene"); ce->addValue("Slovene");
ce->addValue("Spanish"); ce->addValue("Spanish");
ce->addValue("Swedish"); ce->addValue("Swedish");
ce->addValue("Turkish");
ce->addValue("Ukrainian"); ce->addValue("Ukrainian");
ce->addValue("Vietnamese");
//---- //----
cb = cfg->addBool( cb = cfg->addBool(
"BRIEF_MEMBER_DESC", "BRIEF_MEMBER_DESC",
...@@ -315,7 +319,7 @@ void addConfigOptions(Config *cfg) ...@@ -315,7 +319,7 @@ void addConfigOptions(Config *cfg)
"the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, \n" "the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, \n"
"Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat \n" "Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat \n"
".inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), \n" ".inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), \n"
"use: inc=Fortran f=C" "use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen."
); );
//---- //----
cb = cfg->addBool( cb = cfg->addBool(
...@@ -1448,6 +1452,13 @@ void addConfigOptions(Config *cfg) ...@@ -1448,6 +1452,13 @@ void addConfigOptions(Config *cfg)
FALSE FALSE
); );
cb->addDependency("GENERATE_LATEX"); cb->addDependency("GENERATE_LATEX");
//----
cb = cfg->addBool(
"LATEX_SOURCE_CODE",
"If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.",
FALSE
);
cb->addDependency("GENERATE_LATEX");
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
cfg->addInfo("RTF","configuration options related to the RTF output"); cfg->addInfo("RTF","configuration options related to the RTF output");
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
......
...@@ -361,11 +361,14 @@ void Definition::writeDocAnchorsToTagFile() ...@@ -361,11 +361,14 @@ void Definition::writeDocAnchorsToTagFile()
} }
} }
bool Definition::_docsAlreadyAdded(const QString &doc) bool Definition::_docsAlreadyAdded(const QCString &doc)
{ {
uchar md5_sig[16]; uchar md5_sig[16];
QCString sigStr(33); QCString sigStr(33);
MD5Buffer((const unsigned char *)doc.data(),doc.length(),md5_sig); // to avoid mismatches due to differences in indenting, we first remove
// double whitespaces...
QCString docStr = doc.simplifyWhiteSpace();
MD5Buffer((const unsigned char *)docStr.data(),docStr.length(),md5_sig);
MD5SigToString(md5_sig,sigStr.data(),33); MD5SigToString(md5_sig,sigStr.data(),33);
if (m_impl->docSignatures.find(sigStr)==-1) // new docs, add signature to prevent re-adding it if (m_impl->docSignatures.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
{ {
...@@ -644,10 +647,12 @@ static bool readCodeFragment(const char *fileName, ...@@ -644,10 +647,12 @@ static bool readCodeFragment(const char *fileName,
/*! Write a reference to the source code defining this definition */ /*! Write a reference to the source code defining this definition */
void Definition::writeSourceDef(OutputList &ol,const char *) void Definition::writeSourceDef(OutputList &ol,const char *)
{ {
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
makeResident(); makeResident();
ol.pushGeneratorState(); ol.pushGeneratorState();
//printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
if (Config_getBool("SOURCE_BROWSER") && if (sourceBrowser &&
m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef) m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef)
{ {
QCString refText = theTranslator->trDefinedAtLineInSourceFile(); QCString refText = theTranslator->trDefinedAtLineInSourceFile();
...@@ -663,29 +668,49 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ...@@ -663,29 +668,49 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{ {
// write text left from linePos marker // write text left from linePos marker
ol.parseText(refText.left(lineMarkerPos)); ol.parseText(refText.left(lineMarkerPos));
ol.disableAllBut(OutputGenerator::Html); ol.pushGeneratorState();
// write line link (HTML only) ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write line link (HTML, LaTeX optionally)
ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
anchorStr,lineStr); anchorStr,lineStr);
ol.enableAll(); ol.enableAll();
ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html);
// write normal text (Latex/Man only) if (latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write normal text (Man/RTF, Latex optionally)
ol.docify(lineStr); ol.docify(lineStr);
ol.enableAll(); ol.popGeneratorState();
// write text between markers // write text between markers
ol.parseText(refText.mid(lineMarkerPos+2, ol.parseText(refText.mid(lineMarkerPos+2,
fileMarkerPos-lineMarkerPos-2)); fileMarkerPos-lineMarkerPos-2));
ol.disableAllBut(OutputGenerator::Html); ol.pushGeneratorState();
// write file link (HTML only) ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write line link (HTML, LaTeX optionally)
ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
0,m_impl->body->fileDef->name()); 0,m_impl->body->fileDef->name());
ol.enableAll(); ol.enableAll();
ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html);
// write normal text (Latex/Man only) if (latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write normal text (Man/RTF, Latex optionally)
ol.docify(m_impl->body->fileDef->name()); ol.docify(m_impl->body->fileDef->name());
ol.enableAll(); ol.popGeneratorState();
// write text right from file marker // write text right from file marker
ol.parseText(refText.right( ol.parseText(refText.right(
...@@ -695,29 +720,50 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ...@@ -695,29 +720,50 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{ {
// write text left from file marker // write text left from file marker
ol.parseText(refText.left(fileMarkerPos)); ol.parseText(refText.left(fileMarkerPos));
ol.disableAllBut(OutputGenerator::Html); ol.pushGeneratorState();
ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write file link (HTML only) // write file link (HTML only)
ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
0,m_impl->body->fileDef->name()); 0,m_impl->body->fileDef->name());
ol.enableAll(); ol.enableAll();
ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html);
if (latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write normal text (Latex/Man only) // write normal text (Latex/Man only)
ol.docify(m_impl->body->fileDef->name()); ol.docify(m_impl->body->fileDef->name());
ol.enableAll(); ol.popGeneratorState();
// write text between markers // write text between markers
ol.parseText(refText.mid(fileMarkerPos+2, ol.parseText(refText.mid(fileMarkerPos+2,
lineMarkerPos-fileMarkerPos-2)); lineMarkerPos-fileMarkerPos-2));
ol.pushGeneratorState();
ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
if (!latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
// write line link (HTML only) // write line link (HTML only)
ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
anchorStr,lineStr); anchorStr,lineStr);
ol.enableAll(); ol.enableAll();
ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html);
if (latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write normal text (Latex/Man only) // write normal text (Latex/Man only)
ol.docify(lineStr); ol.docify(lineStr);
ol.enableAll(); ol.popGeneratorState();
// write text right from linePos marker // write text right from linePos marker
ol.parseText(refText.right( ol.parseText(refText.right(
......
...@@ -335,7 +335,7 @@ class Definition : public DefinitionIntf, public LockableObj ...@@ -335,7 +335,7 @@ class Definition : public DefinitionIntf, public LockableObj
void _setBriefDescription(const char *b,const char *briefFile,int briefLine); void _setBriefDescription(const char *b,const char *briefFile,int briefLine);
void _setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace,bool atTop); void _setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace,bool atTop);
void _setInbodyDocumentation(const char *d,const char *docFile,int docLine); void _setInbodyDocumentation(const char *d,const char *docFile,int docLine);
bool _docsAlreadyAdded(const QString &doc); bool _docsAlreadyAdded(const QCString &doc);
DefinitionImpl *m_impl; // internal structure holding all private data DefinitionImpl *m_impl; // internal structure holding all private data
QCString m_name; QCString m_name;
bool m_isSymbol; bool m_isSymbol;
......
...@@ -10418,8 +10418,15 @@ void generateOutput() ...@@ -10418,8 +10418,15 @@ void generateOutput()
delete tag; delete tag;
} }
if (Config_getBool("GENERATE_HTML") && Config_getBool("DOT_CLEANUP")) removeDoxFont(Config_getString("HTML_OUTPUT")); if (Config_getBool("DOT_CLEANUP"))
if (Config_getBool("GENERATE_RTF") && Config_getBool("DOT_CLEANUP")) removeDoxFont(Config_getString("RTF_OUTPUT")); {
if (Config_getBool("GENERATE_HTML"))
removeDoxFont(Config_getString("HTML_OUTPUT"));
if (Config_getBool("GENERATE_RTF"))
removeDoxFont(Config_getString("RTF_OUTPUT"));
if (Config_getBool("GENERATE_LATEX"))
removeDoxFont(Config_getString("LATEX_OUTPUT"));
}
if (Config_getBool("GENERATE_XML")) if (Config_getBool("GENERATE_XML"))
{ {
......
...@@ -168,7 +168,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) ...@@ -168,7 +168,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{ {
ol.writeRuler(); ol.writeRuler();
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disable(OutputGenerator::Html);
ol.writeAnchor(0,"_details"); ol.writeAnchor(0,"_details");
ol.popGeneratorState(); ol.popGeneratorState();
ol.startGroupHeader(); ol.startGroupHeader();
...@@ -707,13 +707,16 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const ...@@ -707,13 +707,16 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
void FileDef::writeSource(OutputList &ol) void FileDef::writeSource(OutputList &ol)
{ {
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES"); static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
QCString title = docname; QCString title = docname;
if (!fileVersion.isEmpty()) if (!fileVersion.isEmpty())
{ {
title+=(" ("+fileVersion+")"); title+=(" ("+fileVersion+")");
} }
QCString pageTitle = theTranslator->trSourceFile(title); QCString pageTitle = theTranslator->trSourceFile(title);
ol.disableAllBut(OutputGenerator::Html); ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::RTF);
if (!latexSourceCode) ol.disable(OutputGenerator::Latex);
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef()) if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{ {
...@@ -728,16 +731,18 @@ void FileDef::writeSource(OutputList &ol) ...@@ -728,16 +731,18 @@ void FileDef::writeSource(OutputList &ol)
else else
{ {
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE); startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
startTitle(ol,0); startTitle(ol,getSourceFileBase());
ol.parseText(title); ol.parseText(title);
endTitle(ol,0,0); endTitle(ol,getSourceFileBase(),0);
} }
if (isLinkable()) if (isLinkable())
{ {
if (latexSourceCode) ol.disable(OutputGenerator::Latex);
ol.startTextLink(getOutputFileBase(),0); ol.startTextLink(getOutputFileBase(),0);
ol.parseText(theTranslator->trGotoDocumentation()); ol.parseText(theTranslator->trGotoDocumentation());
ol.endTextLink(); ol.endTextLink();
if (latexSourceCode) ol.enable(OutputGenerator::Latex);
} }
ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension()); ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
...@@ -1444,7 +1449,7 @@ QCString FileDef::getSourceFileBase() const ...@@ -1444,7 +1449,7 @@ QCString FileDef::getSourceFileBase() const
} }
else else
{ {
return convertNameToFile(diskname+"-source"); return convertNameToFile(diskname)+"_source";
} }
} }
...@@ -1457,7 +1462,7 @@ QCString FileDef::includeName() const ...@@ -1457,7 +1462,7 @@ QCString FileDef::includeName() const
} }
else else
{ {
return convertNameToFile(diskname+"-source"); return convertNameToFile(diskname)+"_source";
} }
} }
......
...@@ -279,9 +279,9 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA ...@@ -279,9 +279,9 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
if(indexEnd<0){ // ----- no ampersand as line continuation if(indexEnd<0){ // ----- no ampersand as line continuation
if(YY_START == Prepass) { // last line in "continuation" if(YY_START == Prepass) { // last line in "continuation"
inputStringPrepass+=(const char*)yytext;
if(indexStart>=0) inputStringPrepass[yyleng-indexStart]=' '; // Only take input after initial ampersand
// @todo: remove all symbols instead of replacing W blank? inputStringPrepass+=(const char*)(yytext+(indexStart+1));
pushBuffer(inputStringPrepass); pushBuffer(inputStringPrepass);
yy_pop_state(); yy_pop_state();
...@@ -296,12 +296,14 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA ...@@ -296,12 +296,14 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
yy_push_state(Prepass); yy_push_state(Prepass);
} }
inputStringPrepass+=(const char*)yytext; int length = inputStringPrepass.length();
// Only take input after initial ampersand
inputStringPrepass+=(const char*)(yytext+(indexStart+1));
lineCountPrepass ++; lineCountPrepass ++;
// replace & with space and remove following comment if present // cut off & and remove following comment if present
int length = inputStringPrepass.length(); truncatePrepass(length+indexEnd-(indexStart+1));
truncatePrepass(length-yyleng+indexEnd);
} }
} }
...@@ -850,26 +852,39 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length) ...@@ -850,26 +852,39 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length)
for(int i=0; i<length && parseState!=Comment; i++) for(int i=0; i<length && parseState!=Comment; i++)
{ {
// When in string, skip backslashes
// Legacy code, not sure whether this is correct?
if(parseState==String) if(parseState==String)
{ {
if(buf[i]=='\\') i++; if(buf[i]=='\\') i++;
}
switch(buf[i])
{
case '\'':
case '"':
// Close string, if quote symbol matches.
// Quote symbol is set iff parseState==String
if(buf[i]==quoteSymbol) if(buf[i]==quoteSymbol)
{ {
parseState = Start; parseState = Start;
quoteSymbol = 0; quoteSymbol = 0;
} }
} else // not in string // Start new string, if not already in string or comment
else if(parseState==Start)
{ {
switch(buf[i])
{
case '\'':
case '"':
parseState = String; parseState = String;
quoteSymbol = buf[i]; quoteSymbol = buf[i];
}
ampIndex = -1; // invalidate prev ampersand
break; break;
case '!': case '!':
// When in string or comment, ignore exclamation mark
if(parseState==Start)
{
parseState = Comment; parseState = Comment;
commentIndex = i; commentIndex = i;
}
break; break;
case ' ': // ignore whitespace case ' ': // ignore whitespace
case '\t': case '\t':
...@@ -882,7 +897,6 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length) ...@@ -882,7 +897,6 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length)
ampIndex = -1; // invalidate prev ampersand ampIndex = -1; // invalidate prev ampersand
} }
} }
}
if (ampIndex>=0) if (ampIndex>=0)
return ampIndex; return ampIndex;
...@@ -903,8 +917,7 @@ void truncatePrepass(int index) ...@@ -903,8 +917,7 @@ void truncatePrepass(int index)
comments.append(c); comments.append(c);
} }
} }
inputStringPrepass[index] = ' '; inputStringPrepass.truncate(index);
inputStringPrepass.truncate(index+1);
} }
// simplified way to know if this is fixed form // simplified way to know if this is fixed form
......
#define LANG_NL #define LANG_NL
#define LANG_SE #define LANG_SV
#define LANG_CZ #define LANG_CZ
#define LANG_FR #define LANG_FR
#define LANG_ID #define LANG_ID
...@@ -34,3 +34,4 @@ ...@@ -34,3 +34,4 @@
#define LANG_FA #define LANG_FA
#define LANG_VI #define LANG_VI
#define LANG_TR #define LANG_TR
#define LANG_EO
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
#ifdef LANG_NL #ifdef LANG_NL
#include "translator_nl.h" #include "translator_nl.h"
#endif #endif
#ifdef LANG_SE #ifdef LANG_SV
#include "translator_se.h" #include "translator_sv.h"
#endif #endif
#ifdef LANG_CZ #ifdef LANG_CZ
#include "translator_cz.h" #include "translator_cz.h"
...@@ -53,6 +53,9 @@ ...@@ -53,6 +53,9 @@
#ifdef LANG_ES #ifdef LANG_ES
#include "translator_es.h" #include "translator_es.h"
#endif #endif
#ifdef LANG_EO
#include "translator_eo.h"
#endif
#ifdef LANG_FI #ifdef LANG_FI
#include "translator_fi.h" #include "translator_fi.h"
#endif #endif
...@@ -169,7 +172,7 @@ bool setTranslator(const char *langName) ...@@ -169,7 +172,7 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorDutch; theTranslator=new TranslatorDutch;
} }
#endif #endif
#ifdef LANG_SE #ifdef LANG_SV
else if (L_EQUAL("swedish")) else if (L_EQUAL("swedish"))
{ {
theTranslator=new TranslatorDecoder(new TranslatorSwedish); theTranslator=new TranslatorDecoder(new TranslatorSwedish);
...@@ -391,6 +394,12 @@ bool setTranslator(const char *langName) ...@@ -391,6 +394,12 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorTurkish; theTranslator=new TranslatorTurkish;
} }
#endif #endif
#ifdef LANG_EO
else if (L_EQUAL("esperanto"))
{
theTranslator=new TranslatorEsperanto;
}
#endif
#endif // ENGLISH_ONLY #endif // ENGLISH_ONLY
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
...@@ -270,20 +270,35 @@ void LatexDocVisitor::visit(DocStyleChange *s) ...@@ -270,20 +270,35 @@ void LatexDocVisitor::visit(DocStyleChange *s)
void LatexDocVisitor::visit(DocVerbatim *s) void LatexDocVisitor::visit(DocVerbatim *s)
{ {
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
if (m_hide) return; if (m_hide) return;
switch(s->type()) switch(s->type())
{ {
case DocVerbatim::Code: case DocVerbatim::Code:
if (latexSourceCode)
{
m_t << "\n\n\\begin{footnotesize}\\begin{alltt}" << endl;
}
else
{
m_t << "\n\n\\begin{Code}\\begin{verbatim}"; m_t << "\n\n\\begin{Code}\\begin{verbatim}";
}
Doxygen::parserManager->getParser(m_langExt) Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,s->context(),s->text().latin1(), ->parseCode(m_ci,s->context(),s->text().latin1(),
s->isExample(),s->exampleFile()); s->isExample(),s->exampleFile());
if (latexSourceCode)
{
m_t << "\\end{alltt}\\end{footnotesize}" << endl;
}
else
{
m_t << "\\end{verbatim}\n\\end{Code}\n" << endl; m_t << "\\end{verbatim}\n\\end{Code}\n" << endl;
}
break; break;
case DocVerbatim::Verbatim: case DocVerbatim::Verbatim:
m_t << "\n\n\\footnotesize\\begin{verbatim}"; m_t << "\n\n\\begin{footnotesize}\\begin{verbatim}";
m_t << s->text(); m_t << s->text();
m_t << "\\end{verbatim}\n\\normalsize" << endl; m_t << "\\end{verbatim}\n\\end{footnotesize}" << endl;
break; break;
case DocVerbatim::HtmlOnly: case DocVerbatim::HtmlOnly:
case DocVerbatim::XmlOnly: case DocVerbatim::XmlOnly:
......
This diff is collapsed.
...@@ -118,13 +118,13 @@ class LatexGenerator : public OutputGenerator ...@@ -118,13 +118,13 @@ class LatexGenerator : public OutputGenerator
void insertMemberAlign(bool) {} void insertMemberAlign(bool) {}
void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ } void writeRuler() { t << endl << endl; }
void writeAnchor(const char *fileName,const char *name); void writeAnchor(const char *fileName,const char *name);
void startCodeFragment() { t << endl << endl << "\\begin{Code}\\begin{verbatim}"; } void startCodeFragment();
void endCodeFragment() { t << "\\end{verbatim}\n\\end{Code}" << endl; } void endCodeFragment();
void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; } void writeLineNumber(const char *,const char *,const char *,int l);
void startCodeLine() { col=0; } void startCodeLine();
void endCodeLine() { codify("\n"); } void endCodeLine();
void startEmphasis() { t << "{\\em "; } void startEmphasis() { t << "{\\em "; }
void endEmphasis() { t << "}"; } void endEmphasis() { t << "}"; }
void startBold() { t << "\\textbf{"; } void startBold() { t << "\\textbf{"; }
...@@ -138,8 +138,8 @@ class LatexGenerator : public OutputGenerator ...@@ -138,8 +138,8 @@ class LatexGenerator : public OutputGenerator
void endMemberDoc(bool); void endMemberDoc(bool);
void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *); void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
void endDoxyAnchor(const char *,const char *); void endDoxyAnchor(const char *,const char *);
void startCodeAnchor(const char *) {} void startCodeAnchor(const char *);
void endCodeAnchor() {} void endCodeAnchor();
void writeChar(char c); void writeChar(char c);
void writeLatexSpacing() { t << "\\hspace{0.3cm}"; } void writeLatexSpacing() { t << "\\hspace{0.3cm}"; }
void writeStartAnnoItem(const char *type,const char *file, void writeStartAnnoItem(const char *type,const char *file,
...@@ -226,8 +226,8 @@ class LatexGenerator : public OutputGenerator ...@@ -226,8 +226,8 @@ class LatexGenerator : public OutputGenerator
void endConstraintDocs(); void endConstraintDocs();
void endConstraintList(); void endConstraintList();
void startFontClass(const char *) {} void startFontClass(const char *); // {}
void endFontClass() {} void endFontClass(); // {}
void writeCodeAnchor(const char *) {} void writeCodeAnchor(const char *) {}
void linkableSymbol(int,const char *,Definition *,Definition *) {} void linkableSymbol(int,const char *,Definition *,Definition *) {}
...@@ -242,8 +242,10 @@ class LatexGenerator : public OutputGenerator ...@@ -242,8 +242,10 @@ class LatexGenerator : public OutputGenerator
bool firstDescItem; bool firstDescItem;
bool disableLinks; bool disableLinks;
QCString relPath; QCString relPath;
QCString sourceFileName;
int m_indent; int m_indent;
bool templateMemberItem; bool templateMemberItem;
bool m_prettyCode;
}; };
#endif #endif
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
TEMPLATE = libdoxycfg.t TEMPLATE = libdoxycfg.t
CONFIG = console warn_on staticlib $extraopts CONFIG = console warn_on staticlib $extraopts
HEADERS = config.h configoptions.h portable.h HEADERS = config.h configoptions.h portable.h
SOURCES = config.cpp configoptions.cpp portable.cpp SOURCES = config.cpp configoptions.cpp portable.cpp portable_c.c
win32:TMAKE_CXXFLAGS += -DQT_NODLL win32:TMAKE_CXXFLAGS += -DQT_NODLL
win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
INCLUDEPATH += ../qtools INCLUDEPATH += ../qtools
......
...@@ -14,7 +14,6 @@ extern char **environ; ...@@ -14,7 +14,6 @@ extern char **environ;
#include <qglobal.h> #include <qglobal.h>
#include <qdatetime.h> #include <qdatetime.h>
#include <iconv.h>
#if defined(_MSC_VER) || defined(__BORLANDC__) #if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen #define popen _popen
...@@ -369,31 +368,3 @@ int portable_pclose(FILE *stream) ...@@ -369,31 +368,3 @@ int portable_pclose(FILE *stream)
return pclose(stream); return pclose(stream);
} }
void * portable_iconv_open(const char* tocode, const char* fromcode)
{
return iconv_open(tocode,fromcode);
}
size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
char** outbuf, size_t *outbytesleft)
{
// libiconv is a mess. For some platforms/version the prototype of inbuf is
// "const char **", for others it is "char **". C++ requires the proper cast to
// avoid a compile error, that is were the CASTNEEDED is for.
#if ((defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109) && \
!((defined(_OS_MAC_) || defined(Q_OS_MACX) )&& (_LIBICONV_VERSION==0x010B))) \
|| defined(_OS_SOLARIS_) \
|| defined(_OS_NETBSD_) \
)
#define CASTNEEDED(x) (x)
#else
#define CASTNEEDED(x) (char **)(x)
#endif
return iconv((iconv_t)cd,CASTNEEDED(inbuf),inbytesleft,outbuf,outbytesleft);
}
int portable_iconv_close (void *cd)
{
return iconv_close((iconv_t)cd);
}
...@@ -28,10 +28,13 @@ const char * portable_commandExtension(); ...@@ -28,10 +28,13 @@ const char * portable_commandExtension();
bool portable_fileSystemIsCaseSensitive(); bool portable_fileSystemIsCaseSensitive();
FILE * portable_popen(const char *name,const char *type); FILE * portable_popen(const char *name,const char *type);
int portable_pclose(FILE *stream); int portable_pclose(FILE *stream);
void * portable_iconv_open(const char* tocode, const char* fromcode);
size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft, extern "C" {
void * portable_iconv_open(const char* tocode, const char* fromcode);
size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
char* * outbuf, size_t *outbytesleft); char* * outbuf, size_t *outbytesleft);
int portable_iconv_close (void *cd); int portable_iconv_close (void *cd);
}
#endif #endif
......
#include <iconv.h>
// These functions are implemented in a C file, because there are different
// versions of the iconv() prototype, some with a const pointer and some
// without. In C this is just a warning, but in C++ breaks the compilation.
// Looking at the LIBICONV_VERSION is not enough, since for MACOSX the
// const and non-const version exist with the same version of the file.
void * portable_iconv_open(const char* tocode, const char* fromcode)
{
return iconv_open(tocode,fromcode);
}
size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
char** outbuf, size_t *outbytesleft)
{
return iconv((iconv_t)cd,inbuf,inbytesleft,outbuf,outbytesleft);
}
int portable_iconv_close (void *cd)
{
return iconv_close((iconv_t)cd);
}
...@@ -1399,6 +1399,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1399,6 +1399,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
current->objc = insideObjC = yytext[0]=='@';
lineCount() ; lineCount() ;
if (yytext[yyleng-1]=='{') unput('{'); if (yytext[yyleng-1]=='{') unput('{');
if (insidePHP && current->spec&Entry::Abstract) if (insidePHP && current->spec&Entry::Abstract)
...@@ -1476,6 +1477,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1476,6 +1477,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
isTypedef=((QCString)yytext).find("typedef")!=-1; isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::CLASS_SEC ; current->section = Entry::CLASS_SEC ;
current->spec = Entry::Struct; current->spec = Entry::Struct;
current->objc = insideObjC = FALSE;
addType( current ) ; addType( current ) ;
current->type += " struct" ; current->type += " struct" ;
current->fileName = yyFileName; current->fileName = yyFileName;
...@@ -1532,6 +1534,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1532,6 +1534,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
isTypedef=((QCString)yytext).find("typedef")!=-1; isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::CLASS_SEC; current->section = Entry::CLASS_SEC;
current->spec = Entry::Union; current->spec = Entry::Union;
current->objc = insideObjC = FALSE;
addType( current ) ; addType( current ) ;
current->type += " union" ; current->type += " union" ;
current->fileName = yyFileName; current->fileName = yyFileName;
...@@ -1986,12 +1989,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -1986,12 +1989,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
insideCppQuote=FALSE; insideCppQuote=FALSE;
BEGIN(FindMembers); BEGIN(FindMembers);
} }
<FindMembers>{B}*"#" { if (insidePHP) <FindMembers,FindFields>{B}*"#" { if (insidePHP)
REJECT; REJECT;
lastCPPContext = YY_START; lastCPPContext = YY_START;
BEGIN( SkipCPP ) ; BEGIN( SkipCPP ) ;
} }
<FindMembers>{B}*"#"{B}*"define" { if (insidePHP) <FindMembers,FindFields>{B}*"#"{B}*"define" { if (insidePHP)
REJECT; REJECT;
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
BEGIN( Define ); BEGIN( Define );
...@@ -4376,6 +4379,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4376,6 +4379,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
} }
BEGIN( ClassVar ); BEGIN( ClassVar );
} }
<CompoundName>{SCOPENAME}/{BN}*"," { // multiple forward declarations on one line
// e.g. @protocol A,B;
current->reset();
}
<CompoundName>{SCOPENAME} { <CompoundName>{SCOPENAME} {
current->name = yytext ; current->name = yytext ;
lineCount(); lineCount();
...@@ -5246,6 +5253,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -5246,6 +5253,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
/* ------------ Generic rules -------------- */ /* ------------ Generic rules -------------- */
<SkipCxxComment>.*"\\\n" { // line continuation
yyLineNr++;
}
<SkipCxxComment>.*/\n { <SkipCxxComment>.*/\n {
BEGIN( lastCContext ) ; BEGIN( lastCContext ) ;
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -17,19 +17,22 @@ ...@@ -17,19 +17,22 @@
/* /*
* translator_jp.h * translator_jp.h
* * Updates:
* 1.2.5) * 1.2.5)
* First Translation * First Translation
* by Kenji Nagamatsu * by Kenji Nagamatsu
* 1.2.12) * 1.2.12)
* Update and Shift-Jis(_WIN32) * Update and Shift-Jis(_WIN32)
* by Ryunosuke Sato (30-Dec-2001) * by Ryunosuke Sato (30-Dec-2001)
* 1.5.8)
* Translation for 1.5.8.
* by Hiroki Iseri (18-Feb-2009)
*/ */
#ifndef TRANSLATOR_JP_H #ifndef TRANSLATOR_JP_H
#define TRANSLATOR_JP_H #define TRANSLATOR_JP_H
class TranslatorJapanese : public TranslatorAdapter_1_5_4 class TranslatorJapanese : public Translator
{ {
private: private:
/*! The decode() can change euc into sjis */ /*! The decode() can change euc into sjis */
...@@ -1582,5 +1585,188 @@ class TranslatorJapanese : public TranslatorAdapter_1_5_4 ...@@ -1582,5 +1585,188 @@ class TranslatorJapanese : public TranslatorAdapter_1_5_4
virtual QCString trEnumerationValueDocumentation() virtual QCString trEnumerationValueDocumentation()
{ return decode("列挙型"); } { return decode("列挙型"); }
//////////////////////////////////////////////////////////////////////////
// new since 1.5.4 (mainly for Fortran)
//////////////////////////////////////////////////////////////////////////
/*! header that is put before the list of member subprograms (Fortran). */
virtual QCString trMemberFunctionDocumentationFortran()
{ return decode("関数/サブルーチン"); }
/*! This is put above each page as a link to the list of annotated data types (Fortran). */
virtual QCString trCompoundListFortran()
{ return decode("データ型"); }
/*! This is put above each page as a link to all members of compounds (Fortran). */
virtual QCString trCompoundMembersFortran()
{ return decode("データフィールド"); }
/*! This is an introduction to the annotated compound list (Fortran). */
virtual QCString trCompoundListDescriptionFortran()
{ return decode("これはデータ型の一覧です"); }
/*! This is an introduction to the page with all data types (Fortran). */
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
{
QCString result=decode("これは");
result+=decode("フィールドの一覧です。それぞれ");
if (extractAll)
{
result+=decode("が属しているデータ型");
}
result+=decode("の説明へリンクしています。");
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index (Fortran).
*/
virtual QCString trCompoundIndexFortran()
{ return decode("データ型索引"); }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all data types (Fortran).
*/
virtual QCString trTypeDocumentation()
{ return decode("データ型"); }
/*! This is used in the documentation of a file as a header before the
* list of (global) subprograms (Fortran).
*/
virtual QCString trSubprograms()
{ return decode("関数/サブルーチン"); }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for subprograms (Fortran)
*/
virtual QCString trSubprogramDocumentation()
{ return decode("関数/サブルーチン"); }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds (Fortran)
*/
virtual QCString trDataTypes()
{ return decode("データ型"); }
/*! used as the title of page containing all the index of all modules (Fortran). */
virtual QCString trModulesList()
{ return decode("モジュール一覧"); }
/*! used as an introduction to the modules list (Fortran) */
virtual QCString trModulesListDescription(bool extractAll)
{
QCString result=decode("これは");
if (!extractAll) result+=decode("生成された");
result+=decode("モジュール一覧です");
return result;
}
/*! used as the title of the HTML page of a module/type (Fortran) */
virtual QCString trCompoundReferenceFortran(const char *clName,
ClassDef::CompoundType compType,
bool isTemplate)
{
QCString result="";
switch(compType)
{
case ClassDef::Class: result+=decode("モジュール "); break;
case ClassDef::Struct: result+=decode("TYPE "); break;
case ClassDef::Union: result+=decode("共用体 "); break;
case ClassDef::Interface: result+=decode("インターフェース "); break;
case ClassDef::Protocol: result+=decode("プロトコル "); break;
case ClassDef::Category: result+=decode("カテゴリ "); break;
case ClassDef::Exception: result+=decode("例外 "); break;
}
if (isTemplate) result += decode("テンプレート ");
result+=(QCString)clName;
return result;
}
/*! used as the title of the HTML page of a module (Fortran) */
virtual QCString trModuleReference(const char *namespaceName)
{
QCString result=namespaceName;
result+=decode("モジュール");
return result;
}
/*! This is put above each page as a link to all members of modules. (Fortran) */
virtual QCString trModulesMembers()
{ return decode("モジュールメンバ"); }
/*! This is an introduction to the page with all modules members (Fortran) */
virtual QCString trModulesMemberDescription(bool extractAll)
{
QCString result=decode("これはモジュールメンバ一覧です。それぞれ ");
if (extractAll)
{
result+=decode("属しているモジュール");
}
result+=decode("の説明へリンクしています。");
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all modules (Fortran).
*/
virtual QCString trModulesIndex()
{ return decode("モジュール索引"); }
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trModule(bool /*first_capital*/, bool /*singular*/)
{
return decode("モジュール");
}
/*! This is put at the bottom of a module documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
bool /*single*/)
{ // here s is one of " Module", " Struct" or " Union"
// single is true implies a single file
QCString result="";
switch(compType)
{
case ClassDef::Class: result+=decode("モジュール"); break;
case ClassDef::Struct: result+=decode("TYPE"); break;
case ClassDef::Union: result+=decode("共用体"); break;
case ClassDef::Interface: result+=decode("インターフェース"); break;
case ClassDef::Protocol: result+=decode("プロトコル"); break;
case ClassDef::Category: result+=decode("カテゴリ"); break;
case ClassDef::Exception: result+=decode("例外"); break;
}
result+=decode(decode("の説明は次のファイルから生成されました:"));
return result;
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trType(bool /*first_capital*/, bool /*singular*/)
{
QCString result = decode("TYPE");
return result;
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trSubprogram(bool /*first_capital*/, bool /*singular*/)
{
QCString result = decode("サブプログラム");
return result;
}
/*! C# Type Constraint list */
virtual QCString trTypeConstraints()
{
return decode("型制約");
}
}; };
#endif #endif
...@@ -69,7 +69,7 @@ Problem! ...@@ -69,7 +69,7 @@ Problem!
#ifndef TRANSLATOR_SE_H #ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H #define TRANSLATOR_SE_H
class TranslatorSwedish : public TranslatorAdapter_1_4_6 class TranslatorSwedish : public Translator
{ {
public: public:
...@@ -1431,6 +1431,231 @@ class TranslatorSwedish : public TranslatorAdapter_1_4_6 ...@@ -1431,6 +1431,231 @@ class TranslatorSwedish : public TranslatorAdapter_1_4_6
"argument den tar emot."; "argument den tar emot.";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.4.6
//////////////////////////////////////////////////////////////////////////
/*! This is used to introduce a caller (or called-by) graph */
virtual QCString trCallerGraph()
{
return "Hr r katalog-grafen fr denna funktion:";
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{
return "Upprknings-dokumentation";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.5.4 (mainly for Fortran)
//////////////////////////////////////////////////////////////////////////
/*! header that is put before the list of member subprograms (Fortran). */
virtual QCString trMemberFunctionDocumentationFortran()
{ return "Memlems-function/Subroutins Dokumentation"; }
/*! This is put above each page as a link to the list of annotated data types (Fortran). */
virtual QCString trCompoundListFortran()
{ return "Datatyplista"; }
/*! This is put above each page as a link to all members of compounds (Fortran). */
virtual QCString trCompoundMembersFortran()
{ return "Data flt"; }
/*! This is an introduction to the annotated compound list (Fortran). */
virtual QCString trCompoundListDescriptionFortran()
{ return "Hr r datatyperna med en kort beskrivning:"; }
/*! This is an introduction to the page with all data types (Fortran). */
virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
{
QCString result="Hr r en lista av alla ";
if (!extractAll)
{
result+="dokumenterade ";
}
result+="datatyps medlemmar";
result+=" med lnkar till ";
if (!extractAll)
{
result+="datastrukturs documentation fr varje medlem";
}
else
{
result+="klasserna de hr till:";
}
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index (Fortran).
*/
virtual QCString trCompoundIndexFortran()
{ return "Datatyps Index"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all data types (Fortran).
*/
virtual QCString trTypeDocumentation()
{ return "Dataryps Dokumentation"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) subprograms (Fortran).
*/
virtual QCString trSubprograms()
{ return "Funktions/Subroutins"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for subprograms (Fortran)
*/
virtual QCString trSubprogramDocumentation()
{ return "Funktion/Subroutin Dokumentation"; }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds (Fortran)
*/
virtual QCString trDataTypes()
{ return "Datatyper"; }
/*! used as the title of page containing all the index of all modules (Fortran). */
virtual QCString trModulesList()
{ return "Modullista"; }
/*! used as an introduction to the modules list (Fortran) */
virtual QCString trModulesListDescription(bool extractAll)
{
QCString result="Hr r en lista p alla ";
if (!extractAll) result+="dokumenterade ";
result+="moduler med en kort beskrivning:";
return result;
}
/*! used as the title of the HTML page of a module/type (Fortran) */
virtual QCString trCompoundReferenceFortran(const char *clName,
ClassDef::CompoundType compType,
bool isTemplate)
{
QCString result=(QCString)clName;
switch(compType)
{
case ClassDef::Class: result+=" Modul"; break;
case ClassDef::Struct: result+=" Typ"; break;
case ClassDef::Union: result+=" Union"; break;
case ClassDef::Interface: result+=" Grnssnitt"; break;
case ClassDef::Protocol: result+=" Protokoll"; break;
case ClassDef::Category: result+=" Kategori"; break;
case ClassDef::Exception: result+=" Undantag"; break;
}
if (isTemplate) result+=" Mall";
result+=" Referens";
return result;
}
/*! used as the title of the HTML page of a module (Fortran) */
virtual QCString trModuleReference(const char *namespaceName)
{
QCString result=namespaceName;
result+=" Modul Referens";
return result;
}
/*! This is put above each page as a link to all members of modules. (Fortran) */
virtual QCString trModulesMembers()
{ return "Modul Medlemmar"; }
/*! This is an introduction to the page with all modules members (Fortran) */
virtual QCString trModulesMemberDescription(bool extractAll)
{
QCString result="Hr r en lista p alla ";
if (!extractAll) result+="documented ";
result+="modul medlemmar med lnkar till ";
if (extractAll)
{
result+="modul dokumentationen fr varje medlem:";
}
else
{
result+="modulerna de hr till:";
}
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all modules (Fortran).
*/
virtual QCString trModulesIndex()
{ return "Modul Index"; }
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trModule(bool first_capital, bool singular)
{
return createNoun(first_capital, singular, "modul", "er");
}
/*! This is put at the bottom of a module documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
bool single)
{
// single is true implies a single file
QCString result=(QCString)"Dokumentationen fr denna ";
switch(compType)
{
case ClassDef::Class: result+="modul"; break;
case ClassDef::Struct: result+="typ"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="grnssnitt"; break;
case ClassDef::Protocol: result+="protokoll"; break;
case ClassDef::Category: result+="kategori"; break;
case ClassDef::Exception: result+="undantag"; break;
}
result+=" genererades frn fljade fil";
if (single) result+=":"; else result+="er:";
return result;
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trType(bool first_capital, bool singular)
{
return createNoun(first_capital, singular, "typ", "er");
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trSubprogram(bool first_capital, bool /*singular*/)
{
QCString result((first_capital ? "Subprogram" : "subprogram"));
return result;
}
/*! C# Type Constraint list */
virtual QCString trTypeConstraints()
{
return "Typbegrnsningar";
}
/*---------- For internal use: ----------------------------------------*/
protected:
/*! For easy flexible-noun implementation.
* \internal
*/
QCString createNoun(bool first_capital, bool singular,
const char* base, const char* plurSuffix)
{
QCString result(base);
if (first_capital) result.at(0) = toupper(result.at(0));
if (!singular) result+=plurSuffix;
return result;
}
}; };
......
...@@ -1426,6 +1426,10 @@ ALLID [^;()\t ] ...@@ -1426,6 +1426,10 @@ ALLID [^;()\t ]
line=line.left(pos); line=line.left(pos);
} }
comment.stripWhiteSpace(); comment.stripWhiteSpace();
// must subtract "(" and ")" in comments because they are used for determining the
// end of a port/generic construct
openCount-=comment.contains('(');
closeCount-=comment.contains(')');
if (!comment.stripPrefix("!")) // not a special comment if (!comment.stripPrefix("!")) // not a special comment
{ {
comment.resize(0); comment.resize(0);
......
...@@ -564,7 +564,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -564,7 +564,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
// enum values are written as part of the enum // enum values are written as part of the enum
if (md->memberType()==MemberDef::EnumValue) return; if (md->memberType()==MemberDef::EnumValue) return;
if (md->isHidden()) return; if (md->isHidden()) return;
if (md->name().at(0)=='@') return; // anonymous member //if (md->name().at(0)=='@') return; // anonymous member
// group members are only visible in their group // group members are only visible in their group
//if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return; //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
......
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