Commit 78a0accf authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.5.7.1-20081103

parent b37fae19
DOXYGEN Version 1.5.7.1-20081012
DOXYGEN Version 1.5.7.1-20081103
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (12 October 2008)
Dimitri van Heesch (03 November 2008)
DOXYGEN Version 1.5.7.1_20081012
DOXYGEN Version 1.5.7.1_20081103
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) (12 October 2008)
Dimitri van Heesch (dimitri@stack.nl) (03 November 2008)
......@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=7.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20081012
doxygen_version_mmn=20081103
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......@@ -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
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
while test -n "$1"; do
case $1 in
......@@ -669,7 +669,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"));
@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"));
foreach my $elem (@l){
$elem =~ tr/a-z/A-Z/;
$r=0;
......
......@@ -101,6 +101,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_exclude_symlinks EXCLUDE_SYMLINKS
\refitem cfg_expand_as_defined EXPAND_AS_DEFINED
\refitem cfg_expand_only_predef EXPAND_ONLY_PREDEF
\refitem cfg_extension_mapping EXTENSION_MAPPING
\refitem cfg_external_groups EXTERNAL_GROUPS
\refitem cfg_extra_packages EXTRA_PACKAGES
\refitem cfg_extract_all EXTRACT_ALL
......@@ -195,7 +196,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_project_number PROJECT_NUMBER
\refitem cfg_qhp_namespace QHP_NAMESPACE
\refitem cfg_qhp_virtual_folder QHP_VIRTUAL_FOLDER
\refitem cfg_qhp_custom_filter_name QHP_CUSTOM_FILTER_NAME
\refitem cfg_qhp_cust_filter_name QHP_CUST_FILTER_NAME
\refitem cfg_qhp_cust_filter_attrs QHP_CUST_FILTER_ATTRS
\refitem cfg_qhp_sect_filter_attrs QHP_SECT_FILTER_ATTRS
\refitem cfg_qhg_location QHG_LOCATION
......@@ -550,14 +551,26 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_optimize_for_fortran
<dt>\c OPTIMIZE_FOR_FORTRAN <dd>
\addindex OPTIMIZE_FOR_FORTRAN
Set the \c OPTIMIZE_FOR_FORTRAN tag to \c YES if your project consists of Fortran
sources. Doxygen will then generate output that is tailored for Fortran.
Set the \c OPTIMIZE_FOR_FORTRAN tag to \c YES if your project consists of Fortran
sources. Doxygen will then generate output that is tailored for Fortran.
\anchor cfg_optimize_output_vhdl
<dt>\c OPTIMIZE_OUTPUT_VHDL <dd>
\addindex OPTIMIZE_OUTPUT_VHDL
Set the \c OPTIMIZE_OUTPUT_VHDL tag to \c YES if your project consists of VHDL
sources. Doxygen will then generate output that is tailored for VHDL.
Set the \c OPTIMIZE_OUTPUT_VHDL tag to \c YES if your project consists of VHDL
sources. Doxygen will then generate output that is tailored for VHDL.
\anchor cfg_extension_mapping
<dt>\c EXTENSION_MAPPING <dd>
\addindex EXTENSION_MAPPING
Doxygen selects the parser to use depending on the extension of the files it parses.
With this tag you can assign which parser to use for a given extension.
Doxygen has a built-in mapping, but you can override or extend it using this tag.
The format is ext=language, where ext is a file extension, and language is one of
the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
.inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
use: inc=Fortran f=C
\anchor cfg_subgrouping
<dt>\c SUBGROUPING <dd>
......@@ -1387,10 +1400,10 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
generating Qt Help Project output. For more information please see
<a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.
\anchor cfg_qhp_custom_filter_name
<dt>\c QHP_CUSTOM_FILTER_NAME <dd>
\addindex QHP_CUSTOM_FILTER_NAME
If QHP_CUSTOM_FILTER_NAME is set, it specifies the name of a custom filter to add. For more information please see
\anchor cfg_qhp_cust_filter_name
<dt>\c QHP_CUST_FILTER_NAME <dd>
\addindex QHP_CUST_FILTER_NAME
If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. For more information please see
<a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
\anchor cfg_qhp_cust_filter_attrs
......
......@@ -23,14 +23,14 @@ 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.6), 35 languages
Currently (version 1.5.7.1), 36 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, and Ukrainian..
Swedish, Ukrainian, and Vietnamese..
The table of information related to the supported languages follows.
It is sorted by language alphabetically. The <b>Status</b> column
......@@ -273,6 +273,12 @@ when the translator was updated.
<td>olexij.tkatchenko at parcs dot de</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Vietnamese</td>
<td>Dang Minh Tuan</td>
<td>tuanvietkey at gmail dot com</td>
<td>up-to-date</td>
</tr>
<!-- table content end -->
</table>
</td>
......@@ -376,6 +382,8 @@ when the translator was updated.
\hline
Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & 1.4.1 \\
\hline
Vietnamese & Dang Minh Tuan & {\tt\tiny tuanvietkey@gmail.com} & up-to-date \\
\hline
\end{tabular}
\endlatexonly
......
......@@ -128,3 +128,5 @@ Mikael Hallin: mikaelhallin@yahoo.se
TranslatorUkrainian
Olexij Tkatchenko: olexij.tkatchenko@parcs.de
TranslatorVietnamese
Dang Minh Tuan: tuanvietkey@gmail.com
(1.5.6)
(1.5.7.1)
Doxygen supports the following 35 languages (sorted alphabetically):
Doxygen supports the following 36 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, and Ukrainian.
Swedish, Ukrainian, and Vietnamese.
Of them, 18 translators are up-to-date, 17 translators are based on
Of them, 19 translators are up-to-date, 17 translators are based on
some adapter class, and 2 are English based.
----------------------------------------------------------------------
......@@ -36,6 +36,7 @@ still may be some details listed even for them:
TranslatorSerbianCyrilic
TranslatorSerbian
TranslatorSpanish -- Change the base class to Translator.
TranslatorVietnamese
----------------------------------------------------------------------
The following translator classes need some maintenance (the most
......
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2008 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef CONFIG_H
#define CONFIG_H
......@@ -56,6 +74,7 @@ class ConfigOption
virtual void writeTemplate(QTextStream &t,bool sl,bool upd) = 0;
virtual void convertStrToVal() {}
virtual void substEnvVars() = 0;
virtual void writeXML(QTextStream&) {}
virtual void init() {}
QCString convertToComment(const QCString &s);
......@@ -128,6 +147,7 @@ class ConfigList : public ConfigOption
t << "\n";
}
void substEnvVars();
void writeXML(QTextStream&);
void init() { m_value.clear(); }
private:
QStrList m_value;
......@@ -167,6 +187,7 @@ class ConfigEnum : public ConfigOption
writeStringValue(t,m_value);
t << "\n";
}
void writeXML(QTextStream&);
void init() { m_value = m_defValue.copy(); }
private:
......@@ -209,6 +230,7 @@ class ConfigString : public ConfigOption
t << "\n";
}
void substEnvVars();
void writeXML(QTextStream&);
void init() { m_value = m_defValue.copy(); }
private:
......@@ -258,6 +280,7 @@ class ConfigInt : public ConfigOption
}
t << "\n";
}
void writeXML(QTextStream&);
void init() { m_value = m_defValue; }
private:
int m_value;
......@@ -305,6 +328,7 @@ class ConfigBool : public ConfigOption
}
t << "\n";
}
void writeXML(QTextStream&);
void init() { m_value = m_defValue; }
private:
bool m_value;
......@@ -321,6 +345,7 @@ class ConfigObsolete : public ConfigOption
ConfigObsolete(OptionType t) : ConfigOption(t) {}
void writeTemplate(QTextStream &,bool,bool) {}
void substEnvVars() {}
void writeXML(QTextStream&);
};
......@@ -511,6 +536,9 @@ class Config
*/
void writeTemplate(QTextStream &t,bool shortIndex,bool updateOnly);
/** Write XML representation of the config file */
void writeXML(QTextStream &t);
/////////////////////////////
// internal API
/////////////////////////////
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2008 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef CONFIGOPTIONS
#define CONFIGOPTIONS
class Config;
void addConfigOptions(Config *cfg);
#endif
......@@ -258,6 +258,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
outImage.writeBlock(buffer,inImage.size());
outImage.flush();
delete buffer;
if (type==DocImage::Html) Doxygen::indexList.addImageFile(result);
}
else
{
......@@ -2762,7 +2763,7 @@ int DocInternal::parse(int level)
)
{
DocSection *s=new DocSection(this,
QMIN(level+Doxygen::subpageNestingLevel,4),g_token->sectionId);
QMIN(level+Doxygen::subpageNestingLevel,5),g_token->sectionId);
m_children.append(s);
retval = s->parse();
}
......@@ -5813,43 +5814,46 @@ int DocSection::parse()
if (lastPar) lastPar->markLast();
if (retval==RetVal_Subsection && m_level==1)
//printf("m_level=%d <-> %d\n",m_level,Doxygen::subpageNestingLevel);
if (retval==RetVal_Subsection && m_level==Doxygen::subpageNestingLevel+1)
{
// then parse any number of nested sections
while (retval==RetVal_Subsection) // more sections follow
{
//SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
DocSection *s=new DocSection(this,
QMIN(2+Doxygen::subpageNestingLevel,4),g_token->sectionId);
QMIN(2+Doxygen::subpageNestingLevel,5),g_token->sectionId);
m_children.append(s);
retval = s->parse();
}
}
else if (retval==RetVal_Subsubsection && m_level==2)
else if (retval==RetVal_Subsubsection && m_level==Doxygen::subpageNestingLevel+2)
{
// then parse any number of nested sections
while (retval==RetVal_Subsubsection) // more sections follow
{
//SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
DocSection *s=new DocSection(this,
QMIN(3+Doxygen::subpageNestingLevel,4),g_token->sectionId);
QMIN(3+Doxygen::subpageNestingLevel,5),g_token->sectionId);
m_children.append(s);
retval = s->parse();
}
}
else if (retval==RetVal_Paragraph && m_level==3)
else if (retval==RetVal_Paragraph && m_level==QMIN(5,Doxygen::subpageNestingLevel+3))
{
// then parse any number of nested sections
while (retval==RetVal_Paragraph) // more sections follow
{
//SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
DocSection *s=new DocSection(this,4,g_token->sectionId);
DocSection *s=new DocSection(this,
QMIN(4+Doxygen::subpageNestingLevel,5),g_token->sectionId);
m_children.append(s);
retval = s->parse();
}
}
else if ((m_level<=1 && retval==RetVal_Subsubsection) ||
(m_level<=2 && retval==RetVal_Paragraph)
else if ((m_level<=1+Doxygen::subpageNestingLevel && retval==RetVal_Subsubsection) ||
(m_level<=2+Doxygen::subpageNestingLevel && retval==RetVal_Paragraph)
)
{
int level;
......@@ -6013,6 +6017,7 @@ void DocRoot::parse()
} while (retval!=0 && retval!=RetVal_Section && retval!=RetVal_Internal);
if (lastPar) lastPar->markLast();
//printf("DocRoot::parse() retval=%d %d\n",retval,RetVal_Section);
// then parse any number of level1 sections
while (retval==RetVal_Section)
{
......@@ -6020,7 +6025,7 @@ void DocRoot::parse()
if (sec)
{
DocSection *s=new DocSection(this,
QMIN(1+Doxygen::subpageNestingLevel,4),g_token->sectionId);
QMIN(1+Doxygen::subpageNestingLevel,5),g_token->sectionId);
m_children.append(s);
retval = s->parse();
}
......
......@@ -280,8 +280,10 @@ void DocSets::addIndexItem(const char *, const char *,
scope = cd->qualifiedName();
if (cd->isTemplate())
type="tmplt";
else if (cd->compoundType()==ClassDef::Interface)
else if (cd->compoundType()==ClassDef::Protocol)
type="intf";
else if (cd->compoundType()==ClassDef::Interface)
type="cl";
else if (cd->compoundType()==ClassDef::Category)
type="cat";
else
......@@ -357,7 +359,9 @@ void DocSets::writeToken(QTextStream &t,
{
t << " <Token>" << endl;
t << " <TokenIdentifier>" << endl;
t << " <Name>" << convertToXML(d->name()) << "</Name>" << endl;
QString name = d->name();
if (name.right(2)=="-p") name=name.left(name.length()-2);
t << " <Name>" << convertToXML(name) << "</Name>" << endl;
t << " <APILanguage>" << lang << "</APILanguage>" << endl;
t << " <Type>" << type << "</Type>" << endl;
t << " <Scope>" << convertToXML(scope) << "</Scope>" << endl;
......
......@@ -47,18 +47,19 @@ enum Tokens
RetVal_Subsection = 0x10004,
RetVal_Subsubsection = 0x10005,
RetVal_Paragraph = 0x10006,
RetVal_EndList = 0x10007,
RetVal_EndPre = 0x10008,
RetVal_DescData = 0x10009,
RetVal_DescTitle = 0x1000A,
RetVal_EndDesc = 0x1000B,
RetVal_TableRow = 0x1000C,
RetVal_TableCell = 0x1000D,
RetVal_TableHCell = 0x1000E,
RetVal_EndTable = 0x1000F,
RetVal_Internal = 0x10010,
RetVal_SwitchLang = 0x10011,
RetVal_CloseXml = 0x10012
RetVal_SubParagraph = 0x10007,
RetVal_EndList = 0x10008,
RetVal_EndPre = 0x10009,
RetVal_DescData = 0x1000A,
RetVal_DescTitle = 0x1000B,
RetVal_EndDesc = 0x1000C,
RetVal_TableRow = 0x1000D,
RetVal_TableCell = 0x1000E,
RetVal_TableHCell = 0x1000F,
RetVal_EndTable = 0x10010,
RetVal_Internal = 0x10011,
RetVal_SwitchLang = 0x10012,
RetVal_CloseXml = 0x10013
};
struct TokenInfo
......
......@@ -158,6 +158,7 @@ QCString spaces;
static bool g_successfulRun = FALSE;
static bool g_dumpSymbolMap = FALSE;
static bool g_dumpConfigAsXML = FALSE;
......@@ -8917,6 +8918,17 @@ static void dumpSymbolMap()
}
}
//----------------------------------------------------------------------------
void dumpConfigAsXML()
{
QFile f("config.xml");
if (f.open(IO_WriteOnly))
{
QTextStream t(&f);
Config::instance()->writeXML(t);
}
}
//----------------------------------------------------------------------------
// print the usage of doxygen
......@@ -8977,15 +8989,15 @@ void initDoxygen()
Doxygen::runningTime.start();
initPreprocessor();
ParserInterface *defaultParser = new CLanguageScanner;
Doxygen::parserManager = new ParserManager(defaultParser);
Doxygen::parserManager->registerParser(".py", new PythonLanguageScanner);
Doxygen::parserManager->registerParser(".f", new FortranLanguageScanner);
Doxygen::parserManager->registerParser(".f90", new FortranLanguageScanner);
Doxygen::parserManager->registerParser(".vhd", new VHDLLanguageScanner);
Doxygen::parserManager = new ParserManager;
Doxygen::parserManager->registerParser("c", new CLanguageScanner, TRUE);
Doxygen::parserManager->registerParser("python", new PythonLanguageScanner);
Doxygen::parserManager->registerParser("fortran", new FortranLanguageScanner);
Doxygen::parserManager->registerParser("vhdl", new VHDLLanguageScanner);
// register any additional parsers here...
initDefaultExtensionMapping();
initClassMemberIndices();
initNamespaceMemberIndices();
initFileMemberIndices();
......@@ -9245,6 +9257,9 @@ void readConfiguration(int argc, char **argv)
case 'm':
g_dumpSymbolMap = TRUE;
break;
case 'x':
g_dumpConfigAsXML = TRUE;
break;
case '-':
if (strcmp(&argv[optind][2],"help")==0)
{
......@@ -9280,7 +9295,13 @@ void readConfiguration(int argc, char **argv)
if (genConfig)
{
checkConfiguration();
generateConfigFile(configName,shortList);
if (g_dumpConfigAsXML)
{
dumpConfigAsXML();
exit(0);
}
cleanUpDoxygen();
exit(0);
}
......@@ -9460,6 +9481,37 @@ void parseInput()
{
atexit(exitDoxygen);
/**************************************************************************
* Add custom extension mappings
**************************************************************************/
QStrList &extMaps = Config_getList("EXTENSION_MAPPING");
char *mapping = extMaps.first();
while (mapping)
{
QCString mapStr = mapping;
int i;
if ((i=mapStr.find('='))!=-1)
{
QCString ext=mapStr.left(i).stripWhiteSpace().lower();
QCString language=mapStr.mid(i+1).stripWhiteSpace().lower();
if (!updateLanguageMapping(ext,language))
{
err("Failed to map file extension '%s' to unsupported language '%s'.\n"
"Check the EXTENSION_MAPPING setting in the config file.\n",
ext.data(),language.data());
}
else
{
msg("Adding custom extension mapping: .%s will be treated as language %s\n",
ext.data(),language.data());
}
}
mapping = extMaps.next();
}
/**************************************************************************
* Make sure the output directory exists
**************************************************************************/
......
......@@ -24,7 +24,7 @@ caption {
font-weight: bold;
}
div.qindex, div.navpath, div.navtab{
div.qindex, div.navtab{
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
......
......@@ -24,7 +24,7 @@
" font-weight: bold;\n"
"}\n"
"\n"
"div.qindex, div.navpath, div.navtab{\n"
"div.qindex, div.navtab{\n"
" background-color: #e8eef2;\n"
" border: 1px solid #84b0c7;\n"
" text-align: center;\n"
......
......@@ -225,6 +225,7 @@ Entry::~Entry()
delete argList;
delete tArgLists;
delete tagInfo;
delete typeConstr;
delete sli;
num--;
}
......
......@@ -30,6 +30,8 @@
#include "message.h"
#include "config.h"
#include "portable.h"
#include "index.h"
#include "doxygen.h"
Formula::Formula(const char *text)
{
......@@ -92,6 +94,7 @@ void FormulaList::generateBitmaps(const char *path)
t << formula->getFormulaText() << endl << "\\pagebreak\n\n";
pagesToGenerate.append(new int(page));
}
Doxygen::indexList.addImageFile(resultName);
page++;
}
t << "\\end{document}" << endl;
......
......@@ -473,7 +473,7 @@ void FTVHelp::generateLink(QTextStream &t,FTVNode *n)
// n->ref.data(),n->file.data(),n->anchor.data());
if (n->file.isEmpty()) // no link
{
t << "<b>" << n->name << "</b>";
t << "<b>" << convertToHtml(n->name) << "</b>";
}
else // link into other frame
{
......@@ -499,7 +499,7 @@ void FTVHelp::generateLink(QTextStream &t,FTVNode *n)
t << "\" target=\"basefrm\">";
else
t << "\" target=\"_self\">";
t << n->name;
t << convertToHtml(n->name);
t << "</a>";
if (!n->ref.isEmpty())
{
......
......@@ -383,7 +383,7 @@ static const char tabs_css[] =
" float : left;\n"
" background : url(\"tab_r.gif\") no-repeat right top;\n"
" border-bottom : 1px solid #84B0C7;\n"
" font-size : 8px;\n"
" font-size : 80%;\n"
" font-weight : bold;\n"
" text-decoration : none;\n"
"}\n"
......@@ -417,7 +417,7 @@ static const char tabs_css[] =
"\n"
"DIV.tabs TD\n"
"{\n"
" font-size : 8px;\n"
" font-size : 80%;\n"
" font-weight : bold;\n"
" text-decoration : none;\n"
"}\n"
......@@ -450,6 +450,9 @@ static const char tabs_css[] =
" background : none;\n"
" border : none;\n"
" border-bottom : 1px solid #84B0C7;\n"
" text-align : center;\n"
" margin : 2px;\n"
" padding : 2px;\n"
"}\n"
;
......@@ -573,6 +576,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title,
"<title>";
t << convertToHtml(title);
t << "</title>\n";
t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "<link ";
t << "href=\"";
if (Config_getString("HTML_STYLESHEET").isEmpty())
......@@ -591,7 +595,6 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title,
}
t << "\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "</head><body>\n";
}
......
......@@ -32,3 +32,4 @@
#define LANG_ZA
#define LANG_AR
#define LANG_FA
#define LANG_VI
......@@ -134,6 +134,9 @@
#ifdef LANG_SC
#include "translator_sc.h"
#endif
#ifdef LANG_VI
#include "translator_vi.h"
#endif
#endif // !ENGLISH_ONLY
#define L_EQUAL(a) !stricmp(langName,a)
......@@ -373,6 +376,12 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorMacedonian;
}
#endif
#ifdef LANG_VI
else if (L_EQUAL("vietnamese"))
{
theTranslator=new TranslatorVietnamese;
}
#endif
#endif // ENGLISH_ONLY
else // use the default language (i.e. english)
{
......
......@@ -365,6 +365,14 @@ static void writeDefaultStyleSheetPart3(QTextStream &t)
t << "\\addtocounter{secnumdepth}{1}\n";
t << "\\sloppy\n";
t << "\\usepackage[T1]{fontenc}\n";
t << "\\makeatletter\n";
t << "\\renewcommand{\\paragraph}{\\@startsection{paragraph}{4}{0ex}%\n";
t << " {-3.25ex plus -1ex minus -0.2ex}%\n";
t << " {1.5ex plus 0.2ex}%\n";
t << " {\\normalfont\\normalsize\\bfseries}}\n";
t << "\\makeatother\n";
t << "\\stepcounter{secnumdepth}\n";
t << "\\stepcounter{tocdepth}\n";
}
void LatexGenerator::writeHeaderFile(QFile &f)
......
......@@ -16,8 +16,8 @@
TEMPLATE = libdoxycfg.t
CONFIG = console warn_on staticlib $extraopts
HEADERS = config.h portable.h
SOURCES = config.cpp portable.cpp
HEADERS = config.h configoptions.h portable.h
SOURCES = config.cpp configoptions.cpp portable.cpp
win32:TMAKE_CXXFLAGS += -DQT_NODLL
win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
INCLUDEPATH += ../qtools
......
......@@ -137,6 +137,7 @@ HEADERS = bufstr.h \
translator_sr.h \
translator_tw.h \
translator_ua.h \
translator_vi.h \
translator_za.h \
unistd.h \
util.h \
......
......@@ -109,22 +109,38 @@ class ParserManager
{
public:
/** Creates the parser manager object.
* @param defaultParser The default parser that is used when
* no explicit extension has been registered for
* a given input file.
*/
ParserManager(ParserInterface *defaultParser)
: m_defaultParser(defaultParser) { m_parsers.setAutoDelete(TRUE); }
ParserManager()
: m_defaultParser(0) { m_parsers.setAutoDelete(TRUE); }
/** Registers an additional parser.
* @param[in] extension The file extension that will trigger
* the use of this parser (e.g. ".py", or ".bas").
* @param[in] name A symbolic name of the parser, i.e. "c",
* "python", "fortran", "vhdl", ...
* @param[in] parser The parser that is to be used for the
* given extension.
* @param[in] defParser Use this parser as the default parser, using
* for unregistered file extensions.
*/
void registerParser(const char *extension,ParserInterface *parser)
void registerParser(const char *name,ParserInterface *parser,bool defParser=FALSE)
{
m_parsers.insert(extension,parser);
if (defParser && m_defaultParser==0) m_defaultParser=parser;
m_parsers.insert(name,parser);
}
/** Registers a file \a extension with a parser with name \a parserName.
* Returns TRUE if the extension was successfully registered.
*/
bool registerExtension(const char *extension, const char *parserName)
{
if (parserName==0 || extension==0) return FALSE;
ParserInterface *intf = m_parsers.find(parserName);
if (intf==0) return FALSE;
if (m_extensions.find(extension)!=0) // extension already exists
{
m_extensions.remove(extension); // remove it
}
m_extensions.insert(extension,intf); // add new mapping
return TRUE;
}
/** Gets the interface to the parser associated with given \a extension.
......@@ -135,16 +151,17 @@ class ParserManager
{
if (extension==0) return m_defaultParser;
QCString ext = QCString(extension).lower();
ParserInterface *intf = m_parsers.find(ext);
ParserInterface *intf = m_extensions.find(ext);
if (intf==0 && ext.length()>4)
{
intf = m_parsers.find(ext.left(4));
intf = m_extensions.find(ext.left(4));
}
return intf ? intf : m_defaultParser;
}
private:
QDict<ParserInterface> m_parsers;
QDict<ParserInterface> m_extensions;
ParserInterface *m_defaultParser;
};
......
......@@ -75,7 +75,7 @@ void Qhp::initialize()
m_doc.openCloseContent("virtualFolder", virtualFolder);
// Add custom filter
QCString filterName = Config_getString("QHP_CUSTOM_FILTER_NAME");
QCString filterName = Config_getString("QHP_CUST_FILTER_NAME");
if (!filterName.isEmpty())
{
const char * tagAttributes[] =
......
......@@ -4613,7 +4613,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<Bases,ClassVar>("//"{B}*)?"/**"/[^/*] |
<Bases,ClassVar>("//"{B}*)?"/*!" |
<Bases,ClassVar>"//!" |
<Bases,ClassVar>[\-+]{BN}+ {
<Bases,ClassVar>[\-+]{BN}* {
if (!insideObjC)
{
REJECT;
......
This diff is collapsed.
......@@ -48,6 +48,7 @@
#include "doxygen.h"
#include "textdocvisitor.h"
#include "portable.h"
#include "parserintf.h"
#define ENABLE_TRACINGSUPPORT 0
......@@ -4459,10 +4460,10 @@ QCString substituteClassNames(const QCString &s)
QCString substitute(const char *s,const char *src,const char *dst)
{
if (s==0 || src==0 || dst==0) return s;
if (s==0 || src==0) return s;
const char *p, *q;
int srcLen = strlen(src);
int dstLen = strlen(dst);
int dstLen = dst ? strlen(dst) : 0;
int resLen;
if (srcLen!=dstLen)
{
......@@ -4481,7 +4482,7 @@ QCString substitute(const char *s,const char *src,const char *dst)
int l = (int)(q-p);
memcpy(r,p,l);
r+=l;
memcpy(r,dst,dstLen);
if (dst) memcpy(r,dst,dstLen);
r+=dstLen;
}
strcpy(r,p);
......@@ -6374,30 +6375,32 @@ static QDict<int> g_extLookup;
static struct Lang2ExtMap
{
const char *langName;
const char *parserName;
SrcLangExt parserId;
}
g_lang2extMap[] =
{
{ "idl", SrcLangExt_IDL },
{ "java", SrcLangExt_Java },
{ "javascript", SrcLangExt_JS },
{ "c#", SrcLangExt_CSharp },
{ "d", SrcLangExt_D },
{ "php", SrcLangExt_PHP },
{ "objective-c", SrcLangExt_ObjC },
{ "python", SrcLangExt_Python },
{ "fortran", SrcLangExt_F90 },
{ "vhdl", SrcLangExt_VHDL },
{ "c", SrcLangExt_Cpp },
{ "c++", SrcLangExt_Cpp },
{ 0, (SrcLangExt)0 }
// language parser parser option
{ "idl", "c", SrcLangExt_IDL },
{ "java", "c", SrcLangExt_Java },
{ "javascript", "c", SrcLangExt_JS },
{ "c#", "c", SrcLangExt_CSharp },
{ "d", "c", SrcLangExt_D },
{ "php", "c", SrcLangExt_PHP },
{ "objective-c", "c", SrcLangExt_ObjC },
{ "c", "c", SrcLangExt_Cpp },
{ "c++", "c", SrcLangExt_Cpp },
{ "python", "python", SrcLangExt_Python },
{ "fortran", "fortran", SrcLangExt_F90 },
{ "vhdl", "vhdl", SrcLangExt_VHDL },
{ 0, 0, (SrcLangExt)0 }
};
bool updateLanguageMapping(const QCString &extension,const QCString &parser)
bool updateLanguageMapping(const QCString &extension,const QCString &language)
{
getLanguageFromFileName("dummy"); // force initializion of the g_extLookup map
//getLanguageFromFileName("dummy"); // force initializion of the g_extLookup map
const Lang2ExtMap *p = g_lang2extMap;
QCString langName = parser.lower();
QCString langName = language.lower();
while (p->langName)
{
if (langName==p->langName) break;
......@@ -6405,49 +6408,58 @@ bool updateLanguageMapping(const QCString &extension,const QCString &parser)
}
if (!p->langName) return FALSE;
// found the parser
// found the language
SrcLangExt parserId = p->parserId;
QCString extName = extension;
if (extName.isEmpty()) return FALSE;
if (extName.at(0)!='.') extName.prepend(".");
if (g_extLookup.find(extension)!=0) // parser was already register for this ext
if (g_extLookup.find(extension)!=0) // language was already register for this ext
{
g_extLookup.remove(extension);
}
g_extLookup.insert(extension,new int(parserId));
if (!Doxygen::parserManager->registerExtension(extName,p->parserName))
{
err("Failed to assign extension %s to parser %s for language %s\n",
extName.data(),p->parserName,language.data());
}
else
{
//msg("Registered extension %s to language parser %s...\n",
// extName.data(),language.data());
}
return TRUE;
}
void initDefaultExtensionMapping()
{
g_extLookup.setAutoDelete(TRUE);
updateLanguageMapping(".idl", "idl");
updateLanguageMapping(".ddl", "idl");
updateLanguageMapping(".odl", "idl");
updateLanguageMapping(".java", "java");
updateLanguageMapping(".as", "javascript");
updateLanguageMapping(".js", "javascript");
updateLanguageMapping(".cs", "c#");
updateLanguageMapping(".d", "d");
updateLanguageMapping(".php", "php");
updateLanguageMapping(".php4", "php");
updateLanguageMapping(".php5", "php");
updateLanguageMapping(".inc", "php");
updateLanguageMapping(".phtml", "php");
updateLanguageMapping(".m", "objective-c");
updateLanguageMapping(".M", "objective-c");
updateLanguageMapping(".mm", "objective-c");
updateLanguageMapping(".py", "python");
updateLanguageMapping(".f", "fortran");
updateLanguageMapping(".f90", "fortran");
updateLanguageMapping(".vhd", "vhdl");
updateLanguageMapping(".vhdl", "vhdl");
}
SrcLangExt getLanguageFromFileName(const QCString fileName)
{
int i = fileName.findRev('.');
static bool init=FALSE;
g_extLookup.setAutoDelete(TRUE);
if (!init) // one time initialization
{
g_extLookup.insert(".idl", new int(SrcLangExt_IDL));
g_extLookup.insert(".ddl", new int(SrcLangExt_IDL));
g_extLookup.insert(".odl", new int(SrcLangExt_IDL));
g_extLookup.insert(".java", new int(SrcLangExt_Java));
g_extLookup.insert(".as", new int(SrcLangExt_JS));
g_extLookup.insert(".js", new int(SrcLangExt_JS));
g_extLookup.insert(".cs", new int(SrcLangExt_CSharp));
g_extLookup.insert(".d", new int(SrcLangExt_D));
g_extLookup.insert(".php", new int(SrcLangExt_PHP));
g_extLookup.insert(".php4", new int(SrcLangExt_PHP));
g_extLookup.insert(".php5", new int(SrcLangExt_PHP));
g_extLookup.insert(".inc", new int(SrcLangExt_PHP));
g_extLookup.insert(".phtml", new int(SrcLangExt_PHP));
g_extLookup.insert(".m", new int(SrcLangExt_ObjC));
g_extLookup.insert(".M", new int(SrcLangExt_ObjC));
g_extLookup.insert(".mm", new int(SrcLangExt_ObjC));
g_extLookup.insert(".py", new int(SrcLangExt_Python));
g_extLookup.insert(".f", new int(SrcLangExt_F90));
g_extLookup.insert(".f90", new int(SrcLangExt_F90));
g_extLookup.insert(".vhd", new int(SrcLangExt_VHDL));
g_extLookup.insert(".vhdl", new int(SrcLangExt_VHDL));
init=TRUE;
}
if (i!=-1) // name has an extension
{
QCString extStr=fileName.right(fileName.length()-i);
......@@ -6456,7 +6468,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName)
int *pVal=g_extLookup.find(extStr);
if (pVal) // listed extension
{
return (SrcLangExt)*pVal; // cast void* address to enum value
return (SrcLangExt)*pVal;
}
}
}
......
......@@ -330,6 +330,7 @@ void stringToSearchIndex(const QCString &docUrlBase,const QCString &title,
bool updateLanguageMapping(const QCString &extension,const QCString &parser);
SrcLangExt getLanguageFromFileName(const QCString fileName);
void initDefaultExtensionMapping();
bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n);
......
......@@ -396,6 +396,10 @@
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\configoptions.cpp"
>
</File>
<File
RelativePath="..\src\constexp.l"
>
......@@ -1027,51 +1031,7 @@
</FileConfiguration>
</File>
<File
RelativePath="..\src\qhp.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\indexlog.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\qhpxmlwriter.cpp"
RelativePath="..\src\image.cpp"
>
<FileConfiguration
Name="Debug|Win32"
......@@ -1093,7 +1053,7 @@
</FileConfiguration>
</File>
<File
RelativePath="..\src\image.cpp"
RelativePath="..\src\index.cpp"
>
<FileConfiguration
Name="Debug|Win32"
......@@ -1115,7 +1075,7 @@
</FileConfiguration>
</File>
<File
RelativePath="..\src\index.cpp"
RelativePath="..\src\indexlog.cpp"
>
<FileConfiguration
Name="Debug|Win32"
......@@ -1668,6 +1628,50 @@
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\qhp.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\qhpxmlwriter.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\reflist.cpp"
>
......@@ -2155,18 +2159,6 @@
RelativePath="..\src\htmlhelp.h"
>
</File>
<File
RelativePath="..\src\qhpxmlwriter.h"
>
</File>
<File
RelativePath="..\src\indexlog.h"
>
</File>
<File
RelativePath="..\src\qhp.h"
>
</File>
<File
RelativePath=".\iconv.h"
>
......@@ -2183,6 +2175,10 @@
RelativePath="..\src\index_xsd.h"
>
</File>
<File
RelativePath="..\src\indexlog.h"
>
</File>
<File
RelativePath="..\src\instdox.h"
>
......@@ -2311,6 +2307,14 @@
RelativePath="..\src\pyscanner.h"
>
</File>
<File
RelativePath="..\src\qhp.h"
>
</File>
<File
RelativePath="..\src\qhpxmlwriter.h"
>
</File>
<File
RelativePath="..\src\qtbc.h"
>
......@@ -2487,6 +2491,10 @@
RelativePath="..\src\translator_ru.h"
>
</File>
<File
RelativePath="..\src\translator_sc.h"
>
</File>
<File
RelativePath="..\src\translator_se.h"
>
......@@ -2511,6 +2519,10 @@
RelativePath="..\src\translator_ua.h"
>
</File>
<File
RelativePath="..\src\translator_vi.h"
>
</File>
<File
RelativePath="..\src\translator_za.h"
>
......
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