diff options
41 files changed, 1476 insertions, 226 deletions
@@ -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 = @@ -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) @@ -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) @@ -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 Binary files differnew file mode 100644 index 0000000..ae6bebb --- /dev/null +++ b/doc/infoflow.gif 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() @@ -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); @@ -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; 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) ) |