summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2003-01-06 20:54:16 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2003-01-06 20:54:16 (GMT)
commitbe32faf9e70cecf7583687c1ce875071abd99005 (patch)
treeb008f56412d0734ea397eb4492ddd66c08677dff
parentee8c5a59f9dce7e770d315f08af410b1ac5ab9c4 (diff)
downloadDoxygen-be32faf9e70cecf7583687c1ce875071abd99005.zip
Doxygen-be32faf9e70cecf7583687c1ce875071abd99005.tar.gz
Doxygen-be32faf9e70cecf7583687c1ce875071abd99005.tar.bz2
Release-1.3-rc2-20030106
-rw-r--r--Doxyfile4
-rw-r--r--INSTALL4
-rw-r--r--README4
-rw-r--r--VERSION2
-rw-r--r--addon/doxmlparser/include/doxmlintf.h20
-rw-r--r--addon/doxmlparser/src/doxmlintf.h20
-rw-r--r--doc/commands.doc11
-rw-r--r--doc/config.doc14
-rw-r--r--doc/doxytag_usage.doc2
-rw-r--r--doc/external.doc9
-rw-r--r--doc/faq.doc36
-rw-r--r--doc/infoflow.eps665
-rw-r--r--doc/infoflow.fig250
-rw-r--r--doc/infoflow.gifbin0 -> 13193 bytes
-rw-r--r--doc/language.doc2
-rw-r--r--doc/starting.doc6
-rw-r--r--packages/rpm/doxygen.spec2
-rw-r--r--src/classdef.cpp14
-rw-r--r--src/classdef.h6
-rw-r--r--src/config.h5
-rw-r--r--src/docparser.cpp53
-rw-r--r--src/doctokenizer.l10
-rw-r--r--src/dot.cpp53
-rw-r--r--src/doxygen.cpp73
-rw-r--r--src/doxygen.h64
-rw-r--r--src/entry.h2
-rw-r--r--src/filedef.cpp2
-rw-r--r--src/filename.cpp1
-rw-r--r--src/index.cpp2
-rw-r--r--src/instdox.cpp2
-rw-r--r--src/membername.cpp1
-rw-r--r--src/page.h2
-rw-r--r--src/pngenc.cpp1
-rw-r--r--src/pre.h1
-rw-r--r--src/pre.l2
-rw-r--r--src/scanner.l7
-rw-r--r--src/sortdict.h4
-rw-r--r--src/tagreader.cpp13
-rw-r--r--src/treeview.h165
-rw-r--r--src/treeview.js165
-rw-r--r--src/util.cpp3
41 files changed, 1476 insertions, 226 deletions
diff --git a/Doxyfile b/Doxyfile
index 2ccb03d..5026e9f 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -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 =
diff --git a/INSTALL b/INSTALL
index 5cc30f1..db62ec0 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-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)
diff --git a/README b/README
index a41922f..a88f864 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-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)
diff --git a/VERSION b/VERSION
index f634979..ee4f2b1 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3-rc2-20021224
+1.3-rc2-20030106
diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h
index a136d61..0e66f80 100644
--- a/addon/doxmlparser/include/doxmlintf.h
+++ b/addon/doxmlparser/include/doxmlintf.h
@@ -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.
diff --git a/addon/doxmlparser/src/doxmlintf.h b/addon/doxmlparser/src/doxmlintf.h
index a136d61..0e66f80 100644
--- a/addon/doxmlparser/src/doxmlintf.h
+++ b/addon/doxmlparser/src/doxmlintf.h
@@ -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.
diff --git a/doc/commands.doc b/doc/commands.doc
index 7e96292..2477479 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -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++.
+
*/
+
diff --git a/doc/config.doc b/doc/config.doc
index 6419e6e..653360a 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -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
diff --git a/doc/doxytag_usage.doc b/doc/doxytag_usage.doc
index 187c285..76ae8b7 100644
--- a/doc/doxytag_usage.doc
+++ b/doc/doxytag_usage.doc
@@ -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:
diff --git a/doc/external.doc b/doc/external.doc
index e7d3bf0..994bd7f 100644
--- a/doc/external.doc
+++ b/doc/external.doc
@@ -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.
diff --git a/doc/faq.doc b/doc/faq.doc
index 576daaf..836da50 100644
--- a/doc/faq.doc
+++ b/doc/faq.doc
@@ -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
diff --git a/doc/infoflow.eps b/doc/infoflow.eps
new file mode 100644
index 0000000..68735e9
--- /dev/null
+++ b/doc/infoflow.eps
@@ -0,0 +1,665 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: infoflow.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3c
+%%CreationDate: Tue Dec 31 19:32:56 2002
+%%For: dimitri@pandora.home.nl (Dimitri van Heesch)
+%%BoundingBox: 0 0 673 585
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.878 0.878 0.878 srgb} bind def
+/col33 {0.000 0.000 0.000 srgb} bind def
+
+end
+save
+newpath 0 585 moveto 0 0 lineto 673 0 lineto 673 585 lineto closepath clip newpath
+-39.0 602.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Times-Roman /Times-Roman-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+%%Page: 1 1
+10 setmiterlimit
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% Polyline
+7.500 slw
+n 3600 1950 m 3900 1650 l 4800 1650 l 4800 3150 l 3600 3150 l 3600 1950 l
+ 3900 1950 l
+ 3900 1650 l gs col0 s gr
+/Times-Roman-iso ff 180.00 scf sf
+3900 2250 m
+gs 1 -1 sc (Config file) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+3900 2550 m
+gs 1 -1 sc (Doxyfile) col0 sh gr
+% Polyline
+n 900 7500 m 1200 7200 l 2100 7200 l 2100 8700 l 900 8700 l 900 7500 l
+ 1200 7500 l
+ 1200 7200 l gs col0 s gr
+/Times-Roman-iso ff 180.00 scf sf
+1200 7950 m
+gs 1 -1 sc (search) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+1200 8175 m
+gs 1 -1 sc (index) col0 sh gr
+% Polyline
+n 900 3675 m 1200 3375 l 2100 3375 l 2100 4875 l 900 4875 l 900 3675 l
+ 1200 3675 l
+ 1200 3375 l gs col0 s gr
+% Polyline
+n 975 3600 m 975 3300 l 2175 3300 l 2175 4800 l
+ 2100 4800 l gs col0 s gr
+% Polyline
+n 1050 3300 m 1050 3225 l 2250 3225 l 2250 4725 l
+ 2175 4725 l gs col0 s gr
+% Polyline
+n 1125 3225 m 1125 3150 l 2325 3150 l 2325 4650 l
+ 2250 4650 l gs col0 s gr
+% Polyline
+n 900 5700 m 1200 5400 l 2100 5400 l 2100 6900 l 900 6900 l 900 5700 l
+ 1200 5700 l
+ 1200 5400 l gs col0 s gr
+% Polyline
+n 975 5625 m 975 5325 l 2175 5325 l 2175 6825 l
+ 2100 6825 l gs col0 s gr
+% Polyline
+n 1050 5325 m 1050 5250 l 2250 5250 l 2250 6750 l
+ 2175 6750 l gs col0 s gr
+% Polyline
+n 1125 5250 m 1125 5175 l 2325 5175 l 2325 6675 l
+ 2250 6675 l gs col0 s gr
+/Times-Roman-iso ff 180.00 scf sf
+1275 6075 m
+gs 1 -1 sc (- headers) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+1275 6675 m
+gs 1 -1 sc (- images) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+1275 6375 m
+gs 1 -1 sc (- footers) col0 sh gr
+% Polyline
+n 6675 8775 m 6975 8475 l 7875 8475 l 7875 9975 l 6675 9975 l 6675 8775 l
+ 6975 8775 l
+ 6975 8475 l gs col0 s gr
+% Polyline
+n 6750 8700 m 6750 8400 l 7950 8400 l 7950 9900 l
+ 7875 9900 l gs col0 s gr
+% Polyline
+n 6825 8400 m 6825 8325 l 8025 8325 l 8025 9825 l
+ 7950 9825 l gs col0 s gr
+% Polyline
+n 6900 8325 m 6900 8250 l 8100 8250 l 8100 9750 l
+ 8025 9750 l gs col0 s gr
+% Polyline
+n 6600 4950 m 6900 4650 l 7800 4650 l 7800 6150 l 6600 6150 l 6600 4950 l
+ 6900 4950 l
+ 6900 4650 l gs col0 s gr
+% Polyline
+n 6675 4875 m 6675 4575 l 7875 4575 l 7875 6075 l
+ 7800 6075 l gs col0 s gr
+% Polyline
+n 6750 4575 m 6750 4500 l 7950 4500 l 7950 6000 l
+ 7875 6000 l gs col0 s gr
+% Polyline
+n 6825 4500 m 6825 4425 l 8025 4425 l 8025 5925 l
+ 7950 5925 l gs col0 s gr
+% Polyline
+n 6600 2925 m 6900 2625 l 7800 2625 l 7800 4125 l 6600 4125 l 6600 2925 l
+ 6900 2925 l
+ 6900 2625 l gs col0 s gr
+% Polyline
+n 6675 2850 m 6675 2550 l 7875 2550 l 7875 4050 l
+ 7800 4050 l gs col0 s gr
+% Polyline
+n 6750 2550 m 6750 2475 l 7950 2475 l 7950 3975 l
+ 7875 3975 l gs col0 s gr
+% Polyline
+n 6825 2475 m 6825 2400 l 8025 2400 l 8025 3900 l
+ 7950 3900 l gs col0 s gr
+% Polyline
+n 6600 900 m 6900 600 l 7800 600 l 7800 2100 l 6600 2100 l 6600 900 l
+ 6900 900 l
+ 6900 600 l gs col0 s gr
+% Polyline
+n 6675 825 m 6675 525 l 7875 525 l 7875 2025 l
+ 7800 2025 l gs col0 s gr
+% Polyline
+n 6750 525 m 6750 450 l 7950 450 l 7950 1950 l
+ 7875 1950 l gs col0 s gr
+% Polyline
+n 6825 450 m 6825 375 l 8025 375 l 8025 1875 l
+ 7950 1875 l gs col0 s gr
+% Polyline
+gs clippath
+4020 3765 m 4080 3765 l 4080 3614 l 4050 3734 l 4020 3614 l cp
+eoclip
+n 4050 3150 m
+ 4050 3750 l gs col0 s gr gr
+
+% arrowhead
+n 4020 3614 m 4050 3734 l 4080 3614 l 4020 3614 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+3315 4155 m 3315 4095 l 3164 4095 l 3284 4125 l 3164 4155 l cp
+eoclip
+n 2100 4125 m
+ 3300 4125 l gs col0 s gr gr
+
+% arrowhead
+n 3164 4155 m 3284 4125 l 3164 4095 l 3164 4155 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+3315 4380 m 3315 4320 l 3164 4320 l 3284 4350 l 3164 4380 l cp
+eoclip
+n 2100 6225 m 2700 6225 l 2700 4350 l
+ 3300 4350 l gs col0 s gr gr
+
+% arrowhead
+n 3164 4380 m 3284 4350 l 3164 4320 l 3164 4380 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4380 3135 m 4320 3135 l 4320 3286 l 4350 3166 l 4380 3286 l cp
+eoclip
+n 4350 3150 m
+ 4350 3750 l gs col0 s gr gr
+
+% arrowhead
+n 4380 3286 m 4350 3166 l 4320 3286 l 4380 3286 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 3675 5925 m 3975 5625 l 4875 5625 l 4875 7125 l 3675 7125 l 3675 5925 l
+ 3975 5925 l
+ 3975 5625 l gs col0 s gr
+% Polyline
+n 3300 300 m 5100 300 l 5100 1050 l 3300 1050 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr
+% Polyline
+gs clippath
+4155 4635 m 4095 4635 l 4095 4786 l 4125 4666 l 4155 4786 l cp
+eoclip
+n 4125 5625 m
+ 4125 4650 l gs col0 s gr gr
+
+% arrowhead
+n 4155 4786 m 4125 4666 l 4095 4786 l 4155 4786 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4320 5640 m 4380 5640 l 4380 5489 l 4350 5609 l 4320 5489 l cp
+eoclip
+n 4350 5625 m
+ 4350 4650 l gs col0 s gr gr
+
+% arrowhead
+n 4320 5489 m 4350 5609 l 4380 5489 l 4320 5489 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4170 1665 m 4230 1665 l 4230 1514 l 4200 1634 l 4170 1514 l cp
+4230 1035 m 4170 1035 l 4170 1186 l 4200 1066 l 4230 1186 l cp
+eoclip
+n 4200 1050 m
+ 4200 1650 l gs col0 s gr gr
+
+% arrowhead
+n 4230 1186 m 4200 1066 l 4170 1186 l 4230 1186 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 4170 1514 m 4200 1634 l 4230 1514 l 4170 1514 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6615 1455 m 6615 1395 l 6464 1395 l 6584 1425 l 6464 1455 l cp
+eoclip
+n 5100 3900 m 6000 3900 l 6000 1425 l
+ 6600 1425 l gs col0 s gr gr
+
+% arrowhead
+n 6464 1455 m 6584 1425 l 6464 1395 l 6464 1455 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6615 3480 m 6615 3420 l 6464 3420 l 6584 3450 l 6464 3480 l cp
+eoclip
+n 5100 4050 m 6300 4050 l 6300 3450 l
+ 6600 3450 l gs col0 s gr gr
+
+% arrowhead
+n 6464 3480 m 6584 3450 l 6464 3420 l 6464 3480 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6615 5580 m 6615 5520 l 6464 5520 l 6584 5550 l 6464 5580 l cp
+eoclip
+n 5100 4200 m 6300 4200 l 6300 5550 l
+ 6600 5550 l gs col0 s gr gr
+
+% arrowhead
+n 6464 5580 m 6584 5550 l 6464 5520 l 6464 5580 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6690 7380 m 6690 7320 l 6539 7320 l 6659 7350 l 6539 7380 l cp
+eoclip
+n 5100 4350 m 6000 4350 l 6000 7350 l
+ 6675 7350 l gs col0 s gr gr
+
+% arrowhead
+n 6539 7380 m 6659 7350 l 6539 7320 l 6539 7380 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6690 9180 m 6690 9120 l 6539 9120 l 6659 9150 l 6539 9180 l cp
+eoclip
+n 5100 4500 m 5700 4500 l 5700 9150 l
+ 6675 9150 l gs col0 s gr gr
+
+% arrowhead
+n 6539 9180 m 6659 9150 l 6539 9120 l 6539 9180 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 6675 6675 m 6975 6375 l 7875 6375 l 7875 7875 l 6675 7875 l 6675 6675 l
+ 6975 6675 l
+ 6975 6375 l gs col0 s gr
+% Polyline
+n 3300 3750 m 5100 3750 l 5100 4650 l 3300 4650 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 8775 450 m 10800 450 l 10800 1575 l 8775 1575 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr
+% Polyline
+n 9075 900 m 10650 900 l 10650 1425 l 9075 1425 l
+ cp gs col0 s gr
+% Polyline
+gs clippath
+8790 1380 m 8790 1320 l 8639 1320 l 8759 1350 l 8639 1380 l cp
+eoclip
+n 7800 1350 m
+ 8775 1350 l gs col0 s gr gr
+
+% arrowhead
+n 8639 1380 m 8759 1350 l 8639 1320 l 8639 1380 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+11490 1380 m 11490 1320 l 11339 1320 l 11459 1350 l 11339 1380 l cp
+eoclip
+n 10800 1350 m
+ 11475 1350 l gs col0 s gr gr
+
+% arrowhead
+n 11339 1380 m 11459 1350 l 11339 1320 l 11339 1380 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+9015 3180 m 9015 3120 l 8864 3120 l 8984 3150 l 8864 3180 l cp
+eoclip
+n 7800 3150 m
+ 9000 3150 l gs col0 s gr gr
+
+% arrowhead
+n 8864 3180 m 8984 3150 l 8864 3120 l 8864 3180 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+9015 3555 m 9015 3495 l 8864 3495 l 8984 3525 l 8864 3555 l cp
+eoclip
+n 7800 3525 m
+ 9000 3525 l gs col0 s gr gr
+
+% arrowhead
+n 8864 3555 m 8984 3525 l 8864 3495 l 8864 3555 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 9000 2925 m 10800 2925 l 10800 3675 l 9000 3675 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr
+% Polyline
+gs clippath
+11490 3180 m 11490 3120 l 11339 3120 l 11459 3150 l 11339 3180 l cp
+eoclip
+n 10800 3150 m
+ 11475 3150 l gs col0 s gr gr
+
+% arrowhead
+n 11339 3180 m 11459 3150 l 11339 3120 l 11339 3180 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+11490 3555 m 11490 3495 l 11339 3495 l 11459 3525 l 11339 3555 l cp
+eoclip
+n 10800 3525 m
+ 11475 3525 l gs col0 s gr gr
+
+% arrowhead
+n 11339 3555 m 11459 3525 l 11339 3495 l 11339 3555 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 9000 6900 m 10800 6900 l 10800 7650 l 9000 7650 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr
+% Polyline
+gs clippath
+9015 7305 m 9015 7245 l 8864 7245 l 8984 7275 l 8864 7305 l cp
+eoclip
+n 7875 7275 m
+ 9000 7275 l gs col0 s gr gr
+
+% arrowhead
+n 8864 7305 m 8984 7275 l 8864 7245 l 8864 7305 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+11415 7305 m 11415 7245 l 11264 7245 l 11384 7275 l 11264 7305 l cp
+eoclip
+n 10800 7275 m
+ 11400 7275 l gs col0 s gr gr
+
+% arrowhead
+n 11264 7305 m 11384 7275 l 11264 7245 l 11264 7305 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+9015 9180 m 9015 9120 l 8864 9120 l 8984 9150 l 8864 9180 l cp
+eoclip
+n 7875 9150 m
+ 9000 9150 l gs col0 s gr gr
+
+% arrowhead
+n 8864 9180 m 8984 9150 l 8864 9120 l 8864 9180 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 9000 8775 m 10875 8775 l 10875 9525 l 9000 9525 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr
+% Polyline
+gs clippath
+11415 9180 m 11415 9120 l 11264 9120 l 11384 9150 l 11264 9180 l cp
+eoclip
+n 10875 9150 m
+ 11400 9150 l gs col0 s gr gr
+
+% arrowhead
+n 11264 9180 m 11384 9150 l 11264 9120 l 11264 9180 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4455 7110 m 4395 7110 l 4395 7261 l 4425 7141 l 4455 7261 l cp
+eoclip
+n 4425 8850 m
+ 4425 7125 l gs col0 s gr gr
+
+% arrowhead
+n 4455 7261 m 4425 7141 l 4395 7261 l 4455 7261 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 3300 8850 m 5100 8850 l 5100 9525 l 3300 9525 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr
+% Polyline
+gs clippath
+5085 9270 m 5085 9330 l 5236 9330 l 5116 9300 l 5236 9270 l cp
+eoclip
+n 6675 9300 m
+ 5100 9300 l gs col0 s gr gr
+
+% arrowhead
+n 5236 9270 m 5116 9300 l 5236 9330 l 5236 9270 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+n 675 9300 m 2475 9300 l 2475 9975 l 675 9975 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr
+% Polyline
+gs clippath
+2085 7995 m 2085 8055 l 2236 8055 l 2116 8025 l 2236 7995 l cp
+eoclip
+n 3900 8850 m 3900 8025 l
+ 2100 8025 l gs col0 s gr gr
+
+% arrowhead
+n 2236 7995 m 2116 8025 l 2236 8055 l 2236 7995 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+1470 9315 m 1530 9315 l 1530 9164 l 1500 9284 l 1470 9164 l cp
+eoclip
+n 1500 8700 m
+ 1500 9300 l gs col0 s gr gr
+
+% arrowhead
+n 1470 9164 m 1500 9284 l 1530 9164 l 1470 9164 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6690 9780 m 6690 9720 l 6539 9720 l 6659 9750 l 6539 9780 l cp
+2460 9720 m 2460 9780 l 2611 9780 l 2491 9750 l 2611 9720 l cp
+eoclip
+n 2475 9750 m
+ 6675 9750 l gs col0 s gr gr
+
+% arrowhead
+n 2611 9720 m 2491 9750 l 2611 9780 l 2611 9720 l cp gs 0.00 setgray ef gr col0 s
+% arrowhead
+n 6539 9780 m 6659 9750 l 6539 9720 l 6539 9780 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+ [60] 0 sd
+n 8700 6450 m 11850 6450 l 11850 9975 l 8700 9975 l
+ cp gs col0 s gr [] 0 sd
+/Times-Roman-iso ff 180.00 scf sf
+4500 3525 m
+gs 1 -1 sc (generate/update) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+3600 3525 m
+gs 1 -1 sc (read) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+2850 3975 m
+gs 1 -1 sc (read) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+2850 4650 m
+gs 1 -1 sc (read) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+3975 6450 m
+gs 1 -1 sc (Tag file\(s\)) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+3750 750 m
+gs 1 -1 sc (Doxywizard) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+4425 5175 m
+gs 1 -1 sc (generate) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+3675 5175 m
+gs 1 -1 sc (read) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+4350 1425 m
+gs 1 -1 sc (generate/edit) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+6900 1350 m
+gs 1 -1 sc (XML files) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+6900 3300 m
+gs 1 -1 sc (Latex files) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+6900 3750 m
+gs 1 -1 sc (Makefile) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+7200 3525 m
+gs 1 -1 sc (+) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+3900 4275 m
+gs 1 -1 sc (Doxygen) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+9225 750 m
+gs 1 -1 sc (Your application) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+9300 1275 m
+gs 1 -1 sc (doxmlparser lib) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+8175 3750 m
+gs 1 -1 sc (make pdf) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+8175 3000 m
+gs 1 -1 sc (make ps) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+9675 3375 m
+gs 1 -1 sc (latex) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+11025 825 m
+gs 1 -1 sc (custom) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+11025 1050 m
+gs 1 -1 sc (output) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+11025 3000 m
+gs 1 -1 sc (postscript) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+11025 3825 m
+gs 1 -1 sc (PDF) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+6900 7350 m
+gs 1 -1 sc (refman.rtf) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+9525 7350 m
+gs 1 -1 sc (MS-Word) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+11100 7200 m
+gs 1 -1 sc (doc) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+8175 7200 m
+gs 1 -1 sc (import) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+6975 9075 m
+gs 1 -1 sc (HTML) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+6975 9300 m
+gs 1 -1 sc (pages) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+9075 9225 m
+gs 1 -1 sc (HTML Help Workshop) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+11100 9000 m
+gs 1 -1 sc (chm) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+6825 5625 m
+gs 1 -1 sc (Man pages) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+5475 9525 m
+gs 1 -1 sc (parse) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+4575 8100 m
+gs 1 -1 sc (generate) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+3825 9300 m
+gs 1 -1 sc (Doxytag) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+1050 9750 m
+gs 1 -1 sc (Doxysearch) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+1575 9075 m
+gs 1 -1 sc (uses) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+2700 9975 m
+gs 1 -1 sc (used from) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+5700 9975 m
+gs 1 -1 sc (generates) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+8325 9075 m
+gs 1 -1 sc (read) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+8775 6675 m
+gs 1 -1 sc (Windows only) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+2700 8250 m
+gs 1 -1 sc (generate) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+8250 1200 m
+gs 1 -1 sc (read) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+1200 4200 m
+gs 1 -1 sc (Sources) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+1275 5775 m
+gs 1 -1 sc (Custom) col0 sh gr
+$F2psEnd
+rs
diff --git a/doc/infoflow.fig b/doc/infoflow.fig
new file mode 100644
index 0000000..01ede9a
--- /dev/null
+++ b/doc/infoflow.fig
@@ -0,0 +1,250 @@
+#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
diff --git a/doc/infoflow.gif b/doc/infoflow.gif
new file mode 100644
index 0000000..ae6bebb
--- /dev/null
+++ b/doc/infoflow.gif
Binary files differ
diff --git a/doc/language.doc b/doc/language.doc
index bfacc39..27f4ec3 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -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,
diff --git a/doc/starting.doc b/doc/starting.doc
index 39bb117..c3b7065 100644
--- a/doc/starting.doc
+++ b/doc/starting.doc
@@ -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.
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index 669384c..91e46b8 100644
--- a/packages/rpm/doxygen.spec
+++ b/packages/rpm/doxygen.spec
@@ -1,6 +1,6 @@
Summary: A documentation system for C/C++.
Name: doxygen
-Version: 1.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
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 426202d..24c68ab 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -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)
{
diff --git a/src/classdef.h b/src/classdef.h
index 95997f7..86a3b3a 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -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.
*/
diff --git a/src/config.h b/src/config.h
index 4b00d22..4780c95 100644
--- a/src/config.h
+++ b/src/config.h
@@ -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.
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 42919fd..bc5d872 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -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.
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index de8937c..61a98b5 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -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);
}
}
diff --git a/src/dot.cpp b/src/dot.cpp
index 70fa726..6fedd24 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -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;
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 5b184d8..1eab93d 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -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();
}
diff --git a/src/doxygen.h b/src/doxygen.h
index d102345..d33ed94 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -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();
diff --git a/src/entry.h b/src/entry.h
index 5c0cdb4..ba4afbf 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -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;
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 01289e9..e48b398 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -73,6 +73,8 @@ FileDef::~FileDef()
delete classSDict;
delete includeDict;
delete includeList;
+ delete includedByDict;
+ delete includedByList;
delete namespaceSDict;
delete srcDefDict;
delete srcMemberDict;
diff --git a/src/filename.cpp b/src/filename.cpp
index 9b7e5b2..cbcceed 100644
--- a/src/filename.cpp
+++ b/src/filename.cpp
@@ -20,6 +20,7 @@
FileName::FileName(const char *fn,const char *n) : FileList()
{
+ setAutoDelete(TRUE);
fName=fn;
name=n;
}
diff --git a/src/index.cpp b/src/index.cpp
index 2073bb7..df48b79 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -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);
diff --git a/src/instdox.cpp b/src/instdox.cpp
index cd803cd..3ae5760 100644
--- a/src/instdox.cpp
+++ b/src/instdox.cpp
@@ -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";
diff --git a/src/membername.cpp b/src/membername.cpp
index 156e52c..59da4d9 100644
--- a/src/membername.cpp
+++ b/src/membername.cpp
@@ -23,6 +23,7 @@
MemberName::MemberName(const char *n) : QList<MemberDef>()
{
name=n;
+ setAutoDelete(TRUE);
}
MemberName::~MemberName()
diff --git a/src/page.h b/src/page.h
index 202a300..c7c7579 100644
--- a/src/page.h
+++ b/src/page.h
@@ -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);
diff --git a/src/pngenc.cpp b/src/pngenc.cpp
index ce36b95..18d7085 100644
--- a/src/pngenc.cpp
+++ b/src/pngenc.cpp
@@ -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);
diff --git a/src/pre.h b/src/pre.h
index b3705a1..6213bfa 100644
--- a/src/pre.h
+++ b/src/pre.h
@@ -25,6 +25,7 @@
class BufStr;
void initPreprocessor();
+void cleanUpPreprocessor();
void addSearchDir(const char *dir);
void preprocessFile(const char *fileName,BufStr &output);
diff --git a/src/pre.l b/src/pre.l
index d85023f..5b55691 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -1919,7 +1919,7 @@ void initPreprocessor()
g_fileDefineDict = new DefineDict(1009);
}
-void cleanupPreprocessor()
+void cleanUpPreprocessor()
{
//delete fileDefineCache;
delete g_fileDefineDict; g_fileDefineDict=0;
diff --git a/src/scanner.l b/src/scanner.l
index c6b4eaf..aba1dca 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -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);
}
diff --git a/src/sortdict.h b/src/sortdict.h
index be4652c..903fea3 100644
--- a/src/sortdict.h
+++ b/src/sortdict.h
@@ -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);
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 1637044..8302eb5 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -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);
diff --git a/src/treeview.h b/src/treeview.h
index 9cbcccd..aa65bfe 100644
--- a/src/treeview.h
+++ b/src/treeview.h
@@ -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"
diff --git a/src/treeview.js b/src/treeview.js
index 6b5ef51..a9ff9b5 100644
--- a/src/treeview.js
+++ b/src/treeview.js
@@ -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
+
diff --git a/src/util.cpp b/src/util.cpp
index 15e6e2e..b0b2244 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -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)
)