Commit 24327268 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.4.7-20060716

parent 9dbdf881
DOXYGEN Version 1.4.7
DOXYGEN Version 1.4.7-20060716
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (11 June 2006)
Dimitri van Heesch (16 July 2006)
DOXYGEN Version 1.4.7
DOXYGEN Version 1.4.7_20060716
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) (11 June 2006)
Dimitri van Heesch (dimitri@stack.nl) (16 July 2006)
......@@ -70,7 +70,7 @@ void setDotPath()
if (checkIfDotInstalled())
{
Config_getString("DOT_PATH")=DOT_PATH;
Config_getBool("HAVE_DOT")=TRUE;
//Config_getBool("HAVE_DOT")=TRUE;
}
}
......
......@@ -20,7 +20,7 @@ doxygen_version_minor=4
doxygen_version_revision=7
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO
doxygen_version_mmn=20060716
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......@@ -35,7 +35,7 @@ f_insttool=NO
f_english=NO
f_wizard=NO
f_thread=NO
f_langs=nl,se,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za
f_langs=nl,se,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za,ar,fa
while test -n "$1"; do
case $1 in
......@@ -587,7 +587,7 @@ fi
echo -n " Generating src/lang_cfg.h..."
echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>);
chomp @l;
@allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA"));
@allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA,AR,FA"));
foreach my $elem (@l){
$elem =~ tr/a-z/A-Z/;
$r=0;
......
......@@ -267,10 +267,10 @@ followed by the descriptions of the tags grouped by category.
documentation generated by doxygen is written. Doxygen will use this
information to generate all constant output in the proper language.
The default language is English, other supported languages are:
Brazilian, Catalan, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
German, Greek, Hungarian, Italian, Japanese, Korean, Lithuanian, Norwegian,
Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
Swedish, and Ukrainian.
Afrikaans, Arabic, Brazilian, Catalan, Chinese, Croatian, Czech, Danish, Dutch,
Finnish, French, German, Greek, Hungarian, Italian, Japanese, Korean,
Lithuanian, Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Serbian,
Slovak, Slovene, Spanish, Swedish, and Ukrainian.
\anchor cfg_use_windows_encoding
<dt>\c USE_WINDOWS_ENCODING <dd>
......
......@@ -23,13 +23,13 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile).
Currently (version 1.4.7), 31 languages
Currently (version 1.4.7), 33 languages
are supported (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian..
(+En), Lithuanian, Norwegian, Persian, Polish, Portuguese, Romanian,
Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian..
The table of information related to the supported languages follows.
It is sorted by language alphabetically. The <b>Status</b> column
......@@ -56,41 +56,47 @@ when the translator was updated.
<td>johan at zippysnoek dot com</td>
<td>1.4.6</td>
</tr>
<tr bgcolor="#ffffff">
<td>Arabic</td>
<td>Moaz Reyad</td>
<td><moazreyad at yahoo dot com></td>
<td>1.4.6</td>
</tr>
<tr bgcolor="#ffffff">
<td>Brazilian Portuguese</td>
<td>Fabio "FJTC" Jun Takada Chino</td>
<td>jun-chino at uol dot com dot br</td>
<td>1.4.6</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Catalan</td>
<td>Maximiliano Pin<br>Albert Mora</td>
<td>mcpin at emtesistemas dot com<br>amora at iua dot upf dot es</td>
<td>1.4.6</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Chinese</td>
<td>Li Daobing<br>Wei Liu</td>
<td>lidaobing at gmail dot com<br>liuwei at asiainfo dot com</td>
<td>1.4.1</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Chinese Traditional</td>
<td>Daniel YC Lin<br>Gary Lee</td>
<td>daniel at twpda dot com<br>garylee at ecosine dot com dot tw</td>
<td>dlin at taifex dot com dot tw<br>garywlee at gmail dot com</td>
<td>1.4.6</td>
</tr>
<tr bgcolor="#ffffff">
<td>Croatian</td>
<td>Boris Bralo</td>
<td>boris.bralo at zg dot htnet dot hr</td>
<td>1.4.6</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Czech</td>
<td>Petr P&#x0159;ikryl</td>
<td>prikrylp at skil dot cz</td>
<td>1.4.6</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Danish</td>
......@@ -126,7 +132,7 @@ when the translator was updated.
<td>German</td>
<td>Jens Seidel</td>
<td>jensseidel at users dot sf dot net</td>
<td>1.4.6</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Greek</td>
......@@ -150,7 +156,7 @@ when the translator was updated.
<td>Italian</td>
<td>Alessandro Falappa<br>Ahmed Aldo Faisal</td>
<td>alessandro at falappa dot net<br>aaf23 at cam dot ac dot uk</td>
<td>1.4.6</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Japanese</td>
......@@ -188,6 +194,12 @@ when the translator was updated.
<td>lejordet at gmail dot com</td>
<td>1.4.6</td>
</tr>
<tr bgcolor="#ffffff">
<td>Persian</td>
<td>Ali Nadalizadeh</td>
<td><nadalisoft at yahoo dot com></td>
<td>1.4.6</td>
</tr>
<tr bgcolor="#ffffff">
<td>Polish</td>
<td>Piotr Kaminski<br>Grzegorz Kowal</td>
......@@ -210,7 +222,7 @@ when the translator was updated.
<td>Russian</td>
<td>Alexandr Chelpanov</td>
<td>cav at cryptopro dot ru</td>
<td>1.4.6</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Serbian</td>
......@@ -265,20 +277,22 @@ when the translator was updated.
\hline
Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.4.6 \\
\hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & 1.4.6 \\
Arabic & Moaz Reyad & {\tt\tiny <moazreyad@yahoo.com>} & 1.4.6 \\
\hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\
\hline
Catalan & Maximiliano Pin & {\tt\tiny mcpin@emtesistemas.com} & 1.4.6 \\
Catalan & Maximiliano Pin & {\tt\tiny mcpin@emtesistemas.com} & up-to-date \\
~ & Albert Mora & {\tt\tiny amora@iua.upf.es} & ~ \\
\hline
Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & 1.4.1 \\
Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & up-to-date \\
~ & Wei Liu & {\tt\tiny liuwei@asiainfo.com} & ~ \\
\hline
Chinese Traditional & Daniel YC Lin & {\tt\tiny daniel@twpda.com} & 1.4.6 \\
~ & Gary Lee & {\tt\tiny garylee@ecosine.com.tw} & ~ \\
Chinese Traditional & Daniel YC Lin & {\tt\tiny dlin@taifex.com.tw} & 1.4.6 \\
~ & Gary Lee & {\tt\tiny garywlee@gmail.com} & ~ \\
\hline
Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & 1.4.6 \\
Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & up-to-date \\
\hline
Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & 1.4.6 \\
Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & up-to-date \\
\hline
Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.3.9 \\
\hline
......@@ -290,7 +304,7 @@ when the translator was updated.
\hline
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.4.6 \\
\hline
German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & 1.4.6 \\
German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & up-to-date \\
\hline
Greek & Harry Kalogirou & {\tt\tiny harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline
......@@ -299,7 +313,7 @@ when the translator was updated.
\hline
Indonesian & Hendy Irawan & {\tt\tiny ceefour@gauldong.net} & 1.4.6 \\
\hline
Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & 1.4.6 \\
Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & up-to-date \\
~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\
\hline
Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & 1.4.6 \\
......@@ -319,6 +333,8 @@ when the translator was updated.
\hline
Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.4.6 \\
\hline
Persian & Ali Nadalizadeh & {\tt\tiny <nadalisoft@yahoo.com>} & 1.4.6 \\
\hline
Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & 1.4.6 \\
~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\
\hline
......@@ -326,7 +342,7 @@ when the translator was updated.
\hline
Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.4.1 \\
\hline
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & 1.4.6 \\
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\
\hline
Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.4.1 \\
\hline
......
......@@ -12,6 +12,9 @@
TranslatorAfrikaans
Johan Prinsloo: johan@zippysnoek.com
TranslatorArabic
Moaz Reyad: <moazreyad@yahoo.com>
TranslatorBrazilian
Fabio "FJTC" Jun Takada Chino: jun-chino@uol.com.br
......@@ -24,8 +27,8 @@ Li Daobing: lidaobing@gmail.com
Wei Liu: liuwei@asiainfo.com
TranslatorChinesetraditional
Daniel YC Lin: daniel@twpda.com
Gary Lee: garylee@ecosine.com.tw
Daniel YC Lin: dlin@taifex.com.tw
Gary Lee: garywlee@gmail.com
TranslatorCroatian
Boris Bralo: boris.bralo@zg.htnet.hr
......@@ -82,6 +85,9 @@ Aidas Berukstis: aidasber@takas.lt
TranslatorNorwegian
Lars Erik Jordet: lejordet@gmail.com
TranslatorPersian
Ali Nadalizadeh: <nadalisoft@yahoo.com>
TranslatorPolish
Piotr Kaminski: Piotr.Kaminski@ctm.gdynia.pl
Grzegorz Kowal: g_kowal@poczta.onet.pl
......
(1.4.7)
Doxygen supports the following 31 languages (sorted alphabetically):
Doxygen supports the following 33 languages (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Afrikaans, Arabic, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
(+En), Lithuanian, Norwegian, Persian, Polish, Portuguese, Romanian,
Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
Of them, 2 translators are up-to-date, 29 translators are based on
Of them, 10 translators are up-to-date, 23 translators are based on
some adapter class, and 2 are English based.
----------------------------------------------------------------------
......@@ -17,8 +17,16 @@ alphabetically). This means that they derive from the Translator class
and they implement all 194 of the required methods. Anyway, there
still may be some details listed even for them:
TranslatorBrazilian -- Remove the obsolete methods (never used).
TranslatorCatalan
TranslatorChinese
TranslatorCroatian
TranslatorCzech
TranslatorDutch -- Remove the obsolete methods (never used).
TranslatorEnglish -- Remove the obsolete methods (never used).
TranslatorGerman
TranslatorItalian -- Change the base class to Translator.
TranslatorRussian
----------------------------------------------------------------------
The following translator classes need some maintenance (the most
......@@ -29,27 +37,21 @@ must be implemented to become up-to-date:
TranslatorSwedish 1.4.6 2 methods to implement
TranslatorSpanish 1.4.6 1 method to implement
TranslatorSlovene 1.4.6 2 methods to implement
TranslatorRussian 1.4.6 2 methods to implement
TranslatorPolish 1.4.6 1 method to implement
TranslatorPersian 1.4.6 1 method to implement
TranslatorNorwegian 1.4.6 1 method to implement
TranslatorLithuanian 1.4.6 2 methods to implement
TranslatorKorean 1.4.6 2 methods to implement
TranslatorJapanese 1.4.6 1 method to implement
TranslatorItalian 1.4.6 1 method to implement
TranslatorIndonesian 1.4.6 1 method to implement
TranslatorHungarian 1.4.6 2 methods to implement
TranslatorGerman 1.4.6 2 methods to implement
TranslatorFrench 1.4.6 1 method to implement
TranslatorCzech 1.4.6 1 method to implement
TranslatorCroatian 1.4.6 2 methods to implement
TranslatorChinesetraditional 1.4.6 1 method to implement
TranslatorCatalan 1.4.6 2 methods to implement
TranslatorBrazilian 1.4.6 1 method to implement
TranslatorArabic 1.4.6 1 method to implement
TranslatorAfrikaans 1.4.6 2 methods to implement
TranslatorUkrainian 1.4.1 2 methods to implement
TranslatorSerbian 1.4.1 2 methods to implement
TranslatorRomanian 1.4.1 2 methods to implement
TranslatorChinese 1.4.1 3 methods to implement
TranslatorDanish 1.3.9 8 methods to implement
TranslatorPortuguese 1.3.3 13 methods to implement
TranslatorSlovak 1.2.18 22 methods to implement
......@@ -81,8 +83,8 @@ TranslatorAfrikaans (TranslatorAdapter_1_4_6) 2 methods to implement
virtual QCString trEnumerationValueDocumentation()
TranslatorBrazilian (TranslatorAdapter_1_4_6) 1 method to implement
-------------------
TranslatorArabic (TranslatorAdapter_1_4_6) 1 method to implement
----------------
Implements 193 of the required methods.
......@@ -93,7 +95,7 @@ TranslatorBrazilian (TranslatorAdapter_1_4_6) 1 method to implement
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
virtual QCString trField(bool first_capital, bool singular)
virtual QCString trField(bool/*first_capital*/, bool singular)
virtual QCString trPackageDocumentation()
virtual QCString trSources()
virtual QCString trReimplementedForInternalReasons()
......@@ -103,27 +105,22 @@ TranslatorBrazilian (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable()
TranslatorCatalan (TranslatorAdapter_1_4_6) 2 methods to implement
-----------------
Implements 192 of the required methods.
Missing methods (should be implemented):
virtual QCString trCallerGraph()
virtual QCString trEnumerationValueDocumentation()
TranslatorChinese (TranslatorAdapter_1_4_1) 3 methods to implement
-----------------
TranslatorBrazilian (Translator)
-------------------
Implements 191 of the required methods.
Implements 194 of the required methods.
Missing methods (should be implemented):
Obsolete methods (should be removed, never used):
virtual QCString trOverloadText()
virtual QCString trCallerGraph()
virtual QCString trEnumerationValueDocumentation()
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 trNoDescriptionAvailable()
TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement
......@@ -148,27 +145,6 @@ TranslatorChinesetraditional (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable()
TranslatorCroatian (TranslatorAdapter_1_4_6) 2 methods to implement
------------------
Implements 192 of the required methods.
Missing methods (should be implemented):
virtual QCString trCallerGraph()
virtual QCString trEnumerationValueDocumentation()
TranslatorCzech (TranslatorAdapter_1_4_6) 1 method to implement
---------------
Implements 193 of the required methods.
Missing methods (should be implemented):
virtual QCString trEnumerationValueDocumentation()
TranslatorDanish (TranslatorAdapter_1_3_9) 8 methods to implement
----------------
......@@ -372,17 +348,6 @@ TranslatorFrench (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable()
TranslatorGerman (TranslatorAdapter_1_4_6) 2 methods to implement
----------------
Implements 192 of the required methods.
Missing methods (should be implemented):
virtual QCString trCallerGraph()
virtual QCString trEnumerationValueDocumentation()
TranslatorGreek (TranslatorAdapter_1_2_11) 27 methods to implement
---------------
......@@ -464,14 +429,10 @@ TranslatorIndonesian (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable()
TranslatorItalian (TranslatorAdapter_1_4_6) 1 method to implement
TranslatorItalian (TranslatorAdapter_1_4_6)
-----------------
Implements 193 of the required methods.
Missing methods (should be implemented):
virtual QCString trEnumerationValueDocumentation()
Implements 194 of the required methods.
TranslatorJapanese (TranslatorAdapter_1_4_6) 1 method to implement
......@@ -568,6 +529,28 @@ TranslatorNorwegian (TranslatorAdapter_1_4_6) 1 method to implement
virtual QCString trNoDescriptionAvailable()
TranslatorPersian (TranslatorAdapter_1_4_6) 1 method to implement
-----------------
Implements 193 of the required methods.
Missing methods (should be implemented):
virtual QCString trCallerGraph()
Obsolete methods (should be removed, never used):
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 trNoDescriptionAvailable()
TranslatorPolish (TranslatorAdapter_1_4_6) 1 method to implement
----------------
......@@ -647,17 +630,6 @@ TranslatorRomanian (TranslatorAdapter_1_4_1) 2 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorRussian (TranslatorAdapter_1_4_6) 2 methods to implement
-----------------
Implements 192 of the required methods.
Missing methods (should be implemented):
virtual QCString trCallerGraph()
virtual QCString trEnumerationValueDocumentation()
TranslatorSerbian (TranslatorAdapter_1_4_1) 2 methods to implement
-----------------
......
......@@ -94,6 +94,9 @@ public:
int handle() const;
int64 pos() const;
bool seek(int64 pos);
protected:
QString fn;
FILE *fh;
......
......@@ -632,3 +632,24 @@ void QFile::close()
return;
}
int64 QFile::pos() const
{
if (isOpen())
{
// TODO: support 64 bit size
return ftell( fh );
}
return -1;
}
bool QFile::seek( int64 pos )
{
if (isOpen())
{
// TODO: support 64 bit size
return fseek( fh, pos, SEEK_SET )!=-1;
}
return FALSE;
}
......@@ -591,3 +591,26 @@ void QFile::close()
return;
}
int64 QFile::pos() const
{
if (isOpen())
{
// TODO: support 64 bit size
return ftell( fh );
}
return -1;
}
bool QFile::seek( int64 pos )
{
if (isOpen())
{
// TODO: support 64 bit size
return fseek( fh, pos, SEEK_SET )!=-1;
}
return FALSE;
}
......@@ -336,6 +336,13 @@ typedef unsigned long ulong;
typedef char *pchar;
typedef uchar *puchar;
typedef const char *pcchar;
#if defined(_OS_WIN32_) && !defined(_CC_GNU_)
typedef __int64 int64;
typedef unsigned __int64 uint64;
#else
typedef long long int64;
typedef unsigned long long uint64;
#endif
//
......
This diff is collapsed.
......@@ -227,46 +227,46 @@ class ClassDef : public Definition
QCString className() const;
/* member lists by protection */
MemberList pubMethods;
MemberList proMethods;
MemberList pacMethods;
MemberList priMethods;
MemberList pubStaticMethods;
MemberList proStaticMethods;
MemberList pacStaticMethods;
MemberList priStaticMethods;
MemberList pubSlots;
MemberList proSlots;
MemberList priSlots;
MemberList pubAttribs;
MemberList proAttribs;
MemberList pacAttribs;
MemberList priAttribs;
MemberList pubStaticAttribs;
MemberList proStaticAttribs;
MemberList pacStaticAttribs;
MemberList priStaticAttribs;
MemberList pubTypes;
MemberList proTypes;
MemberList pacTypes;
MemberList priTypes;
MemberList related;
MemberList signals;
MemberList friends;
MemberList dcopMethods;
MemberList properties;
MemberList events;
MemberList *pubMethods;
MemberList *proMethods;
MemberList *pacMethods;
MemberList *priMethods;
MemberList *pubStaticMethods;
MemberList *proStaticMethods;
MemberList *pacStaticMethods;
MemberList *priStaticMethods;
MemberList *pubSlots;
MemberList *proSlots;
MemberList *priSlots;
MemberList *pubAttribs;
MemberList *proAttribs;
MemberList *pacAttribs;
MemberList *priAttribs;
MemberList *pubStaticAttribs;
MemberList *proStaticAttribs;
MemberList *pacStaticAttribs;
MemberList *priStaticAttribs;
MemberList *pubTypes;
MemberList *proTypes;
MemberList *pacTypes;
MemberList *priTypes;
MemberList *related;
MemberList *signals;
MemberList *friends;
MemberList *dcopMethods;
MemberList *properties;
MemberList *events;
/* member list by types */
MemberList constructors;
MemberList typedefMembers;
MemberList enumMembers;
MemberList enumValMembers;
MemberList functionMembers;
MemberList relatedMembers;
MemberList variableMembers;
MemberList propertyMembers;
MemberList eventMembers;
MemberList *constructors;
MemberList *typedefMembers;
MemberList *enumMembers;
MemberList *enumValMembers;
MemberList *functionMembers;
MemberList *relatedMembers;
MemberList *variableMembers;
MemberList *propertyMembers;
MemberList *eventMembers;
/* user defined member groups */
MemberGroupSDict *memberGroupSDict;
......@@ -354,6 +354,7 @@ class ClassDef : public Definition
private:
void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
QCString getMemberListFileName() const;
/*! file name that forms the base for the output file containing the
* class documentation. For compatibility with Qt (e.g. links via tag
......@@ -369,7 +370,7 @@ class ClassDef : public Definition
/*! file name that forms the base for the "list of members" for this
* class.
*/
QCString m_memListFileName;
//QCString m_memListFileName;
/*! Bare name of the class without any scoping prefixes
* (like for nested classes and classes inside namespaces)
......@@ -414,12 +415,6 @@ class ClassDef : public Definition
*/
Protection m_prot;
/*! Does this class group its user-grouped members
* as a sub-section of the normal (public/protected/..)
* groups?
*/
bool m_subGrouping;
/*! The inner classes contained in this class. Will be 0 if there are
* no inner classes.
*/
......@@ -447,6 +442,14 @@ class ClassDef : public Definition
/*! The class this class is an instance of. */
ClassDef *m_templateMaster;
/*! class name with outer class scope, but without namespace scope. */
QCString m_className;
/*! If this class is a Objective-C category, then this points to the
* class which is extended.
*/
ClassDef *m_categoryOf;
/*! Indicated whether this class exists because it is used by
* some other class only (TRUE) or if some class inherits from
* it (FALSE). This is need to remove used-only classes from
......@@ -469,15 +472,14 @@ class ClassDef : public Definition
/*! TRUE if the class is defined in a source file rather than a header file. */
bool m_isLocal;
/*! class name with outer class scope, but without namespace scope. */
QCString m_className;
bool m_isTemplArg;
/*! If this class is a Objective-C category, then this points to the
* class which is extended.
/*! Does this class group its user-grouped members
* as a sub-section of the normal (public/protected/..)
* groups?
*/
ClassDef *m_categoryOf;
bool m_subGrouping;
bool m_isTemplArg;
};
/*! \brief Class that contains information about a usage relation.
......
......@@ -132,8 +132,8 @@ CommandMap htmlTagMap[] =
{ "ol", HTML_OL },
{ "ul", HTML_UL },
{ "li", HTML_LI },
{ "tt", HTML_CODE },
{ "kbd", HTML_CODE },
{ "tt", XML_C /*HTML_CODE*/ },
{ "kbd", XML_C /*HTML_CODE*/ },
{ "em", HTML_EMPHASIS },
{ "hr", HTML_HR },
{ "dl", HTML_DL },
......
......@@ -1076,13 +1076,16 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
//printf("Found result!\n");
return;
}
BaseClassListIterator bcli(*vcd->baseClasses());
for ( ; bcli.current() ; ++bcli)
if (vcd->baseClasses())
{
if (getLink(bcli.current()->classDef->name(),memName,ol))
BaseClassListIterator bcli(*vcd->baseClasses());
for ( ; bcli.current() ; ++bcli)
{
//printf("Found result!\n");
return;
if (getLink(bcli.current()->classDef->name(),memName,ol))
{
//printf("Found result!\n");
return;
}
}
}
}
......@@ -1176,12 +1179,15 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
if (!locScope.isEmpty() && (ccd=g_codeClassSDict[locScope]))
{
//printf("using classScope %s\n",g_classScope.data());
BaseClassListIterator bcli(*ccd->baseClasses());
for ( ; bcli.current() ; ++bcli)
if (ccd->baseClasses())
{
if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
BaseClassListIterator bcli(*ccd->baseClasses());
for ( ; bcli.current() ; ++bcli)
{
return;
if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
{
return;
}
}
}
}
......
......@@ -370,7 +370,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
BEGIN(g_lastCommentContext);
}
}
<VerbatimCode>^"//"[\!\/]? { /* skip leading comments */
<VerbatimCode>^[ \t]*"//"[\!\/]? { /* skip leading comments */
if (!g_inSpecialComment)
{
copyToOutput(yytext,yyleng);
......
......@@ -2326,10 +2326,11 @@ void groupLeaveCompound(const char *,int,const char *)
void openGroup(Entry *e,const char *,int)
{
//printf("==> openGroup(name=%s,sec=%x)\n",e->name.data(),e->section);
if (e->section==Entry::GROUPDOC_SEC) // auto group
{
g_autoGroupStack.push(new Grouping(e->name,e->groupingPri()));
printf("==> openGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
e->name.data(),e->section,g_autoGroupStack.count());
}
else // start of a member group
{
......@@ -2346,18 +2347,13 @@ void openGroup(Entry *e,const char *,int)
g_memberGroupRelates = e->relates;
e->mGrpId = g_memberGroupId;
}
//else
//{
// warn(fileName,line,"Warning: member groups cannot be nested. Ending current group!\n");
// closeGroup(e,fileName,line);
//}
}
}
void closeGroup(Entry *e,const char *fileName,int)
{
//printf("==> closeGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
// e->name.data(),e->section,g_autoGroupStack.count());
printf("==> closeGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
e->name.data(),e->section,g_autoGroupStack.count());
if (g_memberGroupId!=DOX_NOGROUP) // end of member group
{
MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId);
......@@ -2376,6 +2372,7 @@ void closeGroup(Entry *e,const char *fileName,int)
{
Grouping *grp = g_autoGroupStack.pop();
e->groups->removeLast();
printf("Removing %s\n",grp->groupname.data());
delete grp;
initGroupInfo(e);
}
......@@ -2389,7 +2386,9 @@ void initGroupInfo(Entry *e)
e->relates = g_memberGroupRelates;
if (!g_autoGroupStack.isEmpty())
{
//printf("Appending group %s to %s\n",g_autoGroupStack.top()->groupname.data(),e->name.data());
printf("Appending group %s to %s: count=%d entry=%p\n",
g_autoGroupStack.top()->groupname.data(),
e->name.data(),e->groups->count(),e);
e->groups->append(new Grouping(*g_autoGroupStack.top()));
}
}
......
......@@ -1145,7 +1145,7 @@ void Config::check()
#undef PUTENV
#undef SEP
#if defined(_WIN32) && !defined(__GNUC__) && (__BORLANDC__ < 0x0550)
#if defined(_WIN32) && (__BORLANDC__ < 0x0550)
#define PUTENV _putenv
#define SEP ";"
#else
......@@ -1260,13 +1260,19 @@ void Config::create()
"documentation generated by doxygen is written. Doxygen will use this \n"
"information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n"
"Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, \n"
"Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, \n"
"Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, \n"
"Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, \n"
"Swedish, and Ukrainian.\n",
"Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n"
"Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, \n"
"Italian, Japanese, Japanese-en (Japanese with English messages), Korean, \n"
"Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, \n"
"Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.\n",
"English"
);
#ifdef LANG_ZA
ce->addValue("Afrikaans");
#endif
#ifdef LANG_AR
ce->addValue("Arabic");
#endif
#ifdef LANG_BR
ce->addValue("Brazilian");
#endif
......@@ -1318,9 +1324,15 @@ void Config::create()
ce->addValue("Korean");
ce->addValue("Korean-en");
#endif
#ifdef LANG_LI
ce->addValue("Lithuanian");
#endif
#ifdef LANG_NO
ce->addValue("Norwegian");
#endif
#ifdef LANG_FA
ce->addValue("Persian");
#endif
#ifdef LANG_PL
ce->addValue("Polish");
#endif
......
......@@ -313,7 +313,7 @@ void generateDEFClassSection(ClassDef *cd,
MemberList *ml,
const char *kind)
{
if (ml->count()>0)
if (cd && ml->count()>0)
{
t << " cp-section = {" << endl;
t << " sec-kind = '" << kind << "';" << endl;
......@@ -352,7 +352,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
t << " cp-id = '" << cd->getOutputFileBase() << "';" << endl;
t << " cp-name = '" << cd->name() << "';" << endl;
if (cd->baseClasses()->count()>0)
if (cd->baseClasses())
{
BaseClassListIterator bcli(*cd->baseClasses());
BaseClassDef *bcd;
......@@ -380,7 +380,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
}
}
if (cd->subClasses()->count()>0)
if (cd->subClasses())
{
BaseClassListIterator bcli(*cd->subClasses());
BaseClassDef *bcd;
......@@ -409,39 +409,53 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
}
int numMembers =
cd->pubTypes.count()+cd->pubMethods.count()+cd->pubAttribs.count()+
cd->pubSlots.count()+cd->signals.count()+cd->dcopMethods.count()+
cd->pubStaticMethods.count()+
cd->pubStaticAttribs.count()+cd->proTypes.count()+cd->proMethods.count()+
cd->proAttribs.count()+cd->proSlots.count()+cd->proStaticMethods.count()+
cd->proStaticAttribs.count()+cd->priTypes.count()+cd->priMethods.count()+
cd->priAttribs.count()+cd->priSlots.count()+cd->priStaticMethods.count()+
cd->priStaticAttribs.count()+cd->friends.count()+cd->related.count();
(cd->pubTypes ? cd->pubTypes->count() : 0)+
(cd->pubMethods ? cd->pubMethods->count() : 0)+
(cd->pubAttribs ? cd->pubAttribs->count() : 0)+
(cd->pubSlots ? cd->pubSlots->count() : 0)+
(cd->signals ? cd->signals->count() : 0)+
(cd->dcopMethods ? cd->dcopMethods->count() : 0)+
(cd->pubStaticMethods ? cd->pubStaticMethods->count() : 0)+
(cd->pubStaticAttribs ? cd->pubStaticAttribs->count() : 0)+
(cd->proTypes ? cd->proTypes->count() : 0)+
(cd->proMethods ? cd->proMethods->count() : 0)+
(cd->proAttribs ? cd->proAttribs->count() : 0)+
(cd->proSlots ? cd->proSlots->count() : 0)+
(cd->proStaticMethods ? cd->proStaticMethods->count() : 0)+
(cd->proStaticAttribs ? cd->proStaticAttribs->count() : 0)+
(cd->priTypes ? cd->priTypes->count() : 0)+
(cd->priMethods ? cd->priMethods->count() : 0)+
(cd->priAttribs ? cd->priAttribs->count() : 0)+
(cd->priSlots ? cd->priSlots->count() : 0)+
(cd->priStaticMethods ? cd->priStaticMethods->count() : 0)+
(cd->priStaticAttribs ? cd->priStaticAttribs->count() : 0)+
(cd->friends ? cd->friends->count() : 0)+
(cd->related ? cd->related->count() : 0);
if (numMembers>0)
{
generateDEFClassSection(cd,t,&cd->pubTypes,"public-type");
generateDEFClassSection(cd,t,&cd->pubMethods,"public-func");
generateDEFClassSection(cd,t,&cd->pubAttribs,"public-attrib");
generateDEFClassSection(cd,t,&cd->pubSlots,"public-slot");
generateDEFClassSection(cd,t,&cd->signals,"signal");
generateDEFClassSection(cd,t,&cd->dcopMethods,"dcop-func");
generateDEFClassSection(cd,t,&cd->properties,"property");
generateDEFClassSection(cd,t,&cd->pubStaticMethods,"public-static-func");
generateDEFClassSection(cd,t,&cd->pubStaticAttribs,"public-static-attrib");
generateDEFClassSection(cd,t,&cd->proTypes,"protected-type");
generateDEFClassSection(cd,t,&cd->proMethods,"protected-func");
generateDEFClassSection(cd,t,&cd->proAttribs,"protected-attrib");
generateDEFClassSection(cd,t,&cd->proSlots,"protected-slot");
generateDEFClassSection(cd,t,&cd->proStaticMethods,"protected-static-func");
generateDEFClassSection(cd,t,&cd->proStaticAttribs,"protected-static-attrib");
generateDEFClassSection(cd,t,&cd->priTypes,"private-type");
generateDEFClassSection(cd,t,&cd->priMethods,"private-func");
generateDEFClassSection(cd,t,&cd->priAttribs,"private-attrib");
generateDEFClassSection(cd,t,&cd->priSlots,"private-slot");
generateDEFClassSection(cd,t,&cd->priStaticMethods,"private-static-func");
generateDEFClassSection(cd,t,&cd->priStaticAttribs,"private-static-attrib");
generateDEFClassSection(cd,t,&cd->friends,"signal");
generateDEFClassSection(cd,t,&cd->related,"related");
generateDEFClassSection(cd,t,cd->pubTypes,"public-type");
generateDEFClassSection(cd,t,cd->pubMethods,"public-func");
generateDEFClassSection(cd,t,cd->pubAttribs,"public-attrib");
generateDEFClassSection(cd,t,cd->pubSlots,"public-slot");
generateDEFClassSection(cd,t,cd->signals,"signal");
generateDEFClassSection(cd,t,cd->dcopMethods,"dcop-func");
generateDEFClassSection(cd,t,cd->properties,"property");
generateDEFClassSection(cd,t,cd->pubStaticMethods,"public-static-func");
generateDEFClassSection(cd,t,cd->pubStaticAttribs,"public-static-attrib");
generateDEFClassSection(cd,t,cd->proTypes,"protected-type");
generateDEFClassSection(cd,t,cd->proMethods,"protected-func");
generateDEFClassSection(cd,t,cd->proAttribs,"protected-attrib");
generateDEFClassSection(cd,t,cd->proSlots,"protected-slot");
generateDEFClassSection(cd,t,cd->proStaticMethods,"protected-static-func");
generateDEFClassSection(cd,t,cd->proStaticAttribs,"protected-static-attrib");
generateDEFClassSection(cd,t,cd->priTypes,"private-type");
generateDEFClassSection(cd,t,cd->priMethods,"private-func");
generateDEFClassSection(cd,t,cd->priAttribs,"private-attrib");
generateDEFClassSection(cd,t,cd->priSlots,"private-slot");
generateDEFClassSection(cd,t,cd->priStaticMethods,"private-static-func");
generateDEFClassSection(cd,t,cd->priStaticAttribs,"private-static-attrib");
generateDEFClassSection(cd,t,cd->friends,"signal");
generateDEFClassSection(cd,t,cd->related,"related");
}
t << " cp-filename = '" << cd->getDefFileName() << "';" << endl;
......@@ -525,12 +539,12 @@ void generateDEFForFile(FileDef *fd,QTextStream &t)
writeDEFString(t,fd->name());
t << ';' << endl;
generateDEFSection(fd,t,&fd->decDefineMembers,"define");
generateDEFSection(fd,t,&fd->decProtoMembers,"prototype");
generateDEFSection(fd,t,&fd->decTypedefMembers,"typedef");
generateDEFSection(fd,t,&fd->decEnumMembers,"enum");
generateDEFSection(fd,t,&fd->decFuncMembers,"func");
generateDEFSection(fd,t,&fd->decVarMembers,"var");
generateDEFSection(fd,t,fd->decDefineMembers,"define");
generateDEFSection(fd,t,fd->decProtoMembers,"prototype");
generateDEFSection(fd,t,fd->decTypedefMembers,"typedef");
generateDEFSection(fd,t,fd->decEnumMembers,"enum");
generateDEFSection(fd,t,fd->decFuncMembers,"func");
generateDEFSection(fd,t,fd->decVarMembers,"var");
t << " file-full-name = '" << fd->getDefFileName() << "';" << endl;
t << " file-first-line = '" << fd->getDefLine() << "';" << endl;
......
......@@ -100,24 +100,33 @@ Definition::Definition(const char *df,int dl,
m_localName=name;
}
//printf("m_localName=%s\n",m_localName.data());
m_brief=b;
m_doc=d;
m_sectionDict=0,
m_startBodyLine=m_endBodyLine=-1,
m_bodyDef=0;
if (b)
{
m_brief = new DocInfo;
m_brief->doc = b;
}
else
{
m_brief = 0;
}
if (d)
{
m_details = new DocInfo;
m_details->doc = d;
}
else
{
m_details = 0;
}
m_body = 0;
m_sourceRefByDict=0;
m_sourceRefsDict=0;
m_todoId=0;
m_testId=0;
m_bugId=0;
m_deprecatedId=0;
m_sectionDict=0,
m_outerScope=Doxygen::globalScope;
m_partOfGroups=0;
m_xrefListItems=0;
m_briefLine=1;
m_briefFile=(QCString)"<"+name+">";
m_docLine=1;
m_docFile=(QCString)"<"+name+">";
m_isSymbol = isSymbol;
m_hidden = FALSE;
if (m_isSymbol) addToMap(name,this);
......@@ -131,6 +140,9 @@ Definition::~Definition()
delete m_sourceRefsDict;
delete m_partOfGroups;
delete m_xrefListItems;
delete m_brief;
delete m_details;
delete m_body;
}
void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
......@@ -219,9 +231,13 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine,
doc=d;
}
//printf("setting docs for %s: `%s'\n",name().data(),m_doc.data());
m_doc=doc;
m_docFile = docFile;
m_docLine = docLine;
if (m_details==0)
{
m_details = new DocInfo;
}
m_details->doc = doc;
m_details->file = docFile;
m_details->line = docLine;
}
#define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase)
......@@ -235,20 +251,24 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri
outputLanguage!="Korean";
//fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
m_brief=QCString(b).stripWhiteSpace();
int bl=m_brief.length();
if (m_brief==0)
{
m_brief = new DocInfo;
}
m_brief->doc=QCString(b).stripWhiteSpace();
int bl=m_brief->doc.length();
if (bl>0 && needsDot) // add punctuation if needed
{
switch(m_brief.at(bl-1))
switch(m_brief->doc.at(bl-1))
{
case '.': case '!': case '?': break;
default:
if (uni_isupper(m_brief.at(0))) m_brief+='.';
if (uni_isupper(m_brief->doc.at(0))) m_brief->doc+='.';
break;
}
}
m_briefFile = briefFile;
m_briefLine = briefLine;
m_brief->file = briefFile;
m_brief->line = briefLine;
}
/*! Reads a fragment of code from file \a fileName starting at
......@@ -373,7 +393,8 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
ol.pushGeneratorState();
//printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
if (Config_getBool("SOURCE_BROWSER") && m_startBodyLine!=-1 && m_bodyDef)
if (Config_getBool("SOURCE_BROWSER") &&
m_body && m_body->startLine!=-1 && m_body->fileDef)
{
QCString refText = theTranslator->trDefinedAtLineInSourceFile();
int lineMarkerPos = refText.find("@0");
......@@ -381,8 +402,8 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
{
QCString lineStr,anchorStr;
lineStr.sprintf("%d",m_startBodyLine);
anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_startBodyLine);
lineStr.sprintf("%d",m_body->startLine);
anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_body->startLine);
ol.newParagraph();
if (lineMarkerPos<fileMarkerPos) // line marker before file marker
{
......@@ -390,7 +411,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.parseText(refText.left(lineMarkerPos));
ol.disableAllBut(OutputGenerator::Html);
// write line link (HTML only)
ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(),
anchorStr,lineStr);
ol.enableAll();
ol.disable(OutputGenerator::Html);
......@@ -404,12 +425,12 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.disableAllBut(OutputGenerator::Html);
// write file link (HTML only)
ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
0,m_bodyDef->name());
ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(),
0,m_body->fileDef->name());
ol.enableAll();
ol.disable(OutputGenerator::Html);
// write normal text (Latex/Man only)
ol.docify(m_bodyDef->name());
ol.docify(m_body->fileDef->name());
ol.enableAll();
// write text right from file marker
......@@ -422,12 +443,12 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.parseText(refText.left(fileMarkerPos));
ol.disableAllBut(OutputGenerator::Html);
// write file link (HTML only)
ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
0,m_bodyDef->name());
ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(),
0,m_body->fileDef->name());
ol.enableAll();
ol.disable(OutputGenerator::Html);
// write normal text (Latex/Man only)
ol.docify(m_bodyDef->name());
ol.docify(m_body->fileDef->name());
ol.enableAll();
// write text between markers
......@@ -436,7 +457,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.disableAllBut(OutputGenerator::Html);
// write line link (HTML only)
ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(),
anchorStr,lineStr);
ol.enableAll();
ol.disable(OutputGenerator::Html);
......@@ -457,18 +478,33 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
ol.popGeneratorState();
}
void Definition::setBodySegment(int bls,int ble)
{
//printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
if (m_body==0) m_body = new BodyInfo;
m_body->startLine=bls;
m_body->endLine=ble;
}
void Definition::setBodyDef(FileDef *fd)
{
if (m_body==0) m_body = new BodyInfo;
m_body->fileDef=fd;
}
/*! Write code of this definition into the documentation */
void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
{
ol.pushGeneratorState();
//printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(),
// m_startBodyLine,m_endBodyLine,m_bodyDef);
if (Config_getBool("INLINE_SOURCES") && m_startBodyLine!=-1 &&
m_endBodyLine>=m_startBodyLine && m_bodyDef)
if (Config_getBool("INLINE_SOURCES") &&
m_body && m_body->startLine!=-1 &&
m_body->endLine>=m_body->startLine && m_body->fileDef)
{
QCString codeFragment;
int actualStart=m_startBodyLine,actualEnd=m_endBodyLine;
if (readCodeFragment(m_bodyDef->absFilePath(),
int actualStart=m_body->startLine,actualEnd=m_body->endLine;
if (readCodeFragment(m_body->fileDef->absFilePath(),
actualStart,actualEnd,codeFragment)
)
{
......@@ -478,16 +514,16 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
MemberDef *thisMd = 0;
if (definitionType()==TypeMember) thisMd = (MemberDef *)this;
ol.startCodeFragment();
pIntf->parseCode(ol, // codeOutIntf
scopeName, // scope
codeFragment, // input
FALSE, // isExample
0, // exampleName
m_bodyDef, // fileDef
actualStart, // startLine
actualEnd, // endLine
TRUE, // inlineFragment
thisMd // memberDef
pIntf->parseCode(ol, // codeOutIntf
scopeName, // scope
codeFragment, // input
FALSE, // isExample
0, // exampleName
m_body->fileDef, // fileDef
actualStart, // startLine
actualEnd, // endLine
TRUE, // inlineFragment
thisMd // memberDef
);
ol.endCodeFragment();
ol.newParagraph();
......@@ -611,18 +647,19 @@ bool Definition::hasDocumentation() const
static bool extractAll = Config_getBool("EXTRACT_ALL");
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
bool hasDocs =
!m_doc.isEmpty() || // has detailed docs
!m_brief.isEmpty() || // has brief description
(m_details && !m_details->doc.isEmpty()) || // has detailed docs
(m_brief && !m_brief->doc.isEmpty()) || // has brief description
extractAll || // extract everything
(sourceBrowser && m_startBodyLine!=-1 && m_bodyDef); // link to definition
(sourceBrowser && m_body &&
m_body->startLine!=-1 && m_body->fileDef); // link to definition
return hasDocs;
}
bool Definition::hasUserDocumentation() const
{
bool hasDocs =
!m_doc.isEmpty() ||
!m_brief.isEmpty();
(m_details && !m_details->doc.isEmpty()) ||
(m_brief && !m_brief->doc.isEmpty());
return hasDocs;
}
......@@ -720,13 +757,6 @@ QCString Definition::localName() const
return m_localName;
}
void Definition::setBodySegment(int bls,int ble)
{
//printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
m_startBodyLine=bls;
m_endBodyLine=ble;
}
void Definition::makePartOfGroup(GroupDef *gd)
{
if (m_partOfGroups==0) m_partOfGroups = new GroupList;
......
......@@ -40,6 +40,20 @@ struct ReachableDefinition
int distance;
};
struct DocInfo
{
QCString doc;
int line;
QCString file;
};
struct BodyInfo
{
int startLine; // line number of the start of the definition
int endLine; // line number of the end of the definition
FileDef *fileDef; // file definition containing the function body
};
/*! The common base class of all entity definitions found in the sources. */
class Definition
{
......@@ -82,10 +96,10 @@ class Definition
virtual QCString getSourceFileBase() const { ASSERT(0); return "NULL"; }
/*! Returns the detailed description of this definition */
const QCString& documentation() const { return m_doc; }
QCString documentation() const { return m_details ? m_details->doc : QCString(""); }
/*! Returns the brief description of this definition */
const QCString& briefDescription() const { return m_brief; }
QCString briefDescription() const { return m_brief ? m_brief->doc : QCString(""); }
/*! Sets a new \a name for the definition */
void setName(const char *name) { m_name=name; }
......@@ -94,12 +108,12 @@ class Definition
void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
/*! Returns the line number at which the detailed documentation was found. */
int docLine() const { return m_docLine; }
int docLine() const { return m_details ? m_details->line : 1; }
/*! Returns the file in which the detailed documentation block was found.
* This can differ from getDefFileName().
*/
QCString docFile() const { return m_docFile; }
QCString docFile() const { return m_details ? m_details->file : QCString("<"+m_name+">"); }
/*! Sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available.
......@@ -107,12 +121,12 @@ class Definition
void setBriefDescription(const char *b,const char *briefFile,int briefLine);
/*! Returns the line number at which the brief description was found. */
int briefLine() const { return m_briefLine; }
int briefLine() const { return m_brief ? m_brief->line : 1; }
/*! Returns the file in which the brief description was found.
* This can differ from getDefFileName().
*/
QCString briefFile() const { return m_briefFile; }
QCString briefFile() const { return m_brief ? m_brief->file : QCString("<"+m_name+">"); }
/*! returns the file in which this definition was found */
QCString getDefFileName() const { return m_defFileName; }
......@@ -132,7 +146,6 @@ class Definition
/*! Returns TRUE iff the definition is documented by the user. */
virtual bool hasUserDocumentation() const;
/*! Returns TRUE iff it is possible to link to this item within this
* project.
*/
......@@ -188,10 +201,10 @@ class Definition
// source references
void setBodySegment(int bls,int ble);
void setBodyDef(FileDef *fd) { m_bodyDef=fd; }
int getStartBodyLine() const { return m_startBodyLine; }
int getEndBodyLine() const { return m_endBodyLine; }
FileDef *getBodyDef() { return m_bodyDef; }
void setBodyDef(FileDef *fd);
int getStartBodyLine() const { return m_body ? m_body->startLine : -1; }
int getEndBodyLine() const { return m_body ? m_body->endLine : -1; }
FileDef *getBodyDef() { return m_body ? m_body->fileDef : 0; }
void writeSourceDef(OutputList &ol,const char *scopeName);
void writeInlineCode(OutputList &ol,const char *scopeName);
void writeSourceRefs(OutputList &ol,const char *scopeName);
......@@ -224,50 +237,38 @@ class Definition
protected:
void setLocalName(const QCString name) { m_localName=name; }
int m_startBodyLine; // line number of the start of the definition
int m_endBodyLine; // line number of the end of the definition
FileDef *m_bodyDef; // file definition containing the function body
// where the item was found
QCString m_defFileName;
int m_defLine;
QCString m_defFileExt;
/*! The class, namespace in which this class is located
*/
Definition *m_outerScope;
QCString m_name; // name of the definition
QCString m_localName; // local (unqualified) name of the definition
// in the future m_name should become m_localName
/*! List of groups this definition is part of */
GroupList *m_partOfGroups;
private:
int getXRefListId(const char *listName) const;
void writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool);
//QCString m_qualifiedName; // name of the definition
QCString m_brief; // brief description
QCString m_doc; // detailed description
QCString m_ref; // reference to external documentation
SectionDict *m_sectionDict; // dictionary of all sections
MemberSDict *m_sourceRefByDict;
MemberSDict *m_sourceRefsDict;
int m_testId; // id for test list item
int m_todoId; // id for todo list item
int m_bugId; // id for bug list item
int m_deprecatedId; // id for deprecated list item
int m_docLine;
QCString m_docFile;
int m_briefLine;
QCString m_briefFile;
QList<ListItemInfo> *m_xrefListItems;
DocInfo *m_details;
DocInfo *m_brief;
BodyInfo *m_body;
/*! The class, namespace in which this class is located
*/
QCString m_name; // name of the definition
QCString m_localName; // local (unqualified) name of the definition
// in the future m_name should become m_localName
QCString m_symbolName;
QCString m_qualifiedName;
QCString m_ref; // reference to external documentation
QList<ListItemInfo> *m_xrefListItems;
bool m_isSymbol;
bool m_hidden;
QCString m_qualifiedName;
Definition *m_outerScope;
GroupList *m_partOfGroups;
// where the item was found
QCString m_defFileName;
int m_defLine;
QCString m_defFileExt;
};
class DefinitionList : public QList<Definition>
......
......@@ -258,14 +258,17 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
di->move(count()*gridWidth,level*gridHeight);
append(di);
BaseClassList *bcl=doBases ? cd->baseClasses() : cd->subClasses();
/* there are base/sub classes */
int count=0;
BaseClassDef *bcd=bcl->first();
while (bcd)
if (bcl)
{
ClassDef *ccd=bcd->classDef;
if (ccd && ccd->isVisibleInHierarchy() /*&& !ccd->visited*/) count++;
bcd=bcl->next();
/* there are base/sub classes */
BaseClassDef *bcd=bcl->first();
while (bcd)
{
ClassDef *ccd=bcd->classDef;
if (ccd && ccd->isVisibleInHierarchy() /*&& !ccd->visited*/) count++;
bcd=bcl->next();
}
}
if (count>0 && (prot!=Private || !doBases))
{
......
......@@ -1169,6 +1169,7 @@ reparsetoken:
}
break;
case HTML_CODE:
case XML_C:
if (!g_token->endTag)
{
handleStyleEnter(parent,children,DocStyleChange::Code,&g_token->attribs);
......@@ -4697,8 +4698,9 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
QString paramName;
if (findAttribute(tagHtmlAttribs,"name",&paramName))
{
//printf("paramName=%s\n",paramName.data());
m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Italic,TRUE));
retval=handleStyleArgument(this,m_children,paramName);
m_children.append(new DocWord(this,paramName));
m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Italic,FALSE));
if (retval!=TK_WORD) m_children.append(new DocWhiteSpace(this," "));
}
......
......@@ -560,9 +560,9 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}?
<St_XmlCode>{WS}*"</code>" {
return RetVal_OK;
}
<St_Code,St_XmlCode>[^\\@\n]+ |
<St_Code,St_XmlCode>\n |
<St_Code,St_XmlCode>. {
<St_Code,St_XmlCode>[^\\@\n<]+ |
<St_Code,St_XmlCode>\n |
<St_Code,St_XmlCode>. {
g_token->verb+=yytext;
}
<St_HtmlOnly>{CMD}"endhtmlonly" {
......
This diff is collapsed.
This diff is collapsed.
......@@ -341,6 +341,7 @@ HR { height: 1px;
.paramname {
color: #602020;
font-style: italic;
white-space: nowrap;
}
/* End Styling for detailed member documentation */
......
......@@ -341,6 +341,7 @@
".paramname {\n"
" color: #602020;\n"
" font-style: italic;\n"
" white-space: nowrap;\n"
"}\n"
"/* End Styling for detailed member documentation */\n"
"\n"
......@@ -355,4 +356,3 @@
".directory p { margin: 0px; white-space: nowrap; }\n"
".directory div { display: none; margin: 0px; }\n"
".directory img { vertical-align: -30%; }\n"
"\n"
This diff is collapsed.
......@@ -22,6 +22,9 @@
#include <qlist.h>
struct SectionInfo;
class QFile;
class EntryNav;
class FileDef;
enum Protection { Public, Protected, Private, Package } ;
enum Specifier { Normal, Virtual, Pure } ;
......@@ -246,35 +249,53 @@ class Entry
Final = 0x0080,
Abstract = 0x0100,
};
enum GroupDocType
{
GROUPDOC_NORMAL, //!< defgroup
GROUPDOC_ADD, //!< addgroup
GROUPDOC_WEAK //!< weakgroup
}; //!< kind of group
Entry();
Entry(const Entry &);
~Entry();
int getSize();
void addSpecialListItem(const char *listName,int index);
void createNavigationIndex(EntryNav *rootNav,QFile &storage,FileDef *fd);
// while parsing a file these function can be used to navigate/build the tree
void setParent(Entry *parent) { m_parent = parent; }
Entry *parent() const { return m_parent; }
const QList<Entry> *children() const { return m_sublist; }
/*! Adds entry \e as a child to this entry */
void addSubEntry (Entry* e) ;
/*! Restore the state of this Entry to the default value it has
* at construction time.
*/
void reset();
void reset();
public:
// identification
int section; //!< entry type (see Sections);
QCString type; //!< member type
QCString name; //!< member name
TagInfo *tagInfo; //!< tag file info
int section; //!< entry type (see Sections);
// content
Protection protection; //!< class protection
MethodTypes mtype; //!< signal, slot, (dcop) method, or property?
int memSpec; //!< member specifiers
int initLines; //!< define/variable initializer lines to show
bool stat; //!< static ?
bool explicitExternal; //!< explicitly defined as external?
bool proto; //!< prototype ?
int memSpec; //!< member specifiers
int initLines; //!< define/variable initializer lines to show
bool subGrouping; //!< automatically group class members?
bool callGraph; //!< do we need to draw the call graph?
bool callerGraph; //!< do we need to draw the caller graph?
Specifier virt; //!< virtualness of the entry
Entry *parent; //!< parent node in the tree
QCString type; //!< member type
QCString name; //!< member name
QCString args; //!< member argument string
QCString bitfields; //!< member's bit fields
ArgumentList *argList; //!< member arguments as a list
......@@ -301,23 +322,18 @@ class Entry
int bodyLine; //!< line number of the definition in the source
int endBodyLine; //!< line number where the definition ends
int mGrpId; //!< member group id
QList<Entry> *sublist; //!< entries that are children of this one
QList<BaseInfo> *extends; //!< list of base classes
QList<Grouping> *groups; //!< list of groups this entry belongs to
QList<SectionInfo> *anchors; //!< list of anchors defined in this entry
QCString fileName; //!< file this entry was extracted from
int startLine; //!< start line of entry in the source
QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/deprecated/..) this entry is in
TagInfo *tagInfo; //!< tag file info
static int num; //!< counts the total number of entries
bool objc; //!< Objective-C construct
bool hidden; //!< does this represent an entity this is hidden from the output
enum
{
GROUPDOC_NORMAL, //!< defgroup
GROUPDOC_ADD, //!< addgroup
GROUPDOC_WEAK //!< weakgroup
} groupDocType; //!< kind of group
bool hidden; //!< does this represent an entity that is hidden from the output
GroupDocType groupDocType;
static int num; //!< counts the total number of entries
/// return the command name used to define GROUPDOC_SEC
const char *groupDocCmd() const
{
......@@ -343,11 +359,59 @@ class Entry
default: return Grouping::GROUPING_LOWEST;
}
}
private:
private:
void createSubtreeIndex(EntryNav *nav,QFile &storage,FileDef *fd);
Entry *m_parent; //!< parent node in the tree
QList<Entry> *m_sublist; //!< entries that are children of this one
Entry &operator=(const Entry &);
} ;
};
class EntryNav
{
public:
EntryNav(EntryNav *parent,Entry *e);
~EntryNav();
void addChild(EntryNav *);
bool loadEntry(QFile &storage);
bool saveEntry(Entry *e,QFile &storage);
void setEntry(Entry *e);
void releaseEntry();
void changeSection(int section) { m_section = section; }
void setFileDef(FileDef *fd) { m_fileDef = fd; }
Entry *entry() const { return m_info; }
int section() const { return m_section; }
const QCString &type() const { return m_type; }
const QCString &name() const { return m_name; }
TagInfo *tagInfo() const { return m_tagInfo; }
const QList<EntryNav> *children() const { return m_subList; }
EntryNav *parent() const { return m_parent; }
FileDef *fileDef() const { return m_fileDef; }
private:
// navigation
EntryNav *m_parent; //!< parent node in the tree
QList<EntryNav> *m_subList; //!< entries that are children of this one
// identification
int m_section; //!< entry type (see Sections);
QCString m_type; //!< member type
QCString m_name; //!< member name
TagInfo *m_tagInfo; //!< tag file info
FileDef *m_fileDef;
Entry *m_info;
int64 m_offset;
bool m_noLoad;
};
typedef QList<Entry> EntryList;
typedef QListIterator<Entry> EntryListIterator;
typedef QList<EntryNav> EntryNavList;
typedef QListIterator<EntryNav> EntryNavListIterator;
#endif
This diff is collapsed.
......@@ -79,6 +79,11 @@ class FileDef : public Definition
else
return Definition::name();
}
QCString fileName() const
{
return filename;
}
QCString getOutputFileBase() const
{ return convertNameToFile(diskname); }
......@@ -166,23 +171,23 @@ class FileDef : public Definition
//void generateXML(QTextStream &t);
//void generateXMLSection(QTextStream &t,MemberList *ml,const char *type);
MemberList allMemberList;
MemberList *allMemberList;
// members in the declaration part of the documentation
MemberList decDefineMembers;
MemberList decProtoMembers;
MemberList decTypedefMembers;
MemberList decEnumMembers;
MemberList decFuncMembers;
MemberList decVarMembers;
MemberList *decDefineMembers;
MemberList *decProtoMembers;
MemberList *decTypedefMembers;
MemberList *decEnumMembers;
MemberList *decFuncMembers;
MemberList *decVarMembers;
// members in the detailed part of the documentation
MemberList docDefineMembers;
MemberList docProtoMembers;
MemberList docTypedefMembers;
MemberList docEnumMembers;
MemberList docFuncMembers;
MemberList docVarMembers;
MemberList *docDefineMembers;
MemberList *docProtoMembers;
MemberList *docTypedefMembers;
MemberList *docEnumMembers;
MemberList *docFuncMembers;
MemberList *docVarMembers;
/* user defined member groups */
MemberGroupSDict *memberGroupSDict;
......@@ -198,27 +203,24 @@ class FileDef : public Definition
*/
void acquireFileVersion();
private:
QDict<IncludeInfo> *includeDict;
QList<IncludeInfo> *includeList;
QDict<IncludeInfo> *includedByDict;
QList<IncludeInfo> *includedByList;
NamespaceSDict *usingDirList;
SDict<Definition> *usingDeclList;
QCString path;
QCString filepath;
QCString diskname;
QCString filename;
QCString docname;
QDict<IncludeInfo> *includeDict;
QList<IncludeInfo> *includeList;
QDict<IncludeInfo> *includedByDict;
QList<IncludeInfo> *includedByList;
NamespaceSDict *usingDirList;
SDict<Definition> *usingDeclList;
QCString path;
QCString filepath;
QCString diskname;
QCString filename;
QCString docname;
QIntDict<Definition> *srcDefDict;
QIntDict<MemberDef> *srcMemberDict;
bool isSource;
QCString fileVersion;
PackageDef *package;
DirDef *dir;
QIntDict<MemberDef> *srcMemberDict;
bool isSource;
QCString fileVersion;
PackageDef *package;
DirDef *dir;
};
......@@ -283,6 +285,7 @@ class DirEntry
protected:
DirEntry *m_parent;
QCString m_name;
private:
EntryKind m_kind;
FileDef *m_fd;
......
......@@ -183,13 +183,13 @@ void GroupDef::addExample(const PageDef *def)
void GroupDef::addMembersToMemberGroup()
{
::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decEnumValMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decVarMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decDefineMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decProtoMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decTypedefMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decEnumMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decEnumValMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decFuncMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decVarMembers,&memberGroupSDict,this);
//printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
......@@ -413,12 +413,12 @@ void GroupDef::removeMember(MemberDef *md)
bool GroupDef::containsGroup(const GroupDef *def)
{
return groupList->find(def) >= 0;
return this==def || groupList->find(def) >= 0;
}
void GroupDef::addGroup(const GroupDef *def)
{
//printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
//if (Config_getBool("SORT_MEMBER_DOCS"))
// groupList->inSort(def);
//else
......@@ -427,7 +427,7 @@ void GroupDef::addGroup(const GroupDef *def)
bool GroupDef::isASubGroup() const
{
return m_partOfGroups && m_partOfGroups->count()!=0;
return partOfGroups() && partOfGroups()->count()!=0;
}
int GroupDef::countMembers() const
......@@ -872,6 +872,8 @@ void addDirToGroups(Entry *root,DirDef *dd)
void addGroupToGroups(Entry *root,GroupDef *subGroup)
{
printf("addGroupToGroups for %s groups=%d\n",root->name.data(),
root->groups?root->groups->count():-1);
QListIterator<Grouping> gli(*root->groups);
Grouping *g;
for (;(g=gli.current());++gli)
......
This diff is collapsed.
......@@ -280,7 +280,7 @@ void endFile(OutputList &ol,bool)
static bool classHasVisibleChildren(ClassDef *cd)
{
if (cd->subClasses()->count()==0) return FALSE;
if (cd->subClasses()==0) return FALSE;
BaseClassList *bcl=cd->subClasses();
BaseClassListIterator bcli(*bcl);
for ( ; bcli.current() ; ++bcli)
......@@ -295,6 +295,7 @@ static bool classHasVisibleChildren(ClassDef *cd)
void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
{
if (bcl==0) return;
HtmlHelp *htmlHelp=0;
FTVHelp *ftvHelp=0;
bool &generateHtml = Config_getBool("GENERATE_HTML") ;
......@@ -379,6 +380,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
void writeClassTree(BaseClassList *cl,int level)
{
if (cl==0) return;
HtmlHelp *htmlHelp=0;
FTVHelp *ftvHelp=0;
bool &generateHtml = Config_getBool("GENERATE_HTML") ;
......@@ -468,6 +470,7 @@ void writeClassTreeNode(ClassDef *cd,bool hasHtmlHelp,bool hasFtvHelp,bool &star
void writeClassTree(ClassList *cl,int level)
{
if (cl==0) return;
bool &generateHtml = Config_getBool("GENERATE_HTML") ;
bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW");
......@@ -485,6 +488,7 @@ void writeClassTree(ClassList *cl,int level)
void writeClassTree(ClassSDict *d,int level)
{
if (d==0) return;
bool &generateHtml = Config_getBool("GENERATE_HTML") ;
bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW");
......@@ -625,7 +629,7 @@ static int countClassesInTreeList(const ClassSDict &cl)
{
if (cd->isVisibleInHierarchy()) // should it be visible
{
if (cd->subClasses()->count()>0) // should have sub classes
if (cd->subClasses()) // should have sub classes
{
count++;
}
......
......@@ -30,3 +30,5 @@
#define LANG_CA
#define LANG_LT
#define LANG_ZA
#define LANG_AR
#define LANG_FA
......@@ -121,7 +121,13 @@
#ifdef LANG_ZA
#include "translator_za.h"
#endif
#ifdef LANG_AR
#include "translator_ar.h"
#endif
#ifdef LANG_FA
#include "translator_fa.h"
#endif
#endif // !ENGLISH_ONLY
#define L_EQUAL(a) !stricmp(langName,a)
......@@ -338,6 +344,18 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorAfrikaans;
}
#endif
#ifdef LANG_AR
else if (L_EQUAL("arabic"))
{
theTranslator=new TranslatorArabic;
}
#endif
#ifdef LANG_FA
else if (L_EQUAL("persian"))
{
theTranslator=new TranslatorPersian;
}
#endif
#endif // ENGLISH_ONLY
else // use the default language (i.e. english)
{
......
......@@ -232,7 +232,7 @@ void LatexDocVisitor::visit(DocStyleChange *s)
if (s->enable()) m_t << "\\begin{center}"; else m_t << "\\end{center} ";
break;
case DocStyleChange::Small:
if (s->enable()) m_t << "\\footnotesize "; else m_t << "\\normalsize ";
if (s->enable()) m_t << "\n\\footnotesize "; else m_t << "\n\\normalsize ";
break;
case DocStyleChange::Preformatted:
if (s->enable())
......@@ -243,7 +243,7 @@ void LatexDocVisitor::visit(DocStyleChange *s)
else
{
m_insidePre=FALSE;
m_t << "\\end{alltt}\\normalsize " << endl;
m_t << "\\end{alltt}\n\\normalsize " << endl;
}
break;
case DocStyleChange::Div: /* HTML only */ break;
......
......@@ -431,7 +431,7 @@ MemberDef::MemberDef(const char *df,int dl,
m_hasDocumentedParams = FALSE;
m_hasDocumentedReturnType = FALSE;
m_docProvider = 0;
m_isDMember = m_defFileName.right(2).lower()==".d";
m_isDMember = getDefFileName().right(2).lower()==".d";
}
/*! Destroys the member definition. */
......@@ -541,7 +541,7 @@ QCString MemberDef::getOutputFileBase() const
if (baseName.isEmpty())
{
warn(m_defFileName,m_defLine,
warn(getDefFileName(),getDefLine(),
"Warning: Internal inconsistency: member %s does not belong to any"
" container!",name().data()
);
......@@ -874,6 +874,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
{
//printf("%s MemberDef::writeDeclaration() inGroup=%d\n",name().data(),inGroup);
// hide enum value, since they appear already as part of the enum, unless they
// are explicitly grouped.
if (!inGroup && mtype==EnumValue) return;
// hide members whose brief section should not be visible
//if (!isBriefSectionVisible()) return;
......@@ -2040,7 +2044,7 @@ void MemberDef::warnIfUndocumented()
(prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
)
{
warn_undoc(m_defFileName,m_defLine,"Warning: Member %s%s (%s) of %s %s is not documented.",
warn_undoc(getDefFileName(),getDefLine(),"Warning: Member %s%s (%s) of %s %s is not documented.",
name().data(),argsString()?argsString():"",memberTypeName().data(),t,d->name().data());
}
}
......
This diff is collapsed.
......@@ -139,12 +139,12 @@ void NamespaceDef::insertNamespace(NamespaceDef *nd)
void NamespaceDef::addMembersToMemberGroup()
{
::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decVarMembers,memberGroupSDict,this);
::addMembersToMemberGroup(&decDefineMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decProtoMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decTypedefMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decEnumMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decFuncMembers,&memberGroupSDict,this);
::addMembersToMemberGroup(&decVarMembers,&memberGroupSDict,this);
}
void NamespaceDef::insertMember(MemberDef *md)
......
This diff is collapsed.
......@@ -696,12 +696,15 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
if (!locScope.isEmpty() && (ccd=g_codeClassSDict[locScope]))
{
//printf("using classScope %s\n",g_classScope.data());
BaseClassListIterator bcli(*ccd->baseClasses());
for ( ; bcli.current() ; ++bcli)
if (ccd->baseClasses())
{
if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
BaseClassListIterator bcli(*ccd->baseClasses());
for ( ; bcli.current() ; ++bcli)
{
return;
if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
{
return;
}
}
}
}
......
......@@ -129,7 +129,7 @@ static void initEntry()
current->virt = virt;
current->stat = gstat;
current->objc = FALSE; //insideObjC;
current->parent = current_root;
current->setParent(current_root);
initGroupInfo(current);
}
......@@ -950,6 +950,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
[^ \t\n#'"]+ { // non-special stuff
current->program+=yytext;
g_specialBlock = FALSE;
g_hideClassDocs = FALSE;
}
{NEWLINE} {
current->program+=*yytext;
......@@ -1059,6 +1060,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
<VariableDec>{
"=" { // the assignment operator
printf("====== VariableDec at line %d\n",yyLineNr);
}
{B} { // spaces
}
......@@ -1128,6 +1130,9 @@ STARTDOCSYMS ^{B}"##"/[^#]
"#".* { // comment
BEGIN( VariableEnd );
}
{IDENTIFIER} {
current->initializer+=yytext;
}
. {
current->initializer+=*yytext;
}
......@@ -1378,7 +1383,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
static void parseCompounds(Entry *rt)
{
//printf("parseCompounds(%s)\n",rt->name.data());
EntryListIterator eli(*rt->sublist);
EntryListIterator eli(*rt->children());
Entry *ce;
for (;(ce=eli.current());++eli)
{
......@@ -1395,9 +1400,9 @@ static void parseCompounds(Entry *rt)
current_root = ce ;
BEGIN( Search );
}
else if (ce->parent)
else if (ce->parent())
{
current_root = ce->parent;
current_root = ce->parent();
//printf("Searching for member variables in %s parent=%s\n",
// ce->name.data(),ce->parent->name.data());
BEGIN( SearchMemVars );
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -240,9 +240,9 @@ QCString convertToXML(const char *s);
QCString getOverloadDocs();
void addMembersToMemberGroup(MemberList *ml,
MemberGroupSDict *memberGroupSDict,
Definition *context);
void addMembersToMemberGroup(/* in */ MemberList *ml,
/* in,out */ MemberGroupSDict **ppMemberGroupSDict,
/* in */ Definition *context);
int extractClassNameFromType(const QCString &type,int &pos,
QCString &name,QCString &templSpec);
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment