From 42eb3f9c14016086a2d2b18951585816eaf7bcab Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Mon, 7 Mar 2005 21:07:13 +0000 Subject: Release-1.4.1-20050307 --- INSTALL | 4 +- README | 4 +- VERSION | 2 +- addon/doxywizard/doxywizard.cpp | 12 +- doc/language.doc | 66 +++++----- doc/maintainers.txt | 2 +- doc/translator.py | 35 ++++- doc/translator_report.txt | 242 ++++++++++++++++++++--------------- packages/rpm/doxygen.spec | 2 +- src/code.l | 24 ++-- src/commentcnv.l | 75 ++++++----- src/commentscan.l | 61 +++++++-- src/doxygen.cpp | 145 +++++---------------- src/htmlgen.cpp | 9 +- src/index.cpp | 77 ++++------- src/memberdef.cpp | 33 ++++- src/memberdef.h | 4 + src/pre.l | 11 +- src/scanner.l | 25 ++-- src/tagreader.cpp | 122 ++++++++++++++---- src/translator.h | 6 + src/translator_adapter.h | 12 +- src/translator_br.h | 2 +- src/translator_cn.h | 69 ++-------- src/translator_cz.h | 2 +- src/translator_de.h | 2 +- src/translator_en.h | 13 ++ src/translator_fr.h | 2 +- src/translator_hr.h | 47 +------ src/translator_hu.h | 2 +- src/translator_it.h | 2 +- src/translator_nl.h | 13 ++ src/translator_pl.h | 2 +- src/translator_ro.h | 276 +++++++++++++++++++++++++++++++++++----- src/translator_ru.h | 2 +- src/translator_se.h | 2 +- src/translator_sr.h | 2 +- src/translator_ua.h | 2 +- src/util.cpp | 255 +++++++++++++++++++++++-------------- src/util.h | 2 + 40 files changed, 1005 insertions(+), 665 deletions(-) diff --git a/INSTALL b/INSTALL index 3e3b9f0..31973d5 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ -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) diff --git a/README b/README index e6dbce8..d644a75 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -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) diff --git a/VERSION b/VERSION index 4b13151..d7b4e9a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.4.1-20050227 +1.4.1-20050307 diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp index 83ae3b6..2d3556b 100644 --- a/addon/doxywizard/doxywizard.cpp +++ b/addon/doxywizard/doxywizard.cpp @@ -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); } } diff --git a/doc/language.doc b/doc/language.doc index 8528efa..58b63a6 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -60,7 +60,7 @@ when the translator was updated. Brazilian Portuguese Fabio "FJTC" Jun Takada Chino jun-chino at uol dot com dot br - up-to-date + 1.4.1 Catalan @@ -72,7 +72,7 @@ when the translator was updated. Chinese Li Daobing
Wei Liu lidaobing at gmail dot com
liuwei at asiainfo dot com - up-to-date + 1.4.1 Chinese Traditional @@ -84,13 +84,13 @@ when the translator was updated. Croatian Boris Bralo boris.bralo at zg dot htnet dot hr - up-to-date + 1.4.1 Czech Petr Přikryl prikrylp at skil dot cz - up-to-date + 1.4.1 Danish @@ -120,13 +120,13 @@ when the translator was updated. French Xavier Outhier xouthier at yahoo dot fr - up-to-date + 1.4.1 German Jens Seidel jensseidel at users dot sf dot net - up-to-date + 1.4.1 Greek @@ -136,15 +136,15 @@ when the translator was updated. Hungarian - Földvári György
Ákos Kiss - foldvari lost at cyberspace
akiss at users dot sourceforge dot net - up-to-date + Ákos Kiss
Földvári György + akiss at users dot sourceforge dot net
foldvari lost at cyberspace + 1.4.1 Italian Alessandro Falappa
Ahmed Aldo Faisal alessandro at falappa dot net
aaf23 at cam dot ac dot uk - up-to-date + 1.4.1 Japanese @@ -162,7 +162,7 @@ when the translator was updated. Korean SooYoung Jung
Richard Kim jung5000 at gmail dot com
ryk at dspwiz dot com - up-to-date + 1.4.01 KoreanEn @@ -186,7 +186,7 @@ when the translator was updated. Polish Piotr Kaminski
Grzegorz Kowal Piotr.Kaminski at ctm dot gdynia dot pl
g_kowal at poczta dot onet dot pl - up-to-date + 1.4.1 Portuguese @@ -198,19 +198,19 @@ when the translator was updated. Romanian Alexandru Iosup aiosup at yahoo dot com - 1.2.16 + 1.4.1 Russian Alexandr Chelpanov cav at cryptopro dot ru - up-to-date + 1.4.1 Serbian Dejan Milosavljevic dmilos at email dot com - up-to-date + 1.4.1 Slovak @@ -234,13 +234,13 @@ when the translator was updated. Swedish Mikael Hallin mikaelhallin at yahoo dot se - up-to-date + 1.4.1 Ukrainian Olexij Tkatchenko olexij.tkatchenko at parcs dot de - up-to-date + 1.4.1 @@ -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 diff --git a/doc/maintainers.txt b/doc/maintainers.txt index b3bed25..e5274d3 100644 --- a/doc/maintainers.txt +++ b/doc/maintainers.txt @@ -54,8 +54,8 @@ TranslatorGreek Harry Kalogirou: harkal@rainbow.cs.unipi.gr TranslatorHungarian -Földvári György: foldvari lost@cyberspace Ákos Kiss: akiss@users.sourceforge.net +Földvári György: foldvari lost@cyberspace TranslatorItalian Alessandro Falappa: alessandro@falappa.net diff --git a/doc/translator.py b/doc/translator.py index a3f7c93..f7219f7 100644 --- a/doc/translator.py +++ b/doc/translator.py @@ -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() diff --git a/doc/translator_report.txt b/doc/translator_report.txt index 0832fc1..5e452b2 100644 --- a/doc/translator_report.txt +++ b/doc/translator_report.txt @@ -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() diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index db1c429..8ed850e 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,6 +1,6 @@ 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 diff --git a/src/code.l b/src/code.l index 3d17bd1..1b15170 100644 --- a/src/code.l +++ b/src/code.l @@ -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():""); + //printf("is found as a type %s\n",cd?cd->name().data():""); 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 { diff --git a/src/commentcnv.l b/src/commentcnv.l index cf38954..10973aa 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -57,6 +57,8 @@ static QCString g_fileName; static int g_lineNr; static int g_condCtx; static QStack 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); } "//##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); } "//"/.*\n { /* one line C++ comment */ @@ -291,16 +320,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) copyToOutput(yytext,yyleng); BEGIN(CComment); } -[\\@]"verbatim" { /* start of a verbatim block */ +[\\@]("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); } . { /* any other character */ copyToOutput(yytext,yyleng); } -[\\@]"endverbatim" { /* end of verbatim block */ +[\\@]("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); + } } [^@\\\n]* { /* any character not a backslash or new line */ copyToOutput(yytext,yyleng); @@ -311,25 +345,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) . { /* any other character */ copyToOutput(yytext,yyleng); } -[\\@]"~"[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); - } - } -[^*@\\\n]* { /* any character not a *, @, backslash or new line */ - } -\n { /* new line in verbatim block */ - copyToOutput(yytext,yyleng); - } -"*/" { /* end of comment block */ - copyToOutput(yytext,yyleng); - BEGIN(Scan); - } -. { /* any other character */ - } \\. { /* escaped character in string */ copyToOutput(yytext,yyleng); } @@ -411,14 +426,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ("\\\\"|"@@")[~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command copyToOutput(yytext,yyleng); } -[@\\]"~"[a-zA-Z]* { // language switch - QCString langId = &yytext[2]; - if (!langId.isEmpty() && - stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0) - { - BEGIN(SkipLang); - } - } [\\@]"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) diff --git a/src/commentscan.l b/src/commentscan.l index f25af0f..59b13ce 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -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 ). * words and whitespace and other characters (#,?!, etc). * grouping commands (e.g. @{ and @}) + * language switch (e.g. \~english or \~). */ {CMD}{CMD}[a-z_A-Z]+{B}* { // escaped command addOutput(yytext); } +{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command + addOutput(yytext); + } ("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!) addOutput(yytext); } @@ -757,6 +765,14 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ("\\\\"|"@@")"f"[$\[{] { // escaped formula command addOutput(yytext); } +{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); + } + } {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]); } -\n({B}*\n)+ { // at least one blank line +(\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}) {ID} { // first argument newXRefItemKey=yytext; setOutput(OutputXRef); - xrefItemKey==yytext; BEGIN(XRefItemParam2); } {LC} { // line continuation @@ -1274,7 +1289,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) /* ----- handle arguments of the preformatted block commands ------- */ -{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode")/{NW} { // possible ends +{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}) } . { // 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 ------- */ + +[\\@]"~"[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); + } + } +[^*@\\\n]* { /* any character not a *, @, backslash or new line */ + } +{DOCNL} { /* new line in verbatim block */ + if (*yytext=='\n') yyLineNr++; + } +. { /* any other character */ + } + + %% //---------------------------------------------------------------------------- diff --git a/src/doxygen.cpp b/src/doxygen.cpp index a245cf0..c2ed7c1 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -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():"",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("",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); diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index a9583e6..1bea909 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -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 << "
"; col=0; + // break; case '\r': break; case '<': t << "<"; col++; break; @@ -852,6 +855,8 @@ void HtmlGenerator::codify(const char *str) break; case '&': t << "&"; col++; break; + //case ' ': t << " "; col++; + // break; case '\\': if (*p=='<') { t << "<"; p++; } diff --git a/src/index.cpp b/src/index.cpp index b4f2d36..fefd232 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -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); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 10f8898..ef01fff 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -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 << " " << convertToXML(typeString()) << "" << endl; Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; + Doxygen::tagFile << " " << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "" << endl; Doxygen::tagFile << " " << convertToXML(anchor()) << "" << endl; Doxygen::tagFile << " " << convertToXML(argsString()) << "" << 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); + } +} + diff --git a/src/memberdef.h b/src/memberdef.h index e90a975..98be73c 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -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 diff --git a/src/pre.l b/src/pre.l index fdf569d..cb23bb8 100644 --- a/src/pre.l +++ b/src/pre.l @@ -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++; } -[\\@]"verbatim"{BN}+ { +[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ { outputArray(yytext,yyleng); + g_blockName=&yytext[1]; BEGIN(SkipVerbatim); } -[\\@]"endverbatim" { +[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */ outputArray(yytext,yyleng); - BEGIN(SkipCComment); + if (&yytext[4]==g_blockName) + { + BEGIN(SkipCComment); + } } [^*\x06\n\/]+ { outputArray(yytext,yyleng); diff --git a/src/scanner.l b/src/scanner.l index c06225a..1f8aa80 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -2121,7 +2121,12 @@ IDLATTR ("["[^\]]*"]"){BN}* ("//"([!/]?){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}* } "//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" { #ifdef COMMENTSCAN - REJECT; + handleGroupEndCommand(); #else if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty()) { @@ -3266,7 +3271,7 @@ IDLATTR ("["[^\]]*"]"){BN}* [{:;,] { 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}* "{" { 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; } diff --git a/src/tagreader.cpp b/src/tagreader.cpp index 368d799..9fd90d4 100644 --- a/src/tagreader.cpp +++ b/src/tagreader.cpp @@ -19,6 +19,8 @@ #include "tagreader.h" #include +#include + #include #include #include @@ -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 *bases; QList members; QList *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 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 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 &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 ); diff --git a/src/translator.h b/src/translator.h index 360d35b..831679b 100644 --- a/src/translator.h +++ b/src/translator.h @@ -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 diff --git a/src/translator_adapter.h b/src/translator_adapter.h index c32f6dc..fa6f8a2 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -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() diff --git a/src/translator_br.h b/src/translator_br.h index 073fe5d..807ed9d 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -34,7 +34,7 @@ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -class TranslatorBrazilian : public Translator +class TranslatorBrazilian : public TranslatorAdapter_1_4_1 { public: diff --git a/src/translator_cn.h b/src/translator_cn.h index 0f273bd..b78bc8b 100644 --- a/src/translator_cn.h +++ b/src/translator_cn.h @@ -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() { @@ -1232,20 +1194,6 @@ class TranslatorChinese : public Translator * 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. - */ virtual QCString trGlobal(bool /*first_capital*/, bool /*singular*/) { /* @@ -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 + diff --git a/src/translator_cz.h b/src/translator_cz.h index 5984e80..54436eb 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -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 diff --git a/src/translator_de.h b/src/translator_de.h index e704f53..e3335ab 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -102,7 +102,7 @@ #ifndef TRANSLATOR_DE_H #define TRANSLATOR_DE_H -class TranslatorGerman : public Translator +class TranslatorGerman : public TranslatorAdapter_1_4_1 { public: diff --git a/src/translator_en.h b/src/translator_en.h index 46b7793..ca1ff03 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -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 diff --git a/src/translator_fr.h b/src/translator_fr.h index 89fcb09..7c6c8ed 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -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: diff --git a/src/translator_hr.h b/src/translator_hr.h index 4876bc3..ef4fce6 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -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("Iskljuèivo za internu uporabu."); } - QCString trReimplementedForInternalReasons() - { return decode("Reimplementirano zbog internih razloga; " - "Nema utjecaja na API."); - } QCString trWarning() { return "Upozorenje"; } - QCString trBugsAndLimitations() - { return decode("Gre¹ke i ogranièenja"); } 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("Suèelja (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() { @@ -1000,17 +976,6 @@ class TranslatorCroatian : public Translator * 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. - */ virtual QCString trGlobal(bool first_capital, bool singular) { QCString result((first_capital ? "G" : "g")); diff --git a/src/translator_hu.h b/src/translator_hu.h index 921aeee..9f823b1 100644 --- a/src/translator_hu.h +++ b/src/translator_hu.h @@ -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) diff --git a/src/translator_it.h b/src/translator_it.h index dee5846..04cbc06 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -72,7 +72,7 @@ #ifndef TRANSLATOR_IT_H #define TRANSLATOR_IT_H -class TranslatorItalian : public Translator +class TranslatorItalian : public TranslatorAdapter_1_4_1 { public: diff --git a/src/translator_nl.h b/src/translator_nl.h index 2f2ddc9..3d637e2 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -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."; + } }; diff --git a/src/translator_pl.h b/src/translator_pl.h index bc7c57c..ac4b16d 100644 --- a/src/translator_pl.h +++ b/src/translator_pl.h @@ -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 */ diff --git a/src/translator_ro.h b/src/translator_ro.h index 2154ade..1ab2b7b 100644 --- a/src/translator_ro.h +++ b/src/translator_ro.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 1 document corespunzând cererii."; + } + else + { + return "Am gãsit $num 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 diff --git a/src/translator_ru.h b/src/translator_ru.h index 0f7b898..3736a93 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -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 diff --git a/src/translator_se.h b/src/translator_se.h index 0670e61..6cbd487 100644 --- a/src/translator_se.h +++ b/src/translator_se.h @@ -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: diff --git a/src/translator_sr.h b/src/translator_sr.h index c1469a0..ce14ae8 100644 --- a/src/translator_sr.h +++ b/src/translator_sr.h @@ -21,7 +21,7 @@ // translation by Dejan D. M. Milosavljevic ;; // // 10x 2 Ivana Miletic for gramatical consutation. -class TranslatorSerbian : public Translator +class TranslatorSerbian : public TranslatorAdapter_1_4_1 { private: QCString decode(const QCString& sInput) diff --git a/src/translator_ua.h b/src/translator_ua.h index fac3a10..132955c 100644 --- a/src/translator_ua.h +++ b/src/translator_ua.h @@ -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 diff --git a/src/util.cpp b/src/util.cpp index 36ae599..37da875 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -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():""); 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 (misLinkable()) + if (misLinkable()*/ ) { //printf("Class distance %d\n",m); mdist=m; cd=mcd; md=mmd; } - } + //} } } //printf(" >Succes=%d\n",mdistgetGroupDef(); - 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 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 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; +} + diff --git a/src/util.h b/src/util.h index f6d177e..21d630c 100644 --- a/src/util.h +++ b/src/util.h @@ -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 -- cgit v0.12