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
(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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
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)
// load default settings
m_settings.setPath("www.doxygen.org","Doxygen GUI");
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())
{
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())
{
m_workingDir->setText(workingDir);
......@@ -836,7 +836,7 @@ MainWidget::MainWidget(QWidget *parent)
setConfigSaved(FALSE);
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())
{
addRecentFile(entry);
......@@ -1178,8 +1178,8 @@ void MainWidget::saveDefaults()
QString newConfig;
QTextStream t(&newConfig,IO_WriteOnly);
Config::instance()->writeTemplate(t,TRUE,FALSE);
m_settings.writeEntry("/config/default",newConfig);
m_settings.writeEntry("/config/workingdir",m_workingDir->text());
m_settings.writeEntry("/doxywizard/config/default",newConfig);
m_settings.writeEntry("/doxywizard/config/workingdir",m_workingDir->text());
statusBar()->message("Current configuration saved as default",messageTimeout);
}
}
......@@ -1361,7 +1361,7 @@ void MainWidget::addRecentFile(const QString &file)
for ( it = m_recentFiles.begin(); it != m_recentFiles.end(); ++it, ++i )
{
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.
<td>Brazilian Portuguese</td>
<td>Fabio "FJTC" Jun Takada Chino</td>
<td>jun-chino at uol dot com dot br</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Catalan</td>
......@@ -72,7 +72,7 @@ when the translator was updated.
<td>Chinese</td>
<td>Li Daobing<br>Wei Liu</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 bgcolor="#ffffff">
<td>Chinese Traditional</td>
......@@ -84,13 +84,13 @@ when the translator was updated.
<td>Croatian</td>
<td>Boris Bralo</td>
<td>boris.bralo at zg dot htnet dot hr</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Czech</td>
<td>Petr P&#x0159;ikryl</td>
<td>prikrylp at skil dot cz</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Danish</td>
......@@ -120,13 +120,13 @@ when the translator was updated.
<td>French</td>
<td>Xavier Outhier</td>
<td>xouthier at yahoo dot fr</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>German</td>
<td>Jens Seidel</td>
<td>jensseidel at users dot sf dot net</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Greek</td>
......@@ -136,15 +136,15 @@ when the translator was updated.
</tr>
<tr bgcolor="#ffffff">
<td>Hungarian</td>
<td>F&ouml;ldv&aacute;ri Gy&ouml;rgy<br>&Aacute;kos Kiss</td>
<td>foldvari lost at cyberspace<br>akiss at users dot sourceforge dot net</td>
<td>up-to-date</td>
<td>&Aacute;kos Kiss<br>F&ouml;ldv&aacute;ri Gy&ouml;rgy</td>
<td>akiss at users dot sourceforge dot net<br>foldvari lost at cyberspace</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Italian</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>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Japanese</td>
......@@ -162,7 +162,7 @@ when the translator was updated.
<td>Korean</td>
<td>SooYoung Jung<br>Richard Kim</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 bgcolor="#ffffff">
<td>KoreanEn</td>
......@@ -186,7 +186,7 @@ when the translator was updated.
<td>Polish</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>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Portuguese</td>
......@@ -198,19 +198,19 @@ when the translator was updated.
<td>Romanian</td>
<td>Alexandru Iosup</td>
<td>aiosup at yahoo dot com</td>
<td>1.2.16</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Russian</td>
<td>Alexandr Chelpanov</td>
<td>cav at cryptopro dot ru</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Serbian</td>
<td>Dejan Milosavljevic</td>
<td>dmilos at email dot com</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Slovak</td>
......@@ -234,13 +234,13 @@ when the translator was updated.
<td>Swedish</td>
<td>Mikael Hallin</td>
<td>mikaelhallin at yahoo dot se</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Ukrainian</td>
<td>Olexij Tkatchenko</td>
<td>olexij.tkatchenko at parcs dot de</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<!-- table content end -->
</table>
......@@ -259,19 +259,19 @@ when the translator was updated.
\hline
Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.3.9 \\
\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
Catalan & Albert Mora & {\tt\tiny amora@iua.upf.es} & 1.2.17 \\
\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} & ~ \\
\hline
Chinese Traditional & Daniel YC Lin & {\tt\tiny daniel@twpda.com} & 1.3.8 \\
~ & Gary Lee & {\tt\tiny garylee@ecosine.com.tw} & ~ \\
\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
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
Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.3.9 \\
\hline
......@@ -281,16 +281,16 @@ when the translator was updated.
\hline
Finnish & Olli Korhonen & {\tt\tiny olli.korhonen lost@cyberspace} & obsolete \\
\hline
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & up-to-date \\
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.4.1 \\
\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
Greek & Harry Kalogirou & {\tt\tiny harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & up-to-date \\
~ & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & ~ \\
Hungarian & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & 1.4.1 \\
~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & ~ \\
\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} & ~ \\
\hline
Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & 1.3.9 \\
......@@ -299,7 +299,7 @@ when the translator was updated.
\hline
JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
\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} & ~ \\
\hline
KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\
......@@ -310,16 +310,16 @@ when the translator was updated.
\hline
Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\
\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} & ~ \\
\hline
Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
\hline
Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.2.16 \\
Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.4.1 \\
\hline
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & 1.4.1 \\
\hline
Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & up-to-date \\
Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.4.1 \\
\hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\
\hline
......@@ -327,9 +327,9 @@ when the translator was updated.
\hline
Spanish & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & 1.3.8 \\
\hline
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & up-to-date \\
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.4.1 \\
\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
\end{tabular}
\endlatexonly
......
......@@ -54,8 +54,8 @@ TranslatorGreek
Harry Kalogirou: harkal@rainbow.cs.unipi.gr
TranslatorHungarian
F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace
&Aacute;kos Kiss: akiss@users.sourceforge.net
F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace
TranslatorItalian
Alessandro Falappa: alessandro@falappa.net
......
......@@ -45,6 +45,7 @@
2004/07/26 - Better reporting of not-needed adapters.
2004/10/04 - Reporting of not called translator methods added.
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
......@@ -1435,6 +1436,13 @@ class TrManager:
return trdic
def __email(self, classId):
"""Returns the first maintainer for the translator class"""
return self.__maintainersDic[classId][0][1]
def generateTranslatorReport(self):
"""Generates the translator report."""
......@@ -1466,7 +1474,12 @@ class TrManager:
s += 'and %d are English based.' % len(self.EnBasedIdLst)
f.write(fill(s) + '\n\n')
# Write the list of up-to-date translator classes.
# 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.
if self.upToDateIdLst:
s = '''The following translator classes are up-to-date (sorted
alphabetically). This means that they derive from the
......@@ -1476,12 +1489,18 @@ class TrManager:
s = s % len(self.requiredMethodsDic)
f.write('-' * 70 + '\n')
f.write(fill(s) + '\n\n')
mailtoLst = []
for x in self.upToDateIdLst:
obj = self.__translDic[x]
f.write(' ' + obj.classId)
if obj.note:
f.write(' -- ' + obj.note)
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
# translators that derive from TranslatorEnglish are included.
......@@ -1497,6 +1516,7 @@ class TrManager:
# Find also whether some adapter classes may be removed.
adaptMinVersion = '9.9.99'
mailtoLst = []
for x in self.adaptIdLst:
obj = self.__translDic[x]
f.write(' %-30s' % obj.classId)
......@@ -1508,10 +1528,14 @@ class TrManager:
if obj.note:
f.write('\n\tNote: ' + obj.note + '\n')
f.write('\n')
mailtoLst.append(self.__email(obj.classId)) # to maintainer
# Check the level of required adapter classes.
if obj.status != '0.0.00' and obj.status < adaptMinVersion:
adaptMinVersion = obj.status
fmail.write('\n\ntranslator based\n')
fmail.write('; '.join(mailtoLst))
# Set the note if some old translator adapters are not needed
# any more. Do it only when the script is called without arguments,
......@@ -1588,8 +1612,9 @@ class TrManager:
assert(obj.classId != 'Translator')
obj.report(f)
# Close the report file.
# Close the report file and the auxiliary file with e-mails.
f.close()
fmail.close()
def __loadMaintainers(self):
......@@ -1599,7 +1624,7 @@ class TrManager:
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.
tim = os.path.getmtime(fname)
if tim > self.lastModificationTime:
......@@ -1625,7 +1650,7 @@ class TrManager:
classId = line
maintainersLst = []
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
if line == '': # separator found
......@@ -1642,8 +1667,8 @@ class TrManager:
t = (lst[0].strip(), lst[1].strip())
self.__maintainersDic[classId].append(t)
f.close()
def generateLanguageDoc(self):
"""Checks the modtime of files and generates language.doc."""
self.__loadMaintainers()
......
......@@ -8,31 +8,17 @@ German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En),
Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian,
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.
----------------------------------------------------------------------
The following translator classes are up-to-date (sorted
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:
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).
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
......@@ -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
must be implemented to become up-to-date:
TranslatorNorwegian 1.3.9 6 methods to implement
TranslatorJapanese 1.3.9 6 methods to implement
TranslatorDanish 1.3.9 6 methods to implement
TranslatorAfrikaans 1.3.9 6 methods to implement
TranslatorSpanish 1.3.8 7 methods to implement
TranslatorLithuanian 1.3.8 7 methods to implement
TranslatorChinesetraditional 1.3.8 7 methods to implement
TranslatorPortuguese 1.3.3 11 methods to implement
TranslatorSlovak 1.2.18 20 methods to implement
TranslatorCatalan 1.2.17 21 methods to implement
TranslatorSlovene 1.2.16 22 methods to implement
TranslatorRomanian 1.2.16 22 methods to implement
TranslatorGreek 1.2.11 25 methods to implement
TranslatorFinnish obsolete 94 methods to implement
TranslatorUkrainian 1.4.1 1 method to implement
TranslatorSwedish 1.4.1 1 method to implement
TranslatorSerbian 1.4.1 1 method to implement
TranslatorRussian 1.4.1 1 method to implement
TranslatorRomanian 1.4.1 1 method to implement
TranslatorPolish 1.4.1 1 method to implement
TranslatorKorean 1.4.01 1 method to implement
Note: Change the base class to TranslatorAdapter_1_4_1.
TranslatorItalian 1.4.1 1 method to implement
TranslatorHungarian 1.4.1 1 method to implement
TranslatorGerman 1.4.1 1 method to implement
TranslatorFrench 1.4.1 1 method 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
......@@ -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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
......@@ -97,11 +100,15 @@ TranslatorAfrikaans (TranslatorAdapter_1_3_9) 6 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorBrazilian (Translator)
TranslatorBrazilian (TranslatorAdapter_1_4_1) 1 method to implement
-------------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
......@@ -116,13 +123,14 @@ TranslatorBrazilian (Translator)
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation()
virtual QCString trDirIndex()
virtual QCString trPackageMembers()
......@@ -159,32 +167,24 @@ TranslatorCatalan (TranslatorAdapter_1_2_17) 21 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorChinese (Translator)
TranslatorChinese (TranslatorAdapter_1_4_1) 1 method to implement
-----------------
Implements 191 of the required methods.
Obsolete methods (should be removed, never used):
Missing methods (should be implemented):
virtual QCString trHeaderFilesDescription()
virtual QCString trField(bool/*first_capital*/, bool/*singular*/)
virtual QCString trPackageDocumentation()
virtual QCString trSources()
virtual QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
virtual QCString trHeaderFiles()
virtual QCString trBugsAndLimitations()
virtual QCString trEnumerationValueDocumentation()
virtual QCString trNoDescriptionAvailable()
virtual QCString trOverloadText()
TranslatorChinesetraditional (TranslatorAdapter_1_3_8) 7 methods to implement
TranslatorChinesetraditional (TranslatorAdapter_1_3_8) 8 methods to implement
----------------------------
Implements 184 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
......@@ -207,32 +207,34 @@ TranslatorChinesetraditional (TranslatorAdapter_1_3_8) 7 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorCroatian (Translator)
TranslatorCroatian (TranslatorAdapter_1_4_1) 1 method to implement
------------------
Implements 191 of the required methods.
Obsolete methods (should be removed, never used):
Missing methods (should be implemented):
QCString trHeaderFilesDescription()
virtual QCString trField(bool first_capital, bool singular)
virtual QCString trPackageDocumentation()
QCString trSources()
QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
QCString trHeaderFiles()
QCString trBugsAndLimitations()
QCString trEnumerationValueDocumentation()
QCString trNoDescriptionAvailable()
virtual QCString trOverloadText()
TranslatorCzech (TranslatorAdapter_1_4_1) 1 method to implement
---------------
Implements 191 of the required methods.
Missing methods (should be implemented):
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
......@@ -257,7 +259,7 @@ TranslatorDanish (TranslatorAdapter_1_3_9) 6 methods to implement
TranslatorDutch (Translator)
---------------
Implements 191 of the required methods.
Implements 192 of the required methods.
Obsolete methods (should be removed, never used):
......@@ -276,7 +278,7 @@ TranslatorDutch (Translator)
TranslatorEnglish (Translator)
-----------------
Implements 191 of the required methods.
Implements 192 of the required methods.
Obsolete methods (should be removed, never used):
......@@ -292,7 +294,7 @@ TranslatorEnglish (Translator)
virtual QCString trNoDescriptionAvailable()
TranslatorFinnish (TranslatorEnglish) 94 methods to implement
TranslatorFinnish (TranslatorEnglish) 95 methods to implement
-----------------
Implements 97 of the required methods.
......@@ -303,6 +305,7 @@ TranslatorFinnish (TranslatorEnglish) 94 methods to implement
virtual QCString trPropertyDocumentation()
virtual QCString trMember(bool first_capital, bool singular)
virtual QCString trPageIndex()
virtual QCString trOverloadText()
virtual QCString trSince()
virtual QCString trEventDocumentation()
virtual QCString trDirIndex()
......@@ -407,11 +410,15 @@ TranslatorFinnish (TranslatorEnglish) 94 methods to implement
QCString trNoDescriptionAvailable()
TranslatorFrench (Translator)
TranslatorFrench (TranslatorAdapter_1_4_1) 1 method to implement
----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
......@@ -426,11 +433,15 @@ TranslatorFrench (Translator)
virtual QCString trNoDescriptionAvailable()
TranslatorGerman (Translator)
TranslatorGerman (TranslatorAdapter_1_4_1) 1 method to implement
----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
......@@ -445,13 +456,14 @@ TranslatorGerman (Translator)
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation()
virtual QCString trDirIndex()
virtual QCString trImplementedFromList(int numEntries)
......@@ -492,11 +504,15 @@ TranslatorGreek (TranslatorAdapter_1_2_11) 25 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorHungarian (Translator)
TranslatorHungarian (TranslatorAdapter_1_4_1) 1 method to implement
-------------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
QCString trHeaderFilesDescription()
......@@ -511,11 +527,15 @@ TranslatorHungarian (Translator)
QCString trNoDescriptionAvailable()
TranslatorItalian (Translator)
TranslatorItalian (TranslatorAdapter_1_4_1) 1 method to implement
-----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
QCString trHeaderFilesDescription()
......@@ -530,13 +550,14 @@ TranslatorItalian (Translator)
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
......@@ -558,7 +579,7 @@ TranslatorJapanese (TranslatorAdapter_1_3_9) 6 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorJapaneseEn (TranslatorEnglish) 186 methods to implement
TranslatorJapaneseEn (TranslatorEnglish) 187 methods to implement
--------------------
Implements 5 of the required methods.
......@@ -572,11 +593,15 @@ TranslatorJapaneseEn (TranslatorEnglish) 186 methods to implement
virtual QCString latexLanguageSupportCommand()
TranslatorKorean (TranslatorAdapter_1_3_9)
TranslatorKorean (TranslatorAdapter_1_3_9) 1 method to implement
----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
......@@ -591,7 +616,7 @@ TranslatorKorean (TranslatorAdapter_1_3_9)
virtual QCString trNoDescriptionAvailable()
TranslatorKoreanEn (TranslatorEnglish) 186 methods to implement
TranslatorKoreanEn (TranslatorEnglish) 187 methods to implement
------------------
Implements 5 of the required methods.
......@@ -605,13 +630,14 @@ TranslatorKoreanEn (TranslatorEnglish) 186 methods to implement
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
......@@ -634,13 +660,14 @@ TranslatorLithuanian (TranslatorAdapter_1_3_8) 7 methods to implement
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
......@@ -662,11 +689,15 @@ TranslatorNorwegian (TranslatorAdapter_1_3_9) 6 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorPolish (Translator)
TranslatorPolish (TranslatorAdapter_1_4_1) 1 method to implement
----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
QCString trHeaderFilesDescription()
......@@ -681,13 +712,14 @@ TranslatorPolish (Translator)
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trSearchResultsTitle()
......@@ -714,35 +746,14 @@ TranslatorPortuguese (TranslatorAdapter_1_3_3) 11 methods to implement
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):
virtual QCString trEventDocumentation()
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()
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
......@@ -758,11 +769,15 @@ TranslatorRomanian (TranslatorAdapter_1_2_16) 22 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorRussian (Translator)
TranslatorRussian (TranslatorAdapter_1_4_1) 1 method to implement
-----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
......@@ -777,11 +792,15 @@ TranslatorRussian (Translator)
virtual QCString trNoDescriptionAvailable()
TranslatorSerbian (Translator)
TranslatorSerbian (TranslatorAdapter_1_4_1) 1 method to implement
-----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
......@@ -796,13 +815,14 @@ TranslatorSerbian (Translator)
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation()
virtual QCString trDirIndex()
virtual QCString trPackageMembers()
......@@ -838,13 +858,14 @@ TranslatorSlovak (TranslatorAdapter_1_2_18) 20 methods to implement
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trEventDocumentation()
virtual QCString trDirIndex()
virtual QCString trPackageMembers()
......@@ -882,13 +903,14 @@ TranslatorSlovene (TranslatorAdapter_1_2_16) 22 methods to implement
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.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
......@@ -911,11 +933,15 @@ TranslatorSpanish (TranslatorAdapter_1_3_8) 7 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorSwedish (Translator)
TranslatorSwedish (TranslatorAdapter_1_4_1) 1 method to implement
-----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
......@@ -930,11 +956,15 @@ TranslatorSwedish (Translator)
virtual QCString trNoDescriptionAvailable()
TranslatorUkrainian (Translator)
TranslatorUkrainian (TranslatorAdapter_1_4_1) 1 method to implement
-------------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.4.1_20050227
Version: 1.4.1_20050307
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -133,6 +133,8 @@ static int g_braceCount=0;
static void saveObjCContext();
static void restoreObjCContext();
//-------------------------------------------------------------------
/*! Represents a stack of variable to class mappings as found in the
......@@ -252,10 +254,15 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
addVariable(typeName,name);
}
}
else // add a dummy entry so the name is hidden to avoid false links
else
{
DBG_CTX((stderr,"** addVariable: dummy context\n"));
scope->append(lname,dummyContext);
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"));
scope->append(lname,dummyContext);
}
}
}
......@@ -281,9 +288,8 @@ ClassDef *VariableContext::findVariable(const QCString &name)
return result;
}
const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
static VariableContext g_theVarContext;
const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
//-------------------------------------------------------------------
......@@ -848,6 +854,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
}
ClassDef *cd=0,*lcd=0;
MemberDef *md=0;
bool isLocal=FALSE;
//fprintf(stderr,"generateClassOrGlobalLink(className=%s)\n",className.data());
if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
......@@ -859,7 +866,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{
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 (getLink(g_classScope,clName,ol,clName))
......@@ -874,7 +881,8 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{
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
{
......@@ -907,7 +915,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
else // not a class, maybe a global member
{
//printf("class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly);
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
{
......
......@@ -57,6 +57,8 @@ static QCString g_fileName;
static int g_lineNr;
static int g_condCtx;
static QStack<CondCtx> g_condStack;
static QCString g_blockName;
static int g_lastCommentContext;
static void replaceCommentMarker(const char *s,int len)
{
......@@ -217,6 +219,32 @@ static QCString handleCondCmdInAliases(const QCString &s)
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
#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
......@@ -245,7 +273,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
%x Verbatim
%x ReadLine
%x CondLine
%x SkipLang
%%
......@@ -271,7 +298,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
}
g_blockHeadCol=g_col;
copyToOutput("/**",3);
copyToOutput(yytext+i,yyleng-i);
//copyToOutput(yytext+i,yyleng-i);
replaceAliases(yytext+i,yyleng-i);
BEGIN(SComment);
}
<Scan>"//##Documentation".*/\n { /* Start of Rational Rose ANSI C++ comment block */
......@@ -279,7 +307,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
int i=17; //=strlen("//##Documentation");
g_blockHeadCol=g_col;
copyToOutput("/**",3);
copyToOutput(yytext+i,yyleng-i);
//copyToOutput(yytext+i,yyleng-i);
replaceAliases(yytext+i,yyleng-i);
BEGIN(SComment);
}
<Scan>"//"/.*\n { /* one line C++ comment */
......@@ -291,16 +320,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng);
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);
g_blockName=&yytext[1];
g_lastCommentContext = YY_START;
BEGIN(Verbatim);
}
<Scan>. { /* any other character */
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);
BEGIN(Scan);
if (&yytext[4]==g_blockName)
{
BEGIN(g_lastCommentContext);
}
}
<Verbatim>[^@\\\n]* { /* any character not a backslash or new line */
copyToOutput(yytext,yyleng);
......@@ -311,25 +345,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<Verbatim>. { /* any other character */
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 */
copyToOutput(yytext,yyleng);
}
......@@ -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
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
g_condCtx = YY_START;
BEGIN(CondLine);
......@@ -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)
* to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO).
* -# It replaces aliases with their definition (see ALIASES)
......
......@@ -161,7 +161,9 @@ static DocCmdMap docCmdMap[] =
{ "verbatim", &handleFormatBlock },
{ "latexonly", &handleFormatBlock },
{ "htmlonly", &handleFormatBlock },
{ "xmlonly", &handleFormatBlock },
{ "rtfonly", &handleFormatBlock },
{ "manonly", &handleFormatBlock },
{ "dot", &handleFormatBlock },
{ "code", &handleFormatBlock },
{ "addindex", &handleAddIndex },
......@@ -316,7 +318,6 @@ static QCString xrefItemTitle;
static QCString xrefListTitle;
static Protection protection;
static bool xrefAppendToPrev;
static bool xrefAppendFlag;
//-----------------------------------------------------------------------------
......@@ -405,8 +406,8 @@ static void addXRefItem(const char *listName,const char *itemTitle,
{
Entry *docEntry = current; // inBody && previous ? previous : current;
if (listName==0) return;
//printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append);
ListItemInfo *lii=0;
RefList *refList = Doxygen::xrefLists->find(listName);
if (refList==0) // new list
......@@ -539,17 +540,20 @@ static void addSection()
// selects the output to write to
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);
if (inContext==OutputXRef) // end of XRef section => add the item
{
// 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
// 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)
{
case XRef_Todo:
......@@ -604,7 +608,7 @@ static inline void setOutput(OutputContext ctx)
case OutputXRef:
pOutputString = &outputXRef;
// first item found, so can't append to previous
xrefAppendFlag = FALSE;
//xrefAppendFlag = FALSE;
break;
}
}
......@@ -641,8 +645,7 @@ static int yyread(char *buf,int max_size)
/* start command character */
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")
/* ("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}">") */
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")
PRE [pP][rR][eE]
TABLE [tT][aA][bB][lL][eE]
P [pP]
......@@ -706,6 +709,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
%x ReadFormulaLong
%x AnchorLabel
%x HtmlComment
%x SkipLang
%%
......@@ -720,11 +724,15 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
* end of brief description due to some command (@command, or <command>).
* words and whitespace and other characters (#,?!, etc).
* grouping commands (e.g. @{ and @})
* language switch (e.g. \~english or \~).
*/
<Comment>{CMD}{CMD}[a-z_A-Z]+{B}* { // escaped command
addOutput(yytext);
}
<Comment>{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command
addOutput(yytext);
}
<Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!)
addOutput(yytext);
}
......@@ -757,6 +765,14 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<Comment>("\\\\"|"@@")"f"[$\[{] { // escaped formula command
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
formulaText="\\begin";
formulaEnv=&yytext[2];
......@@ -793,7 +809,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
addOutput(yytext[0]);
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)
{
setOutput(OutputDoc);
......@@ -1091,7 +1107,6 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<XRefItemParam1>{ID} { // first argument
newXRefItemKey=yytext;
setOutput(OutputXRef);
xrefItemKey==yytext;
BEGIN(XRefItemParam2);
}
<XRefItemParam1>{LC} { // line continuation
......@@ -1274,7 +1289,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
/* ----- 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);
if (&yytext[4]==blockName) // found end of the block
{
......@@ -1429,6 +1444,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
<NameParam>. { // ignore other stuff
nameHeader+=*yytext;
current->name+=*yytext;
}
/* ----- handle argument of ingroup command ------- */
......@@ -1523,6 +1539,25 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
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)
// see if the using statement was found inside a namespace or inside
// the global file scope.
QCString scName;
if (root->parent->section == Entry::NAMESPACE_SEC)
{
QCString scName=root->parent->name;
scName=root->parent->name;
if (!scName.isEmpty())
{
nd = getResolvedNamespace(scName);
}
}
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",
cd ? cd->name().data() : root->name.data(), cd);
......@@ -1501,11 +1508,7 @@ static MemberDef *addVariableToClass(
root->type,name,root->args,0,
prot,Normal,root->stat,related,
mtype,0,0);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
md->setMemberClass(cd);
//md->setDefFile(root->fileName);
//md->setDefLine(root->startLine);
......@@ -1662,11 +1665,7 @@ static MemberDef *addVariableToFile(
root->type,name,root->args,0,
Public, Normal,root->stat,FALSE,
mtype,0,0);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
......@@ -1774,7 +1773,11 @@ static bool isVarWithConstructor(Entry *root)
}
if (root->parent->name) ctx=Doxygen::namespaceSDict.find(root->parent->name);
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;
if (!typeIsClass && (ti=type.find('<'))!=-1)
{
......@@ -2096,11 +2099,7 @@ static void addMethodToClass(Entry *root,ClassDef *cd,
root->type,name,root->args,root->exception,
root->protection,root->virt,root->stat,!root->relates.isEmpty(),
mtype,root->tArgLists ? root->tArgLists->last() : 0,root->argList);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
md->setMemberClass(cd);
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(!root->proto);
......@@ -2237,6 +2236,7 @@ static void buildFunctionList(Entry *root)
bool isFriend=root->type.find("friend ")!=-1;
QCString rname = removeRedundantWhiteSpace(root->name);
//printf("rname=%s\n",rname.data());
if (!rname.isEmpty())
{
......@@ -2247,10 +2247,12 @@ static void buildFunctionList(Entry *root)
//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->type.find(re,0));
QCString scope=stripAnonymousNamespaceScope(root->parent->name);
QCString scope=root->parent->name; //stripAnonymousNamespaceScope(root->parent->name);
scope=stripTemplateSpecifiersFromScope(scope,FALSE);
//printf("scope=%s\n",scope.data());
cd=getClass(scope);
//printf("cd=%p\n",cd);
if (cd && scope+"::"==rname.left(scope.length()+2)) // found A::f inside A
{
// strip scope from name
......@@ -2423,11 +2425,7 @@ static void buildFunctionList(Entry *root)
MemberDef::Function,tArgList,root->argList);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
//md->setDefFile(root->fileName);
//md->setDefLine(root->startLine);
md->setDocumentation(root->doc,root->docFile,root->docLine);
......@@ -4131,63 +4129,6 @@ static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd,
const char *scopeName)
{
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;
}
......@@ -4708,7 +4649,8 @@ static void findMember(Entry *root,
if (!namespaceName.isEmpty()) nd=getResolvedNamespace(namespaceName);
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
{
......@@ -4967,7 +4909,7 @@ static void findMember(Entry *root,
for (mni.toFirst();(md=mni.current());++mni)
{
ClassDef *cd=md->getClassDef();
if (cd!=0 && cd->name()==className)
if (cd!=0 && rightScopeMatch(cd->name(),className))
{
if (md->templateArguments())
{
......@@ -4998,11 +4940,7 @@ static void findMember(Entry *root,
root->protection,root->virt,root->stat,FALSE,
mtype,tArgList,root->argList);
//printf("new specialized member %s args=`%s'\n",md->name().data(),funcArgs.data());
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
md->setMemberClass(cd);
md->setTemplateSpecialization(TRUE);
md->setDefinition(funcDecl);
......@@ -5063,11 +5001,7 @@ static void findMember(Entry *root,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,TRUE,
mtype,tArgList,root->argList);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
md->setMemberClass(cd);
md->setDefinition(funcDecl);
md->enableCallGraph(root->callGraph);
......@@ -5173,11 +5107,7 @@ static void findMember(Entry *root,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,TRUE,
mtype,tArgList,funcArgs.isEmpty() ? 0 : root->argList);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
//printf("Related member name=`%s' decl=`%s' bodyLine=`%d'\n",
// funcName.data(),funcDecl.data(),root->bodyLine);
......@@ -5274,11 +5204,7 @@ localObjCMethod:
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,FALSE,
MemberDef::Function,0,root->argList);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
md->makeImplementationDetail();
md->setMemberClass(cd);
md->setDefinition(funcDecl);
......@@ -5559,11 +5485,7 @@ static void findEnums(Entry *root)
0,name,0,0,
root->protection,Normal,FALSE,isRelated,MemberDef::Enumeration,
0,0);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
}
md->setTagInfo(root->tagInfo);
if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
md->setBodySegment(root->bodyLine,root->endBodyLine);
bool ambig;
......@@ -6480,8 +6402,7 @@ static void findDefineDocumentation(Entry *root)
MemberDef *md=new MemberDef("<tagfile>",1,
"#define",root->name,root->args,0,
Public,Normal,FALSE,FALSE,MemberDef::Define,0,0);
md->setAnchor(root->tagInfo->anchor);
md->setReference(root->tagInfo->tagName);
md->setTagInfo(root->tagInfo);
bool ambig;
QCString filePathName = root->parent->fileName;
FileDef *fd=findFileDef(Doxygen::inputNameDict,filePathName,ambig);
......@@ -8610,6 +8531,10 @@ void parseInput()
buildClassList(root);
buildClassDocList(root);
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");
findUsingDeclImports(root);
......
......@@ -125,7 +125,8 @@ static const char *defaultStyleSheet =
"A:hover { text-decoration: none; background-color: #f2f2ff }\n"
"DL.el { margin-left: -1cm }\n"
".fragment {\n"
" font-family: monospace\n"
" font-family: Fixed, monospace;\n"
" font-size: 90%;\n"
"}\n"
"PRE.fragment {\n"
" border: 1px solid #CCCCCC;\n"
......@@ -843,8 +844,10 @@ void HtmlGenerator::codify(const char *str)
t << spaces.left(spacesToNextTabStop);
col+=spacesToNextTabStop;
break;
case '\n': t << '\n'; col=0;
case '\n': t << "\n"; col=0;
break;
//case '\n': t << "<br>"; col=0;
// break;
case '\r': break;
case '<': t << "&lt;"; col++;
break;
......@@ -852,6 +855,8 @@ void HtmlGenerator::codify(const char *str)
break;
case '&': t << "&amp;"; col++;
break;
//case ' ': t << "&nbsp;"; col++;
// break;
case '\\':
if (*p=='<')
{ t << "&lt;"; p++; }
......
......@@ -1707,34 +1707,24 @@ static void writeMemberIndexFiltered(OutputList &ol, ClassMemberHighlight hl)
numPages=127;
}
struct
struct CmhlInfo
{
CmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname;
QCString title;
} cmhlInfo[] =
{
{ "functions", 0 },
{ "functions_func",0 },
{ "functions_vars",0 },
{ "functions_type",0 },
{ "functions_enum",0 },
{ "functions_eval",0 },
{ "functions_rela",0 },
{ "functions_prop",0 },
{ "functions_evnt",0 },
{ "functions_rela",0 },
CmhlInfo("functions", theTranslator->trAll()),
CmhlInfo("functions_func",theTranslator->trFunctions()),
CmhlInfo("functions_vars",theTranslator->trVariables()),
CmhlInfo("functions_type",theTranslator->trTypedefs()),
CmhlInfo("functions_enum",theTranslator->trEnumerations()),
CmhlInfo("functions_eval",theTranslator->trEnumerationValues()),
CmhlInfo("functions_prop",theTranslator->trProperties()),
CmhlInfo("functions_evnt",theTranslator->trEvents()),
CmhlInfo("functions_rela",theTranslator->trRelatedFunctions())
};
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.disableAllBut(OutputGenerator::Html);
......@@ -2114,27 +2104,21 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
numPages=127;
}
struct
struct FmhlInfo
{
FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname;
QCString title;
} fmhlInfo[] =
{
{ "globals", 0 },
{ "globals_func",0 },
{ "globals_vars",0 },
{ "globals_type",0 },
{ "globals_enum",0 },
{ "globals_eval",0 },
{ "globals_defs",0 }
FmhlInfo("globals", theTranslator->trAll()),
FmhlInfo("globals_func",theTranslator->trFunctions()),
FmhlInfo("globals_vars",theTranslator->trVariables()),
FmhlInfo("globals_type",theTranslator->trTypedefs()),
FmhlInfo("globals_enum",theTranslator->trEnumerations()),
FmhlInfo("globals_eval",theTranslator->trEnumerationValues()),
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.disableAllBut(OutputGenerator::Html);
......@@ -2241,25 +2225,20 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
numPages=127;
}
struct
struct NmhlInfo
{
NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname;
QCString title;
} nmhlInfo[] =
{
{ "namespacemembers", 0 },
{ "namespacemembers_func",0 },
{ "namespacemembers_vars",0 },
{ "namespacemembers_type",0 },
{ "namespacemembers_enum",0 },
{ "namespacemembers_eval",0 }
NmhlInfo("namespacemembers", theTranslator->trAll()),
NmhlInfo("namespacemembers_func",theTranslator->trFunctions()),
NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()),
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.disableAllBut(OutputGenerator::Html);
......
......@@ -509,7 +509,11 @@ bool MemberDef::hasExamples()
QCString MemberDef::getOutputFileBase() const
{
QCString baseName;
if (m_templateMaster)
if (explicitOutputFileBase)
{
return explicitOutputFileBase;
}
else if (m_templateMaster)
{
return m_templateMaster->getOutputFileBase();
}
......@@ -835,6 +839,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
// hide members whose brief section should not be visible
//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
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
......@@ -875,6 +883,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
Doxygen::tagFile << "\">" << endl;
Doxygen::tagFile << " <type>" << convertToXML(typeString()) << "</type>" << 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 << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
writeDocAnchorsToTagFile();
......@@ -889,9 +898,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
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 cfname = getOutputFileBase();
QCString osname = cname;
......@@ -2080,11 +2086,14 @@ void MemberDef::addListReference(Definition *)
}
QCString memName = name();
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=getClassDef()) && !isRelated()) // it's a class so we
||
(pd=getClassDef()) // it's a class so we
// show the scope anyway
)
)
{
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
......@@ -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
void setHasDocumentedParams(bool b) { m_hasDocumentedParams = b; }
void setHasDocumentedReturnType(bool b) { m_hasDocumentedReturnType = b; }
void setInheritsDocsFrom(MemberDef *md) { m_docProvider = md; }
void setTagInfo(TagInfo *i);
// output generation
void writeLink(OutputList &ol,
......@@ -400,6 +401,9 @@ class MemberDef : public Definition
// documentation inheritance
MemberDef *m_docProvider;
// to store the output file base from tag files
QCString explicitOutputFileBase;
};
#endif
......@@ -100,6 +100,7 @@ static bool g_expandOnlyPredef; // from the configuration
static int g_commentCount;
static bool g_insideComment;
static bool g_isImported;
static QCString g_blockName;
static void setFileName(const char *name)
......@@ -1776,13 +1777,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar('/');outputChar('*');
//g_commentCount++;
}
<SkipCComment>[\\@]"verbatim"{BN}+ {
<SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
outputArray(yytext,yyleng);
g_blockName=&yytext[1];
BEGIN(SkipVerbatim);
}
<SkipVerbatim>[\\@]"endverbatim" {
<SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */
outputArray(yytext,yyleng);
BEGIN(SkipCComment);
if (&yytext[4]==g_blockName)
{
BEGIN(SkipCComment);
}
}
<SkipCComment,SkipVerbatim>[^*\x06\n\/]+ {
outputArray(yytext,yyleng);
......
......@@ -2121,7 +2121,12 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FindMembers,FindFields>("//"([!/]?){B}*{CMD}"{")|("/*"([!*]?){B}*{CMD}"{") {
#ifdef COMMENTSCAN
REJECT;
Entry *tmp = current;
current = previous;
handleGroupStartCommand(current->name);
current = tmp;
initEntry();
#else
startGroup();
tmpDocType=-1;
......@@ -2154,7 +2159,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
}
<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" {
#ifdef COMMENTSCAN
REJECT;
handleGroupEndCommand();
#else
if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty())
{
......@@ -3266,7 +3271,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FuncQual>[{:;,] {
if ( strcmp(yytext,";")==0 &&
insidePHP &&
current->type.left(8) != "function" )
!containsWord(current->type,"function") )
{
current->reset();
initEntry();
......@@ -3497,26 +3502,24 @@ IDLATTR ("["[^\]]*"]"){BN}*
//printf("Adding entry `%s'\n",current->name.data());
if ( insidePHP)
{
if (current->type.left(6) == "final " )
if (findAndRemoveWord(current->type,"final"))
{
current->type = current->type.mid(6);
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;
}
}
if ( insidePHP && current->type.left(8) != "function" )
if ( insidePHP && !containsWord(current->type,"function"))
{
initEntry();
}
else
{
if ( insidePHP && current->type.left(8) == "function" )
if ( insidePHP)
{
current->type = current->type.mid(8);
findAndRemoveWord(current->type,"function");
}
previous = current;
current_root->addSubEntry(current);
......@@ -4303,7 +4306,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FindMembers>"{" {
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;
}
......
......@@ -19,6 +19,8 @@
#include "tagreader.h"
#include <stdio.h>
#include <stdarg.h>
#include <qxml.h>
#include <qstack.h>
#include <qdict.h>
......@@ -58,6 +60,7 @@ class TagMemberInfo
TagMemberInfo() : prot(Public), virt(Normal), isStatic(FALSE) {}
QString type;
QString name;
QString anchorFile;
QString anchor;
QString arglist;
QString kind;
......@@ -80,6 +83,7 @@ class TagClassInfo
QList<BaseInfo> *bases;
QList<TagMemberInfo> members;
QList<QString> *templateArguments;
QStringList classList;
Kind kind;
bool isObjC;
};
......@@ -91,9 +95,10 @@ class TagNamespaceInfo
TagNamespaceInfo() { members.setAutoDelete(TRUE); }
QString name;
QString filename;
QStringList classList;
QStringList namespaceList;
TagAnchorInfoList docAnchors;
QList<TagMemberInfo> members;
QStringList classList;
};
/*! Container for package specific info that can be read from a tagfile */
......@@ -201,6 +206,7 @@ class TagFileParser : public QXmlDefaultHandler
TagFileParser *m_parent;
Handler m_handler;
};
class EndElementHandler
{
typedef void (TagFileParser::*Handler)();
......@@ -220,6 +226,24 @@ class TagFileParser : public QXmlDefaultHandler
m_startElementHandlers.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 )
{
......@@ -300,13 +324,14 @@ class TagFileParser : public QXmlDefaultHandler
}
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)
{
m_curClass->isObjC = TRUE;
}
}
void endCompound()
{
switch (m_state)
......@@ -326,9 +351,10 @@ class TagFileParser : public QXmlDefaultHandler
case InPackage: m_tagFilePackages.append(m_curPackage);
m_curPackage=0; break;
default:
err("Error: tag `compound' was not expected!\n");
warn("Warning: tag `compound' was not expected!\n");
}
}
void startMember( const QXmlAttributes& attrib)
{
m_curMember = new TagMemberInfo;
......@@ -371,11 +397,10 @@ class TagFileParser : public QXmlDefaultHandler
case InNamespace: m_curNamespace->members.append(m_curMember); break;
case InGroup: m_curGroup->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()
{
switch(m_state)
......@@ -388,63 +413,73 @@ class TagFileParser : public QXmlDefaultHandler
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 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()
{
switch(m_state)
{
case InClass: m_curClass->classList.append(m_curString); break;
case InFile: m_curFile->classList.append(m_curString); break;
case InNamespace: m_curNamespace->classList.append(m_curString); break;
case InGroup: m_curGroup->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()
{
switch(m_state)
{
case InNamespace: m_curNamespace->classList.append(m_curString); break;
case InFile: m_curFile->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()
{
switch(m_state)
{
case InGroup: m_curGroup->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()
{
switch(m_state)
{
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()
{
switch(m_state)
{
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& )
{
m_curString = "";
}
void startDocAnchor(const QXmlAttributes& attrib )
{
m_fileName = attrib.value("file");
m_curString = "";
}
void endType()
{
if (m_state==InMember)
......@@ -453,9 +488,10 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unexpected tag `type' found\n");
warn("Warning: Unexpected tag `type' found\n");
}
}
void endName()
{
switch (m_state)
......@@ -468,9 +504,10 @@ class TagFileParser : public QXmlDefaultHandler
case InDir: m_curDir->name = m_curString; break;
case InMember: m_curMember->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 )
{
m_curString="";
......@@ -501,9 +538,10 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unexpected tag `base' found\n");
warn("Warning: Unexpected tag `base' found\n");
}
}
void endBase()
{
if (m_state==InClass && m_curClass)
......@@ -512,9 +550,10 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unexpected tag `base' found\n");
warn("Warning: Unexpected tag `base' found\n");
}
}
void startIncludes(const QXmlAttributes& attrib )
{
if (m_state==InFile && m_curFile)
......@@ -528,14 +567,16 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unexpected tag `includes' found\n");
warn("Warning: Unexpected tag `includes' found\n");
}
m_curString="";
}
void endIncludes()
{
m_curIncludes->text = m_curString;
}
void endTemplateArg()
{
if (m_state==InClass && m_curClass)
......@@ -549,9 +590,10 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unexpected tag `templarg' found\n");
warn("Warning: Unexpected tag `templarg' found\n");
}
}
void endFilename()
{
switch (m_state)
......@@ -563,18 +605,20 @@ class TagFileParser : public QXmlDefaultHandler
case InPage: m_curPage->filename = m_curString; break;
case InPackage: m_curPackage->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()
{
switch (m_state)
{
case InFile: m_curFile->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()
{
if (m_state==InMember)
......@@ -583,9 +627,22 @@ class TagFileParser : public QXmlDefaultHandler
}
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()
{
if (m_state==InMember)
......@@ -594,7 +651,7 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unexpected tag `arglist' found\n");
warn("Warning: Unexpected tag `arglist' found\n");
}
}
void endTitle()
......@@ -603,9 +660,10 @@ class TagFileParser : public QXmlDefaultHandler
{
case InGroup: m_curGroup->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()
{
if (m_state==InGroup)
......@@ -614,12 +672,14 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unexpected tag `subgroup' found\n");
warn("Warning: Unexpected tag `subgroup' found\n");
}
}
void startIgnoreElement(const QXmlAttributes& )
{
}
void endIgnoreElement()
{
}
......@@ -652,6 +712,7 @@ class TagFileParser : public QXmlDefaultHandler
m_startElementHandlers.insert("filename", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("includes", new StartElementHandler(this,&TagFileParser::startIncludes));
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("arglist", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("title", new StartElementHandler(this,&TagFileParser::startStringValue));
......@@ -673,6 +734,7 @@ class TagFileParser : public QXmlDefaultHandler
m_endElementHandlers.insert("filename", new EndElementHandler(this,&TagFileParser::endFilename));
m_endElementHandlers.insert("includes", new EndElementHandler(this,&TagFileParser::endIncludes));
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("arglist", new EndElementHandler(this,&TagFileParser::endArglist));
m_endElementHandlers.insert("title", new EndElementHandler(this,&TagFileParser::endTitle));
......@@ -689,6 +751,7 @@ class TagFileParser : public QXmlDefaultHandler
return TRUE;
}
bool startElement( const QString&, const QString&,
const QString&name, const QXmlAttributes& attrib )
{
......@@ -700,10 +763,11 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unknown tag `%s' found!\n",name.data());
warn("Warning: Unknown tag `%s' found!\n",name.data());
}
return TRUE;
}
bool endElement( const QString&, const QString&, const QString& name )
{
//printf("endElement `%s'\n",name.data());
......@@ -714,15 +778,17 @@ class TagFileParser : public QXmlDefaultHandler
}
else
{
err("Error: Unknown tag `%s' found!\n",name.data());
warn("Warning: Unknown tag `%s' found!\n",name.data());
}
return TRUE;
}
bool characters ( const QString & ch )
{
m_curString+=ch;
return TRUE;
}
void dump();
void buildLists(Entry *root);
void addIncludes();
......@@ -753,6 +819,8 @@ class TagFileParser : public QXmlDefaultHandler
QString m_fileName;
State m_state;
QStack<State> m_stateStack;
QXmlLocator *m_locator;
QString m_inputFileName;
};
/*! Error handler for the XML tag file parser.
......@@ -971,7 +1039,7 @@ void TagFileParser::addDocAnchors(Entry *e,const TagAnchorInfoList &l)
}
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)
TagInfo *ti = new TagInfo;
ti->tagName = m_tagName;
ti->anchor = tmi->anchor;
ti->fileName = tmi->anchorFile;
me->tagInfo = ti;
if (tmi->kind=="define")
{
......@@ -1315,6 +1384,7 @@ void parseTagFile(Entry *root,const char *fullName,const char *tagName)
QFileInfo fi(fullName);
if (!fi.exists()) return;
TagFileParser handler( tagName );
handler.setFileName(fullName);
TagFileErrorHandler errorHandler;
QFile xmlFile( fullName );
QXmlInputSource source( xmlFile );
......
......@@ -433,6 +433,12 @@ class Translator
virtual QCString trDirReference(const char *dirName) = 0;
virtual QCString trDir(bool first_capital, bool singular) = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
virtual QCString trOverloadText() = 0;
};
#endif
......@@ -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:
virtual QCString updateNeededMessage()
......
......@@ -34,7 +34,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
class TranslatorBrazilian : public Translator
class TranslatorBrazilian : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -24,7 +24,7 @@
*/
#define CN_SPC
class TranslatorChinese : public Translator
class TranslatorChinese : public TranslatorAdapter_1_4_1
{
public:
/*! Used for identification of the language. The identification
......@@ -83,9 +83,6 @@ class TranslatorChinese : public Translator
virtual QCString trMemberEnumerationDocumentation()
{ return "成员枚举类型文档"; }
virtual QCString trEnumerationValueDocumentation()
{ return "成员枚举值文档"; }
/*! header that is put before the list of member function. */
virtual QCString trMemberFunctionDocumentation()
{ return "成员函数文档"; }
......@@ -173,11 +170,6 @@ class TranslatorChinese : public Translator
virtual QCString trFileList()
{ 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. */
virtual QCString trCompoundMembers()
{
......@@ -286,9 +278,6 @@ class TranslatorChinese : public Translator
return result;
}
virtual QCString trHeaderFilesDescription()
{ return "这里列出组成API的头文件:"; }
virtual QCString trExamplesDescription()
{ return "这里列出所有示例:"; }
......@@ -298,9 +287,6 @@ class TranslatorChinese : public Translator
virtual QCString trModulesDescription()
{ return "这里列出所有模块"; }
virtual QCString trNoDescriptionAvailable()
{ return "无可用文档"; }
virtual QCString trDocumentation()
{ return "文档"; }
......@@ -422,16 +408,9 @@ class TranslatorChinese : public Translator
virtual QCString trForInternalUseOnly()
{ return "仅限内部使用。"; }
virtual QCString trReimplementedForInternalReasons()
{ return "由于内部原因被重载;但不影响API";
}
virtual QCString trWarning()
{ return "警告"; }
virtual QCString trBugsAndLimitations()
{ return "BUG"CN_SPC"与局限"; }
virtual QCString trVersion()
{ return "版本"; }
......@@ -698,12 +677,7 @@ class TranslatorChinese : public Translator
// 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"行定义。";
}
......@@ -1025,12 +999,6 @@ class TranslatorChinese : public Translator
// 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 */
virtual QCString trClasses()
{
......@@ -1068,12 +1036,6 @@ class TranslatorChinese : public Translator
return "包";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "包的文档";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
......@@ -1228,20 +1190,6 @@ class TranslatorChinese : public Translator
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
* be followed by a single name or by a list of names
* of the category.
......@@ -1492,7 +1440,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirIndex()
/* { return "Directory Hierarchy"; } */
{
return "$(BL\\录结$(DC((B";
return "目录结构";
}
/*! This is used as the name of the chapter containing the documentation
......@@ -1501,7 +1449,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirDocumentation()
/* { return "Directory Documentation"; } */
{
return "$(BL\\录J8[c(B";
return "目录文档";
}
/*! This is used as the title of the directory index and also in the
......@@ -1510,7 +1458,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirectories()
/* { return "Directories"; } */
{
return "$(BL\\录(B";
return "目录";
}
/*! This returns a sentences that introduces the directory hierarchy.
......@@ -1521,7 +1469,7 @@ class TranslatorChinese : public Translator
/* "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
......@@ -1531,7 +1479,7 @@ class TranslatorChinese : public Translator
/* { QCString result=dirName; result+=" Directory Reference"; return result; } */
{
QCString result=dirName;
result+=CN_SPC"$(BL\\录;29M(B";
result+=CN_SPC"目录参考";
return result;
}
......@@ -1543,9 +1491,10 @@ class TranslatorChinese : public Translator
/* QCString result((first_capital ? "Director" : "director")); */
/* if (singular) result+="y"; else result+="ies"; */
/* return result; */
return "$(BL\\录(B";
return "目录";
}
};
#endif
......@@ -151,7 +151,7 @@
// Windows version. The version which does not call the function is
// probably slightly faster.
class TranslatorCzech : public Translator
class TranslatorCzech : public TranslatorAdapter_1_4_1
{
private:
/*! The decode() inline assumes the source written in the
......
......@@ -102,7 +102,7 @@
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
class TranslatorGerman : public Translator
class TranslatorGerman : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -1602,6 +1602,19 @@ class TranslatorEnglish : public Translator
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
......@@ -85,7 +85,7 @@
// Translator class (by the local maintainer) when the localized
// translator is made up-to-date again.
class TranslatorFrench : public Translator
class TranslatorFrench : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -58,11 +58,15 @@
//
// 2004/09/15
// - Added strings for 1.3.9
//
// 2005/02/28
// - Removed obsolete (unused) methods
//
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
class TranslatorCroatian : public Translator
class TranslatorCroatian : public TranslatorAdapter_1_4_1
{
private:
/*! to avoid macro redefinition from translator_cz.h */
......@@ -104,10 +108,8 @@ class TranslatorCroatian : public Translator
{ return decode("Dokumentacija typedef lanova"); }
QCString trMemberEnumerationDocumentation()
{ return decode("Dokumentacija enumeracijskih lanova"); }
QCString trEnumerationValueDocumentation()
{ return "Dokumentacija enumeracijskih vrijednosti"; }
QCString trMemberFunctionDocumentation()
{ return "Dokumentacija funkcija"; }
{ return "Dokumentacija funkcija"; }
QCString trMemberDataDocumentation()
{ return "Documentacija varijabli"; }
QCString trMore()
......@@ -149,8 +151,6 @@ class TranslatorCroatian : public Translator
}
QCString trFileList()
{ return "Popis datoteka"; }
QCString trHeaderFiles()
{ return "Header datoteke"; }
QCString trCompoundMembers()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
......@@ -217,16 +217,12 @@ class TranslatorCroatian : public Translator
result+="datoteke u kojima se nalaze:";
return decode(result);
}
QCString trHeaderFilesDescription()
{ return decode("Popis header datoteka koje ine API :"); }
QCString trExamplesDescription()
{ return "Popis primjera :"; }
QCString trRelatedPagesDescription()
{ return "Popis povezanih stranica:"; }
QCString trModulesDescription()
{ return "Popis svih modula:"; }
QCString trNoDescriptionAvailable()
{ return "Opis nije dostupan"; }
QCString trDocumentation()
{ return "Dokumentacija"; }
......@@ -314,14 +310,8 @@ class TranslatorCroatian : public Translator
}
QCString trForInternalUseOnly()
{ return decode("Iskljuivo za internu uporabu."); }
QCString trReimplementedForInternalReasons()
{ return decode("Reimplementirano zbog internih razloga; "
"Nema utjecaja na API.");
}
QCString trWarning()
{ return "Upozorenje"; }
QCString trBugsAndLimitations()
{ return decode("Greke i ogranienja"); }
QCString trVersion()
{ return "Verzija"; }
QCString trDate()
......@@ -563,10 +553,6 @@ class TranslatorCroatian : public Translator
// new since 0.49-991106
//////////////////////////////////////////////////////////////////////////
QCString trSources()
{
return "Izvorne datoteke";
}
QCString trDefinedAtLineInSourceFile()
{
return "Definirano u liniji @0 datoteke @1.";
......@@ -852,11 +838,6 @@ class TranslatorCroatian : public Translator
// 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 */
virtual QCString trClasses()
{
......@@ -882,11 +863,6 @@ class TranslatorCroatian : public Translator
{
return "Paketi";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Dokumentacija paketa";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
......@@ -996,17 +972,6 @@ class TranslatorCroatian : public Translator
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
* be followed by a single name or by a list of names
* of the category.
......
......@@ -29,7 +29,7 @@
#ifndef TRANSLATOR_HU_H
#define TRANSLATOR_HU_H
class TranslatorHungarian : public Translator
class TranslatorHungarian : public TranslatorAdapter_1_4_1
{
private:
const char * zed(char c)
......
......@@ -72,7 +72,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
class TranslatorItalian : public Translator
class TranslatorItalian : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -1200,6 +1200,19 @@ class TranslatorDutch : public Translator
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 @@
#ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H
class TranslatorPolish : public Translator
class TranslatorPolish : public TranslatorAdapter_1_4_1
{
private:
/*! to avoid macro redefinition from translator_pl.h */
......
......@@ -18,42 +18,44 @@
/* The translation from English to Romanian by Alexandru Iosup [aiosup@yahoo.com].
*
* 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,
* (e.g. the romanian for typedef is much unexpressive than the original), since we are
* producing C-documentation of our projects.
* the meaning of the sentences intact. I used C-words were possible,
* (e.g. the Romanian "definire de tip" for "typedef" is too long and
* unexpressive).
*
* If you have suggestions, please mail the comments and text proposals to the address
* shown aprox.10 lines above
*
* -------------------------------------------
* Project start : 20.Sep.2k
* Last Doxygen version covered : 1.2.14
* Last revision : 07.Mar.2k2
* Last Doxygen version covered : 1.4.1
* Last revision : 01.Mar.2k5
* -------------------------------------------
*
* 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
* - fixed some bugs
*
* 20.Sep.2k First version, covering Doxygen 1.2.1
*
*/
#ifndef TRANSLATOR_RO_H
#define TRANSLATOR_RO_H
class TranslatorRomanian: public TranslatorAdapter_1_2_16
class TranslatorRomanian : public TranslatorAdapter_1_4_1
{
public:
// --- Language control methods -------------------
/*! Used for identification of the language. May resemble
* the string returned by latexBabelPackage(), but it is not used
* for the same purpose. The identification should not be translated.
* It should be replaced by the name of the language in English
* (e.g. Czech, Japanese, Russian, etc.). It should be equal to
* the identification in language.h.
/*! Used for identification of the language. The identification
* should not be translated. It should be replaced by the name
* of the language in English using lower-case characters only
* (e.g. "czech", "japanese", "russian", etc.). It should be equal to
* the identification used in language.cpp.
*/
virtual QCString idLanguage()
{ return "romanian"; }
......@@ -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 */
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 */
virtual QCString trIncludingInheritedMembers()
......@@ -247,7 +249,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the list with all files. */
virtual QCString trFileListDescription(bool extractAll)
{
QCString result="Aceasta este lista tuturor ";
QCString result="Lista tuturor ";
result+="fiºierelor";
if (!extractAll) result+=" documentate";
result+=", cu scurte descrieri:";
......@@ -259,11 +261,11 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
{
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
{
return "Acestea sunt clasele, structurile, uniunile ºi interfeþele"
return "Lista claselor, structurilor, uniunilor ºi interfeþelor"
", cu scurte descrieri:";
}
......@@ -272,7 +274,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the page with all class members. */
virtual QCString trCompoundMembersDescription(bool extractAll)
{
QCString result="Aceasta este lista tuturor ";
QCString result="Lista tuturor ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
......@@ -316,7 +318,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the page with all file members. */
virtual QCString trFileMembersDescription(bool extractAll)
{
QCString result="Aceasta este lista tuturor ";
QCString result="Lista tuturor ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="funcþiilor, variabilelor, define-urilor, enum-urilor ºi typedef-urilor";
......@@ -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. */
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 */
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 */
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 */
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
* description is given.
......@@ -389,7 +391,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
}
else
{
return "Indexul Componenþilor";
return "Indexul Claselor";
}
}
......@@ -620,7 +622,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Aceasta este lista tuturor ";
QCString result="Lista tuturor ";
result+="namespace-urilor ";
if (!extractAll) result+="documentate ";
result+=", cu scurte descrieri:";
......@@ -689,7 +691,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
virtual QCString trPublicMembers()
{ return "Metode Publice"; }
virtual QCString trPublicSlots()
{ return "Sloturi Publice"; }
{ return "Conectori (slots) Publici"; }
virtual QCString trSignals()
{ return "Semnale"; }
virtual QCString trStaticPublicMembers()
......@@ -703,7 +705,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
virtual QCString trPrivateMembers()
{ return "Metode Private"; }
virtual QCString trPrivateSlots()
{ return "Sloturi Private"; }
{ return "Conectori (slots) Privaþi"; }
virtual QCString trStaticPrivateMembers()
{ return "Metode Statice Private"; }
......@@ -771,7 +773,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result="Aceasta este lista tuturor membrilor ";
QCString result="Lista tuturor membrilor ";
if (!extractAll) result+="documentaþi ";
result+="din toate namespace-urile, cu legãturi cãtre ";
......@@ -962,7 +964,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
}
virtual QCString trPublicTypes()
{
return "Tipuri publice";
return "Tipuri Publice";
}
virtual QCString trPublicAttribs()
{
......@@ -1017,7 +1019,7 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! Used as the header of the todo list */
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
/*! The description of the package index page */
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 */
virtual QCString trPackages()
......@@ -1217,12 +1219,12 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
/*! Used as a marker that is put before a \\bug item */
virtual QCString trBug()
{
return "Bug";
return "Problema (Bug)";
}
/*! Used as the header of the bug list */
virtual QCString trBugList()
{
return "Lista de Buguri";
return "Lista de Probleme (Bugs)";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1406,6 +1408,214 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
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
......@@ -49,7 +49,7 @@
#ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H
class TranslatorRussian : public Translator
class TranslatorRussian : public TranslatorAdapter_1_4_1
{
private:
/*! The Decode() inline assumes the source written in the
......
......@@ -69,7 +69,7 @@ Problem!
#ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H
class TranslatorSwedish : public Translator
class TranslatorSwedish : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -21,7 +21,7 @@
// translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu>;<office@ddmrm.com>
// // 10x 2 Ivana Miletic for gramatical consutation.
class TranslatorSerbian : public Translator
class TranslatorSerbian : public TranslatorAdapter_1_4_1
{
private:
QCString decode(const QCString& sInput)
......
......@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_UA_H
#define TRANSLATOR_UA_H
class TranslatorUkrainian : public Translator
class TranslatorUkrainian : public TranslatorAdapter_1_4_1
{
private:
/*! The Decode() inline assumes the source written in the
......
......@@ -752,6 +752,8 @@ static Definition *followPath(Definition *start,FileDef *fileScope,const QCStrin
if (current==0) break; // failed to follow the path
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
}
......@@ -1101,7 +1103,7 @@ ClassDef *getResolvedClassRec(Definition *scope,
g_visitedNamespaces.clear();
// test accessibility of definition within scope.
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
{
// see if we are dealing with a class or a typedef
......@@ -1398,7 +1400,9 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
int floatingIndex=0;
if (strLen==0) return;
// 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
floatingIndex+=newIndex-skipIndex;
......@@ -2979,7 +2983,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("mScope=`%s' mName=`%s'\n",mScope.data(),mName.data());
if (mName.isEmpty()) printf("memberName=%s\n",memberName.data());
MemberName *mn = Doxygen::memberNameSDict[mName];
if (!forceEmptyScope && mn && !(scopeName.isEmpty() && mScope.isEmpty()))
{
......@@ -3016,8 +3019,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
}
for (mmli.toFirst();(mmd=mmli.current());++mmli)
{
if (mmd->isLinkable())
{
//if (mmd->isLinkable())
//{
bool match=args==0 ||
matchArguments(mmd->argumentList(),argList,className,0,checkCV);
//printf("match=%d\n",match);
......@@ -3032,7 +3035,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md=mmd;
}
}
}
//}
}
if (argList)
{
......@@ -3044,27 +3047,36 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf(" >Searching for arbitrary member\n");
for (mmli.toFirst();(mmd=mmli.current());++mmli)
{
if (mmd->isLinkable())
{
//if (mmd->isLinkable())
//{
ClassDef *mcd=mmd->getClassDef();
//printf(" >Class %s found\n",mcd->name().data());
int m=minClassDistance(fcd,mcd);
if (m<mdist && mcd->isLinkable())
if (m<mdist /* && mcd->isLinkable()*/ )
{
//printf("Class distance %d\n",m);
mdist=m;
cd=mcd;
md=mmd;
}
}
//}
}
}
//printf(" >Succes=%d\n",mdist<maxInheritanceDepth);
if (mdist<maxInheritanceDepth)
{
gd=md->getGroupDef();
if (gd) cd=0;
return TRUE; /* found match */
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();
if (gd) cd=0;
return TRUE; /* found match */
}
}
}
/* go to the parent scope */
......@@ -3115,7 +3127,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{
//printf("mmd->getNamespaceDef()=%p fnd=%p\n",
// mmd->getNamespaceDef(),fnd);
if (mmd->getNamespaceDef()==fnd && mmd->isLinkable())
if (mmd->getNamespaceDef()==fnd /* && mmd->isLinkable() */ )
{ // namespace is found
bool match=TRUE;
ArgumentList *argList=0;
......@@ -3144,7 +3156,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{
for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
{
if (mmd->getNamespaceDef()==fnd && mmd->isLinkable())
if (mmd->getNamespaceDef()==fnd /*&& mmd->isLinkable() */ )
{
nd=fnd;
md=mmd;
......@@ -3154,9 +3166,18 @@ bool getDefs(const QCString &scName,const QCString &memberName,
}
if (found)
{
gd=md->getGroupDef();
if (gd && gd->isLinkable()) nd=0; else gd=0;
return TRUE;
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();
if (gd && gd->isLinkable()) nd=0; else gd=0;
return TRUE;
}
}
}
if (scopeOffset==0)
......@@ -3168,100 +3189,101 @@ bool getDefs(const QCString &scName,const QCString &memberName,
scopeOffset=0;
}
} while (scopeOffset>=0);
//else // no scope => global function
//else // no scope => global function
{
QList<MemberDef> members;
//printf(" Function with global scope name `%s' args=`%s'\n",memberName.data(),args);
MemberListIterator mli(*mn);
for (mli.toFirst();(md=mli.current());++mli)
{
QList<MemberDef> members;
//printf(" Function with global scope name `%s' args=`%s'\n",memberName.data(),args);
MemberListIterator mli(*mn);
for (mli.toFirst();(md=mli.current());++mli)
{
if (md->isLinkable())
//if (md->isLinkable())
//{
fd=md->getFileDef();
gd=md->getGroupDef();
//printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
// md->name().data(),args,fd,gd);
if (
(gd && gd->isLinkable()) || (fd && fd->isLinkable())
)
{
fd=md->getFileDef();
gd=md->getGroupDef();
//printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
// md->name().data(),args,fd,gd);
if (
(gd && gd->isLinkable()) || (fd && fd->isLinkable())
)
//printf(" fd=%p gd=%p args=`%s'\n",fd,gd,args);
bool match=TRUE;
ArgumentList *argList=0;
if (args && !md->isDefine() && strcmp(args,"()")!=0)
{
//printf(" fd=%p gd=%p args=`%s'\n",fd,gd,args);
bool match=TRUE;
ArgumentList *argList=0;
if (args && !md->isDefine() && strcmp(args,"()")!=0)
{
argList=new ArgumentList;
stringToArgumentList(args,argList);
match=matchArguments(md->argumentList(),argList,0,0,checkCV);
delete argList; argList=0;
}
if (match)
{
//printf("Found match!\n");
members.append(md);
}
argList=new ArgumentList;
stringToArgumentList(args,argList);
match=matchArguments(md->argumentList(),argList,0,0,checkCV);
delete argList; argList=0;
}
}
}
if (members.count()!=1 && args && !strcmp(args,"()"))
{
// no exact match found, but if args="()" an arbitrary
// member will do
md=mn->last();
while (md && md->isLinkable())
{
//printf("Found member `%s'\n",md->name().data());
//printf("member is linkable md->name()=`%s'\n",md->name().data());
fd=md->getFileDef();
gd=md->getGroupDef();
if (
(gd && gd->isLinkable()) || (fd && fd->isLinkable())
)
if (match)
{
//printf("Found match!\n");
members.append(md);
}
md=mn->prev();
}
//}
}
if (members.count()!=1 && args && !strcmp(args,"()"))
{
// no exact match found, but if args="()" an arbitrary
// member will do
md=mn->last();
while (md /* && md->isLinkable()*/)
{
//printf("Found member `%s'\n",md->name().data());
//printf("member is linkable md->name()=`%s'\n",md->name().data());
fd=md->getFileDef();
gd=md->getGroupDef();
if (
(gd && gd->isLinkable()) || (fd && fd->isLinkable())
)
{
members.append(md);
}
md=mn->prev();
}
//printf("found %d candidate members\n",members.count());
if (members.count()==1 || currentFile!=0)
}
//printf("found %d candidate members\n",members.count());
if (members.count()==1 || currentFile!=0)
{
md=members.first();
}
else if (members.count()>1)
{
//printf("Found more than one matching member!\n");
// use some C scoping rules to determine the correct link
// 1. member in current file
// 2. non-static member in different file
if (currentFile==0)
{
md=members.first();
bool ambig;
currentFile = findFileDef(Doxygen::inputNameDict,0/*namespaceName*/,ambig);
}
else if (members.count()>1)
MemberDef *bmd = 0;
for (md=members.first(); md; md=members.next())
{
//printf("Found more than one matching member!\n");
// use some C scoping rules to determine the correct link
// 1. member in current file
// 2. non-static member in different file
if (currentFile==0)
{
bool ambig;
currentFile = findFileDef(Doxygen::inputNameDict,0/*namespaceName*/,ambig);
}
MemberDef *bmd = 0;
for (md=members.first(); md; md=members.next())
if (md->getFileDef() == currentFile)
{
if (md->getFileDef() == currentFile)
{
bmd = 0;
break;
}
if (!(md->isStatic()) || Config_getBool("EXTRACT_STATIC")) bmd = md;
bmd = 0;
break;
}
if (bmd) md=bmd;
}
if (md && !md->isLinkable()) md=0; // ignore things we cannot link to
if (md) // found a matching global member
{
fd=md->getFileDef();
gd=md->getGroupDef();
//printf("fd=%p gd=%p gd->isLinkable()=%d\n",fd,gd,gd->isLinkable());
if (gd && gd->isLinkable()) fd=0; else gd=0;
return TRUE;
if (!(md->isStatic()) || Config_getBool("EXTRACT_STATIC")) bmd = md;
}
if (bmd) md=bmd;
}
if (md && !md->isLinkable()) md=0; // ignore things we cannot link to
if (md) // found a matching global member
{
fd=md->getFileDef();
gd=md->getGroupDef();
//printf("fd=%p gd=%p gd->isLinkable()=%d\n",fd,gd,gd->isLinkable());
if (gd && gd->isLinkable()) fd=0; else gd=0;
return TRUE;
}
}
}
// no nothing found
......@@ -4234,9 +4256,10 @@ QCString convertToHtml(const char *s)
*/
const char *getOverloadDocs()
{
return "This is an overloaded member function, "
"provided for convenience. It differs from the above "
"function only in what argument(s) it accepts.";
return theTranslator->trOverloadText();
//"This is an overloaded member function, "
// "provided for convenience. It differs from the above "
// "function only in what argument(s) it accepts.";
}
void addMembersToMemberGroup(MemberList *ml,
......@@ -5216,3 +5239,37 @@ QCString stripPath(const char *s)
}
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);
#define REL_PATH_TO_ROOT "../../"
void createSubDirs(QDir &d);
QCString stripPath(const char *s);
bool containsWord(const QCString &s,const QCString &word);
bool findAndRemoveWord(QCString &s,const QCString &word);
#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