summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2001-09-09 13:43:55 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2001-09-09 13:43:55 (GMT)
commit4ce0e4344711a79781e2f6d64f2553ab4b45c4a5 (patch)
tree145c4c47312e94921350f78dad318333913db263 /doc
parentc822eb3d9ce727dd69954661edcabcad479c1481 (diff)
downloadDoxygen-4ce0e4344711a79781e2f6d64f2553ab4b45c4a5.zip
Doxygen-4ce0e4344711a79781e2f6d64f2553ab4b45c4a5.tar.gz
Doxygen-4ce0e4344711a79781e2f6d64f2553ab4b45c4a5.tar.bz2
Release-1.2.10-20010909
Diffstat (limited to 'doc')
-rw-r--r--doc/Doxyfile2
-rw-r--r--doc/arch.doc240
-rw-r--r--doc/archoverview.eps380
-rw-r--r--doc/archoverview.gifbin0 -> 7822 bytes
-rw-r--r--doc/config.doc9
-rw-r--r--doc/doxygen_manual.tex3
-rw-r--r--doc/index.doc10
-rw-r--r--doc/language.doc2
8 files changed, 642 insertions, 4 deletions
diff --git a/doc/Doxyfile b/doc/Doxyfile
index ca536a7..637b172 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -36,7 +36,7 @@ INPUT = index.doc install.doc starting.doc docblocks.doc lists.doc \
doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \
doxywizard_usage.doc \
installdox_usage.doc output.doc autolink.doc \
- config.doc commands.doc htmlcmds.doc language.doc
+ config.doc commands.doc htmlcmds.doc language.doc arch.doc
FILE_PATTERNS = *.cpp *.h *.doc
EXAMPLE_PATH = ../examples
RECURSIVE = NO
diff --git a/doc/arch.doc b/doc/arch.doc
new file mode 100644
index 0000000..3000bc5
--- /dev/null
+++ b/doc/arch.doc
@@ -0,0 +1,240 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+/*! \page arch
+
+\section arch Doxygen's Internals
+
+<B>Note that this section is still under construction!</B>
+
+The following picture shows how source files are processed by doxygen.
+
+\image html archoverview.gif "Data flow overview"
+\image latex archoverview.eps "Data flow overview" width=14cm
+
+The following sections explain the steps above in more detail.
+
+<h3>Config parser</h3>
+
+The configuration file that controls the settings of a project is parsed
+and the settings are stored in the singleton class \c Config
+in \c src/config.h. The parser itself is written using \c flex and can be
+found in \c src/config.l. This parser is also used directly by \c doxywizard,
+so it is put in a separate library.
+
+Each configuration option has one of 5 possible types: \c String,
+\c List, \c Enum, \c Int, or \c Bool. The values of these options are
+available through the global functions \c Config_getXXX(), where \c XXX is the
+type of the option. The argument of these function is a string naming
+the option as it appears in the configuration file. For instance:
+\c Config_getBool("GENERATE_TESTLIST") returns a reference to a boolean
+value that is \c TRUE if the test list was enabled in the config file.
+
+The function \c readConfiguration() in \c src/doxygen.cpp
+reads the command line options and then calls the configuration parser.
+
+<h3>C Preprocessor</h3>
+
+The input files mentioned in the config file are (by default) fed to the
+C Preprocessor (after being piped through a user defined filter if available).
+
+The way the preprocessor works differs somewhat from a standard C Preprocessor.
+By default it does not do macro expansion, although it can be configured to
+expand all macros. Typical usage is to only expand a user specified set
+of macros. This is to allow macro names to appear in the type of
+function parameters for instance.
+
+Another difference is that the preprocessor parses, but not actually includes
+code when it encounters a #include (with the exception of #include
+found inside { ... } blocks). The reasons behind this deviation from
+the standard is to prevent feeding multiple definitions of the
+same functions/classes to doxygen's parser. If all source files would
+include a common header file for instance, the class and type
+definitions (and their documentation) would be present in each
+translation unit.
+
+The preprocessor is written using \c flex and can be found in
+\c src/pre.l. For condition blocks (#if) evaluation of constant expressions
+is needed. For this a \c yacc based parser is used, which can be found
+in \c src/constexp.y and \c src/constexp.l.
+
+The preprocessor is invoked for each file using the \c preprocessFile()
+function declared in \c src/pre.h, and will append the preprocessed result
+to a character buffer. The format of the character buffer is
+
+\verbatim
+0x06 file name 1
+0x06 preprocessed contents of file 1
+...
+0x06 file name n
+0x06 preprocessed contents of file n
+\endverbatim
+
+<h3>Language parser</h3>
+
+The preprocessed input buffer is fed to the language parser, which is
+implemented as a big state machine using \c flex. It can be found
+in the file \c src/scanner.l. There is one parser for all
+languages (C/C++/Java/IDL). The state variables \c insideIDL
+and \c insideJava are uses at some places for language specific choices.
+
+The task of the parser is to convert the input buffer into a tree of entries
+(basically an abstract syntax tree). An entry is defined in \c src/entry.h
+and is a blob of loosely structured information. The most important field
+is \c section which specifies the kind of information contained in the entry.
+
+Possible improvements for future versions:
+ - Use one scanner/parser per language instead of one big scanner.
+ - Move the first pass parsing of documentation blocks to a separate module.
+ - Parse defines (these are currently gathered by the preprocessor, and
+ ignored by the language parser).
+
+<h3>Data organizer</h3>
+
+This step consists of many smaller steps, that build
+dictionaries of the extracted classes, files, namespaces,
+variables, functions, packages, pages, and groups. Besides building
+dictionaries, during this step relations (such as inheritance relations),
+between the extracted entities are computed.
+
+Each step has a function defined in \c src/doxygen.cpp, which operates
+on the tree of entries, built during language parsing. Look at the
+"Gathering information" part of \c parseInput() for details.
+
+The result of this step is a number of dictionaries, which can be
+found in the Doxygen "namespace" defined in \c src/doxygen.h. Most
+elements of these dictionaries are derived from the class \c Definition;
+The class \c MemberDef, for instance, holds all information for a member.
+An instance of such a class can be part of a file ( class \c FileDef ),
+a class ( class \c ClassDef ), a namespace ( class \c NamespaceDef ),
+a group ( class \c GroupDef ), or a Java package ( class \c PackageDef ).
+
+<h3>Tag file parser</h3>
+
+If tag files are specified in the configuration file, these are parsed
+by a SAX based XML parser, which can be found in \c src/tagreader.cpp.
+The result of parsing a tag file is the insertion of \c Entry objects in the
+entry tree. The field \c Entry::tagInfo is used to mark the entry as
+external, and holds information about the tag file.
+
+<h3>Documentation parser</h3>
+
+Special comment blocks are stored as strings in the entities that they
+document. There is a string for the brief description and a string
+for the detailed description. The documentation parser reads these
+strings and executes the commands it finds in it (this is the second pass
+in parsing the documentation). It writes the result directly to the output
+generators.
+
+The parser is written using \c flex and can be found in \c src/doc.l
+Code fragments found in the comment blocks are passed on to the source parser.
+
+The main entry point for the documentation parser is \c parseDoc()
+declared in \c src/doc.h. For simple texts with special
+commands \c parseText() is used.
+
+<h3>Source parser</h3>
+
+If source browsing is enabled or if code fragments are encountered in the
+documentation, the source parser is invoked.
+
+The code parser tries to cross-reference to source code it parses with
+documented entities. It also does syntax highlighting of the sources. The
+output is directly written to the output generators.
+
+The main entry point for the code parser is \c parseCode()
+declared in \c src/code.h.
+
+<h3>Output generators</h3>
+
+After data is gathered and cross-referenced, doxygen generates
+output in various formats. For this it uses the methods provided by
+the abstract class \c OutputGenerator. In order to generate output
+for multiple formats at once, the methods of \c OutputList are called
+instead. This class maintains a list of concrete output generators,
+where each method called is delegated to all generators in the list.
+
+To allow small deviations in what is written to the output for each
+concrete output generator, it is possible to temporarily disable certain
+generators. The OutputList class contains various \c disable() and \c enable()
+methods for this. The methods \c OutputList::pushGeneratorState() and
+\c OutputList::popGeneratorState() are used to temporarily save the
+set of enabled/disabled output generators on a stack.
+
+The XML is generated directly from the gathered data structures. In the
+future XML will be used as an intermediate language (IL). The output
+generators will then use this IL as a starting point to generate the
+specific output formats. The advantage of having an IL is that various
+independently developed tools written in various languages,
+could extract information from the XML output. Possible tools could be:
+- an interactive source browser
+- a class diagram generator
+- computing code metrics.
+
+<h3>Debugging</h3>
+
+Since doxygen uses a lot of \c flex code it is important to understand
+how \c flex works (for this one should read the man page)
+and to understand what it is doing when \c flex is parsing some input.
+Fortunately, when flex is used with the -d option it outputs what rules
+matched. This makes it quite easy to follow what is going on for a
+particular input fragment.
+
+To make it easier to toggle debug information for a given flex file I
+wrote the following perl script, which automatically adds or removes -d
+from the correct line in the Makefile:
+
+\verbatim
+#!/usr/local/bin/perl
+
+$file = shift @ARGV;
+print "Toggle debugging mode for $file\n";
+
+# add or remove the -d flex flag in the makefile
+unless (rename "Makefile.libdoxygen","Makefile.libdoxygen.old") {
+ print STDERR "Error: cannot rename Makefile.libdoxygen!\n";
+ exit 1;
+}
+if (open(F,"<Makefile.libdoxygen.old")) {
+ unless (open(G,">Makefile.libdoxygen")) {
+ print STDERR "Error: opening file Makefile.libdoxygen for writing\n";
+ exit 1;
+ }
+ print "Processing Makefile.libdoxygen...\n";
+ while (<F>) {
+ if ( s/\(LEX\) -P([a-z]+)YY -t $file/(LEX) -d -P\1YY -t $file/g ) {
+ print "Enabling debug info for $file\n";
+ }
+ elsif ( s/\(LEX\) -d -P([a-z]+)YY -t $file/(LEX) -P\1YY -t $file/g ) {
+ print "Disabling debug info for $file\n";
+ }
+ print G "$_";
+ }
+ close F;
+ unlink "Makefile.libdoxygen.old";
+}
+else {
+ print STDERR "Warning file Makefile.libdoxygen.old does not exist!\n";
+}
+
+# touch the file
+$now = time;
+utime $now, $now, $file
+\endverbatim
+
+*/
+
+
diff --git a/doc/archoverview.eps b/doc/archoverview.eps
new file mode 100644
index 0000000..b41d36c
--- /dev/null
+++ b/doc/archoverview.eps
@@ -0,0 +1,380 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: archoverview.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 1
+%%CreationDate: Sat Sep 8 19:41:40 2001
+%%For: root@blizzard (root)
+%%Orientation: Portrait
+%%BoundingBox: 0 0 733 511
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%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
+
+end
+save
+-31.0 537.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
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+%%EndProlog
+
+$F2psBegin
+10 setmiterlimit
+n -1000 9949 m -1000 -1000 l 13719 -1000 l 13719 9949 l cp clip
+ 0.06000 0.06000 sc
+7.500 slw
+% Ellipse
+n 4425 1725 900 900 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 5100 4200 900 900 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 10500 4275 900 900 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 2402 4198 900 900 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 7863 8104 837 837 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 5113 6622 887 887 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 9375 6450 837 837 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 7800 4200 900 900 0 360 DrawEllipse gs col0 s gr
+
+% Polyline
+gs clippath
+1380 4170 m 1500 4200 l 1380 4230 l 1515 4230 l 1515 4170 l cp
+clip
+n 600 4200 m 1500 4200 l gs col0 s gr gr
+
+% arrowhead
+n 1380 4170 m 1500 4200 l 1380 4230 l 1380 4200 l 1380 4170 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4080 4170 m 4200 4200 l 4080 4230 l 4215 4230 l 4215 4170 l cp
+clip
+n 3300 4200 m 4200 4200 l gs col0 s gr gr
+
+% arrowhead
+n 4080 4170 m 4200 4200 l 4080 4230 l 4080 4200 l 4080 4170 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+9480 4170 m 9600 4200 l 9480 4230 l 9615 4230 l 9615 4170 l cp
+clip
+n 8700 4200 m 9600 4200 l gs col0 s gr gr
+
+% arrowhead
+n 9480 4170 m 9600 4200 l 9480 4230 l 9480 4200 l 9480 4170 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+11881 3482 m 12000 3450 l 11910 3535 l 12028 3469 l 11999 3416 l cp
+clip
+n 11325 3825 m 12000 3450 l gs col0 s gr gr
+
+% arrowhead
+n 11881 3482 m 12000 3450 l 11910 3535 l 11895 3508 l 11881 3482 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+11876 4050 m 12000 4050 l 11891 4108 l 12022 4075 l 12007 4017 l cp
+clip
+n 11400 4200 m 12000 4050 l gs col0 s gr gr
+
+% arrowhead
+n 11876 4050 m 12000 4050 l 11891 4108 l 11884 4079 l 11876 4050 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+11900 5028 m 12000 5100 l 11877 5083 l 12003 5133 l 12025 5078 l cp
+clip
+n 11250 4800 m 12000 5100 l gs col0 s gr gr
+
+% arrowhead
+n 11900 5028 m 12000 5100 l 11877 5083 l 11889 5055 l 11900 5028 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+11891 4517 m 12000 4575 l 11876 4575 l 12007 4608 l 12022 4550 l cp
+clip
+n 11400 4425 m 12000 4575 l gs col0 s gr gr
+
+% arrowhead
+n 11891 4517 m 12000 4575 l 11876 4575 l 11884 4546 l 11891 4517 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+11880 2820 m 12000 2850 l 11880 2880 l 12015 2880 l 12015 2820 l cp
+clip
+n 7800 3300 m 7800 2850 l 12000 2850 l gs col0 s gr gr
+
+% arrowhead
+n 11880 2820 m 12000 2850 l 11880 2880 l 11880 2850 l 11880 2820 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+10470 5295 m 10500 5175 l 10530 5295 l 10530 5160 l 10470 5160 l cp
+clip
+n 8700 8100 m 10500 8100 l 10500 5175 l gs col0 s gr gr
+
+% arrowhead
+n 10470 5295 m 10500 5175 l 10530 5295 l 10500 5295 l 10470 5295 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+4455 705 m 4425 825 l 4395 705 l 4395 840 l 4455 840 l cp
+clip
+n 4425 450 m 4425 825 l gs col0 s gr gr
+
+% arrowhead
+n 4455 705 m 4425 825 l 4395 705 l 4425 705 l 4455 705 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+ [60] 0 sd
+gs clippath
+3405 1695 m 3525 1725 l 3405 1755 l 3540 1755 l 3540 1695 l cp
+clip
+n 3525 1725 m 2400 1725 l 2400 3300 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 3405 1695 m 3525 1725 l 3405 1755 l 3405 1725 l 3405 1695 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+ [60] 0 sd
+gs clippath
+5445 1680 m 5325 1650 l 5445 1620 l 5310 1620 l 5310 1680 l cp
+clip
+n 5325 1650 m 7575 1650 l 7575 3300 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 5445 1680 m 5325 1650 l 5445 1620 l 5445 1650 l 5445 1680 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+ [60] 0 sd
+gs clippath
+4845 2670 m 4875 2550 l 4905 2670 l 4905 2535 l 4845 2535 l cp
+clip
+n 4875 2550 m 4875 3300 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 4845 2670 m 4875 2550 l 4905 2670 l 4875 2670 l 4845 2670 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+ [60] 0 sd
+n 7575 1650 m 10500 1650 l 10500 3375 l gs col0 s gr [] 0 sd
+% Polyline
+gs clippath
+6930 8070 m 7050 8100 l 6930 8130 l 7065 8130 l 7065 8070 l cp
+clip
+n 2400 5100 m 2400 8100 l 7050 8100 l gs col0 s gr gr
+
+% arrowhead
+n 6930 8070 m 7050 8100 l 6930 8130 l 6930 8100 l 6930 8070 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+6780 4170 m 6900 4200 l 6780 4230 l 6915 4230 l 6915 4170 l cp
+clip
+n 6000 4200 m 6900 4200 l gs col0 s gr gr
+
+% arrowhead
+n 6780 4170 m 6900 4200 l 6780 4230 l 6780 4200 l 6780 4170 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+7090 4932 m 7200 4875 l 7130 4977 l 7231 4887 l 7191 4843 l cp
+clip
+n 5850 6075 m 7200 4875 l gs col0 s gr gr
+
+% arrowhead
+n 7090 4932 m 7200 4875 l 7130 4977 l 7110 4955 l 7090 4932 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+7830 7155 m 7800 7275 l 7770 7155 l 7770 7290 l 7830 7290 l cp
+clip
+n 7800 7275 m 7800 5100 l gs col0 s gr gr
+
+% arrowhead
+n 7830 7155 m 7800 7275 l 7770 7155 l 7800 7155 l 7830 7155 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+8886 5583 m 8925 5700 l 8835 5615 l 8908 5729 l 8958 5697 l cp
+clip
+n 8400 4875 m 8925 5700 l gs col0 s gr gr
+
+% arrowhead
+n 8886 5583 m 8925 5700 l 8835 5615 l 8861 5599 l 8886 5583 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+8575 7427 m 8475 7500 l 8529 7389 l 8442 7492 l 8488 7531 l cp
+clip
+n 8850 7050 m 8475 7500 l gs col0 s gr gr
+
+% arrowhead
+n 8575 7427 m 8475 7500 l 8529 7389 l 8552 7408 l 8575 7427 l cp gs 0.00 setgray ef gr col0 s
+% Polyline
+gs clippath
+10106 5255 m 10200 5175 l 10155 5290 l 10233 5180 l 10184 5145 l cp
+clip
+n 9825 5700 m 10200 5175 l gs col0 s gr gr
+
+% arrowhead
+n 10106 5255 m 10200 5175 l 10155 5290 l 10130 5273 l 10106 5255 l cp gs 0.00 setgray ef gr col0 s
+/Helvetica ff 180.00 scf sf
+3900 1725 m
+gs 1 -1 sc (Config parser) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4425 4275 m
+gs 1 -1 sc (Language parser) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1725 4275 m
+gs 1 -1 sc (C Preprocessor) col0 sh gr
+/Helvetica ff 180.00 scf sf
+12150 3525 m
+gs 1 -1 sc (HTML) col0 sh gr
+/Helvetica ff 180.00 scf sf
+12150 4125 m
+gs 1 -1 sc (LaTeX) col0 sh gr
+/Helvetica ff 180.00 scf sf
+12150 4650 m
+gs 1 -1 sc (RTF) col0 sh gr
+/Helvetica ff 180.00 scf sf
+12150 2925 m
+gs 1 -1 sc (XML) col0 sh gr
+/Helvetica ff 180.00 scf sf
+3450 4500 m
+gs 1 -1 sc (input) col0 sh gr
+/Helvetica ff 180.00 scf sf
+3450 4725 m
+gs 1 -1 sc (string) col0 sh gr
+/Helvetica ff 180.00 scf sf
+6150 4500 m
+gs 1 -1 sc (entry) col0 sh gr
+/Helvetica ff 180.00 scf sf
+6150 4725 m
+gs 1 -1 sc (tree) col0 sh gr
+/Helvetica ff 180.00 scf sf
+525 3975 m
+gs 1 -1 sc (input files) col0 sh gr
+/Helvetica ff 180.00 scf sf
+12150 5175 m
+gs 1 -1 sc (Man) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4650 750 m
+gs 1 -1 sc (config file) col0 sh gr
+/Helvetica ff 180.00 scf sf
+7950 5475 m
+gs 1 -1 sc (drives) col0 sh gr
+/Helvetica ff 180.00 scf sf
+8850 4050 m
+gs 1 -1 sc (drives) col0 sh gr
+/Helvetica ff 180.00 scf sf
+2475 3150 m
+gs 1 -1 sc (get settings) col0 sh gr
+/Helvetica ff 180.00 scf sf
+6675 5550 m
+gs 1 -1 sc (entry) col0 sh gr
+/Helvetica ff 180.00 scf sf
+6675 5775 m
+gs 1 -1 sc (tree) col0 sh gr
+/Helvetica ff 180.00 scf sf
+9525 5325 m
+gs 1 -1 sc (drives) col0 sh gr
+/Helvetica ff 180.00 scf sf
+8700 7500 m
+gs 1 -1 sc (drives) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4575 6675 m
+gs 1 -1 sc (tag file parser) col0 sh gr
+/Helvetica ff 180.00 scf sf
+8925 6525 m
+gs 1 -1 sc (Doc Parser) col0 sh gr
+/Helvetica ff 180.00 scf sf
+7275 8175 m
+gs 1 -1 sc (Source Parser) col0 sh gr
+/Helvetica ff 180.00 scf sf
+7200 4275 m
+gs 1 -1 sc (Data organiser) col0 sh gr
+/Helvetica ff 180.00 scf sf
+9750 4275 m
+gs 1 -1 sc (Output generators) col0 sh gr
+/Helvetica ff 180.00 scf sf
+8775 8325 m
+gs 1 -1 sc (drives) col0 sh gr
+$F2psEnd
+rs
diff --git a/doc/archoverview.gif b/doc/archoverview.gif
new file mode 100644
index 0000000..f404076
--- /dev/null
+++ b/doc/archoverview.gif
Binary files differ
diff --git a/doc/config.doc b/doc/config.doc
index dbb0e53..b9f0e56 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -166,6 +166,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_short_names SHORT_NAMES
<li> \refitem cfg_show_include_files SHOW_INCLUDE_FILES
<li> \refitem cfg_show_used_files SHOW_USED_FILES
+<li> \refitem cfg_skip_function_macros SKIP_FUNCTION_MACROS
<li> \refitem cfg_sort_member_docs SORT_MEMBER_DOCS
<li> \refitem cfg_source_browser SOURCE_BROWSER
<li> \refitem cfg_strip_code_comments STRIP_CODE_COMMENTS
@@ -1070,6 +1071,14 @@ EXTRA_PACKAGES = times
The macro definition that is found in the sources will be used.
Use the \c PREDEFINED tag if you want to use a different macro definition.
+\anchor cfg_skip_function_macros
+<dt>\c SKIP_FUNCTION_MACROS <dd>
+ \addindex SKIP_FUNCTION_MACROS
+ If the \c SKIP_FUNCTION_MACROS tag is set to \c YES (the default) then
+ doxygen's preprocessor will remove all function-like macros that are alone
+ on a line and do not end with a semicolon. Such function macros are typically
+ used for boiler-plate code, and will confuse the parser if not removed.
+
</dl>
\subsection config_extref External reference options
\anchor cfg_tagfiles
diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex
index be93b99..bc1dfbb 100644
--- a/doc/doxygen_manual.tex
+++ b/doc/doxygen_manual.tex
@@ -16,6 +16,7 @@
\usepackage{a4wide}
\usepackage{makeidx}
\usepackage{fancyhdr}
+\usepackage{graphicx}
\usepackage{epsf}
\usepackage{doxygen}
\usepackage{multicol}
@@ -68,6 +69,8 @@ Written by Dimitri van Heesch\\[2ex]
\input{config}
\input{commands}
\input{htmlcmds}
+\part{Developers Manual}
+\input{arch}
\input{langhowto}
\printindex
\end{document}
diff --git a/doc/index.doc b/doc/index.doc
index 9c030cb..47248d1 100644
--- a/doc/index.doc
+++ b/doc/index.doc
@@ -73,7 +73,7 @@ but is set-up to be highly portable. As a result, it runs on most
other Unix flavors as well. Furthermore, an executable for
Windows 9x/NT is also available.
-This manual is divided into two parts, each of which is divided into several
+This manual is divided into three parts, each of which is divided into several
sections.
The first part forms a user manual:
@@ -117,11 +117,17 @@ The second part forms a reference manual:
used within the documentation.
<li>Section \ref htmlcmds shows an overview of the HTML commands that
can be used within the documentation.
+</ul>
+
+The third part provides information for developers:
+
+<ul>
+<li>Section \ref arch gives a global overview of how doxygen is internally
+ structured.
<li>Section \ref langhowto explains how to add support for new
output languages.
</ul>
-
<h2>Projects using doxygen</h2>
I have compiled a
diff --git a/doc/language.doc b/doc/language.doc
index 91046f2..101273f 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.9-20010819), 24 languages
+Currently (version 1.2.10), 24 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German,