Commit 5a640083 authored by dimitri's avatar dimitri

Release-1.4.1-20050307

parent d745dd37
DOXYGEN Version 1.4.1-20050227 DOXYGEN Version 1.4.1-20050307
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 (27 February 2005) Dimitri van Heesch (07 March 2005)
DOXYGEN Version 1.4.1_20050227 DOXYGEN Version 1.4.1_20050307
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) (27 February 2005) Dimitri van Heesch (dimitri@stack.nl) (07 March 2005)
1.4.1-20050227 1.4.1-20050307
...@@ -823,12 +823,12 @@ MainWidget::MainWidget(QWidget *parent) ...@@ -823,12 +823,12 @@ MainWidget::MainWidget(QWidget *parent)
// load default settings // load default settings
m_settings.setPath("www.doxygen.org","Doxygen GUI"); m_settings.setPath("www.doxygen.org","Doxygen GUI");
bool ok; bool ok;
QString config = m_settings.readEntry("/config/default",QString::null,&ok); QString config = m_settings.readEntry("/doxywizard/config/default",QString::null,&ok);
if (ok && !config.isEmpty()) if (ok && !config.isEmpty())
{ {
Config::instance()->parseString("default settings",config); Config::instance()->parseString("default settings",config);
} }
QString workingDir = m_settings.readEntry("/config/workingdir",QString::null,&ok); QString workingDir = m_settings.readEntry("/doxywizard/config/workingdir",QString::null,&ok);
if (ok && !workingDir.isEmpty()) if (ok && !workingDir.isEmpty())
{ {
m_workingDir->setText(workingDir); m_workingDir->setText(workingDir);
...@@ -836,7 +836,7 @@ MainWidget::MainWidget(QWidget *parent) ...@@ -836,7 +836,7 @@ MainWidget::MainWidget(QWidget *parent)
setConfigSaved(FALSE); setConfigSaved(FALSE);
for (int i=0;i<10;i++) for (int i=0;i<10;i++)
{ {
QString entry = m_settings.readEntry(QString().sprintf("/recent/config%d",i)); QString entry = m_settings.readEntry(QString().sprintf("/doxywizard/recent/config%d",i));
if (!entry.isEmpty()) if (!entry.isEmpty())
{ {
addRecentFile(entry); addRecentFile(entry);
...@@ -1178,8 +1178,8 @@ void MainWidget::saveDefaults() ...@@ -1178,8 +1178,8 @@ void MainWidget::saveDefaults()
QString newConfig; QString newConfig;
QTextStream t(&newConfig,IO_WriteOnly); QTextStream t(&newConfig,IO_WriteOnly);
Config::instance()->writeTemplate(t,TRUE,FALSE); Config::instance()->writeTemplate(t,TRUE,FALSE);
m_settings.writeEntry("/config/default",newConfig); m_settings.writeEntry("/doxywizard/config/default",newConfig);
m_settings.writeEntry("/config/workingdir",m_workingDir->text()); m_settings.writeEntry("/doxywizard/config/workingdir",m_workingDir->text());
statusBar()->message("Current configuration saved as default",messageTimeout); statusBar()->message("Current configuration saved as default",messageTimeout);
} }
} }
...@@ -1361,7 +1361,7 @@ void MainWidget::addRecentFile(const QString &file) ...@@ -1361,7 +1361,7 @@ void MainWidget::addRecentFile(const QString &file)
for ( it = m_recentFiles.begin(); it != m_recentFiles.end(); ++it, ++i ) for ( it = m_recentFiles.begin(); it != m_recentFiles.end(); ++it, ++i )
{ {
m_recentMenu->insertItem(*it); m_recentMenu->insertItem(*it);
m_settings.writeEntry(QString().sprintf("/recent/config%d",i),*it); m_settings.writeEntry(QString().sprintf("/doxywizard/recent/config%d",i),*it);
} }
} }
......
...@@ -60,7 +60,7 @@ when the translator was updated. ...@@ -60,7 +60,7 @@ when the translator was updated.
<td>Brazilian Portuguese</td> <td>Brazilian Portuguese</td>
<td>Fabio "FJTC" Jun Takada Chino</td> <td>Fabio "FJTC" Jun Takada Chino</td>
<td>jun-chino at uol dot com dot br</td> <td>jun-chino at uol dot com dot br</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Catalan</td> <td>Catalan</td>
...@@ -72,7 +72,7 @@ when the translator was updated. ...@@ -72,7 +72,7 @@ when the translator was updated.
<td>Chinese</td> <td>Chinese</td>
<td>Li Daobing<br>Wei Liu</td> <td>Li Daobing<br>Wei Liu</td>
<td>lidaobing at gmail dot com<br>liuwei at asiainfo dot com</td> <td>lidaobing at gmail dot com<br>liuwei at asiainfo dot com</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Chinese Traditional</td> <td>Chinese Traditional</td>
...@@ -84,13 +84,13 @@ when the translator was updated. ...@@ -84,13 +84,13 @@ when the translator was updated.
<td>Croatian</td> <td>Croatian</td>
<td>Boris Bralo</td> <td>Boris Bralo</td>
<td>boris.bralo at zg dot htnet dot hr</td> <td>boris.bralo at zg dot htnet dot hr</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Czech</td> <td>Czech</td>
<td>Petr P&#x0159;ikryl</td> <td>Petr P&#x0159;ikryl</td>
<td>prikrylp at skil dot cz</td> <td>prikrylp at skil dot cz</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Danish</td> <td>Danish</td>
...@@ -120,13 +120,13 @@ when the translator was updated. ...@@ -120,13 +120,13 @@ when the translator was updated.
<td>French</td> <td>French</td>
<td>Xavier Outhier</td> <td>Xavier Outhier</td>
<td>xouthier at yahoo dot fr</td> <td>xouthier at yahoo dot fr</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>German</td> <td>German</td>
<td>Jens Seidel</td> <td>Jens Seidel</td>
<td>jensseidel at users dot sf dot net</td> <td>jensseidel at users dot sf dot net</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Greek</td> <td>Greek</td>
...@@ -136,15 +136,15 @@ when the translator was updated. ...@@ -136,15 +136,15 @@ when the translator was updated.
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Hungarian</td> <td>Hungarian</td>
<td>F&ouml;ldv&aacute;ri Gy&ouml;rgy<br>&Aacute;kos Kiss</td> <td>&Aacute;kos Kiss<br>F&ouml;ldv&aacute;ri Gy&ouml;rgy</td>
<td>foldvari lost at cyberspace<br>akiss at users dot sourceforge dot net</td> <td>akiss at users dot sourceforge dot net<br>foldvari lost at cyberspace</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Italian</td> <td>Italian</td>
<td>Alessandro Falappa<br>Ahmed Aldo Faisal</td> <td>Alessandro Falappa<br>Ahmed Aldo Faisal</td>
<td>alessandro at falappa dot net<br>aaf23 at cam dot ac dot uk</td> <td>alessandro at falappa dot net<br>aaf23 at cam dot ac dot uk</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Japanese</td> <td>Japanese</td>
...@@ -162,7 +162,7 @@ when the translator was updated. ...@@ -162,7 +162,7 @@ when the translator was updated.
<td>Korean</td> <td>Korean</td>
<td>SooYoung Jung<br>Richard Kim</td> <td>SooYoung Jung<br>Richard Kim</td>
<td>jung5000 at gmail dot com<br>ryk at dspwiz dot com</td> <td>jung5000 at gmail dot com<br>ryk at dspwiz dot com</td>
<td>up-to-date</td> <td>1.4.01</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>KoreanEn</td> <td>KoreanEn</td>
...@@ -186,7 +186,7 @@ when the translator was updated. ...@@ -186,7 +186,7 @@ when the translator was updated.
<td>Polish</td> <td>Polish</td>
<td>Piotr Kaminski<br>Grzegorz Kowal</td> <td>Piotr Kaminski<br>Grzegorz Kowal</td>
<td>Piotr.Kaminski at ctm dot gdynia dot pl<br>g_kowal at poczta dot onet dot pl</td> <td>Piotr.Kaminski at ctm dot gdynia dot pl<br>g_kowal at poczta dot onet dot pl</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Portuguese</td> <td>Portuguese</td>
...@@ -198,19 +198,19 @@ when the translator was updated. ...@@ -198,19 +198,19 @@ when the translator was updated.
<td>Romanian</td> <td>Romanian</td>
<td>Alexandru Iosup</td> <td>Alexandru Iosup</td>
<td>aiosup at yahoo dot com</td> <td>aiosup at yahoo dot com</td>
<td>1.2.16</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Russian</td> <td>Russian</td>
<td>Alexandr Chelpanov</td> <td>Alexandr Chelpanov</td>
<td>cav at cryptopro dot ru</td> <td>cav at cryptopro dot ru</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Serbian</td> <td>Serbian</td>
<td>Dejan Milosavljevic</td> <td>Dejan Milosavljevic</td>
<td>dmilos at email dot com</td> <td>dmilos at email dot com</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Slovak</td> <td>Slovak</td>
...@@ -234,13 +234,13 @@ when the translator was updated. ...@@ -234,13 +234,13 @@ when the translator was updated.
<td>Swedish</td> <td>Swedish</td>
<td>Mikael Hallin</td> <td>Mikael Hallin</td>
<td>mikaelhallin at yahoo dot se</td> <td>mikaelhallin at yahoo dot se</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Ukrainian</td> <td>Ukrainian</td>
<td>Olexij Tkatchenko</td> <td>Olexij Tkatchenko</td>
<td>olexij.tkatchenko at parcs dot de</td> <td>olexij.tkatchenko at parcs dot de</td>
<td>up-to-date</td> <td>1.4.1</td>
</tr> </tr>
<!-- table content end --> <!-- table content end -->
</table> </table>
...@@ -259,19 +259,19 @@ when the translator was updated. ...@@ -259,19 +259,19 @@ when the translator was updated.
\hline \hline
Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.3.9 \\ Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.3.9 \\
\hline \hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\ Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & 1.4.1 \\
\hline \hline
Catalan & Albert Mora & {\tt\tiny amora@iua.upf.es} & 1.2.17 \\ Catalan & Albert Mora & {\tt\tiny amora@iua.upf.es} & 1.2.17 \\
\hline \hline
Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & up-to-date \\ Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & 1.4.1 \\
~ & Wei Liu & {\tt\tiny liuwei@asiainfo.com} & ~ \\ ~ & Wei Liu & {\tt\tiny liuwei@asiainfo.com} & ~ \\
\hline \hline
Chinese Traditional & Daniel YC Lin & {\tt\tiny daniel@twpda.com} & 1.3.8 \\ Chinese Traditional & Daniel YC Lin & {\tt\tiny daniel@twpda.com} & 1.3.8 \\
~ & Gary Lee & {\tt\tiny garylee@ecosine.com.tw} & ~ \\ ~ & Gary Lee & {\tt\tiny garylee@ecosine.com.tw} & ~ \\
\hline \hline
Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & up-to-date \\ Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & 1.4.1 \\
\hline \hline
Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & up-to-date \\ Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & 1.4.1 \\
\hline \hline
Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.3.9 \\ Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.3.9 \\
\hline \hline
...@@ -281,16 +281,16 @@ when the translator was updated. ...@@ -281,16 +281,16 @@ when the translator was updated.
\hline \hline
Finnish & Olli Korhonen & {\tt\tiny olli.korhonen lost@cyberspace} & obsolete \\ Finnish & Olli Korhonen & {\tt\tiny olli.korhonen lost@cyberspace} & obsolete \\
\hline \hline
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & up-to-date \\ French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.4.1 \\
\hline \hline
German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & up-to-date \\ German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & 1.4.1 \\
\hline \hline
Greek & Harry Kalogirou & {\tt\tiny harkal@rainbow.cs.unipi.gr} & 1.2.11 \\ Greek & Harry Kalogirou & {\tt\tiny harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline \hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & up-to-date \\ Hungarian & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & 1.4.1 \\
~ & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & ~ \\ ~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & ~ \\
\hline \hline
Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & up-to-date \\ Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & 1.4.1 \\
~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\ ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\
\hline \hline
Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & 1.3.9 \\ Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & 1.3.9 \\
...@@ -299,7 +299,7 @@ when the translator was updated. ...@@ -299,7 +299,7 @@ when the translator was updated.
\hline \hline
JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\ JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
\hline \hline
Korean & SooYoung Jung & {\tt\tiny jung5000@gmail.com} & up-to-date \\ Korean & SooYoung Jung & {\tt\tiny jung5000@gmail.com} & 1.4.01 \\
~ & Richard Kim & {\tt\tiny ryk@dspwiz.com} & ~ \\ ~ & Richard Kim & {\tt\tiny ryk@dspwiz.com} & ~ \\
\hline \hline
KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\ KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\
...@@ -310,16 +310,16 @@ when the translator was updated. ...@@ -310,16 +310,16 @@ when the translator was updated.
\hline \hline
Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\ Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\
\hline \hline
Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & up-to-date \\ Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & 1.4.1 \\
~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\ ~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\
\hline \hline
Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\ Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
\hline \hline
Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.2.16 \\ Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.4.1 \\
\hline \hline
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\ Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & 1.4.1 \\
\hline \hline
Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & up-to-date \\ Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.4.1 \\
\hline \hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\ Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\
\hline \hline
...@@ -327,9 +327,9 @@ when the translator was updated. ...@@ -327,9 +327,9 @@ when the translator was updated.
\hline \hline
Spanish & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & 1.3.8 \\ Spanish & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & 1.3.8 \\
\hline \hline
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & up-to-date \\ Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.4.1 \\
\hline \hline
Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & up-to-date \\ Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & 1.4.1 \\
\hline \hline
\end{tabular} \end{tabular}
\endlatexonly \endlatexonly
......
...@@ -54,8 +54,8 @@ TranslatorGreek ...@@ -54,8 +54,8 @@ TranslatorGreek
Harry Kalogirou: harkal@rainbow.cs.unipi.gr Harry Kalogirou: harkal@rainbow.cs.unipi.gr
TranslatorHungarian TranslatorHungarian
F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace
&Aacute;kos Kiss: akiss@users.sourceforge.net &Aacute;kos Kiss: akiss@users.sourceforge.net
F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace
TranslatorItalian TranslatorItalian
Alessandro Falappa: alessandro@falappa.net Alessandro Falappa: alessandro@falappa.net
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
2004/07/26 - Better reporting of not-needed adapters. 2004/07/26 - Better reporting of not-needed adapters.
2004/10/04 - Reporting of not called translator methods added. 2004/10/04 - Reporting of not called translator methods added.
2004/10/05 - Modified to check only doxygen/src sources for the previous report. 2004/10/05 - Modified to check only doxygen/src sources for the previous report.
2005/02/28 - Slight modification to generate "mailto.txt" auxiliary file.
""" """
from __future__ import generators from __future__ import generators
...@@ -1435,6 +1436,13 @@ class TrManager: ...@@ -1435,6 +1436,13 @@ class TrManager:
return trdic return trdic
def __email(self, classId):
"""Returns the first maintainer for the translator class"""
return self.__maintainersDic[classId][0][1]
def generateTranslatorReport(self): def generateTranslatorReport(self):
"""Generates the translator report.""" """Generates the translator report."""
...@@ -1466,6 +1474,11 @@ class TrManager: ...@@ -1466,6 +1474,11 @@ class TrManager:
s += 'and %d are English based.' % len(self.EnBasedIdLst) s += 'and %d are English based.' % len(self.EnBasedIdLst)
f.write(fill(s) + '\n\n') f.write(fill(s) + '\n\n')
# The e-mail addresses of the maintainers will be collected to
# the auxiliary file in the order of translator classes listed
# in the translator report.
fmail = file('mailto.txt', 'w')
# Write the list of up-to-date translator classes. # Write the list of up-to-date translator classes.
if self.upToDateIdLst: if self.upToDateIdLst:
s = '''The following translator classes are up-to-date (sorted s = '''The following translator classes are up-to-date (sorted
...@@ -1476,12 +1489,18 @@ class TrManager: ...@@ -1476,12 +1489,18 @@ class TrManager:
s = s % len(self.requiredMethodsDic) s = s % len(self.requiredMethodsDic)
f.write('-' * 70 + '\n') f.write('-' * 70 + '\n')
f.write(fill(s) + '\n\n') f.write(fill(s) + '\n\n')
mailtoLst = []
for x in self.upToDateIdLst: for x in self.upToDateIdLst:
obj = self.__translDic[x] obj = self.__translDic[x]
f.write(' ' + obj.classId) f.write(' ' + obj.classId)
if obj.note: if obj.note:
f.write(' -- ' + obj.note) f.write(' -- ' + obj.note)
f.write('\n') f.write('\n')
mailtoLst.append(self.__email(obj.classId))
fmail.write('up-to-date\n')
fmail.write('; '.join(mailtoLst))
# Write the list of the adapter based classes. The very obsolete # Write the list of the adapter based classes. The very obsolete
# translators that derive from TranslatorEnglish are included. # translators that derive from TranslatorEnglish are included.
...@@ -1497,6 +1516,7 @@ class TrManager: ...@@ -1497,6 +1516,7 @@ class TrManager:
# Find also whether some adapter classes may be removed. # Find also whether some adapter classes may be removed.
adaptMinVersion = '9.9.99' adaptMinVersion = '9.9.99'
mailtoLst = []
for x in self.adaptIdLst: for x in self.adaptIdLst:
obj = self.__translDic[x] obj = self.__translDic[x]
f.write(' %-30s' % obj.classId) f.write(' %-30s' % obj.classId)
...@@ -1508,11 +1528,15 @@ class TrManager: ...@@ -1508,11 +1528,15 @@ class TrManager:
if obj.note: if obj.note:
f.write('\n\tNote: ' + obj.note + '\n') f.write('\n\tNote: ' + obj.note + '\n')
f.write('\n') f.write('\n')
mailtoLst.append(self.__email(obj.classId)) # to maintainer
# Check the level of required adapter classes. # Check the level of required adapter classes.
if obj.status != '0.0.00' and obj.status < adaptMinVersion: if obj.status != '0.0.00' and obj.status < adaptMinVersion:
adaptMinVersion = obj.status adaptMinVersion = obj.status
fmail.write('\n\ntranslator based\n')
fmail.write('; '.join(mailtoLst))
# Set the note if some old translator adapters are not needed # Set the note if some old translator adapters are not needed
# any more. Do it only when the script is called without arguments, # any more. Do it only when the script is called without arguments,
# i.e. all languages were checked against the needed translator # i.e. all languages were checked against the needed translator
...@@ -1588,8 +1612,9 @@ class TrManager: ...@@ -1588,8 +1612,9 @@ class TrManager:
assert(obj.classId != 'Translator') assert(obj.classId != 'Translator')
obj.report(f) obj.report(f)
# Close the report file. # Close the report file and the auxiliary file with e-mails.
f.close() f.close()
fmail.close()
def __loadMaintainers(self): def __loadMaintainers(self):
...@@ -1599,7 +1624,7 @@ class TrManager: ...@@ -1599,7 +1624,7 @@ class TrManager:
fname = os.path.join(self.script_path, self.maintainersFileName) fname = os.path.join(self.script_path, self.maintainersFileName)
# Include the maintainers file to the checked group of files with # Include the maintainers file to the group of files checked with
# respect to the modification time. # respect to the modification time.
tim = os.path.getmtime(fname) tim = os.path.getmtime(fname)
if tim > self.lastModificationTime: if tim > self.lastModificationTime:
...@@ -1625,7 +1650,7 @@ class TrManager: ...@@ -1625,7 +1650,7 @@ class TrManager:
classId = line classId = line
maintainersLst = [] maintainersLst = []
inside = True inside = True
# Otherwise skip empty line that do not act as separators. # Otherwise skip empty line that do not act as separator.
else: # if inside the record else: # if inside the record
if line == '': # separator found if line == '': # separator found
......
...@@ -8,31 +8,17 @@ German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En), ...@@ -8,31 +8,17 @@ German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En),
Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian,
Slovak, Slovene, Spanish, Swedish, and Ukrainian. Slovak, Slovene, Spanish, Swedish, and Ukrainian.
Of them, 16 translators are up-to-date, 14 translators are based on Of them, 2 translators are up-to-date, 28 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
The following translator classes are up-to-date (sorted The following translator classes are up-to-date (sorted
alphabetically). This means that they derive from the Translator class alphabetically). This means that they derive from the Translator class
and they implement all 191 of the required methods. Anyway, there and they implement all 192 of the required methods. Anyway, there
still may be some details listed even for them: still may be some details listed even for them:
TranslatorBrazilian -- Remove the obsolete methods (never used).
TranslatorChinese -- Remove the obsolete methods (never used).
TranslatorCroatian -- Remove the obsolete methods (never used).
TranslatorCzech
TranslatorDutch -- Remove the obsolete methods (never used). TranslatorDutch -- Remove the obsolete methods (never used).
TranslatorEnglish -- Remove the obsolete methods (never used). TranslatorEnglish -- Remove the obsolete methods (never used).
TranslatorFrench -- Remove the obsolete methods (never used).
TranslatorGerman -- Remove the obsolete methods (never used).
TranslatorHungarian -- Remove the obsolete methods (never used).
TranslatorItalian -- Remove the obsolete methods (never used).
TranslatorKorean -- Change the base class to Translator.
TranslatorPolish -- Remove the obsolete methods (never used).
TranslatorRussian -- Remove the obsolete methods (never used).
TranslatorSerbian -- Remove the obsolete methods (never used).
TranslatorSwedish -- Remove the obsolete methods (never used).
TranslatorUkrainian -- Remove the obsolete methods (never used).
---------------------------------------------------------------------- ----------------------------------------------------------------------
The following translator classes need some maintenance (the most The following translator classes need some maintenance (the most
...@@ -40,20 +26,36 @@ obsolete at the end). The other info shows the estimation of Doxygen ...@@ -40,20 +26,36 @@ obsolete at the end). The other info shows the estimation of Doxygen
version when the class was last updated and number of methods that version when the class was last updated and number of methods that
must be implemented to become up-to-date: must be implemented to become up-to-date:
TranslatorNorwegian 1.3.9 6 methods to implement TranslatorUkrainian 1.4.1 1 method to implement
TranslatorJapanese 1.3.9 6 methods to implement TranslatorSwedish 1.4.1 1 method to implement
TranslatorDanish 1.3.9 6 methods to implement TranslatorSerbian 1.4.1 1 method to implement
TranslatorAfrikaans 1.3.9 6 methods to implement TranslatorRussian 1.4.1 1 method to implement
TranslatorSpanish 1.3.8 7 methods to implement TranslatorRomanian 1.4.1 1 method to implement
TranslatorLithuanian 1.3.8 7 methods to implement TranslatorPolish 1.4.1 1 method to implement
TranslatorChinesetraditional 1.3.8 7 methods to implement TranslatorKorean 1.4.01 1 method to implement
TranslatorPortuguese 1.3.3 11 methods to implement Note: Change the base class to TranslatorAdapter_1_4_1.
TranslatorSlovak 1.2.18 20 methods to implement
TranslatorCatalan 1.2.17 21 methods to implement TranslatorItalian 1.4.1 1 method to implement
TranslatorSlovene 1.2.16 22 methods to implement TranslatorHungarian 1.4.1 1 method to implement
TranslatorRomanian 1.2.16 22 methods to implement TranslatorGerman 1.4.1 1 method to implement
TranslatorGreek 1.2.11 25 methods to implement TranslatorFrench 1.4.1 1 method to implement
TranslatorFinnish obsolete 94 methods to implement TranslatorCzech 1.4.1 1 method to implement
TranslatorCroatian 1.4.1 1 method to implement
TranslatorChinese 1.4.1 1 method to implement
TranslatorBrazilian 1.4.1 1 method to implement
TranslatorNorwegian 1.3.9 7 methods to implement
TranslatorJapanese 1.3.9 7 methods to implement
TranslatorDanish 1.3.9 7 methods to implement
TranslatorAfrikaans 1.3.9 7 methods to implement
TranslatorSpanish 1.3.8 8 methods to implement
TranslatorLithuanian 1.3.8 8 methods to implement
TranslatorChinesetraditional 1.3.8 8 methods to implement
TranslatorPortuguese 1.3.3 12 methods to implement
TranslatorSlovak 1.2.18 21 methods to implement
TranslatorCatalan 1.2.17 22 methods to implement
TranslatorSlovene 1.2.16 23 methods to implement
TranslatorGreek 1.2.11 26 methods to implement
TranslatorFinnish obsolete 95 methods to implement
---------------------------------------------------------------------- ----------------------------------------------------------------------
The following translator classes derive directly from the The following translator classes derive directly from the
...@@ -69,13 +71,14 @@ Details for translators (classes sorted alphabetically): ...@@ -69,13 +71,14 @@ Details for translators (classes sorted alphabetically):
TranslatorAfrikaans (TranslatorAdapter_1_3_9) 6 methods to implement TranslatorAfrikaans (TranslatorAdapter_1_3_9) 7 methods to implement
------------------- -------------------
Implements 185 of the required methods. Implements 185 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
virtual QCString trDirectories() virtual QCString trDirectories()
...@@ -97,11 +100,15 @@ TranslatorAfrikaans (TranslatorAdapter_1_3_9) 6 methods to implement ...@@ -97,11 +100,15 @@ TranslatorAfrikaans (TranslatorAdapter_1_3_9) 6 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorBrazilian (Translator) TranslatorBrazilian (TranslatorAdapter_1_4_1) 1 method to implement
------------------- -------------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
...@@ -116,13 +123,14 @@ TranslatorBrazilian (Translator) ...@@ -116,13 +123,14 @@ TranslatorBrazilian (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorCatalan (TranslatorAdapter_1_2_17) 21 methods to implement TranslatorCatalan (TranslatorAdapter_1_2_17) 22 methods to implement
----------------- -----------------
Implements 170 of the required methods. Implements 170 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation() virtual QCString trEventDocumentation()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trPackageMembers() virtual QCString trPackageMembers()
...@@ -159,32 +167,24 @@ TranslatorCatalan (TranslatorAdapter_1_2_17) 21 methods to implement ...@@ -159,32 +167,24 @@ TranslatorCatalan (TranslatorAdapter_1_2_17) 21 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorChinese (Translator) TranslatorChinese (TranslatorAdapter_1_4_1) 1 method to implement
----------------- -----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Obsolete methods (should be removed, never used): Missing methods (should be implemented):
virtual QCString trHeaderFilesDescription() virtual QCString trOverloadText()
virtual QCString trField(bool/*first_capital*/, bool/*singular*/)
virtual QCString trPackageDocumentation()
virtual QCString trSources()
virtual QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
virtual QCString trHeaderFiles()
virtual QCString trBugsAndLimitations()
virtual QCString trEnumerationValueDocumentation()
virtual QCString trNoDescriptionAvailable()
TranslatorChinesetraditional (TranslatorAdapter_1_3_8) 7 methods to implement TranslatorChinesetraditional (TranslatorAdapter_1_3_8) 8 methods to implement
---------------------------- ----------------------------
Implements 184 of the required methods. Implements 184 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
virtual QCString trDirectories() virtual QCString trDirectories()
...@@ -207,32 +207,34 @@ TranslatorChinesetraditional (TranslatorAdapter_1_3_8) 7 methods to implement ...@@ -207,32 +207,34 @@ TranslatorChinesetraditional (TranslatorAdapter_1_3_8) 7 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorCroatian (Translator) TranslatorCroatian (TranslatorAdapter_1_4_1) 1 method to implement
------------------ ------------------
Implements 191 of the required methods. Implements 191 of the required methods.
Obsolete methods (should be removed, never used): Missing methods (should be implemented):
QCString trHeaderFilesDescription() virtual QCString trOverloadText()
virtual QCString trField(bool first_capital, bool singular)
virtual QCString trPackageDocumentation()
QCString trSources() TranslatorCzech (TranslatorAdapter_1_4_1) 1 method to implement
QCString trReimplementedForInternalReasons() ---------------
virtual QCString trInterfaces()
QCString trHeaderFiles() Implements 191 of the required methods.
QCString trBugsAndLimitations()
QCString trEnumerationValueDocumentation() Missing methods (should be implemented):
QCString trNoDescriptionAvailable()
virtual QCString trOverloadText()
TranslatorDanish (TranslatorAdapter_1_3_9) 6 methods to implement TranslatorDanish (TranslatorAdapter_1_3_9) 7 methods to implement
---------------- ----------------
Implements 185 of the required methods. Implements 185 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
virtual QCString trDirectories() virtual QCString trDirectories()
...@@ -257,7 +259,7 @@ TranslatorDanish (TranslatorAdapter_1_3_9) 6 methods to implement ...@@ -257,7 +259,7 @@ TranslatorDanish (TranslatorAdapter_1_3_9) 6 methods to implement
TranslatorDutch (Translator) TranslatorDutch (Translator)
--------------- ---------------
Implements 191 of the required methods. Implements 192 of the required methods.
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
...@@ -276,7 +278,7 @@ TranslatorDutch (Translator) ...@@ -276,7 +278,7 @@ TranslatorDutch (Translator)
TranslatorEnglish (Translator) TranslatorEnglish (Translator)
----------------- -----------------
Implements 191 of the required methods. Implements 192 of the required methods.
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
...@@ -292,7 +294,7 @@ TranslatorEnglish (Translator) ...@@ -292,7 +294,7 @@ TranslatorEnglish (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorFinnish (TranslatorEnglish) 94 methods to implement TranslatorFinnish (TranslatorEnglish) 95 methods to implement
----------------- -----------------
Implements 97 of the required methods. Implements 97 of the required methods.
...@@ -303,6 +305,7 @@ TranslatorFinnish (TranslatorEnglish) 94 methods to implement ...@@ -303,6 +305,7 @@ TranslatorFinnish (TranslatorEnglish) 94 methods to implement
virtual QCString trPropertyDocumentation() virtual QCString trPropertyDocumentation()
virtual QCString trMember(bool first_capital, bool singular) virtual QCString trMember(bool first_capital, bool singular)
virtual QCString trPageIndex() virtual QCString trPageIndex()
virtual QCString trOverloadText()
virtual QCString trSince() virtual QCString trSince()
virtual QCString trEventDocumentation() virtual QCString trEventDocumentation()
virtual QCString trDirIndex() virtual QCString trDirIndex()
...@@ -407,11 +410,15 @@ TranslatorFinnish (TranslatorEnglish) 94 methods to implement ...@@ -407,11 +410,15 @@ TranslatorFinnish (TranslatorEnglish) 94 methods to implement
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorFrench (Translator) TranslatorFrench (TranslatorAdapter_1_4_1) 1 method to implement
---------------- ----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
...@@ -426,11 +433,15 @@ TranslatorFrench (Translator) ...@@ -426,11 +433,15 @@ TranslatorFrench (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorGerman (Translator) TranslatorGerman (TranslatorAdapter_1_4_1) 1 method to implement
---------------- ----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
...@@ -445,13 +456,14 @@ TranslatorGerman (Translator) ...@@ -445,13 +456,14 @@ TranslatorGerman (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorGreek (TranslatorAdapter_1_2_11) 25 methods to implement TranslatorGreek (TranslatorAdapter_1_2_11) 26 methods to implement
--------------- ---------------
Implements 166 of the required methods. Implements 166 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation() virtual QCString trEventDocumentation()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trImplementedFromList(int numEntries) virtual QCString trImplementedFromList(int numEntries)
...@@ -492,11 +504,15 @@ TranslatorGreek (TranslatorAdapter_1_2_11) 25 methods to implement ...@@ -492,11 +504,15 @@ TranslatorGreek (TranslatorAdapter_1_2_11) 25 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorHungarian (Translator) TranslatorHungarian (TranslatorAdapter_1_4_1) 1 method to implement
------------------- -------------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
QCString trHeaderFilesDescription() QCString trHeaderFilesDescription()
...@@ -511,11 +527,15 @@ TranslatorHungarian (Translator) ...@@ -511,11 +527,15 @@ TranslatorHungarian (Translator)
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorItalian (Translator) TranslatorItalian (TranslatorAdapter_1_4_1) 1 method to implement
----------------- -----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
QCString trHeaderFilesDescription() QCString trHeaderFilesDescription()
...@@ -530,13 +550,14 @@ TranslatorItalian (Translator) ...@@ -530,13 +550,14 @@ TranslatorItalian (Translator)
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorJapanese (TranslatorAdapter_1_3_9) 6 methods to implement TranslatorJapanese (TranslatorAdapter_1_3_9) 7 methods to implement
------------------ ------------------
Implements 185 of the required methods. Implements 185 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
virtual QCString trDirectories() virtual QCString trDirectories()
...@@ -558,7 +579,7 @@ TranslatorJapanese (TranslatorAdapter_1_3_9) 6 methods to implement ...@@ -558,7 +579,7 @@ TranslatorJapanese (TranslatorAdapter_1_3_9) 6 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorJapaneseEn (TranslatorEnglish) 186 methods to implement TranslatorJapaneseEn (TranslatorEnglish) 187 methods to implement
-------------------- --------------------
Implements 5 of the required methods. Implements 5 of the required methods.
...@@ -572,11 +593,15 @@ TranslatorJapaneseEn (TranslatorEnglish) 186 methods to implement ...@@ -572,11 +593,15 @@ TranslatorJapaneseEn (TranslatorEnglish) 186 methods to implement
virtual QCString latexLanguageSupportCommand() virtual QCString latexLanguageSupportCommand()
TranslatorKorean (TranslatorAdapter_1_3_9) TranslatorKorean (TranslatorAdapter_1_3_9) 1 method to implement
---------------- ----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
...@@ -591,7 +616,7 @@ TranslatorKorean (TranslatorAdapter_1_3_9) ...@@ -591,7 +616,7 @@ TranslatorKorean (TranslatorAdapter_1_3_9)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorKoreanEn (TranslatorEnglish) 186 methods to implement TranslatorKoreanEn (TranslatorEnglish) 187 methods to implement
------------------ ------------------
Implements 5 of the required methods. Implements 5 of the required methods.
...@@ -605,13 +630,14 @@ TranslatorKoreanEn (TranslatorEnglish) 186 methods to implement ...@@ -605,13 +630,14 @@ TranslatorKoreanEn (TranslatorEnglish) 186 methods to implement
virtual QCString latexLanguageSupportCommand() virtual QCString latexLanguageSupportCommand()
TranslatorLithuanian (TranslatorAdapter_1_3_8) 7 methods to implement TranslatorLithuanian (TranslatorAdapter_1_3_8) 8 methods to implement
-------------------- --------------------
Implements 184 of the required methods. Implements 184 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
virtual QCString trDirectories() virtual QCString trDirectories()
...@@ -634,13 +660,14 @@ TranslatorLithuanian (TranslatorAdapter_1_3_8) 7 methods to implement ...@@ -634,13 +660,14 @@ TranslatorLithuanian (TranslatorAdapter_1_3_8) 7 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorNorwegian (TranslatorAdapter_1_3_9) 6 methods to implement TranslatorNorwegian (TranslatorAdapter_1_3_9) 7 methods to implement
------------------- -------------------
Implements 185 of the required methods. Implements 185 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
virtual QCString trDirectories() virtual QCString trDirectories()
...@@ -662,11 +689,15 @@ TranslatorNorwegian (TranslatorAdapter_1_3_9) 6 methods to implement ...@@ -662,11 +689,15 @@ TranslatorNorwegian (TranslatorAdapter_1_3_9) 6 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorPolish (Translator) TranslatorPolish (TranslatorAdapter_1_4_1) 1 method to implement
---------------- ----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
QCString trHeaderFilesDescription() QCString trHeaderFilesDescription()
...@@ -681,13 +712,14 @@ TranslatorPolish (Translator) ...@@ -681,13 +712,14 @@ TranslatorPolish (Translator)
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorPortuguese (TranslatorAdapter_1_3_3) 11 methods to implement TranslatorPortuguese (TranslatorAdapter_1_3_3) 12 methods to implement
-------------------- --------------------
Implements 180 of the required methods. Implements 180 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
virtual QCString trSearchResultsTitle() virtual QCString trSearchResultsTitle()
...@@ -714,35 +746,14 @@ TranslatorPortuguese (TranslatorAdapter_1_3_3) 11 methods to implement ...@@ -714,35 +746,14 @@ TranslatorPortuguese (TranslatorAdapter_1_3_3) 11 methods to implement
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorRomanian (TranslatorAdapter_1_2_16) 22 methods to implement TranslatorRomanian (TranslatorAdapter_1_4_1) 1 method to implement
------------------ ------------------
Implements 169 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trEventDocumentation() virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trPackageMembers()
virtual QCString trStaticPackageMembers()
virtual QCString trDirDocumentation()
virtual QCString trSearchResultsTitle()
virtual QCString trDirectories()
virtual QCString trDeprecatedList()
virtual QCString trDirDescription()
virtual QCString trStaticPackageAttribs()
virtual QCString trCallGraph()
virtual QCString trPackageTypes()
virtual QCString trSearchResults(int numDocuments)
virtual QCString trPackageAttribs()
virtual QCString trSearchMatches()
virtual QCString trEvents()
virtual QCString trSourceFile(QCString & filename)
virtual QCString trDirReference(const char * dirName)
virtual QCString trDir(bool first_capital, bool singular)
virtual QCString trSearchForIndex()
virtual QCString trAll()
virtual QCString trRTFTableOfContents()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
...@@ -758,11 +769,15 @@ TranslatorRomanian (TranslatorAdapter_1_2_16) 22 methods to implement ...@@ -758,11 +769,15 @@ TranslatorRomanian (TranslatorAdapter_1_2_16) 22 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorRussian (Translator) TranslatorRussian (TranslatorAdapter_1_4_1) 1 method to implement
----------------- -----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
...@@ -777,11 +792,15 @@ TranslatorRussian (Translator) ...@@ -777,11 +792,15 @@ TranslatorRussian (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorSerbian (Translator) TranslatorSerbian (TranslatorAdapter_1_4_1) 1 method to implement
----------------- -----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
...@@ -796,13 +815,14 @@ TranslatorSerbian (Translator) ...@@ -796,13 +815,14 @@ TranslatorSerbian (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorSlovak (TranslatorAdapter_1_2_18) 20 methods to implement TranslatorSlovak (TranslatorAdapter_1_2_18) 21 methods to implement
---------------- ----------------
Implements 171 of the required methods. Implements 171 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation() virtual QCString trEventDocumentation()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trPackageMembers() virtual QCString trPackageMembers()
...@@ -838,13 +858,14 @@ TranslatorSlovak (TranslatorAdapter_1_2_18) 20 methods to implement ...@@ -838,13 +858,14 @@ TranslatorSlovak (TranslatorAdapter_1_2_18) 20 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorSlovene (TranslatorAdapter_1_2_16) 22 methods to implement TranslatorSlovene (TranslatorAdapter_1_2_16) 23 methods to implement
----------------- -----------------
Implements 169 of the required methods. Implements 169 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation() virtual QCString trEventDocumentation()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trPackageMembers() virtual QCString trPackageMembers()
...@@ -882,13 +903,14 @@ TranslatorSlovene (TranslatorAdapter_1_2_16) 22 methods to implement ...@@ -882,13 +903,14 @@ TranslatorSlovene (TranslatorAdapter_1_2_16) 22 methods to implement
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
TranslatorSpanish (TranslatorAdapter_1_3_8) 7 methods to implement TranslatorSpanish (TranslatorAdapter_1_3_8) 8 methods to implement
----------------- -----------------
Implements 184 of the required methods. Implements 184 of the required methods.
Missing methods (should be implemented): Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex() virtual QCString trDirIndex()
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
virtual QCString trDirectories() virtual QCString trDirectories()
...@@ -911,11 +933,15 @@ TranslatorSpanish (TranslatorAdapter_1_3_8) 7 methods to implement ...@@ -911,11 +933,15 @@ TranslatorSpanish (TranslatorAdapter_1_3_8) 7 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorSwedish (Translator) TranslatorSwedish (TranslatorAdapter_1_4_1) 1 method to implement
----------------- -----------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
...@@ -930,11 +956,15 @@ TranslatorSwedish (Translator) ...@@ -930,11 +956,15 @@ TranslatorSwedish (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorUkrainian (Translator) TranslatorUkrainian (TranslatorAdapter_1_4_1) 1 method to implement
------------------- -------------------
Implements 191 of the required methods. Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.4.1_20050227 Version: 1.4.1_20050307
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -133,6 +133,8 @@ static int g_braceCount=0; ...@@ -133,6 +133,8 @@ static int g_braceCount=0;
static void saveObjCContext(); static void saveObjCContext();
static void restoreObjCContext(); static void restoreObjCContext();
//------------------------------------------------------------------- //-------------------------------------------------------------------
/*! Represents a stack of variable to class mappings as found in the /*! Represents a stack of variable to class mappings as found in the
...@@ -252,11 +254,16 @@ void VariableContext::addVariable(const QCString &type,const QCString &name) ...@@ -252,11 +254,16 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
addVariable(typeName,name); addVariable(typeName,name);
} }
} }
else // add a dummy entry so the name is hidden to avoid false links else
{
if (m_scopes.count()>0) // for local variables add a dummy entry so the name
// is hidden to avoid false links to global variables with the same name
// TODO: make this work for namespaces as well!
{ {
DBG_CTX((stderr,"** addVariable: dummy context\n")); DBG_CTX((stderr,"** addVariable: dummy context\n"));
scope->append(lname,dummyContext); scope->append(lname,dummyContext);
} }
}
} }
ClassDef *VariableContext::findVariable(const QCString &name) ClassDef *VariableContext::findVariable(const QCString &name)
...@@ -281,9 +288,8 @@ ClassDef *VariableContext::findVariable(const QCString &name) ...@@ -281,9 +288,8 @@ ClassDef *VariableContext::findVariable(const QCString &name)
return result; return result;
} }
const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
static VariableContext g_theVarContext; static VariableContext g_theVarContext;
const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
//------------------------------------------------------------------- //-------------------------------------------------------------------
...@@ -848,6 +854,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -848,6 +854,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
} }
ClassDef *cd=0,*lcd=0; ClassDef *cd=0,*lcd=0;
MemberDef *md=0; MemberDef *md=0;
bool isLocal=FALSE;
//fprintf(stderr,"generateClassOrGlobalLink(className=%s)\n",className.data()); //fprintf(stderr,"generateClassOrGlobalLink(className=%s)\n",className.data());
if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
...@@ -859,7 +866,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -859,7 +866,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{ {
cd=getResolvedClass(d,g_sourceFileDef,className.left(i),&md); cd=getResolvedClass(d,g_sourceFileDef,className.left(i),&md);
} }
//print("is found as a type %s\n",cd?cd->name().data():"<null>"); //printf("is found as a type %s\n",cd?cd->name().data():"<null>");
if (cd==0 && md==0) // also see if it is variable or enum or enum value if (cd==0 && md==0) // also see if it is variable or enum or enum value
{ {
if (getLink(g_classScope,clName,ol,clName)) if (getLink(g_classScope,clName,ol,clName))
...@@ -874,7 +881,8 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -874,7 +881,8 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{ {
g_theCallContext.setClass(lcd); g_theCallContext.setClass(lcd);
} }
//fprintf(stderr,"is a local variable!\n"); isLocal=TRUE;
//fprintf(stderr,"is a local variable cd=%p!\n",cd);
} }
if (cd && cd->isLinkable()) // is it a linkable class if (cd && cd->isLinkable()) // is it a linkable class
{ {
...@@ -907,7 +915,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -907,7 +915,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
else // not a class, maybe a global member else // not a class, maybe a global member
{ {
//printf("class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly); //printf("class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly);
if (md!=0 || (cd==0 && !typeOnly)) // not a class, see if it is a global enum/variable/typedef. if (!isLocal && (md!=0 || (cd==0 && !typeOnly))) // not a class, see if it is a global enum/variable/typedef.
{ {
if (md==0) // not found as a typedef if (md==0) // not found as a typedef
{ {
......
...@@ -57,6 +57,8 @@ static QCString g_fileName; ...@@ -57,6 +57,8 @@ static QCString g_fileName;
static int g_lineNr; static int g_lineNr;
static int g_condCtx; static int g_condCtx;
static QStack<CondCtx> g_condStack; static QStack<CondCtx> g_condStack;
static QCString g_blockName;
static int g_lastCommentContext;
static void replaceCommentMarker(const char *s,int len) static void replaceCommentMarker(const char *s,int len)
{ {
...@@ -217,6 +219,32 @@ static QCString handleCondCmdInAliases(const QCString &s) ...@@ -217,6 +219,32 @@ static QCString handleCondCmdInAliases(const QCString &s)
return result; return result;
} }
/** copies string \a s with length \a len to the output, while
* replacing any alias commands found in the string.
*/
static void replaceAliases(const char *s,int len)
{
static QRegExp cmd("[@\\\\][a-z_A-Z][a-z_A-Z0-9]*");
QCString in=s;
int p=0,i,l;
while ((i=cmd.match(in,p,&l))!=-1)
{
copyToOutput(s+p,i-p);
QCString *pValue=Doxygen::aliasDict[in.mid(i+1,l-1)];
if (pValue)
{
QCString val = handleCondCmdInAliases(*pValue);
copyToOutput(val.data(),val.length());
}
else
{
copyToOutput(s+i,l);
}
p=i+l;
}
copyToOutput(s+p,len-p);
}
#undef YY_INPUT #undef YY_INPUT
#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
...@@ -245,7 +273,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -245,7 +273,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
%x Verbatim %x Verbatim
%x ReadLine %x ReadLine
%x CondLine %x CondLine
%x SkipLang
%% %%
...@@ -271,7 +298,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -271,7 +298,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
} }
g_blockHeadCol=g_col; g_blockHeadCol=g_col;
copyToOutput("/**",3); copyToOutput("/**",3);
copyToOutput(yytext+i,yyleng-i); //copyToOutput(yytext+i,yyleng-i);
replaceAliases(yytext+i,yyleng-i);
BEGIN(SComment); BEGIN(SComment);
} }
<Scan>"//##Documentation".*/\n { /* Start of Rational Rose ANSI C++ comment block */ <Scan>"//##Documentation".*/\n { /* Start of Rational Rose ANSI C++ comment block */
...@@ -279,7 +307,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -279,7 +307,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
int i=17; //=strlen("//##Documentation"); int i=17; //=strlen("//##Documentation");
g_blockHeadCol=g_col; g_blockHeadCol=g_col;
copyToOutput("/**",3); copyToOutput("/**",3);
copyToOutput(yytext+i,yyleng-i); //copyToOutput(yytext+i,yyleng-i);
replaceAliases(yytext+i,yyleng-i);
BEGIN(SComment); BEGIN(SComment);
} }
<Scan>"//"/.*\n { /* one line C++ comment */ <Scan>"//"/.*\n { /* one line C++ comment */
...@@ -291,16 +320,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -291,16 +320,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
BEGIN(CComment); BEGIN(CComment);
} }
<Scan>[\\@]"verbatim" { /* start of a verbatim block */ <CComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code") { /* start of a verbatim block */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
g_blockName=&yytext[1];
g_lastCommentContext = YY_START;
BEGIN(Verbatim); BEGIN(Verbatim);
} }
<Scan>. { /* any other character */ <Scan>. { /* any other character */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<Verbatim>[\\@]"endverbatim" { /* end of verbatim block */ <Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
BEGIN(Scan); if (&yytext[4]==g_blockName)
{
BEGIN(g_lastCommentContext);
}
} }
<Verbatim>[^@\\\n]* { /* any character not a backslash or new line */ <Verbatim>[^@\\\n]* { /* any character not a backslash or new line */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
...@@ -311,25 +345,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -311,25 +345,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<Verbatim>. { /* any other character */ <Verbatim>. { /* any other character */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<SkipLang>[\\@]"~"[a-zA-Z]* { /* end of verbatim block */
QCString langId = &yytext[2];
if (langId.isEmpty() ||
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
{ // enable language specific section
BEGIN(CComment);
}
}
<SkipLang>[^*@\\\n]* { /* any character not a *, @, backslash or new line */
}
<SkipLang>\n { /* new line in verbatim block */
copyToOutput(yytext,yyleng);
}
<SkipLang>"*/" { /* end of comment block */
copyToOutput(yytext,yyleng);
BEGIN(Scan);
}
<SkipLang>. { /* any other character */
}
<SkipString>\\. { /* escaped character in string */ <SkipString>\\. { /* escaped character in string */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
...@@ -411,14 +426,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -411,14 +426,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<CComment,ReadLine>("\\\\"|"@@")[~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command <CComment,ReadLine>("\\\\"|"@@")[~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<CComment>[@\\]"~"[a-zA-Z]* { // language switch
QCString langId = &yytext[2];
if (!langId.isEmpty() &&
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
{
BEGIN(SkipLang);
}
}
<CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section <CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section
g_condCtx = YY_START; g_condCtx = YY_START;
BEGIN(CondLine); BEGIN(CondLine);
...@@ -492,7 +499,7 @@ void replaceComment(int offset) ...@@ -492,7 +499,7 @@ void replaceComment(int offset)
} }
} }
/*! This function does two things: /*! This function does three things:
* -# It converts multi-line C++ style comment blocks (that are aligned) * -# It converts multi-line C++ style comment blocks (that are aligned)
* to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO). * to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO).
* -# It replaces aliases with their definition (see ALIASES) * -# It replaces aliases with their definition (see ALIASES)
......
...@@ -161,7 +161,9 @@ static DocCmdMap docCmdMap[] = ...@@ -161,7 +161,9 @@ static DocCmdMap docCmdMap[] =
{ "verbatim", &handleFormatBlock }, { "verbatim", &handleFormatBlock },
{ "latexonly", &handleFormatBlock }, { "latexonly", &handleFormatBlock },
{ "htmlonly", &handleFormatBlock }, { "htmlonly", &handleFormatBlock },
{ "xmlonly", &handleFormatBlock },
{ "rtfonly", &handleFormatBlock }, { "rtfonly", &handleFormatBlock },
{ "manonly", &handleFormatBlock },
{ "dot", &handleFormatBlock }, { "dot", &handleFormatBlock },
{ "code", &handleFormatBlock }, { "code", &handleFormatBlock },
{ "addindex", &handleAddIndex }, { "addindex", &handleAddIndex },
...@@ -316,7 +318,6 @@ static QCString xrefItemTitle; ...@@ -316,7 +318,6 @@ static QCString xrefItemTitle;
static QCString xrefListTitle; static QCString xrefListTitle;
static Protection protection; static Protection protection;
static bool xrefAppendToPrev;
static bool xrefAppendFlag; static bool xrefAppendFlag;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -405,8 +406,8 @@ static void addXRefItem(const char *listName,const char *itemTitle, ...@@ -405,8 +406,8 @@ static void addXRefItem(const char *listName,const char *itemTitle,
{ {
Entry *docEntry = current; // inBody && previous ? previous : current; Entry *docEntry = current; // inBody && previous ? previous : current;
if (listName==0) return; if (listName==0) return;
//printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append); //printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append);
ListItemInfo *lii=0; ListItemInfo *lii=0;
RefList *refList = Doxygen::xrefLists->find(listName); RefList *refList = Doxygen::xrefLists->find(listName);
if (refList==0) // new list if (refList==0) // new list
...@@ -539,17 +540,20 @@ static void addSection() ...@@ -539,17 +540,20 @@ static void addSection()
// selects the output to write to // selects the output to write to
static inline void setOutput(OutputContext ctx) static inline void setOutput(OutputContext ctx)
{ {
bool xrefAppendToPrev = xrefAppendFlag;
// determine append flag for the next item (i.e. the end of this item)
xrefAppendFlag = ctx==OutputXRef && newXRefKind==xrefKind &&
(xrefKind!=XRef_Item || newXRefItemKey==xrefItemKey);
//printf("refKind=%d newXRefKind=%d xrefAppendToPrev=%d xrefAppendFlag=%d\n",
// xrefKind,newXRefKind,xrefAppendToPrev,xrefAppendFlag);
xrefItemKey = newXRefItemKey;
//printf("setOutput(inContext=%d ctx=%d)\n",inContext,ctx); //printf("setOutput(inContext=%d ctx=%d)\n",inContext,ctx);
if (inContext==OutputXRef) // end of XRef section => add the item if (inContext==OutputXRef) // end of XRef section => add the item
{ {
// See if we can append this new xref item to the previous one. // See if we can append this new xref item to the previous one.
// We know this at the start of the next item of the same // We know this at the start of the next item of the same
// type and need to remember this until the end of that item. // type and need to remember this until the end of that item.
xrefAppendToPrev = xrefAppendFlag;
xrefAppendFlag = ctx==OutputXRef && newXRefKind==xrefKind &&
(xrefKind!=XRef_Item || newXRefItemKey==xrefItemKey);
//printf("refKind=%d newXRefKind=%d xrefAppendToPrev=%d xrefAppendFlag=%d\n",
// xrefKind,newXRefKind,xrefAppendToPrev,xrefAppendFlag);
switch(xrefKind) switch(xrefKind)
{ {
case XRef_Todo: case XRef_Todo:
...@@ -604,7 +608,7 @@ static inline void setOutput(OutputContext ctx) ...@@ -604,7 +608,7 @@ static inline void setOutput(OutputContext ctx)
case OutputXRef: case OutputXRef:
pOutputString = &outputXRef; pOutputString = &outputXRef;
// first item found, so can't append to previous // first item found, so can't append to previous
xrefAppendFlag = FALSE; //xrefAppendFlag = FALSE;
break; break;
} }
} }
...@@ -641,8 +645,7 @@ static int yyread(char *buf,int max_size) ...@@ -641,8 +645,7 @@ static int yyread(char *buf,int max_size)
/* start command character */ /* start command character */
CMD ("\\"|"@") CMD ("\\"|"@")
DETAILEDCMD {CMD}("arg"|"attention"|"author"|"bug"|"code"|"date"|"deprecated"|"dot"|"dotfile"|"example"|"htmlinclude"|"htmlonly"|"image"|"include"|"includelineno"|"internal"|"invariant"|"latexonly"|"li"|"line"|manonly"|"name"|"note"|"par"|"paragraph"|"param"|"post"|"pre"|"remarks"|"relate"[sd]"("also")?|"remarks"|"return"[s]?|"retval"|"sa"|"section"|"see"|"since"|"subsection"|"subsubsection"|"test"|"throw"|"todo"|"until"|"verbatim"|"verbinclude"|"version"|"warning"|"xmlonly"|"xrefitem") DETAILEDCMD {CMD}("arg"|"attention"|"author"|"bug"|"code"|"date"|"deprecated"|"dot"|"dotfile"|"example"|"htmlinclude"|"htmlonly"|"image"|"include"|"includelineno"|"internal"|"invariant"|"latexonly"|"li"|"line"|manonly"|"name"|"note"|"par"|"paragraph"|"param"|"post"|"pre"|"remarks"|"relate"[sd]"("also")?|"remarks"|"return"[s]?|"retval"|"sa"|"section"|"see"|"since"|"subsection"|"subsubsection"|"test"|"throw"|"todo"|"until"|"verbatim"|"verbinclude"|"version"|"warning"|"xrefitem")
/* ("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"xrefitem"|"ingroup"|"callgraph"|"latexonly"|"htmlonly"|"xmlonly"|"{"|"verbatim"|"dotfile"|"dot"|"defgroup"|"addtogroup"|"weakgroup"|"class"|"namespace"|"union"|"struct"|"fn"|"var"|"details"|"typedef"|"def"|"overload")|("<"{PRE}">") */
PRE [pP][rR][eE] PRE [pP][rR][eE]
TABLE [tT][aA][bB][lL][eE] TABLE [tT][aA][bB][lL][eE]
P [pP] P [pP]
...@@ -706,6 +709,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -706,6 +709,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
%x ReadFormulaLong %x ReadFormulaLong
%x AnchorLabel %x AnchorLabel
%x HtmlComment %x HtmlComment
%x SkipLang
%% %%
...@@ -720,11 +724,15 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -720,11 +724,15 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
* end of brief description due to some command (@command, or <command>). * end of brief description due to some command (@command, or <command>).
* words and whitespace and other characters (#,?!, etc). * words and whitespace and other characters (#,?!, etc).
* grouping commands (e.g. @{ and @}) * grouping commands (e.g. @{ and @})
* language switch (e.g. \~english or \~).
*/ */
<Comment>{CMD}{CMD}[a-z_A-Z]+{B}* { // escaped command <Comment>{CMD}{CMD}[a-z_A-Z]+{B}* { // escaped command
addOutput(yytext); addOutput(yytext);
} }
<Comment>{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command
addOutput(yytext);
}
<Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!) <Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!)
addOutput(yytext); addOutput(yytext);
} }
...@@ -757,6 +765,14 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -757,6 +765,14 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<Comment>("\\\\"|"@@")"f"[$\[{] { // escaped formula command <Comment>("\\\\"|"@@")"f"[$\[{] { // escaped formula command
addOutput(yytext); addOutput(yytext);
} }
<Comment>{CMD}"~"[a-z_A-Z]* { // language switch command
QCString langId = &yytext[2];
if (!langId.isEmpty() &&
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
{ // enable language specific section
BEGIN(SkipLang);
}
}
<Comment>{CMD}"f{"[^}\n]+"}" { // start of a formula with custom environment <Comment>{CMD}"f{"[^}\n]+"}" { // start of a formula with custom environment
formulaText="\\begin"; formulaText="\\begin";
formulaEnv=&yytext[2]; formulaEnv=&yytext[2];
...@@ -793,7 +809,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -793,7 +809,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
addOutput(yytext[0]); addOutput(yytext[0]);
addOutput(yytext[2]); addOutput(yytext[2]);
} }
<Comment>\n({B}*\n)+ { // at least one blank line <Comment>(\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command)
if (inContext) if (inContext)
{ {
setOutput(OutputDoc); setOutput(OutputDoc);
...@@ -1091,7 +1107,6 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1091,7 +1107,6 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<XRefItemParam1>{ID} { // first argument <XRefItemParam1>{ID} { // first argument
newXRefItemKey=yytext; newXRefItemKey=yytext;
setOutput(OutputXRef); setOutput(OutputXRef);
xrefItemKey==yytext;
BEGIN(XRefItemParam2); BEGIN(XRefItemParam2);
} }
<XRefItemParam1>{LC} { // line continuation <XRefItemParam1>{LC} { // line continuation
...@@ -1274,7 +1289,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1274,7 +1289,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
/* ----- handle arguments of the preformatted block commands ------- */ /* ----- handle arguments of the preformatted block commands ------- */
<FormatBlock>{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode")/{NW} { // possible ends <FormatBlock>{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode")/{NW} { // possible ends
addOutput(yytext); addOutput(yytext);
if (&yytext[4]==blockName) // found end of the block if (&yytext[4]==blockName) // found end of the block
{ {
...@@ -1429,6 +1444,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1429,6 +1444,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
} }
<NameParam>. { // ignore other stuff <NameParam>. { // ignore other stuff
nameHeader+=*yytext; nameHeader+=*yytext;
current->name+=*yytext;
} }
/* ----- handle argument of ingroup command ------- */ /* ----- handle argument of ingroup command ------- */
...@@ -1523,6 +1539,25 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1523,6 +1539,25 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN(Comment); BEGIN(Comment);
} }
/* ----- handle language specific sections ------- */
<SkipLang>[\\@]"~"[a-zA-Z]* { /* language switch */
QCString langId = &yytext[2];
if (langId.isEmpty() ||
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
{ // enable language specific section
BEGIN(Comment);
}
}
<SkipLang>[^*@\\\n]* { /* any character not a *, @, backslash or new line */
}
<SkipLang>{DOCNL} { /* new line in verbatim block */
if (*yytext=='\n') yyLineNr++;
}
<SkipLang>. { /* any other character */
}
%% %%
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
......
...@@ -653,16 +653,23 @@ static void addClassToContext(Entry *root) ...@@ -653,16 +653,23 @@ static void addClassToContext(Entry *root)
// see if the using statement was found inside a namespace or inside // see if the using statement was found inside a namespace or inside
// the global file scope. // the global file scope.
QCString scName;
if (root->parent->section == Entry::NAMESPACE_SEC) if (root->parent->section == Entry::NAMESPACE_SEC)
{ {
QCString scName=root->parent->name; scName=root->parent->name;
if (!scName.isEmpty()) if (!scName.isEmpty())
{ {
nd = getResolvedNamespace(scName); nd = getResolvedNamespace(scName);
} }
} }
QCString fullName = root->name; QCString fullName = root->name;
ClassDef *cd = getResolvedClass(nd,fd,root->name,0,0,TRUE);
ClassDef *cd = getResolvedClass( nd,fd,
// normally we could use root->name to find the class, but since we did not yet resolve
// the class/namespace nesting relations we have to use the fully qualified name here.
scName.isEmpty() ? root->name : scName+"::"+root->name,
0,0,TRUE);
Debug::print(Debug::Classes,0, " Found class with name %s (cd=%p)\n", Debug::print(Debug::Classes,0, " Found class with name %s (cd=%p)\n",
cd ? cd->name().data() : root->name.data(), cd); cd ? cd->name().data() : root->name.data(), cd);
...@@ -1501,11 +1508,7 @@ static MemberDef *addVariableToClass( ...@@ -1501,11 +1508,7 @@ static MemberDef *addVariableToClass(
root->type,name,root->args,0, root->type,name,root->args,0,
prot,Normal,root->stat,related, prot,Normal,root->stat,related,
mtype,0,0); mtype,0,0);
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setMemberClass(cd); md->setMemberClass(cd);
//md->setDefFile(root->fileName); //md->setDefFile(root->fileName);
//md->setDefLine(root->startLine); //md->setDefLine(root->startLine);
...@@ -1662,11 +1665,7 @@ static MemberDef *addVariableToFile( ...@@ -1662,11 +1665,7 @@ static MemberDef *addVariableToFile(
root->type,name,root->args,0, root->type,name,root->args,0,
Public, Normal,root->stat,FALSE, Public, Normal,root->stat,FALSE,
mtype,0,0); mtype,0,0);
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine); md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
...@@ -1774,7 +1773,11 @@ static bool isVarWithConstructor(Entry *root) ...@@ -1774,7 +1773,11 @@ static bool isVarWithConstructor(Entry *root)
} }
if (root->parent->name) ctx=Doxygen::namespaceSDict.find(root->parent->name); if (root->parent->name) ctx=Doxygen::namespaceSDict.find(root->parent->name);
type = root->type; type = root->type;
if (type.left(6)=="const ") type=type.right(type.length()-6); // remove qualifiers
findAndRemoveWord(type,"const");
findAndRemoveWord(type,"static");
findAndRemoveWord(type,"volatile");
//if (type.left(6)=="const ") type=type.right(type.length()-6);
typeIsClass=getResolvedClass(ctx,fd,type)!=0; typeIsClass=getResolvedClass(ctx,fd,type)!=0;
if (!typeIsClass && (ti=type.find('<'))!=-1) if (!typeIsClass && (ti=type.find('<'))!=-1)
{ {
...@@ -2096,11 +2099,7 @@ static void addMethodToClass(Entry *root,ClassDef *cd, ...@@ -2096,11 +2099,7 @@ static void addMethodToClass(Entry *root,ClassDef *cd,
root->type,name,root->args,root->exception, root->type,name,root->args,root->exception,
root->protection,root->virt,root->stat,!root->relates.isEmpty(), root->protection,root->virt,root->stat,!root->relates.isEmpty(),
mtype,root->tArgLists ? root->tArgLists->last() : 0,root->argList); mtype,root->tArgLists ? root->tArgLists->last() : 0,root->argList);
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setMemberClass(cd); md->setMemberClass(cd);
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(!root->proto); md->setDocsForDefinition(!root->proto);
...@@ -2237,6 +2236,7 @@ static void buildFunctionList(Entry *root) ...@@ -2237,6 +2236,7 @@ static void buildFunctionList(Entry *root)
bool isFriend=root->type.find("friend ")!=-1; bool isFriend=root->type.find("friend ")!=-1;
QCString rname = removeRedundantWhiteSpace(root->name); QCString rname = removeRedundantWhiteSpace(root->name);
//printf("rname=%s\n",rname.data());
if (!rname.isEmpty()) if (!rname.isEmpty())
{ {
...@@ -2247,10 +2247,12 @@ static void buildFunctionList(Entry *root) ...@@ -2247,10 +2247,12 @@ static void buildFunctionList(Entry *root)
//printf("root->parent=`%s' %x cd=%p root->type.find(re,0)=%d\n", //printf("root->parent=`%s' %x cd=%p root->type.find(re,0)=%d\n",
// root->parent->name.data(),root->parent->section,getClass(root->parent->name), // root->parent->name.data(),root->parent->section,getClass(root->parent->name),
// root->type.find(re,0)); // root->type.find(re,0));
QCString scope=stripAnonymousNamespaceScope(root->parent->name); QCString scope=root->parent->name; //stripAnonymousNamespaceScope(root->parent->name);
scope=stripTemplateSpecifiersFromScope(scope,FALSE); scope=stripTemplateSpecifiersFromScope(scope,FALSE);
//printf("scope=%s\n",scope.data());
cd=getClass(scope); cd=getClass(scope);
//printf("cd=%p\n",cd);
if (cd && scope+"::"==rname.left(scope.length()+2)) // found A::f inside A if (cd && scope+"::"==rname.left(scope.length()+2)) // found A::f inside A
{ {
// strip scope from name // strip scope from name
...@@ -2423,11 +2425,7 @@ static void buildFunctionList(Entry *root) ...@@ -2423,11 +2425,7 @@ static void buildFunctionList(Entry *root)
MemberDef::Function,tArgList,root->argList); MemberDef::Function,tArgList,root->argList);
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
//md->setDefFile(root->fileName); //md->setDefFile(root->fileName);
//md->setDefLine(root->startLine); //md->setDefLine(root->startLine);
md->setDocumentation(root->doc,root->docFile,root->docLine); md->setDocumentation(root->doc,root->docFile,root->docLine);
...@@ -4131,63 +4129,6 @@ static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd, ...@@ -4131,63 +4129,6 @@ static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd,
const char *scopeName) const char *scopeName)
{ {
ClassDef *tcd = getResolvedClass(nd,fd,scopeName,0,0,TRUE); ClassDef *tcd = getResolvedClass(nd,fd,scopeName,0,0,TRUE);
#if 0
if (tcd==0) // try using declaration
{
ClassSDict *cl = 0;
if (nd)
{
cl=nd->getUsedClasses();
}
else if (fd)
{
cl=fd->getUsedClasses();
}
if (cl)
{
ClassSDict::Iterator cli(*cl);
ClassDef *cd;
for (;(cd=cli.current()) && tcd==0;++cli)
{
QCString scName = scopeName;
int scopeOffset = scName.length();
do
{
QCString scope=scName.left(scopeOffset);
//printf("`%s'<->`%s' `%s'\n",cd->name().data(),scope.data(),scopeName);
if (rightScopeMatch(cd->name(),scope))
{
//printf("Trying to find `%s'\n",(cd->name()+scName.right(scName.length()-scopeOffset)).data());
tcd = getClass(cd->name()+scName.right(scName.length()-scopeOffset));
}
scopeOffset=scName.findRev("::",scopeOffset-1);
} while (scopeOffset>=0 && tcd==0);
}
}
}
if (tcd==0) // try using directive
{
NamespaceSDict *nl = 0;
if (nd)
{
nl=nd->getUsedNamespaces();
}
else if (fd)
{
nl=fd->getUsedNamespaces();
}
if (nl)
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
for (;(nd=nli.current()) && tcd==0;++nli)
{
//printf("Trying with scope=%s\n",nd->name().data());
tcd = getClass(nd->name()+"::"+scopeName);
}
}
}
#endif
return tcd; return tcd;
} }
...@@ -4708,7 +4649,8 @@ static void findMember(Entry *root, ...@@ -4708,7 +4649,8 @@ static void findMember(Entry *root,
if (!namespaceName.isEmpty()) nd=getResolvedNamespace(namespaceName); if (!namespaceName.isEmpty()) nd=getResolvedNamespace(namespaceName);
ClassDef *tcd=findClassDefinition(fd,nd,scopeName); ClassDef *tcd=findClassDefinition(fd,nd,scopeName);
//printf("*** cd=%s tcd=%s fd=%s\n",cd->name().data(),tcd->name().data(),fd->name().data()); //printf("Looking for %s inside nd=%s result=%p\n",
// scopeName.data(),nd?nd->name().data():"<none>",tcd);
if (cd && tcd==cd) // member's classes match if (cd && tcd==cd) // member's classes match
{ {
...@@ -4967,7 +4909,7 @@ static void findMember(Entry *root, ...@@ -4967,7 +4909,7 @@ static void findMember(Entry *root,
for (mni.toFirst();(md=mni.current());++mni) for (mni.toFirst();(md=mni.current());++mni)
{ {
ClassDef *cd=md->getClassDef(); ClassDef *cd=md->getClassDef();
if (cd!=0 && cd->name()==className) if (cd!=0 && rightScopeMatch(cd->name(),className))
{ {
if (md->templateArguments()) if (md->templateArguments())
{ {
...@@ -4998,11 +4940,7 @@ static void findMember(Entry *root, ...@@ -4998,11 +4940,7 @@ static void findMember(Entry *root,
root->protection,root->virt,root->stat,FALSE, root->protection,root->virt,root->stat,FALSE,
mtype,tArgList,root->argList); mtype,tArgList,root->argList);
//printf("new specialized member %s args=`%s'\n",md->name().data(),funcArgs.data()); //printf("new specialized member %s args=`%s'\n",md->name().data(),funcArgs.data());
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setMemberClass(cd); md->setMemberClass(cd);
md->setTemplateSpecialization(TRUE); md->setTemplateSpecialization(TRUE);
md->setDefinition(funcDecl); md->setDefinition(funcDecl);
...@@ -5063,11 +5001,7 @@ static void findMember(Entry *root, ...@@ -5063,11 +5001,7 @@ static void findMember(Entry *root,
funcType,funcName,funcArgs,exceptions, funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,TRUE, root->protection,root->virt,root->stat,TRUE,
mtype,tArgList,root->argList); mtype,tArgList,root->argList);
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setMemberClass(cd); md->setMemberClass(cd);
md->setDefinition(funcDecl); md->setDefinition(funcDecl);
md->enableCallGraph(root->callGraph); md->enableCallGraph(root->callGraph);
...@@ -5173,11 +5107,7 @@ static void findMember(Entry *root, ...@@ -5173,11 +5107,7 @@ static void findMember(Entry *root,
funcType,funcName,funcArgs,exceptions, funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,TRUE, root->protection,root->virt,root->stat,TRUE,
mtype,tArgList,funcArgs.isEmpty() ? 0 : root->argList); mtype,tArgList,funcArgs.isEmpty() ? 0 : root->argList);
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
//printf("Related member name=`%s' decl=`%s' bodyLine=`%d'\n", //printf("Related member name=`%s' decl=`%s' bodyLine=`%d'\n",
// funcName.data(),funcDecl.data(),root->bodyLine); // funcName.data(),funcDecl.data(),root->bodyLine);
...@@ -5274,11 +5204,7 @@ localObjCMethod: ...@@ -5274,11 +5204,7 @@ localObjCMethod:
funcType,funcName,funcArgs,exceptions, funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,FALSE, root->protection,root->virt,root->stat,FALSE,
MemberDef::Function,0,root->argList); MemberDef::Function,0,root->argList);
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->makeImplementationDetail(); md->makeImplementationDetail();
md->setMemberClass(cd); md->setMemberClass(cd);
md->setDefinition(funcDecl); md->setDefinition(funcDecl);
...@@ -5559,11 +5485,7 @@ static void findEnums(Entry *root) ...@@ -5559,11 +5485,7 @@ static void findEnums(Entry *root)
0,name,0,0, 0,name,0,0,
root->protection,Normal,FALSE,isRelated,MemberDef::Enumeration, root->protection,Normal,FALSE,isRelated,MemberDef::Enumeration,
0,0); 0,0);
if (root->tagInfo) md->setTagInfo(root->tagInfo);
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd); if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
md->setBodySegment(root->bodyLine,root->endBodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig; bool ambig;
...@@ -6480,8 +6402,7 @@ static void findDefineDocumentation(Entry *root) ...@@ -6480,8 +6402,7 @@ static void findDefineDocumentation(Entry *root)
MemberDef *md=new MemberDef("<tagfile>",1, MemberDef *md=new MemberDef("<tagfile>",1,
"#define",root->name,root->args,0, "#define",root->name,root->args,0,
Public,Normal,FALSE,FALSE,MemberDef::Define,0,0); Public,Normal,FALSE,FALSE,MemberDef::Define,0,0);
md->setAnchor(root->tagInfo->anchor); md->setTagInfo(root->tagInfo);
md->setReference(root->tagInfo->tagName);
bool ambig; bool ambig;
QCString filePathName = root->parent->fileName; QCString filePathName = root->parent->fileName;
FileDef *fd=findFileDef(Doxygen::inputNameDict,filePathName,ambig); FileDef *fd=findFileDef(Doxygen::inputNameDict,filePathName,ambig);
...@@ -8610,6 +8531,10 @@ void parseInput() ...@@ -8610,6 +8531,10 @@ void parseInput()
buildClassList(root); buildClassList(root);
buildClassDocList(root); buildClassDocList(root);
resolveClassNestingRelations(); resolveClassNestingRelations();
// calling buildClassList may result in cached relations that
// become invalid after resolveClassNestingRelation(), that's why
// we need to clear the cache here
Doxygen::lookupCache.clear();
msg("Searching for members imported via using declarations...\n"); msg("Searching for members imported via using declarations...\n");
findUsingDeclImports(root); findUsingDeclImports(root);
......
...@@ -125,7 +125,8 @@ static const char *defaultStyleSheet = ...@@ -125,7 +125,8 @@ static const char *defaultStyleSheet =
"A:hover { text-decoration: none; background-color: #f2f2ff }\n" "A:hover { text-decoration: none; background-color: #f2f2ff }\n"
"DL.el { margin-left: -1cm }\n" "DL.el { margin-left: -1cm }\n"
".fragment {\n" ".fragment {\n"
" font-family: monospace\n" " font-family: Fixed, monospace;\n"
" font-size: 90%;\n"
"}\n" "}\n"
"PRE.fragment {\n" "PRE.fragment {\n"
" border: 1px solid #CCCCCC;\n" " border: 1px solid #CCCCCC;\n"
...@@ -843,8 +844,10 @@ void HtmlGenerator::codify(const char *str) ...@@ -843,8 +844,10 @@ void HtmlGenerator::codify(const char *str)
t << spaces.left(spacesToNextTabStop); t << spaces.left(spacesToNextTabStop);
col+=spacesToNextTabStop; col+=spacesToNextTabStop;
break; break;
case '\n': t << '\n'; col=0; case '\n': t << "\n"; col=0;
break; break;
//case '\n': t << "<br>"; col=0;
// break;
case '\r': break; case '\r': break;
case '<': t << "&lt;"; col++; case '<': t << "&lt;"; col++;
break; break;
...@@ -852,6 +855,8 @@ void HtmlGenerator::codify(const char *str) ...@@ -852,6 +855,8 @@ void HtmlGenerator::codify(const char *str)
break; break;
case '&': t << "&amp;"; col++; case '&': t << "&amp;"; col++;
break; break;
//case ' ': t << "&nbsp;"; col++;
// break;
case '\\': case '\\':
if (*p=='<') if (*p=='<')
{ t << "&lt;"; p++; } { t << "&lt;"; p++; }
......
...@@ -1707,34 +1707,24 @@ static void writeMemberIndexFiltered(OutputList &ol, ClassMemberHighlight hl) ...@@ -1707,34 +1707,24 @@ static void writeMemberIndexFiltered(OutputList &ol, ClassMemberHighlight hl)
numPages=127; numPages=127;
} }
struct struct CmhlInfo
{ {
CmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname; const char *fname;
QCString title; QCString title;
} cmhlInfo[] = } cmhlInfo[] =
{ {
{ "functions", 0 }, CmhlInfo("functions", theTranslator->trAll()),
{ "functions_func",0 }, CmhlInfo("functions_func",theTranslator->trFunctions()),
{ "functions_vars",0 }, CmhlInfo("functions_vars",theTranslator->trVariables()),
{ "functions_type",0 }, CmhlInfo("functions_type",theTranslator->trTypedefs()),
{ "functions_enum",0 }, CmhlInfo("functions_enum",theTranslator->trEnumerations()),
{ "functions_eval",0 }, CmhlInfo("functions_eval",theTranslator->trEnumerationValues()),
{ "functions_rela",0 }, CmhlInfo("functions_prop",theTranslator->trProperties()),
{ "functions_prop",0 }, CmhlInfo("functions_evnt",theTranslator->trEvents()),
{ "functions_evnt",0 }, CmhlInfo("functions_rela",theTranslator->trRelatedFunctions())
{ "functions_rela",0 },
}; };
cmhlInfo[0].title=theTranslator->trAll();
cmhlInfo[1].title=theTranslator->trFunctions();
cmhlInfo[2].title=theTranslator->trVariables();
cmhlInfo[3].title=theTranslator->trTypedefs();
cmhlInfo[4].title=theTranslator->trEnumerations();
cmhlInfo[5].title=theTranslator->trEnumerationValues();
cmhlInfo[6].title=theTranslator->trProperties();
cmhlInfo[7].title=theTranslator->trEvents();
cmhlInfo[8].title=theTranslator->trRelatedFunctions();
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
...@@ -2114,27 +2104,21 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) ...@@ -2114,27 +2104,21 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
numPages=127; numPages=127;
} }
struct struct FmhlInfo
{ {
FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname; const char *fname;
QCString title; QCString title;
} fmhlInfo[] = } fmhlInfo[] =
{ {
{ "globals", 0 }, FmhlInfo("globals", theTranslator->trAll()),
{ "globals_func",0 }, FmhlInfo("globals_func",theTranslator->trFunctions()),
{ "globals_vars",0 }, FmhlInfo("globals_vars",theTranslator->trVariables()),
{ "globals_type",0 }, FmhlInfo("globals_type",theTranslator->trTypedefs()),
{ "globals_enum",0 }, FmhlInfo("globals_enum",theTranslator->trEnumerations()),
{ "globals_eval",0 }, FmhlInfo("globals_eval",theTranslator->trEnumerationValues()),
{ "globals_defs",0 } FmhlInfo("globals_defs",theTranslator->trDefines())
}; };
fmhlInfo[0].title=theTranslator->trAll();
fmhlInfo[1].title=theTranslator->trFunctions();
fmhlInfo[2].title=theTranslator->trVariables();
fmhlInfo[3].title=theTranslator->trTypedefs();
fmhlInfo[4].title=theTranslator->trEnumerations();
fmhlInfo[5].title=theTranslator->trEnumerationValues();
fmhlInfo[6].title=theTranslator->trDefines();
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
...@@ -2241,25 +2225,20 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, ...@@ -2241,25 +2225,20 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
numPages=127; numPages=127;
} }
struct struct NmhlInfo
{ {
NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname; const char *fname;
QCString title; QCString title;
} nmhlInfo[] = } nmhlInfo[] =
{ {
{ "namespacemembers", 0 }, NmhlInfo("namespacemembers", theTranslator->trAll()),
{ "namespacemembers_func",0 }, NmhlInfo("namespacemembers_func",theTranslator->trFunctions()),
{ "namespacemembers_vars",0 }, NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
{ "namespacemembers_type",0 }, NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
{ "namespacemembers_enum",0 }, NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()),
{ "namespacemembers_eval",0 } NmhlInfo("namespacemembers_eval",theTranslator->trEnumerationValues())
}; };
nmhlInfo[0].title=theTranslator->trAll();
nmhlInfo[1].title=theTranslator->trFunctions();
nmhlInfo[2].title=theTranslator->trVariables();
nmhlInfo[3].title=theTranslator->trTypedefs();
nmhlInfo[4].title=theTranslator->trEnumerations();
nmhlInfo[5].title=theTranslator->trEnumerationValues();
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
......
...@@ -509,7 +509,11 @@ bool MemberDef::hasExamples() ...@@ -509,7 +509,11 @@ bool MemberDef::hasExamples()
QCString MemberDef::getOutputFileBase() const QCString MemberDef::getOutputFileBase() const
{ {
QCString baseName; QCString baseName;
if (m_templateMaster) if (explicitOutputFileBase)
{
return explicitOutputFileBase;
}
else if (m_templateMaster)
{ {
return m_templateMaster->getOutputFileBase(); return m_templateMaster->getOutputFileBase();
} }
...@@ -835,6 +839,10 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -835,6 +839,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
// hide members whose brief section should not be visible // hide members whose brief section should not be visible
//if (!isBriefSectionVisible()) return; //if (!isBriefSectionVisible()) return;
Definition *d=0;
ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
// write tag file information of this member // write tag file information of this member
if (!Config_getString("GENERATE_TAGFILE").isEmpty()) if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{ {
...@@ -875,6 +883,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -875,6 +883,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
Doxygen::tagFile << "\">" << endl; Doxygen::tagFile << "\">" << endl;
Doxygen::tagFile << " <type>" << convertToXML(typeString()) << "</type>" << endl; Doxygen::tagFile << " <type>" << convertToXML(typeString()) << "</type>" << endl;
Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl; Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl; Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
writeDocAnchorsToTagFile(); writeDocAnchorsToTagFile();
...@@ -889,9 +898,6 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -889,9 +898,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
Doxygen::searchIndex->addWord(qualifiedName(),FALSE); Doxygen::searchIndex->addWord(qualifiedName(),FALSE);
} }
Definition *d=0;
ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
QCString cname = d->name(); QCString cname = d->name();
QCString cfname = getOutputFileBase(); QCString cfname = getOutputFileBase();
QCString osname = cname; QCString osname = cname;
...@@ -2080,12 +2086,15 @@ void MemberDef::addListReference(Definition *) ...@@ -2080,12 +2086,15 @@ void MemberDef::addListReference(Definition *)
} }
QCString memName = name(); QCString memName = name();
Definition *pd=getOuterScope(); Definition *pd=getOuterScope();
if ((!Config_getBool("HIDE_SCOPE_NAMES") && // there is a scope if (!isRelated() &&
(
(!Config_getBool("HIDE_SCOPE_NAMES") && // there is a scope
pd && pd!=Doxygen::globalScope) // and we can show it pd && pd!=Doxygen::globalScope) // and we can show it
|| ||
((pd=getClassDef()) && !isRelated()) // it's a class so we (pd=getClassDef()) // it's a class so we
// show the scope anyway // show the scope anyway
) )
)
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{ {
...@@ -2328,3 +2337,13 @@ QCString MemberDef::qualifiedName() ...@@ -2328,3 +2337,13 @@ QCString MemberDef::qualifiedName()
} }
} }
void MemberDef::setTagInfo(TagInfo *ti)
{
if (ti)
{
setAnchor(ti->anchor);
setReference(ti->tagName);
explicitOutputFileBase = stripExtension(ti->fileName);
}
}
...@@ -182,6 +182,7 @@ class MemberDef : public Definition ...@@ -182,6 +182,7 @@ class MemberDef : public Definition
void setHasDocumentedParams(bool b) { m_hasDocumentedParams = b; } void setHasDocumentedParams(bool b) { m_hasDocumentedParams = b; }
void setHasDocumentedReturnType(bool b) { m_hasDocumentedReturnType = b; } void setHasDocumentedReturnType(bool b) { m_hasDocumentedReturnType = b; }
void setInheritsDocsFrom(MemberDef *md) { m_docProvider = md; } void setInheritsDocsFrom(MemberDef *md) { m_docProvider = md; }
void setTagInfo(TagInfo *i);
// output generation // output generation
void writeLink(OutputList &ol, void writeLink(OutputList &ol,
...@@ -400,6 +401,9 @@ class MemberDef : public Definition ...@@ -400,6 +401,9 @@ class MemberDef : public Definition
// documentation inheritance // documentation inheritance
MemberDef *m_docProvider; MemberDef *m_docProvider;
// to store the output file base from tag files
QCString explicitOutputFileBase;
}; };
#endif #endif
...@@ -100,6 +100,7 @@ static bool g_expandOnlyPredef; // from the configuration ...@@ -100,6 +100,7 @@ static bool g_expandOnlyPredef; // from the configuration
static int g_commentCount; static int g_commentCount;
static bool g_insideComment; static bool g_insideComment;
static bool g_isImported; static bool g_isImported;
static QCString g_blockName;
static void setFileName(const char *name) static void setFileName(const char *name)
...@@ -1776,14 +1777,18 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1776,14 +1777,18 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar('/');outputChar('*'); outputChar('/');outputChar('*');
//g_commentCount++; //g_commentCount++;
} }
<SkipCComment>[\\@]"verbatim"{BN}+ { <SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
g_blockName=&yytext[1];
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<SkipVerbatim>[\\@]"endverbatim" { <SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
if (&yytext[4]==g_blockName)
{
BEGIN(SkipCComment); BEGIN(SkipCComment);
} }
}
<SkipCComment,SkipVerbatim>[^*\x06\n\/]+ { <SkipCComment,SkipVerbatim>[^*\x06\n\/]+ {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
} }
......
...@@ -2121,7 +2121,12 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2121,7 +2121,12 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FindMembers,FindFields>("//"([!/]?){B}*{CMD}"{")|("/*"([!*]?){B}*{CMD}"{") { <FindMembers,FindFields>("//"([!/]?){B}*{CMD}"{")|("/*"([!*]?){B}*{CMD}"{") {
#ifdef COMMENTSCAN #ifdef COMMENTSCAN
REJECT; Entry *tmp = current;
current = previous;
handleGroupStartCommand(current->name);
current = tmp;
initEntry();
#else #else
startGroup(); startGroup();
tmpDocType=-1; tmpDocType=-1;
...@@ -2154,7 +2159,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2154,7 +2159,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
} }
<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" { <FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" {
#ifdef COMMENTSCAN #ifdef COMMENTSCAN
REJECT; handleGroupEndCommand();
#else #else
if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty()) if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty())
{ {
...@@ -3266,7 +3271,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -3266,7 +3271,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FuncQual>[{:;,] { <FuncQual>[{:;,] {
if ( strcmp(yytext,";")==0 && if ( strcmp(yytext,";")==0 &&
insidePHP && insidePHP &&
current->type.left(8) != "function" ) !containsWord(current->type,"function") )
{ {
current->reset(); current->reset();
initEntry(); initEntry();
...@@ -3497,26 +3502,24 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -3497,26 +3502,24 @@ IDLATTR ("["[^\]]*"]"){BN}*
//printf("Adding entry `%s'\n",current->name.data()); //printf("Adding entry `%s'\n",current->name.data());
if ( insidePHP) if ( insidePHP)
{ {
if (current->type.left(6) == "final " ) if (findAndRemoveWord(current->type,"final"))
{ {
current->type = current->type.mid(6);
current->memSpec |= Entry::Final; current->memSpec |= Entry::Final;
} }
if (current->type.left(9) == "abstract " ) if (findAndRemoveWord(current->type,"abstract"))
{ {
current->type = current->type.mid(9);
current->memSpec |= Entry::Abstract; current->memSpec |= Entry::Abstract;
} }
} }
if ( insidePHP && current->type.left(8) != "function" ) if ( insidePHP && !containsWord(current->type,"function"))
{ {
initEntry(); initEntry();
} }
else else
{ {
if ( insidePHP && current->type.left(8) == "function" ) if ( insidePHP)
{ {
current->type = current->type.mid(8); findAndRemoveWord(current->type,"function");
} }
previous = current; previous = current;
current_root->addSubEntry(current); current_root->addSubEntry(current);
...@@ -4303,7 +4306,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4303,7 +4306,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FindMembers>"{" { <FindMembers>"{" {
if (insideCS && !current->name.isEmpty() && !current->type.isEmpty()) if (insideCS && !current->name.isEmpty() && !current->type.isEmpty())
{ {
if (current->type.left(6)=="event " || current->type.find("event")!=-1) // event if (containsWord(current->type,"event")) // event
{ {
current->mtype = mtype = Event; current->mtype = mtype = Event;
} }
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
#include "tagreader.h" #include "tagreader.h"
#include <stdio.h> #include <stdio.h>
#include <stdarg.h>
#include <qxml.h> #include <qxml.h>
#include <qstack.h> #include <qstack.h>
#include <qdict.h> #include <qdict.h>
...@@ -58,6 +60,7 @@ class TagMemberInfo ...@@ -58,6 +60,7 @@ class TagMemberInfo
TagMemberInfo() : prot(Public), virt(Normal), isStatic(FALSE) {} TagMemberInfo() : prot(Public), virt(Normal), isStatic(FALSE) {}
QString type; QString type;
QString name; QString name;
QString anchorFile;
QString anchor; QString anchor;
QString arglist; QString arglist;
QString kind; QString kind;
...@@ -80,6 +83,7 @@ class TagClassInfo ...@@ -80,6 +83,7 @@ class TagClassInfo
QList<BaseInfo> *bases; QList<BaseInfo> *bases;
QList<TagMemberInfo> members; QList<TagMemberInfo> members;
QList<QString> *templateArguments; QList<QString> *templateArguments;
QStringList classList;
Kind kind; Kind kind;
bool isObjC; bool isObjC;
}; };
...@@ -91,9 +95,10 @@ class TagNamespaceInfo ...@@ -91,9 +95,10 @@ class TagNamespaceInfo
TagNamespaceInfo() { members.setAutoDelete(TRUE); } TagNamespaceInfo() { members.setAutoDelete(TRUE); }
QString name; QString name;
QString filename; QString filename;
QStringList classList;
QStringList namespaceList;
TagAnchorInfoList docAnchors; TagAnchorInfoList docAnchors;
QList<TagMemberInfo> members; QList<TagMemberInfo> members;
QStringList classList;
}; };
/*! Container for package specific info that can be read from a tagfile */ /*! Container for package specific info that can be read from a tagfile */
...@@ -201,6 +206,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -201,6 +206,7 @@ class TagFileParser : public QXmlDefaultHandler
TagFileParser *m_parent; TagFileParser *m_parent;
Handler m_handler; Handler m_handler;
}; };
class EndElementHandler class EndElementHandler
{ {
typedef void (TagFileParser::*Handler)(); typedef void (TagFileParser::*Handler)();
...@@ -221,6 +227,24 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -221,6 +227,24 @@ class TagFileParser : public QXmlDefaultHandler
m_endElementHandlers.setAutoDelete(TRUE); m_endElementHandlers.setAutoDelete(TRUE);
} }
void setDocumentLocator ( QXmlLocator * locator )
{
m_locator = locator;
}
void setFileName( const QString &fileName )
{
m_inputFileName = fileName;
}
void warn(const char *fmt,...)
{
va_list args;
va_start(args, fmt);
::warn(m_inputFileName,m_locator->lineNumber(),fmt,args);
va_end(args);
}
void startCompound( const QXmlAttributes& attrib ) void startCompound( const QXmlAttributes& attrib )
{ {
m_curString = ""; m_curString = "";
...@@ -300,13 +324,14 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -300,13 +324,14 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unknown compound attribute `%s' found!\n",kind.data()); warn("Warning: Unknown compound attribute `%s' found!\n",kind.data());
} }
if (isObjC=="yes" && m_curClass) if (isObjC=="yes" && m_curClass)
{ {
m_curClass->isObjC = TRUE; m_curClass->isObjC = TRUE;
} }
} }
void endCompound() void endCompound()
{ {
switch (m_state) switch (m_state)
...@@ -326,9 +351,10 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -326,9 +351,10 @@ class TagFileParser : public QXmlDefaultHandler
case InPackage: m_tagFilePackages.append(m_curPackage); case InPackage: m_tagFilePackages.append(m_curPackage);
m_curPackage=0; break; m_curPackage=0; break;
default: default:
err("Error: tag `compound' was not expected!\n"); warn("Warning: tag `compound' was not expected!\n");
} }
} }
void startMember( const QXmlAttributes& attrib) void startMember( const QXmlAttributes& attrib)
{ {
m_curMember = new TagMemberInfo; m_curMember = new TagMemberInfo;
...@@ -371,11 +397,10 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -371,11 +397,10 @@ class TagFileParser : public QXmlDefaultHandler
case InNamespace: m_curNamespace->members.append(m_curMember); break; case InNamespace: m_curNamespace->members.append(m_curMember); break;
case InGroup: m_curGroup->members.append(m_curMember); break; case InGroup: m_curGroup->members.append(m_curMember); break;
case InPackage: m_curPackage->members.append(m_curMember); break; case InPackage: m_curPackage->members.append(m_curMember); break;
default: err("Error: Unexpected tag `member' found\n"); break; default: warn("Warning: Unexpected tag `member' found\n"); break;
} }
} }
void endDocAnchor() void endDocAnchor()
{ {
switch(m_state) switch(m_state)
...@@ -388,63 +413,73 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -388,63 +413,73 @@ class TagFileParser : public QXmlDefaultHandler
case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break; case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
default: err("Error: Unexpected tag `member' found\n"); break; default: warn("Warning: Unexpected tag `member' found\n"); break;
} }
} }
void endClass() void endClass()
{ {
switch(m_state) switch(m_state)
{ {
case InClass: m_curClass->classList.append(m_curString); break;
case InFile: m_curFile->classList.append(m_curString); break; case InFile: m_curFile->classList.append(m_curString); break;
case InNamespace: m_curNamespace->classList.append(m_curString); break; case InNamespace: m_curNamespace->classList.append(m_curString); break;
case InGroup: m_curGroup->classList.append(m_curString); break; case InGroup: m_curGroup->classList.append(m_curString); break;
case InPackage: m_curPackage->classList.append(m_curString); break; case InPackage: m_curPackage->classList.append(m_curString); break;
default: err("Error: Unexpected tag `class' found\n"); break; default: warn("Warning: Unexpected tag `class' found\n"); break;
} }
} }
void endNamespace() void endNamespace()
{ {
switch(m_state) switch(m_state)
{ {
case InNamespace: m_curNamespace->classList.append(m_curString); break;
case InFile: m_curFile->namespaceList.append(m_curString); break; case InFile: m_curFile->namespaceList.append(m_curString); break;
case InGroup: m_curGroup->namespaceList.append(m_curString); break; case InGroup: m_curGroup->namespaceList.append(m_curString); break;
default: err("Error: Unexpected tag `namespace' found\n"); break; default: warn("Warning: Unexpected tag `namespace' found\n"); break;
} }
} }
void endFile() void endFile()
{ {
switch(m_state) switch(m_state)
{ {
case InGroup: m_curGroup->fileList.append(m_curString); break; case InGroup: m_curGroup->fileList.append(m_curString); break;
case InDir: m_curDir->fileList.append(m_curString); break; case InDir: m_curDir->fileList.append(m_curString); break;
default: err("Error: Unexpected tag `file' found\n"); break; default: warn("Warning: Unexpected tag `file' found\n"); break;
} }
} }
void endPage() void endPage()
{ {
switch(m_state) switch(m_state)
{ {
case InGroup: m_curGroup->fileList.append(m_curString); break; case InGroup: m_curGroup->fileList.append(m_curString); break;
default: err("Error: Unexpected tag `page' found\n"); break; default: warn("Warning: Unexpected tag `page' found\n"); break;
} }
} }
void endDir() void endDir()
{ {
switch(m_state) switch(m_state)
{ {
case InDir: m_curDir->subdirList.append(m_curString); break; case InDir: m_curDir->subdirList.append(m_curString); break;
default: err("Error: Unexpected tag `page' found\n"); break; default: warn("Warning: Unexpected tag `page' found\n"); break;
} }
} }
void startStringValue(const QXmlAttributes& ) void startStringValue(const QXmlAttributes& )
{ {
m_curString = ""; m_curString = "";
} }
void startDocAnchor(const QXmlAttributes& attrib ) void startDocAnchor(const QXmlAttributes& attrib )
{ {
m_fileName = attrib.value("file"); m_fileName = attrib.value("file");
m_curString = ""; m_curString = "";
} }
void endType() void endType()
{ {
if (m_state==InMember) if (m_state==InMember)
...@@ -453,9 +488,10 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -453,9 +488,10 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unexpected tag `type' found\n"); warn("Warning: Unexpected tag `type' found\n");
} }
} }
void endName() void endName()
{ {
switch (m_state) switch (m_state)
...@@ -468,9 +504,10 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -468,9 +504,10 @@ class TagFileParser : public QXmlDefaultHandler
case InDir: m_curDir->name = m_curString; break; case InDir: m_curDir->name = m_curString; break;
case InMember: m_curMember->name = m_curString; break; case InMember: m_curMember->name = m_curString; break;
case InPackage: m_curPackage->name = m_curString; break; case InPackage: m_curPackage->name = m_curString; break;
default: err("Error: Unexpected tag `name' found\n"); break; default: warn("Warning: Unexpected tag `name' found\n"); break;
} }
} }
void startBase(const QXmlAttributes& attrib ) void startBase(const QXmlAttributes& attrib )
{ {
m_curString=""; m_curString="";
...@@ -501,9 +538,10 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -501,9 +538,10 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unexpected tag `base' found\n"); warn("Warning: Unexpected tag `base' found\n");
} }
} }
void endBase() void endBase()
{ {
if (m_state==InClass && m_curClass) if (m_state==InClass && m_curClass)
...@@ -512,9 +550,10 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -512,9 +550,10 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unexpected tag `base' found\n"); warn("Warning: Unexpected tag `base' found\n");
} }
} }
void startIncludes(const QXmlAttributes& attrib ) void startIncludes(const QXmlAttributes& attrib )
{ {
if (m_state==InFile && m_curFile) if (m_state==InFile && m_curFile)
...@@ -528,14 +567,16 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -528,14 +567,16 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unexpected tag `includes' found\n"); warn("Warning: Unexpected tag `includes' found\n");
} }
m_curString=""; m_curString="";
} }
void endIncludes() void endIncludes()
{ {
m_curIncludes->text = m_curString; m_curIncludes->text = m_curString;
} }
void endTemplateArg() void endTemplateArg()
{ {
if (m_state==InClass && m_curClass) if (m_state==InClass && m_curClass)
...@@ -549,9 +590,10 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -549,9 +590,10 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unexpected tag `templarg' found\n"); warn("Warning: Unexpected tag `templarg' found\n");
} }
} }
void endFilename() void endFilename()
{ {
switch (m_state) switch (m_state)
...@@ -563,18 +605,20 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -563,18 +605,20 @@ class TagFileParser : public QXmlDefaultHandler
case InPage: m_curPage->filename = m_curString; break; case InPage: m_curPage->filename = m_curString; break;
case InPackage: m_curPackage->filename = m_curString; break; case InPackage: m_curPackage->filename = m_curString; break;
case InDir: m_curDir->filename = m_curString; break; case InDir: m_curDir->filename = m_curString; break;
default: err("Error: Unexpected tag `filename' found\n"); break; default: warn("Warning: Unexpected tag `filename' found\n"); break;
} }
} }
void endPath() void endPath()
{ {
switch (m_state) switch (m_state)
{ {
case InFile: m_curFile->path = m_curString; break; case InFile: m_curFile->path = m_curString; break;
case InDir: m_curDir->path = m_curString; break; case InDir: m_curDir->path = m_curString; break;
default: err("Error: Unexpected tag `path' found\n"); break; default: warn("Warning: Unexpected tag `path' found\n"); break;
} }
} }
void endAnchor() void endAnchor()
{ {
if (m_state==InMember) if (m_state==InMember)
...@@ -583,9 +627,22 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -583,9 +627,22 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unexpected tag `anchor' found\n"); warn("Warning: Unexpected tag `anchor' found\n");
}
}
void endAnchorFile()
{
if (m_state==InMember)
{
m_curMember->anchorFile = m_curString;
}
else
{
warn("Warning: Unexpected tag `anchorfile' found\n");
} }
} }
void endArglist() void endArglist()
{ {
if (m_state==InMember) if (m_state==InMember)
...@@ -594,7 +651,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -594,7 +651,7 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unexpected tag `arglist' found\n"); warn("Warning: Unexpected tag `arglist' found\n");
} }
} }
void endTitle() void endTitle()
...@@ -603,9 +660,10 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -603,9 +660,10 @@ class TagFileParser : public QXmlDefaultHandler
{ {
case InGroup: m_curGroup->title = m_curString; break; case InGroup: m_curGroup->title = m_curString; break;
case InPage: m_curPage->title = m_curString; break; case InPage: m_curPage->title = m_curString; break;
default: err("Error: Unexpected tag `title' found\n"); break; default: warn("Warning: Unexpected tag `title' found\n"); break;
} }
} }
void endSubgroup() void endSubgroup()
{ {
if (m_state==InGroup) if (m_state==InGroup)
...@@ -614,12 +672,14 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -614,12 +672,14 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unexpected tag `subgroup' found\n"); warn("Warning: Unexpected tag `subgroup' found\n");
} }
} }
void startIgnoreElement(const QXmlAttributes& ) void startIgnoreElement(const QXmlAttributes& )
{ {
} }
void endIgnoreElement() void endIgnoreElement()
{ {
} }
...@@ -652,6 +712,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -652,6 +712,7 @@ class TagFileParser : public QXmlDefaultHandler
m_startElementHandlers.insert("filename", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("filename", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("includes", new StartElementHandler(this,&TagFileParser::startIncludes)); m_startElementHandlers.insert("includes", new StartElementHandler(this,&TagFileParser::startIncludes));
m_startElementHandlers.insert("path", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("path", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("anchorfile", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("anchor", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("anchor", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("arglist", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("arglist", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("title", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("title", new StartElementHandler(this,&TagFileParser::startStringValue));
...@@ -673,6 +734,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -673,6 +734,7 @@ class TagFileParser : public QXmlDefaultHandler
m_endElementHandlers.insert("filename", new EndElementHandler(this,&TagFileParser::endFilename)); m_endElementHandlers.insert("filename", new EndElementHandler(this,&TagFileParser::endFilename));
m_endElementHandlers.insert("includes", new EndElementHandler(this,&TagFileParser::endIncludes)); m_endElementHandlers.insert("includes", new EndElementHandler(this,&TagFileParser::endIncludes));
m_endElementHandlers.insert("path", new EndElementHandler(this,&TagFileParser::endPath)); m_endElementHandlers.insert("path", new EndElementHandler(this,&TagFileParser::endPath));
m_endElementHandlers.insert("anchorfile", new EndElementHandler(this,&TagFileParser::endAnchorFile));
m_endElementHandlers.insert("anchor", new EndElementHandler(this,&TagFileParser::endAnchor)); m_endElementHandlers.insert("anchor", new EndElementHandler(this,&TagFileParser::endAnchor));
m_endElementHandlers.insert("arglist", new EndElementHandler(this,&TagFileParser::endArglist)); m_endElementHandlers.insert("arglist", new EndElementHandler(this,&TagFileParser::endArglist));
m_endElementHandlers.insert("title", new EndElementHandler(this,&TagFileParser::endTitle)); m_endElementHandlers.insert("title", new EndElementHandler(this,&TagFileParser::endTitle));
...@@ -689,6 +751,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -689,6 +751,7 @@ class TagFileParser : public QXmlDefaultHandler
return TRUE; return TRUE;
} }
bool startElement( const QString&, const QString&, bool startElement( const QString&, const QString&,
const QString&name, const QXmlAttributes& attrib ) const QString&name, const QXmlAttributes& attrib )
{ {
...@@ -700,10 +763,11 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -700,10 +763,11 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unknown tag `%s' found!\n",name.data()); warn("Warning: Unknown tag `%s' found!\n",name.data());
} }
return TRUE; return TRUE;
} }
bool endElement( const QString&, const QString&, const QString& name ) bool endElement( const QString&, const QString&, const QString& name )
{ {
//printf("endElement `%s'\n",name.data()); //printf("endElement `%s'\n",name.data());
...@@ -714,15 +778,17 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -714,15 +778,17 @@ class TagFileParser : public QXmlDefaultHandler
} }
else else
{ {
err("Error: Unknown tag `%s' found!\n",name.data()); warn("Warning: Unknown tag `%s' found!\n",name.data());
} }
return TRUE; return TRUE;
} }
bool characters ( const QString & ch ) bool characters ( const QString & ch )
{ {
m_curString+=ch; m_curString+=ch;
return TRUE; return TRUE;
} }
void dump(); void dump();
void buildLists(Entry *root); void buildLists(Entry *root);
void addIncludes(); void addIncludes();
...@@ -753,6 +819,8 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -753,6 +819,8 @@ class TagFileParser : public QXmlDefaultHandler
QString m_fileName; QString m_fileName;
State m_state; State m_state;
QStack<State> m_stateStack; QStack<State> m_stateStack;
QXmlLocator *m_locator;
QString m_inputFileName;
}; };
/*! Error handler for the XML tag file parser. /*! Error handler for the XML tag file parser.
...@@ -971,7 +1039,7 @@ void TagFileParser::addDocAnchors(Entry *e,const TagAnchorInfoList &l) ...@@ -971,7 +1039,7 @@ void TagFileParser::addDocAnchors(Entry *e,const TagAnchorInfoList &l)
} }
else else
{ {
err("Duplicate anchor %s found\n",ta->label.data()); warn("Duplicate anchor %s found\n",ta->label.data());
} }
} }
} }
...@@ -1004,6 +1072,7 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members) ...@@ -1004,6 +1072,7 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
TagInfo *ti = new TagInfo; TagInfo *ti = new TagInfo;
ti->tagName = m_tagName; ti->tagName = m_tagName;
ti->anchor = tmi->anchor; ti->anchor = tmi->anchor;
ti->fileName = tmi->anchorFile;
me->tagInfo = ti; me->tagInfo = ti;
if (tmi->kind=="define") if (tmi->kind=="define")
{ {
...@@ -1315,6 +1384,7 @@ void parseTagFile(Entry *root,const char *fullName,const char *tagName) ...@@ -1315,6 +1384,7 @@ void parseTagFile(Entry *root,const char *fullName,const char *tagName)
QFileInfo fi(fullName); QFileInfo fi(fullName);
if (!fi.exists()) return; if (!fi.exists()) return;
TagFileParser handler( tagName ); TagFileParser handler( tagName );
handler.setFileName(fullName);
TagFileErrorHandler errorHandler; TagFileErrorHandler errorHandler;
QFile xmlFile( fullName ); QFile xmlFile( fullName );
QXmlInputSource source( xmlFile ); QXmlInputSource source( xmlFile );
......
...@@ -433,6 +433,12 @@ class Translator ...@@ -433,6 +433,12 @@ class Translator
virtual QCString trDirReference(const char *dirName) = 0; virtual QCString trDirReference(const char *dirName) = 0;
virtual QCString trDir(bool first_capital, bool singular) = 0; virtual QCString trDir(bool first_capital, bool singular) = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
virtual QCString trOverloadText() = 0;
}; };
#endif #endif
...@@ -40,7 +40,17 @@ class TranslatorAdapterBase : public Translator ...@@ -40,7 +40,17 @@ class TranslatorAdapterBase : public Translator
}; };
class TranslatorAdapter_1_3_9 : public TranslatorAdapterBase class TranslatorAdapter_1_4_1 : public TranslatorAdapterBase
{
public:
virtual QCString updateNeededMessage()
{ return createUpdateNeededMessage(idLanguage(),"release 1.4.1"); }
virtual QCString trOverloadText()
{ return english.trOverloadText(); }
};
class TranslatorAdapter_1_3_9 : public TranslatorAdapter_1_4_1
{ {
public: public:
virtual QCString updateNeededMessage() virtual QCString updateNeededMessage()
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#ifndef TRANSLATOR_BR_H #ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H #define TRANSLATOR_BR_H
class TranslatorBrazilian : public Translator class TranslatorBrazilian : public TranslatorAdapter_1_4_1
{ {
public: public:
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
*/ */
#define CN_SPC #define CN_SPC
class TranslatorChinese : public Translator class TranslatorChinese : public TranslatorAdapter_1_4_1
{ {
public: public:
/*! Used for identification of the language. The identification /*! Used for identification of the language. The identification
...@@ -83,9 +83,6 @@ class TranslatorChinese : public Translator ...@@ -83,9 +83,6 @@ class TranslatorChinese : public Translator
virtual QCString trMemberEnumerationDocumentation() virtual QCString trMemberEnumerationDocumentation()
{ return "成员枚举类型文档"; } { return "成员枚举类型文档"; }
virtual QCString trEnumerationValueDocumentation()
{ return "成员枚举值文档"; }
/*! header that is put before the list of member function. */ /*! header that is put before the list of member function. */
virtual QCString trMemberFunctionDocumentation() virtual QCString trMemberFunctionDocumentation()
{ return "成员函数文档"; } { return "成员函数文档"; }
...@@ -173,11 +170,6 @@ class TranslatorChinese : public Translator ...@@ -173,11 +170,6 @@ class TranslatorChinese : public Translator
virtual QCString trFileList() virtual QCString trFileList()
{ return "文件列表"; } { return "文件列表"; }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
{ return "头文件"; }
/*! This is put above each page as a link to all members of compounds. */ /*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers() virtual QCString trCompoundMembers()
{ {
...@@ -286,9 +278,6 @@ class TranslatorChinese : public Translator ...@@ -286,9 +278,6 @@ class TranslatorChinese : public Translator
return result; return result;
} }
virtual QCString trHeaderFilesDescription()
{ return "这里列出组成API的头文件:"; }
virtual QCString trExamplesDescription() virtual QCString trExamplesDescription()
{ return "这里列出所有示例:"; } { return "这里列出所有示例:"; }
...@@ -298,9 +287,6 @@ class TranslatorChinese : public Translator ...@@ -298,9 +287,6 @@ class TranslatorChinese : public Translator
virtual QCString trModulesDescription() virtual QCString trModulesDescription()
{ return "这里列出所有模块"; } { return "这里列出所有模块"; }
virtual QCString trNoDescriptionAvailable()
{ return "无可用文档"; }
virtual QCString trDocumentation() virtual QCString trDocumentation()
{ return "文档"; } { return "文档"; }
...@@ -422,16 +408,9 @@ class TranslatorChinese : public Translator ...@@ -422,16 +408,9 @@ class TranslatorChinese : public Translator
virtual QCString trForInternalUseOnly() virtual QCString trForInternalUseOnly()
{ return "仅限内部使用。"; } { return "仅限内部使用。"; }
virtual QCString trReimplementedForInternalReasons()
{ return "由于内部原因被重载;但不影响API";
}
virtual QCString trWarning() virtual QCString trWarning()
{ return "警告"; } { return "警告"; }
virtual QCString trBugsAndLimitations()
{ return "BUG"CN_SPC"与局限"; }
virtual QCString trVersion() virtual QCString trVersion()
{ return "版本"; } { return "版本"; }
...@@ -698,11 +677,6 @@ class TranslatorChinese : public Translator ...@@ -698,11 +677,6 @@ class TranslatorChinese : public Translator
// new since 0.49-991106 // new since 0.49-991106
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "源代码";
}
virtual QCString trDefinedAtLineInSourceFile() virtual QCString trDefinedAtLineInSourceFile()
{ {
return "在文件"CN_SPC"@1"CN_SPC"第"CN_SPC"@0"CN_SPC"行定义。"; return "在文件"CN_SPC"@1"CN_SPC"第"CN_SPC"@0"CN_SPC"行定义。";
...@@ -1025,12 +999,6 @@ class TranslatorChinese : public Translator ...@@ -1025,12 +999,6 @@ class TranslatorChinese : public Translator
// new since 1.2.4 // new since 1.2.4
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return "接口";
}
/*! Used for Java classes in the summary section of Java packages */ /*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses() virtual QCString trClasses()
{ {
...@@ -1068,12 +1036,6 @@ class TranslatorChinese : public Translator ...@@ -1068,12 +1036,6 @@ class TranslatorChinese : public Translator
return "包"; return "包";
} }
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "包的文档";
}
/*! Text shown before a multi-line define */ /*! Text shown before a multi-line define */
virtual QCString trDefineValue() virtual QCString trDefineValue()
{ {
...@@ -1228,20 +1190,6 @@ class TranslatorChinese : public Translator ...@@ -1228,20 +1190,6 @@ class TranslatorChinese : public Translator
return "成员"; return "成员";
} }
/*! 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 trField(bool /*first_capital*/, bool /*singular*/)
{
/*
QCString result((first_capital ? "Field" : "field"));
if (!singular) result+="s";
return result;
*/
return "字段";
}
/*! This is used for translation of the word that will possibly /*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names * be followed by a single name or by a list of names
* of the category. * of the category.
...@@ -1492,7 +1440,7 @@ class TranslatorChinese : public Translator ...@@ -1492,7 +1440,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirIndex() virtual QCString trDirIndex()
/* { return "Directory Hierarchy"; } */ /* { return "Directory Hierarchy"; } */
{ {
return "$(BL\\录结$(DC((B"; return "目录结构";
} }
/*! This is used as the name of the chapter containing the documentation /*! This is used as the name of the chapter containing the documentation
...@@ -1501,7 +1449,7 @@ class TranslatorChinese : public Translator ...@@ -1501,7 +1449,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirDocumentation() virtual QCString trDirDocumentation()
/* { return "Directory Documentation"; } */ /* { return "Directory Documentation"; } */
{ {
return "$(BL\\录J8[c(B"; return "目录文档";
} }
/*! This is used as the title of the directory index and also in the /*! This is used as the title of the directory index and also in the
...@@ -1510,7 +1458,7 @@ class TranslatorChinese : public Translator ...@@ -1510,7 +1458,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirectories() virtual QCString trDirectories()
/* { return "Directories"; } */ /* { return "Directories"; } */
{ {
return "$(BL\\录(B"; return "目录";
} }
/*! This returns a sentences that introduces the directory hierarchy. /*! This returns a sentences that introduces the directory hierarchy.
...@@ -1521,7 +1469,7 @@ class TranslatorChinese : public Translator ...@@ -1521,7 +1469,7 @@ class TranslatorChinese : public Translator
/* "but not completely, alphabetically:"; */ /* "but not completely, alphabetically:"; */
/* } */ /* } */
{ {
return "$(BL\\录结$(DC(仅经过$(BBgCWE*GSNs!$VuL$40A40D;zJl顺=x(B"; return "目录结构仅经过粗略的排序";
} }
/*! This returns the title of a directory page. The name of the /*! This returns the title of a directory page. The name of the
...@@ -1531,7 +1479,7 @@ class TranslatorChinese : public Translator ...@@ -1531,7 +1479,7 @@ class TranslatorChinese : public Translator
/* { QCString result=dirName; result+=" Directory Reference"; return result; } */ /* { QCString result=dirName; result+=" Directory Reference"; return result; } */
{ {
QCString result=dirName; QCString result=dirName;
result+=CN_SPC"$(BL\\录;29M(B"; result+=CN_SPC"目录参考";
return result; return result;
} }
...@@ -1543,9 +1491,10 @@ class TranslatorChinese : public Translator ...@@ -1543,9 +1491,10 @@ class TranslatorChinese : public Translator
/* QCString result((first_capital ? "Director" : "director")); */ /* QCString result((first_capital ? "Director" : "director")); */
/* if (singular) result+="y"; else result+="ies"; */ /* if (singular) result+="y"; else result+="ies"; */
/* return result; */ /* return result; */
return "$(BL\\录(B"; return "目录";
} }
}; };
#endif #endif
...@@ -151,7 +151,7 @@ ...@@ -151,7 +151,7 @@
// Windows version. The version which does not call the function is // Windows version. The version which does not call the function is
// probably slightly faster. // probably slightly faster.
class TranslatorCzech : public Translator class TranslatorCzech : public TranslatorAdapter_1_4_1
{ {
private: private:
/*! The decode() inline assumes the source written in the /*! The decode() inline assumes the source written in the
......
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
#ifndef TRANSLATOR_DE_H #ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H #define TRANSLATOR_DE_H
class TranslatorGerman : public Translator class TranslatorGerman : public TranslatorAdapter_1_4_1
{ {
public: public:
......
...@@ -1602,6 +1602,19 @@ class TranslatorEnglish : public Translator ...@@ -1602,6 +1602,19 @@ class TranslatorEnglish : public Translator
return result; return result;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a overloaded function.
*/
virtual QCString trOverloadText()
{
return "This is an overloaded member function, "
"provided for convenience. It differs from the above "
"function only in what argument(s) it accepts.";
}
}; };
#endif #endif
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
// Translator class (by the local maintainer) when the localized // Translator class (by the local maintainer) when the localized
// translator is made up-to-date again. // translator is made up-to-date again.
class TranslatorFrench : public Translator class TranslatorFrench : public TranslatorAdapter_1_4_1
{ {
public: public:
......
...@@ -58,11 +58,15 @@ ...@@ -58,11 +58,15 @@
// //
// 2004/09/15 // 2004/09/15
// - Added strings for 1.3.9 // - Added strings for 1.3.9
//
// 2005/02/28
// - Removed obsolete (unused) methods
//
#ifndef TRANSLATOR_HR_H #ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H #define TRANSLATOR_HR_H
class TranslatorCroatian : public Translator class TranslatorCroatian : public TranslatorAdapter_1_4_1
{ {
private: private:
/*! to avoid macro redefinition from translator_cz.h */ /*! to avoid macro redefinition from translator_cz.h */
...@@ -104,8 +108,6 @@ class TranslatorCroatian : public Translator ...@@ -104,8 +108,6 @@ class TranslatorCroatian : public Translator
{ return decode("Dokumentacija typedef lanova"); } { return decode("Dokumentacija typedef lanova"); }
QCString trMemberEnumerationDocumentation() QCString trMemberEnumerationDocumentation()
{ return decode("Dokumentacija enumeracijskih lanova"); } { return decode("Dokumentacija enumeracijskih lanova"); }
QCString trEnumerationValueDocumentation()
{ return "Dokumentacija enumeracijskih vrijednosti"; }
QCString trMemberFunctionDocumentation() QCString trMemberFunctionDocumentation()
{ return "Dokumentacija funkcija"; } { return "Dokumentacija funkcija"; }
QCString trMemberDataDocumentation() QCString trMemberDataDocumentation()
...@@ -149,8 +151,6 @@ class TranslatorCroatian : public Translator ...@@ -149,8 +151,6 @@ class TranslatorCroatian : public Translator
} }
QCString trFileList() QCString trFileList()
{ return "Popis datoteka"; } { return "Popis datoteka"; }
QCString trHeaderFiles()
{ return "Header datoteke"; }
QCString trCompoundMembers() QCString trCompoundMembers()
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
...@@ -217,16 +217,12 @@ class TranslatorCroatian : public Translator ...@@ -217,16 +217,12 @@ class TranslatorCroatian : public Translator
result+="datoteke u kojima se nalaze:"; result+="datoteke u kojima se nalaze:";
return decode(result); return decode(result);
} }
QCString trHeaderFilesDescription()
{ return decode("Popis header datoteka koje ine API :"); }
QCString trExamplesDescription() QCString trExamplesDescription()
{ return "Popis primjera :"; } { return "Popis primjera :"; }
QCString trRelatedPagesDescription() QCString trRelatedPagesDescription()
{ return "Popis povezanih stranica:"; } { return "Popis povezanih stranica:"; }
QCString trModulesDescription() QCString trModulesDescription()
{ return "Popis svih modula:"; } { return "Popis svih modula:"; }
QCString trNoDescriptionAvailable()
{ return "Opis nije dostupan"; }
QCString trDocumentation() QCString trDocumentation()
{ return "Dokumentacija"; } { return "Dokumentacija"; }
...@@ -314,14 +310,8 @@ class TranslatorCroatian : public Translator ...@@ -314,14 +310,8 @@ class TranslatorCroatian : public Translator
} }
QCString trForInternalUseOnly() QCString trForInternalUseOnly()
{ return decode("Iskljuivo za internu uporabu."); } { return decode("Iskljuivo za internu uporabu."); }
QCString trReimplementedForInternalReasons()
{ return decode("Reimplementirano zbog internih razloga; "
"Nema utjecaja na API.");
}
QCString trWarning() QCString trWarning()
{ return "Upozorenje"; } { return "Upozorenje"; }
QCString trBugsAndLimitations()
{ return decode("Greke i ogranienja"); }
QCString trVersion() QCString trVersion()
{ return "Verzija"; } { return "Verzija"; }
QCString trDate() QCString trDate()
...@@ -563,10 +553,6 @@ class TranslatorCroatian : public Translator ...@@ -563,10 +553,6 @@ class TranslatorCroatian : public Translator
// new since 0.49-991106 // new since 0.49-991106
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
QCString trSources()
{
return "Izvorne datoteke";
}
QCString trDefinedAtLineInSourceFile() QCString trDefinedAtLineInSourceFile()
{ {
return "Definirano u liniji @0 datoteke @1."; return "Definirano u liniji @0 datoteke @1.";
...@@ -852,11 +838,6 @@ class TranslatorCroatian : public Translator ...@@ -852,11 +838,6 @@ class TranslatorCroatian : public Translator
// new since 1.2.4 // new since 1.2.4
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return decode("Suelja (interfaces)");
}
/*! Used for Java classes in the summary section of Java packages */ /*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses() virtual QCString trClasses()
{ {
...@@ -882,11 +863,6 @@ class TranslatorCroatian : public Translator ...@@ -882,11 +863,6 @@ class TranslatorCroatian : public Translator
{ {
return "Paketi"; return "Paketi";
} }
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Dokumentacija paketa";
}
/*! Text shown before a multi-line define */ /*! Text shown before a multi-line define */
virtual QCString trDefineValue() virtual QCString trDefineValue()
{ {
...@@ -996,17 +972,6 @@ class TranslatorCroatian : public Translator ...@@ -996,17 +972,6 @@ class TranslatorCroatian : public Translator
return decode(result); return decode(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 trField(bool first_capital, bool singular)
{
QCString result((first_capital ? "Polj" : "polj"));
result+= (singular ? "e" : "a");
return result;
}
/*! This is used for translation of the word that will possibly /*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names * be followed by a single name or by a list of names
* of the category. * of the category.
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#ifndef TRANSLATOR_HU_H #ifndef TRANSLATOR_HU_H
#define TRANSLATOR_HU_H #define TRANSLATOR_HU_H
class TranslatorHungarian : public Translator class TranslatorHungarian : public TranslatorAdapter_1_4_1
{ {
private: private:
const char * zed(char c) const char * zed(char c)
......
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
#ifndef TRANSLATOR_IT_H #ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H #define TRANSLATOR_IT_H
class TranslatorItalian : public Translator class TranslatorItalian : public TranslatorAdapter_1_4_1
{ {
public: public:
......
...@@ -1200,6 +1200,19 @@ class TranslatorDutch : public Translator ...@@ -1200,6 +1200,19 @@ class TranslatorDutch : public Translator
return result; return result;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a function.
*/
virtual QCString trOverloadText()
{
return "Deze functie is overloaded en is beschikbaar gemaakt om het "
"gebruik te vergemakkelijken. Ze verschilt alleen van de "
"bovenstaande functie wat betreft de parameterlijst.";
}
}; };
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_PL_H #ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H #define TRANSLATOR_PL_H
class TranslatorPolish : public Translator class TranslatorPolish : public TranslatorAdapter_1_4_1
{ {
private: private:
/*! to avoid macro redefinition from translator_pl.h */ /*! to avoid macro redefinition from translator_pl.h */
......
...@@ -18,42 +18,44 @@ ...@@ -18,42 +18,44 @@
/* The translation from English to Romanian by Alexandru Iosup [aiosup@yahoo.com]. /* The translation from English to Romanian by Alexandru Iosup [aiosup@yahoo.com].
* *
* Disclaimer: I hope I translated these to Romanian keeping * Disclaimer: I hope I translated these to Romanian keeping
* the meaning of the sentences intact. Keep in mind that I used C-words were possible, * the meaning of the sentences intact. I used C-words were possible,
* (e.g. the romanian for typedef is much unexpressive than the original), since we are * (e.g. the Romanian "definire de tip" for "typedef" is too long and
* producing C-documentation of our projects. * unexpressive).
* *
* If you have suggestions, please mail the comments and text proposals to the address * If you have suggestions, please mail the comments and text proposals to the address
* shown aprox.10 lines above * shown aprox.10 lines above
* *
* ------------------------------------------- * -------------------------------------------
* Project start : 20.Sep.2k * Project start : 20.Sep.2k
* Last Doxygen version covered : 1.2.14 * Last Doxygen version covered : 1.4.1
* Last revision : 07.Mar.2k2 * Last revision : 01.Mar.2k5
* ------------------------------------------- * -------------------------------------------
* *
* Revision history * Revision history
* ---------------- * ----------------
* 20.Sep.2k First version, covering Doxygen 1.2.1 * 01.Mar.2k5 Third revision, covering Doxygen 1.4.1
* *
* 07.Mar.2k2 Second revision, covering Doxygen 1.2.14 * 07.Mar.2k2 Second revision, covering Doxygen 1.2.14
* - fixed some bugs * - fixed some bugs
*
* 20.Sep.2k First version, covering Doxygen 1.2.1
*
*/ */
#ifndef TRANSLATOR_RO_H #ifndef TRANSLATOR_RO_H
#define TRANSLATOR_RO_H #define TRANSLATOR_RO_H
class TranslatorRomanian: public TranslatorAdapter_1_2_16 class TranslatorRomanian : public TranslatorAdapter_1_4_1
{ {
public: public:
// --- Language control methods ------------------- // --- Language control methods -------------------
/*! Used for identification of the language. May resemble /*! Used for identification of the language. The identification
* the string returned by latexBabelPackage(), but it is not used * should not be translated. It should be replaced by the name
* for the same purpose. The identification should not be translated. * of the language in English using lower-case characters only
* It should be replaced by the name of the language in English * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
* (e.g. Czech, Japanese, Russian, etc.). It should be equal to * the identification used in language.cpp.
* the identification in language.h.
*/ */
virtual QCString idLanguage() virtual QCString idLanguage()
{ return "romanian"; } { return "romanian"; }
...@@ -136,7 +138,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -136,7 +138,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! this is the first part of a sentence that is followed by a class name */ /*! this is the first part of a sentence that is followed by a class name */
virtual QCString trThisIsTheListOfAllMembers() virtual QCString trThisIsTheListOfAllMembers()
{ return "Aceasta este lista completã a membrilor din "; } { return "Lista completã a membrilor din "; }
/*! this is the remainder of the sentence after the class name */ /*! this is the remainder of the sentence after the class name */
virtual QCString trIncludingInheritedMembers() virtual QCString trIncludingInheritedMembers()
...@@ -247,7 +249,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -247,7 +249,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the list with all files. */ /*! This is an introduction to the list with all files. */
virtual QCString trFileListDescription(bool extractAll) virtual QCString trFileListDescription(bool extractAll)
{ {
QCString result="Aceasta este lista tuturor "; QCString result="Lista tuturor ";
result+="fiºierelor"; result+="fiºierelor";
if (!extractAll) result+=" documentate"; if (!extractAll) result+=" documentate";
result+=", cu scurte descrieri:"; result+=", cu scurte descrieri:";
...@@ -259,11 +261,11 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -259,11 +261,11 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
return "Acestea sunt structurile de date, cu scurte descrieri:"; return "Lista structurilor de date, cu scurte descrieri:";
} }
else else
{ {
return "Acestea sunt clasele, structurile, uniunile ºi interfeþele" return "Lista claselor, structurilor, uniunilor ºi interfeþelor"
", cu scurte descrieri:"; ", cu scurte descrieri:";
} }
...@@ -272,7 +274,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -272,7 +274,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the page with all class members. */ /*! This is an introduction to the page with all class members. */
virtual QCString trCompoundMembersDescription(bool extractAll) virtual QCString trCompoundMembersDescription(bool extractAll)
{ {
QCString result="Aceasta este lista tuturor "; QCString result="Lista tuturor ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
...@@ -316,7 +318,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -316,7 +318,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the page with all file members. */ /*! This is an introduction to the page with all file members. */
virtual QCString trFileMembersDescription(bool extractAll) virtual QCString trFileMembersDescription(bool extractAll)
{ {
QCString result="Aceasta este lista tuturor "; QCString result="Lista tuturor ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
result+="funcþiilor, variabilelor, define-urilor, enum-urilor ºi typedef-urilor"; result+="funcþiilor, variabilelor, define-urilor, enum-urilor ºi typedef-urilor";
...@@ -339,19 +341,19 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -339,19 +341,19 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the page with the list of all header files. */ /*! This is an introduction to the page with the list of all header files. */
virtual QCString trHeaderFilesDescription() virtual QCString trHeaderFilesDescription()
{ return "Aceastea sunt fiºierele Header care fac parte din API:"; } { return "Lista fiºierele Header care fac parte din API:"; }
/*! This is an introduction to the page with the list of all examples */ /*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription() virtual QCString trExamplesDescription()
{ return "Aceasta este lista tuturor exemplelor:"; } { return "Lista tuturor exemplelor:"; }
/*! This is an introduction to the page with the list of related pages */ /*! This is an introduction to the page with the list of related pages */
virtual QCString trRelatedPagesDescription() virtual QCString trRelatedPagesDescription()
{ return "Aceasta este lista tuturor documentaþiilor înrudite:"; } { return "Lista tuturor documentaþiilor înrudite:"; }
/*! This is an introduction to the page with the list of class/file groups */ /*! This is an introduction to the page with the list of class/file groups */
virtual QCString trModulesDescription() virtual QCString trModulesDescription()
{ return "Aceasta este lista tuturor modulelor:"; } { return "Lista tuturor modulelor:"; }
/*! This sentences is used in the annotated class/file lists if no brief /*! This sentences is used in the annotated class/file lists if no brief
* description is given. * description is given.
...@@ -389,7 +391,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -389,7 +391,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
} }
else else
{ {
return "Indexul Componenþilor"; return "Indexul Claselor";
} }
} }
...@@ -620,7 +622,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -620,7 +622,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! used as an introduction to the namespace list */ /*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll) virtual QCString trNamespaceListDescription(bool extractAll)
{ {
QCString result="Aceasta este lista tuturor "; QCString result="Lista tuturor ";
result+="namespace-urilor "; result+="namespace-urilor ";
if (!extractAll) result+="documentate "; if (!extractAll) result+="documentate ";
result+=", cu scurte descrieri:"; result+=", cu scurte descrieri:";
...@@ -689,7 +691,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -689,7 +691,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
virtual QCString trPublicMembers() virtual QCString trPublicMembers()
{ return "Metode Publice"; } { return "Metode Publice"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
{ return "Sloturi Publice"; } { return "Conectori (slots) Publici"; }
virtual QCString trSignals() virtual QCString trSignals()
{ return "Semnale"; } { return "Semnale"; }
virtual QCString trStaticPublicMembers() virtual QCString trStaticPublicMembers()
...@@ -703,7 +705,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -703,7 +705,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
virtual QCString trPrivateMembers() virtual QCString trPrivateMembers()
{ return "Metode Private"; } { return "Metode Private"; }
virtual QCString trPrivateSlots() virtual QCString trPrivateSlots()
{ return "Sloturi Private"; } { return "Conectori (slots) Privaþi"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Metode Statice Private"; } { return "Metode Statice Private"; }
...@@ -771,7 +773,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -771,7 +773,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the page with all namespace members */ /*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll) virtual QCString trNamespaceMemberDescription(bool extractAll)
{ {
QCString result="Aceasta este lista tuturor membrilor "; QCString result="Lista tuturor membrilor ";
if (!extractAll) result+="documentaþi "; if (!extractAll) result+="documentaþi ";
result+="din toate namespace-urile, cu legãturi cãtre "; result+="din toate namespace-urile, cu legãturi cãtre ";
...@@ -962,7 +964,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -962,7 +964,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
} }
virtual QCString trPublicTypes() virtual QCString trPublicTypes()
{ {
return "Tipuri publice"; return "Tipuri Publice";
} }
virtual QCString trPublicAttribs() virtual QCString trPublicAttribs()
{ {
...@@ -1017,7 +1019,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -1017,7 +1019,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! Used as the header of the todo list */ /*! Used as the header of the todo list */
virtual QCString trTodoList() virtual QCString trTodoList()
{ {
return "Lista lucrurilor rãmase de fãcut"; return "Lista lucrurilor de fãcut";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1192,7 +1194,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -1192,7 +1194,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! The description of the package index page */ /*! The description of the package index page */
virtual QCString trPackageListDescription() virtual QCString trPackageListDescription()
{ {
return "Acestea sunt pachetele, însoþite, acolo unde este cazul, de scurte descrieri:"; return "Lista pachetelor, însoþitã de scurte explicaþii, acolo unde acestea existã:";
} }
/*! The link name in the Quick links header for each page */ /*! The link name in the Quick links header for each page */
virtual QCString trPackages() virtual QCString trPackages()
...@@ -1217,12 +1219,12 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -1217,12 +1219,12 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! Used as a marker that is put before a \\bug item */ /*! Used as a marker that is put before a \\bug item */
virtual QCString trBug() virtual QCString trBug()
{ {
return "Bug"; return "Problema (Bug)";
} }
/*! Used as the header of the bug list */ /*! Used as the header of the bug list */
virtual QCString trBugList() virtual QCString trBugList()
{ {
return "Lista de Buguri"; return "Lista de Probleme (Bugs)";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1406,6 +1408,214 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16 ...@@ -1406,6 +1408,214 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
return "Implementat în "+trWriteList(numEntries)+"."; return "Implementat în "+trWriteList(numEntries)+".";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.16
//////////////////////////////////////////////////////////////////////////
/*! used in RTF documentation as a heading for the Table
* of Contents.
*/
virtual QCString trRTFTableOfContents()
{
return "Conþinut";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////
/*! Used as the header of the list of item that have been
* flagged deprecated
*/
virtual QCString trDeprecatedList()
{
return "Lista elementelor învechite (deprecated)";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.18
//////////////////////////////////////////////////////////////////////////
/*! Used as a header for declaration section of the events found in
* a C# program
*/
virtual QCString trEvents()
{
return "Evenimente";
}
/*! Header used for the documentation section of a class' events. */
virtual QCString trEventDocumentation()
{
return "Documentaþia aferentã evenimentelor";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a heading for a list of Java class types with package scope.
*/
virtual QCString trPackageTypes()
{
return "Tipuri în pachet";
}
/*! Used as a heading for a list of Java class functions with package
* scope.
*/
virtual QCString trPackageMembers()
{
return "Funcþii în pachet";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
*/
virtual QCString trStaticPackageMembers()
{
return "Funcþii statice în pachet";
}
/*! Used as a heading for a list of Java class variables with package
* scope.
*/
virtual QCString trPackageAttribs()
{
return "Atribute în pachet";
}
/*! Used as a heading for a list of static Java class variables with
* package scope.
*/
virtual QCString trStaticPackageAttribs()
{
return "Atribute statice în pachet";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.1
//////////////////////////////////////////////////////////////////////////
/*! Used in the quick index of a class/file/namespace member list page
* to link to the unfiltered list of all members.
*/
virtual QCString trAll()
{
return "Toate";
}
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
return "Graful de apel al acestei funcþii:";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.3
//////////////////////////////////////////////////////////////////////////
/*! When the search engine is enabled this text is put in the header
* of each page before the field where one can enter the text to search
* for.
*/
virtual QCString trSearchForIndex()
{
return "Cautã";
}
/*! This string is used as the title for the page listing the search
* results.
*/
virtual QCString trSearchResultsTitle()
{
return "Rezultatele cãutarii";
}
/*! This string is put just before listing the search results. The
* text can be different depending on the number of documents found.
* Inside the text you can put the special marker $num to insert
* the number representing the actual number of search results.
* The @a numDocuments parameter can be either 0, 1 or 2, where the
* value 2 represents 2 or more matches. HTML markup is allowed inside
* the returned string.
*/
virtual QCString trSearchResults(int numDocuments)
{
if (numDocuments==0)
{
return "Din pacate nu am gãsit nici un document care sã corespundã cererii.";
}
else if (numDocuments==1)
{
return "Am gãsit <b>1</b> document corespunzând cererii.";
}
else
{
return "Am gãsit <b>$num</b> documente corespunzând cererii. "
"Lista documentelor gãsite, sortate dupã relevanþã.";
}
}
/*! This string is put before the list of matched words, for each search
* result. What follows is the list of words that matched the query.
*/
virtual QCString trSearchMatches()
{
return "Gãsite:";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////
/*! This is used in HTML as the title of page with source code for file filename
*/
virtual QCString trSourceFile(QCString& filename)
{
return " Fiºierul sursã " + filename;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Ierarhia directoarelor"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Documentaþia directoarelor"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Directoare"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Aceastã ierarhie de directoare este sortatã, "
"per nivel, in ordine alfabeticã:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{
QCString result="Director-referinþã "; result+=dirName;
return result;
}
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
QCString result((first_capital ? "Directo" : "directo"));
if (singular) result+="r"; else result="are";
return result;
}
}; };
#endif #endif
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
#ifndef TRANSLATOR_RU_H #ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H #define TRANSLATOR_RU_H
class TranslatorRussian : public Translator class TranslatorRussian : public TranslatorAdapter_1_4_1
{ {
private: private:
/*! The Decode() inline assumes the source written in the /*! The Decode() inline assumes the source written in the
......
...@@ -69,7 +69,7 @@ Problem! ...@@ -69,7 +69,7 @@ Problem!
#ifndef TRANSLATOR_SE_H #ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H #define TRANSLATOR_SE_H
class TranslatorSwedish : public Translator class TranslatorSwedish : public TranslatorAdapter_1_4_1
{ {
public: public:
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
// translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu>;<office@ddmrm.com> // translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu>;<office@ddmrm.com>
// // 10x 2 Ivana Miletic for gramatical consutation. // // 10x 2 Ivana Miletic for gramatical consutation.
class TranslatorSerbian : public Translator class TranslatorSerbian : public TranslatorAdapter_1_4_1
{ {
private: private:
QCString decode(const QCString& sInput) QCString decode(const QCString& sInput)
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_UA_H #ifndef TRANSLATOR_UA_H
#define TRANSLATOR_UA_H #define TRANSLATOR_UA_H
class TranslatorUkrainian : public Translator class TranslatorUkrainian : public TranslatorAdapter_1_4_1
{ {
private: private:
/*! The Decode() inline assumes the source written in the /*! The Decode() inline assumes the source written in the
......
...@@ -752,6 +752,8 @@ static Definition *followPath(Definition *start,FileDef *fileScope,const QCStrin ...@@ -752,6 +752,8 @@ static Definition *followPath(Definition *start,FileDef *fileScope,const QCStrin
if (current==0) break; // failed to follow the path if (current==0) break; // failed to follow the path
ps=is+l; ps=is+l;
} }
//printf("followPath(start=%s,path=%s) result=%s\n",
// start->name().data(),path.data(),current?current->name().data():"<null>");
return current; // path could be followed return current; // path could be followed
} }
...@@ -1101,7 +1103,7 @@ ClassDef *getResolvedClassRec(Definition *scope, ...@@ -1101,7 +1103,7 @@ ClassDef *getResolvedClassRec(Definition *scope,
g_visitedNamespaces.clear(); g_visitedNamespaces.clear();
// test accessibility of definition within scope. // test accessibility of definition within scope.
int distance = isAccessibleFromWithExpScope(scope,fileScope,d,explicitScopePart); int distance = isAccessibleFromWithExpScope(scope,fileScope,d,explicitScopePart);
//printf("distance %s is %d\n",d->name().data(),distance); //printf(" distance %s is %d\n",d->name().data(),distance);
if (distance!=-1) // definition is accessible if (distance!=-1) // definition is accessible
{ {
// see if we are dealing with a class or a typedef // see if we are dealing with a class or a typedef
...@@ -1398,7 +1400,9 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, ...@@ -1398,7 +1400,9 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
int floatingIndex=0; int floatingIndex=0;
if (strLen==0) return; if (strLen==0) return;
// read a word from the text string // read a word from the text string
while ((newIndex=regExp.match(txtStr,index,&matchLen))!=-1) while ((newIndex=regExp.match(txtStr,index,&matchLen))!=-1 &&
(newIndex==0 || !(txtStr.at(newIndex-1)>='0' && txtStr.at(newIndex-1)<='9')) // avoid matching part of hex numbers
)
{ {
// add non-word part to the result // add non-word part to the result
floatingIndex+=newIndex-skipIndex; floatingIndex+=newIndex-skipIndex;
...@@ -2979,7 +2983,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2979,7 +2983,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("mScope=`%s' mName=`%s'\n",mScope.data(),mName.data()); //printf("mScope=`%s' mName=`%s'\n",mScope.data(),mName.data());
if (mName.isEmpty()) printf("memberName=%s\n",memberName.data());
MemberName *mn = Doxygen::memberNameSDict[mName]; MemberName *mn = Doxygen::memberNameSDict[mName];
if (!forceEmptyScope && mn && !(scopeName.isEmpty() && mScope.isEmpty())) if (!forceEmptyScope && mn && !(scopeName.isEmpty() && mScope.isEmpty()))
{ {
...@@ -3016,8 +3019,8 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3016,8 +3019,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
} }
for (mmli.toFirst();(mmd=mmli.current());++mmli) for (mmli.toFirst();(mmd=mmli.current());++mmli)
{ {
if (mmd->isLinkable()) //if (mmd->isLinkable())
{ //{
bool match=args==0 || bool match=args==0 ||
matchArguments(mmd->argumentList(),argList,className,0,checkCV); matchArguments(mmd->argumentList(),argList,className,0,checkCV);
//printf("match=%d\n",match); //printf("match=%d\n",match);
...@@ -3032,7 +3035,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3032,7 +3035,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md=mmd; md=mmd;
} }
} }
} //}
} }
if (argList) if (argList)
{ {
...@@ -3044,29 +3047,38 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3044,29 +3047,38 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf(" >Searching for arbitrary member\n"); //printf(" >Searching for arbitrary member\n");
for (mmli.toFirst();(mmd=mmli.current());++mmli) for (mmli.toFirst();(mmd=mmli.current());++mmli)
{ {
if (mmd->isLinkable()) //if (mmd->isLinkable())
{ //{
ClassDef *mcd=mmd->getClassDef(); ClassDef *mcd=mmd->getClassDef();
//printf(" >Class %s found\n",mcd->name().data()); //printf(" >Class %s found\n",mcd->name().data());
int m=minClassDistance(fcd,mcd); int m=minClassDistance(fcd,mcd);
if (m<mdist && mcd->isLinkable()) if (m<mdist /* && mcd->isLinkable()*/ )
{ {
//printf("Class distance %d\n",m); //printf("Class distance %d\n",m);
mdist=m; mdist=m;
cd=mcd; cd=mcd;
md=mmd; md=mmd;
} }
} //}
} }
} }
//printf(" >Succes=%d\n",mdist<maxInheritanceDepth); //printf(" >Succes=%d\n",mdist<maxInheritanceDepth);
if (mdist<maxInheritanceDepth) if (mdist<maxInheritanceDepth)
{
if (!md->isLinkable())
{
md=0; // avoid returning things we cannot link to
cd=0;
return FALSE; // match found, but was not linkable
}
else
{ {
gd=md->getGroupDef(); gd=md->getGroupDef();
if (gd) cd=0; if (gd) cd=0;
return TRUE; /* found match */ return TRUE; /* found match */
} }
} }
}
/* go to the parent scope */ /* go to the parent scope */
if (scopeOffset==0) if (scopeOffset==0)
...@@ -3115,7 +3127,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3115,7 +3127,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
//printf("mmd->getNamespaceDef()=%p fnd=%p\n", //printf("mmd->getNamespaceDef()=%p fnd=%p\n",
// mmd->getNamespaceDef(),fnd); // mmd->getNamespaceDef(),fnd);
if (mmd->getNamespaceDef()==fnd && mmd->isLinkable()) if (mmd->getNamespaceDef()==fnd /* && mmd->isLinkable() */ )
{ // namespace is found { // namespace is found
bool match=TRUE; bool match=TRUE;
ArgumentList *argList=0; ArgumentList *argList=0;
...@@ -3144,7 +3156,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3144,7 +3156,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli) for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
{ {
if (mmd->getNamespaceDef()==fnd && mmd->isLinkable()) if (mmd->getNamespaceDef()==fnd /*&& mmd->isLinkable() */ )
{ {
nd=fnd; nd=fnd;
md=mmd; md=mmd;
...@@ -3153,12 +3165,21 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3153,12 +3165,21 @@ bool getDefs(const QCString &scName,const QCString &memberName,
} }
} }
if (found) if (found)
{
if (!md->isLinkable())
{
md=0; // avoid returning things we cannot link to
nd=0;
return FALSE; // match found but not linkable
}
else
{ {
gd=md->getGroupDef(); gd=md->getGroupDef();
if (gd && gd->isLinkable()) nd=0; else gd=0; if (gd && gd->isLinkable()) nd=0; else gd=0;
return TRUE; return TRUE;
} }
} }
}
if (scopeOffset==0) if (scopeOffset==0)
{ {
scopeOffset=-1; scopeOffset=-1;
...@@ -3168,6 +3189,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3168,6 +3189,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
scopeOffset=0; scopeOffset=0;
} }
} while (scopeOffset>=0); } while (scopeOffset>=0);
//else // no scope => global function //else // no scope => global function
{ {
QList<MemberDef> members; QList<MemberDef> members;
...@@ -3176,8 +3198,8 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3176,8 +3198,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
MemberListIterator mli(*mn); MemberListIterator mli(*mn);
for (mli.toFirst();(md=mli.current());++mli) for (mli.toFirst();(md=mli.current());++mli)
{ {
if (md->isLinkable()) //if (md->isLinkable())
{ //{
fd=md->getFileDef(); fd=md->getFileDef();
gd=md->getGroupDef(); gd=md->getGroupDef();
//printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p\n", //printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
...@@ -3202,14 +3224,14 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3202,14 +3224,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
members.append(md); members.append(md);
} }
} }
} //}
} }
if (members.count()!=1 && args && !strcmp(args,"()")) if (members.count()!=1 && args && !strcmp(args,"()"))
{ {
// no exact match found, but if args="()" an arbitrary // no exact match found, but if args="()" an arbitrary
// member will do // member will do
md=mn->last(); md=mn->last();
while (md && md->isLinkable()) while (md /* && md->isLinkable()*/)
{ {
//printf("Found member `%s'\n",md->name().data()); //printf("Found member `%s'\n",md->name().data());
//printf("member is linkable md->name()=`%s'\n",md->name().data()); //printf("member is linkable md->name()=`%s'\n",md->name().data());
...@@ -4234,9 +4256,10 @@ QCString convertToHtml(const char *s) ...@@ -4234,9 +4256,10 @@ QCString convertToHtml(const char *s)
*/ */
const char *getOverloadDocs() const char *getOverloadDocs()
{ {
return "This is an overloaded member function, " return theTranslator->trOverloadText();
"provided for convenience. It differs from the above " //"This is an overloaded member function, "
"function only in what argument(s) it accepts."; // "provided for convenience. It differs from the above "
// "function only in what argument(s) it accepts.";
} }
void addMembersToMemberGroup(MemberList *ml, void addMembersToMemberGroup(MemberList *ml,
...@@ -5216,3 +5239,37 @@ QCString stripPath(const char *s) ...@@ -5216,3 +5239,37 @@ QCString stripPath(const char *s)
} }
return result; return result;
} }
/** returns \c TRUE iff string \a s contains word \a w */
bool containsWord(const QCString &s,const QCString &word)
{
static QRegExp wordExp("[a-z_A-Z]+");
int p=0,i,l;
while ((i=wordExp.match(s,p,&l))!=-1)
{
if (s.mid(i,l)==word) return TRUE;
p=i+l;
}
return FALSE;
}
bool findAndRemoveWord(QCString &s,const QCString &word)
{
static QRegExp wordExp("[a-z_A-Z]+");
int p=0,i,l;
while ((i=wordExp.match(s,p,&l))!=-1)
{
if (s.mid(i,l)==word)
{
if (i>0 && isspace(s.at(i-1)))
i--,l++;
else if (i+l<(int)s.length() && isspace(s.at(i+l)))
l++;
s = s.left(i)+s.mid(i+l); // remove word + spacing
return TRUE;
}
p=i+l;
}
return FALSE;
}
...@@ -228,6 +228,8 @@ QCString relativePathToRoot(const char *name); ...@@ -228,6 +228,8 @@ QCString relativePathToRoot(const char *name);
#define REL_PATH_TO_ROOT "../../" #define REL_PATH_TO_ROOT "../../"
void createSubDirs(QDir &d); void createSubDirs(QDir &d);
QCString stripPath(const char *s); QCString stripPath(const char *s);
bool containsWord(const QCString &s,const QCString &word);
bool findAndRemoveWord(QCString &s,const QCString &word);
#endif #endif
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