Commit be32faf9 authored by dimitri's avatar dimitri

Release-1.3-rc2-20030106

parent ee8c5a59
......@@ -65,13 +65,13 @@ EXCLUDE = src/code.cpp \
src/pre.cpp \
src/scanner.cpp \
src/tag.cpp \
src/doc.cpp \
src/doctokenizer.cpp \
src/logos.cpp \
src/doxysearch.cpp \
src/suffixtree.cpp \
src/suffixtree.h \
src/searchindex.cpp \
src/searchindex.h
src/searchindex.h \
EXCLUDE_PATTERNS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
......
DOXYGEN Version 1.3-rc2-20021224
DOXYGEN Version 1.3-rc2-20030106
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (24 December 2002)
Dimitri van Heesch (06 January 2003)
DOXYGEN Version 1.3_rc2_20021224
DOXYGEN Version 1.3_rc2_20030106
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) (24 December 2002)
Dimitri van Heesch (dimitri@stack.nl) (06 January 2003)
1.3-rc2-20021224
1.3-rc2-20030106
......@@ -865,15 +865,17 @@ class IClass : public ICompound
virtual IRelatedCompoundIterator *baseCompounds() const = 0;
virtual IRelatedCompoundIterator *derivedCompounds() const = 0;
virtual ICompoundIterator *nestedCompounds() const = 0;
virtual IParamIterator *templateParameters() const = 0;
virtual const IString *locationFile() const = 0;
virtual int locationLine() const = 0;
virtual int locationBodyStartLine() const = 0;
virtual int locationBodyEndLine() const = 0;
virtual IParamIterator *templateParameters() const = 0;
virtual const IString *locationFile() const = 0;
virtual int locationLine() const = 0;
virtual int locationBodyStartLine() const = 0;
virtual int locationBodyEndLine() const = 0;
// TODO:
// class:
// listOfAllMembers()
// protection()
// isAbstract()
};
/*! \brief The interface to a struct in the object model.
......@@ -884,10 +886,10 @@ class IStruct : public ICompound
virtual ICompoundIterator *nestedCompounds() const = 0;
virtual IRelatedCompoundIterator *baseCompounds() const = 0;
virtual IRelatedCompoundIterator *derivedCompounds() const = 0;
virtual const IString *locationFile() const = 0;
virtual int locationLine() const = 0;
virtual int locationBodyStartLine() const = 0;
virtual int locationBodyEndLine() const = 0;
virtual const IString *locationFile() const = 0;
virtual int locationLine() const = 0;
virtual int locationBodyStartLine() const = 0;
virtual int locationBodyEndLine() const = 0;
};
/*! \brief The interface to a union in the object model.
......
......@@ -865,15 +865,17 @@ class IClass : public ICompound
virtual IRelatedCompoundIterator *baseCompounds() const = 0;
virtual IRelatedCompoundIterator *derivedCompounds() const = 0;
virtual ICompoundIterator *nestedCompounds() const = 0;
virtual IParamIterator *templateParameters() const = 0;
virtual const IString *locationFile() const = 0;
virtual int locationLine() const = 0;
virtual int locationBodyStartLine() const = 0;
virtual int locationBodyEndLine() const = 0;
virtual IParamIterator *templateParameters() const = 0;
virtual const IString *locationFile() const = 0;
virtual int locationLine() const = 0;
virtual int locationBodyStartLine() const = 0;
virtual int locationBodyEndLine() const = 0;
// TODO:
// class:
// listOfAllMembers()
// protection()
// isAbstract()
};
/*! \brief The interface to a struct in the object model.
......@@ -884,10 +886,10 @@ class IStruct : public ICompound
virtual ICompoundIterator *nestedCompounds() const = 0;
virtual IRelatedCompoundIterator *baseCompounds() const = 0;
virtual IRelatedCompoundIterator *derivedCompounds() const = 0;
virtual const IString *locationFile() const = 0;
virtual int locationLine() const = 0;
virtual int locationBodyStartLine() const = 0;
virtual int locationBodyEndLine() const = 0;
virtual const IString *locationFile() const = 0;
virtual int locationLine() const = 0;
virtual int locationBodyStartLine() const = 0;
virtual int locationBodyEndLine() const = 0;
};
/*! \brief The interface to a union in the object model.
......
......@@ -1796,4 +1796,15 @@ browser generator. Do \e not use these commands in your own documentation.
<li>\\postheader
</ul>
For PHP files there are a number of additional commands, that can be
used inside classes to make members public, private, or protected even
though the language itself doesn't support this notion.
To mark a single item use one of \\private, \\protected, \\public.
For starting a section with a certain protection level use one of:
\\privatesection, \\protectedsection, \\publicsection.
The latter commands are similar to
"private:", "protected:", and "public:" in C++.
*/
......@@ -363,13 +363,6 @@ function's detailed documentation block.
to \c NO (the default) then the documentation will be excluded.
Set it to \c YES to include the internal documentation.
\anchor cfg_strip_code_comments
<dt>\c STRIP_CODE_COMMENTS <dd>
\addindex STRIP_CODE_COMMENTS
Setting the \c STRIP_CODE_COMMENTS tag to \c YES (the default) will instruct
doxygen to hide any special comment blocks from generated source code
fragments. Normal C and C++ comments will always remain visible.
\anchor cfg_case_sense_names
<dt>\c CASE_SENSE_NAMES <dd>
\addindex CASE_SENSE_NAMES
......@@ -730,6 +723,13 @@ function's detailed documentation block.
Setting the \c INLINE_SOURCES tag to \c YES will include the body
of functions, classes and enums directly into the documentation.
\anchor cfg_strip_code_comments
<dt>\c STRIP_CODE_COMMENTS <dd>
\addindex STRIP_CODE_COMMENTS
Setting the \c STRIP_CODE_COMMENTS tag to \c YES (the default) will instruct
doxygen to hide any special comment blocks from generated source code
fragments. Normal C and C++ comments will always remain visible.
\anchor cfg_referenced_by_relation
<dt>\c REFERENCED_BY_RELATION <dd>
\addindex REFERENCED_BY_RELATION
......
......@@ -103,7 +103,7 @@ doxytag -t example.tag example/html
\par Example 2:
To generate a tag file of the Qt documentation you can do the following:
\verbatim
doxytag -t qt.tag $QTDIR/html
doxytag -t qt.tag $QTDIR/doc/html
\endverbatim
A typical example to use doxytag to generate a search index is:
......
......@@ -35,6 +35,15 @@ reasons to not include all sources for these with every run of doxygen:
linked in externally. This saves a lot of memory.
<dt>Availability:<dd> For some projects that are documented with doxygen,
the sources may just not be available.
<dt>Copyright issues:<dd>If the external
package and its documentation are copyright someone else, it may be
better - or even necessary - to reference it rather than include a
copy of it with your project's documentation. When the author forbids
redistribution, this is necessary. If the author requires compliance
with some license condition as a precondition of redistribution, and
you do now want to be bound by those conditions, referring to their
copy of their documentation is preferable to including a copy.
</dl>
If any of the above apply, you can use doxygen's tag file mechanism.
......
......@@ -222,6 +222,42 @@ should send me a code fragment that triggers the message. The workaround
the problem put some line-breaks into your file, split it up into smaller
parts, or exclude it from the input using EXCLUDE.
<li><b>Why are dependencies via STL classes not shown in the dot graphs?</b>
Doxygen is unware of the STL classes, so it does not know that class A relates
to class B in the following example
\code
#include <vector>
using namespace std;
class B {};
class A
{
public:
vector<B> m_bvec;
};
\endcode
To overcome this problem you could provide the definition of the vector
class to doxygen (by including the file that defines it at the INPUT tag
in the config file). Since STL header files are often messy, a
(possibly) better approach is to include a dummy definition of a vector
class to the input. Here is an example of a dummy STL file for the vector
class:
\code
namespace std {
/*! STL vector class */
template<class T> class vector { public: T element; };
}
\endcode
I'm still looking for someone who can provide me with definitions
for all (relevant) STL classes.
<li><b>How did doxygen get its name?</b>
Doxygen got its name from playing with the words
......
This diff is collapsed.
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
0 32 #e0e0e0
0 33 #000000
6 3600 1650 4800 3150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
3600 1950 3900 1650 4800 1650 4800 3150 3600 3150 3600 1950
3900 1950 3900 1650
4 0 0 50 0 0 12 0.0000 4 180 780 3900 2250 Config file\001
4 0 0 50 0 0 12 0.0000 4 180 645 3900 2550 Doxyfile\001
-6
6 900 7200 2100 8700
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
900 7500 1200 7200 2100 7200 2100 8700 900 8700 900 7500
1200 7500 1200 7200
4 0 0 50 0 0 12 0.0000 4 135 510 1200 7950 search\001
4 0 0 50 0 0 12 0.0000 4 135 405 1200 8175 index\001
-6
6 900 3150 2325 4875
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
900 3675 1200 3375 2100 3375 2100 4875 900 4875 900 3675
1200 3675 1200 3375
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
975 3600 975 3300 2175 3300 2175 4800 2100 4800
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
1050 3300 1050 3225 2250 3225 2250 4725 2175 4725
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
1125 3225 1125 3150 2325 3150 2325 4650 2250 4650
-6
6 900 5175 2325 6900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
900 5700 1200 5400 2100 5400 2100 6900 900 6900 900 5700
1200 5700 1200 5400
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
975 5625 975 5325 2175 5325 2175 6825 2100 6825
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
1050 5325 1050 5250 2250 5250 2250 6750 2175 6750
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
1125 5250 1125 5175 2325 5175 2325 6675 2250 6675
-6
6 1275 5925 2025 6750
4 0 0 50 0 0 12 0.0000 4 135 750 1275 6075 - headers\001
4 0 0 50 0 0 12 0.0000 4 180 690 1275 6675 - images\001
4 0 0 50 0 0 12 0.0000 4 135 690 1275 6375 - footers\001
-6
6 6675 8250 8100 9975
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
6675 8775 6975 8475 7875 8475 7875 9975 6675 9975 6675 8775
6975 8775 6975 8475
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6750 8700 6750 8400 7950 8400 7950 9900 7875 9900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6825 8400 6825 8325 8025 8325 8025 9825 7950 9825
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6900 8325 6900 8250 8100 8250 8100 9750 8025 9750
-6
6 6600 4425 8025 6150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
6600 4950 6900 4650 7800 4650 7800 6150 6600 6150 6600 4950
6900 4950 6900 4650
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6675 4875 6675 4575 7875 4575 7875 6075 7800 6075
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6750 4575 6750 4500 7950 4500 7950 6000 7875 6000
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6825 4500 6825 4425 8025 4425 8025 5925 7950 5925
-6
6 6600 2400 8025 4125
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
6600 2925 6900 2625 7800 2625 7800 4125 6600 4125 6600 2925
6900 2925 6900 2625
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6675 2850 6675 2550 7875 2550 7875 4050 7800 4050
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6750 2550 6750 2475 7950 2475 7950 3975 7875 3975
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6825 2475 6825 2400 8025 2400 8025 3900 7950 3900
-6
6 6600 375 8025 2100
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
6600 900 6900 600 7800 600 7800 2100 6600 2100 6600 900
6900 900 6900 600
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6675 825 6675 525 7875 525 7875 2025 7800 2025
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6750 525 6750 450 7950 450 7950 1950 7875 1950
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
6825 450 6825 375 8025 375 8025 1875 7950 1875
-6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
4050 3150 4050 3750
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
2100 4125 3300 4125
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
2100 6225 2700 6225 2700 4350 3300 4350
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
1 1 1.00 60.00 120.00
4350 3150 4350 3750
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
3675 5925 3975 5625 4875 5625 4875 7125 3675 7125 3675 5925
3975 5925 3975 5625
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
3300 300 5100 300 5100 1050 3300 1050 3300 300
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
4125 5625 4125 4650
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 1 2
1 1 1.00 60.00 120.00
4350 5625 4350 4650
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 2
1 1 1.00 60.00 120.00
1 1 1.00 60.00 120.00
4200 1050 4200 1650
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
5100 3900 6000 3900 6000 1425 6600 1425
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
5100 4050 6300 4050 6300 3450 6600 3450
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
5100 4200 6300 4200 6300 5550 6600 5550
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
5100 4350 6000 4350 6000 7350 6675 7350
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
5100 4500 5700 4500 5700 9150 6675 9150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 8
6675 6675 6975 6375 7875 6375 7875 7875 6675 7875 6675 6675
6975 6675 6975 6375
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
3300 3750 5100 3750 5100 4650 3300 4650 3300 3750
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
8775 450 10800 450 10800 1575 8775 1575 8775 450
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
9075 900 10650 900 10650 1425 9075 1425 9075 900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7800 1350 8775 1350
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10800 1350 11475 1350
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7800 3150 9000 3150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7800 3525 9000 3525
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
9000 2925 10800 2925 10800 3675 9000 3675 9000 2925
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10800 3150 11475 3150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10800 3525 11475 3525
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
9000 6900 10800 6900 10800 7650 9000 7650 9000 6900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7875 7275 9000 7275
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10800 7275 11400 7275
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7875 9150 9000 9150
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
9000 8775 10875 8775 10875 9525 9000 9525 9000 8775
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10875 9150 11400 9150
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
4425 8850 4425 7125
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
3300 8850 5100 8850 5100 9525 3300 9525 3300 8850
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
6675 9300 5100 9300
2 2 0 1 0 32 50 0 20 0.000 0 0 -1 0 0 5
675 9300 2475 9300 2475 9975 675 9975 675 9300
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
1 1 1.00 60.00 120.00
3900 8850 3900 8025 2100 8025
2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1500 8700 1500 9300
2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 1 1 2
1 1 1.00 60.00 120.00
1 1 1.00 60.00 120.00
2475 9750 6675 9750
2 2 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 5
8700 6450 11850 6450 11850 9975 8700 9975 8700 6450
4 0 0 50 0 0 12 0.0000 4 180 1215 4500 3525 generate/update\001
4 0 0 50 0 0 12 0.0000 4 135 330 3600 3525 read\001
4 0 0 50 0 0 12 0.0000 4 135 330 2850 3975 read\001
4 0 0 50 0 0 12 0.0000 4 135 330 2850 4650 read\001
4 0 0 50 0 0 12 0.0000 4 180 810 3975 6450 Tag file(s)\001
4 0 0 50 0 0 12 0.0000 4 180 915 3750 750 Doxywizard\001
4 0 0 50 0 0 12 0.0000 4 150 660 4425 5175 generate\001
4 0 0 50 0 0 12 0.0000 4 135 330 3675 5175 read\001
4 0 0 50 0 0 12 0.0000 4 180 990 4350 1425 generate/edit\001
4 0 0 50 0 0 12 0.0000 4 135 780 6900 1350 XML files\001
4 0 0 50 0 0 12 0.0000 4 135 810 6900 3300 Latex files\001
4 0 0 50 0 0 12 0.0000 4 135 675 6900 3750 Makefile\001
4 0 0 50 0 0 12 0.0000 4 75 105 7200 3525 +\001
4 0 0 50 0 0 12 0.0000 4 180 675 3900 4275 Doxygen\001
4 0 0 50 0 0 12 0.0000 4 180 1245 9225 750 Your application\001
4 0 0 50 0 0 12 0.0000 4 180 1155 9300 1275 doxmlparser lib\001
4 0 0 50 0 0 12 0.0000 4 180 690 8175 3750 make pdf\001
4 0 0 50 0 0 12 0.0000 4 180 630 8175 3000 make ps\001
4 0 0 50 0 0 12 0.0000 4 135 375 9675 3375 latex\001
4 0 0 50 0 0 12 0.0000 4 105 555 11025 825 custom\001
4 0 0 50 0 0 12 0.0000 4 150 480 11025 1050 output\001
4 0 0 50 0 0 12 0.0000 4 180 765 11025 3000 postscript\001
4 0 0 50 0 0 12 0.0000 4 135 345 11025 3825 PDF\001
4 0 0 50 0 0 12 0.0000 4 135 750 6900 7350 refman.rtf\001
4 0 0 50 0 0 12 0.0000 4 135 795 9525 7350 MS-Word\001
4 0 0 50 0 0 12 0.0000 4 135 270 11100 7200 doc\001
4 0 0 50 0 0 12 0.0000 4 180 480 8175 7200 import\001
4 0 0 50 0 0 12 0.0000 4 135 510 6975 9075 HTML\001
4 0 0 50 0 0 12 0.0000 4 135 450 6975 9300 pages\001
4 0 0 50 0 0 12 0.0000 4 180 1740 9075 9225 HTML Help Workshop\001
4 0 0 50 0 0 12 0.0000 4 135 315 11100 9000 chm\001
4 0 0 50 0 0 12 0.0000 4 180 840 6825 5625 Man pages\001
4 0 0 50 0 0 12 0.0000 4 135 420 5475 9525 parse\001
4 0 0 50 0 0 12 0.0000 4 150 660 4575 8100 generate\001
4 0 0 50 0 0 12 0.0000 4 180 645 3825 9300 Doxytag\001
4 0 0 50 0 0 12 0.0000 4 180 915 1050 9750 Doxysearch\001
4 0 0 50 0 0 12 0.0000 4 90 360 1575 9075 uses\001
4 0 0 50 0 0 12 0.0000 4 135 750 2700 9975 used from\001
4 0 0 50 0 0 12 0.0000 4 150 750 5700 9975 generates\001
4 0 0 50 0 0 12 0.0000 4 135 330 8325 9075 read\001
4 0 0 50 0 0 12 0.0000 4 180 1080 8775 6675 Windows only\001
4 0 0 50 0 0 12 0.0000 4 150 660 2700 8250 generate\001
4 0 0 50 0 0 12 0.0000 4 135 330 8250 1200 read\001
4 0 0 50 0 0 12 0.0000 4 135 615 1200 4200 Sources\001
4 0 0 50 0 0 12 0.0000 4 135 585 1275 5775 Custom\001
......@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
Currently (version 1.2.14-20020317), 28 languages
Currently (version 1.3-rc2-20021224), 28 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish,
......
......@@ -32,6 +32,12 @@ engine. See section \ref doxysearch_usage for more detailed usage information.
Optionally, the executable \c doxywizard is a GUI front-end for editing
the configuration files that are used by doxygen.
The following figure shows the relation between the tools and the flow
of information between them:
\image html infoflow.gif "Doxygen information flow"
\image latex infoflow.eps "Doxygen information flow" width=14cm
\section step1 Step 1: Creating a configuration file
Doxygen uses a configuration file to determine all of its settings.
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3_rc2_20021224
Version: 1.3_rc2_20030106
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -124,6 +124,7 @@ ClassDef::~ClassDef()
delete m_innerClasses;
delete m_templateInstances;
delete m_templBaseClassNames;
delete m_tempArgs;
}
QCString ClassDef::displayName() const
......@@ -1525,7 +1526,6 @@ void ClassDef::setTemplateArguments(ArgumentList *al)
if (al==0) return;
if (!m_tempArgs) delete m_tempArgs; // delete old list if needed
m_tempArgs=new ArgumentList;
m_tempArgs->setAutoDelete(TRUE);
ArgumentListIterator ali(*al);
Argument *a;
for (;(a=ali.current());++ali)
......@@ -1981,7 +1981,11 @@ void ClassDef::mergeMembers()
void ClassDef::addUsedClass(ClassDef *cd,const char *accessName)
{
if (m_usesImplClassDict==0) m_usesImplClassDict = new UsesClassDict(17);
if (m_usesImplClassDict==0)
{
m_usesImplClassDict = new UsesClassDict(17);
m_usesImplClassDict->setAutoDelete(TRUE);
}
UsesClassDef *ucd=m_usesImplClassDict->find(cd->name());
if (ucd==0 /*|| ucd->templSpecifiers!=templSpec*/)
{
......@@ -2065,7 +2069,11 @@ void ClassDef::determineImplUsageRelation()
if (cd) // class exists
{
found=TRUE;
if (m_usesImplClassDict==0) m_usesImplClassDict = new UsesClassDict(257);
if (m_usesImplClassDict==0)
{
m_usesImplClassDict = new UsesClassDict(257);
m_usesImplClassDict->setAutoDelete(TRUE);
}
UsesClassDef *ucd=m_usesImplClassDict->find(cd->name());
if (ucd==0 || ucd->templSpecifiers!=templSpec)
{
......
......@@ -126,12 +126,6 @@ class ClassDef : public Definition
*/
ArgumentList *templateArguments() const { return m_tempArgs; }
/*! Returns the template arguments that this nested class "inherits"
* from its outer class (doxygen assumes there is only one!).
* Will return 0 if not applicable.
*/
//ArgumentList *outerTemplateArguments() const;
/*! Returns the namespace this compound is in, or 0 if it has a global
* scope.
*/
......
......@@ -338,6 +338,11 @@ class Config
if (m_instance==0) m_instance = new Config;
return m_instance;
}
/*! Delete the instance */
static void deleteInstance()
{
delete m_instance;
}
/*! Returns an iterator that can by used to iterate over the
* configuration options.
......
......@@ -128,8 +128,8 @@ static void docParserPopContext()
//---------------------------------------------------------------------------
/*! search for an image in the imageNameDict and if found
* copies the image to the output directory (which is the
* html directory if type==0 or the latex directory if type==1)
* copies the image to the output directory (which depends on the \a type
* parameter).
*/
static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
{
......@@ -225,14 +225,20 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
return result;
}
/*! Collects the parameters found with @param or @retval commands
* in a global list g_paramsFound. If \a isParam is set to TRUE
* and the parameter is not an actual parameter of the current
* member g_memberDef, than a warning is raised (unless warnings
* are disabled altogether).
*/
static void checkArgumentName(const QString &name,bool isParam)
{
if (!Config_getBool("WARN_IF_DOC_ERROR")) return;
if (g_memberDef==0) return; // not a member
ArgumentList *al=g_memberDef->isDocsForDefinition() ?
g_memberDef->argumentList() :
g_memberDef->declArgumentList();
if (al==0) return; // no argument list
if (!Config_getBool("WARN_IF_DOC_ERROR")) return;
static QRegExp re("[a-zA-Z0-9_]+\\.*");
int p=0,i=0,l;
......@@ -270,6 +276,11 @@ static void checkArgumentName(const QString &name,bool isParam)
}
}
/*! Checks if the parameters that have been specified using @param are
* indeed all paramters.
* Must be called after checkArgumentName() has been called for each
* argument.
*/
static void checkUndocumentedParams()
{
if (g_memberDef && g_hasParamCommand && Config_getBool("WARN_IF_DOC_ERROR"))
......@@ -317,6 +328,7 @@ static void checkUndocumentedParams()
//---------------------------------------------------------------------------
/*! Strips know html and tex extensions from \a text. */
static QString stripKnownExtensions(const char *text)
{
QString result=text;
......@@ -414,6 +426,7 @@ static bool findDocsForMemberOrCompound(const char *commandName,
QString *pDoc,
Definition **pDef)
{
//printf("findDocsForMemberOrCompound(%s)\n",commandName);
*pDoc="";
*pDef=0;
QString cmdArg=commandName;
......@@ -422,10 +435,7 @@ static bool findDocsForMemberOrCompound(const char *commandName,
int funcStart=cmdArg.find('(');
if (funcStart==-1) funcStart=l;
//int lastScopeStart=cmdArg.findRev("::",funcStart);
//int lastScopeEnd = lastScopeStart==-1 ? 0 : lastScopeStart+2;
//QString scope=cmdArg.left(QMAX(lastScopeStart,0));
//QString name=cmdArg.mid(lastScopeEnd,funcStart-lastScopeEnd);
QString name=cmdArg.left(funcStart);
QString args=cmdArg.right(l-funcStart);
......@@ -441,6 +451,7 @@ static bool findDocsForMemberOrCompound(const char *commandName,
name.latin1(),
args.isEmpty()?0:args.latin1(),
md,cd,fd,nd,gd,FALSE,0,TRUE);
//printf("found=%d context=%s name=%s\n",found,g_context.data(),name.data());
if (found && md)
{
*pDoc=md->documentation();
......@@ -1289,7 +1300,14 @@ void DocCopy::parse()
if (g_copyStack.findRef(def)==-1) // definition not parsed earlier
{
docParserPushContext();
g_context=def->name();
if (def->definitionType()==Definition::TypeMember && def->getOuterScope())
{
g_context=def->getOuterScope()->name();
}
else
{
g_context=def->name();
}
g_styleStack.clear();
g_nodeStack.clear();
g_copyStack.append(def);
......@@ -3728,13 +3746,6 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
retval=RetVal_ListItem;
}
break;
//case HTML_PRE:
// {
// DocHtmlPre *pre = new DocHtmlPre(this,tagHtmlAttribs);
// m_children.append(pre);
// retval=pre->parse();
// }
// break;
case HTML_BOLD:
handleStyleEnter(this,m_children,DocStyleChange::Bold,&g_token->attribs);
break;
......@@ -3836,7 +3847,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
g_insideHtmlLink=FALSE;
break;
}
else // unsupport option for tag a
else // unsupported option for tag a
{
}
}
......@@ -4054,6 +4065,7 @@ int DocPara::parse()
{
DBG(("DocPara::parse() start\n"));
g_nodeStack.push(this);
// handle style commands "inherited" from the previous paragraph
handleInitialStyleCommands(this,m_children);
int tok;
int retval=0;
......@@ -4083,7 +4095,7 @@ reparsetoken:
{
// prevent leading whitespace and collapse multiple whitespace areas
DocNode::Kind k;
if (insidePRE(this) || // all whitespace is relavant
if (insidePRE(this) || // all whitespace is relevant
(
// remove leading whitespace
!m_children.isEmpty() &&
......@@ -4197,12 +4209,7 @@ reparsetoken:
}
if (cmd&SIMPLESECT_BIT)
{
if (n // already in a simple section
//|| // no section or root as parent
// (parent()->kind()!=DocNode::Kind_Root &&
// parent()->kind()!=DocNode::Kind_Section
// )
)
if (n) // already in a simple section
{
// simple section cannot start in this paragraph, need
// to unwind the stack and remember the command.
......
......@@ -142,7 +142,7 @@ static int computeIndent(const char *str,int length)
*/
static void parseHtmlAttribs(const char *att)
{
//printf("parseHtmlAttribs(%s)\n",opt.data());
//printf("parseHtmlAttribs(%s)\n",att);
QCString attribs=att;
int len = attribs.length();
char c;
......@@ -173,7 +173,7 @@ static void parseHtmlAttribs(const char *att)
// search for matching quote
while (i<len && c!='\'') { c=attribs.at(++i); }
endAttrib=i;
c=attribs.at(++i);
if (i<len) c=attribs.at(++i);
}
else if (attribs.at(i)=='"') // option "..."
{
......@@ -182,7 +182,7 @@ static void parseHtmlAttribs(const char *att)
// search for matching quote
while (i<len && c!='"') { c=attribs.at(++i); }
endAttrib=i;
c=attribs.at(++i);
if (i<len) c=attribs.at(++i);
}
else // value without any quotes
{
......@@ -190,7 +190,7 @@ static void parseHtmlAttribs(const char *att)
// search for separator
while (i<len && c!=' ') { c=attribs.at(++i); }
endAttrib=i;
c=attribs.at(++i);
if (i<len) c=attribs.at(++i);
}
opt.value = attribs.mid(startAttrib,endAttrib-startAttrib);
}
......@@ -198,7 +198,7 @@ static void parseHtmlAttribs(const char *att)
{
}
//printf("=====> Adding option name=<%s> value=<%s>\n",
// opt->name.data(),opt->value.data());
// opt.name.data(),opt.value.data());
g_token->attribs.append(&opt);
}
}
......
......@@ -881,27 +881,25 @@ void DotGfxHierarchyTable::addClassList(ClassSDict *cl)
for (cli.toLast();(cd=cli.current());--cli)
{
//printf("Trying %s subClasses=%d\n",cd->name().data(),cd->subClasses()->count());
if (!hasVisibleRoot(cd->baseClasses()))
if (!hasVisibleRoot(cd->baseClasses()) &&
cd->isVisibleInHierarchy()
) // root node in the forest
{
if (cd->isVisibleInHierarchy()) // root node in the forest
QCString tmp_url="";
if (cd->isLinkable())
tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
//printf("Inserting root class %s\n",cd->name().data());
DotNode *n = new DotNode(m_curNodeNumber++,
cd->displayName(),
tmp_url.data());
//m_usedNodes->clear();
m_usedNodes->insert(cd->name(),n);
m_rootNodes->insert(0,n);
if (!cd->visited && cd->subClasses()->count()>0)
{
QCString tmp_url="";
if (cd->isLinkable())
tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
//printf("Inserting root class %s\n",cd->name().data());
DotNode *n = new DotNode(m_curNodeNumber++,
cd->displayName(),
tmp_url.data()
);
//m_usedNodes->clear();
m_usedNodes->insert(cd->name(),n);
m_rootNodes->insert(0,n);
if (!cd->visited && cd->subClasses()->count()>0)
{
addHierarchy(n,cd,cd->visited);
cd->visited=TRUE;
}
addHierarchy(n,cd,cd->visited);
cd->visited=TRUE;
}
}
}
......@@ -911,8 +909,8 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
{
m_curNodeNumber=0;
m_rootNodes = new QList<DotNode>;
//m_rootNodes->setAutoDelete(TRUE); // rootNodes owns the nodes
m_usedNodes = new QDict<DotNode>(1009); // virtualNodes only aliases nodes
m_usedNodes = new QDict<DotNode>(1009);
m_usedNodes->setAutoDelete(TRUE);
m_rootSubgraphs = new DotNodeList;
// build a graph with each class as a node and the inheritance relations
......@@ -964,7 +962,9 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
DotGfxHierarchyTable::~DotGfxHierarchyTable()
{
//printf("DotGfxHierarchyTable::~DotGfxHierarchyTable\n");
SDict<DotNode> skipNodes(17);
#if 0 // TODO: delete this
SDict<DotNode> skipNodes(1009);
skipNodes.setAutoDelete(TRUE);
DotNode *n = m_rootNodes->first();
while (n)
......@@ -980,6 +980,15 @@ DotGfxHierarchyTable::~DotGfxHierarchyTable()
deleteNodes(n,&skipNodes);
n=m_rootNodes->next();
}
#endif
//QDictIterator<DotNode> di(*m_usedNodes);
//DotNode *n;
//for (;(n=di.current());++di)
//{
// printf("Node %p: %s\n",n,n->label().data());
//}
delete m_rootNodes;
delete m_usedNodes;
delete m_rootSubgraphs;
......
......@@ -26,6 +26,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <qtextcodec.h>
#include "version.h"
#include "doxygen.h"
......@@ -61,6 +62,7 @@
//#include "packagedef.h"
#include "bufstr.h"
#include "commentcnv.h"
#include "cmdmapper.h"
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
......@@ -104,8 +106,6 @@ StringDict Doxygen::tagDestinationDict(257); // all tag locations
QDict<void> Doxygen::expandAsDefinedDict(257); // all macros that should be expanded
QIntDict<MemberGroupInfo> Doxygen::memGrpInfoDict(1009); // dictionary of the member groups heading
//QIntDict<QCString> Doxygen::memberHeaderDict(1009); // dictionary of the member groups heading
//QIntDict<QCString> Doxygen::memberDocDict(1009); // dictionary of the member groups heading
PageInfo *Doxygen::mainPage = 0;
QTextStream Doxygen::tagFile;
......@@ -3095,6 +3095,7 @@ static bool findTemplateInstanceRelation(Entry *root,
findUsedClassesForClass(templateRoot,templateClass,instanceClass,
isArtificial,templArgs,templateNames);
delete templArgs;
}
else
{
......@@ -4468,7 +4469,6 @@ static void findMember(Entry *root,
* of the function definition before matching.
*/
argList = new ArgumentList;
argList->setAutoDelete(TRUE);
substituteTemplatesInArgList(declTemplArgs,*defTemplArgs,
md->argumentList(),argList);
......@@ -7048,6 +7048,37 @@ void initDoxygen()
initPreprocessor();
Doxygen::sectionDict.setAutoDelete(TRUE);
Doxygen::inputNameList.setAutoDelete(TRUE);
Doxygen::memberNameSDict.setAutoDelete(TRUE);
Doxygen::functionNameSDict.setAutoDelete(TRUE);
Doxygen::hiddenClasses.setAutoDelete(TRUE);
Doxygen::classSDict.setAutoDelete(TRUE);
Doxygen::pageSDict->setAutoDelete(TRUE);
Doxygen::exampleSDict->setAutoDelete(TRUE);
excludeNameDict.setAutoDelete(TRUE);
Doxygen::memGrpInfoDict.setAutoDelete(TRUE);
Doxygen::tagDestinationDict.setAutoDelete(TRUE);
}
void cleanUpDoxygen()
{
delete Doxygen::inputNameDict;
delete Doxygen::includeNameDict;
delete Doxygen::exampleNameDict;
delete Doxygen::imageNameDict;
delete Doxygen::dotFileNameDict;
delete Doxygen::mainPage;
delete Doxygen::pageSDict;
delete Doxygen::exampleSDict;
delete Doxygen::globalScope;
delete Doxygen::specialLists;
cleanUpPreprocessor();
Config::deleteInstance();
QTextCodec::deleteAllCodecs();
delete theTranslator;
delete outputList;
CmdMapper::freeInstance();
HtmlTagMapper::freeInstance();
}
void readConfiguration(int argc, char **argv)
......@@ -7093,6 +7124,7 @@ void readConfiguration(int argc, char **argv)
if (!formatName)
{
err("Error:option -e is missing format specifier rtf.\n");
cleanUpDoxygen();
exit(1);
}
if (stricmp(formatName,"rtf")==0)
......@@ -7100,6 +7132,7 @@ void readConfiguration(int argc, char **argv)
if (optind+1>=argc)
{
err("Error: option \"-e rtf\" is missing an extensions file name\n");
cleanUpDoxygen();
exit(1);
}
QFile f;
......@@ -7107,9 +7140,11 @@ void readConfiguration(int argc, char **argv)
{
RTFGenerator::writeExtensionsFile(f);
}
cleanUpDoxygen();
exit(1);
}
err("Error: option \"-e\" has invalid format specifier.\n");
cleanUpDoxygen();
exit(1);
break;
case 'w':
......@@ -7117,6 +7152,7 @@ void readConfiguration(int argc, char **argv)
if (!formatName)
{
err("Error: option -w is missing format specifier rtf, html or latex\n");
cleanUpDoxygen();
exit(1);
}
if (stricmp(formatName,"rtf")==0)
......@@ -7124,6 +7160,7 @@ void readConfiguration(int argc, char **argv)
if (optind+1>=argc)
{
err("Error: option \"-w rtf\" is missing a style sheet file name\n");
cleanUpDoxygen();
exit(1);
}
QFile f;
......@@ -7131,6 +7168,7 @@ void readConfiguration(int argc, char **argv)
{
RTFGenerator::writeStyleSheetFile(f);
}
cleanUpDoxygen();
exit(1);
}
else if (stricmp(formatName,"html")==0)
......@@ -7140,6 +7178,7 @@ void readConfiguration(int argc, char **argv)
if (!Config::instance()->parse(argv[optind+4]))
{
err("Error opening or reading configuration file %s!\n",argv[optind+4]);
cleanUpDoxygen();
exit(1);
}
Config::instance()->substituteEnvironmentVars();
......@@ -7153,6 +7192,7 @@ void readConfiguration(int argc, char **argv)
if (optind+3>=argc)
{
err("Error: option \"-w html\" does not have enough arguments\n");
cleanUpDoxygen();
exit(1);
}
......@@ -7176,7 +7216,8 @@ void readConfiguration(int argc, char **argv)
if (openOutputFile(argv[optind+3],f))
{
HtmlGenerator::writeStyleSheetFile(f);
}
}
cleanUpDoxygen();
exit(0);
}
else if (stricmp(formatName,"latex")==0)
......@@ -7199,6 +7240,7 @@ void readConfiguration(int argc, char **argv)
if (optind+2>=argc)
{
err("Error: option \"-w latex\" does not have enough arguments\n");
cleanUpDoxygen();
exit(1);
}
......@@ -7218,11 +7260,13 @@ void readConfiguration(int argc, char **argv)
{
LatexGenerator::writeStyleSheetFile(f);
}
cleanUpDoxygen();
exit(0);
}
else
{
err("Error: Illegal format specifier %s: should be one of rtf, html, or latex\n",formatName);
cleanUpDoxygen();
exit(1);
}
break;
......@@ -7234,6 +7278,7 @@ void readConfiguration(int argc, char **argv)
else if (strcmp(&argv[optind][2],"version")==0)
{
msg("%s\n",versionString);
cleanUpDoxygen();
exit(0);
}
break;
......@@ -7257,6 +7302,7 @@ void readConfiguration(int argc, char **argv)
if (genConfig)
{
generateConfigFile(configName,shortList);
cleanUpDoxygen();
exit(0);
}
......@@ -7295,12 +7341,14 @@ void readConfiguration(int argc, char **argv)
if (!Config::instance()->parse(configName))
{
err("Error: could not open or read configuration file %s!\n",configName);
cleanUpDoxygen();
exit(1);
}
if (updateConfig)
{
generateConfigFile(configName,shortList,TRUE);
cleanUpDoxygen();
exit(0);
}
......@@ -7370,8 +7418,6 @@ void readConfiguration(int argc, char **argv)
void parseInput()
{
Doxygen::classSDict.setAutoDelete(TRUE);
Doxygen::inputNameDict = new FileNameDict(10007);
Doxygen::includeNameDict = new FileNameDict(10007);
Doxygen::exampleNameDict = new FileNameDict(1009);
......@@ -7602,6 +7648,8 @@ void parseInput()
if (input.isEmpty())
{
err("No input read, no output generated!\n");
delete root;
cleanUpDoxygen();
exit(1);
}
else
......@@ -7628,6 +7676,8 @@ void parseInput()
{
err("Error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
"exist and cannot be created\n",outputDirectory.data());
delete root;
cleanUpDoxygen();
exit(1);
}
else if (!Config_getBool("QUIET"))
......@@ -7654,6 +7704,8 @@ void parseInput()
if (generateHtml && !htmlDir.exists() && !htmlDir.mkdir(htmlOutput))
{
err("Could not create output directory %s\n",htmlOutput.data());
delete root;
cleanUpDoxygen();
exit(1);
}
......@@ -7671,6 +7723,8 @@ void parseInput()
if (generateLatex && !latexDir.exists() && !latexDir.mkdir(latexOutput))
{
err("Could not create output directory %s\n",latexOutput.data());
delete root;
cleanUpDoxygen();
exit(1);
}
......@@ -7688,6 +7742,8 @@ void parseInput()
if (generateRtf && !rtfDir.exists() && !rtfDir.mkdir(rtfOutput))
{
err("Could not create output directory %s\n",rtfOutput.data());
delete root;
cleanUpDoxygen();
exit(1);
}
......@@ -7705,6 +7761,8 @@ void parseInput()
if (generateMan && !manDir.exists() && !manDir.mkdir(manOutput))
{
err("Could not create output directory %s\n",manOutput.data());
delete root;
cleanUpDoxygen();
exit(1);
}
......@@ -7855,6 +7913,7 @@ void generateOutput()
* Initialize output generators *
**************************************************************************/
outputList = new OutputList(TRUE);
if (Config_getBool("GENERATE_HTML"))
{
......@@ -7894,6 +7953,7 @@ void generateOutput()
err("Error: cannot open tag file %s for writing\n",
generateTagFile.data()
);
cleanUpDoxygen();
exit(1);
}
Doxygen::tagFile.setDevice(tag);
......@@ -8069,5 +8129,6 @@ void generateOutput()
}
QDir::setCurrent(oldDir);
}
cleanUpDoxygen();
}
......@@ -60,40 +60,38 @@ extern QCString spaces;
class Doxygen
{
public:
static ClassSDict classSDict;
static ClassSDict hiddenClasses;
static PageSDict *exampleSDict;
static PageSDict *pageSDict;
static PageInfo *mainPage;
static FileNameDict *includeNameDict;
static FileNameDict *exampleNameDict;
static FileNameDict *inputNameDict;
static FileNameList inputNameList;
static FileNameDict *imageNameDict;
static FileNameDict *dotFileNameDict;
static QStrList tagfileList;
static MemberNameSDict memberNameSDict;
static MemberNameSDict functionNameSDict;
static FileList fileList;
static FileDict fileDict;
static ClassDef unrelatedClass;
static QTextStream tagFile;
static SectionDict sectionDict;
static StringDict namespaceAliasDict;
static GroupSDict groupSDict;
static NamespaceSDict namespaceSDict;
static FormulaList formulaList;
static FormulaDict formulaDict;
static FormulaDict formulaNameDict;
static StringDict tagDestinationDict;
static StringDict aliasDict;
static ClassSDict classSDict;
static ClassSDict hiddenClasses;
static PageSDict *exampleSDict;
static PageSDict *pageSDict;
static PageInfo *mainPage;
static FileNameDict *includeNameDict;
static FileNameDict *exampleNameDict;
static FileNameDict *inputNameDict;
static FileNameList inputNameList;
static FileNameDict *imageNameDict;
static FileNameDict *dotFileNameDict;
static QStrList tagfileList;
static MemberNameSDict memberNameSDict;
static MemberNameSDict functionNameSDict;
static FileList fileList;
static FileDict fileDict;
static ClassDef unrelatedClass;
static QTextStream tagFile;
static SectionDict sectionDict;
static StringDict namespaceAliasDict;
static GroupSDict groupSDict;
static NamespaceSDict namespaceSDict;
static FormulaList formulaList;
static FormulaDict formulaDict;
static FormulaDict formulaNameDict;
static StringDict tagDestinationDict;
static StringDict aliasDict;
static QIntDict<MemberGroupInfo> memGrpInfoDict;
//static QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading
//static QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
static QDict<void> expandAsDefinedDict;
static NamespaceDef *globalScope;
static QDict<RefList> *specialLists; // array of special lists: todo, test, bug, deprecated ...
static QCString htmlFileExtension;
static QDict<void> expandAsDefinedDict;
static NamespaceDef *globalScope;
static QDict<RefList> *specialLists; // array of special lists: todo, test, bug, deprecated ...
static QCString htmlFileExtension;
};
void initDoxygen();
......
......@@ -103,7 +103,7 @@ class ArgumentList : public QList<Argument>
ArgumentList() : QList<Argument>(),
constSpecifier(FALSE),
volatileSpecifier(FALSE),
pureSpecifier(FALSE) {}
pureSpecifier(FALSE) { setAutoDelete(TRUE); }
/*! Destroys the argument list */
~ArgumentList() {}
bool hasDocumentation() const;
......
......@@ -73,6 +73,8 @@ FileDef::~FileDef()
delete classSDict;
delete includeDict;
delete includeList;
delete includedByDict;
delete includedByList;
delete namespaceSDict;
delete srcDefDict;
delete srcMemberDict;
......
......@@ -20,6 +20,7 @@
FileName::FileName(const char *fn,const char *n) : FileList()
{
setAutoDelete(TRUE);
fName=fn;
name=n;
}
......
......@@ -1399,7 +1399,7 @@ void writeAlphabeticalClassList(OutputList &ol)
{
QCString namesp;
if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName();
QCString cname=cd->displayName();
QCString cname=cd->className();
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),0,cname);
......
......@@ -127,7 +127,7 @@ void writeInstallScript()
t << "}\n";
t << "\n";
t << "if ( ! @files ) {\n";
t << " print STDERR \"Warning: No input files given and non found!\\n\";\n";
t << " print STDERR \"Warning: No input files given and none found!\\n\";\n";
t << "}\n";
t << "\n";
t << "foreach $f (@files)\n";
......
......@@ -23,6 +23,7 @@
MemberName::MemberName(const char *n) : QList<MemberDef>()
{
name=n;
setAutoDelete(TRUE);
}
MemberName::~MemberName()
......
......@@ -115,7 +115,7 @@ class PageSDict : public SDict<PageInfo>
{
public:
PageSDict(int size) : SDict<PageInfo>(size) {}
~PageSDict() {}
virtual ~PageSDict() {}
int compareItems(GCI i1,GCI i2)
{
return stricmp(((PageInfo *)i1)->name,((PageInfo *)i2)->name);
......
......@@ -106,6 +106,7 @@ void PngEncoder::write(const char *name)
PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE
);
free(png_palette);
ti[0] = transIndex;
png_set_tRNS(png_ptr,info_ptr,ti,1,NULL);
rows = (unsigned char **) calloc(sizeof(unsigned char*),height);
......
......@@ -25,6 +25,7 @@
class BufStr;
void initPreprocessor();
void cleanUpPreprocessor();
void addSearchDir(const char *dir);
void preprocessFile(const char *fileName,BufStr &output);
......
......@@ -1919,7 +1919,7 @@ void initPreprocessor()
g_fileDefineDict = new DefineDict(1009);
}
void cleanupPreprocessor()
void cleanUpPreprocessor()
{
//delete fileDefineCache;
delete g_fileDefineDict; g_fileDefineDict=0;
......
......@@ -2733,6 +2733,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
lastCContext = YY_START;
BEGIN(SkipCxxComment);
}
<SkipInits>; {
warn(yyFileName,yyLineNr,
"Warning: Found ';' while parsing initializer list! "
"(doxygen could be confused by a macro call without semicolon)"
);
BEGIN( FindMembers );
}
<SkipInits,SkipCurly,SkipCurlyCpp>. {
//addToBody(yytext);
}
......
......@@ -74,7 +74,7 @@ class SList : public QList<T>
{
public:
SList(SDict<T> *owner) : m_owner(owner) {}
~SList() {}
virtual ~SList() {}
int compareItems(GCI item1,GCI item2)
{
return m_owner->compareItems(item1,item2);
......@@ -280,7 +280,7 @@ class SIntList : public QList<T>
{
public:
SIntList(SIntDict<T> *owner) : m_owner(owner) {}
~SIntList() {}
virtual ~SIntList() {}
int compareItems(GCI item1,GCI item2)
{
return m_owner->compareItems(item1,item2);
......
......@@ -186,6 +186,8 @@ class TagFileParser : public QXmlDefaultHandler
m_endElementHandlers(17),
m_tagName(tagName)
{
m_startElementHandlers.setAutoDelete(TRUE);
m_endElementHandlers.setAutoDelete(TRUE);
}
void startCompound( const QXmlAttributes& attrib )
......@@ -305,7 +307,8 @@ class TagFileParser : public QXmlDefaultHandler
void endMember()
{
m_state = *m_stateStack.pop();
m_state = *m_stateStack.top();
m_stateStack.remove();
switch(m_state)
{
case InClass: m_curClass->members.append(m_curMember); break;
......@@ -884,6 +887,7 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
me->args = tmi->arglist;
if (!me->args.isEmpty())
{
delete me->argList;
me->argList = new ArgumentList;
stringToArgumentList(me->args,me->argList);
}
......@@ -1006,11 +1010,16 @@ void TagFileParser::buildLists(Entry *root)
// transfer base class list
if (tci->bases)
{
delete ce->extends;
ce->extends = tci->bases; tci->bases = 0;
}
if (tci->templateArguments)
{
if (ce->tArgLists==0) ce->tArgLists = new QList<ArgumentList>;
if (ce->tArgLists==0)
{
ce->tArgLists = new QList<ArgumentList>;
ce->tArgLists->setAutoDelete(TRUE);
}
ArgumentList *al = new ArgumentList;
ce->tArgLists->append(al);
......
......@@ -103,13 +103,20 @@
" \n"
"function hideFolder() \n"
"{ \n"
" if (browserVersion == 1 || browserVersion == 3) { \n"
" if (browserVersion == 1 || browserVersion == 3) \n"
" { \n"
" if (this.navObj.style.display == \"none\") \n"
" return \n"
" {\n"
" return\n"
" }\n"
" this.navObj.style.display = \"none\" \n"
" } else { \n"
" } \n"
" else \n"
" { \n"
" if (this.navObj.visibility == \"hidden\") \n"
" {\n"
" return \n"
" }\n"
" this.navObj.visibility = \"hidden\" \n"
" } \n"
" \n"
......@@ -118,11 +125,11 @@
" \n"
"function initializeFolder(level, lastNode, leftSide) \n"
"{ \n"
"var j=0 \n"
"var i=0 \n"
"var numberOfFolders \n"
"var numberOfDocs \n"
"var nc \n"
" var j=0 \n"
" var i=0 \n"
" var numberOfFolders \n"
" var numberOfDocs \n"
" var nc \n"
" \n"
" nc = this.nChildren \n"
" \n"
......@@ -166,9 +173,12 @@
" \n"
"function drawFolder(leftSide) \n"
"{ \n"
" if (browserVersion == 2) { \n"
" if (!doc.yPos) \n"
" if (browserVersion == 2) \n"
" { \n"
" if (!doc.yPos)\n"
" {\n"
" doc.yPos=8 \n"
" }\n"
" doc.write(\"<layer id='folder\" + this.id + \"' top=\" + doc.yPos + \" visibility=hidden>\") \n"
" } \n"
" if (browserVersion == 3) \n"
......@@ -178,7 +188,9 @@
" \n"
" doc.write(\"\\n<table \") \n"
" if (browserVersion == 1) \n"
" {\n"
" doc.write(\" id='folder\" + this.id + \"' style='position:block;' \") \n"
" }\n"
" doc.write(\" border=0 cellspacing=0 cellpadding=0>\") \n"
" doc.write(\"\\n<tr><td>\") \n"
" doc.write(leftSide) \n"
......@@ -192,7 +204,9 @@
" doc.write(this.desc + \"</a>\") \n"
" } \n"
" else \n"
" {\n"
" doc.write(this.desc) \n"
" }\n"
" if (this.tagName!=\"\")\n"
" {\n"
" doc.write(\" [external]\")\n"
......@@ -200,23 +214,30 @@
" doc.write(\"</td>\") \n"
" doc.write(\"\\n</table>\\n\") \n"
" \n"
" if (browserVersion == 2) { \n"
" if (browserVersion == 2) \n"
" { \n"
" doc.write(\"</layer>\") \n"
" } \n"
" if (browserVersion == 3) { \n"
" if (browserVersion == 3) \n"
" { \n"
" doc.write(\"</div>\") \n"
" } \n"
" \n"
" if (browserVersion == 1) { \n"
" if (browserVersion == 1) \n"
" { \n"
" this.navObj = doc.all[\"folder\"+this.id] \n"
" this.iconImg = doc.all[\"folderIcon\"+this.id] \n"
" this.nodeImg = doc.all[\"nodeIcon\"+this.id] \n"
" } else if (browserVersion == 2) { \n"
" } \n"
" else if (browserVersion == 2) \n"
" { \n"
" this.navObj = doc.layers[\"folder\"+this.id] \n"
" this.iconImg = this.navObj.document.images[\"folderIcon\"+this.id] \n"
" this.nodeImg = this.navObj.document.images[\"nodeIcon\"+this.id] \n"
" doc.yPos=doc.yPos+this.navObj.clip.height \n"
" } else if (browserVersion == 3) {\n"
" } \n"
" else if (browserVersion == 3) \n"
" {\n"
" this.navObj = doc.getElementById(\"folder\"+this.id)\n"
" this.iconImg = doc.images.namedItem(\"folderIcon\"+this.id)\n"
" this.nodeImg = doc.images.namedItem(\"nodeIcon\"+this.id)\n"
......@@ -303,6 +324,7 @@
" this.createIndex() \n"
" \n"
" if (level>0) \n"
" {\n"
" if (lastNode) //the last 'brother' in the children array \n"
" { \n"
" this.renderOb(leftSide + \"<img src='ftv2lastnode.png' width=16 height=22>\") \n"
......@@ -313,20 +335,29 @@
" this.renderOb(leftSide + \"<img src='ftv2node.png' width=16 height=22>\") \n"
" leftSide = leftSide + \"<img src='ftv2vertline.png' width=16 height=22>\" \n"
" } \n"
" }\n"
" else \n"
" {\n"
" this.renderOb(\"\") \n"
" }\n"
"} \n"
" \n"
"function drawItem(leftSide) \n"
"{ \n"
" if (browserVersion == 2) \n"
" doc.write(\"<layer id='item\" + this.id + \"' top=\" + doc.yPos + \" visibility=hidden>\") \n"
" if (browserVersion == 3) \n"
" doc.write(\"<div id='item\" + this.id + \"' style='display:block;'>\") \n"
" if (browserVersion == 2)\n"
" {\n"
" doc.write(\"<layer id='item\" + this.id + \"' top=\" + doc.yPos + \" visibility=hidden>\")\n"
" }\n"
" else if (browserVersion == 3)\n"
" {\n"
" doc.write(\"<div id='item\" + this.id + \"' style='display:block;'>\")\n"
" }\n"
" \n"
" doc.write(\"\\n<table \") \n"
" if (browserVersion == 1) \n"
" doc.write(\" id='item\" + this.id + \"' style='position:block;' \") \n"
" if (browserVersion == 1)\n"
" {\n"
" doc.write(\" id='item\" + this.id + \"' style='position:block;' \")\n"
" }\n"
" doc.write(\" border=0 cellspacing=0 cellpadding=0>\\n\") \n"
" doc.write(\"<tr><td>\") \n"
" doc.write(leftSide) \n"
......@@ -342,9 +373,13 @@
" } \n"
" doc.write(\"</td>\\n<td valign=middle nowrap>\") \n"
" if (USETEXTLINKS && this.link!=\"\") \n"
" {\n"
" doc.write(\"<a href=\" + this.link + \">\" + this.desc + \"</a>\") \n"
" }\n"
" else \n"
" {\n"
" doc.write(this.desc) \n"
" }\n"
" if (this.tagName!=\"\")\n"
" {\n"
" doc.write(\" [external]\");\n"
......@@ -352,18 +387,27 @@
" doc.write(\"\\n</table>\\n\") \n"
" \n"
" if (browserVersion == 2) \n"
" {\n"
" doc.write(\"</layer>\") \n"
" if (browserVersion == 3) \n"
" }\n"
" else if (browserVersion == 3) \n"
" {\n"
" doc.write(\"</div>\")\n"
" }\n"
" \n"
" if (browserVersion == 1) { \n"
" if (browserVersion == 1) \n"
" { \n"
" this.navObj = doc.all[\"item\"+this.id] \n"
" this.iconImg = doc.all[\"itemIcon\"+this.id] \n"
" } else if (browserVersion == 2) { \n"
" } \n"
" else if (browserVersion == 2) \n"
" { \n"
" this.navObj = doc.layers[\"item\"+this.id] \n"
" this.iconImg = this.navObj.document.images[\"itemIcon\"+this.id] \n"
" doc.yPos=doc.yPos+this.navObj.clip.height \n"
" } else if (browserVersion == 3) {\n"
" } \n"
" else if (browserVersion == 3) \n"
" {\n"
" this.navObj = doc.getElementById(\"item\"+this.id)\n"
" this.iconImg = doc.images.namedItem(\"itemIcon\"+this.id)\n"
" }\n"
......@@ -376,9 +420,13 @@
"function display() \n"
"{ \n"
" if (browserVersion == 1 || browserVersion == 3) \n"
" {\n"
" this.navObj.style.display = \"block\" \n"
" }\n"
" else \n"
" this.navObj.visibility = \"show\" \n"
" {\n"
" this.navObj.visibility = \"show\"\n"
" }\n"
"} \n"
" \n"
"function createEntryIndex() \n"
......@@ -429,18 +477,49 @@
" clickedFolder.setState(!state) //open<->close \n"
"} \n"
" \n"
"function preLoadIcons() \n"
"{\n"
" var auxImg\n"
" auxImg = new Image();\n"
" auxImg.src = \"ftv2blank.png\";\n"
" auxImg.src = \"ftv2doc.png\";\n"
" auxImg.src = \"ftv2folderclosed.png\";\n"
" auxImg.src = \"ftv2folderopen.png\";\n"
" auxImg.src = \"ftv2lastnode.png\";\n"
" auxImg.src = \"ftv2link.png\";\n"
" auxImg.src = \"ftv2mlastnode.png\";\n"
" auxImg.src = \"ftv2mnode.png\";\n"
" auxImg.src = \"ftv2node.png\";\n"
" auxImg.src = \"ftv2plastnode.png\";\n"
" auxImg.src = \"ftv2pnode.png\";\n"
" auxImg.src = \"ftv2vertline.png\";\n"
"}\n"
"\n"
"function initializeDocument() \n"
"{ \n"
" doc = document;\n"
" if (doc.all) \n"
" browserVersion = 1 //IE4 \n"
" else \n"
" if (doc.layers) \n"
" browserVersion = 2 //NS4 \n"
" else if(navigator.userAgent.toLowerCase().indexOf('gecko') != -1)\n"
" browserVersion = 3 //mozilla\n"
" else \n"
" browserVersion = 0 //other \n"
" preLoadIcons()\n"
"\n"
" var ua = window.navigator.userAgent.toLowerCase();\n"
" if ((ua.indexOf('msie')!=-1) && (navigator.version>=4))\n"
" {\n"
" browserVersion = 1 // IE >= 4.x\n"
" }\n"
" else if (ua.indexOf('opera')!=-1)\n"
" {\n"
" browserVersion = 3; // Opera\n"
" }\n"
" else if (ua.indexOf('gecko')!=-1)\n"
" {\n"
" browserVersion = 3; // NS6 or Mozilla\n"
" }\n"
" else if (ua.indexOf('mozilla')!=-1)\n"
" {\n"
" browserVersion = 2; // NS4\n"
" }\n"
" else\n"
" {\n"
" browserVersion = 0; // unknown or old browser\n"
" }\n"
"\n"
" foldersTree.initialize(0, 1, \"\") \n"
" foldersTree.display()\n"
......@@ -460,6 +539,7 @@
"// Auxiliary Functions for Folder-Treee backward compatibility \n"
"// ********************************************************* \n"
" \n"
" \n"
"function gFld(description, tagName, hreference) \n"
"{ \n"
" folder = new Folder(description, tagName, hreference) \n"
......@@ -492,9 +572,10 @@
"// Global variables \n"
"// **************** \n"
" \n"
"USETEXTLINKS = 1\n"
"indexOfEntries = new Array \n"
"nEntries = 0 \n"
"doc = document \n"
"browserVersion = 0 \n"
"selectedFolder=0\n"
"var USETEXTLINKS = 1\n"
"var indexOfEntries = new Array \n"
"var nEntries = 0 \n"
"var doc = document \n"
"var browserVersion = 0 \n"
"var selectedFolder=0\n"
"\n"
......@@ -103,13 +103,20 @@ function propagateChangesInState(folder)
function hideFolder()
{
if (browserVersion == 1 || browserVersion == 3) {
if (browserVersion == 1 || browserVersion == 3)
{
if (this.navObj.style.display == "none")
return
{
return
}
this.navObj.style.display = "none"
} else {
}
else
{
if (this.navObj.visibility == "hidden")
{
return
}
this.navObj.visibility = "hidden"
}
......@@ -118,11 +125,11 @@ function hideFolder()
function initializeFolder(level, lastNode, leftSide)
{
var j=0
var i=0
var numberOfFolders
var numberOfDocs
var nc
var j=0
var i=0
var numberOfFolders
var numberOfDocs
var nc
nc = this.nChildren
......@@ -166,9 +173,12 @@ var nc
function drawFolder(leftSide)
{
if (browserVersion == 2) {
if (!doc.yPos)
if (browserVersion == 2)
{
if (!doc.yPos)
{
doc.yPos=8
}
doc.write("<layer id='folder" + this.id + "' top=" + doc.yPos + " visibility=hidden>")
}
if (browserVersion == 3)
......@@ -178,7 +188,9 @@ function drawFolder(leftSide)
doc.write("\n<table ")
if (browserVersion == 1)
{
doc.write(" id='folder" + this.id + "' style='position:block;' ")
}
doc.write(" border=0 cellspacing=0 cellpadding=0>")
doc.write("\n<tr><td>")
doc.write(leftSide)
......@@ -192,7 +204,9 @@ function drawFolder(leftSide)
doc.write(this.desc + "</a>")
}
else
{
doc.write(this.desc)
}
if (this.tagName!="")
{
doc.write(" [external]")
......@@ -200,23 +214,30 @@ function drawFolder(leftSide)
doc.write("</td>")
doc.write("\n</table>\n")
if (browserVersion == 2) {
if (browserVersion == 2)
{
doc.write("</layer>")
}
if (browserVersion == 3) {
if (browserVersion == 3)
{
doc.write("</div>")
}
if (browserVersion == 1) {
if (browserVersion == 1)
{
this.navObj = doc.all["folder"+this.id]
this.iconImg = doc.all["folderIcon"+this.id]
this.nodeImg = doc.all["nodeIcon"+this.id]
} else if (browserVersion == 2) {
}
else if (browserVersion == 2)
{
this.navObj = doc.layers["folder"+this.id]
this.iconImg = this.navObj.document.images["folderIcon"+this.id]
this.nodeImg = this.navObj.document.images["nodeIcon"+this.id]
doc.yPos=doc.yPos+this.navObj.clip.height
} else if (browserVersion == 3) {
}
else if (browserVersion == 3)
{
this.navObj = doc.getElementById("folder"+this.id)
this.iconImg = doc.images.namedItem("folderIcon"+this.id)
this.nodeImg = doc.images.namedItem("nodeIcon"+this.id)
......@@ -303,6 +324,7 @@ function initializeItem(level, lastNode, leftSide)
this.createIndex()
if (level>0)
{
if (lastNode) //the last 'brother' in the children array
{
this.renderOb(leftSide + "<img src='ftv2lastnode.png' width=16 height=22>")
......@@ -313,20 +335,29 @@ function initializeItem(level, lastNode, leftSide)
this.renderOb(leftSide + "<img src='ftv2node.png' width=16 height=22>")
leftSide = leftSide + "<img src='ftv2vertline.png' width=16 height=22>"
}
}
else
{
this.renderOb("")
}
}
function drawItem(leftSide)
{
if (browserVersion == 2)
doc.write("<layer id='item" + this.id + "' top=" + doc.yPos + " visibility=hidden>")
if (browserVersion == 3)
doc.write("<div id='item" + this.id + "' style='display:block;'>")
if (browserVersion == 2)
{
doc.write("<layer id='item" + this.id + "' top=" + doc.yPos + " visibility=hidden>")
}
else if (browserVersion == 3)
{
doc.write("<div id='item" + this.id + "' style='display:block;'>")
}
doc.write("\n<table ")
if (browserVersion == 1)
doc.write(" id='item" + this.id + "' style='position:block;' ")
if (browserVersion == 1)
{
doc.write(" id='item" + this.id + "' style='position:block;' ")
}
doc.write(" border=0 cellspacing=0 cellpadding=0>\n")
doc.write("<tr><td>")
doc.write(leftSide)
......@@ -342,9 +373,13 @@ function drawItem(leftSide)
}
doc.write("</td>\n<td valign=middle nowrap>")
if (USETEXTLINKS && this.link!="")
{
doc.write("<a href=" + this.link + ">" + this.desc + "</a>")
}
else
{
doc.write(this.desc)
}
if (this.tagName!="")
{
doc.write(" [external]");
......@@ -352,18 +387,27 @@ function drawItem(leftSide)
doc.write("\n</table>\n")
if (browserVersion == 2)
{
doc.write("</layer>")
if (browserVersion == 3)
}
else if (browserVersion == 3)
{
doc.write("</div>")
}
if (browserVersion == 1) {
if (browserVersion == 1)
{
this.navObj = doc.all["item"+this.id]
this.iconImg = doc.all["itemIcon"+this.id]
} else if (browserVersion == 2) {
}
else if (browserVersion == 2)
{
this.navObj = doc.layers["item"+this.id]
this.iconImg = this.navObj.document.images["itemIcon"+this.id]
doc.yPos=doc.yPos+this.navObj.clip.height
} else if (browserVersion == 3) {
}
else if (browserVersion == 3)
{
this.navObj = doc.getElementById("item"+this.id)
this.iconImg = doc.images.namedItem("itemIcon"+this.id)
}
......@@ -376,9 +420,13 @@ function drawItem(leftSide)
function display()
{
if (browserVersion == 1 || browserVersion == 3)
{
this.navObj.style.display = "block"
}
else
this.navObj.visibility = "show"
{
this.navObj.visibility = "show"
}
}
function createEntryIndex()
......@@ -429,18 +477,49 @@ function clickOnNode(folderId)
clickedFolder.setState(!state) //open<->close
}
function preLoadIcons()
{
var auxImg
auxImg = new Image();
auxImg.src = "ftv2blank.png";
auxImg.src = "ftv2doc.png";
auxImg.src = "ftv2folderclosed.png";
auxImg.src = "ftv2folderopen.png";
auxImg.src = "ftv2lastnode.png";
auxImg.src = "ftv2link.png";
auxImg.src = "ftv2mlastnode.png";
auxImg.src = "ftv2mnode.png";
auxImg.src = "ftv2node.png";
auxImg.src = "ftv2plastnode.png";
auxImg.src = "ftv2pnode.png";
auxImg.src = "ftv2vertline.png";
}
function initializeDocument()
{
doc = document;
if (doc.all)
browserVersion = 1 //IE4
else
if (doc.layers)
browserVersion = 2 //NS4
else if(navigator.userAgent.toLowerCase().indexOf('gecko') != -1)
browserVersion = 3 //mozilla
else
browserVersion = 0 //other
preLoadIcons()
var ua = window.navigator.userAgent.toLowerCase();
if ((ua.indexOf('msie')!=-1) && (navigator.version>=4))
{
browserVersion = 1 // IE >= 4.x
}
else if (ua.indexOf('opera')!=-1)
{
browserVersion = 3; // Opera
}
else if (ua.indexOf('gecko')!=-1)
{
browserVersion = 3; // NS6 or Mozilla
}
else if (ua.indexOf('mozilla')!=-1)
{
browserVersion = 2; // NS4
}
else
{
browserVersion = 0; // unknown or old browser
}
foldersTree.initialize(0, 1, "")
foldersTree.display()
......@@ -460,6 +539,7 @@ function initializeDocument()
// Auxiliary Functions for Folder-Treee backward compatibility
// *********************************************************
function gFld(description, tagName, hreference)
{
folder = new Folder(description, tagName, hreference)
......@@ -492,9 +572,10 @@ function insDoc(parentFolder, document)
// Global variables
// ****************
USETEXTLINKS = 1
indexOfEntries = new Array
nEntries = 0
doc = document
browserVersion = 0
selectedFolder=0
var USETEXTLINKS = 1
var indexOfEntries = new Array
var nEntries = 0
var doc = document
var browserVersion = 0
var selectedFolder=0
......@@ -766,6 +766,9 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam
// );
// check if `word' is a documented class name
if (!word.isEmpty() &&
!(isdigit(word.at(0)) || word.at(0)=='-') &&
// do not try to link digits
// (saves a lot of time for large arrays)
!rightScopeMatch(word,searchName) &&
!rightScopeMatch(scopeName,word)
)
......
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