Commit 2ae3ed65 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.5.8-20090304

parent 5f3d8499
DOXYGEN Version 1.5.8-20090129
DOXYGEN Version 1.5.8-20090304
Please read the installation section of the manual
(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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
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(
bool Expert::htmlOutputPresent(const QString &workingDir) const
{
bool generateHtml = getBoolOption(m_options,QString::fromAscii("GENERATE_HTML"));
if (!generateHtml) return false;
if (!generateHtml || workingDir.isEmpty()) return false;
QString indexFile = getHtmlOutputIndex(workingDir);
QFileInfo fi(indexFile);
return fi.exists() && fi.isFile();
......
......@@ -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>"));
}
if (m_le) m_le->setText( m_str );
if (m_le && m_le->text()!=m_str) m_le->setText( m_str );
emit changed();
}
}
......
......@@ -38,7 +38,7 @@ f_app=NO
f_thread=NO
f_flex=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
case $1 in
......@@ -648,7 +648,7 @@ fi
echo -n " Generating src/lang_cfg.h..."
echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>);
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){
$elem =~ tr/a-z/A-Z/;
$r=0;
......
......@@ -1219,18 +1219,22 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
If the tag is left blank doxygen will generate a
standard header.
The following commands have a special meaning inside the header:
<code>\$title</code>, <code>\$datetime</code>, <code>\$date</code>,
<code>\$doxygenversion</code>, <code>\$projectname</code>, and
<code>\$projectnumber</code>.
Doxygen will replace them by respectively
the title of the page, the current date and time, only the current date,
the version number of doxygen, the project name (see \c PROJECT_NAME), or the
project number (see \c PROJECT_NUMBER).
The following markers have a special meaning inside the header and footer:
<dl>
<dt><code>\$title</code><dd>will be replaced with the title of the page.
<dt><code>\$datetime</code><dd>will be replaced with current the date and time.
<dt><code>\$date</code><dd>will be replaced with the current date.
<dt><code>\$year</code><dd>will be replaces with the current year.
<dt><code>\$doxygenversion</code><dd>will be replaced with the version of doxygen
<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
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.
</dl>
See also section \ref doxygen_usage for information on how to generate
the default header that doxygen normally uses.
......
......@@ -70,7 +70,7 @@ In both cases the intermediate *'s are optional, so
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
exclamation mark. Here are examples of the two cases:
......@@ -88,6 +88,8 @@ or
//!
\endverbatim
Note that a blank line ends a documentation block in this case.
<li>
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
than English (the default). The output language is chosen through the
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):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese,
Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish,
Swedish, Turkish, Ukrainian, and Vietnamese..
Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto,
Finnish, French, German, Greek, Hungarian, Indonesian, Italian,
Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian,
Persian, Polish, Portuguese, Romanian, Russian, Serbian,
SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
and Vietnamese..
The table of information related to the supported languages follows.
It is sorted by language alphabetically. The <b>Status</b> column
......@@ -117,6 +118,12 @@ when the translator was updated.
<td>dimitri at stack dot nl</td>
<td>up-to-date</td>
</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">
<td>Finnish</td>
<td>Antti Laine</td>
......@@ -223,7 +230,7 @@ when the translator was updated.
<td>Romanian</td>
<td>Ionut Dumitrascu<br>Alexandru Iosup</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 bgcolor="#ffffff">
<td>Russian</td>
......@@ -257,8 +264,8 @@ when the translator was updated.
</tr>
<tr bgcolor="#ffffff">
<td>Spanish</td>
<td>Bartomeu<br>Francisco Oltra Thennet</td>
<td>bartomeu at loteria3cornella dot com<br>foltra at puc dot cl</td>
<td>Bartomeu<br>Francisco Oltra Thennet<br>David Vaquero</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>
</tr>
<tr bgcolor="#ffffff">
......@@ -325,6 +332,8 @@ when the translator was updated.
\hline
English & Dimitri van Heesch & {\tt\tiny dimitri@stack.nl} & up-to-date \\
\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 \\
\hline
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.5.4 \\
......@@ -368,7 +377,7 @@ when the translator was updated.
\hline
Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
\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} & ~ \\
\hline
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\
......@@ -383,6 +392,7 @@ when the translator was updated.
\hline
Spanish & Bartomeu & {\tt\tiny bartomeu@loteria3cornella.com} & up-to-date \\
~ & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & ~ \\
~ & David Vaquero & {\tt\tiny david@grupoikusnet.com} & ~ \\
\hline
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.4.6 \\
\hline
......
......@@ -62,10 +62,10 @@ Just follow these steps:
at two places in the script:
<ol>
<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>
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:
Add a
\verbatim
......
......@@ -45,6 +45,9 @@ Dimitri van Heesch: dimitri@stack.nl
TranslatorEnglish
Dimitri van Heesch: dimitri@stack.nl
TranslatorEsperanto
Ander Martinez: dwarfnauko@gmail.com
TranslatorFinnish
Antti Laine: antti.a.laine@tut.fi
......@@ -69,6 +72,7 @@ Alessandro Falappa: alessandro@falappa.net
Ahmed Aldo Faisal: aaf23@cam.ac.uk
TranslatorJapanese
Hiroki Iseri: goyoki@gmail.com
Ryunosuke Satoh: sun594@hotmail.com
Kenji Nagamatsu: naga@joyful.club.ne.jp
Iwasa Kazmi: iwasa@cosmo-system.jp
......@@ -121,6 +125,7 @@ Matja&zcaron; Ostrover&scaron;nik: matjaz.ostroversnik@ostri.org
TranslatorSpanish
Bartomeu: bartomeu@loteria3cornella.com
Francisco Oltra Thennet: foltra@puc.cl
David Vaquero: david@grupoikusnet.com
TranslatorSwedish
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
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese,
Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish,
Swedish, Turkish, Ukrainian, and Vietnamese.
Of them, 20 translators are up-to-date, 17 translators are based on
Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto,
Finnish, French, German, Greek, Hungarian, Indonesian, Italian,
Japanese (+En), Korean (+En), Lithuanian, Macedonian, Norwegian,
Persian, Polish, Portuguese, Romanian, Russian, Serbian,
SerbianCyrilic, Slovak, Slovene, Spanish, Swedish, Turkish, Ukrainian,
and Vietnamese.
Of them, 22 translators are up-to-date, 16 translators are based on
some adapter class, and 2 are English based.
----------------------------------------------------------------------
......@@ -26,16 +27,18 @@ still may be some details listed even for them:
TranslatorCzech
TranslatorDutch
TranslatorEnglish
TranslatorFinnish -- Change the base class to Translator.
TranslatorEsperanto
TranslatorFinnish
TranslatorGerman
TranslatorItalian
TranslatorKorean
TranslatorMacedonian
TranslatorPersian
TranslatorRomanian
TranslatorRussian
TranslatorSerbianCyrilic
TranslatorSerbian
TranslatorSpanish -- Change the base class to Translator.
TranslatorSpanish
TranslatorTurkish
TranslatorVietnamese
......@@ -59,7 +62,6 @@ must be implemented to become up-to-date:
TranslatorArabic 1.4.6 23 methods to implement
TranslatorAfrikaans 1.4.6 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
TranslatorSlovak 1.2.18 44 methods to implement
......@@ -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
for occurence of the method identifiers:
QCString trDCOPMethods()
QCString trFunctionPrototypeDocumentation()
......@@ -195,12 +198,6 @@ TranslatorDanish (TranslatorAdapter_1_5_4) 22 methods to implement
virtual QCString trSubprogramDocumentation()
TranslatorFinnish (TranslatorEnglish)
-----------------
Implements 216 of the required methods.
TranslatorFrench (TranslatorAdapter_1_5_4) 22 methods to implement
----------------
......@@ -600,51 +597,6 @@ TranslatorPortuguese (TranslatorAdapter_1_3_3) 35 methods to implement
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
----------------
......@@ -743,12 +695,6 @@ TranslatorSlovene (TranslatorAdapter_1_4_6) 24 methods to implement
virtual QCString trSubprogramDocumentation()
TranslatorSpanish (TranslatorAdapter_1_5_4)
-----------------
Implements 216 of the required methods.
TranslatorSwedish (TranslatorAdapter_1_4_6) 24 methods to implement
-----------------
......
......@@ -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
"paramName". Similar to using \ref cmda "\\a".
<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>\<returns\></tt> Marks a piece of text as the return value of a
function or method. Similar to using \ref cmdreturn "\\return".
......
......@@ -942,89 +942,86 @@ void ClassDef::showUsedFiles(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
//if (Config_getBool("SHOW_USED_FILES"))
//{
ol.writeRuler();
if (fortranOpt)
{
ol.parseText(theTranslator->trGeneratedFromFilesFortran(
ol.writeRuler();
if (fortranOpt)
{
ol.parseText(theTranslator->trGeneratedFromFilesFortran(
m_impl->isObjC && m_impl->compType==Interface ? Class : m_impl->compType,
m_impl->files.count()==1));
}
else
{
ol.parseText(theTranslator->trGeneratedFromFiles(
}
else
{
ol.parseText(theTranslator->trGeneratedFromFiles(
m_impl->isObjC && m_impl->compType==Interface ? Class : m_impl->compType,
m_impl->files.count()==1));
}
}
bool first=TRUE;
const char *file = m_impl->files.first();
while (file)
bool first=TRUE;
const char *file = m_impl->files.first();
while (file)
{
bool ambig;
FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
if (fd)
{
bool ambig;
FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
if (fd)
if (first)
{
if (first)
{
first=FALSE;
ol.startItemList();
}
ol.writeListItem();
QCString path=fd->getPath();
if (Config_getBool("FULL_PATH_NAMES"))
{
ol.docify(stripFromPath(path));
}
QCString fname = fd->name();
if (!fd->getVersion().isEmpty()) // append version if available
{
fname += " (" + fd->getVersion() + ")";
}
first=FALSE;
ol.startItemList();
}
// for HTML
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
if (fd->generateSourceFile())
{
ol.writeObjectLink(0,fd->getSourceFileBase(),0,fname);
}
else if (fd->isLinkable())
{
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
fname);
}
else
{
ol.docify(fname);
}
ol.popGeneratorState();
ol.writeListItem();
QCString path=fd->getPath();
if (Config_getBool("FULL_PATH_NAMES"))
{
ol.docify(stripFromPath(path));
}
// for other output formats
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
if (fd->isLinkable())
{
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
fname);
}
else
{
ol.docify(fname);
}
QCString fname = fd->name();
if (!fd->getVersion().isEmpty()) // append version if available
{
fname += " (" + fd->getVersion() + ")";
}
ol.popGeneratorState();
// for HTML
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
if (fd->generateSourceFile())
{
ol.writeObjectLink(0,fd->getSourceFileBase(),0,fname);
}
else if (fd->isLinkable())
{
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
fname);
}
else
{
ol.docify(fname);
}
ol.popGeneratorState();
// for other output formats
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
if (fd->isLinkable())
{
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
fname);
}
file=m_impl->files.next();
else
{
ol.docify(fname);
}
ol.popGeneratorState();
}
if (!first) ol.endItemList();
//}
file=m_impl->files.next();
}
if (!first) ol.endItemList();
ol.popGeneratorState();
}
......@@ -2752,7 +2749,7 @@ QCString ClassDef::getSourceFileBase() const
}
else
{
return convertNameToFile(m_impl->fileName+"-source");
return convertNameToFile(m_impl->fileName)+"_source";
}
}
......
......@@ -842,7 +842,7 @@ static bool getLinkInScope(const QCString &c, // scope
FileDef *fd;
NamespaceDef *nd;
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) &&
md->isLinkable())
{
......@@ -862,7 +862,7 @@ static bool getLinkInScope(const QCString &c, // scope
Definition *d = md->getOuterScope()==Doxygen::globalScope ?
md->getBodyDef() : md->getOuterScope();
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())
{
g_theCallContext.setClass(stripClassName(md->typeString()));
......@@ -1009,7 +1009,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
}
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 (md==0) // not found as a typedef
......@@ -1032,7 +1032,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
}
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())
{
ol.linkableSymbol(g_yyLineNr,md->name(),md,
......@@ -1049,6 +1049,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
}
// nothing found, just write out the word
//fprintf(stderr,"not found!\n");
ol.linkableSymbol(g_yyLineNr,clName,0,
g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
codifyLines(clName);
......@@ -1085,27 +1086,30 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ?
xmd->getBodyDef() : xmd->getOuterScope();
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);
if (xmd->templateMaster()) xmd = xmd->templateMaster();
// add usage reference
if (g_currentDefinition && g_currentMemberDef &&
/*xmd!=g_currentMemberDef &&*/ g_insideBody)
if (xmd->isLinkable())
{
addDocCrossReference(g_currentMemberDef,xmd);
}
// add usage reference
if (g_currentDefinition && g_currentMemberDef &&
/*xmd!=g_currentMemberDef &&*/ g_insideBody)
{
addDocCrossReference(g_currentMemberDef,xmd);
}
// write the actual link
ol.linkableSymbol(g_yyLineNr,xmd->name(),xmd,
g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
writeMultiLineCodeLink(ol,xmd->getReference(),
xmd->getOutputFileBase(),xmd->anchor(),memName,xmd->briefDescriptionAsTooltip());
addToSearchIndex(memName);
return TRUE;
// write the actual link
ol.linkableSymbol(g_yyLineNr,xmd->name(),xmd,
g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
writeMultiLineCodeLink(ol,xmd->getReference(),
xmd->getOutputFileBase(),xmd->anchor(),memName,xmd->briefDescriptionAsTooltip());
addToSearchIndex(memName);
return TRUE;
}
}
return FALSE;
......@@ -2993,6 +2997,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
endFontClass();
BEGIN( g_lastCContext ) ;
}
<SkipCxxComment>[^\r\n]*"\\"[\r]?\n { // line continuation
codifyLines(yytext);
}
<SkipCxxComment>[^\r\n]+ {
g_code->codify(yytext);
}
......
......@@ -35,11 +35,11 @@ documentation generated by doxygen is written. Doxygen will use this
information to generate all constant output in the proper language.
The default language is English, other supported languages are:
Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,
Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),
Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,
Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene,
Spanish, Swedish, and Ukrainian.
Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
'>
<value name='Afrikaans'/>
<value name='Arabic'/>
......@@ -52,6 +52,8 @@ Spanish, Swedish, and Ukrainian.
<value name='Danish'/>
<value name='Dutch'/>
<value name='English'/>
<value name='Esperanto'/>
<value name='Farsi'/>
<value name='Finnish'/>
<value name='French'/>
<value name='German'/>
......@@ -63,7 +65,7 @@ Spanish, Swedish, and Ukrainian.
<value name='Korean'/>
<value name='Korean-en'/>
<value name='Norwegian'/>
<value name='Farsi'/>
<value name='Macedonian'/>
<value name='Persian'/>
<value name='Polish'/>
<value name='Portuguese'/>
......@@ -74,7 +76,9 @@ Spanish, Swedish, and Ukrainian.
<value name='Slovene'/>
<value name='Spanish'/>
<value name='Swedish'/>
<value name='Turkish'/>
<value name='Ukrainian'/>
<value name='Vietnamese'/>
</option>
<option type='bool' id='BRIEF_MEMBER_DESC' docs='
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
documentation can be controlled using \showinitializer or \hideinitializer
command in the documentation regardless of this setting.
' 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='
If the sources in your project are distributed over multiple directories
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.
If LATEX_HIDE_INDICES is set to YES then doxygen will not
include the index chapters (such as File Index, Compound Index, etc.)
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'/>
</group>
<group name='RTF' docs='configuration options related to the RTF output'>
......@@ -1367,6 +1372,7 @@ the various graphs.
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.
' defval='0'/>
<option type='obsolete' id='SHOW_USED_FILES'/>
<option type='obsolete' id='USE_WINDOWS_ENCODING'/>
<option type='obsolete' id='DETAILS_AT_TOP'/>
<option type='obsolete' id='QTHELP_FILE'/>
......
......@@ -70,11 +70,11 @@ void addConfigOptions(Config *cfg)
"information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n"
"Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n"
"Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \n"
"Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \n"
"Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \n"
"Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \n"
"Spanish, Swedish, and Ukrainian.",
"Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, \n"
"Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English \n"
"messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, \n"
"Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, \n"
"Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.",
"English"
);
ce->addValue("Afrikaans");
......@@ -88,6 +88,8 @@ void addConfigOptions(Config *cfg)
ce->addValue("Danish");
ce->addValue("Dutch");
ce->addValue("English");
ce->addValue("Esperanto");
ce->addValue("Farsi");
ce->addValue("Finnish");
ce->addValue("French");
ce->addValue("German");
......@@ -99,7 +101,7 @@ void addConfigOptions(Config *cfg)
ce->addValue("Korean");
ce->addValue("Korean-en");
ce->addValue("Norwegian");
ce->addValue("Farsi");
ce->addValue("Macedonian");
ce->addValue("Persian");
ce->addValue("Polish");
ce->addValue("Portuguese");
......@@ -110,7 +112,9 @@ void addConfigOptions(Config *cfg)
ce->addValue("Slovene");
ce->addValue("Spanish");
ce->addValue("Swedish");
ce->addValue("Turkish");
ce->addValue("Ukrainian");
ce->addValue("Vietnamese");
//----
cb = cfg->addBool(
"BRIEF_MEMBER_DESC",
......@@ -315,7 +319,7 @@ void addConfigOptions(Config *cfg)
"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"
".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(
......@@ -1448,6 +1452,13 @@ void addConfigOptions(Config *cfg)
FALSE
);
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");
//---------------------------------------------------------------------------
......
......@@ -361,11 +361,14 @@ void Definition::writeDocAnchorsToTagFile()
}
}
bool Definition::_docsAlreadyAdded(const QString &doc)
bool Definition::_docsAlreadyAdded(const QCString &doc)
{
uchar md5_sig[16];
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);
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,
/*! Write a reference to the source code defining this definition */
void Definition::writeSourceDef(OutputList &ol,const char *)
{
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
makeResident();
ol.pushGeneratorState();
//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)
{
QCString refText = theTranslator->trDefinedAtLineInSourceFile();
......@@ -663,29 +668,49 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
// write text left from linePos marker
ol.parseText(refText.left(lineMarkerPos));
ol.disableAllBut(OutputGenerator::Html);
// write line link (HTML only)
ol.pushGeneratorState();
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(),
anchorStr,lineStr);
ol.enableAll();
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.enableAll();
ol.popGeneratorState();
// write text between markers
ol.parseText(refText.mid(lineMarkerPos+2,
fileMarkerPos-lineMarkerPos-2));
ol.disableAllBut(OutputGenerator::Html);
// write file link (HTML only)
ol.pushGeneratorState();
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(),
0,m_impl->body->fileDef->name());
ol.enableAll();
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.enableAll();
ol.popGeneratorState();
// write text right from file marker
ol.parseText(refText.right(
......@@ -695,29 +720,50 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
// write text left from file marker
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)
ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
0,m_impl->body->fileDef->name());
ol.enableAll();
ol.disable(OutputGenerator::Html);
if (latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write normal text (Latex/Man only)
ol.docify(m_impl->body->fileDef->name());
ol.enableAll();
ol.popGeneratorState();
// write text between markers
ol.parseText(refText.mid(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);
// write line link (HTML only)
ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
anchorStr,lineStr);
ol.enableAll();
ol.disable(OutputGenerator::Html);
if (latexSourceCode)
{
ol.disable(OutputGenerator::Latex);
}
// write normal text (Latex/Man only)
ol.docify(lineStr);
ol.enableAll();
ol.popGeneratorState();
// write text right from linePos marker
ol.parseText(refText.right(
......
......@@ -335,7 +335,7 @@ class Definition : public DefinitionIntf, public LockableObj
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 _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
QCString m_name;
bool m_isSymbol;
......
......@@ -10418,8 +10418,15 @@ void generateOutput()
delete tag;
}
if (Config_getBool("GENERATE_HTML") && Config_getBool("DOT_CLEANUP")) removeDoxFont(Config_getString("HTML_OUTPUT"));
if (Config_getBool("GENERATE_RTF") && Config_getBool("DOT_CLEANUP")) removeDoxFont(Config_getString("RTF_OUTPUT"));
if (Config_getBool("DOT_CLEANUP"))
{
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"))
{
......
......@@ -168,7 +168,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{
ol.writeRuler();
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.disable(OutputGenerator::Html);
ol.writeAnchor(0,"_details");
ol.popGeneratorState();
ol.startGroupHeader();
......@@ -707,13 +707,16 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
void FileDef::writeSource(OutputList &ol)
{
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
QCString title = docname;
if (!fileVersion.isEmpty())
{
title+=(" ("+fileVersion+")");
}
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())
{
......@@ -728,16 +731,18 @@ void FileDef::writeSource(OutputList &ol)
else
{
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
startTitle(ol,0);
startTitle(ol,getSourceFileBase());
ol.parseText(title);
endTitle(ol,0,0);
endTitle(ol,getSourceFileBase(),0);
}
if (isLinkable())
{
if (latexSourceCode) ol.disable(OutputGenerator::Latex);
ol.startTextLink(getOutputFileBase(),0);
ol.parseText(theTranslator->trGotoDocumentation());
ol.endTextLink();
if (latexSourceCode) ol.enable(OutputGenerator::Latex);
}
ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
......@@ -1444,7 +1449,7 @@ QCString FileDef::getSourceFileBase() const
}
else
{
return convertNameToFile(diskname+"-source");
return convertNameToFile(diskname)+"_source";
}
}
......@@ -1457,7 +1462,7 @@ QCString FileDef::includeName() const
}
else
{
return convertNameToFile(diskname+"-source");
return convertNameToFile(diskname)+"_source";
}
}
......
......@@ -279,10 +279,10 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
if(indexEnd<0){ // ----- no ampersand as line continuation
if(YY_START == Prepass) { // last line in "continuation"
inputStringPrepass+=(const char*)yytext;
if(indexStart>=0) inputStringPrepass[yyleng-indexStart]=' ';
// @todo: remove all symbols instead of replacing W blank?
// Only take input after initial ampersand
inputStringPrepass+=(const char*)(yytext+(indexStart+1));
pushBuffer(inputStringPrepass);
yy_pop_state();
} else { // simple line
......@@ -296,12 +296,14 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
yy_push_state(Prepass);
}
inputStringPrepass+=(const char*)yytext;
lineCountPrepass ++;
// replace & with space and remove following comment if present
int length = inputStringPrepass.length();
truncatePrepass(length-yyleng+indexEnd);
// Only take input after initial ampersand
inputStringPrepass+=(const char*)(yytext+(indexStart+1));
lineCountPrepass ++;
// cut off & and remove following comment if present
truncatePrepass(length+indexEnd-(indexStart+1));
}
}
......@@ -850,26 +852,39 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length)
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(buf[i]=='\\') i++;
if(buf[i]==quoteSymbol)
{
parseState = Start;
quoteSymbol = 0;
}
} else // not in string
}
switch(buf[i])
{
switch(buf[i])
{
case '\'':
case '"':
parseState = String;
quoteSymbol = buf[i];
// Close string, if quote symbol matches.
// Quote symbol is set iff parseState==String
if(buf[i]==quoteSymbol)
{
parseState = Start;
quoteSymbol = 0;
}
// Start new string, if not already in string or comment
else if(parseState==Start)
{
parseState = String;
quoteSymbol = buf[i];
}
ampIndex = -1; // invalidate prev ampersand
break;
case '!':
parseState = Comment;
commentIndex = i;
// When in string or comment, ignore exclamation mark
if(parseState==Start)
{
parseState = Comment;
commentIndex = i;
}
break;
case ' ': // ignore whitespace
case '\t':
......@@ -880,7 +895,6 @@ static int getAmpOrExclAtTheEnd(const char *buf, int length)
break;
default:
ampIndex = -1; // invalidate prev ampersand
}
}
}
......@@ -903,8 +917,7 @@ void truncatePrepass(int index)
comments.append(c);
}
}
inputStringPrepass[index] = ' ';
inputStringPrepass.truncate(index+1);
inputStringPrepass.truncate(index);
}
// simplified way to know if this is fixed form
......
#define LANG_NL
#define LANG_SE
#define LANG_SV
#define LANG_CZ
#define LANG_FR
#define LANG_ID
......@@ -34,3 +34,4 @@
#define LANG_FA
#define LANG_VI
#define LANG_TR
#define LANG_EO
......@@ -26,8 +26,8 @@
#ifdef LANG_NL
#include "translator_nl.h"
#endif
#ifdef LANG_SE
#include "translator_se.h"
#ifdef LANG_SV
#include "translator_sv.h"
#endif
#ifdef LANG_CZ
#include "translator_cz.h"
......@@ -53,6 +53,9 @@
#ifdef LANG_ES
#include "translator_es.h"
#endif
#ifdef LANG_EO
#include "translator_eo.h"
#endif
#ifdef LANG_FI
#include "translator_fi.h"
#endif
......@@ -169,7 +172,7 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorDutch;
}
#endif
#ifdef LANG_SE
#ifdef LANG_SV
else if (L_EQUAL("swedish"))
{
theTranslator=new TranslatorDecoder(new TranslatorSwedish);
......@@ -391,6 +394,12 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorTurkish;
}
#endif
#ifdef LANG_EO
else if (L_EQUAL("esperanto"))
{
theTranslator=new TranslatorEsperanto;
}
#endif
#endif // ENGLISH_ONLY
else // use the default language (i.e. english)
{
......
......@@ -270,20 +270,35 @@ void LatexDocVisitor::visit(DocStyleChange *s)
void LatexDocVisitor::visit(DocVerbatim *s)
{
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
if (m_hide) return;
switch(s->type())
{
case DocVerbatim::Code:
m_t << "\n\n\\begin{Code}\\begin{verbatim}";
if (latexSourceCode)
{
m_t << "\n\n\\begin{footnotesize}\\begin{alltt}" << endl;
}
else
{
m_t << "\n\n\\begin{Code}\\begin{verbatim}";
}
Doxygen::parserManager->getParser(m_langExt)
->parseCode(m_ci,s->context(),s->text().latin1(),
s->isExample(),s->exampleFile());
m_t << "\\end{verbatim}\n\\end{Code}\n" << endl;
if (latexSourceCode)
{
m_t << "\\end{alltt}\\end{footnotesize}" << endl;
}
else
{
m_t << "\\end{verbatim}\n\\end{Code}\n" << endl;
}
break;
case DocVerbatim::Verbatim:
m_t << "\n\n\\footnotesize\\begin{verbatim}";
m_t << "\n\n\\begin{footnotesize}\\begin{verbatim}";
m_t << s->text();
m_t << "\\end{verbatim}\n\\normalsize" << endl;
m_t << "\\end{verbatim}\n\\end{footnotesize}" << endl;
break;
case DocVerbatim::HtmlOnly:
case DocVerbatim::XmlOnly:
......
This diff is collapsed.
......@@ -118,13 +118,13 @@ class LatexGenerator : public OutputGenerator
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 startCodeFragment() { t << endl << endl << "\\begin{Code}\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\n\\end{Code}" << endl; }
void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
void startCodeLine() { col=0; }
void endCodeLine() { codify("\n"); }
void startCodeFragment();
void endCodeFragment();
void writeLineNumber(const char *,const char *,const char *,int l);
void startCodeLine();
void endCodeLine();
void startEmphasis() { t << "{\\em "; }
void endEmphasis() { t << "}"; }
void startBold() { t << "\\textbf{"; }
......@@ -138,8 +138,8 @@ class LatexGenerator : public OutputGenerator
void endMemberDoc(bool);
void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
void endDoxyAnchor(const char *,const char *);
void startCodeAnchor(const char *) {}
void endCodeAnchor() {}
void startCodeAnchor(const char *);
void endCodeAnchor();
void writeChar(char c);
void writeLatexSpacing() { t << "\\hspace{0.3cm}"; }
void writeStartAnnoItem(const char *type,const char *file,
......@@ -226,8 +226,8 @@ class LatexGenerator : public OutputGenerator
void endConstraintDocs();
void endConstraintList();
void startFontClass(const char *) {}
void endFontClass() {}
void startFontClass(const char *); // {}
void endFontClass(); // {}
void writeCodeAnchor(const char *) {}
void linkableSymbol(int,const char *,Definition *,Definition *) {}
......@@ -242,8 +242,10 @@ class LatexGenerator : public OutputGenerator
bool firstDescItem;
bool disableLinks;
QCString relPath;
QCString sourceFileName;
int m_indent;
bool templateMemberItem;
bool m_prettyCode;
};
#endif
......@@ -17,7 +17,7 @@
TEMPLATE = libdoxycfg.t
CONFIG = console warn_on staticlib $extraopts
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-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
INCLUDEPATH += ../qtools
......
......@@ -14,7 +14,6 @@ extern char **environ;
#include <qglobal.h>
#include <qdatetime.h>
#include <iconv.h>
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
......@@ -369,31 +368,3 @@ int portable_pclose(FILE *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();
bool portable_fileSystemIsCaseSensitive();
FILE * portable_popen(const char *name,const char *type);
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,
char* * outbuf, size_t *outbytesleft);
int portable_iconv_close (void *cd);
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);
int portable_iconv_close (void *cd);
}
#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}+)?)
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
current->objc = insideObjC = yytext[0]=='@';
lineCount() ;
if (yytext[yyleng-1]=='{') unput('{');
if (insidePHP && current->spec&Entry::Abstract)
......@@ -1476,6 +1477,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::CLASS_SEC ;
current->spec = Entry::Struct;
current->objc = insideObjC = FALSE;
addType( current ) ;
current->type += " struct" ;
current->fileName = yyFileName;
......@@ -1532,6 +1534,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::CLASS_SEC;
current->spec = Entry::Union;
current->objc = insideObjC = FALSE;
addType( current ) ;
current->type += " union" ;
current->fileName = yyFileName;
......@@ -1986,12 +1989,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
insideCppQuote=FALSE;
BEGIN(FindMembers);
}
<FindMembers>{B}*"#" { if (insidePHP)
<FindMembers,FindFields>{B}*"#" { if (insidePHP)
REJECT;
lastCPPContext = YY_START;
BEGIN( SkipCPP ) ;
}
<FindMembers>{B}*"#"{B}*"define" { if (insidePHP)
<FindMembers,FindFields>{B}*"#"{B}*"define" { if (insidePHP)
REJECT;
current->bodyLine = yyLineNr;
BEGIN( Define );
......@@ -4376,6 +4379,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
BEGIN( ClassVar );
}
<CompoundName>{SCOPENAME}/{BN}*"," { // multiple forward declarations on one line
// e.g. @protocol A,B;
current->reset();
}
<CompoundName>{SCOPENAME} {
current->name = yytext ;
lineCount();
......@@ -5246,6 +5253,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
/* ------------ Generic rules -------------- */
<SkipCxxComment>.*"\\\n" { // line continuation
yyLineNr++;
}
<SkipCxxComment>.*/\n {
BEGIN( lastCContext ) ;
}
......
This diff is collapsed.
This diff is collapsed.
......@@ -16,20 +16,23 @@
*/
/*
* translator_jp.h
*
* translator_jp.h
* Updates:
* 1.2.5)
* First Translation
* by Kenji Nagamatsu
* 1.2.12)
* Update and Shift-Jis(_WIN32)
* by Ryunosuke Sato (30-Dec-2001)
* 1.5.8)
* Translation for 1.5.8.
* by Hiroki Iseri (18-Feb-2009)
*/
#ifndef TRANSLATOR_JP_H
#define TRANSLATOR_JP_H
class TranslatorJapanese : public TranslatorAdapter_1_5_4
class TranslatorJapanese : public Translator
{
private:
/*! The decode() can change euc into sjis */
......@@ -101,17 +104,17 @@ class TranslatorJapanese : public TranslatorAdapter_1_5_4
virtual QCString trMemberDataDocumentation()
{
if( Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return decode("構造体");
}
{
return decode("構造体");
}
else
{
return decode("変数");
}
{
return decode("変数");
}
}
/*! this is the text of a link put after brief descriptions. */
virtual QCString trMore()
virtual QCString trMore()
{ return decode("[詳細]"); }
/*! put in the class documentation */
......@@ -254,15 +257,15 @@ class TranslatorJapanese : public TranslatorAdapter_1_5_4
{
QCString result=decode("これは");
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+=decode("フィールドの一覧でそれぞれ");
if (extractAll) result+=decode("が属している構造体/共用体");
}
{
result+=decode("フィールドの一覧でそれぞれ");
if (extractAll) result+=decode("が属している構造体/共用体");
}
else
{
result+=decode("クラスメンバの一覧で、それぞれ");
if (extractAll) result+=decode("が属しているクラス");
}
{
result+=decode("クラスメンバの一覧で、それぞれ");
if (extractAll) result+=decode("が属しているクラス");
}
result+=decode("の説明へリンクしています。");
return result;
}
......@@ -1582,5 +1585,188 @@ class TranslatorJapanese : public TranslatorAdapter_1_5_4
virtual QCString trEnumerationValueDocumentation()
{ 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
......@@ -69,7 +69,7 @@ Problem!
#ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H
class TranslatorSwedish : public TranslatorAdapter_1_4_6
class TranslatorSwedish : public Translator
{
public:
......@@ -1431,6 +1431,231 @@ class TranslatorSwedish : public TranslatorAdapter_1_4_6
"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 ]
line=line.left(pos);
}
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
{
comment.resize(0);
......
......@@ -564,7 +564,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
// enum values are written as part of the enum
if (md->memberType()==MemberDef::EnumValue) 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
//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