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 Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (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. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (12 October 2008) Dimitri van Heesch (dimitri@stack.nl) (03 November 2008)
...@@ -20,7 +20,7 @@ doxygen_version_minor=5 ...@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision=7.1 doxygen_version_revision=7.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #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"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
...@@ -38,7 +38,7 @@ f_app=NO ...@@ -38,7 +38,7 @@ f_app=NO
f_thread=NO f_thread=NO
f_flex=NO f_flex=NO
f_bison=NO f_bison=NO
f_langs=nl,se,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za,ar,fa 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 while test -n "$1"; do
case $1 in case $1 in
...@@ -669,7 +669,7 @@ fi ...@@ -669,7 +669,7 @@ fi
echo -n " Generating src/lang_cfg.h..." echo -n " Generating src/lang_cfg.h..."
echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>); echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>);
chomp @l; chomp @l;
@allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,MK,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA,SC")); @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){ foreach my $elem (@l){
$elem =~ tr/a-z/A-Z/; $elem =~ tr/a-z/A-Z/;
$r=0; $r=0;
......
...@@ -101,6 +101,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -101,6 +101,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_exclude_symlinks EXCLUDE_SYMLINKS \refitem cfg_exclude_symlinks EXCLUDE_SYMLINKS
\refitem cfg_expand_as_defined EXPAND_AS_DEFINED \refitem cfg_expand_as_defined EXPAND_AS_DEFINED
\refitem cfg_expand_only_predef EXPAND_ONLY_PREDEF \refitem cfg_expand_only_predef EXPAND_ONLY_PREDEF
\refitem cfg_extension_mapping EXTENSION_MAPPING
\refitem cfg_external_groups EXTERNAL_GROUPS \refitem cfg_external_groups EXTERNAL_GROUPS
\refitem cfg_extra_packages EXTRA_PACKAGES \refitem cfg_extra_packages EXTRA_PACKAGES
\refitem cfg_extract_all EXTRACT_ALL \refitem cfg_extract_all EXTRACT_ALL
...@@ -195,7 +196,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -195,7 +196,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_project_number PROJECT_NUMBER \refitem cfg_project_number PROJECT_NUMBER
\refitem cfg_qhp_namespace QHP_NAMESPACE \refitem cfg_qhp_namespace QHP_NAMESPACE
\refitem cfg_qhp_virtual_folder QHP_VIRTUAL_FOLDER \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_cust_filter_attrs QHP_CUST_FILTER_ATTRS
\refitem cfg_qhp_sect_filter_attrs QHP_SECT_FILTER_ATTRS \refitem cfg_qhp_sect_filter_attrs QHP_SECT_FILTER_ATTRS
\refitem cfg_qhg_location QHG_LOCATION \refitem cfg_qhg_location QHG_LOCATION
...@@ -550,14 +551,26 @@ followed by the descriptions of the tags grouped by category. ...@@ -550,14 +551,26 @@ followed by the descriptions of the tags grouped by category.
\anchor cfg_optimize_for_fortran \anchor cfg_optimize_for_fortran
<dt>\c OPTIMIZE_FOR_FORTRAN <dd> <dt>\c OPTIMIZE_FOR_FORTRAN <dd>
\addindex OPTIMIZE_FOR_FORTRAN \addindex OPTIMIZE_FOR_FORTRAN
Set the \c OPTIMIZE_FOR_FORTRAN tag to \c YES if your project consists of 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. sources. Doxygen will then generate output that is tailored for Fortran.
\anchor cfg_optimize_output_vhdl \anchor cfg_optimize_output_vhdl
<dt>\c OPTIMIZE_OUTPUT_VHDL <dd> <dt>\c OPTIMIZE_OUTPUT_VHDL <dd>
\addindex OPTIMIZE_OUTPUT_VHDL \addindex OPTIMIZE_OUTPUT_VHDL
Set the \c OPTIMIZE_OUTPUT_VHDL tag to \c YES if your project consists of 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. 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 \anchor cfg_subgrouping
<dt>\c SUBGROUPING <dd> <dt>\c SUBGROUPING <dd>
...@@ -1387,10 +1400,10 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ...@@ -1387,10 +1400,10 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
generating Qt Help Project output. For more information please see 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>. <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.
\anchor cfg_qhp_custom_filter_name \anchor cfg_qhp_cust_filter_name
<dt>\c QHP_CUSTOM_FILTER_NAME <dd> <dt>\c QHP_CUST_FILTER_NAME <dd>
\addindex QHP_CUSTOM_FILTER_NAME \addindex QHP_CUST_FILTER_NAME
If QHP_CUSTOM_FILTER_NAME is set, it specifies the name of a custom filter to add. For more information please see 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>. <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
\anchor cfg_qhp_cust_filter_attrs \anchor cfg_qhp_cust_filter_attrs
......
...@@ -23,14 +23,14 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -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 than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). configuration file (with default name and known as Doxyfile).
Currently (version 1.5.6), 35 languages Currently (version 1.5.7.1), 36 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, (+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese,
Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish,
Swedish, and Ukrainian.. Swedish, Ukrainian, and Vietnamese..
The table of information related to the supported languages follows. The table of information related to the supported languages follows.
It is sorted by language alphabetically. The <b>Status</b> column It is sorted by language alphabetically. The <b>Status</b> column
...@@ -273,6 +273,12 @@ when the translator was updated. ...@@ -273,6 +273,12 @@ when the translator was updated.
<td>olexij.tkatchenko at parcs dot de</td> <td>olexij.tkatchenko at parcs dot de</td>
<td>1.4.1</td> <td>1.4.1</td>
</tr> </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 content end -->
</table> </table>
</td> </td>
...@@ -376,6 +382,8 @@ when the translator was updated. ...@@ -376,6 +382,8 @@ when the translator was updated.
\hline \hline
Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & 1.4.1 \\ Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & 1.4.1 \\
\hline \hline
Vietnamese & Dang Minh Tuan & {\tt\tiny tuanvietkey@gmail.com} & up-to-date \\
\hline
\end{tabular} \end{tabular}
\endlatexonly \endlatexonly
......
...@@ -128,3 +128,5 @@ Mikael Hallin: mikaelhallin@yahoo.se ...@@ -128,3 +128,5 @@ Mikael Hallin: mikaelhallin@yahoo.se
TranslatorUkrainian TranslatorUkrainian
Olexij Tkatchenko: olexij.tkatchenko@parcs.de 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 Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese, (+En), Lithuanian, Macedonian, Norwegian, Persian, Polish, Portuguese,
Romanian, Russian, Serbian, SerbianCyrilic, Slovak, Slovene, Spanish, 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. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -36,6 +36,7 @@ still may be some details listed even for them: ...@@ -36,6 +36,7 @@ still may be some details listed even for them:
TranslatorSerbianCyrilic TranslatorSerbianCyrilic
TranslatorSerbian TranslatorSerbian
TranslatorSpanish -- Change the base class to Translator. TranslatorSpanish -- Change the base class to Translator.
TranslatorVietnamese
---------------------------------------------------------------------- ----------------------------------------------------------------------
The following translator classes need some maintenance (the most 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 #ifndef CONFIG_H
#define CONFIG_H #define CONFIG_H
...@@ -56,6 +74,7 @@ class ConfigOption ...@@ -56,6 +74,7 @@ class ConfigOption
virtual void writeTemplate(QTextStream &t,bool sl,bool upd) = 0; virtual void writeTemplate(QTextStream &t,bool sl,bool upd) = 0;
virtual void convertStrToVal() {} virtual void convertStrToVal() {}
virtual void substEnvVars() = 0; virtual void substEnvVars() = 0;
virtual void writeXML(QTextStream&) {}
virtual void init() {} virtual void init() {}
QCString convertToComment(const QCString &s); QCString convertToComment(const QCString &s);
...@@ -128,6 +147,7 @@ class ConfigList : public ConfigOption ...@@ -128,6 +147,7 @@ class ConfigList : public ConfigOption
t << "\n"; t << "\n";
} }
void substEnvVars(); void substEnvVars();
void writeXML(QTextStream&);
void init() { m_value.clear(); } void init() { m_value.clear(); }
private: private:
QStrList m_value; QStrList m_value;
...@@ -167,6 +187,7 @@ class ConfigEnum : public ConfigOption ...@@ -167,6 +187,7 @@ class ConfigEnum : public ConfigOption
writeStringValue(t,m_value); writeStringValue(t,m_value);
t << "\n"; t << "\n";
} }
void writeXML(QTextStream&);
void init() { m_value = m_defValue.copy(); } void init() { m_value = m_defValue.copy(); }
private: private:
...@@ -209,6 +230,7 @@ class ConfigString : public ConfigOption ...@@ -209,6 +230,7 @@ class ConfigString : public ConfigOption
t << "\n"; t << "\n";
} }
void substEnvVars(); void substEnvVars();
void writeXML(QTextStream&);
void init() { m_value = m_defValue.copy(); } void init() { m_value = m_defValue.copy(); }
private: private:
...@@ -258,6 +280,7 @@ class ConfigInt : public ConfigOption ...@@ -258,6 +280,7 @@ class ConfigInt : public ConfigOption
} }
t << "\n"; t << "\n";
} }
void writeXML(QTextStream&);
void init() { m_value = m_defValue; } void init() { m_value = m_defValue; }
private: private:
int m_value; int m_value;
...@@ -305,6 +328,7 @@ class ConfigBool : public ConfigOption ...@@ -305,6 +328,7 @@ class ConfigBool : public ConfigOption
} }
t << "\n"; t << "\n";
} }
void writeXML(QTextStream&);
void init() { m_value = m_defValue; } void init() { m_value = m_defValue; }
private: private:
bool m_value; bool m_value;
...@@ -321,6 +345,7 @@ class ConfigObsolete : public ConfigOption ...@@ -321,6 +345,7 @@ class ConfigObsolete : public ConfigOption
ConfigObsolete(OptionType t) : ConfigOption(t) {} ConfigObsolete(OptionType t) : ConfigOption(t) {}
void writeTemplate(QTextStream &,bool,bool) {} void writeTemplate(QTextStream &,bool,bool) {}
void substEnvVars() {} void substEnvVars() {}
void writeXML(QTextStream&);
}; };
...@@ -511,6 +536,9 @@ class Config ...@@ -511,6 +536,9 @@ class Config
*/ */
void writeTemplate(QTextStream &t,bool shortIndex,bool updateOnly); void writeTemplate(QTextStream &t,bool shortIndex,bool updateOnly);
/** Write XML representation of the config file */
void writeXML(QTextStream &t);
///////////////////////////// /////////////////////////////
// internal API // 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) ...@@ -258,6 +258,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
outImage.writeBlock(buffer,inImage.size()); outImage.writeBlock(buffer,inImage.size());
outImage.flush(); outImage.flush();
delete buffer; delete buffer;
if (type==DocImage::Html) Doxygen::indexList.addImageFile(result);
} }
else else
{ {
...@@ -2762,7 +2763,7 @@ int DocInternal::parse(int level) ...@@ -2762,7 +2763,7 @@ int DocInternal::parse(int level)
) )
{ {
DocSection *s=new DocSection(this, 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); m_children.append(s);
retval = s->parse(); retval = s->parse();
} }
...@@ -5813,43 +5814,46 @@ int DocSection::parse() ...@@ -5813,43 +5814,46 @@ int DocSection::parse()
if (lastPar) lastPar->markLast(); 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 // then parse any number of nested sections
while (retval==RetVal_Subsection) // more sections follow while (retval==RetVal_Subsection) // more sections follow
{ {
//SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId]; //SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
DocSection *s=new DocSection(this, 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); m_children.append(s);
retval = s->parse(); 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 // then parse any number of nested sections
while (retval==RetVal_Subsubsection) // more sections follow while (retval==RetVal_Subsubsection) // more sections follow
{ {
//SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId]; //SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
DocSection *s=new DocSection(this, 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); m_children.append(s);
retval = s->parse(); 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 // then parse any number of nested sections
while (retval==RetVal_Paragraph) // more sections follow while (retval==RetVal_Paragraph) // more sections follow
{ {
//SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId]; //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); m_children.append(s);
retval = s->parse(); retval = s->parse();
} }
} }
else if ((m_level<=1 && retval==RetVal_Subsubsection) || else if ((m_level<=1+Doxygen::subpageNestingLevel && retval==RetVal_Subsubsection) ||
(m_level<=2 && retval==RetVal_Paragraph) (m_level<=2+Doxygen::subpageNestingLevel && retval==RetVal_Paragraph)
) )
{ {
int level; int level;
...@@ -6013,6 +6017,7 @@ void DocRoot::parse() ...@@ -6013,6 +6017,7 @@ void DocRoot::parse()
} while (retval!=0 && retval!=RetVal_Section && retval!=RetVal_Internal); } while (retval!=0 && retval!=RetVal_Section && retval!=RetVal_Internal);
if (lastPar) lastPar->markLast(); if (lastPar) lastPar->markLast();
//printf("DocRoot::parse() retval=%d %d\n",retval,RetVal_Section);
// then parse any number of level1 sections // then parse any number of level1 sections
while (retval==RetVal_Section) while (retval==RetVal_Section)
{ {
...@@ -6020,7 +6025,7 @@ void DocRoot::parse() ...@@ -6020,7 +6025,7 @@ void DocRoot::parse()
if (sec) if (sec)
{ {
DocSection *s=new DocSection(this, 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); m_children.append(s);
retval = s->parse(); retval = s->parse();
} }
......
...@@ -280,8 +280,10 @@ void DocSets::addIndexItem(const char *, const char *, ...@@ -280,8 +280,10 @@ void DocSets::addIndexItem(const char *, const char *,
scope = cd->qualifiedName(); scope = cd->qualifiedName();
if (cd->isTemplate()) if (cd->isTemplate())
type="tmplt"; type="tmplt";
else if (cd->compoundType()==ClassDef::Interface) else if (cd->compoundType()==ClassDef::Protocol)
type="intf"; type="intf";
else if (cd->compoundType()==ClassDef::Interface)
type="cl";
else if (cd->compoundType()==ClassDef::Category) else if (cd->compoundType()==ClassDef::Category)
type="cat"; type="cat";
else else
...@@ -357,7 +359,9 @@ void DocSets::writeToken(QTextStream &t, ...@@ -357,7 +359,9 @@ void DocSets::writeToken(QTextStream &t,
{ {
t << " <Token>" << endl; t << " <Token>" << endl;
t << " <TokenIdentifier>" << 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 << " <APILanguage>" << lang << "</APILanguage>" << endl;
t << " <Type>" << type << "</Type>" << endl; t << " <Type>" << type << "</Type>" << endl;
t << " <Scope>" << convertToXML(scope) << "</Scope>" << endl; t << " <Scope>" << convertToXML(scope) << "</Scope>" << endl;
......
...@@ -47,18 +47,19 @@ enum Tokens ...@@ -47,18 +47,19 @@ enum Tokens
RetVal_Subsection = 0x10004, RetVal_Subsection = 0x10004,
RetVal_Subsubsection = 0x10005, RetVal_Subsubsection = 0x10005,
RetVal_Paragraph = 0x10006, RetVal_Paragraph = 0x10006,
RetVal_EndList = 0x10007, RetVal_SubParagraph = 0x10007,
RetVal_EndPre = 0x10008, RetVal_EndList = 0x10008,
RetVal_DescData = 0x10009, RetVal_EndPre = 0x10009,
RetVal_DescTitle = 0x1000A, RetVal_DescData = 0x1000A,
RetVal_EndDesc = 0x1000B, RetVal_DescTitle = 0x1000B,
RetVal_TableRow = 0x1000C, RetVal_EndDesc = 0x1000C,
RetVal_TableCell = 0x1000D, RetVal_TableRow = 0x1000D,
RetVal_TableHCell = 0x1000E, RetVal_TableCell = 0x1000E,
RetVal_EndTable = 0x1000F, RetVal_TableHCell = 0x1000F,
RetVal_Internal = 0x10010, RetVal_EndTable = 0x10010,
RetVal_SwitchLang = 0x10011, RetVal_Internal = 0x10011,
RetVal_CloseXml = 0x10012 RetVal_SwitchLang = 0x10012,
RetVal_CloseXml = 0x10013
}; };
struct TokenInfo struct TokenInfo
......
...@@ -158,6 +158,7 @@ QCString spaces; ...@@ -158,6 +158,7 @@ QCString spaces;
static bool g_successfulRun = FALSE; static bool g_successfulRun = FALSE;
static bool g_dumpSymbolMap = FALSE; static bool g_dumpSymbolMap = FALSE;
static bool g_dumpConfigAsXML = FALSE;
...@@ -8917,6 +8918,17 @@ static void dumpSymbolMap() ...@@ -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 // print the usage of doxygen
...@@ -8977,15 +8989,15 @@ void initDoxygen() ...@@ -8977,15 +8989,15 @@ void initDoxygen()
Doxygen::runningTime.start(); Doxygen::runningTime.start();
initPreprocessor(); initPreprocessor();
ParserInterface *defaultParser = new CLanguageScanner; Doxygen::parserManager = new ParserManager;
Doxygen::parserManager = new ParserManager(defaultParser); Doxygen::parserManager->registerParser("c", new CLanguageScanner, TRUE);
Doxygen::parserManager->registerParser(".py", new PythonLanguageScanner); Doxygen::parserManager->registerParser("python", new PythonLanguageScanner);
Doxygen::parserManager->registerParser(".f", new FortranLanguageScanner); Doxygen::parserManager->registerParser("fortran", new FortranLanguageScanner);
Doxygen::parserManager->registerParser(".f90", new FortranLanguageScanner); Doxygen::parserManager->registerParser("vhdl", new VHDLLanguageScanner);
Doxygen::parserManager->registerParser(".vhd", new VHDLLanguageScanner);
// register any additional parsers here... // register any additional parsers here...
initDefaultExtensionMapping();
initClassMemberIndices(); initClassMemberIndices();
initNamespaceMemberIndices(); initNamespaceMemberIndices();
initFileMemberIndices(); initFileMemberIndices();
...@@ -9245,6 +9257,9 @@ void readConfiguration(int argc, char **argv) ...@@ -9245,6 +9257,9 @@ void readConfiguration(int argc, char **argv)
case 'm': case 'm':
g_dumpSymbolMap = TRUE; g_dumpSymbolMap = TRUE;
break; break;
case 'x':
g_dumpConfigAsXML = TRUE;
break;
case '-': case '-':
if (strcmp(&argv[optind][2],"help")==0) if (strcmp(&argv[optind][2],"help")==0)
{ {
...@@ -9280,7 +9295,13 @@ void readConfiguration(int argc, char **argv) ...@@ -9280,7 +9295,13 @@ void readConfiguration(int argc, char **argv)
if (genConfig) if (genConfig)
{ {
checkConfiguration();
generateConfigFile(configName,shortList); generateConfigFile(configName,shortList);
if (g_dumpConfigAsXML)
{
dumpConfigAsXML();
exit(0);
}
cleanUpDoxygen(); cleanUpDoxygen();
exit(0); exit(0);
} }
...@@ -9460,6 +9481,37 @@ void parseInput() ...@@ -9460,6 +9481,37 @@ void parseInput()
{ {
atexit(exitDoxygen); 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 * Make sure the output directory exists
**************************************************************************/ **************************************************************************/
......
...@@ -24,7 +24,7 @@ caption { ...@@ -24,7 +24,7 @@ caption {
font-weight: bold; font-weight: bold;
} }
div.qindex, div.navpath, div.navtab{ div.qindex, div.navtab{
background-color: #e8eef2; background-color: #e8eef2;
border: 1px solid #84b0c7; border: 1px solid #84b0c7;
text-align: center; text-align: center;
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
" font-weight: bold;\n" " font-weight: bold;\n"
"}\n" "}\n"
"\n" "\n"
"div.qindex, div.navpath, div.navtab{\n" "div.qindex, div.navtab{\n"
" background-color: #e8eef2;\n" " background-color: #e8eef2;\n"
" border: 1px solid #84b0c7;\n" " border: 1px solid #84b0c7;\n"
" text-align: center;\n" " text-align: center;\n"
......
...@@ -225,6 +225,7 @@ Entry::~Entry() ...@@ -225,6 +225,7 @@ Entry::~Entry()
delete argList; delete argList;
delete tArgLists; delete tArgLists;
delete tagInfo; delete tagInfo;
delete typeConstr;
delete sli; delete sli;
num--; num--;
} }
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#include "message.h" #include "message.h"
#include "config.h" #include "config.h"
#include "portable.h" #include "portable.h"
#include "index.h"
#include "doxygen.h"
Formula::Formula(const char *text) Formula::Formula(const char *text)
{ {
...@@ -92,6 +94,7 @@ void FormulaList::generateBitmaps(const char *path) ...@@ -92,6 +94,7 @@ void FormulaList::generateBitmaps(const char *path)
t << formula->getFormulaText() << endl << "\\pagebreak\n\n"; t << formula->getFormulaText() << endl << "\\pagebreak\n\n";
pagesToGenerate.append(new int(page)); pagesToGenerate.append(new int(page));
} }
Doxygen::indexList.addImageFile(resultName);
page++; page++;
} }
t << "\\end{document}" << endl; t << "\\end{document}" << endl;
......
...@@ -473,7 +473,7 @@ void FTVHelp::generateLink(QTextStream &t,FTVNode *n) ...@@ -473,7 +473,7 @@ void FTVHelp::generateLink(QTextStream &t,FTVNode *n)
// n->ref.data(),n->file.data(),n->anchor.data()); // n->ref.data(),n->file.data(),n->anchor.data());
if (n->file.isEmpty()) // no link if (n->file.isEmpty()) // no link
{ {
t << "<b>" << n->name << "</b>"; t << "<b>" << convertToHtml(n->name) << "</b>";
} }
else // link into other frame else // link into other frame
{ {
...@@ -499,7 +499,7 @@ void FTVHelp::generateLink(QTextStream &t,FTVNode *n) ...@@ -499,7 +499,7 @@ void FTVHelp::generateLink(QTextStream &t,FTVNode *n)
t << "\" target=\"basefrm\">"; t << "\" target=\"basefrm\">";
else else
t << "\" target=\"_self\">"; t << "\" target=\"_self\">";
t << n->name; t << convertToHtml(n->name);
t << "</a>"; t << "</a>";
if (!n->ref.isEmpty()) if (!n->ref.isEmpty())
{ {
......
...@@ -383,7 +383,7 @@ static const char tabs_css[] = ...@@ -383,7 +383,7 @@ static const char tabs_css[] =
" float : left;\n" " float : left;\n"
" background : url(\"tab_r.gif\") no-repeat right top;\n" " background : url(\"tab_r.gif\") no-repeat right top;\n"
" border-bottom : 1px solid #84B0C7;\n" " border-bottom : 1px solid #84B0C7;\n"
" font-size : 8px;\n" " font-size : 80%;\n"
" font-weight : bold;\n" " font-weight : bold;\n"
" text-decoration : none;\n" " text-decoration : none;\n"
"}\n" "}\n"
...@@ -417,7 +417,7 @@ static const char tabs_css[] = ...@@ -417,7 +417,7 @@ static const char tabs_css[] =
"\n" "\n"
"DIV.tabs TD\n" "DIV.tabs TD\n"
"{\n" "{\n"
" font-size : 8px;\n" " font-size : 80%;\n"
" font-weight : bold;\n" " font-weight : bold;\n"
" text-decoration : none;\n" " text-decoration : none;\n"
"}\n" "}\n"
...@@ -450,6 +450,9 @@ static const char tabs_css[] = ...@@ -450,6 +450,9 @@ static const char tabs_css[] =
" background : none;\n" " background : none;\n"
" border : none;\n" " border : none;\n"
" border-bottom : 1px solid #84B0C7;\n" " border-bottom : 1px solid #84B0C7;\n"
" text-align : center;\n"
" margin : 2px;\n"
" padding : 2px;\n"
"}\n" "}\n"
; ;
...@@ -573,6 +576,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title, ...@@ -573,6 +576,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title,
"<title>"; "<title>";
t << convertToHtml(title); t << convertToHtml(title);
t << "</title>\n"; t << "</title>\n";
t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "<link "; t << "<link ";
t << "href=\""; t << "href=\"";
if (Config_getString("HTML_STYLESHEET").isEmpty()) if (Config_getString("HTML_STYLESHEET").isEmpty())
...@@ -591,7 +595,6 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title, ...@@ -591,7 +595,6 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title,
} }
t << "\" rel=\"stylesheet\" type=\"text/css\">\n"; t << "\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\">\n";
t << "</head><body>\n"; t << "</head><body>\n";
} }
......
...@@ -32,3 +32,4 @@ ...@@ -32,3 +32,4 @@
#define LANG_ZA #define LANG_ZA
#define LANG_AR #define LANG_AR
#define LANG_FA #define LANG_FA
#define LANG_VI
...@@ -134,6 +134,9 @@ ...@@ -134,6 +134,9 @@
#ifdef LANG_SC #ifdef LANG_SC
#include "translator_sc.h" #include "translator_sc.h"
#endif #endif
#ifdef LANG_VI
#include "translator_vi.h"
#endif
#endif // !ENGLISH_ONLY #endif // !ENGLISH_ONLY
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -373,6 +376,12 @@ bool setTranslator(const char *langName) ...@@ -373,6 +376,12 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorMacedonian; theTranslator=new TranslatorMacedonian;
} }
#endif #endif
#ifdef LANG_VI
else if (L_EQUAL("vietnamese"))
{
theTranslator=new TranslatorVietnamese;
}
#endif
#endif // ENGLISH_ONLY #endif // ENGLISH_ONLY
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
...@@ -365,6 +365,14 @@ static void writeDefaultStyleSheetPart3(QTextStream &t) ...@@ -365,6 +365,14 @@ static void writeDefaultStyleSheetPart3(QTextStream &t)
t << "\\addtocounter{secnumdepth}{1}\n"; t << "\\addtocounter{secnumdepth}{1}\n";
t << "\\sloppy\n"; t << "\\sloppy\n";
t << "\\usepackage[T1]{fontenc}\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) void LatexGenerator::writeHeaderFile(QFile &f)
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
TEMPLATE = libdoxycfg.t TEMPLATE = libdoxycfg.t
CONFIG = console warn_on staticlib $extraopts CONFIG = console warn_on staticlib $extraopts
HEADERS = config.h portable.h HEADERS = config.h configoptions.h portable.h
SOURCES = config.cpp portable.cpp SOURCES = config.cpp configoptions.cpp portable.cpp
win32:TMAKE_CXXFLAGS += -DQT_NODLL win32:TMAKE_CXXFLAGS += -DQT_NODLL
win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
INCLUDEPATH += ../qtools INCLUDEPATH += ../qtools
......
...@@ -137,6 +137,7 @@ HEADERS = bufstr.h \ ...@@ -137,6 +137,7 @@ HEADERS = bufstr.h \
translator_sr.h \ translator_sr.h \
translator_tw.h \ translator_tw.h \
translator_ua.h \ translator_ua.h \
translator_vi.h \
translator_za.h \ translator_za.h \
unistd.h \ unistd.h \
util.h \ util.h \
......
...@@ -109,22 +109,38 @@ class ParserManager ...@@ -109,22 +109,38 @@ class ParserManager
{ {
public: public:
/** Creates the parser manager object. /** 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) ParserManager()
: m_defaultParser(defaultParser) { m_parsers.setAutoDelete(TRUE); } : m_defaultParser(0) { m_parsers.setAutoDelete(TRUE); }
/** Registers an additional parser. /** Registers an additional parser.
* @param[in] extension The file extension that will trigger * @param[in] name A symbolic name of the parser, i.e. "c",
* the use of this parser (e.g. ".py", or ".bas"). * "python", "fortran", "vhdl", ...
* @param[in] parser The parser that is to be used for the * @param[in] parser The parser that is to be used for the
* given extension. * 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. /** Gets the interface to the parser associated with given \a extension.
...@@ -135,16 +151,17 @@ class ParserManager ...@@ -135,16 +151,17 @@ class ParserManager
{ {
if (extension==0) return m_defaultParser; if (extension==0) return m_defaultParser;
QCString ext = QCString(extension).lower(); QCString ext = QCString(extension).lower();
ParserInterface *intf = m_parsers.find(ext); ParserInterface *intf = m_extensions.find(ext);
if (intf==0 && ext.length()>4) 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; return intf ? intf : m_defaultParser;
} }
private: private:
QDict<ParserInterface> m_parsers; QDict<ParserInterface> m_parsers;
QDict<ParserInterface> m_extensions;
ParserInterface *m_defaultParser; ParserInterface *m_defaultParser;
}; };
......
...@@ -75,7 +75,7 @@ void Qhp::initialize() ...@@ -75,7 +75,7 @@ void Qhp::initialize()
m_doc.openCloseContent("virtualFolder", virtualFolder); m_doc.openCloseContent("virtualFolder", virtualFolder);
// Add custom filter // Add custom filter
QCString filterName = Config_getString("QHP_CUSTOM_FILTER_NAME"); QCString filterName = Config_getString("QHP_CUST_FILTER_NAME");
if (!filterName.isEmpty()) if (!filterName.isEmpty())
{ {
const char * tagAttributes[] = const char * tagAttributes[] =
......
...@@ -4613,7 +4613,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) ...@@ -4613,7 +4613,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<Bases,ClassVar>("//"{B}*)?"/**"/[^/*] | <Bases,ClassVar>("//"{B}*)?"/**"/[^/*] |
<Bases,ClassVar>("//"{B}*)?"/*!" | <Bases,ClassVar>("//"{B}*)?"/*!" |
<Bases,ClassVar>"//!" | <Bases,ClassVar>"//!" |
<Bases,ClassVar>[\-+]{BN}+ { <Bases,ClassVar>[\-+]{BN}* {
if (!insideObjC) if (!insideObjC)
{ {
REJECT; REJECT;
......
This diff is collapsed.
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
#include "doxygen.h" #include "doxygen.h"
#include "textdocvisitor.h" #include "textdocvisitor.h"
#include "portable.h" #include "portable.h"
#include "parserintf.h"
#define ENABLE_TRACINGSUPPORT 0 #define ENABLE_TRACINGSUPPORT 0
...@@ -4459,10 +4460,10 @@ QCString substituteClassNames(const QCString &s) ...@@ -4459,10 +4460,10 @@ QCString substituteClassNames(const QCString &s)
QCString substitute(const char *s,const char *src,const char *dst) 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; const char *p, *q;
int srcLen = strlen(src); int srcLen = strlen(src);
int dstLen = strlen(dst); int dstLen = dst ? strlen(dst) : 0;
int resLen; int resLen;
if (srcLen!=dstLen) if (srcLen!=dstLen)
{ {
...@@ -4481,7 +4482,7 @@ QCString substitute(const char *s,const char *src,const char *dst) ...@@ -4481,7 +4482,7 @@ QCString substitute(const char *s,const char *src,const char *dst)
int l = (int)(q-p); int l = (int)(q-p);
memcpy(r,p,l); memcpy(r,p,l);
r+=l; r+=l;
memcpy(r,dst,dstLen); if (dst) memcpy(r,dst,dstLen);
r+=dstLen; r+=dstLen;
} }
strcpy(r,p); strcpy(r,p);
...@@ -6374,30 +6375,32 @@ static QDict<int> g_extLookup; ...@@ -6374,30 +6375,32 @@ static QDict<int> g_extLookup;
static struct Lang2ExtMap static struct Lang2ExtMap
{ {
const char *langName; const char *langName;
const char *parserName;
SrcLangExt parserId; SrcLangExt parserId;
} }
g_lang2extMap[] = g_lang2extMap[] =
{ {
{ "idl", SrcLangExt_IDL }, // language parser parser option
{ "java", SrcLangExt_Java }, { "idl", "c", SrcLangExt_IDL },
{ "javascript", SrcLangExt_JS }, { "java", "c", SrcLangExt_Java },
{ "c#", SrcLangExt_CSharp }, { "javascript", "c", SrcLangExt_JS },
{ "d", SrcLangExt_D }, { "c#", "c", SrcLangExt_CSharp },
{ "php", SrcLangExt_PHP }, { "d", "c", SrcLangExt_D },
{ "objective-c", SrcLangExt_ObjC }, { "php", "c", SrcLangExt_PHP },
{ "python", SrcLangExt_Python }, { "objective-c", "c", SrcLangExt_ObjC },
{ "fortran", SrcLangExt_F90 }, { "c", "c", SrcLangExt_Cpp },
{ "vhdl", SrcLangExt_VHDL }, { "c++", "c", SrcLangExt_Cpp },
{ "c", SrcLangExt_Cpp }, { "python", "python", SrcLangExt_Python },
{ "c++", SrcLangExt_Cpp }, { "fortran", "fortran", SrcLangExt_F90 },
{ 0, (SrcLangExt)0 } { "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; const Lang2ExtMap *p = g_lang2extMap;
QCString langName = parser.lower(); QCString langName = language.lower();
while (p->langName) while (p->langName)
{ {
if (langName==p->langName) break; if (langName==p->langName) break;
...@@ -6405,49 +6408,58 @@ bool updateLanguageMapping(const QCString &extension,const QCString &parser) ...@@ -6405,49 +6408,58 @@ bool updateLanguageMapping(const QCString &extension,const QCString &parser)
} }
if (!p->langName) return FALSE; if (!p->langName) return FALSE;
// found the parser // found the language
SrcLangExt parserId = p->parserId; SrcLangExt parserId = p->parserId;
QCString extName = extension; QCString extName = extension;
if (extName.isEmpty()) return FALSE; if (extName.isEmpty()) return FALSE;
if (extName.at(0)!='.') extName.prepend("."); 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.remove(extension);
} }
g_extLookup.insert(extension,new int(parserId)); 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; 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) SrcLangExt getLanguageFromFileName(const QCString fileName)
{ {
int i = fileName.findRev('.'); 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 if (i!=-1) // name has an extension
{ {
QCString extStr=fileName.right(fileName.length()-i); QCString extStr=fileName.right(fileName.length()-i);
...@@ -6456,7 +6468,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName) ...@@ -6456,7 +6468,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName)
int *pVal=g_extLookup.find(extStr); int *pVal=g_extLookup.find(extStr);
if (pVal) // listed extension 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, ...@@ -330,6 +330,7 @@ void stringToSearchIndex(const QCString &docUrlBase,const QCString &title,
bool updateLanguageMapping(const QCString &extension,const QCString &parser); bool updateLanguageMapping(const QCString &extension,const QCString &parser);
SrcLangExt getLanguageFromFileName(const QCString fileName); SrcLangExt getLanguageFromFileName(const QCString fileName);
void initDefaultExtensionMapping();
bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n); bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n);
......
...@@ -396,6 +396,10 @@ ...@@ -396,6 +396,10 @@
/> />
</FileConfiguration> </FileConfiguration>
</File> </File>
<File
RelativePath="..\src\configoptions.cpp"
>
</File>
<File <File
RelativePath="..\src\constexp.l" RelativePath="..\src\constexp.l"
> >
...@@ -1027,51 +1031,7 @@ ...@@ -1027,51 +1031,7 @@
</FileConfiguration> </FileConfiguration>
</File> </File>
<File <File
RelativePath="..\src\qhp.cpp" RelativePath="..\src\image.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"
> >
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
...@@ -1093,7 +1053,7 @@ ...@@ -1093,7 +1053,7 @@
</FileConfiguration> </FileConfiguration>
</File> </File>
<File <File
RelativePath="..\src\image.cpp" RelativePath="..\src\index.cpp"
> >
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
...@@ -1115,7 +1075,7 @@ ...@@ -1115,7 +1075,7 @@
</FileConfiguration> </FileConfiguration>
</File> </File>
<File <File
RelativePath="..\src\index.cpp" RelativePath="..\src\indexlog.cpp"
> >
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
...@@ -1668,6 +1628,50 @@ ...@@ -1668,6 +1628,50 @@
/> />
</FileConfiguration> </FileConfiguration>
</File> </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 <File
RelativePath="..\src\reflist.cpp" RelativePath="..\src\reflist.cpp"
> >
...@@ -2155,18 +2159,6 @@ ...@@ -2155,18 +2159,6 @@
RelativePath="..\src\htmlhelp.h" RelativePath="..\src\htmlhelp.h"
> >
</File> </File>
<File
RelativePath="..\src\qhpxmlwriter.h"
>
</File>
<File
RelativePath="..\src\indexlog.h"
>
</File>
<File
RelativePath="..\src\qhp.h"
>
</File>
<File <File
RelativePath=".\iconv.h" RelativePath=".\iconv.h"
> >
...@@ -2183,6 +2175,10 @@ ...@@ -2183,6 +2175,10 @@
RelativePath="..\src\index_xsd.h" RelativePath="..\src\index_xsd.h"
> >
</File> </File>
<File
RelativePath="..\src\indexlog.h"
>
</File>
<File <File
RelativePath="..\src\instdox.h" RelativePath="..\src\instdox.h"
> >
...@@ -2311,6 +2307,14 @@ ...@@ -2311,6 +2307,14 @@
RelativePath="..\src\pyscanner.h" RelativePath="..\src\pyscanner.h"
> >
</File> </File>
<File
RelativePath="..\src\qhp.h"
>
</File>
<File
RelativePath="..\src\qhpxmlwriter.h"
>
</File>
<File <File
RelativePath="..\src\qtbc.h" RelativePath="..\src\qtbc.h"
> >
...@@ -2487,6 +2491,10 @@ ...@@ -2487,6 +2491,10 @@
RelativePath="..\src\translator_ru.h" RelativePath="..\src\translator_ru.h"
> >
</File> </File>
<File
RelativePath="..\src\translator_sc.h"
>
</File>
<File <File
RelativePath="..\src\translator_se.h" RelativePath="..\src\translator_se.h"
> >
...@@ -2511,6 +2519,10 @@ ...@@ -2511,6 +2519,10 @@
RelativePath="..\src\translator_ua.h" RelativePath="..\src\translator_ua.h"
> >
</File> </File>
<File
RelativePath="..\src\translator_vi.h"
>
</File>
<File <File
RelativePath="..\src\translator_za.h" 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